1 | 'use strict';
|
2 |
|
3 | Object.defineProperty(exports, "__esModule", {
|
4 | value: true
|
5 | });
|
6 | exports.mount = undefined;
|
7 |
|
8 | var _reduxEphemeral = require('redux-ephemeral');
|
9 |
|
10 | var _reduxEphemeral2 = _interopRequireDefault(_reduxEphemeral);
|
11 |
|
12 | var _objectEqual = require('@f/object-equal');
|
13 |
|
14 | var _objectEqual2 = _interopRequireDefault(_objectEqual);
|
15 |
|
16 | var _arrayEqual = require('@f/array-equal');
|
17 |
|
18 | var _arrayEqual2 = _interopRequireDefault(_arrayEqual);
|
19 |
|
20 | var _getProp = require('@f/get-prop');
|
21 |
|
22 | var _getProp2 = _interopRequireDefault(_getProp);
|
23 |
|
24 | var _virtex = require('virtex');
|
25 |
|
26 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
27 |
|
28 |
|
29 |
|
30 |
|
31 |
|
32 | var _actions$types = _virtex.actions.types; |
33 |
|
34 |
|
35 |
|
36 | var CREATE_THUNK = _actions$types.CREATE_THUNK;
|
37 | var UPDATE_THUNK = _actions$types.UPDATE_THUNK;
|
38 | var DESTROY_THUNK = _actions$types.DESTROY_THUNK;
|
39 |
|
40 |
|
41 |
|
42 |
|
43 |
|
44 | function local(prop) {
|
45 | var dirty = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];
|
46 |
|
47 | return function (_ref) {
|
48 | var getState = _ref.getState;
|
49 | var dispatch = _ref.dispatch;
|
50 |
|
51 | var state = function state() {
|
52 | return (0, _getProp2.default)(prop, getState());
|
53 | };
|
54 |
|
55 | return function (next) {
|
56 | return function (action) {
|
57 | switch (action.type) {
|
58 | case CREATE_THUNK:
|
59 | delete dirty[action.vnode.path];
|
60 | create(dispatch, action.vnode);
|
61 | break;
|
62 | case UPDATE_THUNK:
|
63 | delete dirty[action.vnode.path];
|
64 | update(state, action.vnode, action.prev);
|
65 | break;
|
66 | case DESTROY_THUNK:
|
67 | delete dirty[action.vnode.path];
|
68 | destroy(dispatch, action.vnode);
|
69 | break;
|
70 | }
|
71 |
|
72 | if ((0, _reduxEphemeral.isEphemeral)(action)) {
|
73 | dirty[action.meta.ephemeral.key] = true;
|
74 | }
|
75 |
|
76 | return next(action);
|
77 | };
|
78 | };
|
79 | };
|
80 | }
|
81 |
|
82 | function create(dispatch, thunk) {
|
83 | var component = thunk.type;
|
84 | var _component$initialSta = component.initialState;
|
85 | var initialState = _component$initialSta === undefined ? function () {
|
86 | return {};
|
87 | } : _component$initialSta;
|
88 |
|
89 |
|
90 | prepare(thunk, initialState(thunk));
|
91 |
|
92 |
|
93 |
|
94 | if (component.reducer) {
|
95 | component.shouldUpdate = component.shouldUpdate || shouldUpdate;
|
96 | dispatch((0, _reduxEphemeral.createEphemeral)(thunk.path, thunk.state));
|
97 | }
|
98 | }
|
99 |
|
100 | function update(getState, thunk, prev) {
|
101 | prepare(thunk, (0, _reduxEphemeral.lookup)(getState(), thunk.path));
|
102 | }
|
103 |
|
104 | function destroy(dispatch, thunk) {
|
105 | thunk.type.reducer && dispatch((0, _reduxEphemeral.destroyEphemeral)(thunk.path));
|
106 | }
|
107 |
|
108 | function shouldUpdate(prev, next) {
|
109 | return prev.state !== next.state || !(0, _arrayEqual2.default)(prev.children, next.children) || !(0, _objectEqual2.default)(prev.props, next.props);
|
110 | }
|
111 |
|
112 | function prepare(thunk, state) {
|
113 | thunk.state = state;
|
114 | thunk.local = function (fn) {
|
115 | for (var _len = arguments.length, outerArgs = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
|
116 | outerArgs[_key - 1] = arguments[_key];
|
117 | }
|
118 |
|
119 | return function () {
|
120 | for (var _len2 = arguments.length, innerArgs = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
|
121 | innerArgs[_key2] = arguments[_key2];
|
122 | }
|
123 |
|
124 | return (0, _reduxEphemeral.toEphemeral)(thunk.path, thunk.type.reducer, fn.apply(thunk, outerArgs.concat(innerArgs)));
|
125 | };
|
126 | };
|
127 | }
|
128 |
|
129 |
|
130 |
|
131 |
|
132 |
|
133 | exports.default = local;
|
134 | exports.mount = _reduxEphemeral2.default; |
\ | No newline at end of file |