// Alerts feed function Alerts({ alerts, nodes, onSelectNode, onAck }) { const [filter, setFilter] = React.useState('all'); const filtered = alerts.filter(a => filter === 'all' || a.severity === filter || (filter === 'unacked' && !a.ack)); return (
Filter
{[ {k:'all', l:'all'}, {k:'crit', l:'critical'}, {k:'warn', l:'warning'}, {k:'info', l:'info'}, {k:'unacked', l:'unacked'}, ].map(f => ( ))}
{filtered.length} events
{filtered.map(a => { const node = nodes.find(n => n.id === a.node); return (
node && onSelectNode(node)}> {window.fmtRel(a.ts)} {a.severity} {a.title} {node?.hostname} ยท {a.body}
{!a.ack ? ( ) : ( acknowledged )}
); })}
); } Object.assign(window, { Alerts });