@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. *@
@Alarm.State
@FormatKind(Alarm.Kind)
@if (Alarm.Kind != AlarmKind.Computed)
{
@if (Alarm.Condition.Active && !Alarm.Condition.Acknowledged)
{
Unacked
}
@if (Alarm.Condition.Shelve != AlarmShelveState.Unshelved)
{
Shelved
}
@if (Alarm.Condition.Suppressed)
{
Suppressed
}
}
sev @Alarm.Condition.Severity
@if (Alarm.Level != AlarmLevel.None)
{
@FormatLevel(Alarm.Level)
}
@code {
/// The alarm condition whose badges this component renders.
[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"
};
///
/// Severity-tinted badge class for HiLo alarm levels. The critical bands
/// (HighHigh / LowLow) get the danger class; warning bands get amber.
///
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"
};
/// Badge class distinguishing computed (neutral) from native (info) alarms.
private static string GetKindBadge(AlarmKind kind) => kind switch
{
AlarmKind.Computed => "bg-secondary",
_ => "bg-info text-dark"
};
/// Short display label for the alarm kind.
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",
_ => "—"
};
}