"use client"; import { useState, useEffect, useCallback } from "react"; import Link from "next/link"; import { useParams } from "next/navigation"; import { ImportModal } from "@/components/import/ImportModal"; interface QuizItem { id: string; name: string; description: string | null; _count: { questions: number; attempts: number }; } const cache: Record = {}; export default function QuizzesPage() { const params = useParams(); const classSlug = params.classSlug as string; const [quizzes, setQuizzes] = useState(cache[classSlug] || []); const [loading, setLoading] = useState(!cache[classSlug]); const [animate] = useState(!cache[classSlug]); const [showImport, setShowImport] = useState(false); const [classId, setClassId] = useState(""); const fetchQuizzes = useCallback(async (cId: string) => { try { const res = await fetch(`/api/quizzes/list?classId=${cId}`); if (res.ok) { const data = await res.json(); const arr = Array.isArray(data) ? data : []; setQuizzes(arr); cache[classSlug] = arr; } } catch { setQuizzes([]); } finally { setLoading(false); } }, []); useEffect(() => { async function init() { try { const classRes = await fetch("/api/classes"); const classes = await classRes.json(); const cls = classes.find((c: { slug: string }) => c.slug === classSlug); if (!cls) { setLoading(false); return; } setClassId(cls.id); fetchQuizzes(cls.id); } catch { setLoading(false); } } init(); }, [classSlug, fetchQuizzes]); async function handleDelete(id: string, name: string) { if (!confirm(`Delete "${name}" and all its questions and attempts?`)) return; await fetch(`/api/quizzes/${id}`, { method: "DELETE" }); setQuizzes((prev) => prev.filter((q) => q.id !== id)); } return (
{/* Header */}

Quizzes

{/* Empty state */} {!loading && quizzes.length === 0 && (

No quizzes yet

Import your first quiz to start practicing

)} {/* Quiz grid */} {!loading && quizzes.length > 0 && (
{quizzes.map((quiz) => (

{quiz.name}

{quiz.description && (

{quiz.description}

)}
{quiz._count.questions} {quiz._count.questions === 1 ? "question" : "questions"} {quiz._count.attempts > 0 && ( {quiz._count.attempts} {quiz._count.attempts === 1 ? "attempt" : "attempts"} )}
Start Quiz
))}
)} {/* Import Modal */} {showImport && ( setShowImport(false)} onImported={() => { setShowImport(false); window.location.reload(); }} /> )}
); }