import { useMemo, useState } from 'react'; import { useSession } from '../context/SessionContext.jsx'; const MODES = [ { key: 'open', label: 'Open' }, { key: 'turns', label: 'Turns' }, { key: 'admin', label: 'Admin' }, { key: 'lockdown', label: 'Lockdown' }, ]; export default function AdminPanel() { const { session, lockRover, setMode, requestControl } = useSession(); const roster = useMemo(() => session?.roster ?? [], [session?.roster]); const [lockStates, setLockStates] = useState({}); const isAdmin = session?.role === 'admin' || session?.role === 'lockdown' || session?.role === 'lockdown-admin'; const currentMode = session?.mode ?? 'open'; const handleLockToggle = async (roverId, locked) => { try { await lockRover(roverId, locked); setLockStates((prev) => ({ ...prev, [roverId]: locked })); } catch (err) { alert(err.message); } }; const handleModeChange = async (event) => { const mode = event.target.value; try { await setMode(mode); } catch (err) { alert(err.message); } }; const handleForceControl = async (roverId) => { try { await requestControl(roverId, { force: true }); } catch (err) { alert(err.message); } }; const lockMap = useMemo(() => { const map = {}; roster.forEach((rover) => { map[rover.id] = lockStates[rover.id] ?? rover.locked; }); return map; }, [roster, lockStates]); if (!isAdmin) return null; return (
Admin controls
{roster.map((rover) => (

{rover.name}

{lockMap[rover.id] ? 'locked' : 'unlocked'}

))}
); }