import { useEffect, useState } from 'react'; import { BusEvent, BusEventType, EventBus } from '@grafana/data'; /** A bit more efficient than using useObservable(eventBus.getStream(MyEventType)) as that will create a new Observable and subscription every render */ export function useBusEvent(eventBus: EventBus, eventType: BusEventType): T | undefined { const [event, setEvent] = useState(); useEffect(() => { const sub = eventBus.subscribe(eventType, setEvent); return () => sub.unsubscribe(); }, [eventBus, eventType]); return event; }