nrgy
Version:
The library for reactive programming using efficient computing and MVC/MVVM patterns
70 lines (55 loc) • 2.32 kB
JavaScript
;Object.defineProperty(exports, "__esModule", {value: true});require('./chunk-DUWWIS26.cjs');
var _chunk4OYRW4HCcjs = require('./chunk-4OYRW4HC.cjs');
// src/rxjs-react/useObservable.ts
var _rxjs = require('rxjs');
// src/rxjs-react/useSelector.ts
var _react = require('react');
function useSelector(source$, initialValue, selector, comparator = _chunk4OYRW4HCcjs.defaultEquals) {
const [value, setValue] = _react.useState.call(void 0, () => selector(initialValue));
_react.useEffect.call(void 0, () => {
const subscription = source$.subscribe((state) => {
const value2 = selector(state);
setValue(
(prevValue) => comparator(value2, prevValue) ? prevValue : value2
);
});
return () => subscription.unsubscribe();
}, [comparator, selector, source$]);
return value;
}
// src/rxjs-react/useObservable.ts
function useObservable(source$, initialValue, comparator) {
return useSelector(source$, initialValue, _rxjs.identity, comparator);
}
// src/rxjs-react/useObserver.ts
// src/rxjs-react/useIsomorphicLayoutEffect.ts
var IS_BROWSER = typeof window !== "undefined";
var useIsomorphicLayoutEffect = IS_BROWSER ? _react.useLayoutEffect : (
/* istanbul ignore next: both are not called on server */
_react.useEffect
);
// src/rxjs-react/useObserver.ts
function useObserver(source$, observerOrNext) {
const argsRef = _react.useRef.call(void 0, );
useIsomorphicLayoutEffect(() => {
argsRef.current = typeof observerOrNext === "function" ? { next: observerOrNext } : observerOrNext;
});
_react.useEffect.call(void 0, () => {
const subscription = source$.subscribe({
next: (value) => {
var _a, _b;
return (_b = (_a = argsRef.current) == null ? void 0 : _a.next) == null ? void 0 : _b.call(_a, value);
},
error: (error) => {
var _a, _b;
return (_b = (_a = argsRef.current) == null ? void 0 : _a.error) == null ? void 0 : _b.call(_a, error);
},
complete: () => {
var _a, _b;
return (_b = (_a = argsRef.current) == null ? void 0 : _a.complete) == null ? void 0 : _b.call(_a);
}
});
return () => subscription.unsubscribe();
}, [source$]);
}
exports.useObservable = useObservable; exports.useObserver = useObserver; exports.useSelector = useSelector;