react-application-core
Version:
A react-based application core for the business applications.
136 lines • 8.72 kB
JavaScript
"use strict";
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);
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.listReducer = void 0;
var R = require("ramda");
var util_1 = require("../../util");
var list_action_builder_1 = require("./list-action.builder");
var definition_1 = require("../../definition");
exports.listReducer = function (state, action) {
var _a;
if (state === void 0) { state = definition_1.INITIAL_REDUX_LIST_ENTITY; }
var section = util_1.Selectors.sectionFromAction(action);
var modifyDataPayload;
switch (action.type) {
/**
* @stable [13.11.2019]
*/
case list_action_builder_1.ListActionBuilder.buildSortingDirectionChangeActionType(section):
var sdPayloadWrapper = action.data;
var sdPayload_1 = sdPayloadWrapper.payload;
return __assign(__assign({}, state), { directions: util_1.notNilValuesFilter(__assign(__assign({}, util_1.isMulti(sdPayload_1) ? state.directions : {}), (_a = {}, _a[sdPayload_1.name] = util_1.ifNotNilThanValue(sdPayload_1.direction, function () { return util_1.mapSortDirectionEntity(sdPayload_1); }), _a))) });
case list_action_builder_1.ListActionBuilder.buildFirstPageActionType(section):
return __assign(__assign({}, state), { lockPage: true, page: definition_1.FIRST_PAGE });
case list_action_builder_1.ListActionBuilder.buildLastPageActionType(section):
return __assign(__assign({}, state), { lockPage: true, page: Math.ceil(state.totalCount / state.pageSize) });
case list_action_builder_1.ListActionBuilder.buildPreviousPageActionType(section):
return __assign(__assign({}, state), { lockPage: true, page: --state.page });
case list_action_builder_1.ListActionBuilder.buildNextPageActionType(section):
return __assign(__assign({}, state), { lockPage: true, page: ++state.page });
case list_action_builder_1.ListActionBuilder.buildLazyLoadActionType(section):
return __assign(__assign({}, state), { progress: true });
case list_action_builder_1.ListActionBuilder.buildUnTouchActionType(section):
return __assign(__assign({}, state), { touched: false });
case list_action_builder_1.ListActionBuilder.buildLoadActionType(section):
return __assign(__assign({}, definition_1.INITIAL_REDUX_LIST_ENTITY), { progress: true, touched: true, lockPage: state.lockPage, directions: state.directions });
case list_action_builder_1.ListActionBuilder.buildCancelLoadActionType(section):
/**
* @stable [31.08.2018]
*/
return __assign(__assign({}, state), { progress: false, touched: !R.isNil(state.data) });
case list_action_builder_1.ListActionBuilder.buildResetActionType(section):
case list_action_builder_1.ListActionBuilder.buildDestroyActionType(section):
return __assign({}, definition_1.INITIAL_REDUX_LIST_ENTITY);
case list_action_builder_1.ListActionBuilder.buildLoadDoneActionType(section):
var listEntity = action.data;
if (R.isNil(listEntity)) {
// A request auto-cancelling
return state;
}
var resultState = __assign(__assign(__assign(__assign({}, state), { progress: false, lockPage: false }), (Array.isArray(listEntity)
? {
data: listEntity,
totalCount: listEntity.length,
pageSize: null,
}
: __assign(__assign({}, listEntity), { totalCount: util_1.nvl(listEntity.totalCount, Array.isArray(listEntity.data) ? listEntity.data.length : 0) }))), { page: state.lockPage ? listEntity.page : definition_1.INITIAL_REDUX_LIST_ENTITY.page });
// In the case of a silent reload
var oldSelectedEntity_1 = resultState.selected;
if (!R.isNil(oldSelectedEntity_1)) {
return __assign(__assign({}, resultState), { selected: R.find(function (entity) { return util_1.SAME_ENTITY_PREDICATE(entity, oldSelectedEntity_1); }, resultState.data)
|| resultState.selected });
}
return resultState;
case list_action_builder_1.ListActionBuilder.buildLazyLoadErrorActionType(section):
case list_action_builder_1.ListActionBuilder.buildLoadErrorActionType(section):
return __assign(__assign({}, definition_1.INITIAL_REDUX_LIST_ENTITY), { error: util_1.asErrorMessage(action.error).message });
/**
* @stable [19.01.2020]
*/
case list_action_builder_1.ListActionBuilder.buildSelectActionType(section):
return __assign(__assign({}, state), { selected: util_1.Selectors.selectedEntityFromAction(action) });
case list_action_builder_1.ListActionBuilder.buildCreateActionType(section):
case list_action_builder_1.ListActionBuilder.buildDeselectActionType(section):
return __assign(__assign({}, state), { selected: null });
/**
* @stable [19.10.2019]
*/
case list_action_builder_1.ListActionBuilder.buildLazyLoadDoneActionType(section):
var lazyLoadedEntity = util_1.Selectors.selectedEntityFromAction(action) || util_1.Selectors.data(action);
modifyDataPayload = {
id: lazyLoadedEntity.id,
changes: lazyLoadedEntity,
mergeStrategy: definition_1.EntityMergeStrategiesEnum.OVERRIDE,
};
/**
* @stable [19.10.2019]
*/
case list_action_builder_1.ListActionBuilder.buildMergeActionType(section):
/**
* @stable [20.10.2019]
*/
case list_action_builder_1.ListActionBuilder.buildUpdateActionType(section):
/**
* @stable [19.10.2019]
*/
case list_action_builder_1.ListActionBuilder.buildInsertActionType(section):
modifyDataPayload = util_1.nvl(modifyDataPayload, util_1.Selectors.payloadFromAction(action));
var doesEntityExist = util_1.ArrayUtils.doesArrayContainExistedEntity(state.data, modifyDataPayload);
var mergedData_1 = util_1.ArrayUtils.mergeArrayItem(state.data, util_1.mapIdentifiedEntity(modifyDataPayload), util_1.FilterUtils.SAME_ENTITY_PREDICATE, function (itm) { return util_1.buildEntityByMergeStrategy(modifyDataPayload, itm); });
return __assign(__assign({}, state), {
/* @stable [03.11.2020] */
progress: false,
/* @stable [03.11.2020] */
data: mergedData_1,
/* @stable [03.11.2020] */
totalCount: (state.totalCount || 0) + (doesEntityExist ? 0 : 1),
/* @stable [03.11.2020] */
selected: doesEntityExist
? (util_1.ConditionUtils.ifNotNilThanValue(state.selected, function (selectedEntity) {
return util_1.NvlUtils.nvl(mergedData_1.find(function (itm) { return util_1.FilterUtils.SAME_ENTITY_PREDICATE(itm, selectedEntity); }), null);
}))
: (
// An inserted entity is selected by default
mergedData_1.find(function (itm) { return util_1.FilterUtils.SAME_ENTITY_PREDICATE(itm, modifyDataPayload); })) });
case list_action_builder_1.ListActionBuilder.buildRemoveActionType(section):
/**
* @stable [08.06.2019]
*/
var removedEntity_1 = util_1.Selectors.payloadFromAction(action);
var filteredData_1 = state.data.filter(function (entity) { return !util_1.SAME_ENTITY_PREDICATE(entity, removedEntity_1); });
return __assign(__assign({}, state), { selected: util_1.ConditionUtils.ifNotNilThanValue(state.selected, function (selectedEntity) { return util_1.NvlUtils.nvl(filteredData_1.find(function (itm) { return util_1.SAME_ENTITY_PREDICATE(itm, selectedEntity); }), null); }), data: filteredData_1, totalCount: filteredData_1.length === state.data.length ? state.totalCount : --state.totalCount });
default:
return state;
}
};
//# sourceMappingURL=list.reducer.js.map