change design and queries to api

This commit is contained in:
rgrgogu
2026-07-20 11:28:51 +08:00
parent 793b24c019
commit f23b022a6f
6 changed files with 107 additions and 59 deletions
@@ -75,7 +75,6 @@ const QuizBlock = ({ quiz, loading = false, onStart, onDraft, onRefreshSession,
const [submitting, setSubmitting] = useState(false);
const [starting, setStarting] = useState(false);
const [result, setResult] = useState(null);
const [reviewAttempted, setReviewAttempted] = useState(false);
const [submitError, setSubmitError] = useState(null);
// ── Timer state ───────────────────────────────────────────────────────────
@@ -107,7 +106,6 @@ const QuizBlock = ({ quiz, loading = false, onStart, onDraft, onRefreshSession,
setResult(null);
setRemainingSeconds(null);
setTimeExpired(false);
setReviewAttempted(false);
sessionRef.current = { sessionId: null, expiresAt: null };
timerFiredRef.current = false;
const draft = quiz?.active_session?.draft_answers ?? {};
@@ -222,7 +220,6 @@ const QuizBlock = ({ quiz, loading = false, onStart, onDraft, onRefreshSession,
setResult(null);
setRemainingSeconds(null);
setTimeExpired(false);
setReviewAttempted(false);
sessionRef.current = { sessionId: null, expiresAt: null };
timerFiredRef.current = false;
setStage("intro");
@@ -266,7 +263,6 @@ const QuizBlock = ({ quiz, loading = false, onStart, onDraft, onRefreshSession,
};
const handleGoToReview = () => {
setReviewAttempted(true);
setStage("review");
};
@@ -910,11 +906,11 @@ const QuizBlock = ({ quiz, loading = false, onStart, onDraft, onRefreshSession,
<Button
className="w-full"
onClick={handleGoToReview}
disabled={submitting}
disabled={submitting || unansweredCount > 0}
>
Review &amp; submit
</Button>
{reviewAttempted && unansweredCount > 0 && (
{unansweredCount > 0 && (
<p className="text-xs text-red-600 dark:text-red-400 text-center">
Answer all {total} questions first — {unansweredCount} remaining.
</p>
@@ -968,7 +964,7 @@ const QuizBlock = ({ quiz, loading = false, onStart, onDraft, onRefreshSession,
<ChevronLeft className="size-4" />
Previous
</Button>
<Button onClick={handleNext} disabled={submitting}>
<Button onClick={handleNext} disabled={submitting || (isLast && unansweredCount > 0)}>
{submitting ? "Submitting…" : isLast ? "Review & submit" : "Next"}
{!submitting && <ChevronRight className="size-4" />}
</Button>
@@ -1079,11 +1075,16 @@ const QuizBlock = ({ quiz, loading = false, onStart, onDraft, onRefreshSession,
<ChevronLeft className="size-4" />
Previous
</Button>
<Button onClick={handleNext} disabled={submitting}>
<Button onClick={handleNext} disabled={submitting || (isLast && unansweredCount > 0)}>
{submitting ? "Submitting…" : isLast ? "Review answers" : "Next"}
{!submitting && <ChevronRight className="size-4" />}
</Button>
</div>
{isLast && unansweredCount > 0 && (
<p className="text-xs text-red-600 dark:text-red-400 text-center">
Answer all {total} questions first — {unansweredCount} remaining.
</p>
)}
</div>
</div>
);