import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card" import { Button } from "@/components/ui/button" import { AlertTriangle, VolumeX, Clock, CheckCircle } from "lucide-react" import { useBedPressureStore } from "@/stores/bedPressureStore" import { useEffect } from "react" export function AlertsPanel() { const { alerts, activeAlarms, alarmManager, acknowledgeAlarm, silenceAlarm, silenceAllAlarms } = useBedPressureStore() // Update active alarms periodically useEffect(() => { const interval = setInterval(() => { // The store will handle updating alarms automatically }, 1000) return () => clearInterval(interval) }, [alarmManager]) const handleAcknowledge = (alarmId: string) => { acknowledgeAlarm(alarmId) } const handleSilence = (alarmId: string) => { silenceAlarm(alarmId, 300000) // Silence for 5 minutes } const handleSilenceAll = () => { silenceAllAlarms(300000) // Silence all for 5 minutes } const getAlarmIcon = (type: 'warning' | 'alarm') => { return type === 'alarm' ? ( ) : ( ) } const getAlarmBgColor = (type: 'warning' | 'alarm', silenced: boolean) => { 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 = filteredAlarms.some(alarm => !alarm.silenced) return ( Active Alarms ({filteredAlarms.length}) {activeAlarms.length > 0 && ( Silence All )} {filteredAlarms.length === 0 ? ( No active alarms System monitoring normally ) : ( filteredAlarms.map((alarm) => ( {getAlarmIcon(alarm.type)} {alarm.sensorLabel} {alarm.type.toUpperCase()} {alarm.silenced && ( SILENCED )} Value: {alarm.value.toFixed(0)} (Threshold: {alarm.threshold}) {alarm.time} {alarm.acknowledged && ( ACK )} {alarm.silenced && alarm.silencedUntil && ( Until {new Date(alarm.silencedUntil).toLocaleTimeString()} )} {!alarm.acknowledged && ( handleAcknowledge(alarm.id)} className="text-xs h-6 px-2" > ACK )} {!alarm.silenced && ( handleSilence(alarm.id)} className="text-xs h-6 px-2 text-orange-600 hover:text-orange-700" > )} )) )} {/* Legacy Alerts Section */} {alerts.length > 0 && ( Recent Alerts {alerts.slice(0, 3).map((alert) => ( {alert.message} {alert.time} ))} )} ) }
No active alarms
System monitoring normally
{alarm.sensorLabel}
Value: {alarm.value.toFixed(0)} (Threshold: {alarm.threshold})
{alert.message}
{alert.time}