react-application-core
Version:
A react-based application core for the business applications.
70 lines • 2.83 kB
JavaScript
;
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
var __spreadArrays = (this && this.__spreadArrays) || function () {
for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
for (var r = Array(s), k = 0, i = 0; i < il; i++)
for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
r[k] = a[j];
return r;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.ReducerUtils = void 0;
var R = require("ramda");
var nvl_1 = require("./nvl");
var type_1 = require("./type");
var clone_1 = require("./clone");
/**
* @stable [23.12.2020]
* @param config
*/
var makeEntityReducer = function (config) {
return function (state, action) {
if (state === void 0) { state = config.initialState || null; }
switch (action.type) {
case config.update:
case config.replace:
case config.select:
var selectedWrapper = action.data;
var updatedWrapper = action.data;
var replacedWrapper = action.data;
var selectedEntity = selectedWrapper.selected;
var updatedEntity = updatedWrapper.updated;
var replacedEntity = replacedWrapper.replaced;
var entity = nvl_1.NvlUtils.coalesce(selectedEntity, updatedEntity, replacedEntity);
// When selected === null or replaced === null or updated === null
var defEntity = nvl_1.NvlUtils.coalesceDef(selectedEntity, updatedEntity, replacedEntity);
return R.isNil(entity)
? (type_1.TypeUtils.isUndef(defEntity) ? state : defEntity)
: (type_1.TypeUtils.isPrimitive(entity)
? entity
: (Array.isArray(entity)
? __spreadArrays(entity) : (R.isNil(replacedEntity)
? __assign(__assign({}, state), entity) : clone_1.CloneUtils.shallowClone(entity) // Replace
)));
case config.destroy:
return null;
}
return state;
};
};
/**
* @stable [23.12.2020]
*/
var ReducerUtils = /** @class */ (function () {
function ReducerUtils() {
}
ReducerUtils.entityReducer = makeEntityReducer;
return ReducerUtils;
}());
exports.ReducerUtils = ReducerUtils;
//# sourceMappingURL=reducer.js.map