[FEATURE] Ajout des rétroactions pour les questions à choix multiples et réponses courtes

Fixes #291
This commit is contained in:
JubaAzul 2025-03-20 17:14:29 -04:00
parent 8bf28e725b
commit 0f52440946

View file

@ -19,7 +19,12 @@ const NumericalQuestionDisplay: React.FC<Props> = (props) => {
props; props;
const [answer, setAnswer] = useState<AnswerType>(passedAnswer || ''); const [answer, setAnswer] = useState<AnswerType>(passedAnswer || '');
const [isGoodAnswer, setisGoodAnswer] = useState<boolean>(false); const [isGoodAnswer, setisGoodAnswer] = useState<boolean>(false);
const [isMultpleAnswer, setIsMultpleAnswer] = useState<boolean>(false);
const correctAnswers = question.choices; const correctAnswers = question.choices;
const correctAnswersList: number[] = [];
const correctAnswersPhrases: string[] = [];
let correctAnswer = ''; let correctAnswer = '';
useEffect(() => { useEffect(() => {
@ -33,9 +38,29 @@ const NumericalQuestionDisplay: React.FC<Props> = (props) => {
}, [answer]); }, [answer]);
const checkAnswer = () => { const checkAnswer = () => {
const isCorrect = correctAnswer === answer; if(isMultpleAnswer) {
setisGoodAnswer(isCorrect); 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; //const isSingleAnswer = correctAnswers.length === 1;
if (isSimpleNumericalAnswer(correctAnswers[0])) { if (isSimpleNumericalAnswer(correctAnswers[0])) {
@ -47,8 +72,18 @@ const NumericalQuestionDisplay: React.FC<Props> = (props) => {
const choice = correctAnswers[0] as HighLowNumericalAnswer; const choice = correctAnswers[0] as HighLowNumericalAnswer;
correctAnswer = `Entre ${choice.numberLow} et ${choice.numberHigh}`; correctAnswer = `Entre ${choice.numberLow} et ${choice.numberHigh}`;
} else if (isMultipleNumericalAnswer(correctAnswers[0])) { } else if (isMultipleNumericalAnswer(correctAnswers[0])) {
correctAnswer = `MultipleNumericalAnswer is not supported yet`; setIsMultpleAnswer(true);
} else { 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'); throw new Error('Unknown numerical answer type');
} }