From 9f15ca1e53e19930bc38d11f1496e620d9a43fd2 Mon Sep 17 00:00:00 2001 From: Arik Chakma Date: Thu, 3 Jul 2025 00:40:10 +0600 Subject: [PATCH] wip --- src/components/AIQuiz/AIQuizContent.tsx | 23 ++++++++- src/components/AIQuiz/AIQuizStripe.tsx | 63 +++++++++++++++++++++++++ 2 files changed, 85 insertions(+), 1 deletion(-) create mode 100644 src/components/AIQuiz/AIQuizStripe.tsx diff --git a/src/components/AIQuiz/AIQuizContent.tsx b/src/components/AIQuiz/AIQuizContent.tsx index 2fff2825a..21f45aeb7 100644 --- a/src/components/AIQuiz/AIQuizContent.tsx +++ b/src/components/AIQuiz/AIQuizContent.tsx @@ -6,6 +6,8 @@ import { QuizTopNavigation } from './QuizTopNavigation'; import { getPercentage } from '../../lib/number'; import { AIQuizResults } from './AIQuizResults'; import { flushSync } from 'react-dom'; +import { AIQuizStripe } from './AIQuizStripe'; +import { cn } from '../../lib/classname'; export type QuestionState = { isSubmitted: boolean; @@ -146,7 +148,12 @@ export function AIQuizContent(props: AIQuizContentProps) { }; return ( -
+
{shouldShowQuestions && ( )} + + {quizStatus === 'reviewing' && ( + { + setActiveQuestionIndex(questionIndex); + setQuizStatus('reviewing'); + }} + onComplete={() => { + setQuizStatus('submitted'); + }} + /> + )}
); } diff --git a/src/components/AIQuiz/AIQuizStripe.tsx b/src/components/AIQuiz/AIQuizStripe.tsx new file mode 100644 index 000000000..b40c422dc --- /dev/null +++ b/src/components/AIQuiz/AIQuizStripe.tsx @@ -0,0 +1,63 @@ +import { cn } from '../../lib/classname'; +import { + ArrowRightIcon, + CheckIcon, + SkipForwardIcon, + XIcon, +} from 'lucide-react'; +import type { QuestionState } from './AIQuizContent'; + +type AIQuizStripeProps = { + activeQuestionIndex: number; + questionStates: Record; + onReview?: (questionIndex: number) => void; + onComplete?: () => void; +}; + +export function AIQuizStripe(props: AIQuizStripeProps) { + const { activeQuestionIndex, questionStates, onReview, onComplete } = props; + + const states = Object.values(questionStates); + + return ( +
+
+
+ {states.map((state, quizIndex) => { + const { status } = state; + + const isActive = quizIndex === activeQuestionIndex; + const isCorrect = status === 'correct'; + const isIncorrect = status === 'incorrect'; + const isSkipped = status === 'skipped'; + + return ( + + ); + })} +
+ + +
+
+ ); +}