From d7ddaff735bd533be39f66061a5614074e567575 Mon Sep 17 00:00:00 2001 From: Pulse Monitor Date: Mon, 18 Aug 2025 07:35:44 +0000 Subject: [PATCH] fix: preserve alert threshold edit state during WebSocket updates (#295) The edit state was being lost when WebSocket updates triggered component re-renders every 5 seconds. Fixed by: 1. Only resetting edit values when editing starts, not on every update 2. Checking if overrides actually changed before updating state 3. Preserving the editing state across WebSocket data refreshes --- frontend-modern/src/pages/Alerts.tsx | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/frontend-modern/src/pages/Alerts.tsx b/frontend-modern/src/pages/Alerts.tsx index 817aed065..90e49deb4 100644 --- a/frontend-modern/src/pages/Alerts.tsx +++ b/frontend-modern/src/pages/Alerts.tsx @@ -169,7 +169,19 @@ export function Alerts() { } } }); - setOverrides(overridesList); + + // Only update if there's an actual change to prevent losing edit state + const currentOverrides = overrides(); + const hasChanged = overridesList.length !== currentOverrides.length || + overridesList.some((newOverride) => { + const existing = currentOverrides.find(o => o.id === newOverride.id); + if (!existing) return true; + return JSON.stringify(newOverride.thresholds) !== JSON.stringify(existing.thresholds); + }); + + if (hasChanged) { + setOverrides(overridesList); + } } }); @@ -998,11 +1010,16 @@ function OverrideItem(props: { }) { const [editValues, setEditValues] = createSignal({ ...props.override.thresholds }); - // Update edit values when override changes or editing starts + // Only reset edit values when editing STARTS, not when override updates + // This preserves the user's changes during WebSocket updates + let previousEditingState = false; createEffect(() => { - if (props.isEditing) { + const isEditingNow = props.isEditing; + // Only reset values when transitioning from not-editing to editing + if (isEditingNow && !previousEditingState) { setEditValues({ ...props.override.thresholds }); } + previousEditingState = isEditingNow; }); const handleSave = () => {