jellyfish-web/src/apps/dashboard/App.tsx

67 lines
2.4 KiB
TypeScript
Raw Normal View History

2023-09-20 16:25:11 -04:00
import loadable from '@loadable/component';
2023-09-20 00:02:26 -04:00
import React from 'react';
import { Route, Routes } from 'react-router-dom';
import ConnectionRequired from 'components/ConnectionRequired';
import { toViewManagerPageRoute } from 'components/router/LegacyRoute';
2023-09-20 16:25:11 -04:00
import { AsyncPageProps, AsyncRoute, toAsyncPageRoute } from 'components/router/AsyncRoute';
2023-09-20 00:02:26 -04:00
import { toRedirectRoute } from 'components/router/Redirect';
import ServerContentPage from 'components/ServerContentPage';
2023-09-30 01:17:37 -04:00
import AppLayout from './AppLayout';
2023-09-20 00:02:26 -04:00
import { REDIRECTS } from './routes/_redirects';
import { ASYNC_ADMIN_ROUTES } from './routes/_asyncRoutes';
import { LEGACY_ADMIN_ROUTES } from './routes/_legacyRoutes';
2023-09-20 16:25:11 -04:00
const DashboardAsyncPage = loadable(
(props: { page: string }) => import(/* webpackChunkName: "[request]" */ `./routes/${props.page}`),
{ cacheKey: (props: AsyncPageProps) => props.page }
);
const toDashboardAsyncPageRoute = (route: AsyncRoute) => (
toAsyncPageRoute({
...route,
element: DashboardAsyncPage
})
);
export const DASHBOARD_APP_PATHS = {
Dashboard: 'dashboard',
MetadataManager: 'metadata',
PluginConfig: 'configurationpage'
};
2023-09-20 00:02:26 -04:00
const DashboardApp = () => (
<Routes>
<Route element={<ConnectionRequired isAdminRequired />}>
2023-09-25 13:54:33 -04:00
<Route element={<AppLayout drawerlessPaths={[ DASHBOARD_APP_PATHS.MetadataManager ]} />}>
<Route path={DASHBOARD_APP_PATHS.Dashboard}>
2023-09-20 16:25:11 -04:00
{ASYNC_ADMIN_ROUTES.map(toDashboardAsyncPageRoute)}
2023-09-20 00:02:26 -04:00
{LEGACY_ADMIN_ROUTES.map(toViewManagerPageRoute)}
</Route>
2023-09-26 00:37:48 -04:00
{/* NOTE: The metadata editor might deserve a dedicated app in the future */}
2023-09-20 00:02:26 -04:00
{toViewManagerPageRoute({
path: DASHBOARD_APP_PATHS.MetadataManager,
2023-09-20 00:02:26 -04:00
pageProps: {
controller: 'edititemmetadata',
view: 'edititemmetadata.html'
}
})}
<Route path={DASHBOARD_APP_PATHS.PluginConfig} element={
2023-09-20 00:02:26 -04:00
<ServerContentPage view='/web/configurationpage' />
} />
</Route>
{/* Suppress warnings for unhandled routes */}
<Route path='*' element={null} />
2023-09-20 00:02:26 -04:00
</Route>
{/* Redirects for old paths */}
{REDIRECTS.map(toRedirectRoute)}
</Routes>
);
export default DashboardApp;