UNPKG

3.83 kBJavaScriptView Raw
1'use strict';
2
3exports.__esModule = true;
4exports.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
6var _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
8var _querystring = require('querystring');
9
10var _getOr = require('lodash/fp/getOr');
11
12var _getOr2 = _interopRequireDefault(_getOr);
13
14var _get = require('lodash/fp/get');
15
16var _get2 = _interopRequireDefault(_get);
17
18var _isEqual = require('lodash/fp/isEqual');
19
20var _isEqual2 = _interopRequireDefault(_isEqual);
21
22var _pipe = require('lodash/fp/pipe');
23
24var _pipe2 = _interopRequireDefault(_pipe);
25
26var _set = require('lodash/fp/set');
27
28var _set2 = _interopRequireDefault(_set);
29
30function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
31
32const LOCATION = exports.LOCATION = '@@history/LOCATION';
33const NAVIGATE = exports.NAVIGATE = '@@history/NAVIGATE';
34
35const REMOVE_QUESTION_MARK = /^\??(.*)/;
36const parseQuery = (0, _pipe2.default)(s => REMOVE_QUESTION_MARK.exec(s), (0, _get2.default)(1), _querystring.parse);
37
38const 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
50const ACTIONS_HISTORY = {
51 PUSH: 'push',
52 REPLACE: 'replace',
53 GO: 'go',
54 GO_BACK: 'goBack',
55 GO_FORWARD: 'goForward'
56};
57
58const createNavigate = action => (...args) => {
59 return {
60 type: NAVIGATE,
61 payload: {
62 action,
63 args
64 }
65 };
66};
67
68const createPushNavigate = exports.createPushNavigate = createNavigate(ACTIONS_HISTORY.PUSH);
69const createReplaceNavigate = exports.createReplaceNavigate = createNavigate(ACTIONS_HISTORY.REPLACE);
70const createGoNavigate = exports.createGoNavigate = createNavigate(ACTIONS_HISTORY.GO);
71const createGoBackNavigate = exports.createGoBackNavigate = createNavigate(ACTIONS_HISTORY.GO_BACK);
72const createGoForwardNavigate = exports.createGoForwardNavigate = createNavigate(ACTIONS_HISTORY.GO_FORWARD);
73
74const INITAL_STATE = exports.INITAL_STATE = {};
75
76const historyReducer = exports.historyReducer = (state = INITAL_STATE, { type, payload }) => {
77 if (type === LOCATION) return payload;
78 return state;
79};
80
81const 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
113const syncStoreWithHistory = exports.syncStoreWithHistory = (store, history) => {
114 const action = createLocation(history.location);
115 return store.dispatch(action);
116};
117//# sourceMappingURL=index.js.map
\No newline at end of file