import { useEffect, useRef, useState } from "preact/hooks"; import { StatusManager } from "./statusManager.tsx"; import { IS_BROWSER } from "$fresh/runtime.ts"; import { PlayerData } from "../util/players.ts"; import { Button } from "../components/Button.tsx"; import { JSX } from "preact/jsx-runtime"; import { FunctionComponent } from "preact"; export function PlayerList( { whitelist, banlist, oplist }: { whitelist: PlayerData[]; banlist: PlayerData[]; oplist: PlayerData[]; }, ) { const [players, setPlayers] = useState([]); useEffect(() => { if (!IS_BROWSER) return; configureEventSource(); }, []); const eventSource = useRef(); const configureEventSource = () => { if (eventSource.current?.OPEN) eventSource.current.close(); eventSource.current = new EventSource("/api/players"); eventSource.current.addEventListener("players", (e) => { setPlayers(JSON.parse(e.data)); }); }; const followStatusManager = (action: string) => { if (action === "started" || action === "restarted") { configureEventSource(); } }; return (

Active Players

{players.map((p) => )}

Whitelisted Players

{whitelist.map((p) => )}

Banned Players

{banlist.map((p) => ( {!!p.banReason &&

{p.banReason}

}
))}

Ops

{oplist.map((p) => )}
); } const PlayerCard: FunctionComponent<{ player: PlayerData }> = ( { player, children }, ) => { return (
{`${player.username}'s

{player.username}

UUID: {player.id}
{children}
); };