import {makeApiUrl, Player} from './serverCalls.tsx'; import DataTable from "./components/DataTable.tsx"; import {useQuery} from "@tanstack/react-query"; function numberSorter(a: number, b: number) { return b - a; } export default function Scoreboard({}: {}) { const query = useQuery({ queryKey: ['scores'], refetchInterval: 5000, queryFn: async () => { const url = makeApiUrl('/scores'); const response = await fetch(url, {method: 'GET'}); if (!response.ok) throw new Error(`response failed with code ${response.status} (${response.status})${await response.text()}`) return await response.json() as Player[]; } }); if (query.isError) return

{query.error.message}

; if (query.isPending) return

loading...

; return p.scores.kills.toString(), sorter: (a, b) => numberSorter(a.scores.kills, b.scores.kills) }, { field: 'deaths', visualize: p => p.scores.deaths.toString(), sorter: (a, b) => numberSorter(a.scores.deaths, b.scores.deaths) }, { field: 'ratio', visualize: p => p.scores.ratio.toString(), sorter: (a, b) => numberSorter(a.scores.ratio, b.scores.ratio) }, { field: 'walls', visualize: p => p.scores.wallsDestroyed.toString(), sorter: (a, b) => numberSorter(a.scores.wallsDestroyed, b.scores.wallsDestroyed) }, { field: 'bullets', visualize: p => p.scores.shotsFired.toString(), sorter: (a, b) => numberSorter(a.scores.shotsFired, b.scores.shotsFired) }, { field: 'powerUps', visualize: p => p.scores.powerUpsCollected.toString(), sorter: (a, b) => numberSorter(a.scores.powerUpsCollected, b.scores.powerUpsCollected) }, { field: 'distance', visualize: p => p.scores.pixelsMoved.toString(), sorter: (a, b) => numberSorter(a.scores.pixelsMoved, b.scores.pixelsMoved) }, { field: 'score', visualize: p => p.scores.overallScore.toString(), sorter: (a, b) => numberSorter(a.scores.overallScore, b.scores.overallScore) } ]}/> }