/** * Reactive React hook for the unified event bus. * Returns recent events and refreshes on push. */ import { useEffect, useState } from 'react' import { eventBus, type BusEvent } from '../lib/event-bus' export function useEventBus(limit = 20, maxAgeMs = 5 * 60 * 1000): { events: BusEvent[] contextString: string clear: () => void } { const [events, setEvents] = useState([]) useEffect(() => { eventBus.init() setEvents(eventBus.recent(limit, maxAgeMs)) const unsub = eventBus.subscribe(() => { setEvents(eventBus.recent(limit, maxAgeMs)) }) // Light polling to refresh maxAge windows const iv = setInterval(() => { setEvents(eventBus.recent(limit, maxAgeMs)) }, 15_000) return () => { unsub(); clearInterval(iv) } }, [limit, maxAgeMs]) return { events, contextString: eventBus.contextString(limit, maxAgeMs), clear: () => eventBus.clear(), } }