import { useState, useEffect } from 'react'; import { Server, Play, Square, Terminal, FolderOpen, HardDrive, Settings, Plus, Users as UsersIcon, LogOut } from 'lucide-react'; import Console from './components/Console'; import FileManager from './components/FileManager'; import Stats from './components/Stats'; import ServerSettings from './components/ServerSettings'; import CreateServerModal from './components/CreateServerModal'; import Users from './components/Users'; import Auth from './components/Auth'; import ErrorBoundary from './components/ErrorBoundary'; import axios from 'axios'; import { API_URL } from './config'; function App() { const [token, setToken] = useState(localStorage.getItem('token')); const [user, setUser] = useState(null); const [servers, setServers] = useState([]); const [selectedServer, setSelectedServer] = useState(null); const [activeTab, setActiveTab] = useState('console'); const [showCreateModal, setShowCreateModal] = useState(false); const [showUsers, setShowUsers] = useState(false); const [connectionError, setConnectionError] = useState(false); useEffect(() => { if (token) { loadUser(); loadServers(); const interval = setInterval(loadServers, 5000); return () => clearInterval(interval); } }, [token]); const loadUser = async () => { try { const { data } = await axios.get(`${API_URL}/api/auth/me`, { headers: { Authorization: `Bearer ${token}` } }); setUser(data); } catch (error) { console.error('Ошибка загрузки пользователя:', error); handleLogout(); } }; const loadServers = async () => { try { const { data } = await axios.get(`${API_URL}/api/servers`, { headers: { Authorization: `Bearer ${token}` } }); setServers(data); setConnectionError(false); } catch (error) { console.error('Ошибка загрузки серверов:', error); if (error.response?.status === 401) { handleLogout(); } else { setConnectionError(true); } } }; const handleLogin = async (username, password, isLogin) => { const endpoint = isLogin ? '/api/auth/login' : '/api/auth/register'; const { data } = await axios.post(`${API_URL}${endpoint}`, { username, password }); localStorage.setItem('token', data.access_token); setToken(data.access_token); setUser({ username: data.username, role: data.role }); }; const handleLogout = () => { localStorage.removeItem('token'); setToken(null); setUser(null); setServers([]); setSelectedServer(null); }; const handleServerDeleted = () => { setSelectedServer(null); loadServers(); }; const startServer = async (serverName) => { try { const response = await axios.post( `${API_URL}/api/servers/${serverName}/start`, {}, { headers: { Authorization: `Bearer ${token}` } } ); console.log('Сервер запущен:', response.data); setTimeout(() => { loadServers(); }, 1000); } catch (error) { console.error('Ошибка запуска сервера:', error); alert(error.response?.data?.detail || 'Ошибка запуска сервера'); } }; const stopServer = async (serverName) => { try { const response = await axios.post( `${API_URL}/api/servers/${serverName}/stop`, {}, { headers: { Authorization: `Bearer ${token}` } } ); console.log('Сервер остановлен:', response.data); setTimeout(() => { loadServers(); }, 1000); } catch (error) { console.error('Ошибка остановки сервера:', error); alert(error.response?.data?.detail || 'Ошибка остановки сервера'); } }; if (!token) { return ; } if (showUsers) { return (

MC Panel

{user?.username} ({user?.role === 'admin' ? 'Админ' : 'Пользователь'})
); } return (

MC Panel

{connectionError && (
⚠️ Нет связи с сервером
)} {user?.username} ({user?.role === 'admin' ? 'Админ' : 'Пользователь'}) {user?.role === 'admin' && ( )}
{selectedServer ? ( <>
{activeTab === 'console' && } {activeTab === 'files' && } {activeTab === 'stats' && } {activeTab === 'settings' && ( )}
) : (

Выберите сервер

)}
{showCreateModal && ( setShowCreateModal(false)} onCreated={loadServers} /> )}
); } export default App;