From 60f8e2c9a74345efe58e142d2c6f0e409f3cb243 Mon Sep 17 00:00:00 2001 From: Joseph Doherty Date: Sun, 31 May 2026 02:40:52 -0400 Subject: [PATCH] feat(ui): template editor Native Alarm Sources subsection --- .../Pages/Design/TemplateEdit.razor | 260 ++++++++++++++++++ .../TemplateNativeAlarmSourceEditorTests.cs | 70 +++++ 2 files changed, 330 insertions(+) create mode 100644 tests/ZB.MOM.WW.ScadaBridge.CentralUI.Tests/Design/TemplateNativeAlarmSourceEditorTests.cs diff --git a/src/ZB.MOM.WW.ScadaBridge.CentralUI/Components/Pages/Design/TemplateEdit.razor b/src/ZB.MOM.WW.ScadaBridge.CentralUI/Components/Pages/Design/TemplateEdit.razor index eb981461..3c0c7307 100644 --- a/src/ZB.MOM.WW.ScadaBridge.CentralUI/Components/Pages/Design/TemplateEdit.razor +++ b/src/ZB.MOM.WW.ScadaBridge.CentralUI/Components/Pages/Design/TemplateEdit.razor @@ -2,6 +2,7 @@ @using ZB.MOM.WW.ScadaBridge.Security @using ZB.MOM.WW.ScadaBridge.Commons.Entities.Instances @using ZB.MOM.WW.ScadaBridge.Commons.Entities.Templates +@using ZB.MOM.WW.ScadaBridge.Commons.Entities.Sites @using ZB.MOM.WW.ScadaBridge.Commons.Interfaces.Repositories @using ZB.MOM.WW.ScadaBridge.Commons.Types.Enums @using ZB.MOM.WW.ScadaBridge.TemplateEngine @@ -92,6 +93,19 @@ private bool _alarmIsLocked; private string? _alarmFormError; + // Native alarm source bindings (read-only mirror of OPC UA A&C / MxGateway alarms) + private List _nativeSources = new(); + private List _alarmCapableConnections = new(); + private bool _showNativeSourceForm; + private int? _editNativeSourceId; + private string _nasName = string.Empty; + private string _nasConnection = string.Empty; + private string _nasSourceRef = string.Empty; + private string? _nasFilter; + private string? _nasDescription; + private bool _nasIsLocked; + private string? _nasFormError; + private bool _showScriptForm; private int? _editScriptId; private string _scriptName = string.Empty; @@ -156,6 +170,13 @@ _attributes = (await TemplateEngineRepository.GetAttributesByTemplateIdAsync(Id)).ToList(); _alarms = (await TemplateEngineRepository.GetAlarmsByTemplateIdAsync(Id)).ToList(); + _nativeSources = (await TemplateEngineRepository.GetNativeAlarmSourcesByTemplateIdAsync(Id)).ToList(); + _alarmCapableConnections = (await CentralUiRepository.GetAllDataConnectionsAsync()) + .Where(c => IsAlarmCapable(c.Protocol)) + .GroupBy(c => c.Name, StringComparer.OrdinalIgnoreCase) + .Select(g => g.First()) + .OrderBy(c => c.Name, StringComparer.OrdinalIgnoreCase) + .ToList(); _scripts = (await TemplateEngineRepository.GetScriptsByTemplateIdAsync(Id)).ToList(); _compositions = (await TemplateEngineRepository.GetCompositionsByTemplateIdAsync(Id)).ToList(); @@ -352,6 +373,15 @@ Alarms @_alarms.Count +