import React, { useState, useEffect } from "react"; import '../../public/assets/custom-radio.css' import QuizHeader from '~/components/QuizHeader' interface Questiondata { questionId: number; questionText: string; option1: string; option2: string; option3: string; option4: string; correctAnswer: string; quizId: string | null; moduleId: string; } interface Answerdata { questionId: number; selectedOption: number; } export default function QuizIndex() { const [questionData, setQuestionsData] = useState([]); const [currentQuestionIndex, setCurrentQuestionIndex] = useState(0); const [selectedOption, setSelectedOption] = useState(null); const [answers, setAnswers] = useState([]); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); const [timeLeft, setTimeLeft] = useState(120); // 120 seconds timer const [newQuizIds, setNewQuizIds] = useState(); useEffect(() => { fetch(`http://localhost:5174/api/question-list`) .then(res => { if (!res.ok) { throw new Error('Network response was not ok'); } return res.json(); }) .then(data => { console.log('Question Data', data); setQuestionsData(data); setNewQuizIds(data[0].newQuizId) setLoading(false); }) .catch(error => { console.error('An error occurred', error); setError(error); setLoading(false); }); }, []); useEffect(() => { if (timeLeft > 0) { const timerId = setInterval(() => setTimeLeft(timeLeft - 1), 1000); return () => clearInterval(timerId); } else { handleSubmit(); } }, [timeLeft]); if (loading) { return
Loading...
; } if (error) { return
Error: {error.message}
; } const handleOptionChange = (event: React.ChangeEvent) => { setSelectedOption(parseInt(event.target.value)); }; const handleNextQuestion = () => { if (selectedOption !== null) { const newAnswer = { questionId: questionData[currentQuestionIndex].questionId, selectedOption: selectedOption, quizId: newQuizIds }; setAnswers([...answers, newAnswer]); setSelectedOption(null); setCurrentQuestionIndex((prevIndex) => (prevIndex + 1) % questionData.length); console.log([...answers, newAnswer]); } else { alert("Please select an option before proceeding to the next question."); } }; const handleSubmit = () => { if (selectedOption !== null) { const newAnswer = { questionId: questionData[currentQuestionIndex].questionId, selectedOption: selectedOption, quizId: newQuizIds }; const finalAnswers = [...answers, newAnswer]; setAnswers(finalAnswers); console.log('Console Answers ', finalAnswers); const apiUrl = 'http://localhost:5174/api/save-quiz-response'; fetch(apiUrl, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(finalAnswers) }) .then(response => response.json()) .then(data => { if(data.success === true){ console.log('Find Success Message True') window.location.href = `/quiz/result?id=${newQuizIds}` } console.log('Success:', data); }) .catch((error) => { console.error('Error:', error); }); } else { alert("Please select an option before submitting the quiz."); } }; const currentQuestion = questionData[currentQuestionIndex]; return (

Time left: {timeLeft} seconds

{`Q${currentQuestion.questionId}. ${currentQuestion.questionText}`}

{currentQuestionIndex < questionData.length - 1 ? ( ) : ( )}
); }