"use client"; import { Dispatch, SetStateAction } from "react"; // import { useRouter } from "next/router"; import { Drawer } from "vaul"; import { Dialog, DialogContent } from "@/components/ui/dialog"; import { useMediaQuery } from "@/hooks/use-media-query"; import { cn } from "@/lib/utils"; interface ModalProps { children: React.ReactNode; className?: string; showModal?: boolean; setShowModal?: Dispatch>; onClose?: () => void; desktopOnly?: boolean; preventDefaultClose?: boolean; } export function Modal({ children, className, showModal, setShowModal, onClose, desktopOnly, preventDefaultClose, }: ModalProps) { // const router = useRouter(); const closeModal = ({ dragged }: { dragged?: boolean } = {}) => { if (preventDefaultClose && !dragged) { return; } // fire onClose event if provided onClose && onClose(); // if setShowModal is defined, use it to close modal if (setShowModal) { setShowModal(false); } // else, this is intercepting route @modal // else { // router.back(); // } }; const { isMobile } = useMediaQuery(); if (isMobile && !desktopOnly) { return ( { if (!open) { closeModal({ dragged: true }); } }} >
{children} ); } return ( { if (!open) { closeModal(); } }} > e.preventDefault()} onCloseAutoFocus={(e) => e.preventDefault()} className={cn( "overflow-hidden p-0 md:max-w-md md:rounded-2xl md:border", className, )} > {children} ); }