import { useEffect, useMemo, useState } from 'react'; import { useSession } from '../context/SessionContext.jsx'; const LIFETIME_MS = 5000; function buildKey(alert) { if (alert.id) return alert.id; if (alert.timestamp) return `${alert.timestamp}-${alert.message}`; return `${alert.title || 'alert'}-${alert.message}`; } export default function AlertFeed() { const { alerts } = useSession(); const [now, setNow] = useState(() => Date.now()); const latest = useMemo(() => alerts.slice(-5).map((alert) => ({ alert, key: buildKey(alert) })), [alerts]); useEffect(() => { if (!latest.length) return undefined; const interval = setInterval(() => setNow(Date.now()), 200); return () => clearInterval(interval); }, [latest.length]); const visible = latest .map((item) => ({ ...item, age: now - (item.alert.receivedAt ?? item.alert.timestamp ?? 0), })) .filter((item) => item.age <= LIFETIME_MS); if (!visible.length) return null; return (
{alert.title || 'Alert'}
{alert.message}