mst-effect
Version:
Designed to be used with MobX-State-Tree to create asynchronous actions using RxJS.
27 lines (26 loc) • 1.06 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.dollEffect = void 0;
const rxjs_1 = require("rxjs");
const operators_1 = require("rxjs/operators");
const mobx_state_tree_1 = require("mobx-state-tree");
const utils_1 = require("./utils");
function dollEffect(self, factory) {
const payloadSource = new rxjs_1.Subject();
const signalSource = new rxjs_1.Subject();
const effect$ = factory(payloadSource.asObservable(), (value) => signalSource.next(value));
const subscription = (0, utils_1.subscribe)(self, factory, effect$);
(0, mobx_state_tree_1.addDisposer)(self, () => {
payloadSource.complete();
signalSource.complete();
subscription.unsubscribe();
});
return (payload, handler) => {
const promise = (typeof handler === 'function' ? handler(signalSource.asObservable()) : signalSource)
.pipe((0, operators_1.take)(1))
.toPromise();
payloadSource.next(payload);
return promise;
};
}
exports.dollEffect = dollEffect;