1 | 'use strict';
|
2 |
|
3 | exports.__esModule = true;
|
4 | exports.syncStoreWithHistory = exports.historyMiddleware = exports.historyReducer = exports.INITAL_STATE = exports.createGoForwardNavigate = exports.createGoBackNavigate = exports.createGoNavigate = exports.createReplaceNavigate = exports.createPushNavigate = exports.createLocation = exports.NAVIGATE = exports.LOCATION = undefined;
|
5 |
|
6 | var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
|
7 |
|
8 | var _querystring = require('querystring');
|
9 |
|
10 | var _getOr = require('lodash/fp/getOr');
|
11 |
|
12 | var _getOr2 = _interopRequireDefault(_getOr);
|
13 |
|
14 | var _get = require('lodash/fp/get');
|
15 |
|
16 | var _get2 = _interopRequireDefault(_get);
|
17 |
|
18 | var _isEqual = require('lodash/fp/isEqual');
|
19 |
|
20 | var _isEqual2 = _interopRequireDefault(_isEqual);
|
21 |
|
22 | var _pipe = require('lodash/fp/pipe');
|
23 |
|
24 | var _pipe2 = _interopRequireDefault(_pipe);
|
25 |
|
26 | var _set = require('lodash/fp/set');
|
27 |
|
28 | var _set2 = _interopRequireDefault(_set);
|
29 |
|
30 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
31 |
|
32 | const LOCATION = exports.LOCATION = '@@history/LOCATION';
|
33 | const NAVIGATE = exports.NAVIGATE = '@@history/NAVIGATE';
|
34 |
|
35 | const REMOVE_QUESTION_MARK = /^\??(.*)/;
|
36 | const parseQuery = (0, _pipe2.default)(s => REMOVE_QUESTION_MARK.exec(s), (0, _get2.default)(1), _querystring.parse);
|
37 |
|
38 | const createLocation = exports.createLocation = location => {
|
39 | const loc = (0, _pipe2.default)((0, _getOr2.default)('', 'search'), parseQuery, query => {
|
40 | if ((0, _isEqual2.default)(query, {})) return location;
|
41 | return (0, _set2.default)('query', query, location);
|
42 | })(location);
|
43 |
|
44 | return {
|
45 | type: LOCATION,
|
46 | payload: _extends({}, loc)
|
47 | };
|
48 | };
|
49 |
|
50 | const ACTIONS_HISTORY = {
|
51 | PUSH: 'push',
|
52 | REPLACE: 'replace',
|
53 | GO: 'go',
|
54 | GO_BACK: 'goBack',
|
55 | GO_FORWARD: 'goForward'
|
56 | };
|
57 |
|
58 | const createNavigate = action => (...args) => {
|
59 | return {
|
60 | type: NAVIGATE,
|
61 | payload: {
|
62 | action,
|
63 | args
|
64 | }
|
65 | };
|
66 | };
|
67 |
|
68 | const createPushNavigate = exports.createPushNavigate = createNavigate(ACTIONS_HISTORY.PUSH);
|
69 | const createReplaceNavigate = exports.createReplaceNavigate = createNavigate(ACTIONS_HISTORY.REPLACE);
|
70 | const createGoNavigate = exports.createGoNavigate = createNavigate(ACTIONS_HISTORY.GO);
|
71 | const createGoBackNavigate = exports.createGoBackNavigate = createNavigate(ACTIONS_HISTORY.GO_BACK);
|
72 | const createGoForwardNavigate = exports.createGoForwardNavigate = createNavigate(ACTIONS_HISTORY.GO_FORWARD);
|
73 |
|
74 | const INITAL_STATE = exports.INITAL_STATE = {};
|
75 |
|
76 | const historyReducer = exports.historyReducer = (state = INITAL_STATE, { type, payload }) => {
|
77 | if (type === LOCATION) return payload;
|
78 | return state;
|
79 | };
|
80 |
|
81 | const historyMiddleware = exports.historyMiddleware = ({ history }) => store => {
|
82 | history.listen(location => {
|
83 | store.dispatch(createLocation(location));
|
84 | });
|
85 |
|
86 | return next => action => {
|
87 | if (action.type === NAVIGATE) {
|
88 | const { payload: { action: historyAction, args } } = action;
|
89 |
|
90 | switch (historyAction) {
|
91 | case ACTIONS_HISTORY.PUSH:
|
92 | history.push(...args);
|
93 | break;
|
94 | case ACTIONS_HISTORY.REPLACE:
|
95 | history.replace(...args);
|
96 | break;
|
97 | case ACTIONS_HISTORY.GO:
|
98 | history.go(...args);
|
99 | break;
|
100 | case ACTIONS_HISTORY.GO_BACK:
|
101 | history.goBack(...args);
|
102 | break;
|
103 | case ACTIONS_HISTORY.GO_FORWARD:
|
104 | history.goForward(...args);
|
105 | break;
|
106 | }
|
107 | }
|
108 |
|
109 | return next(action);
|
110 | };
|
111 | };
|
112 |
|
113 | const syncStoreWithHistory = exports.syncStoreWithHistory = (store, history) => {
|
114 | const action = createLocation(history.location);
|
115 | return store.dispatch(action);
|
116 | };
|
117 |
|
\ | No newline at end of file |