feishin/src/renderer/router/app-router.tsx

170 lines
5.4 KiB
TypeScript
Raw Normal View History

2022-12-19 15:59:14 -08:00
import { lazy, Suspense } from 'react';
import {
Route,
createRoutesFromElements,
RouterProvider,
createHashRouter,
} from 'react-router-dom';
import { AppRoute } from './routes';
import { DefaultLayout } from '/@/renderer/layouts';
import { AppOutlet } from '/@/renderer/router/app-outlet';
import { TitlebarOutlet } from '/@/renderer/router/titlebar-outlet';
const NowPlayingRoute = lazy(
() => import('/@/renderer/features/now-playing/routes/now-playing-route'),
);
const AlbumListRoute = lazy(() => import('/@/renderer/features/albums/routes/album-list-route'));
const SongListRoute = lazy(() => import('/@/renderer/features/songs/routes/song-list-route'));
2022-12-31 18:03:26 -08:00
const PlaylistDetailRoute = lazy(
() => import('/@/renderer/features/playlists/routes/playlist-detail-route'),
);
2023-01-01 13:58:05 -08:00
const PlaylistDetailSongListRoute = lazy(
() => import('/@/renderer/features/playlists/routes/playlist-detail-song-list-route'),
);
2022-12-31 03:46:12 -08:00
const PlaylistListRoute = lazy(
() => import('/@/renderer/features/playlists/routes/playlist-list-route'),
);
2022-12-19 15:59:14 -08:00
const ActionRequiredRoute = lazy(
() => import('/@/renderer/features/action-required/routes/action-required-route'),
);
const InvalidRoute = lazy(
() => import('/@/renderer/features/action-required/routes/invalid-route'),
);
2023-01-07 23:09:58 -08:00
const HomeRoute = lazy(() => import('/@/renderer/features/home/routes/home-route'));
const AlbumArtistListRoute = lazy(
() => import('/@/renderer/features/artists/routes/album-artist-list-route'),
);
2023-01-12 18:43:25 -08:00
const AlbumArtistDetailRoute = lazy(
() => import('/@/renderer/features/artists/routes/album-artist-detail-route'),
);
const AlbumArtistDetailSongListRoute = lazy(
() => import('../features/artists/routes/album-artist-detail-song-list-route'),
);
const AlbumArtistDetailDiscographyRoute = lazy(
() => import('../features/artists/routes/album-artist-detail-discography-route'),
);
2023-01-07 23:09:58 -08:00
const AlbumDetailRoute = lazy(
() => import('/@/renderer/features/albums/routes/album-detail-route'),
);
const RouteErrorBoundary = lazy(
() => import('/@/renderer/features/action-required/components/route-error-boundary'),
);
2022-12-19 15:59:14 -08:00
export const AppRouter = () => {
const router = createHashRouter(
createRoutesFromElements(
<>
<Route element={<TitlebarOutlet />}>
<Route
element={<AppOutlet />}
errorElement={<RouteErrorBoundary />}
>
<Route element={<DefaultLayout />}>
<Route
index
element={<HomeRoute />}
errorElement={<RouteErrorBoundary />}
2022-12-19 15:59:14 -08:00
/>
<Route
element={<HomeRoute />}
errorElement={<RouteErrorBoundary />}
2022-12-19 15:59:14 -08:00
path={AppRoute.HOME}
/>
<Route
element={<NowPlayingRoute />}
errorElement={<RouteErrorBoundary />}
2022-12-19 15:59:14 -08:00
path={AppRoute.NOW_PLAYING}
/>
<Route
element={<AlbumListRoute />}
errorElement={<RouteErrorBoundary />}
2022-12-19 15:59:14 -08:00
path={AppRoute.LIBRARY_ALBUMS}
/>
2022-12-29 18:45:01 -08:00
<Route
element={<AlbumDetailRoute />}
errorElement={<RouteErrorBoundary />}
2022-12-29 18:45:01 -08:00
path={AppRoute.LIBRARY_ALBUMS_DETAIL}
/>
2022-12-19 15:59:14 -08:00
<Route
element={<SongListRoute />}
errorElement={<RouteErrorBoundary />}
2022-12-19 15:59:14 -08:00
path={AppRoute.LIBRARY_SONGS}
/>
2022-12-31 03:46:12 -08:00
<Route
element={<PlaylistListRoute />}
errorElement={<RouteErrorBoundary />}
2022-12-31 03:46:12 -08:00
path={AppRoute.PLAYLISTS}
/>
2022-12-31 18:03:26 -08:00
<Route
element={<PlaylistDetailRoute />}
errorElement={<RouteErrorBoundary />}
2022-12-31 18:03:26 -08:00
path={AppRoute.PLAYLISTS_DETAIL}
/>
2023-01-01 13:58:05 -08:00
<Route
element={<PlaylistDetailSongListRoute />}
errorElement={<RouteErrorBoundary />}
2023-01-01 13:58:05 -08:00
path={AppRoute.PLAYLISTS_DETAIL_SONGS}
/>
2022-12-19 15:59:14 -08:00
<Route
errorElement={<RouteErrorBoundary />}
2023-01-12 18:43:25 -08:00
path={AppRoute.LIBRARY_ALBUM_ARTISTS}
>
<Route
index
element={<AlbumArtistListRoute />}
/>
<Route path={AppRoute.LIBRARY_ALBUM_ARTISTS_DETAIL}>
<Route
index
element={<AlbumArtistDetailRoute />}
/>
<Route
element={<AlbumArtistDetailDiscographyRoute />}
path={AppRoute.LIBRARY_ALBUM_ARTISTS_DETAIL_DISCOGRAPHY}
/>
<Route
element={<AlbumArtistDetailSongListRoute />}
path={AppRoute.LIBRARY_ALBUM_ARTISTS_DETAIL_SONGS}
/>
</Route>
2023-01-12 18:43:25 -08:00
</Route>
2022-12-19 15:59:14 -08:00
<Route
element={<InvalidRoute />}
path="*"
/>
</Route>
</Route>
</Route>
<Route element={<TitlebarOutlet />}>
<Route element={<DefaultLayout shell />}>
<Route
element={<ActionRequiredRoute />}
path={AppRoute.ACTION_REQUIRED}
/>
</Route>
</Route>
</>,
),
);
return (
<Suspense fallback={<></>}>
<RouterProvider router={router} />
</Suspense>
);
};