import { Dialog, Transition } from "@headlessui/react"; import { Fragment, useCallback, useEffect, useState } from "react"; import Button from "./Low/Button"; interface Props { isOpen: boolean; abandonPopupTitle: string; abandonPopupDescription: string; abandonConfirmButtonText: string; onAbandon: () => void; onCancel: () => void; } export default function AbandonPopup({ isOpen, abandonPopupTitle, abandonPopupDescription, abandonConfirmButtonText, onAbandon, onCancel }: Props) { const [isClosing, setIsClosing] = useState(false); const [mounted, setMounted] = useState(false); useEffect(() => { if (isOpen) { setMounted(true); } }, [isOpen]); useEffect(() => { if (!isOpen && mounted) { const timer = setTimeout(() => { setMounted(false); setIsClosing(false); }, 300); return () => clearTimeout(timer); } }, [isOpen, mounted]); const blockMultipleClicksClose = useCallback((cancel: boolean) => { if (isClosing) return; setIsClosing(true); const func = cancel ? onCancel : onAbandon; func(); const timer = setTimeout(() => { setIsClosing(false); }, 300); return () => clearTimeout(timer); }, [isClosing, onCancel, onAbandon]); if (!mounted && !isOpen) return null; return ( setIsClosing(false)} beforeLeave={() => setIsClosing(true)} afterLeave={() => { setIsClosing(false); setMounted(false); }} > blockMultipleClicksClose(true)} className="relative z-50">
{abandonPopupTitle} {abandonPopupDescription}
); }