import React, { useEffect, useState } from 'react'; import { useParams, useNavigate } from 'react-router-dom'; import { useAuth } from '../context/AuthContext'; import { useRoom } from '../hooks/useRoom'; import QRCode from 'qrcode'; const RoomPage = () => { const { roomCode } = useParams(); const navigate = useNavigate(); const { user } = useAuth(); const { room, participants, loading, error, joinRoom, startGame } = useRoom(roomCode); const [qrCode, setQrCode] = useState(''); const [joined, setJoined] = useState(false); useEffect(() => { const generateQR = async () => { try { const url = `${window.location.origin}/join-room?code=${roomCode}`; const qr = await QRCode.toDataURL(url); setQrCode(qr); } catch (err) { console.error('QR generation error:', err); } }; if (roomCode) { generateQR(); } }, [roomCode]); useEffect(() => { const handleJoin = async () => { if (room && user && !joined) { const isParticipant = participants.some((p) => p.userId === user.id); if (!isParticipant) { try { await joinRoom(room.id, user.id, user.name || 'Гость', 'PLAYER'); setJoined(true); } catch (error) { console.error('Join error:', error); } } else { setJoined(true); } } }; handleJoin(); }, [room, user, participants, joined, joinRoom]); const handleStartGame = () => { startGame(); navigate(`/game/${roomCode}`); }; if (loading) { return
Загрузка комнаты...
; } if (error) { return (

Ошибка

{error}

); } if (!room) { return (

Комната не найдена

); } const isHost = user && room.hostId === user.id; return (

Комната: {room.code}

Статус: {room.status === 'WAITING' ? 'Ожидание игроков' : room.status}

Игроков: {participants.length}/{room.maxPlayers}

{qrCode && (

QR-код для присоединения:

QR Code
)}

Участники:

    {participants.map((participant) => (
  • {participant.name} {participant.role === 'HOST' && '(Ведущий)'} {participant.role === 'SPECTATOR' && '(Зритель)'}
  • ))}
{isHost && room.status === 'WAITING' && ( )}
); }; export default RoomPage;