import useExamStore from "@/stores/examStore"; import {useEffect, useState} from "react"; import {motion} from "framer-motion"; import TimerEndedModal from "../TimerEndedModal"; import clsx from "clsx"; import {BsStopwatch} from "react-icons/bs"; interface Props { minTimer: number; disableTimer?: boolean; standalone?: boolean; } const Timer: React.FC = ({minTimer, disableTimer, standalone = false}) => { const [timer, setTimer] = useState(minTimer * 60); const [showModal, setShowModal] = useState(false); const [warningMode, setWarningMode] = useState(false); const setHasExamEnded = useExamStore((state) => state.setHasExamEnded); const {timeSpent} = useExamStore((state) => state); useEffect(() => setTimer((prev) => prev - timeSpent), [timeSpent]); useEffect(() => { if (!disableTimer) { const timerInterval = setInterval(() => setTimer((prev) => prev - 1), 1000); return () => { clearInterval(timerInterval); }; } }, [disableTimer, minTimer]); useEffect(() => { if (timer <= 0) setShowModal(true); }, [timer]); useEffect(() => { if (timer < 300 && !warningMode) setWarningMode(true); }, [timer, warningMode]); return ( <> { setHasExamEnded(true); setShowModal(false); }} /> {timer > 0 && ( <> {Math.floor(timer / 60) .toString(10) .padStart(2, "0")} : {Math.floor(timer % 60) .toString(10) .padStart(2, "0")} )} {timer <= 0 && <>00:00} ); }; export default Timer;