import { useState, useEffect } from "react"; import { useNavigate } from "react-router-dom"; import { useQuery } from "@tanstack/react-query"; import { Dialog, DialogContent, DialogHeader, DialogTitle } from "@/components/ui/dialog"; import { Button } from "@/components/ui/button"; import { Badge } from "@/components/ui/badge"; import { Clock, Calendar, PlayCircle, AlertCircle } from "lucide-react"; import { assignmentsService } from "@/services/assignments.service"; import type { StudentExamAssignment } from "@/types"; export default function ExamPopup() { const navigate = useNavigate(); const [open, setOpen] = useState(false); const [dismissed, setDismissed] = useState>(new Set()); const { data } = useQuery({ queryKey: ["student-my-exams"], queryFn: () => assignmentsService.getStudentExams(), refetchInterval: 30000, }); const exams = (data?.items ?? []) as StudentExamAssignment[]; const pendingExams = exams.filter((e) => !dismissed.has(e.id)); useEffect(() => { if (pendingExams.length > 0 && !open) { setOpen(true); } }, [pendingExams.length]); if (pendingExams.length === 0) return null; const formatDate = (iso: string | null) => { if (!iso) return "—"; const d = new Date(iso); return d.toLocaleDateString("en-US", { month: "short", day: "numeric", year: "numeric" }) + " " + d.toLocaleTimeString("en-US", { hour: "2-digit", minute: "2-digit" }); }; const handleStart = (exam: StudentExamAssignment) => { setOpen(false); navigate(`/student/exam/${exam.exam_id}/session`); }; const handleDismiss = (id: number) => { setDismissed((prev) => new Set([...prev, id])); const remaining = pendingExams.filter((e) => e.id !== id); if (remaining.length === 0) setOpen(false); }; return ( Upcoming Exams ({pendingExams.length})
{pendingExams.map((exam) => (

{exam.exam_title || exam.schedule_name}

{exam.schedule_state === "active" ? "Active Now" : exam.schedule_state}
{exam.schedule_name && exam.exam_title && (

{exam.schedule_name}

)}
From: {formatDate(exam.start_date)} To: {formatDate(exam.end_date)}
{!exam.can_start && ( {exam.schedule_state === "planned" ? "Exam will be available once it becomes active" : "Exam is not currently active"} )}
))}
); }