UNPKG

@deephaven/golden-layout

Version:

A multi-screen javascript Layout manager

60 lines (58 loc) 2.37 kB
import { useEffect, useRef } from 'react'; /** * Listen for an event * @param eventEmitter The event emitter to listen to * @param event The event to listen for * @param handler The handler to call when the event is emitted * @returns A function to stop listening for the event */ export function listenForEvent(eventEmitter, event, handler) { eventEmitter.on(event, handler); return () => { eventEmitter.off(event, handler); }; } export function makeListenFunction(event) { return (eventEmitter, handler) => listenForEvent(eventEmitter, event, handler); } export function makeEmitFunction(event) { return function (eventEmitter) { for (var _len = arguments.length, parameters = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { parameters[_key - 1] = arguments[_key]; } eventEmitter.emit(event, ...parameters); }; } export function makeUseListenerFunction(event) { return (eventEmitter, handler) => { var eventEmitterRef = useRef(null); var handlerRef = useRef(() => false); if (eventEmitterRef.current != eventEmitter || handlerRef.current != handler) { var _eventEmitterRef$curr; (_eventEmitterRef$curr = eventEmitterRef.current) === null || _eventEmitterRef$curr === void 0 || _eventEmitterRef$curr.off(event, handlerRef.current); eventEmitter === null || eventEmitter === void 0 || eventEmitter.on(event, handler); } eventEmitterRef.current = eventEmitter; handlerRef.current = handler; // Cleanup on unmount // Mounting the listener in useEffect causes a race condition with embed-widget // where the event is emitted during render before the useEffect runs after render. useEffect(() => () => { var _eventEmitterRef$curr2; return (_eventEmitterRef$curr2 = eventEmitterRef.current) === null || _eventEmitterRef$curr2 === void 0 ? void 0 : _eventEmitterRef$curr2.off(event, handlerRef.current); }, []); }; } /** * Create listener, emitter, and hook functions for an event * @param event Name of the event to create functions for * @returns Listener, Emitter, and Hook functions for the event */ export function makeEventFunctions(event) { return { listen: makeListenFunction(event), emit: makeEmitFunction(event), useListener: makeUseListenerFunction(event) }; } //# sourceMappingURL=EventUtils.js.map