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
This commit is contained in:
Pulse Monitor
2025-08-18 07:35:44 +00:00
parent 67b9f67ad0
commit d7ddaff735
+20 -3
View File
@@ -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 = () => {