UNPKG

2.83 kBJavaScriptView Raw
1'use strict';
2
3var _slicedToArray = (function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; })();
4
5var _redux = require('redux');
6
7var _reduxThunk = require('redux-thunk');
8
9var _reduxThunk2 = _interopRequireDefault(_reduxThunk);
10
11var _diff = require('virtual-dom/diff');
12
13var _diff2 = _interopRequireDefault(_diff);
14
15var _patch = require('virtual-dom/patch');
16
17var _patch2 = _interopRequireDefault(_patch);
18
19var _createElement = require('virtual-dom/create-element');
20
21var _createElement2 = _interopRequireDefault(_createElement);
22
23var _domDelegator = require('dom-delegator');
24
25var _domDelegator2 = _interopRequireDefault(_domDelegator);
26
27var _Map = require('./Map');
28
29var _Map2 = _interopRequireDefault(_Map);
30
31function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
32
33var createStoreWithMiddleware = (0, _redux.applyMiddleware)(_reduxThunk2.default)(_redux.createStore);
34
35exports.start = function (_ref) {
36 var init = _ref.init;
37 var update = _ref.update;
38 var view = _ref.view;
39
40 var delegator = (0, _domDelegator2.default)();
41
42 var _handleInit = handleInit(init());
43
44 var _handleInit2 = _slicedToArray(_handleInit, 2);
45
46 var initialState = _handleInit2[0];
47 var initialAction = _handleInit2[1];
48
49 var store = createStoreWithMiddleware(function () {
50 var state = arguments.length <= 0 || arguments[0] === undefined ? initialState : arguments[0];
51 var action = arguments[1];
52
53 var newState = update(state, action);
54
55 return typeof newState === 'undefined' ? state : newState;
56 });
57
58 var dispatch = function dispatch(action) {
59 return function () {
60 store.dispatch(action);
61 };
62 };
63
64 if (initialAction) {
65 store.dispatch(initialAction);
66 }
67
68 var tree = view(initialState, dispatch);
69 var rootNode = (0, _createElement2.default)(tree);
70
71 store.subscribe(function () {
72 var newTree = view(store.getState(), dispatch);
73 var patches = (0, _diff2.default)(tree, newTree);
74
75 (0, _patch2.default)(rootNode, patches);
76
77 tree = newTree;
78 });
79
80 return rootNode;
81};
82
83function handleInit(init) {
84 if (Array.isArray(init)) {
85 // [data, action]
86 return [new _Map2.default(init[0]), init[1]];
87 } else {
88 // data
89 return [new _Map2.default(init)];
90 }
91}
\No newline at end of file