UNPKG

mst-effect

Version:

Designed to be used with MobX-State-Tree to create asynchronous actions using RxJS.

27 lines (26 loc) 1.06 kB
"use strict"; 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;