From 765ca9569feee597d0d42c7ef809349e460fdaad Mon Sep 17 00:00:00 2001 From: Miodec Date: Mon, 22 Dec 2025 22:44:52 +0100 Subject: [PATCH] refactor: use loadingOptions for leaderboards page --- frontend/src/ts/controllers/page-controller.ts | 4 ++-- frontend/src/ts/pages/leaderboards.ts | 8 +++++++- frontend/src/ts/pages/page.ts | 2 +- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/frontend/src/ts/controllers/page-controller.ts b/frontend/src/ts/controllers/page-controller.ts index e60461598..b191c40e5 100644 --- a/frontend/src/ts/controllers/page-controller.ts +++ b/frontend/src/ts/controllers/page-controller.ts @@ -275,9 +275,9 @@ export async function change( typeof nextPageLoadingMode === "object" && nextPageLoadingMode.mode === "async" ) { - nextPageLoadingMode.beforeLoading(); + nextPageLoadingMode.beforeLoading?.(); void nextPage?.loadingOptions?.loadingPromise().then(() => { - nextPageLoadingMode.afterLoading(); + nextPageLoadingMode.afterLoading?.(); }); } diff --git a/frontend/src/ts/pages/leaderboards.ts b/frontend/src/ts/pages/leaderboards.ts index bb07897e9..d9c78c1b0 100644 --- a/frontend/src/ts/pages/leaderboards.ts +++ b/frontend/src/ts/pages/leaderboards.ts @@ -1485,13 +1485,19 @@ export const page = new PageWithUrlParams({ element: qsr(".page.pageLeaderboards"), path: "/leaderboards", urlParamsSchema: UrlParameterSchema, + loadingOptions: { + style: "spinner", + loadingMode: () => "sync", + loadingPromise: async () => { + await ServerConfiguration.configurationPromise; + }, + }, afterHide: async (): Promise => { Skeleton.remove("pageLeaderboards"); stopTimer(); }, beforeShow: async (options): Promise => { - await ServerConfiguration.configurationPromise; Skeleton.append("pageLeaderboards", "main"); await updateValidDailyLeaderboards(); await appendModeAndLanguageButtons(); diff --git a/frontend/src/ts/pages/page.ts b/frontend/src/ts/pages/page.ts index 70375c86f..aa23f89e4 100644 --- a/frontend/src/ts/pages/page.ts +++ b/frontend/src/ts/pages/page.ts @@ -34,7 +34,7 @@ export type LoadingOptions = { loadingMode: () => | "none" | "sync" - | { mode: "async"; beforeLoading: () => void; afterLoading: () => void }; + | { mode: "async"; beforeLoading?: () => void; afterLoading?: () => void }; /** * When this promise resolves, the loading screen will be hidden. */