mirror of
https://github.com/ets-cfuhrman-pfe/EvalueTonSavoir.git
synced 2025-08-11 21:23:54 -04:00
Ajout boite dialog
This commit is contained in:
parent
b42cbb3647
commit
29924a6786
1 changed files with 53 additions and 27 deletions
|
|
@ -1,4 +1,3 @@
|
||||||
// ManageRoom.tsx
|
|
||||||
import React, { useEffect, useState } from 'react';
|
import React, { useEffect, useState } from 'react';
|
||||||
import { useNavigate, useParams } from 'react-router-dom';
|
import { useNavigate, useParams } from 'react-router-dom';
|
||||||
import { Socket } from 'socket.io-client';
|
import { Socket } from 'socket.io-client';
|
||||||
|
|
@ -9,13 +8,11 @@ import {
|
||||||
isHighLowNumericalAnswer
|
isHighLowNumericalAnswer
|
||||||
} from 'gift-pegjs/typeGuards';
|
} from 'gift-pegjs/typeGuards';
|
||||||
import LiveResultsComponent from 'src/components/LiveResults/LiveResults';
|
import LiveResultsComponent from 'src/components/LiveResults/LiveResults';
|
||||||
// import { QuestionService } from '../../../services/QuestionService';
|
|
||||||
import webSocketService, {
|
import webSocketService, {
|
||||||
AnswerReceptionFromBackendType
|
AnswerReceptionFromBackendType
|
||||||
} from '../../../services/WebsocketService';
|
} from '../../../services/WebsocketService';
|
||||||
import { QuizType } from '../../../Types/QuizType';
|
import { QuizType } from '../../../Types/QuizType';
|
||||||
import GroupIcon from '@mui/icons-material/Group';
|
import GroupIcon from '@mui/icons-material/Group';
|
||||||
|
|
||||||
import './manageRoom.css';
|
import './manageRoom.css';
|
||||||
import { ENV_VARIABLES } from 'src/constants';
|
import { ENV_VARIABLES } from 'src/constants';
|
||||||
import { StudentType, Answer } from '../../../Types/StudentType';
|
import { StudentType, Answer } from '../../../Types/StudentType';
|
||||||
|
|
@ -23,12 +20,12 @@ import LoadingCircle from 'src/components/LoadingCircle/LoadingCircle';
|
||||||
import { Refresh, Error } from '@mui/icons-material';
|
import { Refresh, Error } from '@mui/icons-material';
|
||||||
import StudentWaitPage from 'src/components/StudentWaitPage/StudentWaitPage';
|
import StudentWaitPage from 'src/components/StudentWaitPage/StudentWaitPage';
|
||||||
import DisconnectButton from 'src/components/DisconnectButton/DisconnectButton';
|
import DisconnectButton from 'src/components/DisconnectButton/DisconnectButton';
|
||||||
//import QuestionNavigation from 'src/components/QuestionNavigation/QuestionNavigation';
|
|
||||||
import QuestionDisplay from 'src/components/QuestionsDisplay/QuestionDisplay';
|
import QuestionDisplay from 'src/components/QuestionsDisplay/QuestionDisplay';
|
||||||
import ApiService from '../../../services/ApiService';
|
import ApiService from '../../../services/ApiService';
|
||||||
import { QuestionType } from 'src/Types/QuestionType';
|
import { QuestionType } from 'src/Types/QuestionType';
|
||||||
import { RoomType } from 'src/Types/RoomType';
|
import { RoomType } from 'src/Types/RoomType';
|
||||||
import { Button, Tooltip, NativeSelect } from '@mui/material';
|
import { Button, NativeSelect } from '@mui/material';
|
||||||
|
import { Dialog, DialogActions, DialogContent, DialogTitle, TextField } from '@mui/material';
|
||||||
|
|
||||||
const ManageRoom: React.FC = () => {
|
const ManageRoom: React.FC = () => {
|
||||||
const navigate = useNavigate();
|
const navigate = useNavigate();
|
||||||
|
|
@ -44,6 +41,8 @@ const ManageRoom: React.FC = () => {
|
||||||
const [quizStarted, setQuizStarted] = useState(false);
|
const [quizStarted, setQuizStarted] = useState(false);
|
||||||
const [rooms, setRooms] = useState<RoomType[]>([]);
|
const [rooms, setRooms] = useState<RoomType[]>([]);
|
||||||
const [selectedRoomId, setSelectedRoomId] = useState<string>('');
|
const [selectedRoomId, setSelectedRoomId] = useState<string>('');
|
||||||
|
const [openDialog, setOpenDialog] = useState(false);
|
||||||
|
const [newRoomTitle, setNewRoomTitle] = useState('');
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const fetchData = async () => {
|
const fetchData = async () => {
|
||||||
|
|
@ -65,24 +64,30 @@ const ManageRoom: React.FC = () => {
|
||||||
};
|
};
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
// Mettre à jour roomName quand une salle est sélectionnée
|
|
||||||
if (selectedRoomId && rooms.length > 0) {
|
if (selectedRoomId && rooms.length > 0) {
|
||||||
const selectedRoom = rooms.find((room) => room._id === selectedRoomId);
|
const selectedRoom = rooms.find((room) => room._id === selectedRoomId);
|
||||||
setRoomName(selectedRoom ? selectedRoom.title : '');
|
setRoomName(selectedRoom ? selectedRoom.title : '');
|
||||||
} else {
|
} else {
|
||||||
setRoomName(''); // Réinitialiser si aucune salle sélectionnée
|
setRoomName('');
|
||||||
}
|
}
|
||||||
}, [selectedRoomId, rooms]); // Déclenché quand la sélection ou la liste change
|
}, [selectedRoomId, rooms]);
|
||||||
|
|
||||||
|
const handleDialogClose = () => {
|
||||||
|
setOpenDialog(false);
|
||||||
|
};
|
||||||
|
|
||||||
const handleCreateRoom = async () => {
|
const handleCreateRoom = async () => {
|
||||||
|
setOpenDialog(true);
|
||||||
|
};
|
||||||
|
const handleSubmitRoom = async () => {
|
||||||
try {
|
try {
|
||||||
const roomTitle = prompt('Veuillez saisir le titre de la nouvelle salle');
|
if (newRoomTitle) {
|
||||||
if (roomTitle) {
|
await ApiService.createRoom(newRoomTitle);
|
||||||
await ApiService.createRoom(roomTitle);
|
|
||||||
const userRooms = await ApiService.getUserRooms();
|
const userRooms = await ApiService.getUserRooms();
|
||||||
setRooms(userRooms as RoomType[]);
|
setRooms(userRooms as RoomType[]);
|
||||||
const newlyCreatedRoom = userRooms[userRooms.length - 1] as RoomType;
|
const newlyCreatedRoom = userRooms[userRooms.length - 1] as RoomType;
|
||||||
setSelectedRoomId(newlyCreatedRoom._id);
|
setSelectedRoomId(newlyCreatedRoom._id);
|
||||||
|
setOpenDialog(false);
|
||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('Error creating Room:', error);
|
console.error('Error creating Room:', error);
|
||||||
|
|
@ -472,7 +477,6 @@ const ManageRoom: React.FC = () => {
|
||||||
|
|
||||||
<div className="dumb"></div>
|
<div className="dumb"></div>
|
||||||
</div>
|
</div>
|
||||||
{/* bloc Room */}
|
|
||||||
<div className="room">
|
<div className="room">
|
||||||
<div className="select">
|
<div className="select">
|
||||||
<NativeSelect
|
<NativeSelect
|
||||||
|
|
@ -492,22 +496,44 @@ const ManageRoom: React.FC = () => {
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className="actions" style={{ display: 'flex', justifyContent: 'flex-end' }}>
|
<div className="actions" style={{ display: 'flex', justifyContent: 'flex-end' }}>
|
||||||
<Tooltip title="Ajouter une nouvelle salle" placement="top">
|
<Button
|
||||||
<Button
|
variant="contained"
|
||||||
variant="contained"
|
color="primary"
|
||||||
color="primary"
|
onClick={handleCreateRoom}
|
||||||
onClick={handleCreateRoom}
|
style={{
|
||||||
style={{
|
width: 'auto',
|
||||||
width: 'auto',
|
marginLeft: '30px',
|
||||||
marginLeft: '30px',
|
height: '40px',
|
||||||
height: '40px',
|
padding: '0 20px'
|
||||||
padding: '0 20px'
|
}}
|
||||||
}}
|
>
|
||||||
>
|
Ajouter une nouvelle salle
|
||||||
Ajouter une nouvelle salle
|
</Button>
|
||||||
</Button>
|
|
||||||
</Tooltip>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
{/* Dialog pour créer une salle */}
|
||||||
|
<Dialog open={openDialog} onClose={handleDialogClose} maxWidth="sm" fullWidth>
|
||||||
|
<DialogTitle>Créer une nouvelle salle</DialogTitle>
|
||||||
|
<DialogContent>
|
||||||
|
<TextField
|
||||||
|
autoFocus
|
||||||
|
margin="dense"
|
||||||
|
label="Titre de la salle"
|
||||||
|
type="text"
|
||||||
|
fullWidth
|
||||||
|
value={newRoomTitle}
|
||||||
|
onChange={(e) => setNewRoomTitle(e.target.value)}
|
||||||
|
/>
|
||||||
|
</DialogContent>
|
||||||
|
<DialogActions>
|
||||||
|
<Button onClick={handleDialogClose} color="secondary">
|
||||||
|
Annuler
|
||||||
|
</Button>
|
||||||
|
<Button onClick={handleSubmitRoom} color="primary">
|
||||||
|
Créer
|
||||||
|
</Button>
|
||||||
|
</DialogActions>
|
||||||
|
</Dialog>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* the following breaks the css (if 'room' classes are nested) */}
|
{/* the following breaks the css (if 'room' classes are nested) */}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue