'use client'
import Link from 'next/link'
import { AlertTriangle, CheckCircle, Info, Clock } from 'lucide-react'
import { cn, formatRelativeTime } from '@/lib/utils'
interface Alert {
id: string
severidad: 'INFO' | 'WARNING' | 'CRITICAL'
estado: 'ACTIVA' | 'RECONOCIDA' | 'RESUELTA'
titulo: string
mensaje: string
createdAt: Date
dispositivo?: { nombre: string } | null
cliente: { nombre: string }
}
interface AlertsFeedProps {
alerts: Alert[]
onAcknowledge?: (alertId: string) => void
onResolve?: (alertId: string) => void
maxItems?: number
}
export default function AlertsFeed({
alerts,
onAcknowledge,
onResolve,
maxItems = 10,
}: AlertsFeedProps) {
const displayAlerts = alerts.slice(0, maxItems)
if (displayAlerts.length === 0) {
return (
)
}
return (
Alertas Recientes
Ver todas
{displayAlerts.map((alert) => (
))}
)
}
function AlertItem({
alert,
onAcknowledge,
onResolve,
}: {
alert: Alert
onAcknowledge?: (alertId: string) => void
onResolve?: (alertId: string) => void
}) {
const severityConfig = {
CRITICAL: {
icon: ,
color: 'text-danger',
bgColor: 'bg-danger/20',
borderColor: 'border-l-danger',
},
WARNING: {
icon: ,
color: 'text-warning',
bgColor: 'bg-warning/20',
borderColor: 'border-l-warning',
},
INFO: {
icon: ,
color: 'text-info',
bgColor: 'bg-info/20',
borderColor: 'border-l-info',
},
}
const config = severityConfig[alert.severidad]
return (
{config.icon}
{alert.titulo}
{alert.mensaje}
{alert.estado}
{formatRelativeTime(alert.createdAt)}
{alert.dispositivo && (
{alert.dispositivo.nombre}
)}
{alert.cliente.nombre}
{alert.estado === 'ACTIVA' && (
)}
)
}