rxjs-hooks
Version:
React hooks for RxJS
41 lines • 1.75 kB
JavaScript
;
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