1 | 'use strict';
|
2 |
|
3 | Object.defineProperty(exports, "__esModule", {
|
4 | value: true
|
5 | });
|
6 | exports.createEpicMiddleware = createEpicMiddleware;
|
7 |
|
8 | var _Subject = require('rxjs/Subject');
|
9 |
|
10 | var _map = require('rxjs/operator/map');
|
11 |
|
12 | var _switchMap = require('rxjs/operator/switchMap');
|
13 |
|
14 | var _ActionsObservable = require('./ActionsObservable');
|
15 |
|
16 | var _EPIC_END = require('./EPIC_END');
|
17 |
|
18 | var defaultAdapter = {
|
19 | input: function input(action$) {
|
20 | return action$;
|
21 | },
|
22 | output: function output(action$) {
|
23 | return action$;
|
24 | }
|
25 | };
|
26 |
|
27 | var defaultOptions = {
|
28 | adapter: defaultAdapter
|
29 | };
|
30 |
|
31 | function createEpicMiddleware(epic) {
|
32 | var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : defaultOptions;
|
33 |
|
34 | var _ref$adapter = _ref.adapter;
|
35 | var adapter = _ref$adapter === undefined ? defaultAdapter : _ref$adapter;
|
36 |
|
37 | if (typeof epic !== 'function') {
|
38 | throw new TypeError('You must provide a root Epic to createEpicMiddleware');
|
39 | }
|
40 |
|
41 | var input$ = new _Subject.Subject();
|
42 | var action$ = adapter.input(new _ActionsObservable.ActionsObservable(input$));
|
43 | var epic$ = new _Subject.Subject();
|
44 | var store = void 0;
|
45 |
|
46 | var epicMiddleware = function epicMiddleware(_store) {
|
47 | store = _store;
|
48 |
|
49 | return function (next) {
|
50 | var _context;
|
51 |
|
52 | (_context = _map.map.call(epic$, function (epic) {
|
53 | return epic(action$, store);
|
54 | }), _switchMap.switchMap).call(_context, function (action$) {
|
55 | return adapter.output(action$);
|
56 | }).subscribe(store.dispatch);
|
57 |
|
58 |
|
59 | epic$.next(epic);
|
60 |
|
61 | return function (action) {
|
62 | var result = next(action);
|
63 | input$.next(action);
|
64 | return result;
|
65 | };
|
66 | };
|
67 | };
|
68 |
|
69 | epicMiddleware.replaceEpic = function (epic) {
|
70 |
|
71 |
|
72 | store.dispatch({ type: _EPIC_END.EPIC_END });
|
73 |
|
74 |
|
75 | epic$.next(epic);
|
76 | };
|
77 |
|
78 | return epicMiddleware;
|
79 | } |
\ | No newline at end of file |