166 lines
7.5 KiB
JavaScript
166 lines
7.5 KiB
JavaScript
import { lazy } from 'react';
|
|
import { Navigate, RouterProvider, createBrowserRouter } from 'react-router-dom';
|
|
import AppShell from './components/AppShell';
|
|
import SectionLayout from './components/SectionLayout';
|
|
|
|
const ArtikelUebersichtPage = lazy(() => import('./routes/artikel'));
|
|
const ArtikelKategorienPage = lazy(() => import('./routes/artikel/kategorien'));
|
|
const RedirectArtikelKategorien = lazy(() => import('./routes/artikel/RedirectArtikelKategorien'));
|
|
const ArtikelLagerPage = lazy(() => import('./routes/artikel/lager'));
|
|
const ArtikelMarkenPage = lazy(() => import('./routes/artikel/marken'));
|
|
const ArtikelVorlagenPage = lazy(() => import('./routes/artikel/vorlagen'));
|
|
const ArtikelMerkmalePage = lazy(() => import('./routes/artikel/merkmale'));
|
|
const ArtikelSkuPage = lazy(() => import('./routes/artikel/_sku'));
|
|
const LieferungListePage = lazy(() => import('./routes/lieferung'));
|
|
const LieferungNeuPage = lazy(() => import('./routes/lieferung/neu'));
|
|
const LieferungLieferantenPage = lazy(() => import('./routes/lieferung/lieferanten'));
|
|
const LieferungEditPage = lazy(() => import('./routes/lieferung/_deliveryId'));
|
|
const AuftragAngebotPage = lazy(() => import('./routes/auftrag'));
|
|
const AuftragAngebotNeuPage = lazy(() => import('./routes/auftrag/neuesangebot'));
|
|
const AuftragAngebotEditPage = lazy(() => import('./routes/auftrag/_quoteId'));
|
|
const AuftragBestellungPage = lazy(() => import('./routes/auftrag/bestellung'));
|
|
const AuftragBestellungNeuPage = lazy(() => import('./routes/auftrag/bestellung/neu'));
|
|
const AuftragBestellungEditPage = lazy(() => import('./routes/auftrag/bestellung/_orderId'));
|
|
const AuftragAusliefernPage = lazy(() => import('./routes/auftrag/ausliefern'));
|
|
const AuftragRetourePage = lazy(() => import('./routes/auftrag/retoure'));
|
|
const AuftragRetoureNeuPage = lazy(() => import('./routes/auftrag/retoure/neu'));
|
|
const AuftragRetoureEditPage = lazy(() => import('./routes/auftrag/retoure/_retoureId'));
|
|
const AuftragZahlungenPage = lazy(() => import('./routes/auftrag/zahlungen'));
|
|
const AuftragVersandartenPage = lazy(() => import('./routes/auftrag/versandarten'));
|
|
|
|
const KundeListePage = lazy(() => import('./routes/kunde'));
|
|
const KundeNeuPage = lazy(() => import('./routes/kunde/neu'));
|
|
const KundeGruppenPage = lazy(() => import('./routes/kunde/gruppen'));
|
|
const KundeEditPage = lazy(() => import('./routes/kunde/_entityId'));
|
|
const StatisticsPage = lazy(() => import('./routes/infos/StatisticsPage'));
|
|
const OAuthAuthorizePage = lazy(() => import('./routes/oauth/OAuthAuthorizePage'));
|
|
|
|
const ArticleHistoryPage = lazy(() => import('./routes/infos/ArticleHistoryPage'));
|
|
const GlobalHistoryPage = lazy(() => import('./routes/infos/GlobalHistoryPage'));
|
|
const LedgerHistoryPage = lazy(() => import('./routes/infos/LedgerHistoryPage'));
|
|
const CompanyAutomatDebugPage = import.meta.env.DEV
|
|
? lazy(() => import('./routes/debug/CompanyAutomatPage'))
|
|
: null;
|
|
|
|
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: <AuftragBestellungPage /> },
|
|
{ path: 'angebot', element: <AuftragAngebotPage /> },
|
|
{ path: 'angebot/:quoteId', element: <AuftragAngebotEditPage /> },
|
|
{ path: 'neuesangebot', element: <AuftragAngebotNeuPage /> },
|
|
{ path: 'angebot/neu', element: <Navigate to="/auftrag/neuesangebot" replace /> },
|
|
{ path: 'neu', element: <Navigate to="/auftrag/neuesangebot" replace /> },
|
|
{ path: 'bestellung', element: <Navigate to="/auftrag" replace /> },
|
|
{ path: 'bestellung/neu', element: <AuftragBestellungNeuPage /> },
|
|
{ path: 'bestellung/:orderId', element: <AuftragBestellungEditPage /> },
|
|
{ path: 'ausliefern', element: <AuftragAusliefernPage /> },
|
|
{ path: 'retoure', element: <AuftragRetourePage /> },
|
|
{ path: 'retoure/neu', element: <AuftragRetoureNeuPage /> },
|
|
{ path: 'retoure/:retoureId', element: <AuftragRetoureEditPage /> },
|
|
{ path: 'zahlungen', element: <AuftragZahlungenPage /> },
|
|
{ path: 'versandarten', element: <AuftragVersandartenPage /> },
|
|
{ path: 'lieferarten', element: <Navigate to="/auftrag/versandarten" replace /> },
|
|
{ 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 /> },
|
|
],
|
|
},
|
|
...(import.meta.env.DEV
|
|
? [
|
|
{
|
|
path: 'debug',
|
|
element: <SectionLayout sectionPath="/debug" />,
|
|
children: [
|
|
{ index: true, element: <CompanyAutomatDebugPage /> },
|
|
{ path: 'company', element: <CompanyAutomatDebugPage /> },
|
|
{ path: 'companyautomat', element: <CompanyAutomatDebugPage /> },
|
|
],
|
|
},
|
|
]
|
|
: []),
|
|
{ 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;
|
|
}
|
|
|
|
export default function AppRouter() {
|
|
return <RouterProvider router={router} />;
|
|
}
|