Closes #18. Navigating away from a PO create/edit screen with unsaved changes could silently lose in-progress work. The forms now track a dirty flag and guard both navigation paths: - Hard navigations (refresh / tab close / external link) → the browser's native "Leave site?" prompt via beforeunload. - In-app navigations (sidebar / header / any internal link) → a capture-phase click interceptor opens a modal offering Save as draft / Discard changes / Stay on page. Save as draft runs the form's existing draft save (which redirects to the PO); Discard continues to the intended destination. The guard (components/po/unsaved-changes-guard.tsx) is reusable and wired into both new-po-form and edit-po-form. dirty is cleared before a successful submit so saving never trips the prompt. SPA back-button (popstate) is left to beforeunload only; the manager inline-edit panel is out of scope (saves in place, no draft concept). Tests: 7 new unit cases for the guard (intercept-when-dirty, no-op-when-clean, external links pass through, Stay/Discard/Save actions, beforeunload arming). Unit suite 296 green; tsc clean. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> |
||
|---|---|---|
| .. | ||
| dashboard | ||
| inventory | ||
| layout | ||
| po | ||
| ui | ||
| env-banner.tsx | ||