From f1b9e7116b54348e46635b4f5ca09d325587116d Mon Sep 17 00:00:00 2001 From: Joseph Doherty Date: Thu, 11 Jun 2026 15:03:43 -0400 Subject: [PATCH] fix(uns): guard ScriptedAlarmModal form rebuild against stray re-renders (code-review) --- .../Shared/Uns/ScriptedAlarmModal.razor | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Shared/Uns/ScriptedAlarmModal.razor b/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Shared/Uns/ScriptedAlarmModal.razor index 799ed463..e89c7963 100644 --- a/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Shared/Uns/ScriptedAlarmModal.razor +++ b/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Shared/Uns/ScriptedAlarmModal.razor @@ -137,8 +137,25 @@ private bool _busy; private string? _error; + // Tracks which open this modal last loaded for, so unrelated Blazor Server re-renders don't + // rebuild _form and clobber in-progress edits. Null while closed. + private string? _loadedKey; + protected override void OnParametersSet() { + if (!Visible) + { + _loadedKey = null; // closed → next open reloads fresh + return; + } + + // Guard against unrelated re-renders. In Blazor Server any live-status push re-invokes + // OnParametersSet; without this the rebuild below would silently discard whatever the + // operator has typed. Only rebuild when the modal OPENS or the target entity CHANGES. + var key = IsNew ? "" : Existing?.ScriptedAlarmId; + if (key == _loadedKey) return; // same open, re-render → preserve in-progress form edits + _loadedKey = key; + // Rebuild the working form whenever the host (re)opens the modal for a fresh target. if (IsNew) {