Conversation
1498b5e to
2faf95b
Compare
532da70 to
471ed1a
Compare
|
Continuous integration check(s) failed. Please review the failing check's logs and make the necessary changes. |
There was a problem hiding this comment.
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 SolidLeaderboardPageand componentized UI. - Adds Solid Query-based leaderboard/rank fetching with a typed
Selectionmodel and query keys. - Introduces a global
userIdsignal (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, ":")} |
There was a problem hiding this comment.
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.
| {secondsToString(Math.round(info.getValue()), true, true, ":")} | |
| {secondsToString(Math.round(info.row.original.timeTypedSeconds), true, true, ":")} |
| `Failed to get ${selection.type} leaderboard rank: ` + | ||
| response.body.message, | ||
| ); | ||
| } | ||
| return response.body.data; | ||
| }, | ||
| //5 minutes for alltime, one minute for others |
There was a problem hiding this comment.
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.
| `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 |
No description provided.