feat: Refactor alarm filtering logic to improve active alarms display and ensure warnings are correctly filtered
This commit is contained in:
parent
83286c318e
commit
f82b5b6abb
1 changed files with 13 additions and 6 deletions
|
@ -47,8 +47,16 @@ export function AlertsPanel() {
|
|||
if (silenced) return "bg-gray-100 border-gray-300"
|
||||
return type === 'alarm' ? "bg-red-50 border-red-200" : "bg-yellow-50 border-yellow-200"
|
||||
}
|
||||
// Filter out warnings when there's an alarm with the same sensor name
|
||||
const filteredAlarms = activeAlarms.filter(alarm => {
|
||||
if (alarm.type === 'alarm') return true
|
||||
// For warnings, only keep if there's no alarm with the same sensor name
|
||||
return !activeAlarms.some(other =>
|
||||
other.type === 'alarm' && other.sensorLabel === alarm.sensorLabel
|
||||
)
|
||||
})
|
||||
|
||||
const hasActiveAlarms = activeAlarms.some(alarm => !alarm.silenced)
|
||||
const hasActiveAlarms = filteredAlarms.some(alarm => !alarm.silenced)
|
||||
|
||||
return (
|
||||
<Card>
|
||||
|
@ -56,7 +64,7 @@ export function AlertsPanel() {
|
|||
<div className="flex items-center justify-between">
|
||||
<CardTitle className="flex items-center gap-2">
|
||||
<AlertTriangle className={`w-5 h-5 ${hasActiveAlarms ? "text-red-600 animate-pulse" : "text-gray-400"}`} />
|
||||
Active Alarms ({activeAlarms.length})
|
||||
Active Alarms ({filteredAlarms.length})
|
||||
</CardTitle>
|
||||
{activeAlarms.length > 0 && (
|
||||
<Button
|
||||
|
@ -70,17 +78,16 @@ export function AlertsPanel() {
|
|||
</Button>
|
||||
)}
|
||||
</div>
|
||||
</CardHeader>
|
||||
<CardContent>
|
||||
</CardHeader> <CardContent>
|
||||
<div className="space-y-3 max-h-80 overflow-y-auto">
|
||||
{activeAlarms.length === 0 ? (
|
||||
{filteredAlarms.length === 0 ? (
|
||||
<div className="text-center py-8">
|
||||
<CheckCircle className="w-12 h-12 text-green-500 mx-auto mb-2" />
|
||||
<p className="text-sm text-gray-500">No active alarms</p>
|
||||
<p className="text-xs text-gray-400">System monitoring normally</p>
|
||||
</div>
|
||||
) : (
|
||||
activeAlarms.map((alarm) => (
|
||||
filteredAlarms.map((alarm) => (
|
||||
<div
|
||||
key={alarm.id}
|
||||
className={`p-3 rounded-lg border ${getAlarmBgColor(alarm.type, alarm.silenced)}`}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue