import { Badge } from '@/components/ui/badge'; import { Button } from '@/components/ui/button'; import { Card, CardContent } from '@/components/ui/card'; import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogTrigger } from '@/components/ui/dialog'; import { ScrollArea } from '@/components/ui/scroll-area'; import { CoursePlayerProps } from '@/types/page'; import { usePage } from '@inertiajs/react'; import { Award, CheckCircle2, Eye, Target, XCircle } from 'lucide-react'; import { useState } from 'react'; interface Props { quiz: SectionQuiz; submission: QuizSubmission; } const QuizResultDialog = ({ quiz, submission }: Props) => { const [open, setOpen] = useState(false); const { props } = usePage(); const { translate } = props; const { frontend } = translate; const isPassed = submission.is_passed; const percentage = Math.round((submission.total_marks / quiz.total_mark) * 100); // Helper function to parse JSON strings const parseJSON = (data: any): string[] => { if (typeof data === 'string') { try { return JSON.parse(data); } catch { return []; } } return Array.isArray(data) ? data : []; }; // Helper function to check if answer is correct const isAnswerCorrect = (question: QuizQuestion): boolean => { const userAnswer = question.answers && question.answers.length > 0 ? question.answers[0] : null; if (!userAnswer) return false; return userAnswer.is_correct; }; // Helper function to get user's answer const getUserAnswer = (question: QuizQuestion): string[] => { const userAnswer = question.answers && question.answers.length > 0 ? question.answers[0] : null; if (!userAnswer) return []; return parseJSON(userAnswer.answers); }; // Helper function to render HTML content const renderHTML = (html: string) => { return
; }; return ( {quiz.title} {/* Quiz Statistics */}

{percentage}%

Gesamtpunktzahl

{submission.total_marks}/{quiz.total_mark}

{frontend.total_marks}

{submission.correct_answers}

{frontend.correct_answers}

{submission.incorrect_answers}

{frontend.incorrect_answers}

{/* Questions and Answers */}

Quizfragen

{quiz.quiz_questions && quiz.quiz_questions.map((question, index) => { const isCorrect = isAnswerCorrect(question); const userAnswers = getUserAnswer(question); const correctAnswers = parseJSON(question.answer); const options = parseJSON(question.options); return ( {/* Question Header */}
{index + 1}.
{renderHTML(question.title)}
{isCorrect ? : } {isCorrect ? 'Richtig' : 'Falsch'}
{/* Options for single/multiple choice */} {(question.type === 'single' || question.type === 'multiple') && (
{options.map((option, optIndex) => { const isUserAnswer = userAnswers.includes(option); const isCorrectAnswer = correctAnswers.includes(option); return (
{option}
{isUserAnswer && ( Deine Antwort )} {isCorrectAnswer && }
); })}
)} {/* Boolean type */} {question.type === 'boolean' && (
{[{ value: 'True', label: 'Wahr' }, { value: 'False', label: 'Falsch' }].map((option) => { const isUserAnswer = userAnswers.includes(option.value); const isCorrectAnswer = correctAnswers.includes(option.value); return (
{option.label}
{isUserAnswer && ( Deine Antwort )} {isCorrectAnswer && }
); })}
)}
); })}
); }; export default QuizResultDialog;