import { ReactNode, useRef } from "react"; import ReactDOM from "react-dom"; import classNames from "classnames"; import { ThemeColor, UiLogicError } from "../common"; import { useCloseDialog } from "./DialogProvider"; import "./Dialog.css"; const optionalPortalElement = document.getElementById("portal"); if (optionalPortalElement == null) { throw new UiLogicError(); } const portalElement = optionalPortalElement; interface DialogProps { color?: ThemeColor; children?: ReactNode; disableCloseOnClickOnOverlay?: boolean; } export default function Dialog({ color, children, disableCloseOnClickOnOverlay, }: DialogProps) { const closeDialog = useCloseDialog(); const lastPointerDownIdRef = useRef(null); return ReactDOM.createPortal(
{ lastPointerDownIdRef.current = e.pointerId; }} onPointerUp={(e) => { if (lastPointerDownIdRef.current === e.pointerId) { if (!disableCloseOnClickOnOverlay) closeDialog(); } lastPointerDownIdRef.current = null; }} />
{children}
, portalElement, ); }