217 lines
7.4 KiB
JavaScript
217 lines
7.4 KiB
JavaScript
let $injector = widgetContext.$scope.$injector;
|
|
let customDialog = $injector.get(widgetContext.servicesMap.get('customDialog'));
|
|
let entityService = $injector.get(widgetContext.servicesMap.get('entityService'));
|
|
let assetService = $injector.get(widgetContext.servicesMap.get('assetService'));
|
|
let deviceService = $injector.get(widgetContext.servicesMap.get('deviceService'));
|
|
let attributeService = $injector.get(widgetContext.servicesMap.get('attributeService'));
|
|
let entityRelationService = $injector.get(widgetContext.servicesMap.get('entityRelationService'));
|
|
|
|
openEditEntityDialog();
|
|
|
|
function openEditEntityDialog() {
|
|
customDialog.customDialog(htmlTemplate, EditEntityDialogController).subscribe();
|
|
}
|
|
|
|
function EditEntityDialogController(instance) {
|
|
let vm = instance;
|
|
|
|
vm.entityName = entityName;
|
|
vm.entityType = entityId.entityType;
|
|
vm.entitySearchDirection = {
|
|
from: "FROM",
|
|
to: "TO"
|
|
};
|
|
vm.attributes = {};
|
|
vm.oldRelationsData = [];
|
|
vm.relationsToDelete = [];
|
|
vm.entity = {};
|
|
|
|
vm.editEntityFormGroup = vm.fb.group({
|
|
entityName: ['', [vm.validators.required]],
|
|
entityType: [null],
|
|
entityLabel: [null],
|
|
type: ['', [vm.validators.required]],
|
|
attributes: vm.fb.group({
|
|
latitude: [null],
|
|
longitude: [null],
|
|
address: [null],
|
|
owner: [null],
|
|
number: [null, [vm.validators.pattern(/^-?[0-9]+$/)]],
|
|
booleanValue: [false]
|
|
}),
|
|
oldRelations: vm.fb.array([]),
|
|
relations: vm.fb.array([])
|
|
});
|
|
|
|
getEntityInfo();
|
|
|
|
vm.cancel = function() {
|
|
vm.dialogRef.close(null);
|
|
};
|
|
|
|
vm.relations = function() {
|
|
return vm.editEntityFormGroup.get('relations');
|
|
};
|
|
|
|
vm.oldRelations = function() {
|
|
return vm.editEntityFormGroup.get('oldRelations');
|
|
};
|
|
|
|
vm.addRelation = function() {
|
|
vm.relations().push(vm.fb.group({
|
|
relatedEntity: [null, [vm.validators.required]],
|
|
relationType: [null, [vm.validators.required]],
|
|
direction: [null, [vm.validators.required]]
|
|
}));
|
|
};
|
|
|
|
function addOldRelation() {
|
|
vm.oldRelations().push(vm.fb.group({
|
|
relatedEntity: [{value: null, disabled: true}, [vm.validators.required]],
|
|
relationType: [{value: null, disabled: true}, [vm.validators.required]],
|
|
direction: [{value: null, disabled: true}, [vm.validators.required]]
|
|
}));
|
|
}
|
|
|
|
vm.removeRelation = function(index) {
|
|
vm.relations().removeAt(index);
|
|
vm.relations().markAsDirty();
|
|
};
|
|
|
|
vm.removeOldRelation = function(index) {
|
|
vm.oldRelations().removeAt(index);
|
|
vm.relationsToDelete.push(vm.oldRelationsData[index]);
|
|
vm.oldRelations().markAsDirty();
|
|
};
|
|
|
|
vm.save = function() {
|
|
vm.editEntityFormGroup.markAsPristine();
|
|
widgetContext.rxjs.forkJoin([
|
|
saveAttributes(entityId),
|
|
saveRelations(entityId),
|
|
saveEntity()
|
|
]).subscribe(
|
|
function () {
|
|
widgetContext.updateAliases();
|
|
vm.dialogRef.close(null);
|
|
}
|
|
);
|
|
};
|
|
|
|
function getEntityAttributes(attributes) {
|
|
for (var i = 0; i < attributes.length; i++) {
|
|
vm.attributes[attributes[i].key] = attributes[i].value;
|
|
}
|
|
}
|
|
|
|
function getEntityRelations(relations) {
|
|
let relationsFrom = relations[0];
|
|
let relationsTo = relations[1];
|
|
for (let i=0; i < relationsFrom.length; i++) {
|
|
let relation = {
|
|
direction: 'FROM',
|
|
relationType: relationsFrom[i].type,
|
|
relatedEntity: relationsFrom[i].to
|
|
};
|
|
vm.oldRelationsData.push(relation);
|
|
addOldRelation();
|
|
}
|
|
for (let i=0; i < relationsTo.length; i++) {
|
|
let relation = {
|
|
direction: 'TO',
|
|
relationType: relationsTo[i].type,
|
|
relatedEntity: relationsTo[i].from
|
|
};
|
|
vm.oldRelationsData.push(relation);
|
|
addOldRelation();
|
|
}
|
|
}
|
|
|
|
function getEntityInfo() {
|
|
widgetContext.rxjs.forkJoin([
|
|
entityRelationService.findInfoByFrom(entityId),
|
|
entityRelationService.findInfoByTo(entityId),
|
|
attributeService.getEntityAttributes(entityId, 'SERVER_SCOPE'),
|
|
entityService.getEntity(entityId.entityType, entityId.id)
|
|
]).subscribe(
|
|
function (data) {
|
|
getEntityRelations(data.slice(0,2));
|
|
getEntityAttributes(data[2]);
|
|
vm.entity = data[3];
|
|
vm.editEntityFormGroup.patchValue({
|
|
entityName: vm.entity.name,
|
|
entityType: vm.entityType,
|
|
entityLabel: vm.entity.label,
|
|
type: vm.entity.type,
|
|
attributes: vm.attributes,
|
|
oldRelations: vm.oldRelationsData
|
|
}, {emitEvent: false});
|
|
}
|
|
);
|
|
}
|
|
|
|
function saveEntity() {
|
|
const formValues = vm.editEntityFormGroup.value;
|
|
if (vm.entity.label !== formValues.entityLabel){
|
|
vm.entity.label = formValues.entityLabel;
|
|
if (formValues.entityType == 'ASSET') {
|
|
return assetService.saveAsset(vm.entity);
|
|
} else if (formValues.entityType == 'DEVICE') {
|
|
return deviceService.saveDevice(vm.entity);
|
|
}
|
|
}
|
|
return widgetContext.rxjs.of([]);
|
|
}
|
|
|
|
function saveAttributes(entityId) {
|
|
let attributes = vm.editEntityFormGroup.get('attributes').value;
|
|
let attributesArray = [];
|
|
for (let key in attributes) {
|
|
if (attributes[key] !== vm.attributes[key]) {
|
|
attributesArray.push({key: key, value: attributes[key]});
|
|
}
|
|
}
|
|
if (attributesArray.length > 0) {
|
|
return attributeService.saveEntityAttributes(entityId, "SERVER_SCOPE", attributesArray);
|
|
}
|
|
return widgetContext.rxjs.of([]);
|
|
}
|
|
|
|
function saveRelations(entityId) {
|
|
let relations = vm.editEntityFormGroup.get('relations').value;
|
|
let tasks = [];
|
|
for(let i=0; i < relations.length; i++) {
|
|
let relation = {
|
|
type: relations[i].relationType,
|
|
typeGroup: 'COMMON'
|
|
};
|
|
if (relations[i].direction == 'FROM') {
|
|
relation.to = relations[i].relatedEntity;
|
|
relation.from = entityId;
|
|
} else {
|
|
relation.to = entityId;
|
|
relation.from = relations[i].relatedEntity;
|
|
}
|
|
tasks.push(entityRelationService.saveRelation(relation));
|
|
}
|
|
for (let i=0; i < vm.relationsToDelete.length; i++) {
|
|
let relation = {
|
|
type: vm.relationsToDelete[i].relationType
|
|
};
|
|
if (vm.relationsToDelete[i].direction == 'FROM') {
|
|
relation.to = vm.relationsToDelete[i].relatedEntity;
|
|
relation.from = entityId;
|
|
} else {
|
|
relation.to = entityId;
|
|
relation.from = vm.relationsToDelete[i].relatedEntity;
|
|
}
|
|
tasks.push(entityRelationService.deleteRelation(relation.from, relation.type, relation.to));
|
|
}
|
|
if (tasks.length > 0) {
|
|
return widgetContext.rxjs.forkJoin(tasks);
|
|
}
|
|
return widgetContext.rxjs.of([]);
|
|
}
|
|
}
|
|
|