import { createRoot } from "react-dom/client"; import { ANIMATION_DURATION } from "../helpers/consts"; import { Provider } from "react-redux"; import store from "../store"; import "../less/dialog.less"; interface DialogConfig { className: string; useAppContext?: boolean; clickSpaceDestroy?: boolean; } interface Props extends DialogConfig, DialogProps { children: React.ReactNode; } const BaseDialog: React.FC = (props: Props) => { const { children, className, clickSpaceDestroy, destroy } = props; const handleSpaceClicked = () => { if (clickSpaceDestroy) { destroy(); } }; return (
e.stopPropagation()}> {children}
); }; export function showDialog( config: DialogConfig, DialogComponent: React.FC, props?: Omit ): DialogCallback { const tempDiv = document.createElement("div"); const dialog = createRoot(tempDiv); document.body.append(tempDiv); setTimeout(() => { tempDiv.firstElementChild?.classList.add("showup"); }, 0); const cbs: DialogCallback = { destroy: () => { tempDiv.firstElementChild?.classList.remove("showup"); tempDiv.firstElementChild?.classList.add("showoff"); setTimeout(() => { dialog.unmount(); tempDiv.remove(); }, ANIMATION_DURATION); }, }; const dialogProps = { ...props, destroy: cbs.destroy, } as T; let Fragment = ( ); if (config.useAppContext) { Fragment = {Fragment}; } dialog.render(Fragment); return cbs; }