feat: Refactor alarm filtering logic to improve active alarms display and ensure warnings are correctly filtered

This commit is contained in:
Siwat Sirichai 2025-06-21 19:23:23 +07:00
parent 83286c318e
commit f82b5b6abb

View file

@ -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)}`}