feat(centralui): extract AlarmStateBadges shared component from DebugView (T13)
This commit is contained in:
@@ -209,33 +209,7 @@
|
||||
{
|
||||
<span class="text-info me-1" aria-label="Has operator message">💬</span>
|
||||
}
|
||||
<span class="badge @GetAlarmStateBadge(node.Alarm.State) me-1"
|
||||
aria-label="@($"Alarm state: {node.Alarm.State}")">@node.Alarm.State</span>
|
||||
<span class="badge @GetKindBadge(node.Alarm.Kind) me-1"
|
||||
aria-label="@($"Alarm kind: {node.Alarm.Kind}")">@FormatKind(node.Alarm.Kind)</span>
|
||||
@if (node.Alarm.Kind != AlarmKind.Computed)
|
||||
{
|
||||
@if (node.Alarm.Condition.Active && !node.Alarm.Condition.Acknowledged)
|
||||
{
|
||||
<span class="badge bg-warning text-dark me-1" aria-label="Unacknowledged">Unacked</span>
|
||||
}
|
||||
@if (node.Alarm.Condition.Shelve != AlarmShelveState.Unshelved)
|
||||
{
|
||||
<span class="badge bg-info text-dark me-1" title="@node.Alarm.Condition.Shelve"
|
||||
aria-label="@($"Shelved: {node.Alarm.Condition.Shelve}")">Shelved</span>
|
||||
}
|
||||
@if (node.Alarm.Condition.Suppressed)
|
||||
{
|
||||
<span class="badge bg-info text-dark me-1" aria-label="Suppressed">Suppressed</span>
|
||||
}
|
||||
}
|
||||
<span class="font-monospace small text-muted me-1"
|
||||
aria-label="@($"Severity: {node.Alarm.Condition.Severity}")">sev @node.Alarm.Condition.Severity</span>
|
||||
@if (node.Alarm.Level != AlarmLevel.None)
|
||||
{
|
||||
<span class="badge @GetAlarmLevelBadge(node.Alarm.Level) me-1"
|
||||
aria-label="@($"Alarm level: {node.Alarm.Level}")">@FormatLevel(node.Alarm.Level)</span>
|
||||
}
|
||||
<AlarmStateBadges Alarm="node.Alarm" />
|
||||
}
|
||||
else if (node.IsNativeBinding)
|
||||
{
|
||||
@@ -577,6 +551,10 @@
|
||||
_ => "bg-secondary"
|
||||
};
|
||||
|
||||
/// <summary>
|
||||
/// State badge class shared by the alarm leaf (via <c>AlarmStateBadges</c>)
|
||||
/// and the native/composition branch summary badges below (worst-state roll-up).
|
||||
/// </summary>
|
||||
private static string GetAlarmStateBadge(AlarmState state) => state switch
|
||||
{
|
||||
AlarmState.Active => "bg-danger",
|
||||
@@ -584,32 +562,6 @@
|
||||
_ => "bg-secondary"
|
||||
};
|
||||
|
||||
/// <summary>
|
||||
/// Severity-tinted badge class for HiLo alarm levels. The critical bands
|
||||
/// (HighHigh / LowLow) get the danger class; warning bands get amber.
|
||||
/// </summary>
|
||||
private static string GetAlarmLevelBadge(AlarmLevel level) => level switch
|
||||
{
|
||||
AlarmLevel.HighHigh or AlarmLevel.LowLow => "bg-danger",
|
||||
AlarmLevel.High or AlarmLevel.Low => "bg-warning text-dark",
|
||||
_ => "bg-secondary"
|
||||
};
|
||||
|
||||
/// <summary>Badge class distinguishing computed (neutral) from native (info) alarms.</summary>
|
||||
private static string GetKindBadge(AlarmKind kind) => kind switch
|
||||
{
|
||||
AlarmKind.Computed => "bg-secondary",
|
||||
_ => "bg-info text-dark"
|
||||
};
|
||||
|
||||
/// <summary>Short display label for the alarm kind.</summary>
|
||||
private static string FormatKind(AlarmKind kind) => kind switch
|
||||
{
|
||||
AlarmKind.NativeOpcUa => "OPC UA",
|
||||
AlarmKind.NativeMxAccess => "MxAccess",
|
||||
_ => "Computed"
|
||||
};
|
||||
|
||||
/// <summary>
|
||||
/// Builds the row tooltip from the alarm's operator message plus native
|
||||
/// metadata (type, category, operator, raise time, current/limit value).
|
||||
@@ -629,15 +581,6 @@
|
||||
return parts.Count == 0 ? null : string.Join(" · ", parts);
|
||||
}
|
||||
|
||||
private static string FormatLevel(AlarmLevel level) => level switch
|
||||
{
|
||||
AlarmLevel.HighHigh => "HiHi",
|
||||
AlarmLevel.High => "Hi",
|
||||
AlarmLevel.Low => "Lo",
|
||||
AlarmLevel.LowLow => "LoLo",
|
||||
_ => "—"
|
||||
};
|
||||
|
||||
/// <summary>
|
||||
/// Runs <paramref name="action"/> on the render thread, guarded against the
|
||||
/// component being disposed mid-flight (CentralUI-009): <c>InvokeAsync</c>
|
||||
|
||||
@@ -0,0 +1,80 @@
|
||||
@using ZB.MOM.WW.ScadaBridge.Commons.Messages.Streaming
|
||||
@using ZB.MOM.WW.ScadaBridge.Commons.Types.Enums
|
||||
|
||||
@* ── Alarm leaf badge cluster ── *@
|
||||
@* State / kind / native sub-state / severity / HiLo level badges for one alarm. *@
|
||||
@* Lifted verbatim from DebugView so the Alarm Summary page renders identically. *@
|
||||
<span class="badge @GetAlarmStateBadge(Alarm.State) me-1"
|
||||
aria-label="@($"Alarm state: {Alarm.State}")">@Alarm.State</span>
|
||||
<span class="badge @GetKindBadge(Alarm.Kind) me-1"
|
||||
aria-label="@($"Alarm kind: {Alarm.Kind}")">@FormatKind(Alarm.Kind)</span>
|
||||
@if (Alarm.Kind != AlarmKind.Computed)
|
||||
{
|
||||
@if (Alarm.Condition.Active && !Alarm.Condition.Acknowledged)
|
||||
{
|
||||
<span class="badge bg-warning text-dark me-1" aria-label="Unacknowledged">Unacked</span>
|
||||
}
|
||||
@if (Alarm.Condition.Shelve != AlarmShelveState.Unshelved)
|
||||
{
|
||||
<span class="badge bg-info text-dark me-1" title="@Alarm.Condition.Shelve"
|
||||
aria-label="@($"Shelved: {Alarm.Condition.Shelve}")">Shelved</span>
|
||||
}
|
||||
@if (Alarm.Condition.Suppressed)
|
||||
{
|
||||
<span class="badge bg-info text-dark me-1" aria-label="Suppressed">Suppressed</span>
|
||||
}
|
||||
}
|
||||
<span class="font-monospace small text-muted me-1"
|
||||
aria-label="@($"Severity: {Alarm.Condition.Severity}")">sev @Alarm.Condition.Severity</span>
|
||||
@if (Alarm.Level != AlarmLevel.None)
|
||||
{
|
||||
<span class="badge @GetAlarmLevelBadge(Alarm.Level) me-1"
|
||||
aria-label="@($"Alarm level: {Alarm.Level}")">@FormatLevel(Alarm.Level)</span>
|
||||
}
|
||||
|
||||
@code {
|
||||
/// <summary>The alarm condition whose badges this component renders.</summary>
|
||||
[Parameter] public AlarmStateChanged Alarm { get; set; } = default!;
|
||||
|
||||
private static string GetAlarmStateBadge(AlarmState state) => state switch
|
||||
{
|
||||
AlarmState.Active => "bg-danger",
|
||||
AlarmState.Normal => "bg-success",
|
||||
_ => "bg-secondary"
|
||||
};
|
||||
|
||||
/// <summary>
|
||||
/// Severity-tinted badge class for HiLo alarm levels. The critical bands
|
||||
/// (HighHigh / LowLow) get the danger class; warning bands get amber.
|
||||
/// </summary>
|
||||
private static string GetAlarmLevelBadge(AlarmLevel level) => level switch
|
||||
{
|
||||
AlarmLevel.HighHigh or AlarmLevel.LowLow => "bg-danger",
|
||||
AlarmLevel.High or AlarmLevel.Low => "bg-warning text-dark",
|
||||
_ => "bg-secondary"
|
||||
};
|
||||
|
||||
/// <summary>Badge class distinguishing computed (neutral) from native (info) alarms.</summary>
|
||||
private static string GetKindBadge(AlarmKind kind) => kind switch
|
||||
{
|
||||
AlarmKind.Computed => "bg-secondary",
|
||||
_ => "bg-info text-dark"
|
||||
};
|
||||
|
||||
/// <summary>Short display label for the alarm kind.</summary>
|
||||
private static string FormatKind(AlarmKind kind) => kind switch
|
||||
{
|
||||
AlarmKind.NativeOpcUa => "OPC UA",
|
||||
AlarmKind.NativeMxAccess => "MxAccess",
|
||||
_ => "Computed"
|
||||
};
|
||||
|
||||
private static string FormatLevel(AlarmLevel level) => level switch
|
||||
{
|
||||
AlarmLevel.HighHigh => "HiHi",
|
||||
AlarmLevel.High => "Hi",
|
||||
AlarmLevel.Low => "Lo",
|
||||
AlarmLevel.LowLow => "LoLo",
|
||||
_ => "—"
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user