feat: more robust deleted player handling

This commit is contained in:
TrèsAbhi committed 2023-11-07 19:15:41 -06:00
1 parent fbde9ec64f
commit 11ba5fc28e
1 file changed
+45 -35
+45 -35
View File
@@ -74,30 +74,31 @@ export default function Page() {
); );
const players = useSWR(`ratings-players-${region}-${season}`, async () => { const players = useSWR(`ratings-players-${region}-${season}`, async () => {
if (season === null) { if (season === null) {
// const players = await getRatingsLeague(region, 0); const players = await getRatingsLeague(region, 0);
// useUsernameCache.setState( useUsernameCache.setState(
// produce((draft: UsernameCache) => { produce((draft: UsernameCache) => {
// players.result.forEach((player) => { players.result.forEach((player) => {
// draft[region][player.spa_id] = player.nickname; draft[region][player.spa_id] = player.nickname;
// }); });
// }), }),
// ); );
// useClanCache.setState( useClanCache.setState(
// produce((draft: ClanCache) => { produce((draft: ClanCache) => {
// players.result.forEach((player) => { players.result.forEach((player) => {
// draft[region][player.spa_id] = player.clan_tag; draft[region][player.spa_id] = player.clan_tag;
// }); });
// }), }),
// ); );
// return players.result.map(
// (player) =>
// ({
// id: player.spa_id,
// score: player.score,
// }) satisfies BlitzkriegRatingsLeaderboardEntry,
// );
return {}; return {
...players.result.map(
(player) =>
({
id: player.spa_id,
score: player.score,
}) satisfies BlitzkriegRatingsLeaderboardEntry,
),
};
} else { } else {
return { return {
...(await getArchivedRatingsLeaderboard(region, season)), ...(await getArchivedRatingsLeaderboard(region, season)),
@@ -593,22 +594,31 @@ export default function Page() {
{players.isLoading ? ( {players.isLoading ? (
<Leaderboard.Gap message="Loading players..." /> <Leaderboard.Gap message="Loading players..." />
) : ( ) : (
range(page * rowsPerPage, page * rowsPerPage + rowsPerPage) range(
.filter((index) => index in players.data!) page * rowsPerPage,
.map((index) => ( Math.min(
page * rowsPerPage + rowsPerPage,
ratingsInfo?.detail ? 0 : (ratingsInfo?.count ?? 1) - 1,
),
).map((index) => (
<Leaderboard.Item <Leaderboard.Item
nickname={ nickname={
usernameCache[region][players.data![index].id] === null index in players.data!
? usernameCache[region][players.data![index].id] === null
? `Deleted player ${players.data![index].id}` ? `Deleted player ${players.data![index].id}`
: usernameCache[region][players.data![index].id] : usernameCache[region][players.data![index].id] ??
? usernameCache[region][players.data![index].id]! 'Loading player...'
: `Loading player ${players.data![index].id}...` : `Loading player...`
} }
position={page * rowsPerPage + index + 1} position={index + 1}
score={players.data![index].score} score={players.data![index]?.score ?? 0}
clan={clanCache[region][players.data![index].id]} clan={
key={players.data![index].id} players.data![index]
highlight={highlightedPlayerId === players.data![index].id} ? clanCache[region][players.data![index].id]
: undefined
}
key={index}
highlight={highlightedPlayerId === players.data![index]?.id}
/> />
)) ))
)} )}