import { useState, useEffect } from 'react' import { useNavigate } from 'react-router-dom' import { getServers } from '../api' import { useUser } from '../context/UserContext' import ServerCard from '../components/ServerCard' import SettingsModal from '../components/SettingsModal' import UserManagement from '../components/UserManagement' export default function Dashboard({ onLogout }) { const navigate = useNavigate() const { user, token, loading: userLoading, isSuperadmin, role } = useUser() const [servers, setServers] = useState([]) const [loading, setLoading] = useState(true) const [error, setError] = useState('') const [showSettings, setShowSettings] = useState(false) const [showUserMgmt, setShowUserMgmt] = useState(false) const [currentTime, setCurrentTime] = useState(new Date()) const fetchServers = async () => { try { const data = await getServers(token) setServers(data) setError('') } catch (err) { setError('CONNECTION_FAILED: Unable to reach server cluster') if (err.message.includes('401') || err.message.includes('403')) { onLogout() } } finally { setLoading(false) } } useEffect(() => { if (!userLoading) { fetchServers() const interval = setInterval(fetchServers, 10000) return () => clearInterval(interval) } }, [token, userLoading]) useEffect(() => { const timer = setInterval(() => setCurrentTime(new Date()), 1000) return () => clearInterval(timer) }, []) const roleLabels = { user: 'VIEWER', moderator: 'OPERATOR', superadmin: 'SYSADMIN' } if (userLoading) { return (
INITIALIZING SYSTEM...
) } const onlineCount = servers.filter(s => s.running).length const totalPlayers = servers.reduce((sum, s) => sum + (s.players?.online || 0), 0) return (
{/* Matrix rain overlay */}
{/* Header */}

GAMESERVER_MONITOR

{onlineCount}/{servers.length} NODES | {totalPlayers} USERS_CONNECTED
{currentTime.toLocaleTimeString('de-DE', { hour: '2-digit', minute: '2-digit', second: '2-digit' })}
{user?.username?.toUpperCase()}
[{roleLabels[role]}]
{isSuperadmin && ( )}
{/* System Status Bar */}
> SYSTEM_STATUS: {error ? 'ERROR' : 'OPERATIONAL'}
{error && (
! {error}
)}
{loading ? (
LOADING_NODES...
{[...Array(5)].map((_, i) => (
))}
) : (
{servers.map((server, index) => (
navigate(`/server/${server.id}`)} />
))}
)} {/* Footer Stats */}
REFRESH_RATE: 10s PROTOCOL: RCON/SSH METRICS: PROMETHEUS BUILD: v2.0.0-matrix
{/* Modals */} {showSettings && ( setShowSettings(false)} /> )} {showUserMgmt && ( setShowUserMgmt(false)} /> )}
) }