Skip to content

Commit 07b43db

Browse files
committed
merge into one function
1 parent 1d8c4e0 commit 07b43db

File tree

1 file changed

+41
-30
lines changed

1 file changed

+41
-30
lines changed

frontend/src/ts/controllers/page-controller.ts

Lines changed: 41 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ const pages = {
5555
friends: Friends.page,
5656
404: Page404.page,
5757
accountSettings: PageAccountSettings.page,
58-
leaderboards: solidPageWithUrlParams("leaderboards", {
58+
leaderboards: solidPage("leaderboards", {
5959
urlParamsSchema: LeaderboardUrlParamsSchema,
6060
loadingOptions: {
6161
style: "spinner",
@@ -328,27 +328,13 @@ function solidPage(
328328
id: PageName,
329329
props?: {
330330
path?: string;
331+
urlParamsSchema?: never;
332+
loadingOptions?: LoadingOptions;
331333
beforeShow?: PageProperties<undefined>["beforeShow"];
334+
afterHide?: () => Promise<void>;
332335
},
333-
): Page<undefined> {
334-
const path = props?.path ?? `/${id}`;
335-
const internalId = `page${Strings.capitalizeFirstLetter(id)}`;
336-
onDOMReady(() => Skeleton.save(internalId));
337-
return new Page({
338-
id,
339-
path,
340-
element: qsr(`#${internalId}`),
341-
beforeShow: async (options) => {
342-
Skeleton.append(internalId, "main");
343-
await props?.beforeShow?.(options);
344-
},
345-
afterHide: async () => {
346-
Skeleton.remove(internalId);
347-
},
348-
});
349-
}
350-
351-
function solidPageWithUrlParams<U extends UrlParamsSchema>(
336+
): Page<undefined>;
337+
function solidPage<U extends UrlParamsSchema>(
352338
id: PageName,
353339
props: {
354340
path?: string;
@@ -357,23 +343,48 @@ function solidPageWithUrlParams<U extends UrlParamsSchema>(
357343
beforeShow?: (options: OptionsWithUrlParams<undefined, U>) => Promise<void>;
358344
afterHide?: () => Promise<void>;
359345
},
360-
): PageWithUrlParams<undefined, U> {
361-
const path = props.path ?? `/${id}`;
346+
): PageWithUrlParams<undefined, U>;
347+
function solidPage<U extends UrlParamsSchema>(
348+
id: PageName,
349+
props?: {
350+
path?: string;
351+
urlParamsSchema?: U;
352+
loadingOptions?: LoadingOptions;
353+
beforeShow?: (options: OptionsWithUrlParams<undefined, U>) => Promise<void>;
354+
afterHide?: () => Promise<void>;
355+
},
356+
): Page<undefined> | PageWithUrlParams<undefined, U> {
357+
const path = props?.path ?? `/${id}`;
362358
const internalId = `page${Strings.capitalizeFirstLetter(id)}`;
363359
onDOMReady(() => Skeleton.save(internalId));
364-
return new PageWithUrlParams({
360+
361+
const shared = {
365362
id,
366363
path,
367364
element: qsr(`#${internalId}`),
368-
urlParamsSchema: props.urlParamsSchema,
369-
loadingOptions: props.loadingOptions,
370-
beforeShow: async (options) => {
371-
Skeleton.append(internalId, "main");
372-
await props.beforeShow?.(options);
373-
},
365+
loadingOptions: props?.loadingOptions,
374366
afterHide: async () => {
375367
Skeleton.remove(internalId);
376-
await props.afterHide?.();
368+
await props?.afterHide?.();
369+
},
370+
};
371+
372+
if (props?.urlParamsSchema !== undefined) {
373+
return new PageWithUrlParams({
374+
...shared,
375+
urlParamsSchema: props.urlParamsSchema,
376+
beforeShow: async (options) => {
377+
Skeleton.append(internalId, "main");
378+
await props.beforeShow?.(options);
379+
},
380+
});
381+
}
382+
383+
return new Page({
384+
...shared,
385+
beforeShow: async (options) => {
386+
Skeleton.append(internalId, "main");
387+
await props?.beforeShow?.(options);
377388
},
378389
});
379390
}

0 commit comments

Comments
 (0)