-
Notifications
You must be signed in to change notification settings - Fork 16
/
Copy pathreduxCookiesMiddleware.js
84 lines (68 loc) · 3 KB
/
reduxCookiesMiddleware.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
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; };
var _cookieApi = require('./cookieApi');
var _cookieApi2 = _interopRequireDefault(_cookieApi);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
/**
* Middleware to persist state in cookies.
* @param {Object} paths
* @param {Object} customOptions
*/
var reduxCookiesMiddleware = function reduxCookiesMiddleware() {
var paths = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
var customOptions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
var options = _extends({
logger: console.error,
setCookie: _cookieApi2.default,
defaultEqualityCheck: function defaultEqualityCheck(a, b) {
return a === b;
},
defaultDeleteCheck: function defaultDeleteCheck(value) {
return typeof value === 'undefined';
}
}, customOptions);
var _getVal = function _getVal(state, path) {
var pathPartsList = path.split('.');
var value = state;
var index = void 0;
for (index = 0; index < pathPartsList.length; index += 1) {
var pathPart = pathPartsList[index];
if (Object.hasOwnProperty.call(value, pathPart)) {
value = value[pathPart];
} else {
options.logger('state not found at store.getState().' + path);
break;
}
}
return index === pathPartsList.length ? value : null;
};
return function (store) {
return function (next) {
return function (action) {
var prevState = store.getState();
var result = next(action);
var nextState = store.getState();
Object.keys(paths).forEach(function (pathToState) {
var prevVal = _getVal(prevState, pathToState);
var nextVal = _getVal(nextState, pathToState);
var state = paths[pathToState];
var equalityCheck = state.equalityCheck || options.defaultEqualityCheck;
var deleteCheck = state.deleteCheck || options.defaultDeleteCheck;
if (!equalityCheck(prevVal, nextVal)) {
if (deleteCheck(nextVal)) {
options.setCookie(state.name, JSON.stringify(nextVal), 0);
} else {
options.setCookie(state.name, JSON.stringify(nextVal));
}
}
});
return result;
};
};
};
};
exports.default = reduxCookiesMiddleware;
//# sourceMappingURL=reduxCookiesMiddleware.js.map