// Dialog Context import React from 'react'; import Modal from '@/components/modal'; import type { ModalProps } from '@/components/modal'; export interface AlertProps extends Omit { onConfirm?: () => void; } export interface ConfirmProps extends ModalProps { onConfirm?: () => void; onCancel?: () => void; } export interface ModalItem extends ModalProps { id: number; } export interface DialogContextProps { alert: (config: AlertProps) => void; confirm: (config: ConfirmProps) => void; } export interface DialogProviderProps { children: React.ReactNode; } export const DialogContext = React.createContext({ alert: () => { }, confirm: () => { }, }); const DialogProvider: React.FC = ({ children }) => { const [dialogs, setDialogs] = React.useState([]); const alert = (config: AlertProps) => { const { onConfirm, size = 'md', ...rest } = config; setDialogs((before) => { const id = before[before.length - 1]?.id + 1 || 0; return [ ...before, { id, size, backdrop: 'blur', showCancel: false, onConfirm: () => { onConfirm?.(); setTimeout(() => { setDialogs((before) => before.filter((item) => item.id !== id)); }, 300); }, ...rest, }, ]; }); }; const confirm = (config: ConfirmProps) => { const { onConfirm, onCancel, size = 'md', ...rest } = config; setDialogs((before) => { const id = before[before.length - 1]?.id + 1 || 0; return [ ...before, { id, size, backdrop: 'blur', showCancel: true, onConfirm: () => { onConfirm?.(); setTimeout(() => { setDialogs((before) => before.filter((item) => item.id !== id)); }, 300); }, onCancel: () => { onCancel?.(); setTimeout(() => { setDialogs((before) => before.filter((item) => item.id !== id)); }, 300); }, ...rest, }, ]; }); }; return ( {children} {dialogs?.map(({ id, ...props }) => )} ); }; export default DialogProvider;