import {Module} from "@/interfaces"; import useExamStore from "@/stores/examStore"; import {moduleLabels} from "@/utils/moduleUtils"; import {ReactNode, useEffect, useState} from "react"; import {BsBook, BsHeadphones, BsMegaphone, BsPen, BsStopwatch} from "react-icons/bs"; import ProgressBar from "../Low/ProgressBar"; interface Props { minTimer: number; module: Module; label?: string; exerciseIndex: number; totalExercises: number; disableTimer?: boolean; } export default function ModuleTitle({minTimer, module, label, exerciseIndex, totalExercises, disableTimer = false}: Props) { const [timer, setTimer] = useState(minTimer * 60); const setHasExamEnded = useExamStore((state) => state.setHasExamEnded); useEffect(() => { if (!disableTimer) { const timerInterval = setInterval(() => setTimer((prev) => prev - 1), 1000); return () => { clearInterval(timerInterval); }; } }, [disableTimer, minTimer]); useEffect(() => { if (timer <= 0) setHasExamEnded(true); }, [setHasExamEnded, timer]); const moduleIcon: {[key in Module]: ReactNode} = { reading: , listening: , writing: , speaking: , }; return ( <>
{timer > 0 && ( <> {Math.floor(timer / 60) .toString(10) .padStart(2, "0")} : {Math.floor(timer % 60) .toString(10) .padStart(2, "0")} )} {timer <= 0 && <>00:00}
{moduleIcon[module]}
{moduleLabels[module]} exam {label && `- ${label}`} Question {exerciseIndex}/{totalExercises}
); }