import { useAtomValue } from "jotai"; import type { ComponentType } from "react"; import { useCallback } from "react"; import { dialogsAtom, hideDialog } from "../lib/dialog"; import { Dialog, type DialogProps } from "./core/Dialog"; import { ErrorBoundary } from "./ErrorBoundary"; export type DialogInstance = { id: string; render: ComponentType<{ hide: () => void }>; } & Omit; export function Dialogs() { const dialogs = useAtomValue(dialogsAtom); return ( <> {dialogs.map(({ id, ...props }) => ( ))} ); } function DialogInstance({ render: Component, onClose, id, ...props }: DialogInstance) { const hide = useCallback(() => { hideDialog(id); }, [id]); const handleClose = useCallback(() => { onClose?.(); hideDialog(id); }, [id, onClose]); return ( ); }