import { Dialog, Transition } from "@headlessui/react"; import { Fragment, useCallback, useEffect, useState } from "react"; import Button from "./Low/Button"; interface Props { isOpen: boolean; onClose: () => void; } export default function TimerEndedModal({ isOpen, onClose }: 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(() => { if (isClosing) return; setIsClosing(true); onClose(); const timer = setTimeout(() => { setIsClosing(false); }, 300); return () => clearTimeout(timer); }, [isClosing, onClose]); if (!mounted && !isOpen) return null; return ( setIsClosing(false)} beforeLeave={() => setIsClosing(true)} afterLeave={() => { setIsClosing(false); setMounted(false); }} > blockMultipleClicksClose()} className="relative z-50">
Time's up! The timer has ended! Your answers have been registered and saved, you will now move on to the next module (or to the finish screen, if this was the last one).
); }