From 91d8aa5055ac9ec347eaf53b74fc13c0517f1253 Mon Sep 17 00:00:00 2001 From: fs Date: Sun, 22 Mar 2026 22:27:41 +0100 Subject: [PATCH] fix: prevent false dirty indicator on read-only detail pages Async component init (e.g. MultiSelect replacing elements) — re-baseline instead of flagging as dirty. + formObserver = new MutationObserver((mutations) => { + if (actionPolicy.isSubmitting()) { + return; } + if (!formStabilized) { + const hasStructuralChange = mutations.some((m) => m.type === 'childList'); + if (hasStructuralChange) { + initialState = createFormStateMap(form); + syncUnsavedIndicator(); + return; + } + } + syncUnsavedIndicator(); }); formObserver.observe(form, { subtree: true, @@ -471,6 +484,10 @@ export function initStandardDetailPage(options = {}) { }); } + const markStabilized = () => { formStabilized = true; }; + form.addEventListener('input', markStabilized, { once: true }); + form.addEventListener('change', markStabilized, { once: true }); + const onKeyDown = (event) => { if (!(event.metaKey || event.ctrlKey) || event.altKey || event.shiftKey) { return;