react-application-core
Version:
A react-based application core for the business applications.
88 lines • 4.57 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.stackReducer = void 0;
var R = require("ramda");
var definition_1 = require("../../definition");
var stack_support_1 = require("./stack.support");
var util_1 = require("../../util");
/**
* @stable [21.10.2019]
* @param {IReduxStackEntity} state
* @param {IEffectsAction} action
* @returns {IReduxStackEntity}
*/
exports.stackReducer = function (state, action) {
if (state === void 0) { state = definition_1.DefaultEntities.INITIAL_REDUX_STACK_ENTITY; }
var stack = state.stack;
var payloadEntity = action.data;
switch (action.type) {
/**
* @stable [21.09.2019]
*/
case definition_1.$RAC_STACK_REMOVE_ACTION_TYPE:
var sectionsToDestroy_1 = action.data;
return __assign(__assign({}, state), { stack: R.filter(function (entry) { return !sectionsToDestroy_1.includes(entry.section); }, stack)
.map(function (itm) {
return (__assign(__assign({}, itm), { linkedSections: itm.linkedSections.filter(function (linkedSection) { return !sectionsToDestroy_1.includes(linkedSection); }) }));
}) });
/**
* @stable [20.09.2019]
*/
case definition_1.$RAC_STACK_PUSH_ACTION_TYPE:
var pushSection = payloadEntity.section; // Next section
var pushUrl = payloadEntity.url; // Next section url (url path)
return __assign(__assign(__assign({}, state), { destroySections: __spreadArrays(definition_1.DefaultEntities.INITIAL_REDUX_STACK_ENTITY.destroySections) }), (util_1.findStackItemEntityIndexBySection(pushSection, state) > -1 // If already inserted
? {}
: {
stack: __spreadArrays(stack, [
{ section: pushSection, url: pushUrl, linkedSections: [] }
]),
}));
/**
* @stable [20.09.2019]
* Is called from componentWillUnmount
*/
case definition_1.$RAC_STACK_POP_ACTION_TYPE:
var previousSection = payloadEntity.section;
var additionalSectionsToDestroy_1 = stack_support_1.getAdditionalStackSectionsToDestroy(previousSection, state);
return __assign(__assign(__assign({}, state), { lock: definition_1.DefaultEntities.INITIAL_REDUX_STACK_ENTITY.lock, destroySections: __spreadArrays(definition_1.DefaultEntities.INITIAL_REDUX_STACK_ENTITY.destroySections) }), (state.lock
? {} // If there is a lock - do nothing
: {
stack: util_1.truncateStack(state, previousSection).map(function (itm) {
return (__assign(__assign({}, itm), { linkedSections: itm.linkedSections.filter(function (itm0) { return !additionalSectionsToDestroy_1.includes(itm0); }) }));
}),
destroySections: additionalSectionsToDestroy_1,
}));
/**
* @stable [21.09.2019]
*/
case definition_1.$RAC_STACK_LOCK_ACTION_TYPE:
var nextSection_1 = action.data;
return __assign(__assign({}, state), { lock: true,
// If there is a lock - we should attach the next section to linked sections
stack: stack.map(function (entry, index) { return (index === stack.length - 1
? __assign(__assign({}, entry), { linkedSections: Array.from(new Set(entry.linkedSections.concat(nextSection_1)
.filter(function (section) { return section !== entry.section; }) // Prevent the recursive links
)) }) : entry); }) });
}
return state;
};
//# sourceMappingURL=stack.reducer.js.map