Files
dashfront/src/appRouter.jsx
2026-10-18 03:14:15 +02:00

137 lines
5.6 KiB
JavaScript

import { lazy } from 'react';
import { Navigate, createBrowserRouter } from 'react-router-dom';
import AppShell from './components/AppShell';
import SectionLayout from './components/SectionLayout';
import ArtikelUebersichtPage from './routes/artikel';
import ArtikelKategorienPage from './routes/artikel/kategorien';
import RedirectArtikelKategorien from './routes/artikel/RedirectArtikelKategorien';
import ArtikelLagerPage from './routes/artikel/lager';
import ArtikelMarkenPage from './routes/artikel/marken';
import ArtikelVorlagenPage from './routes/artikel/vorlagen';
import ArtikelMerkmalePage from './routes/artikel/merkmale';
import ArtikelSkuPage from './routes/artikel/_sku';
import LieferungListePage from './routes/lieferung';
import LieferungNeuPage from './routes/lieferung/neu';
import LieferungLieferantenPage from './routes/lieferung/lieferanten';
import LieferungEditPage from './routes/lieferung/_deliveryId';
import AuftragAngebotPage from './routes/auftrag';
import AuftragAngebotNeuPage from './routes/auftrag/neuesangebot';
import AuftragAngebotEditPage from './routes/auftrag/_quoteId';
import AuftragBestellungPage from './routes/auftrag/bestellung';
import AuftragBestellungNeuPage from './routes/auftrag/bestellung/neu';
import AuftragBestellungEditPage from './routes/auftrag/bestellung/_orderId';
import AuftragAusliefernPage from './routes/auftrag/ausliefern';
import AuftragZahlungenPage from './routes/auftrag/zahlungen';
import AuftragLieferartenPage from './routes/auftrag/lieferarten';
import KundeListePage from './routes/kunde';
import KundeNeuPage from './routes/kunde/neu';
import KundeGruppenPage from './routes/kunde/gruppen';
import KundeEditPage from './routes/kunde/_entityId';
import StatisticsPage from './routes/infos/StatisticsPage';
import OAuthAuthorizePage from './routes/oauth/OAuthAuthorizePage';
const ArticleHistoryPage = lazy(() => import('./routes/infos/ArticleHistoryPage'));
const GlobalHistoryPage = lazy(() => import('./routes/infos/GlobalHistoryPage'));
const LedgerHistoryPage = lazy(() => import('./routes/infos/LedgerHistoryPage'));
function LoginRedirect() {
const params = new URLSearchParams(window.location.search);
const returnTo = params.get('returnTo');
return <Navigate to={returnTo || '/artikel'} replace />;
}
const routes = [
{
path: '/oauth/authorize',
element: <OAuthAuthorizePage />,
},
{
path: '/login',
element: <LoginRedirect />,
},
{
path: '/',
element: <AppShell />,
children: [
{ index: true, element: <Navigate to="/artikel" replace /> },
{
path: 'lieferung',
element: <SectionLayout sectionPath="/lieferung" />,
children: [
{ index: true, element: <LieferungListePage /> },
{ path: 'neu', element: <LieferungNeuPage /> },
{ path: 'lieferanten', element: <LieferungLieferantenPage /> },
{ path: ':deliveryId', element: <LieferungEditPage /> },
],
},
{
path: 'infos',
element: <SectionLayout sectionPath="/infos" />,
children: [
{ index: true, element: <ArticleHistoryPage /> },
{ path: 'articlehistory', element: <ArticleHistoryPage /> },
{ path: 'globalhistory', element: <GlobalHistoryPage /> },
{ path: 'ledgerhistory', element: <LedgerHistoryPage /> },
{ path: 'statistics', element: <StatisticsPage /> },
],
},
{
path: 'kategorien/*',
element: <SectionLayout sectionPath="/artikel" />,
children: [{ path: '*', element: <ArtikelKategorienPage /> }],
},
{
path: 'artikel',
element: <SectionLayout sectionPath="/artikel" />,
children: [
{ index: true, element: <ArtikelUebersichtPage /> },
{ path: 'kategorien/*', element: <RedirectArtikelKategorien /> },
{ path: 'lager', element: <ArtikelLagerPage /> },
{ path: 'marken', element: <ArtikelMarkenPage /> },
{ path: 'vorlagen', element: <ArtikelVorlagenPage /> },
{ path: 'merkmale', element: <ArtikelMerkmalePage /> },
{ path: ':sku/:tab?', element: <ArtikelSkuPage /> },
],
},
{
path: 'auftrag',
element: <SectionLayout sectionPath="/auftrag" />,
children: [
{ index: true, element: <AuftragAngebotPage /> },
{ path: 'neuesangebot', element: <AuftragAngebotNeuPage /> },
{ path: 'neu', element: <Navigate to="/auftrag/neuesangebot" replace /> },
{ path: 'bestellung', element: <AuftragBestellungPage /> },
{ path: 'bestellung/neu', element: <AuftragBestellungNeuPage /> },
{ path: 'bestellung/:orderId', element: <AuftragBestellungEditPage /> },
{ path: 'ausliefern', element: <AuftragAusliefernPage /> },
{ path: 'zahlungen', element: <AuftragZahlungenPage /> },
{ path: 'lieferarten', element: <AuftragLieferartenPage /> },
{ path: ':quoteId', element: <AuftragAngebotEditPage /> },
],
},
{
path: 'kunde',
element: <SectionLayout sectionPath="/kunde" />,
children: [
{ index: true, element: <KundeListePage /> },
{ path: 'neu', element: <KundeNeuPage /> },
{ path: 'gruppen', element: <KundeGruppenPage /> },
{ path: ':entityId', element: <KundeEditPage /> },
],
},
{ path: '*', element: <Navigate to="/artikel" replace /> },
],
},
];
/** Keep one router across Vite HMR — recreating breaks navigate()/Link mid-session. */
export const router =
import.meta.hot?.data?.router ?? createBrowserRouter(routes);
if (import.meta.hot) {
import.meta.hot.data.router = router;
}