@ima/react-page-renderer
Version:
IMA.js React page renderer.
47 lines (46 loc) • 1.33 kB
JavaScript
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