UNPKG

@ima/react-page-renderer

Version:

IMA.js React page renderer.

47 lines (46 loc) 1.33 kB
import { useCallback, useEffect, useMemo } from 'react'; import { useComponentUtils } from './componentUtils'; /** * Hook to register listeners for dispatcher events. Returns * decorated dispatcher fire function. Omitting hook params * doesn't register any events to the dispatcher but provides * access to the dispatcher's fire method. * * @example * const { fire } = useEventBus( * componentRef.current, * 'event', * () => {} * ); * * @param event Event name. * @param callback Callback to register to dispatcher. * @returns Dispatcher `fire` method. */ export function useEventBus(eventTarget, eventName, listener) { const { $EventBus } = useComponentUtils(); const memoListener = useCallback((...args)=>{ listener?.(...args); }, [ listener ]); useEffect(()=>{ if (!eventTarget || !eventName || !memoListener) { return; } $EventBus.listen(eventTarget, eventName, memoListener); return ()=>{ $EventBus.unlisten(eventTarget, eventName, memoListener); }; }, [ $EventBus, eventName, eventTarget, memoListener ]); return useMemo(()=>({ fire: (...params)=>$EventBus.fire(...params) }), [ $EventBus ]); } //# sourceMappingURL=eventBus.js.map