EvalueTonSavoir/client/src/components/TeacherModeQuiz/TeacherModeQuiz.tsx

113 lines
4.1 KiB
TypeScript
Raw Normal View History

2024-03-29 20:08:34 -04:00
// TeacherModeQuiz.tsx
import React, { useEffect, useState } from 'react';
2025-01-25 02:02:18 -05:00
import QuestionComponent from '../QuestionsDisplay/QuestionDisplay';
2024-03-29 20:08:34 -04:00
import '../../pages/Student/JoinRoom/joinRoom.css';
import { QuestionType } from '../../Types/QuestionType';
2025-01-16 12:37:07 -05:00
import DisconnectButton from 'src/components/DisconnectButton/DisconnectButton';
import { Dialog, DialogTitle, DialogContent, DialogActions, Button } from '@mui/material';
2025-01-25 02:02:18 -05:00
import { Question } from 'gift-pegjs';
2024-03-29 20:08:34 -04:00
interface TeacherModeQuizProps {
questionInfos: QuestionType;
submitAnswer: (_answer: string | number | boolean, _idQuestion: number) => void;
2024-03-29 20:08:34 -04:00
disconnectWebSocket: () => void;
}
const TeacherModeQuiz: React.FC<TeacherModeQuizProps> = ({
questionInfos,
submitAnswer,
disconnectWebSocket
}) => {
const [isAnswerSubmitted, setIsAnswerSubmitted] = useState(false);
const [isFeedbackDialogOpen, setIsFeedbackDialogOpen] = useState(false);
const [answer, setAnswer] = useState<string | number | boolean>();
2024-03-29 20:08:34 -04:00
useEffect(() => {
// Close the feedback dialog when the question changes
handleFeedbackDialogClose();
2024-03-29 20:08:34 -04:00
setIsAnswerSubmitted(false);
setAnswer(JSON.parse(localStorage.getItem(`Answer${questionInfos.question.id}`)||'null'));
if (typeof answer !== "object" && typeof answer !== "undefined") {
setIsAnswerSubmitted(true);
setIsFeedbackDialogOpen(true);
}
}, [questionInfos.question , answer]);
2024-03-29 20:08:34 -04:00
const handleOnSubmitAnswer = (answer: string | number | boolean) => {
const idQuestion = Number(questionInfos.question.id) || -1;
2024-03-29 20:08:34 -04:00
submitAnswer(answer, idQuestion);
setAnswer(answer);
setIsFeedbackDialogOpen(true);
};
const handleFeedbackDialogClose = () => {
setIsFeedbackDialogOpen(false);
2024-03-29 20:08:34 -04:00
setIsAnswerSubmitted(true);
};
return (
<div className='room'>
<div className='roomHeader'>
<DisconnectButton
onReturn={disconnectWebSocket}
message={`Êtes-vous sûr de vouloir quitter?`} />
<div className='centerTitle'>
<div className='title'>Question {questionInfos.question.id}</div>
</div>
<div className='dumb'></div>
</div>
{isAnswerSubmitted ? (
<div>
En attente pour la prochaine question...
</div>
) : (
<QuestionComponent
handleOnSubmitAnswer={handleOnSubmitAnswer}
2025-01-25 02:02:18 -05:00
question={questionInfos.question as Question}
answer={answer}
/>
)}
<Dialog
open={isFeedbackDialogOpen}
onClose={handleFeedbackDialogClose}
>
<DialogTitle>Rétroaction</DialogTitle>
<DialogContent>
<div style={{
wordWrap: 'break-word',
whiteSpace: 'pre-wrap',
maxHeight: '400px',
overflowY: 'auto',
}}>
<div style={{ textAlign: 'left', fontWeight: 'bold', marginTop: '10px'}}
>Question : </div>
</div>
<QuestionComponent
handleOnSubmitAnswer={handleOnSubmitAnswer}
2025-01-25 02:02:18 -05:00
question={questionInfos.question as Question}
showAnswer={true}
answer={answer}
2024-03-29 20:08:34 -04:00
/>
</DialogContent>
<DialogActions>
<Button onClick={handleFeedbackDialogClose} color="primary">
OK
</Button>
</DialogActions>
</Dialog>
</div>
2024-03-29 20:08:34 -04:00
);
};
export default TeacherModeQuiz;