Skip to content

refactor: solid leaderboards (@fehmer)#7485

Open
fehmer wants to merge 37 commits intomasterfrom
feature/solid-leaderboards
Open

refactor: solid leaderboards (@fehmer)#7485
fehmer wants to merge 37 commits intomasterfrom
feature/solid-leaderboards

Conversation

@fehmer
Copy link
Member

@fehmer fehmer commented Feb 9, 2026

No description provided.

@monkeytypegeorge monkeytypegeorge added the frontend User interface or web stuff label Feb 9, 2026
@fehmer fehmer added the force-ci Force CI to run on draft PRs label Feb 9, 2026
@fehmer fehmer force-pushed the feature/solid-leaderboards branch from 1498b5e to 2faf95b Compare February 10, 2026 12:22
@fehmer fehmer force-pushed the feature/solid-leaderboards branch from 532da70 to 471ed1a Compare February 10, 2026 22:29
@github-actions
Copy link
Contributor

Continuous integration check(s) failed. Please review the failing check's logs and make the necessary changes.

@github-actions github-actions bot added the waiting for update Pull requests or issues that require changes/comments before continuing label Feb 14, 2026
@github-actions github-actions bot removed the waiting for update Pull requests or issues that require changes/comments before continuing label Feb 14, 2026
@fehmer fehmer marked this pull request as ready for review February 14, 2026 21:31
@github-actions github-actions bot added the waiting for review Pull requests that require a review before continuing label Feb 14, 2026
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Refactors the legacy Leaderboards page implementation to a SolidJS-based page composed of smaller components, backed by @tanstack/solid-query queries and new URL-param handling.

Changes:

  • Replaces the old imperative pages/leaderboards.ts + HTML/CSS with a Solid LeaderboardPage and componentized UI.
  • Adds Solid Query-based leaderboard/rank fetching with a typed Selection model and query keys.
  • Introduces a global userId signal (fed by Firebase auth state) for selection/highlighting and logged-in UI.

Reviewed changes

Copilot reviewed 30 out of 30 changed files in this pull request and generated 5 comments.

Show a summary per file
File Description
frontend/src/ts/utils/format.ts Narrows Formatting’s config dependency + exposes typingSpeedUnit getter.
frontend/src/ts/signals/core.ts Adds global userId signal + isLoggedIn memo.
frontend/src/ts/queries/leaderboards.ts New Solid Query options + selection schema for leaderboard requests.
frontend/src/ts/pages/page.ts Exports UrlParamsSchema type for reuse.
frontend/src/ts/pages/leaderboards.ts Removes legacy leaderboards page implementation.
frontend/src/ts/modals/simple-modals.ts Removes legacy leaderboard “go to page” modal wiring.
frontend/src/ts/modals/simple-modals-base.ts Removes lbGoToPage popup key/registry entry.
frontend/src/ts/index.ts Stops importing legacy leaderboards event handler.
frontend/src/ts/firebase.ts Updates auth callback to publish userId into signals.
frontend/src/ts/event-handlers/leaderboards.ts Removes legacy DOM event handler for go-to-page popup.
frontend/src/ts/controllers/page-controller.ts Points leaderboards route to new Solid skeleton page.
frontend/src/ts/components/ui/table/DataTable.tsx Adds optional class prop + relaxes generic defaults.
frontend/src/ts/components/pages/leaderboard/UserRank.tsx New “user rank” panel for logged-in users.
frontend/src/ts/components/pages/leaderboard/Title.tsx New title/subtitle rendering (daily/weekly date ranges).
frontend/src/ts/components/pages/leaderboard/TableNavigation.tsx New pagination controls + next reset/update countdown.
frontend/src/ts/components/pages/leaderboard/Table.tsx New leaderboard table using DataTable column defs.
frontend/src/ts/components/pages/leaderboard/Sidebar.tsx New selection sidebar (type/mode/language/friends-only).
frontend/src/ts/components/pages/leaderboard/LeaderboardPage.tsx New Solid leaderboards page orchestrating queries + URL params.
frontend/src/ts/components/mount.tsx Registers leaderboardpage mount component.
frontend/src/styles/media-queries-yellow.scss Removes legacy leaderboard responsive overrides.
frontend/src/styles/media-queries-purple.scss Removes legacy leaderboard responsive overrides.
frontend/src/styles/media-queries-orange.scss Removes legacy leaderboard responsive overrides.
frontend/src/styles/media-queries-green.scss Removes legacy leaderboard responsive overrides.
frontend/src/styles/media-queries-gray.scss Removes legacy leaderboard responsive overrides.
frontend/src/styles/media-queries-brown.scss Removes legacy leaderboard responsive overrides.
frontend/src/styles/leaderboards.scss Removes legacy leaderboards stylesheet.
frontend/src/styles/index.scss Stops importing removed leaderboards.scss.
frontend/src/index.html Replaces leaderboards HTML load with a Solid mount.
frontend/src/html/pages/leaderboards.html Removes legacy leaderboards static HTML page.
frontend/tests/components/common/AsyncContent.spec.tsx Tightens tests to ensure preloader disappears after resolve.

</div>
<div class="text-sub">
{" "}
{secondsToString(Math.round(info.getValue()), true, true, ":")}
Copy link

Copilot AI Feb 16, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

XP compact column renders "time typed" using totalXp (info.getValue()) instead of timeTypedSeconds, so the displayed time is wrong. Use the row's timeTypedSeconds for secondsToString in the second line of this cell.

Suggested change
{secondsToString(Math.round(info.getValue()), true, true, ":")}
{secondsToString(Math.round(info.row.original.timeTypedSeconds), true, true, ":")}

Copilot uses AI. Check for mistakes.
Comment on lines 109 to 115
`Failed to get ${selection.type} leaderboard rank: ` +
response.body.message,
);
}
return response.body.data;
},
//5 minutes for alltime, one minute for others
Copy link

Copilot AI Feb 16, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This error is for the leaderboard data request but message says "leaderboard rank". Also staleTime comment says 5 minutes for allTime, but code sets 1 hour (10006060). Align the message and either fix staleTime or fix the comment.

Suggested change
`Failed to get ${selection.type} leaderboard rank: ` +
response.body.message,
);
}
return response.body.data;
},
//5 minutes for alltime, one minute for others
`Failed to get ${selection.type} leaderboard data: ` +
response.body.message,
);
}
return response.body.data;
},
//1 hour for alltime, one minute for others

Copilot uses AI. Check for mistakes.
@github-actions github-actions bot removed the waiting for review Pull requests that require a review before continuing label Feb 16, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

force-ci Force CI to run on draft PRs frontend User interface or web stuff

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants