import { createContext, useContext, useState, ReactNode } from 'react'; import type { PropsWithChildren } from 'react'; import { Confirm, ConfirmProps } from '@/ui/confirm'; type ConfirmContextValue = { confirm: (props: ConfirmProps) => Promise; }; type ConfirmContextProps = PropsWithChildren>; export const ConfirmContext = createContext({ confirm: () => Promise.resolve(false), }); export const useConfirm = () => useContext(ConfirmContext); export const ConfirmProvider = ({ children, }: PropsWithChildren) => { const [confirmRecord, setConfirmRecord] = useState>( {} ); return ( { return new Promise(resolve => { const confirmId = String(Date.now()); const closeHandler = () => { delete confirmRecord[confirmId]; setConfirmRecord({ ...confirmRecord }); }; setConfirmRecord(oldConfirmRecord => { return { ...oldConfirmRecord, [confirmId]: ( { closeHandler(); onCancel?.(); resolve(false); }} onConfirm={() => { closeHandler(); onConfirm?.(); resolve(true); }} /> ), }; }); }); }, }} > {children} {Object.entries(confirmRecord).map(([confirmId, confirmNode]) => { return
{confirmNode}
; })}
); }; export default ConfirmProvider;