1
0
Fork 0

fix(leaderboards): match active players by user id

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphus.ai>
This commit is contained in:
Jason Fraley 2026-09-04 12:04:44 -04:00
parent dd2c868c89
commit 72715c42a4
3 changed files with 9 additions and 3 deletions

View file

@ -44,6 +44,7 @@ interface ApiProfile {
interface LeaderboardRow { interface LeaderboardRow {
id: number; id: number;
userId: number | null;
name: string; name: string;
gamesPlayed: number; gamesPlayed: number;
wins: number; wins: number;
@ -113,6 +114,7 @@ export function EodLeaderboard({
user?.displayName || doc.profileTitle || user?.username || `Operator #${doc.id}`; user?.displayName || doc.profileTitle || user?.username || `Operator #${doc.id}`;
return { return {
id: doc.id, id: doc.id,
userId: user?.id ?? null,
name, name,
gamesPlayed: eod.gamesPlayed ?? 0, gamesPlayed: eod.gamesPlayed ?? 0,
wins: eod.wins ?? 0, wins: eod.wins ?? 0,
@ -236,7 +238,7 @@ export function EodLeaderboard({
unranked unranked
</span> </span>
)} )}
{activeTeams.some((team) => team.id === row.id) && ( {row.userId !== null && activeTeams.some((team) => team.id === row.userId) && (
<span <span
className="size-2 rounded-full bg-emerald-400" className="size-2 rounded-full bg-emerald-400"
title="Clearing now" title="Clearing now"

View file

@ -30,6 +30,7 @@ interface ApiProfile {
interface LeaderboardRow { interface LeaderboardRow {
id: number; id: number;
userId: number | null;
name: string; name: string;
gamesPlayed: number; gamesPlayed: number;
totalPasses: number; totalPasses: number;
@ -82,6 +83,7 @@ export function FlappyLeaderboard({ refreshKey = 0, currentUserId, activePilots
user?.displayName || doc.profileTitle || user?.username || `Pilot #${doc.id}`; user?.displayName || doc.profileTitle || user?.username || `Pilot #${doc.id}`;
return { return {
id: doc.id, id: doc.id,
userId: user?.id ?? null,
name, name,
gamesPlayed: flappy.gamesPlayed ?? 0, gamesPlayed: flappy.gamesPlayed ?? 0,
totalPasses: flappy.totalPasses ?? 0, totalPasses: flappy.totalPasses ?? 0,
@ -170,7 +172,7 @@ export function FlappyLeaderboard({ refreshKey = 0, currentUserId, activePilots
unranked unranked
</span> </span>
)} )}
{activePilots.some((pilot) => pilot.id === row.id) && ( {row.userId !== null && activePilots.some((pilot) => pilot.id === row.userId) && (
<span className="size-2 rounded-full bg-emerald-400" title="Playing now" aria-label="Playing now" /> <span className="size-2 rounded-full bg-emerald-400" title="Playing now" aria-label="Playing now" />
)} )}
</span> </span>

View file

@ -41,6 +41,7 @@ interface ApiProfile {
interface LeaderboardRow { interface LeaderboardRow {
id: number; id: number;
userId: number | null;
name: string; name: string;
totalMessages: number; totalMessages: number;
bestScore: number; bestScore: number;
@ -134,6 +135,7 @@ export function RadioLeaderboard({
const user = typeof doc.user === "object" && doc.user !== null ? doc.user : null; const user = typeof doc.user === "object" && doc.user !== null ? doc.user : null;
return { return {
id: doc.id, id: doc.id,
userId: user?.id ?? null,
name: user?.displayName || doc.profileTitle || user?.username || `Operator #${doc.id}`, name: user?.displayName || doc.profileTitle || user?.username || `Operator #${doc.id}`,
totalMessages: totalMessages:
radioTraffic[mode === "sprint" ? "sprintTotalMessages" : "watchTotalMessages"] ?? 0, radioTraffic[mode === "sprint" ? "sprintTotalMessages" : "watchTotalMessages"] ?? 0,
@ -299,7 +301,7 @@ export function RadioLeaderboard({
unranked unranked
</span> </span>
)} )}
{activeOperators.some((operator) => operator.id === row.id) && ( {row.userId !== null && activeOperators.some((operator) => operator.id === row.userId) && (
<span <span
className="size-2 rounded-full bg-emerald-400" className="size-2 rounded-full bg-emerald-400"
title="Transmitting now" title="Transmitting now"