diff --git a/src/components/quiz/endQuizModal/endQuizModal.tsx b/src/components/quiz/endQuizModal/endQuizModal.tsx index 8661268f3b470dfbac91153c5179edfc76341e60..ee9b042e63410b1720d0847be8e2338bb31793d3 100644 --- a/src/components/quiz/endQuizModal/endQuizModal.tsx +++ b/src/components/quiz/endQuizModal/endQuizModal.tsx @@ -2,6 +2,8 @@ import "./endQuizModal.css"; import {ModalButton} from "../modalButton/modalButton.tsx"; import {useNavigate} from "react-router-dom"; import {Quiz} from "../../../models/Quiz.ts"; +import {useQuizService} from "../../../services/QuizService.ts"; +import HttpError from "../../../services/HttpError.ts"; interface Props { isOpen: boolean; @@ -13,6 +15,23 @@ export const EndQuizModal = ({ isOpen, onClose, quiz }: Props) => { if (!isOpen) return null; const navigate = useNavigate(); + const {restartQuiz} = useQuizService() + + const handleRestartPress = async () => { + const isRestarted = await restartQuiz(quiz.id); + if (HttpError.isHttpError(isRestarted)) { + console.log(isRestarted.message); + return + } + if (!isRestarted) { + return; + } + // navigate(`/home`); + window.location.reload(); + + // navigate(`/quiz/${quiz.id}`); + } + const handleBackToMenu = () => { navigate("/home"); } @@ -37,7 +56,7 @@ export const EndQuizModal = ({ isOpen, onClose, quiz }: Props) => { /> </div> <div className="end-quiz-modal-button-container"> - <ModalButton text="RESTART" onClick={onClose} isLeftButton={true} isDisabled={false}/> + <ModalButton text="RESTART" onClick={handleRestartPress} isLeftButton={true} isDisabled={false}/> <ModalButton text="BACK TO MENU" onClick={handleBackToMenu} isLeftButton={false} isDisabled={false}/> </div> </div> diff --git a/src/routes/quiz/playingQuiz.tsx b/src/routes/quiz/playingQuiz.tsx index c7fa9e97e1bbd8f621a6fe2190d9569313df9e6f..85a26b586e30103ff830f12d0de7519ebfe40518 100644 --- a/src/routes/quiz/playingQuiz.tsx +++ b/src/routes/quiz/playingQuiz.tsx @@ -34,7 +34,7 @@ export function PlayingQuiz() { setErrorMessage(quizFetched.message); return; } - if (quizFetched.questionIndex >= quizFetched.questionCount) { + if (quizFetched.questionIndex-1 >= quizFetched.questionCount) { setQuizState(QuizState.ERROR); setErrorMessage("You already finished the quiz"); return; diff --git a/src/services/QuizService.ts b/src/services/QuizService.ts index dba04f75acc1725929a7d3e1d086249a893da47c..32519d738d2e157970f1b33856ba9f58d91c3093 100644 --- a/src/services/QuizService.ts +++ b/src/services/QuizService.ts @@ -166,6 +166,26 @@ export const useQuizService = () => { } }; + const restartQuiz = async (id: string) : Promise<boolean | HttpError> => { + try { + const requestBody = { + id + }; + + await axios.patch(`${url}/quiz/restart`, requestBody, { + withCredentials: true, + }); + + return true; + } catch (error: any) { + if (error.response) { + return new HttpError(error.response.status, error.response.data?.message); + } else { + return new HttpError(500, "Unexpected error: " + error.message); + } + } + } + return { generateQuiz: generateQuiz, @@ -174,5 +194,6 @@ export const useQuizService = () => { getRandomQuiz: getRandomQuiz, getCommunityQuiz: getCommunityQuiz, getCategories: getCategories, + restartQuiz: restartQuiz } }