From 0f52440946a268ce4b95e1fd5f4d0b808198b9c0 Mon Sep 17 00:00:00 2001 From: JubaAzul <118773284+JubaAzul@users.noreply.github.com> Date: Thu, 20 Mar 2025 17:14:29 -0400 Subject: [PATCH] =?UTF-8?q?[FEATURE]=20Ajout=20des=20r=C3=A9troactions=20p?= =?UTF-8?q?our=20les=20questions=20=C3=A0=20choix=20multiples=20et=20r?= =?UTF-8?q?=C3=A9ponses=20courtes=20Fixes=20#291?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../NumericalQuestionDisplay.tsx | 43 +++++++++++++++++-- 1 file changed, 39 insertions(+), 4 deletions(-) diff --git a/client/src/components/QuestionsDisplay/NumericalQuestionDisplay/NumericalQuestionDisplay.tsx b/client/src/components/QuestionsDisplay/NumericalQuestionDisplay/NumericalQuestionDisplay.tsx index b6fc138..e415c14 100644 --- a/client/src/components/QuestionsDisplay/NumericalQuestionDisplay/NumericalQuestionDisplay.tsx +++ b/client/src/components/QuestionsDisplay/NumericalQuestionDisplay/NumericalQuestionDisplay.tsx @@ -19,7 +19,12 @@ const NumericalQuestionDisplay: React.FC = (props) => { props; const [answer, setAnswer] = useState(passedAnswer || ''); const [isGoodAnswer, setisGoodAnswer] = useState(false); + const [isMultpleAnswer, setIsMultpleAnswer] = useState(false); + const correctAnswers = question.choices; + const correctAnswersList: number[] = []; + const correctAnswersPhrases: string[] = []; + let correctAnswer = ''; useEffect(() => { @@ -33,9 +38,29 @@ const NumericalQuestionDisplay: React.FC = (props) => { }, [answer]); const checkAnswer = () => { - const isCorrect = correctAnswer === answer; - setisGoodAnswer(isCorrect); + if(isMultpleAnswer) { + correctAnswers.forEach((answers) => { + if(isSimpleNumericalAnswer(answers) && answer === answers.number) { + setisGoodAnswer(true); + } else if(isRangeNumericalAnswer(answers) && answer as number >= answers.number - answers.range && answer as number <= answers.number + answers.range) { + setisGoodAnswer(true); + } else if(isHighLowNumericalAnswer(answers) && answer as number >= answers.numberLow && answer as number <= answers.numberHigh) { + setisGoodAnswer(true); + } + } + ) + ; + } else { + if(isSimpleNumericalAnswer(answers) && answer === answers.number) { + setisGoodAnswer(true); + } else if(isRangeNumericalAnswer(answers) && answer as number >= answers.number - answers.range && answer as number <= answers.number + answers.range) { + setisGoodAnswer(true); + } else if(isHighLowNumericalAnswer(answers) && answer as number >= answers.numberLow && answer as number <= answers.numberHigh) { + setisGoodAnswer(true); + } + }; }; + //const isSingleAnswer = correctAnswers.length === 1; if (isSimpleNumericalAnswer(correctAnswers[0])) { @@ -47,8 +72,18 @@ const NumericalQuestionDisplay: React.FC = (props) => { const choice = correctAnswers[0] as HighLowNumericalAnswer; correctAnswer = `Entre ${choice.numberLow} et ${choice.numberHigh}`; } else if (isMultipleNumericalAnswer(correctAnswers[0])) { - correctAnswer = `MultipleNumericalAnswer is not supported yet`; - } else { + setIsMultpleAnswer(true); + correctAnswers.forEach((answers) => { + if(isSimpleNumericalAnswer(answers)) { + correctAnswersPhrases.push(`${(answers as SimpleNumericalAnswer).number}`); + } else if(isRangeNumericalAnswer(answers)) { + correctAnswersPhrases.push(`Entre ${answers.number - answers.range} et ${answers.number + answers.range}`); + } else if(isHighLowNumericalAnswer(answers)) { + correctAnswersPhrases.push(`Entre ${answers.numberLow} et ${answers.numberHigh}`); + } + }); + } + else { throw new Error('Unknown numerical answer type'); }