redux-store-templates
Version:
Set of helpers to create useful and commonly used redux store patterns
68 lines (55 loc) • 2.06 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.createReducer = void 0;
var _internals = require("../.internals");
var createReducer = function createReducer() {
var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
_ref$initial = _ref.initial,
initial = _ref$initial === void 0 ? [] : _ref$initial,
setOn = _ref.setOn,
addOn = _ref.addOn,
removeOn = _ref.removeOn,
emptyOn = _ref.emptyOn;
var defaultState = initial;
var emptyState = [];
var handleAction = Object.create(null);
if (setOn) {
(0, _internals.readAsArray)(setOn).forEach(function (opt) {
var readActionPayload = (0, _internals.createPathReader)(opt.payloadPath);
handleAction[opt.type] = function (state, action) {
return (0, _internals.applyAddIds)([], readActionPayload(action));
};
});
}
if (addOn) {
(0, _internals.readAsArray)(addOn).forEach(function (opt) {
var readActionPayload = (0, _internals.createPathReader)(opt.payloadPath);
handleAction[opt.type] = function (state, action) {
return (0, _internals.applyAddIds)(state, readActionPayload(action));
};
});
}
if (removeOn) {
(0, _internals.readAsArray)(removeOn).forEach(function (opt) {
var readActionPayload = (0, _internals.createPathReader)(opt.payloadPath);
handleAction[opt.type] = function (state, action) {
return (0, _internals.applyRemoveIds)(state, readActionPayload(action));
};
});
}
if (emptyOn) {
(0, _internals.readAsArray)(emptyOn).forEach(function (opt) {
handleAction[opt.type] = function () {
return emptyState;
};
});
}
return function () {
var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : defaultState;
var action = arguments.length > 1 ? arguments[1] : undefined;
return handleAction[action.type] ? handleAction[action.type](state, action) : state;
};
};
exports.createReducer = createReducer;