From 1370873cbad8e547fa75df983d61590f1cd4a74a Mon Sep 17 00:00:00 2001 From: Josh Wright Date: Tue, 6 Oct 2026 19:12:25 -0400 Subject: [PATCH] Simplify leaderboard rows and defer disruptive refreshes --- src/lib/leaderboard-updates.ts | 27 ++++ src/lib/ui/components/RecordSource.svelte | 14 +- src/routes/leaderboard/+page.server.ts | 5 +- src/routes/leaderboard/+page.svelte | 159 +++++++++++++--------- tests/unit/leaderboard-page-load.test.ts | 15 ++ tests/unit/ui-leaderboard.test.ts | 84 ++++++++++++ 6 files changed, 234 insertions(+), 70 deletions(-) create mode 100644 src/lib/leaderboard-updates.ts create mode 100644 tests/unit/leaderboard-page-load.test.ts create mode 100644 tests/unit/ui-leaderboard.test.ts diff --git a/src/lib/leaderboard-updates.ts b/src/lib/leaderboard-updates.ts new file mode 100644 index 0000000..1da3b5c --- /dev/null +++ b/src/lib/leaderboard-updates.ts @@ -0,0 +1,27 @@ +import type { LeaderboardResponse } from './leaderboard.js'; + +export const leaderboardPageSize = 25; + +/** Keep a viewed ranking stable until the reader chooses to apply new results. */ +export function createLeaderboardUpdates(scope: string, current: LeaderboardResponse) { + let pending: LeaderboardResponse | null = null; + return { + reset(nextScope: string, report: LeaderboardResponse) { + scope = nextScope; + current = report; + pending = null; + }, + receive(requestScope: string, report: LeaderboardResponse, inspecting: boolean) { + if (requestScope !== scope) return null; + if (JSON.stringify(current) === JSON.stringify(report)) pending = null; + else if (inspecting || pending) pending = report; + else current = report; + return { current, pending }; + }, + apply() { + if (pending) current = pending; + pending = null; + return current; + } + }; +} diff --git a/src/lib/ui/components/RecordSource.svelte b/src/lib/ui/components/RecordSource.svelte index 3fc9f28..6cd2320 100644 --- a/src/lib/ui/components/RecordSource.svelte +++ b/src/lib/ui/components/RecordSource.svelte @@ -1,23 +1,25 @@
- {evidence.mapName} · {gameName} + {evidence.mapName} · {gameName} {#if evidence.endedAt}Completed {:else}Completed · End time unknown{/if} -
- Run details + {#snippet runDetails()}
-
Server
{evidence.server}
+
Instance
{evidence.server}
{evidence.startObserved ? 'Match started' : 'Match first observed'}
Player participation
{evidence.presentAtStart ? 'Present at recorded start' : evidence.firstObservedRound === null ? 'Participation start unknown' : `First observed at round ${evidence.firstObservedRound}`}

Recorded presence does not establish continuous survival.

-
+ {/snippet} + {#if disclosure}
Run details{@render runDetails()}
+ {:else}{@render runDetails()}{/if}