Skip to content

Commit

Permalink
add state for quiz result
Browse files Browse the repository at this point in the history
  • Loading branch information
aaronmcadam committed Aug 5, 2024
1 parent 177a61b commit d233d52
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 10 deletions.
6 changes: 3 additions & 3 deletions src/components/quiz-result.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,17 @@ import { CheckCircle } from "lucide-react";
import { CircleX } from "lucide-react";

export type QuizResultProps = {
status: "accepted" | "rejected";
result: "accepted" | "rejected";
};

export function QuizResult({ status }: QuizResultProps) {
export function QuizResult({ result }: QuizResultProps) {
return (
<div>
<h2 className="font-medium text-2xl text-center mt-16">
Finished! Your result is...
</h2>
<div className="mt-16">
{status === "accepted" ? <SuccessAlert /> : <ErrorAlert />}
{result === "accepted" ? <SuccessAlert /> : <ErrorAlert />}
</div>
</div>
);
Expand Down
26 changes: 19 additions & 7 deletions src/components/quiz.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,9 @@ export type QuizQuestion = {
};

export function Quiz() {
const [result, setResult] = React.useState<"accepted" | "rejected" | null>(
null,
);
const [questions, setQuestions] = React.useState<QuizQuestion[]>([]);

// TODO: Perf: we may want to somehow preload the display HTML because
Expand All @@ -50,12 +53,23 @@ export function Quiz() {
);
}, []);

React.useEffect(() => {
const isRejected = questions.some((q) => q.response?.isRejection);
const isAccepted =
questions.length > 0
? questions.every((q) => q.status === "complete")
: false;

if (isRejected) {
setResult("rejected");
} else if (isAccepted) {
setResult("accepted");
}
}, [questions]);

const [currentIndex, setCurrentIndex] = React.useState(0);
const currentQuestion = questions[currentIndex];

const isRejected = questions.some((q) => q.response?.isRejection);
const isAccepted = questions.every((q) => q.status === "complete");

function handleOptionClick(option: Option) {
// Update the current question with its response and "complete" status
// and set the next question as "upcoming"
Expand Down Expand Up @@ -99,10 +113,8 @@ export function Quiz() {

return (
<div className="flex-grow m-auto max-w-2xl pt-24">
{isRejected ? (
<QuizResult status="rejected" />
) : isAccepted ? (
<QuizResult status="accepted" />
{result ? (
<QuizResult result={result} />
) : currentQuestion ? (
<div>
<QuizNavigation
Expand Down

0 comments on commit d233d52

Please sign in to comment.