Use Hilla router config

This commit is contained in:
grimsi
2025-06-03 17:50:34 +02:00
parent 7fa2c029af
commit 0fc6c128f4
2 changed files with 82 additions and 84 deletions
+2 -4
View File
@@ -2,7 +2,6 @@ import {Outlet, useHref, useNavigate} from 'react-router';
import "./main.css";
import "Frontend/util/custom-validators";
import {HeroUIProvider} from "@heroui/react";
import {ToastProvider} from "@heroui/toast";
import {ThemeProvider as NextThemesProvider} from "next-themes";
import {themeNames} from "Frontend/theming/themes";
import {AuthProvider} from "Frontend/util/auth";
@@ -12,10 +11,9 @@ import {ErrorHandlingMiddleware} from "Frontend/util/middleware";
import {initializeLibraryState} from "Frontend/state/LibraryState";
import {initializeGameState} from "Frontend/state/GameState";
import {initializeScanState} from "Frontend/state/ScanState";
import {ToastProvider} from "@heroui/toast";
export default function App() {
const navigate = useNavigate();
client.middlewares = [ErrorHandlingMiddleware];
initializeLibraryState();
@@ -23,7 +21,7 @@ export default function App() {
initializeScanState();
return (
<HeroUIProvider className="size-full" navigate={navigate} useHref={useHref}>
<HeroUIProvider className="size-full" navigate={useNavigate} useHref={useHref}>
<NextThemesProvider attribute="class" themes={themeNames()} defaultTheme="gameyfin-violet-dark">
<AuthProvider>
<IconContext.Provider value={{size: 20}}>
+80 -80
View File
@@ -1,5 +1,3 @@
import {protectRoutes} from '@vaadin/hilla-react-auth';
import {createBrowserRouter, RouteObject} from 'react-router';
import LoginView from "Frontend/views/LoginView";
import MainLayout from "Frontend/views/MainLayout";
import HomeView from "Frontend/views/HomeView";
@@ -24,82 +22,84 @@ import LibraryManagementView from "Frontend/views/LibraryManagementView";
import SearchView from "Frontend/views/SearchView";
import RecentlyAddedView from "Frontend/views/RecentlyAddedView";
import LibraryView from "Frontend/views/LibraryView";
import {RouterConfigurationBuilder} from "@vaadin/hilla-file-router/runtime.js";
export const routes = protectRoutes([
{
element: <App/>,
handle: {requiresLogin: false},
children: [
{
element: <MainLayout/>,
handle: {requiresLogin: true},
children: [
{
index: true, element: <HomeView/>
},
{
path: '/search',
element: <SearchView/>
},
{
path: 'recently-added',
element: <RecentlyAddedView/>
},
{
path: 'library/:libraryId',
element: <LibraryView/>
},
{
path: 'game/:gameId',
element: <GameView/>
},
{
path: 'settings',
element: <ProfileView/>,
children: [
{path: 'profile', element: <ProfileManagement/>},
{path: 'appearance', element: <ThemeSelector/>}
]
},
{
path: 'administration',
element: <AdministrationView/>,
children: [
{
path: 'libraries',
element: <LibraryManagement/>
},
{
path: 'libraries/library/:libraryId',
element: <LibraryManagementView/>
},
{path: 'users', element: <UserManagement/>},
{path: 'sso', element: <SsoManagement/>},
{path: 'messages', element: <MessageManagement/>},
{path: 'plugins', element: <PluginManagement/>},
{path: 'logs', element: <LogManagement/>},
{path: 'system', element: <SystemManagement/>}
]
}
]
},
{
path: '/login', element: <LoginView/>, handle: {requiresLogin: false}
},
{
path: '/setup', element: <SetupView/>, handle: {requiresLogin: false}
},
{
path: '/accept-invitation', element: <InvitationRegistrationView/>, handle: {requiresLogin: false}
},
{
path: '/reset-password', element: <PasswordResetView/>, handle: {requiresLogin: false}
},
{
path: '/confirm-email', element: <EmailConfirmationView/>, handle: {requiresLogin: true}
},
],
}
]) as RouteObject[];
export default createBrowserRouter(routes);
export const {router, routes} = new RouterConfigurationBuilder()
.withReactRoutes([
{
element: <App/>,
handle: {requiresLogin: false},
children: [
{
element: <MainLayout/>,
handle: {requiresLogin: true},
children: [
{
index: true, element: <HomeView/>
},
{
path: 'search',
element: <SearchView/>
},
{
path: 'recently-added',
element: <RecentlyAddedView/>
},
{
path: 'library/:libraryId',
element: <LibraryView/>
},
{
path: 'game/:gameId',
element: <GameView/>
},
{
path: 'settings',
element: <ProfileView/>,
children: [
{path: 'profile', element: <ProfileManagement/>},
{path: 'appearance', element: <ThemeSelector/>}
]
},
{
path: 'administration',
element: <AdministrationView/>,
children: [
{
path: 'libraries',
element: <LibraryManagement/>
},
{
path: 'libraries/library/:libraryId',
element: <LibraryManagementView/>
},
{path: 'users', element: <UserManagement/>},
{path: 'sso', element: <SsoManagement/>},
{path: 'messages', element: <MessageManagement/>},
{path: 'plugins', element: <PluginManagement/>},
{path: 'logs', element: <LogManagement/>},
{path: 'system', element: <SystemManagement/>}
]
}
]
},
{
path: 'login', element: <LoginView/>, handle: {requiresLogin: false}
},
{
path: 'setup', element: <SetupView/>, handle: {requiresLogin: false}
},
{
path: 'accept-invitation', element: <InvitationRegistrationView/>, handle: {requiresLogin: false}
},
{
path: 'reset-password', element: <PasswordResetView/>, handle: {requiresLogin: false}
},
{
path: 'confirm-email', element: <EmailConfirmationView/>, handle: {requiresLogin: true}
},
]
}
])
.protect("/login")
.build();