import React, { createContext, useState, useContext } from 'react'; type ModalContextType = { showConfirm: (message: string) => Promise; showPrompt: ( message: string, defaultValue?: string ) => Promise; showAlert: (message: string) => Promise; }; const ModalContext = createContext(null!); interface ModalState { isOpen: boolean; message: string; defaultValue?: string; resolve: ((value: T) => void) | null; } export function ModalProvider({ children }: { children: React.ReactNode }) { const [confirmState, setConfirmState] = useState>({ isOpen: false, message: '', resolve: null, }); const [promptState, setPromptState] = useState< ModalState >({ isOpen: false, message: '', resolve: null }); const [alertState, setAlertState] = useState>({ isOpen: false, message: '', resolve: null, }); const inputRef = React.useRef(null); const showConfirm = (message: string): Promise => { return new Promise((resolve) => { setConfirmState({ isOpen: true, message, resolve }); }); }; const showPrompt = ( message: string, defaultValue?: string ): Promise => { return new Promise((resolve) => { setPromptState({ isOpen: true, message, defaultValue, resolve }); }); }; const showAlert = (message: string): Promise => { return new Promise((resolve) => { setAlertState({ isOpen: true, message, resolve }); }); }; const handleConfirm = (result: boolean) => { confirmState.resolve?.(result); setConfirmState({ isOpen: false, message: '', resolve: null }); }; const handlePrompt = (result?: string) => { promptState.resolve?.(result); setPromptState({ isOpen: false, message: '', resolve: null }); }; const handleAlertClose = () => { alertState.resolve?.(); setAlertState({ isOpen: false, message: '', resolve: null }); }; return ( {children} {/* Confirm Modal */} {confirmState.isOpen && (

{confirmState.message}

)} {/* Prompt Modal */} {promptState.isOpen && (

{promptState.message}

{ if (e.key === 'Enter') { handlePrompt((e.target as HTMLInputElement).value); } }} />
)} {/* Alert Modal */} {alertState.isOpen && (

{alertState.message}

)}
); } export function useModals() { const context = useContext(ModalContext); if (!context) throw new Error('useModals must be used within ModalProvider'); return context; }