UNPKG

mst-effect

Version:

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

23 lines (22 loc) 845 B
import { Subject } from 'rxjs'; import { take } from 'rxjs/operators'; import { addDisposer } from 'mobx-state-tree'; import { subscribe } from './utils'; export function dollEffect(self, factory) { const payloadSource = new Subject(); const signalSource = new Subject(); const effect$ = factory(payloadSource.asObservable(), (value) => signalSource.next(value)); const subscription = subscribe(self, factory, effect$); addDisposer(self, () => { payloadSource.complete(); signalSource.complete(); subscription.unsubscribe(); }); return (payload, handler) => { const promise = (typeof handler === 'function' ? handler(signalSource.asObservable()) : signalSource) .pipe(take(1)) .toPromise(); payloadSource.next(payload); return promise; }; }