import React, { useState, useEffect } from 'react'; import { useNavigate } from 'react-router-dom'; import { useAuth } from '../context/AuthContext'; import { useRoom } from '../hooks/useRoom'; import NameInputModal from '../components/NameInputModal'; const CreateRoom = () => { const navigate = useNavigate(); const { user, loginAnonymous, loading: authLoading } = useAuth(); const { createRoom, loading: roomLoading } = useRoom(); const [settings, setSettings] = useState({ maxPlayers: 10, allowSpectators: true, timerEnabled: false, timerDuration: 30, password: '', }); const [isNameModalOpen, setIsNameModalOpen] = useState(false); const [isHostNameModalOpen, setIsHostNameModalOpen] = useState(false); // Проверка авторизации и показ модального окна для ввода имени useEffect(() => { if (!authLoading && !user) { setIsNameModalOpen(true); } else if (user) { setIsNameModalOpen(false); } }, [authLoading, user]); // Обработка ввода имени и авторизация const handleNameSubmit = async (name) => { try { await loginAnonymous(name); setIsNameModalOpen(false); } catch (error) { console.error('Login error:', error); alert('Ошибка при авторизации. Попробуйте еще раз.'); } }; const handleCreateRoom = async () => { if (!user) { setIsNameModalOpen(true); return; } // Всегда спрашиваем имя хоста перед созданием комнаты setIsHostNameModalOpen(true); }; const handleHostNameSubmit = async (name) => { setIsHostNameModalOpen(false); try { // Очищаем пустой пароль перед отправкой const cleanSettings = { ...settings }; if (!cleanSettings.password || !cleanSettings.password.trim()) { delete cleanSettings.password; } else { cleanSettings.password = cleanSettings.password.trim(); } const room = await createRoom( user.id, undefined, cleanSettings, name.trim(), ); navigate(`/room/${room.code}`); } catch (error) { console.error('Error creating room:', error); alert('Ошибка создания комнаты'); } }; return (

Создать комнату

setSettings({ ...settings, maxPlayers: parseInt(e.target.value) }) } />
{settings.timerEnabled && (
setSettings({ ...settings, timerDuration: parseInt(e.target.value) }) } />
)}
setSettings({ ...settings, password: e.target.value }) } placeholder="Оставьте пустым для публичной комнаты" /> Если указан пароль, только игроки с паролем смогут присоединиться к комнате
setIsHostNameModalOpen(false)} title="Введите ваше имя как ведущего" description="Чтобы создать комнату, введите ваше имя как ведущего" />
); }; export default CreateRoom;