1
0
Fork 0
mirror of https://github.com/jellyfin/jellyfin-web synced 2025-03-30 19:56:21 +00:00
jellyfin-web/src/components/router/AsyncRoute.tsx

53 lines
1.5 KiB
TypeScript
Raw Normal View History

import type { RouteObject } from 'react-router-dom';
2022-11-01 16:41:09 -04:00
2023-05-01 16:50:41 -04:00
export enum AsyncRouteType {
Stable,
Experimental,
2024-08-21 02:54:09 -04:00
Dashboard
2023-05-01 16:50:41 -04:00
}
2022-11-01 16:41:09 -04:00
export interface AsyncRoute {
/** The URL path for this route. */
path: string
/**
* The relative path to the page component in the routes directory.
* Will fallback to using the `path` value if not specified.
*/
page?: string
/** The page type used to load the correct page element. */
2023-05-01 16:50:41 -04:00
type?: AsyncRouteType
}
2024-11-18 16:55:45 -05:00
const importRoute = (page: string, type: AsyncRouteType) => {
switch (type) {
case AsyncRouteType.Dashboard:
return import(/* webpackChunkName: "[request]" */ `../../apps/dashboard/routes/${page}`);
case AsyncRouteType.Experimental:
return import(/* webpackChunkName: "[request]" */ `../../apps/experimental/routes/${page}`);
case AsyncRouteType.Stable:
return import(/* webpackChunkName: "[request]" */ `../../apps/stable/routes/${page}`);
}
};
export const toAsyncPageRoute = ({
path,
page,
type = AsyncRouteType.Stable
}: AsyncRoute): RouteObject => {
return {
path,
lazy: async () => {
2024-11-20 17:56:59 -05:00
const {
// If there is a default export, use it as the Component for compatibility
default: Component,
...route
} = await importRoute(page ?? path, type);
2024-11-18 16:55:45 -05:00
2024-11-20 17:56:59 -05:00
return {
Component,
...route
};
}
};
};