react-application-core
Version:
A react-based application core for the business applications.
310 lines • 12.1 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.MultiFieldUtils = void 0;
var R = require("ramda");
var type_1 = require("./type");
var definitions_interface_1 = require("../definitions.interface");
var array_1 = require("./array");
var clone_1 = require("./clone");
var filter_1 = require("./filter");
var nvl_1 = require("./nvl");
var object_1 = require("./object");
/**
* @stable [03.09.2020]
* @param initial
*/
var fromMultiEntity = function (initial) { return ({
add: initial.add || [],
edit: initial.edit || [],
remove: initial.remove || [],
source: initial.source || [],
}); };
/**
* @stable [29.08.2020]
* @param value
*/
var isNotMultiEntity = function (value) {
return Array.isArray(value) || type_1.TypeUtils.isPrimitive(value);
};
/**
* @stable [29.08.2020]
* @param value
*/
var notMultiFieldValueAsEntities = function (value) {
return type_1.TypeUtils.isPrimitive(value)
? [{ id: value }]
: value;
};
/**
* @stable [29.08.2020]
* @param value
* @param converter
* @param defaultValue
*/
var extractEntitiesFromMultiFieldValue = function (value, converter, defaultValue) {
return isNotMultiEntity(value)
? (type_1.TypeUtils.isDef(defaultValue)
? defaultValue
: notMultiFieldValueAsEntities(value))
: (R.isNil(value) ? [] : converter(value));
};
/**
* @stable [21.01.2021]
* @param value
* @param defaultValue
*/
var multiFieldValueAsMultiItemSourceEntities = function (value, defaultValue) {
return extractEntitiesFromMultiFieldValue(value, function (currentValue) { return currentValue.source; }, defaultValue);
};
/**
* @stable [21.01.2021]
* @param value
* @param defaultValue
*/
var multiFieldValueAsMultiItemEditEntities = function (value, defaultValue) {
if (defaultValue === void 0) { defaultValue = []; }
return extractEntitiesFromMultiFieldValue(value, function (currentValue) { return currentValue.edit; }, defaultValue);
};
/**
* @stable [21.01.2021]
* @param value
* @param defaultValue
*/
var multiFieldValueAsMultiItemAddEntities = function (value, defaultValue) {
if (defaultValue === void 0) { defaultValue = []; }
return extractEntitiesFromMultiFieldValue(value, function (currentValue) { return currentValue.add; }, defaultValue);
};
/**
* @stable [29.08.2020]
* @param value
* @param defaultValue
*/
var multiFieldValueAsMultiItemRemoveEntities = function (value, defaultValue) {
if (defaultValue === void 0) { defaultValue = []; }
return extractEntitiesFromMultiFieldValue(value, function (currentValue) { return currentValue.remove; }, defaultValue);
};
/**
* @stable [29.08.2020]
* @param entity
* @param mappedSourcedItems
*/
var multiFieldValueAsEditEntities = function (entity, mappedSourcedItems) {
var multiEntity = entity;
if (R.isNil(entity)) {
return definitions_interface_1.UNDEF;
}
if (isNotMultiEntity(entity)) {
return [];
}
var resultItems = new Map();
var cachedSourceItems = mappedSourcedItems || new Map();
if (R.isNil(mappedSourcedItems)) {
multiEntity.source.forEach(function (sourceEntity) { return cachedSourceItems.set(sourceEntity.id, sourceEntity); });
}
multiEntity.edit.forEach(function (editedItem) {
var editedItemId = editedItem.id;
var cachedResultItem = resultItems.get(editedItemId);
// Collect the changes
var $editedItem = cachedResultItem || clone_1.CloneUtils.shallowClone(cachedSourceItems.get(editedItemId));
Reflect.set($editedItem, editedItem.name, editedItem.value);
if (R.isNil(cachedResultItem)) {
resultItems.set(editedItemId, $editedItem);
}
});
return Array.from(resultItems.values());
};
/**
* @stable [21.01.2021]
* @param name
* @param value
* @param rawData
* @param newEntity
*/
var asMultiItemEntity = function (name, value, rawData, newEntity) {
return filter_1.FilterUtils.defValuesFilter({
id: rawData.id,
value: value,
name: name,
rawData: rawData,
newEntity: newEntity,
});
};
/**
* @stable [02.09.2020]
* @param cfg
*/
var filterMultiFieldValue = function (cfg) {
var addFilter = cfg.addFilter, currentEntity = cfg.currentEntity, editFilter = cfg.editFilter, removeFilter = cfg.removeFilter, sourceEntities = cfg.sourceEntities;
if (R.isNil(currentEntity) || isNotMultiEntity(currentEntity)) {
return definitions_interface_1.UNDEF;
}
var $currentEntity = currentEntity;
var add = type_1.TypeUtils.isFn(addFilter) ? $currentEntity.add.filter(addFilter) : $currentEntity.add;
var edit = type_1.TypeUtils.isFn(editFilter) ? $currentEntity.edit.filter(editFilter) : $currentEntity.edit;
var remove = type_1.TypeUtils.isFn(removeFilter) ? $currentEntity.remove.filter(removeFilter) : $currentEntity.remove;
if (add.length === 0 && edit.length === 0 && remove.length === 0) {
return definitions_interface_1.UNDEF;
}
return {
add: add,
edit: edit,
remove: remove,
source: sourceEntities,
};
};
/**
* @stable [03.09.2020]
* @param cfg
*/
var concatMultiFieldValue = function (cfg) {
var concatEntity = cfg.concatEntity, currentEntity = cfg.currentEntity;
if (R.isNil(currentEntity) || isNotMultiEntity(currentEntity)) {
return definitions_interface_1.UNDEF;
}
if (R.isNil(concatEntity)) {
return currentEntity;
}
var $currentEntity = currentEntity;
var $concatEntity = fromMultiEntity(concatEntity);
var add = $currentEntity.add.concat($concatEntity.add);
var edit = $currentEntity.edit.concat($concatEntity.edit);
var remove = $currentEntity.remove.concat($concatEntity.remove);
return __assign(__assign({}, $currentEntity), { add: add,
edit: edit,
remove: remove });
};
/**
* @stable [03.09.2020]
* @param entity
*/
var multiFieldValueAsEntities = function (entity) {
if (R.isNil(entity)) {
return definitions_interface_1.UNDEF;
}
if (isNotMultiEntity(entity)) {
return entity;
}
var multiEntity = entity;
var sourceEntities = multiEntity.source || [];
// Fill a cache
var cachedSourceEntities = new Map();
sourceEntities.forEach(function (itm) { return cachedSourceEntities.set(itm.id, itm); });
// Pass a map to optimize
var editedEntities = multiFieldValueAsEditEntities(entity, cachedSourceEntities);
var cachedEditedEntities = new Map();
if (object_1.ObjectUtils.isObjectNotEmpty(editedEntities)) {
editedEntities.forEach(function (itm) { return cachedEditedEntities.set(itm.id, itm); });
}
// Remove the deleted entities
multiEntity.remove.forEach(function (itm) { return cachedSourceEntities.delete(itm.id); });
return multiEntity.add.concat(Array.from(cachedSourceEntities.values())
.map(function (itm) { return nvl_1.NvlUtils.nvl(cachedEditedEntities.get(itm.id), itm); }));
};
/**
* @stable [21.01.2021]
* @param entity
*/
var multiFieldValueAsDefinedEntities = function (entity) {
return multiFieldValueAsEntities(entity) || [];
};
/**
* @stable [21.01.2021]
* @param cfg
*/
var multiFieldValueAsUnknownEntitiesObject = function (cfg) {
var entity = cfg.entity, _a = cfg.groupKeyAccessor, groupKeyAccessor = _a === void 0 ? function (item) { return item.id; } : _a, groupValueAccessor = cfg.groupValueAccessor;
return R.mergeAll(multiFieldValueAsDefinedEntities(entity)
.map(function (item) {
var _a;
return (_a = {}, _a[groupKeyAccessor(item)] = groupValueAccessor(item), _a);
}));
};
/**
* @stable [21.01.2021]
* @param cfg
*/
var multiFieldValueAsTrueEntitiesObject = function (cfg) {
return multiFieldValueAsUnknownEntitiesObject(__assign(__assign({}, cfg), { groupValueAccessor: function () { return true; } }));
};
/**
* @stable [21.01.2021]
* @param multiFieldValue
* @param mapper
*/
var multiFieldValueAsMappedEntities = function (multiFieldValue, mapper) { var _a; return (_a = multiFieldValueAsEntities(multiFieldValue)) === null || _a === void 0 ? void 0 : _a.map(mapper); };
/**
* @stable [21.01.2021]
* @param multiFieldValueOrEntitiesIds
*/
var multiFieldValueAsEntitiesIds = function (multiFieldValueOrEntitiesIds) {
return multiFieldValueAsMappedEntities(multiFieldValueOrEntitiesIds, function (entity) { return entity.id; });
};
/**
* @stable [21.01.2021]
* @param entity
* @param multiFieldValue
*/
var buildPhantomEntity = function (entity, multiFieldValue) { return (__assign(__assign({}, entity), { id: array_1.ArrayUtils.nextMinNegativeValue(MultiFieldUtils.multiFieldValueAsEntitiesIds(multiFieldValue) || []) })); };
/**
* @stable [21.01.2021]
* @param name
* @param multiFieldValue
* @param predicate
* @param factory
*/
var asMultiItemEditReplacedEntity = function (name, multiFieldValue, predicate, factory) {
var multiItemSourceEntity = multiFieldValueAsMultiItemSourceEntities(multiFieldValue).find(predicate);
return asMultiItemEntity(name, factory(multiFieldValueAsMultiItemEditEntities(multiFieldValue).find(predicate), multiItemSourceEntity), multiItemSourceEntity);
};
/**
* @stable [21.01.2021]
* @param multiItemEntity
*/
var multiItemEntityAsEntity = function (multiItemEntity) {
var _a;
if (type_1.TypeUtils.isDef(multiItemEntity.rawData)) {
return __assign(__assign({}, multiItemEntity.rawData), (_a = {}, _a[multiItemEntity.name] = multiItemEntity.value, _a));
}
return multiItemEntity;
};
/**
* @stable [29.08.2020]
*/
var MultiFieldUtils = /** @class */ (function () {
function MultiFieldUtils() {
}
MultiFieldUtils.asMultiItemEditReplacedEntity = asMultiItemEditReplacedEntity;
MultiFieldUtils.asMultiItemEntity = asMultiItemEntity;
MultiFieldUtils.buildPhantomEntity = buildPhantomEntity;
MultiFieldUtils.concatMultiFieldValue = concatMultiFieldValue;
MultiFieldUtils.filterMultiFieldValue = filterMultiFieldValue;
MultiFieldUtils.fromMultiEntity = fromMultiEntity;
MultiFieldUtils.isNotMultiEntity = isNotMultiEntity;
MultiFieldUtils.multiFieldValueAsDefinedEntities = multiFieldValueAsDefinedEntities;
MultiFieldUtils.multiFieldValueAsEditEntities = multiFieldValueAsEditEntities;
MultiFieldUtils.multiFieldValueAsEntities = multiFieldValueAsEntities;
MultiFieldUtils.multiFieldValueAsEntitiesIds = multiFieldValueAsEntitiesIds;
MultiFieldUtils.multiFieldValueAsMappedEntities = multiFieldValueAsMappedEntities;
MultiFieldUtils.multiFieldValueAsMultiItemAddEntities = multiFieldValueAsMultiItemAddEntities;
MultiFieldUtils.multiFieldValueAsMultiItemEditEntities = multiFieldValueAsMultiItemEditEntities;
MultiFieldUtils.multiFieldValueAsMultiItemRemoveEntities = multiFieldValueAsMultiItemRemoveEntities;
MultiFieldUtils.multiFieldValueAsMultiItemSourceEntities = multiFieldValueAsMultiItemSourceEntities;
MultiFieldUtils.multiFieldValueAsTrueEntitiesObject = multiFieldValueAsTrueEntitiesObject;
MultiFieldUtils.multiFieldValueAsUnknownEntitiesObject = multiFieldValueAsUnknownEntitiesObject;
MultiFieldUtils.multiItemEntityAsEntity = multiItemEntityAsEntity;
MultiFieldUtils.notMultiFieldValueAsEntities = notMultiFieldValueAsEntities;
return MultiFieldUtils;
}());
exports.MultiFieldUtils = MultiFieldUtils;
//# sourceMappingURL=multi-field.js.map