// component from https://tailwindui.com/components/application-ui/overlays/dialogs import { Dialog, Transition } from '@headlessui/react'; import { XMarkIcon } from '@heroicons/react/24/outline'; import { ForwardedRef, Fragment, ReactNode, forwardRef, useEffect, useImperativeHandle, useState, } from 'react'; export interface ModalProps { children: ReactNode; title: string; onOpen?: () => void; onClose?: () => void; } export interface ModalHandle { openModal: () => void; closeModal: () => void; } export const Modal = forwardRef( ( { children, title, onOpen, onClose }: ModalProps, ref: ForwardedRef ) => { const [open, setOpen] = useState(false); useEffect(() => { if (open) { onOpen?.(); } else { onClose?.(); } }, [open, onOpen, onClose]); useImperativeHandle(ref, () => ({ closeModal: () => { setOpen(false); }, openModal: () => { setOpen(true); }, })); return (
{title}
{children}
); } );