FactuGES_ERP/apps/web/src/routes/app-routes.tsx

67 lines
2.1 KiB
TypeScript
Raw Normal View History

2026-06-01 18:48:12 +00:00
// apps/web/src/routes/app-routes.tsx
2026-03-07 18:27:23 +00:00
import type { IModuleClient } from "@erp/core/client";
import { Navigate, Route, createBrowserRouter, createRoutesFromElements } from "react-router-dom";
2025-11-04 17:36:02 +00:00
import { ModuleRoutes } from "@/components/module-routes";
2026-06-01 18:48:12 +00:00
import { AppLayout } from "@/layout";
2026-04-12 10:07:15 +00:00
import ShadcnShowcasePage from "@/pages/shadcn-ui-page";
import TailwindV4ShowcasePage from "@/pages/tailwindcss-page";
2026-03-07 18:27:23 +00:00
2025-11-04 17:36:02 +00:00
import { ErrorPage, LoginForm } from "../pages";
2026-06-01 18:48:12 +00:00
import { modules } from "../register-modules";
2025-05-28 14:21:09 +00:00
function groupModulesByLayout(modules: IModuleClient[]) {
const groups: Record<string, IModuleClient[]> = {
auth: [],
app: [],
};
2026-06-01 18:48:12 +00:00
for (const module of modules) {
const layout = typeof module.layout === "string" ? module.layout : "app";
2025-05-28 14:21:09 +00:00
2026-06-01 18:48:12 +00:00
groups[layout] = groups[layout] ?? [];
groups[layout].push(module);
2025-05-28 14:21:09 +00:00
}
return groups;
}
2025-08-24 10:14:20 +00:00
export const getAppRouter = () => {
2025-05-28 14:21:09 +00:00
const params = {
...import.meta.env,
};
const grouped = groupModulesByLayout(modules);
2025-08-24 10:14:20 +00:00
return createBrowserRouter(
createRoutesFromElements(
2026-03-07 18:27:23 +00:00
<Route path="/">
2026-06-01 18:48:12 +00:00
<Route element={<Navigate replace to="/proformas" />} index />
2025-08-24 10:14:20 +00:00
{/* Auth Layout */}
2026-06-01 18:48:12 +00:00
<Route path="auth">
<Route element={<Navigate replace to="login" />} index />
2026-03-07 18:27:23 +00:00
<Route element={<LoginForm />} path="login" />
<Route element={<ModuleRoutes modules={grouped.auth} params={params} />} path="*" />
2025-08-24 10:14:20 +00:00
</Route>
{/* App Layout */}
<Route element={<AppLayout />}>
2026-04-12 10:07:15 +00:00
{/* Test */}
2026-06-01 18:48:12 +00:00
<Route element={<ShadcnShowcasePage />} path="shadcnui" />
<Route element={<TailwindV4ShowcasePage />} path="tailwindcss4" />
2026-04-12 10:07:15 +00:00
2026-06-01 18:48:12 +00:00
{/* Static / provisional routes */}
<Route element={<ErrorPage />} path="dashboard" />
<Route element={<ErrorPage />} path="settings" />
<Route element={<ErrorPage />} path="catalog" />
<Route element={<ErrorPage />} path="quotes" />
{/* Dynamic module routes. Keep this last. */}
<Route element={<ModuleRoutes modules={grouped.app} params={params} />} path="*" />
2025-08-24 10:14:20 +00:00
</Route>
</Route>
)
2025-05-28 14:21:09 +00:00
);
};