import { createBrowserRouter } from 'react-router';
import { prefetchAuth } from '@/backend/auth/useAuth';
import { prefetchLibrary } from '@/backend/library/useLibrary';
import { prefetchOSS } from '@/backend/oss/useOSS';
import { prefetchRSForm } from '@/backend/rsform/useRSForm';
import { prefetchProfile } from '@/backend/users/useProfile';
import { prefetchUsers } from '@/backend/users/useUsers';
import Loader from '@/components/ui/Loader';
import CreateItemPage from '@/pages/CreateItemPage';
import HomePage from '@/pages/HomePage';
import LoginPage from '@/pages/LoginPage';
import NotFoundPage from '@/pages/NotFoundPage';
import ApplicationLayout from './ApplicationLayout';
import ErrorFallback from './ErrorFallback';
import { routes } from './urls';
export const Router = createBrowserRouter([
{
path: '/',
element: ,
errorElement: ,
loader: prefetchAuth,
hydrateFallbackElement: ,
children: [
{
path: '',
element:
},
{
path: `${routes.not_found}`,
element:
},
{
path: routes.login,
element:
},
{
path: routes.signup,
lazy: () => import('@/pages/RegisterPage')
},
{
path: routes.profile,
loader: prefetchProfile,
lazy: () => import('@/pages/UserProfilePage')
},
{
path: routes.restore_password,
lazy: () => import('@/pages/RestorePasswordPage')
},
{
path: routes.password_change,
lazy: () => import('@/pages/PasswordChangePage')
},
{
path: routes.library,
loader: () => Promise.allSettled([prefetchLibrary(), prefetchUsers()]),
lazy: () => import('@/pages/LibraryPage')
},
{
path: routes.create_schema,
element:
},
{
path: `${routes.rsforms}/:id`,
loader: data => prefetchRSForm(parseRSFormURL(data.params.id, data.request.url)),
lazy: () => import('@/pages/RSFormPage')
},
{
path: `${routes.oss}/:id`,
loader: data => prefetchOSS(parseOssURL(data.params.id)),
lazy: () => import('@/pages/OssPage')
},
{
path: routes.manuals,
lazy: () => import('@/pages/ManualsPage')
},
{
path: `${routes.icons}`,
lazy: () => import('@/pages/IconsPage')
},
{
path: `${routes.database_schema}`,
lazy: () => import('@/pages/DatabaseSchemaPage')
}
]
}
]);
// ======= Internals =========
function parseRSFormURL(id: string | undefined, url: string) {
const params = new URLSearchParams(url.split('?')[1]);
const version = params.get('v');
return { itemID: id ? Number(id) : undefined, version: version ? Number(version) : undefined };
}
function parseOssURL(id: string | undefined) {
return { itemID: id ? Number(id) : undefined };
}