UNPKG

react-application-core

Version:

A react-based application core for the business applications.

136 lines 8.72 kB
"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