import { Button, Dialog, DialogActions, DialogContent, DialogContentText, DialogTitle, } from "@mui/material"; import React, { PropsWithChildren } from "react"; type ConfirmContext = ( message: string, title?: string, confirmButton?: string ) => Promise; const ConfirmContextK = React.createContext(null); export function ConfirmDialogProvider( p: PropsWithChildren ): React.ReactElement { const [open, setOpen] = React.useState(false); const [title, setTitle] = React.useState(undefined); const [message, setMessage] = React.useState(""); const [confirmButton, setConfirmButton] = React.useState( undefined ); const cb = React.useRef void)>(null); const handleClose = (confirm: boolean) => { setOpen(false); if (cb.current !== null) cb.current(confirm); cb.current = null; }; const hook: ConfirmContext = (message, title, confirmButton) => { setTitle(title); setMessage(message); setConfirmButton(confirmButton); setOpen(true); return new Promise((res) => { cb.current = res; }); }; const keyUp = (e: React.KeyboardEvent) => { if (e.code === "Enter") handleClose(true); }; return ( <> {p.children} handleClose(false)} aria-labelledby="alert-dialog-title" aria-describedby="alert-dialog-description" onKeyUp={keyUp} > {title && {title}} {message} ); } export function useConfirm(): ConfirmContext { return React.useContext(ConfirmContextK)!; }