@@ -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