import { useState } from 'react'; import { CourseLayout } from './CourseLayout'; import { Circle, CircleCheck, CircleX } from 'lucide-react'; import { cn } from '../../lib/classname'; import type { ChapterFileType, CourseFileType, LessonFileType, } from '../../lib/course'; type QuizViewProps = { courseId: string; chapterId: string; lessonId: string; title: string; course: CourseFileType & { chapters: ChapterFileType[]; }; lesson: LessonFileType; }; export function QuizView(props: QuizViewProps) { const { title, course, lesson, courseId, lessonId, chapterId } = props; const { chapters } = course; const { frontmatter } = lesson; const { questions = [] } = frontmatter; const [selectedOptions, setSelectedOptions] = useState< Record >({}); const [isSubmitted, setIsSubmitted] = useState(false); const isAllAnswered = Object.keys(selectedOptions).length === questions.length; const correctAnswerCount = questions.filter((question) => { const selectedOptionId = selectedOptions?.[question.id]; const correctAnswerId = question.options.find( (option) => option.isCorrectOption, )?.id; return selectedOptionId === correctAnswerId; }).length; return (

SQL Quiz: Intermediate

{questions.map((question) => { return ( { const selectedOptionId = selectedOptions?.[question.id]; let optionStatus: QuizOptionStatus = 'default'; if (option.isCorrectOption && isSubmitted) { optionStatus = 'correct'; } else if (selectedOptionId === option.id) { optionStatus = isSubmitted ? 'wrong' : 'selected'; } return { ...option, status: optionStatus, }; })} onOptionSelectChange={(id, optionId) => { setSelectedOptions((prev) => ({ ...prev, [id]: optionId, })); }} selectedOptionId={selectedOptions?.[question.id]} /> ); })}
{isSubmitted && (
You got {correctAnswerCount} out of {questions.length}{' '} questions right Move to Next Lesson
)}
); } type QuizItemProps = { id: number; title: string; options: QuizOptionProps[]; disabled?: boolean; selectedOptionId?: number; onOptionSelectChange?: (id: number, optionId: number) => void; }; export function QuizItem(props: QuizItemProps) { const { id, title, options, onOptionSelectChange, disabled } = props; return (

{title}

{options.map((option, index) => { return ( onOptionSelectChange?.(id, option.id)} disabled={disabled} /> ); })}
); } type QuizOptionStatus = 'selected' | 'wrong' | 'correct' | 'default'; type QuizOptionProps = { id: number; text: string; isCorrectOption?: boolean; status?: QuizOptionStatus; disabled?: boolean; onSelect?: () => void; }; export function QuizOption(props: QuizOptionProps) { const { text, status = 'default', onSelect, disabled } = props; return ( ); }