feat(results): add resutls page
fix(leaderboard): fix leaderboard fetch logic fix(test): fix navigation bug upon test quit
This commit is contained in:
@ -1,5 +1,5 @@
|
||||
import { useEffect, useState } from "react";
|
||||
import { useNavigate } from "react-router-dom";
|
||||
import { Navigate, useNavigate } from "react-router-dom";
|
||||
import {
|
||||
Card,
|
||||
CardContent,
|
||||
@ -39,6 +39,7 @@ import {
|
||||
} from "../../../components/ui/dialog";
|
||||
import { useExamNavigationGuard } from "../../../hooks/useExamNavGuard";
|
||||
import { useExamConfigStore } from "../../../stores/useExamConfigStore";
|
||||
import { useResults } from "../../../stores/useResults";
|
||||
|
||||
export const Test = () => {
|
||||
const sheetId = localStorage.getItem("activePracticeSheetId");
|
||||
@ -79,6 +80,8 @@ export const Test = () => {
|
||||
const goToQuestion = useSatExam((s) => s.goToQuestion);
|
||||
|
||||
const finishExam = useSatExam((s) => s.finishExam);
|
||||
const quitExam = useSatExam((s) => s.quitExam);
|
||||
const setResults = useResults((s) => s.setResults);
|
||||
|
||||
const startExam = async () => {
|
||||
if (!user || !sheetId) return;
|
||||
@ -181,6 +184,11 @@ export const Test = () => {
|
||||
|
||||
if (next?.status === "COMPLETED") {
|
||||
useExamConfigStore.getState().clearPayload();
|
||||
console.log(next.results);
|
||||
setResults(next.results);
|
||||
|
||||
// ✅ Store results first
|
||||
|
||||
finishExam();
|
||||
} else {
|
||||
await loadSessionQuestions(sessionId);
|
||||
@ -190,14 +198,20 @@ export const Test = () => {
|
||||
|
||||
const handleQuitExam = () => {
|
||||
useExamConfigStore.getState().clearPayload();
|
||||
finishExam();
|
||||
navigate("/student/home");
|
||||
|
||||
quitExam();
|
||||
};
|
||||
|
||||
useEffect(() => {
|
||||
resetExam(); // ✅ important
|
||||
}, [sheetId]);
|
||||
|
||||
useEffect(() => {
|
||||
return () => {
|
||||
resetExam();
|
||||
};
|
||||
}, []);
|
||||
|
||||
useEffect(() => {
|
||||
if (phase === "FINISHED") {
|
||||
const timer = setTimeout(() => {
|
||||
@ -402,7 +416,7 @@ export const Test = () => {
|
||||
{currentQuestion?.context && (
|
||||
<section className="h-100 overflow-y-auto px-10 pt-30">
|
||||
<p className="font-satoshi tracking-wide text-lg">
|
||||
{currentQuestion?.context}
|
||||
{renderQuestionText(currentQuestion?.context)}
|
||||
</p>
|
||||
</section>
|
||||
)}
|
||||
@ -611,6 +625,8 @@ export const Test = () => {
|
||||
<p className="text-lg text-gray-500">Redirecting to results...</p>
|
||||
</div>
|
||||
);
|
||||
case "QUIT":
|
||||
return <Navigate to="/student/home" replace />;
|
||||
|
||||
default:
|
||||
return null;
|
||||
|
||||
Reference in New Issue
Block a user