UNPKG

@ozen-ui/kit

Version:

React component library

37 lines (36 loc) 1.63 kB
import { __read } from "tslib"; import { useEffect } from 'react'; import { logger } from '@ozen-ui/logger'; import { useDevEffect } from '../useDevEffect'; import { useIsomorphicEffect } from '../useIsomorphicEffect'; import { useStoredValue } from '../useStoredValue'; export var useEventBusEvents = function (eventBus, subscribes, params) { var _a = (params !== null && params !== void 0 ? params : {}).layoutEffect, layoutEffect = _a === void 0 ? false : _a; var savedLayoutEffect = useStoredValue(layoutEffect); useDevEffect(function () { if (savedLayoutEffect.current !== layoutEffect) { logger.warn('Свойство "layoutEffect" не может отличаться между рендерами.'); } }, [layoutEffect]); var clearSubscribes = useStoredValue(function () { return function () { }; }); var useNeededEffect = savedLayoutEffect.current ? useIsomorphicEffect : useEffect; useNeededEffect(function () { clearSubscribes.current(); var clearSubscribesCallbacks = []; Object.entries(subscribes).forEach(function (_a) { var _b = __read(_a, 2), event = _b[0], callback = _b[1]; var unsubscribe = eventBus.subscribe(event, callback); clearSubscribesCallbacks.push(unsubscribe); }); clearSubscribes.current = function () { clearSubscribesCallbacks.forEach(function (unsubscribe) { unsubscribe(); }); }; return function () { clearSubscribes.current(); }; }, [eventBus, subscribes]); };