diff --git a/src/appRouter.jsx b/src/appRouter.jsx
index c6294f9..a698d7b 100644
--- a/src/appRouter.jsx
+++ b/src/appRouter.jsx
@@ -26,7 +26,7 @@ const KundeGruppenPage = lazy(() => import('./pages/kunde/gruppen'));
const KundeEditPage = lazy(() => import('./pages/kunde/edit'));
const InfosPage = lazy(() => import('./pages/infos/index'));
-export const router = createBrowserRouter([
+const routes = [
{
path: '/',
element: ,
@@ -64,14 +64,9 @@ export const router = createBrowserRouter([
children: [
{ index: true, element: },
{ path: 'neu', element: },
- {
- path: 'bestellung',
- children: [
- { index: true, element: },
- { path: 'neu', element: },
- { path: ':orderId', element: },
- ],
- },
+ { path: 'bestellung', element: },
+ { path: 'bestellung/neu', element: },
+ { path: 'bestellung/:orderId', element: },
{ path: 'ausliefern', element: },
{ path: 'retoure', element: },
{ path: ':quoteId', element: },
@@ -90,4 +85,12 @@ export const router = createBrowserRouter([
{ path: '*', element: },
],
},
-]);
+];
+
+/** 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;
+}
diff --git a/src/components/manifest/ManifestForm.jsx b/src/components/manifest/ManifestForm.jsx
index 11d6785..ca4afe7 100644
--- a/src/components/manifest/ManifestForm.jsx
+++ b/src/components/manifest/ManifestForm.jsx
@@ -6,10 +6,10 @@ import { enqueueSnackbar } from 'notistack';
import BackendError from '../BackendError';
import { PanelTile, PanelTileGrid } from '../panels';
import { StorageManagerContext } from '../../api/storageManagerContext';
-import { router } from '../../appRouter';
import { requireArray, requireDefined, requireObject } from '../../utils/apiShape';
import { backendErrorFrom } from '../../utils/backendError';
import { notifyError } from '../../utils/notify';
+import withNavigate from '../withNavigate';
import ManifestHeader from './ManifestHeader';
import ManifestLines from './ManifestLines';
import {
@@ -209,7 +209,7 @@ class ManifestForm extends PureComponent {
await this.context[cfg.updateCache]();
if (this._cancelled) return;
enqueueSnackbar(cfg.createdMsg, { variant: 'success' });
- void router.navigate(cfg.editPath(data[cfg.docField].id));
+ this.props.navigate(cfg.editPath(data[cfg.docField].id));
return;
}
@@ -318,4 +318,4 @@ class ManifestForm extends PureComponent {
}
}
-export default ManifestForm;
+export default withNavigate(ManifestForm);
diff --git a/src/components/manifest/ManifestList.jsx b/src/components/manifest/ManifestList.jsx
index ef87e4b..056968f 100644
--- a/src/components/manifest/ManifestList.jsx
+++ b/src/components/manifest/ManifestList.jsx
@@ -17,9 +17,9 @@ import { enqueueSnackbar } from 'notistack';
import BackendError from '../BackendError';
import { PanelTile, PanelTileGrid } from '../panels';
import { StorageManagerContext } from '../../api/storageManagerContext';
-import { router } from '../../appRouter';
import { backendErrorFrom } from '../../utils/backendError';
import { notifyError } from '../../utils/notify';
+import withNavigate from '../withNavigate';
import {
formatDate,
loadParties,
@@ -79,12 +79,22 @@ class ManifestList extends PureComponent {
void this.load();
}
+ /** Same path as AppShell sub-nav: live useNavigate via withNavigate. */
+ go(to) {
+ const { navigate } = this.props;
+ if (typeof navigate === 'function') {
+ navigate(to);
+ return;
+ }
+ window.location.assign(to);
+ }
+
handleCreate() {
- void router.navigate(this.cfg.createPath);
+ this.go(this.cfg.createPath);
}
handleEdit(doc) {
- void router.navigate(this.cfg.editPath(doc.id));
+ this.go(this.cfg.editPath(doc.id));
}
async handleDelete(doc) {
@@ -139,7 +149,12 @@ class ManifestList extends PureComponent {
-
@@ -175,6 +190,7 @@ class ManifestList extends PureComponent {
onClick={(e) => e.stopPropagation()}
>
this.handleEdit(row)}
@@ -182,6 +198,7 @@ class ManifestList extends PureComponent {