react-application-core
Version:
A react-based application core for the business applications.
116 lines • 5.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);
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.toMultiFieldChangesEntityOnDelete = exports.toMultiFieldChangesEntityOnEdit = exports.isSameEntityByIdAndChangedFieldName = exports.fromMultiItemEntitiesToFieldsChanges = exports.fromMultiFieldValueToEditedEntities = exports.toLastAddedMultiItemEntityId = void 0;
var R = require("ramda");
var definitions_interface_1 = require("../../../definitions.interface");
var util_1 = require("../../../util");
/**
* @stable [29.07.2019]
* @param {MultiFieldSingleValueT} multiFieldEntity
* @returns {EntityIdT}
*/
exports.toLastAddedMultiItemEntityId = function (multiFieldEntity) {
return util_1.ifNotNilThanValue(multiFieldEntity, function () { return (util_1.TypeUtils.isPrimitive(multiFieldEntity)
? multiFieldEntity
: (util_1.ifNotNilThanValue(multiFieldEntity.add, function (add) { return util_1.ifNotNilThanValue(R.last(add), function (lastValue) { return lastValue.id; }); }))); });
};
/**
* @stable [18.08.2018]
* @param {MultiFieldValueT} multiFieldValue
* @param {(entity: TItem, index: number) => TResult} mapper
* @returns {TResult[]}
*/
function fromMultiFieldValueToEditedEntities(multiFieldValue, mapper) {
var result = util_1.MultiFieldUtils.multiFieldValueAsEditEntities(multiFieldValue);
return util_1.ConditionUtils.orUndef(!R.isNil(result), function () { return result.map(mapper); });
}
exports.fromMultiFieldValueToEditedEntities = fromMultiFieldValueToEditedEntities;
/**
* @stable [04.07.2018]
* @param {IMultiItemEntity[]} multiItemEntities
* @returns {IKeyValue}
*/
exports.fromMultiItemEntitiesToFieldsChanges = function (multiItemEntities) {
return R.reduceBy(function (acc, entity) {
var _a;
return (__assign(__assign({}, acc), (_a = {}, _a[entity.name] = entity.value, _a)));
}, {}, function (entity) { return String(entity.id); }, multiItemEntities);
};
/**
* @stable [11.08.2018]
* @param {IMultiItemEntity} first
* @param {IMultiItemEntity} second
* @returns {boolean}
*/
exports.isSameEntityByIdAndChangedFieldName = function (first, second) { return (first.id === second.id
&& first.name === second.name); };
/**
* @stable [11.08.2018]
* @param {IMultiItemEntity} item
* @param {IEntity[]} addValue
* @param {IMultiItemEntity[]} removeValue
* @param {IMultiItemEntity[]} editValue
* @param {IEntity[]} originalValue
* @returns {IMultiFieldChangesEntity}
*/
exports.toMultiFieldChangesEntityOnEdit = function (item, addValue, removeValue, editValue, originalValue) {
var removeArray = removeValue;
var originalEditedItem = originalValue.find(function (originalItem0) { return originalItem0.id === item.id; });
var editedNewItem = addValue.find(function (editedNewItem0) { return editedNewItem0.id === item.id; });
var isEditedNewItem = !R.isNil(editedNewItem);
var isOriginalEditedItem = !R.isNil(originalEditedItem);
var editArray = isEditedNewItem
? editValue // If a user is editing a new record then returning an input value
: ( // Otherwise, we should replace an old item with an input item
editValue
.filter(function (editedItem) { return !exports.isSameEntityByIdAndChangedFieldName(item, editedItem); })
.concat(item)
.filter(function (editedItem) {
// Need to destroy the dirty changes, if an edited entity attribute is equal an original entity attribute
return !isOriginalEditedItem
|| !(exports.isSameEntityByIdAndChangedFieldName(item, editedItem) && originalEditedItem[item.name] === item.value);
}));
var addArray = isEditedNewItem
? (item.value === definitions_interface_1.UNDEF // Need to destroy the added entities
? R.filter(function (itm) { return itm.id !== item.id; }, addValue)
: R.map(function (newItem) { return newItem.id === item.id ? util_1.MultiFieldUtils.multiItemEntityAsEntity(item) : newItem; }, addValue))
: addValue;
return { addArray: addArray, removeArray: removeArray, editArray: editArray };
};
/**
* @stable [18.08.2018]
* @param {IMultiItemEntity} item
* @param {IEntity[]} addValue
* @param {IMultiItemEntity[]} removeValue
* @param {IMultiItemEntity[]} editValue
* @param {IEntity[]} originalValue
* @returns {IMultiFieldChangesEntity}
*/
exports.toMultiFieldChangesEntityOnDelete = function (item, addValue, removeValue, editValue, originalValue) {
var deletedItemId = item.id;
var addValueLenBeforeFiltering = addValue.length;
var editArray = editValue.filter((function (addItem) { return addItem.id !== deletedItemId; }));
var addArray = addValue.filter((function (addItem) { return addItem.id !== deletedItemId; }));
var removeArray = removeValue;
if (addArray.length === addValueLenBeforeFiltering) {
// The local added items do not contain deleted item
var deletedEntity = originalValue.find(function (entity) { return entity.id === deletedItemId; });
removeArray = (R.isNil(deletedEntity) ? [] : [deletedEntity]).concat(removeValue);
}
else {
// We just now have removed deleted item from addValue array
}
return { addArray: addArray, removeArray: removeArray, editArray: editArray };
};
//# sourceMappingURL=multifield.support.js.map