UNPKG

rxjs-hooks

Version:
41 lines 1.75 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.useObservable = void 0; var tslib_1 = require("tslib"); var rxjs_1 = require("rxjs"); var operators_1 = require("rxjs/operators"); var react_1 = require("react"); var use_constant_1 = tslib_1.__importDefault(require("use-constant")); var shim_1 = require("use-sync-external-store/shim"); function useObservable(inputFactory, initialState, inputs) { var state$ = (0, use_constant_1.default)(function () { return new rxjs_1.BehaviorSubject(initialState); }); var inputs$ = (0, use_constant_1.default)(function () { return new rxjs_1.BehaviorSubject(inputs); }); (0, react_1.useEffect)(function () { return function () { state$.complete(); inputs$.complete(); }; }, []); (0, react_1.useEffect)(function () { inputs$.next(inputs); }, inputs || []); var subscribe = (0, react_1.useMemo)(function () { var output$; if (inputs) { output$ = inputFactory(state$, inputs$); } else { output$ = inputFactory(state$); } return function (onStorageChange) { var subscription = output$.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 () { var _a; return (_a = state$.getValue()) !== null && _a !== void 0 ? _a : null; }; }, []); return (0, shim_1.useSyncExternalStore)(subscribe, getSnapShot, getSnapShot); } exports.useObservable = useObservable; //# sourceMappingURL=use-observable.js.map