import React, { MouseEventHandler, ReactNode, useEffect } from "react"; import ReactDOM from "react-dom"; import ClickAwayHandler from "@/components/ClickAwayHandler"; import { Drawer } from "vaul"; import useWindowDimensions from "@/hooks/useWindowDimensions"; import { Button } from "@/components/ui/button"; type Props = { toggleModal: Function; children: ReactNode; className?: string; dismissible?: boolean; }; export default function Modal({ toggleModal, className, children, dismissible = true, }: Props) { const [drawerIsOpen, setDrawerIsOpen] = React.useState(true); const { width } = useWindowDimensions(); useEffect(() => { if (width >= 640) { document.body.style.overflow = "hidden"; document.body.style.position = "relative"; return () => { document.body.style.overflow = "auto"; document.body.style.position = ""; }; } }, []); if (width < 640) { return ( dismissible && setDrawerIsOpen(false)} onAnimationEnd={(isOpen) => !isOpen && toggleModal()} dismissible={dismissible} >
{children}
); } else { return ReactDOM.createPortal(
dismissible && toggleModal()} className={`w-full mt-auto sm:m-auto sm:w-11/12 sm:max-w-xl ${ className || "" }`} >
{dismissible && ( )} {children}
, document.body ); } }