From 628980dc491c06175ae3f944f59bb8d868efc9f5 Mon Sep 17 00:00:00 2001 From: seb Date: Thu, 6 Aug 2026 22:47:51 +0200 Subject: [PATCH] Fix manifest list create/edit navigation after Vite HMR. Keep a single browser router across hot reloads and drive ManifestList/Form via withNavigate instead of a stale router.navigate singleton. --- src/appRouter.jsx | 23 +++++++++++--------- src/components/manifest/ManifestForm.jsx | 6 +++--- src/components/manifest/ManifestList.jsx | 27 +++++++++++++++++++----- 3 files changed, 38 insertions(+), 18 deletions(-) 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 {