77bc010ba9
Replace the Batch-1-stubbed authored-tag flow with a UnsTagReference list on the equipment page's Tags tab (v3 reference-only equipment): columns are effective name, computed raw path, inherited datatype/access (read-only), display-name override (editable), and remove. The retired equipment-authored-tag editor (TagModal.razor) is deleted; the VirtualTag and ScriptedAlarm flows are untouched. - "+ Add reference" opens a new AddReferenceModal that reuses RawTree in a new opt-in PickerMode (Tag-leaf checkboxes + Device/TagGroup "select all tags below"), scoped structurally to the equipment's cluster via LoadReferencePickerRootAsync (a single cluster root — cross-cluster tags are unreachable, not merely hidden). Default /raw usage is byte-unchanged (PickerMode defaults false). - UnsTreeService (+ IUnsTreeService) gain the reference mutations: LoadReferencesForEquipmentAsync (computes each RawPath via the shared RawPathResolver), AddReferencesAsync (cluster-checked, all-or-nothing), RemoveReferenceAsync, SetReferenceOverrideAsync, plus the picker helpers LoadReferencePickerRootAsync / LoadDescendantTagIdsAsync. - Consume IEffectiveNameGuard (constructor-injected, no-op fallback when unregistered): AddReferences, SetReferenceOverride, and the VirtualTag + ScriptedAlarm create/update mutations now call CheckAsync before persisting and surface a collision as the failure. WP2 supplies the implementation + DI registration. - Drop the retired equipment↔driver binding: remove DriverInstanceId from EquipmentInput, the ImportEquipmentModal CSV column, the EquipmentPage Details driver select, and the dead decision-#122 driver-cluster guard. Tests: new UnsTreeServiceReferenceTests (add/remove/override, cross-cluster + duplicate rejection, guard-consumed rejection via a fake guard, RawPath projection, picker helpers); Equipment/Import test suites rewritten to drop the retired driver-guard cases. AdminUI suite green (639 passed, 3 skipped); full solution builds 0 errors. Claude-Session: https://claude.ai/code/session_01LVneM3eh1UtJxEisFXgmox
37 lines
2.2 KiB
C#
37 lines
2.2 KiB
C#
using ZB.MOM.WW.OtOpcUa.Configuration.Enums;
|
|
|
|
namespace ZB.MOM.WW.OtOpcUa.AdminUI.Uns;
|
|
|
|
/// <summary>A tag row for the equipment page's Tags tab table — display columns plus the id used to
|
|
/// open the edit modal. RowVersion is re-read fresh on delete (matching the tree's delete path).</summary>
|
|
public sealed record EquipmentTagRow(
|
|
string TagId, string Name, string DriverInstanceId, string DataType, TagAccessLevel AccessLevel);
|
|
|
|
/// <summary>A virtual-tag row for the equipment page's Virtual Tags tab table.</summary>
|
|
public sealed record EquipmentVirtualTagRow(string VirtualTagId, string Name, string DataType, string ScriptId, bool Enabled);
|
|
|
|
/// <summary>
|
|
/// A UNS tag-reference row for the equipment page's Tags tab table (v3 reference-only equipment). Each
|
|
/// row projects a <see cref="Configuration.Entities.UnsTagReference"/> together with the backing raw
|
|
/// tag's inherited (read-only) datatype/access and computed RawPath. The effective name is the
|
|
/// <c>DisplayNameOverride</c> when set, else the backing raw tag's <c>Name</c>. <c>RowVersion</c> is the
|
|
/// reference row's concurrency token, echoed on the override-set / remove mutations.
|
|
/// </summary>
|
|
/// <param name="UnsTagReferenceId">The reference's stable logical id (the mutation key).</param>
|
|
/// <param name="EffectiveName">Override else the raw tag's Name — the UNS leaf name.</param>
|
|
/// <param name="RawPath">The backing raw tag's computed RawPath (folder/driver/device/group/tag).</param>
|
|
/// <param name="DataType">Inherited OPC UA built-in type name from the raw tag (read-only).</param>
|
|
/// <param name="AccessLevel">Inherited access level from the raw tag (read-only).</param>
|
|
/// <param name="DisplayNameOverride">The optional display-name override; <c>null</c> = use the raw name.</param>
|
|
/// <param name="SortOrder">Sibling display ordering within the equipment's Tags list.</param>
|
|
/// <param name="RowVersion">The reference row's optimistic-concurrency token.</param>
|
|
public sealed record EquipmentReferenceRow(
|
|
string UnsTagReferenceId,
|
|
string EffectiveName,
|
|
string RawPath,
|
|
string DataType,
|
|
TagAccessLevel AccessLevel,
|
|
string? DisplayNameOverride,
|
|
int SortOrder,
|
|
byte[] RowVersion);
|