Simplify leaderboard rows and defer disruptive refreshes
This commit is contained in:
@@ -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;
|
||||
}
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user