Files
ThingsBoard/Code Snippets/alertsAction.js
2023-11-30 12:54:00 -06:00

239 lines
7.9 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"));
let user = widgetContext.$scope.ctx.currentUser;
//console.log(user);
openEditEntityDialog();
function openEditEntityDialog() {
customDialog.customDialog(htmlTemplate, EditEntityDialogController).subscribe();
}
function EditEntityDialogController(instance) {
let vm = instance;
vm.entityName = entityName;
vm.entityType = entityId.entityType;
vm.user = widgetContext.$scope.ctx.currentUser;
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({
alertsEmail: [false],
alertsSMS: [false],
alertsVoice: [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, relation) {
vm.oldRelations().removeAt(index);
vm.relationsToDelete.push(relation);
vm.oldRelations().markAsDirty();
};
vm.save = function () {
vm.editEntityFormGroup.markAsPristine();
widgetContext.rxjs.forkJoin([saveRelations(entityId)]).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) {
//console.log(relations);
let relationsFrom = relations[0];
let relationsTo = relations[1];
for (let i = 0; i < relationsFrom.length; i++) {
if (relationsFrom[i].type == "getsAlertsEmail" && relationsFrom[i].to.id == user.userId) {
//console.log(`found getsAlertsEmail relation for ${entityName}`);
vm.attributes.alertsEmail = true;
vm.oldRelationsData.push("alertsEmail");
}
if (relationsFrom[i].type == "getsAlertsSMS" && relationsFrom[i].to.id == user.userId) {
//console.log(`found getsAlertsSMS relation for ${entityName}`);
vm.attributes.alertsSMS = true;
vm.oldRelationsData.push("alertsSMS");
}
if (relationsFrom[i].type == "getsAlertsVoice" && relationsFrom[i].to.id == user.userId) {
//console.log(`found getsAlertsVoice relation for ${entityName}`);
vm.attributes.alertsVoice = true;
vm.oldRelationsData.push("alertsVoice");
}
}
//console.log(vm.attributes);
}
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]);
//console.log(vm.attributes);
vm.entity = data[3];
vm.editEntityFormGroup.patchValue(
{
//I think this is where I'll be able to populate the toggles
entityName: vm.entity.name,
entityType: vm.entityType,
entityLabel: vm.entity.label,
type: vm.entity.type,
attributes: vm.attributes,
oldRelations: vm.oldRelationsData,
},
{ emitEvent: false }
);
});
}
function saveRelations(entityId) {
//let relations = vm.editEntityFormGroup.get("relations").value;
let attributes = vm.editEntityFormGroup.get("attributes").value;
let tasks = [];
//console.log(attributes);
if (attributes.alertsEmail == true) {
let relation = {
type: "getsAlertsEmail",
typeGroup: "COMMON",
to: { entityType: "USER", id: user.userId },
from: entityId,
};
//console.log(`adding getsAlertsEmail FROM ${entityName} TO ${user.name}`);
tasks.push(entityRelationService.saveRelation(relation));
} else {
let relation = {
type: "getsAlertsEmail",
typeGroup: "COMMON",
to: { entityType: "USER", id: user.userId },
from: entityId,
};
if (vm.oldRelationsData.includes("alertsEmail")) {
//console.log(`removing getsAlertsEmail FROM ${entityName} TO ${user.name}`);
relation.type = "getsAlertsEmail";
tasks.push(entityRelationService.deleteRelation(relation.from, relation.type, relation.to));
}
}
if (attributes.alertsSMS == true) {
let relation = {
type: "getsAlertsSMS",
typeGroup: "COMMON",
to: { entityType: "USER", id: user.userId },
from: entityId,
};
//console.log(`adding getsAlertsSMS FROM ${entityName} TO ${user.name}`);
relation.type = "getsAlertsSMS";
tasks.push(entityRelationService.saveRelation(relation));
} else {
let relation = {
type: "getsAlertsSMS",
typeGroup: "COMMON",
to: { entityType: "USER", id: user.userId },
from: entityId,
};
if (vm.oldRelationsData.includes("alertsSMS")) {
//console.log(`removing getsAlertsSMS FROM ${entityName} TO ${user.name}`);
relation.type = "getsAlertsSMS";
tasks.push(entityRelationService.deleteRelation(relation.from, relation.type, relation.to));
}
}
if (attributes.alertsVoice == true) {
let relation = {
type: "getsAlertsVoice",
typeGroup: "COMMON",
to: { entityType: "USER", id: user.userId },
from: entityId,
};
//console.log(`adding getsAlertsVoice FROM ${entityName} TO ${user.name}`);
relation.type = "getsAlertsVoice";
tasks.push(entityRelationService.saveRelation(relation));
} else {
let relation = {
type: "getsAlertsVoice",
typeGroup: "COMMON",
to: { entityType: "USER", id: user.userId },
from: entityId,
};
if (vm.oldRelationsData.includes("alertsVoice")) {
//console.log(`removing getsAlertsVoice FROM ${entityName} TO ${user.name}`);
relation.type = "getsAlertsVoice";
tasks.push(entityRelationService.deleteRelation(relation.from, relation.type, relation.to));
}
}
if (tasks.length > 0) {
//console.log(tasks);
return widgetContext.rxjs.forkJoin(tasks);
}
return widgetContext.rxjs.of([]);
}
}