import { createContext, useCallback, useContext, useMemo, useState } from 'react'; import { Icon } from './icons'; const ConfirmContext = createContext(null); export function ConfirmProvider({ children }) { const [dialog, setDialog] = useState(null); const confirm = useCallback((options) => { return new Promise((resolve) => { setDialog({ title: options.title || '请确认操作', description: options.description || '', confirmText: options.confirmText || '确认', cancelText: options.cancelText || '取消', tone: options.tone || 'danger', resolve, }); }); }, []); const close = useCallback((result) => { setDialog((current) => { current?.resolve(result); return null; }); }, []); const value = useMemo(() => ({ confirm }), [confirm]); return ( {children} {dialog ? (
close(false)}>
event.stopPropagation()} role="dialog" aria-modal="true" aria-labelledby="confirm-title">

{dialog.title}

{dialog.description ?

{dialog.description}

: null}
) : null}
); } export function useConfirm() { const context = useContext(ConfirmContext); if (!context) { throw new Error('useConfirm must be used within ConfirmProvider'); } return context; }