"use client"; import { useRouter } from "next/navigation"; import { useExam, useExamResults } from "@/context/ExamContext"; import { useEffect } from "react"; import React from "react"; import { ArrowLeft } from "lucide-react"; interface Question { solution: string; id: number; question: string; options: Record; } interface QuestionItemProps { question: Question; selectedAnswer: string | undefined; } const QuestionItem = React.memo( ({ question, selectedAnswer }) => (

{question.id}. {question.question}

{Object.entries(question.options).map(([key, value]) => ( ))}

Solution:

{question.solution}

) ); export default function ResultsPage() { const router = useRouter(); const { clearExam, isExamCompleted, getApiResponse } = useExam(); useEffect(() => { // Redirect if no completed exam if (!isExamCompleted()) { router.push("/unit"); return; } }, [isExamCompleted, router]); let examResults; try { examResults = useExamResults(); } catch (error) { // Handle case where there's no completed exam return (

Loading...

); } // Get API response data const apiResponse = getApiResponse(); const handleBackToHome = () => { clearExam(); // Give time for state to fully reset before pushing new route setTimeout(() => { router.push("/unit"); }, 400); // 50–100ms is usually enough }; const timeTaken = examResults.endTime && examResults.startTime ? Math.round( (examResults.endTime.getTime() - examResults.startTime.getTime()) / 1000 / 60 ) : 0; return (

Keep up the good work!

{/* Score Display */}
Accuracy:
{((examResults.score / examResults.totalQuestions) * 100).toFixed( 1 )} %
{apiResponse && (

Solutions

{apiResponse.questions?.map((question) => ( ))}
)} {/* Action Buttons */}
); }