kwc-redux-observable
Version:
RxJS based middleware for Redux. Compose and cancel async actions and more.
59 lines (45 loc) • 1.78 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.createEpicMiddleware = createEpicMiddleware;
var _Subject = require('rxjs/Subject');
var _BehaviorSubject = require('rxjs/BehaviorSubject');
var _from = require('rxjs/observable/from');
var _switchMap = require('rxjs/operator/switchMap');
var _ActionsObservable = require('./ActionsObservable');
var _EPIC_END = require('./EPIC_END');
function createEpicMiddleware(epic) {
var actionsSubject = new _Subject.Subject();
var action$ = new _ActionsObservable.ActionsObservable(actionsSubject);
var epic$ = new _BehaviorSubject.BehaviorSubject(epic);
var store = void 0;
var epicMiddleware = function epicMiddleware(_store) {
store = _store;
return function (next) {
if (typeof epic === 'function') {
_switchMap.switchMap.call(epic$, function (epic) {
return epic(action$, store);
}).subscribe(store.dispatch);
}
return function (action) {
if (typeof action === 'function') {
if (typeof console !== 'undefined' && typeof console.warn !== 'undefined') {
console.warn('DEPRECATION: Using thunkservables with redux-observable is now deprecated in favor of the new "Epics" feature. See http://redux-observable.js.org/docs/FAQ.html#why-were-thunkservables-deprecated');
}
var out$ = (0, _from.from)(action(action$, store));
return out$.subscribe(store.dispatch);
} else {
var result = next(action);
actionsSubject.next(action);
return result;
}
};
};
};
epicMiddleware.replaceEpic = function (epic) {
store.dispatch({ type: _EPIC_END.EPIC_END });
epic$.next(epic);
};
return epicMiddleware;
}