redux-store-templates
Version:
Set of helpers to create useful and commonly used redux store patterns
87 lines (71 loc) • 2.37 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.createSelector = 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 ? false : _ref$initial,
toggleOn = _ref.toggleOn,
makeTrueOn = _ref.makeTrueOn,
makeFalseOn = _ref.makeFalseOn,
setOn = _ref.setOn,
resetOn = _ref.resetOn;
var resetState = initial;
var handleAction = Object.create(null);
if (toggleOn) {
(0, _internals.readAsArray)(toggleOn).forEach(function (opt) {
handleAction[opt.type] = function (state) {
return !state;
};
});
}
if (makeTrueOn) {
(0, _internals.readAsArray)(makeTrueOn).forEach(function (opt) {
handleAction[opt.type] = function () {
return true;
};
});
}
if (makeFalseOn) {
(0, _internals.readAsArray)(makeFalseOn).forEach(function (opt) {
handleAction[opt.type] = function () {
return false;
};
});
}
if (setOn) {
(0, _internals.readAsArray)(setOn).forEach(function (opt) {
var readActionPayload = (0, _internals.createPathReader)(opt.payloadPath);
handleAction[opt.type] = function (state, action) {
var value = readActionPayload(action);
if (typeof value != 'boolean') {
(0, _internals.warn)("toggle: setOn: action \"".concat(opt.type, "\" should have property ").concat(opt.payloadPath));
}
return !!value;
};
});
}
if (resetOn) {
(0, _internals.readAsArray)(resetOn).forEach(function (opt) {
handleAction[opt.type] = function () {
return resetState;
};
});
}
return function () {
var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initial;
var action = arguments.length > 1 ? arguments[1] : undefined;
return handleAction[action.type] ? handleAction[action.type](state, action) : state;
};
};
exports.createReducer = createReducer;
var createSelector = function createSelector(_ref2) {
var selector = _ref2.selector;
return function (state) {
return selector(state);
};
};
exports.createSelector = createSelector;