dynamic-display-shared
Version:
A library for dynamic view
107 lines • 16.8 kB
JavaScript
import { ParametersGroup } from './entity-details.view-model';
import { plural } from 'pluralize';
import { getTime } from '../../infrastructure/date.utility';
import { EntityTypeInstance } from './entity-type-instance';
export function getMasterEntityViewModel(entity) {
return getViewModel(entity, true);
}
export function getEntityViewModel(entity) {
return getViewModel(entity, false);
}
// function getTime(date?: Date) {
// return date != null ? new Date(date).getTime() : 0;
// }
function getViewModel(entity, isMaster) {
const groupsMap = new Map();
entity.parameters.forEach((param) => {
const key = param.parametersGroupOrder;
const collection = groupsMap.get(key);
if (!collection) {
groupsMap.set(key, [param]);
}
else {
collection.push(param);
}
});
// tslint:disable-next-line: one-variable-per-declaration
const groups = [...groupsMap.entries()].sort()
.map((params) => {
const grp = new ParametersGroup();
grp.order = params[0];
grp.parameters = params[1]
.map(p => {
if (isSimpleParameter(p)) {
return p;
}
else {
const entityParameter = p;
return {
...entityParameter,
value: entityParameter.value ? entityParameter.value.map(ntt => getEntityViewModel(ntt)) : []
};
}
})
.sort((p1, p2) => p1.order - p2.order);
return grp;
});
const processes = entity.processes
.map(prcs => ({
...prcs,
entities: prcs.entities.map(ntt => getEntityViewModel(ntt)),
editEntities: prcs.editEntities ? prcs.editEntities.map(ntt => getEntityViewModel(ntt)) : null,
// resAppExpansionView: prcs.resAppExpansionView ? getEntityViewModel(prcs.resAppExpansionView) : null,
resAppToggledView: prcs.resAppToggledView ? getEntityViewModel(prcs.resAppToggledView) : null,
}))
.sort((p1, p2) => p1.order - p2.order);
const comments = entity.comments ? entity.comments.map(c => {
const newComment = Object.assign(c, {});
newComment.date = new Date(c.date);
return newComment;
}).sort((c1, c2) => getTime(c2.date) - getTime(c1.date)) : [];
processes.forEach(p => {
p.statuses = p.statuses.sort((s1, s2) => s1.order - s2.order);
p.statuses.forEach(status => status.entitiesStatus = status.entitiesStatus.sort((e1, e2) => getTime(e2.date) - getTime(e1.date)));
});
const entityBase = entity;
const viewModel = {
...entityBase,
id: entity.id,
description: entity.entityMetadata.description,
shortDescription: entity.entityMetadata.shortDescription,
type: entity.entityMetadata.id,
parametersGroups: groups,
processes,
comments,
gisIdFieldName: entity.entityMetadata.gisIdFieldName,
gisLayers: entity.entityMetadata.gisLayers,
gisBs: entity.entityMetadata.gisBs,
};
if (isMaster) {
const masterViewModel = {
...viewModel,
parametersGroups: groups.filter(group => group.order !== 0 && group.order !== 1),
headersParameters: groups.find(group => group.order === 0),
subHeadersParameters: groups.find(group => group.order === 1),
};
return masterViewModel;
}
else {
return viewModel;
}
}
export function isSimpleParameter(parameter) {
return parameter && 'valueCssClassName' in parameter;
}
export function isEntityParameter(parameter) {
return parameter && 'isDisplayEntityType' in parameter;
}
export function getPluralEntityTypeName(metadataId) {
return plural(EntityTypeInstance[metadataId]);
}
export function getSimpleParameters(parameters) {
return parameters.filter(p => isSimpleParameter(p)).map(p => p);
}
export function getEntityParameters(parameters) {
return parameters.filter(p => isEntityParameter(p)).map(p => p);
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlldy1tb2RlbC5oZWxwZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9keW5hbWljLWRpc3BsYXktc2hhcmVkL3NyYy9saWIvc2hhcmVkL21vZGVsL3ZpZXctbW9kZWwuaGVscGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBMEIsZUFBZSxFQUFnQyxNQUFNLDZCQUE2QixDQUFDO0FBRXBILE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDbkMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQzVELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzVELE1BQU0sVUFBVSx3QkFBd0IsQ0FBQyxNQUFjO0lBQ3JELE9BQU8sWUFBWSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQWlDLENBQUM7QUFDcEUsQ0FBQztBQUNELE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxNQUFjO0lBQy9DLE9BQU8sWUFBWSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztBQUNyQyxDQUFDO0FBQ0Qsa0NBQWtDO0FBQ2xDLHdEQUF3RDtBQUN4RCxJQUFJO0FBQ0osU0FBUyxZQUFZLENBQUMsTUFBYyxFQUFFLFFBQWlCO0lBQ3JELE1BQU0sU0FBUyxHQUFHLElBQUksR0FBRyxFQUEwQixDQUFDO0lBQ3BELE1BQU0sQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7UUFDbEMsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLG9CQUFvQixDQUFDO1FBQ3ZDLE1BQU0sVUFBVSxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdEMsSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNmLFNBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztTQUM3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RSxDQUFDLENBQTZCLENBQUMsQ0FBQztBQUM5RixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiXHJcbmltcG9ydCB7IEVudGl0eSwgRW50aXR5QmFzZSB9IGZyb20gJy4vZW50aXR5JztcclxuaW1wb3J0IHsgRW50aXR5RGV0YWlsc1ZpZXdNb2RlbCwgUGFyYW1ldGVyc0dyb3VwLCBNYXN0ZXJFbnRpdHlEZXRhaWxzVmlld01vZGVsIH0gZnJvbSAnLi9lbnRpdHktZGV0YWlscy52aWV3LW1vZGVsJztcclxuaW1wb3J0IHsgQW55UGFyYW1ldGVyLCBTaW1wbGVQYXJhbWV0ZXIsIEVudGl0eVBhcmFtZXRlciwgRW50aXR5Vmlld01vZGVsUGFyYW1ldGVyIH0gZnJvbSAnLi9lbnRpdHktcGFyYW1ldGVyJztcclxuaW1wb3J0IHsgcGx1cmFsIH0gZnJvbSAncGx1cmFsaXplJztcclxuaW1wb3J0IHsgZ2V0VGltZSB9IGZyb20gJy4uLy4uL2luZnJhc3RydWN0dXJlL2RhdGUudXRpbGl0eSc7XHJcbmltcG9ydCB7IEVudGl0eVR5cGVJbnN0YW5jZSB9IGZyb20gJy4vZW50aXR5LXR5cGUtaW5zdGFuY2UnO1xyXG5leHBvcnQgZnVuY3Rpb24gZ2V0TWFzdGVyRW50aXR5Vmlld01vZGVsKGVudGl0eTogRW50aXR5KTogTWFzdGVyRW50aXR5RGV0YWlsc1ZpZXdNb2RlbCB7XHJcbiAgcmV0dXJuIGdldFZpZXdNb2RlbChlbnRpdHksIHRydWUpIGFzIE1hc3RlckVudGl0eURldGFpbHNWaWV3TW9kZWw7XHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIGdldEVudGl0eVZpZXdNb2RlbChlbnRpdHk6IEVudGl0eSk6IEVudGl0eURldGFpbHNWaWV3TW9kZWwge1xyXG4gIHJldHVybiBnZXRWaWV3TW9kZWwoZW50aXR5LCBmYWxzZSk7XHJcbn1cclxuLy8gZnVuY3Rpb24gZ2V0VGltZShkYXRlPzogRGF0ZSkge1xyXG4vLyAgIHJldHVybiBkYXRlICE9IG51bGwgPyBuZXcgRGF0ZShkYXRlKS5nZXRUaW1lKCkgOiAwO1xyXG4vLyB9XHJcbmZ1bmN0aW9uIGdldFZpZXdNb2RlbChlbnRpdHk6IEVudGl0eSwgaXNNYXN0ZXI6IGJvb2xlYW4pOiBFbnRpdHlEZXRhaWxzVmlld01vZGVsIHtcclxuICBjb25zdCBncm91cHNNYXAgPSBuZXcgTWFwPG51bWJlciwgQW55UGFyYW1ldGVyW10+KCk7XHJcbiAgZW50aXR5LnBhcmFtZXRlcnMuZm9yRWFjaCgocGFyYW0pID0+IHtcclxuICAgIGNvbnN0IGtleSA9IHBhcmFtLnBhcmFtZXRlcnNHcm91cE9yZGVyO1xyXG4gICAgY29uc3QgY29sbGVjdGlvbiA9IGdyb3Vwc01hcC5nZXQoa2V5KTtcclxuICAgIGlmICghY29sbGVjdGlvbikge1xyXG4gICAgICBncm91cHNNYXAuc2V0KGtleSwgW3BhcmFtXSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb2xsZWN0aW9uLnB1c2gocGFyYW0pO1xyXG4gICAgfVxyXG4gIH0pO1xyXG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogb25lLXZhcmlhYmxlLXBlci1kZWNsYXJhdGlvblxyXG4gIGNvbnN0IGdyb3VwczogUGFyYW1ldGVyc0dyb3VwW10gPSBbLi4uZ3JvdXBzTWFwLmVudHJpZXMoKV0uc29ydCgpXHJcbiAgICAubWFwKChwYXJhbXMpID0+IHtcclxuICAgICAgY29uc3QgZ3JwID0gbmV3IFBhcmFtZXRlcnNHcm91cCgpO1xyXG4gICAgICBncnAub3JkZXIgPSBwYXJhbXNbMF07XHJcbiAgICAgIGdycC5wYXJhbWV0ZXJzID0gcGFyYW1zWzFdXHJcbiAgICAgICAgLm1hcChwID0+IHtcclxuICAgICAgICAgIGlmIChpc1NpbXBsZVBhcmFtZXRlcihwKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gcDtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGVudGl0eVBhcmFtZXRlciA9IHAgYXMgRW50aXR5UGFyYW1ldGVyO1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgIC4uLmVudGl0eVBhcmFtZXRlcixcclxuICAgICAgICAgICAgICB2YWx1ZTogZW50aXR5UGFyYW1ldGVyLnZhbHVlID8gZW50aXR5UGFyYW1ldGVyLnZhbHVlLm1hcChudHQgPT4gZ2V0RW50aXR5Vmlld01vZGVsKG50dCkpIDogW11cclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICAgIC5zb3J0KChwMSwgcDIpID0+IHAxLm9yZGVyIC0gcDIub3JkZXIpO1xyXG4gICAgICByZXR1cm4gZ3JwO1xyXG4gICAgfVxyXG4gICAgKTtcclxuICBjb25zdCBwcm9jZXNzZXMgPSBlbnRpdHkucHJvY2Vzc2VzXHJcbiAgICAubWFwKHByY3MgPT4gKHtcclxuICAgICAgLi4ucHJjcyxcclxuICAgICAgZW50aXRpZXM6IHByY3MuZW50aXRpZXMubWFwKG50dCA9PiBnZXRFbnRpdHlWaWV3TW9kZWwobnR0KSksXHJcbiAgICAgIGVkaXRFbnRpdGllczogcHJjcy5lZGl0RW50aXRpZXMgPyBwcmNzLmVkaXRFbnRpdGllcy5tYXAobnR0ID0+IGdldEVudGl0eVZpZXdNb2RlbChudHQpKSA6IG51bGwsXHJcbiAgICAgIC8vIHJlc0FwcEV4cGFuc2lvblZpZXc6IHByY3MucmVzQXBwRXhwYW5zaW9uVmlldyA/IGdldEVudGl0eVZpZXdNb2RlbChwcmNzLnJlc0FwcEV4cGFuc2lvblZpZXcpIDogbnVsbCxcclxuICAgICAgcmVzQXBwVG9nZ2xlZFZpZXc6IHByY3MucmVzQXBwVG9nZ2xlZFZpZXcgPyBnZXRFbnRpdHlWaWV3TW9kZWwocHJjcy5yZXNBcHBUb2dnbGVkVmlldykgOiBudWxsLFxyXG4gICAgfSkpXHJcbiAgICAuc29ydCgocDEsIHAyKSA9PiBwMS5vcmRlciAtIHAyLm9yZGVyKTtcclxuICBjb25zdCBjb21tZW50cyA9IGVudGl0eS5jb21tZW50cyA/IGVudGl0eS5jb21tZW50cy5tYXAoYyA9PiB7XHJcbiAgICBjb25zdCBuZXdDb21tZW50ID0gT2JqZWN0LmFzc2lnbihjLCB7fSk7XHJcbiAgICBuZXdDb21tZW50LmRhdGUgPSBuZXcgRGF0ZShjLmRhdGUpO1xyXG4gICAgcmV0dXJuIG5ld0NvbW1lbnQ7XHJcbiAgfSkuc29ydCgoYzEsIGMyKSA9PiBnZXRUaW1lKGMyLmRhdGUpIC0gZ2V0VGltZShjMS5kYXRlKSkgOiBbXTtcclxuXHJcbiAgcHJvY2Vzc2VzLmZvckVhY2gocCA9PiB7XHJcbiAgICBwLnN0YXR1c2VzID0gcC5zdGF0dXNlcy5zb3J0KChzMSwgczIpID0+IHMxLm9yZGVyIC0gczIub3JkZXIpO1xyXG4gICAgcC5zdGF0dXNlcy5mb3JFYWNoKHN0YXR1cyA9PiBzdGF0dXMuZW50aXRpZXNTdGF0dXMgPSBzdGF0dXMuZW50aXRpZXNTdGF0dXMuc29ydCgoZTEsIGUyKSA9PiBnZXRUaW1lKGUyLmRhdGUpIC0gZ2V0VGltZShlMS5kYXRlKSkpO1xyXG4gIH0pO1xyXG4gIGNvbnN0IGVudGl0eUJhc2U6IEVudGl0eUJhc2UgPSBlbnRpdHkgYXMgRW50aXR5QmFzZTtcclxuICBjb25zdCB2aWV3TW9kZWw6IEVudGl0eURldGFpbHNWaWV3TW9kZWwgPSB7XHJcbiAgICAuLi5lbnRpdHlCYXNlLFxyXG4gICAgaWQ6IGVudGl0eS5pZCxcclxuICAgIGRlc2NyaXB0aW9uOiBlbnRpdHkuZW50aXR5TWV0YWRhdGEuZGVzY3JpcHRpb24sXHJcbiAgICBzaG9ydERlc2NyaXB0aW9uOiBlbnRpdHkuZW50aXR5TWV0YWRhdGEuc2hvcnREZXNjcmlwdGlvbixcclxuICAgIHR5cGU6IGVudGl0eS5lbnRpdHlNZXRhZGF0YS5pZCBhcyBFbnRpdHlUeXBlSW5zdGFuY2UsXHJcbiAgICBwYXJhbWV0ZXJzR3JvdXBzOiBncm91cHMsXHJcbiAgICBwcm9jZXNzZXMsXHJcbiAgICBjb21tZW50cyxcclxuICAgIGdpc0lkRmllbGROYW1lOiBlbnRpdHkuZW50aXR5TWV0YWRhdGEuZ2lzSWRGaWVsZE5hbWUsXHJcbiAgICBnaXNMYXllcnM6IGVudGl0eS5lbnRpdHlNZXRhZGF0YS5naXNMYXllcnMsXHJcbiAgICBnaXNCczogZW50aXR5LmVudGl0eU1ldGFkYXRhLmdpc0JzLFxyXG4gIH07XHJcbiAgaWYgKGlzTWFzdGVyKSB7XHJcbiAgICBjb25zdCBtYXN0ZXJWaWV3TW9kZWw6IE1hc3RlckVudGl0eURldGFpbHNWaWV3TW9kZWwgPSB7XHJcbiAgICAgIC4uLnZpZXdNb2RlbCxcclxuICAgICAgcGFyYW1ldGVyc0dyb3VwczogZ3JvdXBzLmZpbHRlcihncm91cCA9PiBncm91cC5vcmRlciAhPT0gMCAmJiBncm91cC5vcmRlciAhPT0gMSksXHJcbiAgICAgIGhlYWRlcnNQYXJhbWV0ZXJzOiBncm91cHMuZmluZChncm91cCA9PiBncm91cC5vcmRlciA9PT0gMCksXHJcbiAgICAgIHN1YkhlYWRlcnNQYXJhbWV0ZXJzOiBncm91cHMuZmluZChncm91cCA9PiBncm91cC5vcmRlciA9PT0gMSksXHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIG1hc3RlclZpZXdNb2RlbDtcclxuICB9IGVsc2Uge1xyXG4gICAgcmV0dXJuIHZpZXdNb2RlbDtcclxuICB9XHJcblxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaXNTaW1wbGVQYXJhbWV0ZXIocGFyYW1ldGVyOiBBbnlQYXJhbWV0ZXIpOiBib29sZWFuIHtcclxuICByZXR1cm4gcGFyYW1ldGVyICYmICd2YWx1ZUNzc0NsYXNzTmFtZScgaW4gcGFyYW1ldGVyO1xyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBpc0VudGl0eVBhcmFtZXRlcihwYXJhbWV0ZXI6IEFueVBhcmFtZXRlcik6IGJvb2xlYW4ge1xyXG4gIHJldHVybiBwYXJhbWV0ZXIgJiYgJ2lzRGlzcGxheUVudGl0eVR5cGUnIGluIHBhcmFtZXRlcjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldFBsdXJhbEVudGl0eVR5cGVOYW1lKG1ldGFkYXRhSWQ6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgcmV0dXJuIHBsdXJhbChFbnRpdHlUeXBlSW5zdGFuY2VbbWV0YWRhdGFJZF0pO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2ltcGxlUGFyYW1ldGVycyhwYXJhbWV0ZXJzOiBBbnlQYXJhbWV0ZXJbXSk6IFNpbXBsZVBhcmFtZXRlcltdIHtcclxuICByZXR1cm4gcGFyYW1ldGVycy5maWx0ZXIocCA9PiBpc1NpbXBsZVBhcmFtZXRlcihwKSkubWFwKHAgPT4gcCBhcyBTaW1wbGVQYXJhbWV0ZXIpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0RW50aXR5UGFyYW1ldGVycyhwYXJhbWV0ZXJzOiBBbnlQYXJhbWV0ZXJbXSk6IEVudGl0eVZpZXdNb2RlbFBhcmFtZXRlcltdIHtcclxuICByZXR1cm4gcGFyYW1ldGVycy5maWx0ZXIocCA9PiBpc0VudGl0eVBhcmFtZXRlcihwKSkubWFwKHAgPT4gcCBhcyBFbnRpdHlWaWV3TW9kZWxQYXJhbWV0ZXIpO1xyXG59XHJcblxyXG4iXX0=