import React, { useState } from "react"; import { createRoot } from "react-dom/client"; import * as AlertDialog from "@radix-ui/react-alert-dialog"; import Warning from "@/app/icons/warning.svg"; import Btn from "@/app/components/Btn"; interface ConfirmProps { onOk?: () => Promise | void; onCancel?: () => void; okText: string; cancelText: string; content: React.ReactNode; title: React.ReactNode; visible?: boolean; } const baseZIndex = 150; const Confirm = (props: ConfirmProps) => { const { visible, onOk, onCancel, okText, cancelText, content, title } = props; const [open, setOpen] = useState(false); const mergeOpen = visible ?? open; return (
 
{title} {content}
{ setOpen(false); onCancel?.(); }} text={cancelText} /> { const toDo = onOk?.(); if (toDo instanceof Promise) { toDo.then(() => { setOpen(false); }); } else { setOpen(false); } }} text={okText} />
 
); }; const div = document.createElement("div"); div.id = "confirm-root"; div.style.height = "0px"; document.body.appendChild(div); const show = (props: Omit) => { const root = createRoot(div); const closeModal = () => { root.unmount(); }; return new Promise((resolve) => { root.render( { closeModal(); resolve(false); }} onOk={() => { closeModal(); resolve(true); }} />, ); }); }; Confirm.show = show; export default Confirm;