servicepoint-tanks/tank-frontend/src/PlayerInfo.tsx

46 lines
1.5 KiB
TypeScript
Raw Normal View History

2024-04-17 23:09:01 +02:00
import {useQuery} from '@tanstack/react-query'
2024-04-21 14:34:45 +02:00
import {makeApiUrl, Player} from './serverCalls';
2024-04-13 23:07:08 +02:00
import {Guid} from "./Guid.ts";
import Column from "./components/Column.tsx";
2024-04-13 17:56:33 +02:00
2024-04-19 13:50:06 +02:00
function ScoreRow({name, value}: {
name: string;
value?: any;
}) {
return <tr>
<td>{name}</td>
<td>{value ?? '?'}</td>
</tr>;
}
2024-04-17 23:09:01 +02:00
export default function PlayerInfo({playerId}: { playerId: Guid }) {
const query = useQuery({
queryKey: ['player'],
refetchInterval: 1000,
queryFn: async () => {
2024-04-21 14:34:45 +02:00
const url = makeApiUrl('/player');
2024-04-17 23:09:01 +02:00
url.searchParams.set('id', playerId);
2024-04-13 17:56:33 +02:00
2024-04-17 23:09:01 +02:00
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;
}
});
2024-04-13 17:56:33 +02:00
2024-04-14 19:05:37 +02:00
return <Column className='PlayerInfo'>
2024-04-13 23:53:09 +02:00
<h3>
2024-04-17 23:09:01 +02:00
{query.isPending && 'loading...'}
{query.isSuccess && `Playing as ${query.data.name}`}
2024-04-13 23:53:09 +02:00
</h3>
2024-04-17 23:09:01 +02:00
{query.isError && <p>{query.error.message}</p>}
{query.isSuccess && <table>
2024-04-14 00:49:39 +02:00
<tbody>
2024-04-19 13:50:06 +02:00
<ScoreRow name='kills' value={query.data?.scores?.kills}/>
<ScoreRow name='deaths' value={query.data?.scores?.deaths}/>
<ScoreRow name='walls' value={query.data?.scores?.wallsDestroyed}/>
2024-04-14 00:49:39 +02:00
</tbody>
2024-04-17 23:09:01 +02:00
</table>}
2024-04-13 23:07:08 +02:00
</Column>;
2024-04-13 17:56:33 +02:00
}