redux-data-structures
Version:
Creator functions for common reducers
53 lines (48 loc) • 2.2 kB
JavaScript
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
export default (function (_ref) {
var _ref$initialState = _ref.initialState,
initialState = _ref$initialState === undefined ? {} : _ref$initialState,
_ref$addActionTypes = _ref.addActionTypes,
addActionTypes = _ref$addActionTypes === undefined ? [] : _ref$addActionTypes,
_ref$removeActionType = _ref.removeActionTypes,
removeActionTypes = _ref$removeActionType === undefined ? [] : _ref$removeActionType,
_ref$toggleActionType = _ref.toggleActionTypes,
toggleActionTypes = _ref$toggleActionType === undefined ? [] : _ref$toggleActionType,
_ref$keyGetter = _ref.keyGetter,
keyGetter = _ref$keyGetter === undefined ? function (action) {
return action.payload;
} : _ref$keyGetter,
_ref$resetActionTypes = _ref.resetActionTypes,
resetActionTypes = _ref$resetActionTypes === undefined ? [] : _ref$resetActionTypes,
_ref$emptyActionTypes = _ref.emptyActionTypes,
emptyActionTypes = _ref$emptyActionTypes === undefined ? [] : _ref$emptyActionTypes;
return function () {
var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState;
var action = arguments[1];
var type = action.type;
if (addActionTypes.includes(type)) {
return add(state, keyGetter(action));
} else if (removeActionTypes.includes(type)) {
return remove(state, keyGetter(action));
} else if (toggleActionTypes.includes(type)) {
return toggle(state, keyGetter(action));
} else if (resetActionTypes.includes(type)) {
return initialState;
} else if (emptyActionTypes.includes(type)) {
return {};
} else {
return state;
}
};
});
var add = function add(obj, key) {
return Object.assign({}, obj, _defineProperty({}, key, true));
};
var remove = function remove(obj, key) {
var x = Object.assign({}, obj);
delete x[key];
return x;
};
var toggle = function toggle(obj, key) {
return obj[key] ? remove(obj, key) : add(obj, key);
};