UNPKG

rxjs-hooks

Version:
48 lines 2.12 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.useEventCallback = void 0; var tslib_1 = require("tslib"); var react_1 = require("react"); var use_constant_1 = tslib_1.__importDefault(require("use-constant")); var rxjs_1 = require("rxjs"); var operators_1 = require("rxjs/operators"); var shim_1 = require("use-sync-external-store/shim"); function useEventCallback(callback, initialState, inputs) { var initialValue = (typeof initialState !== 'undefined' ? initialState : null); var event$ = (0, use_constant_1.default)(function () { return new rxjs_1.Subject(); }); var state$ = (0, use_constant_1.default)(function () { return new rxjs_1.BehaviorSubject(initialValue); }); var inputs$ = (0, use_constant_1.default)(function () { return new rxjs_1.BehaviorSubject(typeof inputs === 'undefined' ? null : inputs); }); (0, react_1.useEffect)(function () { return function () { state$.complete(); inputs$.complete(); event$.complete(); }; }, []); var returnedCallback = (0, react_1.useCallback)(function eventCallback(e) { event$.next(e); }, []); (0, react_1.useEffect)(function () { inputs$.next(inputs); }, inputs || []); var subscribe = (0, react_1.useMemo)(function () { var value$; if (!inputs) { value$ = callback(event$, state$); } else { value$ = callback(event$, state$, inputs$); } return function (onStorageChange) { var subscription = value$.pipe((0, operators_1.tap)(function (s) { return state$.next(s); })).subscribe(onStorageChange); return function () { return subscription.unsubscribe(); }; }; }, []); var getSnapShot = (0, react_1.useMemo)(function () { return function () { return state$.getValue(); }; }, []); var state = (0, shim_1.useSyncExternalStore)(subscribe, getSnapShot, getSnapShot); return [returnedCallback, state]; } exports.useEventCallback = useEventCallback; //# sourceMappingURL=use-event-callback.js.map