// NumericalQuestion.tsx import React, { useEffect, useState } from 'react'; import '../questionStyle.css'; import { Button, TextField } from '@mui/material'; import { FormattedTextTemplate } from '../../GiftTemplate/templates/TextTypeTemplate'; import { NumericalQuestion, SimpleNumericalAnswer, RangeNumericalAnswer, HighLowNumericalAnswer } from 'gift-pegjs'; import { isSimpleNumericalAnswer, isRangeNumericalAnswer, isHighLowNumericalAnswer, isMultipleNumericalAnswer } from 'gift-pegjs/typeGuards'; import { AnswerType } from 'src/pages/Student/JoinRoom/JoinRoom'; import { useQuizContext } from 'src/pages/Student/JoinRoom/QuizContext'; import { QuizContext } from 'src/pages/Student/JoinRoom/QuizContext'; const NumericalQuestionDisplay: React.FC = () => { const { questions, index, answers , submitAnswer } = useQuizContext(); const question = questions[Number(index)].question as NumericalQuestion; const answer = answers[Number(index)]?.answer; const [actualAnswer, setActualAnswer] = useState(answer || []); const correctAnswers = question.choices; let correctAnswer = ''; useEffect(() => { if (answer !== null && answer !== undefined) { setActualAnswer(answer); } }, [answer]); //const isSingleAnswer = correctAnswers.length === 1; if (isSimpleNumericalAnswer(correctAnswers[0])) { correctAnswer = `${(correctAnswers[0] as SimpleNumericalAnswer).number}`; } else if (isRangeNumericalAnswer(correctAnswers[0])) { const choice = correctAnswers[0] as RangeNumericalAnswer; correctAnswer = `Entre ${choice.number - choice.range} et ${choice.number + choice.range}`; } else if (isHighLowNumericalAnswer(correctAnswers[0])) { 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 { throw new Error('Unknown numerical answer type'); } return ( {({ showAnswer }) => (
{showAnswer ? ( <>
La bonne réponse est: {correctAnswer}
Votre réponse est: {actualAnswer.toString()} {question.formattedGlobalFeedback &&
} ) : ( <>
) => { setActualAnswer([e.target.valueAsNumber]); }} inputProps={{ 'data-testid': 'number-input' }} />
{question.formattedGlobalFeedback && showAnswer && (
)} {submitAnswer && ( )} )}
)} ); }; export default NumericalQuestionDisplay;