import React, { useEffect, useState } from 'react'; import { useParams, useNavigate } from 'react-router-dom'; import { useAuth } from '../context/AuthContext'; import { useRoom } from '../hooks/useRoom'; import { questionsApi } from '../services/api'; import Game from '../components/Game'; import './GamePage.css'; const GamePage = () => { const { roomCode } = useParams(); const navigate = useNavigate(); const { user } = useAuth(); const { room, participants, loading, error, updateQuestionPack, } = useRoom(roomCode); const [questions, setQuestions] = useState([]); const [currentQuestionIndex, setCurrentQuestionIndex] = useState(0); const [loadingQuestions, setLoadingQuestions] = useState(true); const [questionPacks, setQuestionPacks] = useState([]); const [selectedPackId, setSelectedPackId] = useState(''); const [updatingPack, setUpdatingPack] = useState(false); useEffect(() => { const loadQuestions = async () => { if (!room) return; setLoadingQuestions(true); try { if (room.questionPackId) { // Загружаем вопросы из пака if (room.questionPack && room.questionPack.questions) { const packQuestions = room.questionPack.questions; if (Array.isArray(packQuestions)) { setQuestions(packQuestions); } else { setQuestions([]); } } else { // Загружаем пак отдельно, если он не включен в room const response = await questionsApi.getPack(room.questionPackId); if (response.data && response.data.questions) { setQuestions( Array.isArray(response.data.questions) ? response.data.questions : [], ); } else { setQuestions([]); } } } else { // Пак не выбран, начинаем с пустого списка вопросов setQuestions([]); } } catch (error) { console.error('Error loading questions:', error); setQuestions([]); } finally { setLoadingQuestions(false); } }; loadQuestions(); }, [room]); useEffect(() => { const fetchPacks = async () => { if (user && room && room.hostId === user.id) { try { const response = await questionsApi.getPacks(user.id); setQuestionPacks(response.data); } catch (error) { console.error('Error fetching question packs:', error); } } }; fetchPacks(); }, [user, room]); useEffect(() => { if (room && room.questionPackId) { setSelectedPackId(room.questionPackId); } else { setSelectedPackId(''); } }, [room]); const handleUpdateQuestionPack = async () => { if (!selectedPackId) { alert('Выберите пак вопросов'); return; } try { setUpdatingPack(true); await updateQuestionPack(selectedPackId); // Перезагружаем вопросы после обновления пака const response = await questionsApi.getPack(selectedPackId); if (response.data && response.data.questions) { setQuestions( Array.isArray(response.data.questions) ? response.data.questions : [], ); setCurrentQuestionIndex(0); } } catch (error) { console.error('Error updating question pack:', error); alert('Ошибка при обновлении пака вопросов'); } finally { setUpdatingPack(false); } }; const handleQuestionsChange = (newQuestions) => { setQuestions(newQuestions); if (currentQuestionIndex >= newQuestions.length) { setCurrentQuestionIndex(0); } }; if (loading || loadingQuestions) { return
{error}
Вопросы не загружены. {isHost ? ' Выберите пак вопросов выше, чтобы начать игру.' : ' Ожидайте, пока ведущий добавит вопросы.'}