Browse Source

Fix dashboards entity data query mapping. UI: Fixed entity subscription creation. UI: Improve resource load failure handling.

pull/3104/head
Igor Kulikov 6 years ago
parent
commit
349909be87
  1. 5
      dao/src/main/java/org/thingsboard/server/dao/sql/query/EntityKeyMapping.java
  2. 52
      ui-ngx/src/app/core/services/resources.service.ts
  3. 10
      ui-ngx/src/app/modules/home/components/widget/widget.component.ts

5
dao/src/main/java/org/thingsboard/server/dao/sql/query/EntityKeyMapping.java

@ -72,6 +72,7 @@ public class EntityKeyMapping {
private static final String PHONE = "phone";
public static final List<String> commonEntityFields = Arrays.asList(CREATED_TIME, ENTITY_TYPE, NAME);
public static final List<String> dashboardEntityFields = Arrays.asList(CREATED_TIME, ENTITY_TYPE, TITLE);
public static final List<String> labeledEntityFields = Arrays.asList(CREATED_TIME, ENTITY_TYPE, NAME, TYPE, LABEL);
public static final List<String> contactBasedEntityFields = Arrays.asList(CREATED_TIME, ENTITY_TYPE, EMAIL, TITLE, COUNTRY, STATE, CITY, ADDRESS, ADDRESS_2, ZIP, PHONE);
@ -89,7 +90,7 @@ public class EntityKeyMapping {
allowedEntityFieldMap.put(EntityType.USER, new HashSet<>(Arrays.asList(CREATED_TIME, FIRST_NAME, LAST_NAME, EMAIL)));
allowedEntityFieldMap.put(EntityType.DASHBOARD, new HashSet<>(commonEntityFields));
allowedEntityFieldMap.put(EntityType.DASHBOARD, new HashSet<>(dashboardEntityFields));
allowedEntityFieldMap.put(EntityType.RULE_CHAIN, new HashSet<>(commonEntityFields));
allowedEntityFieldMap.put(EntityType.RULE_NODE, new HashSet<>(commonEntityFields));
allowedEntityFieldMap.put(EntityType.WIDGET_TYPE, new HashSet<>(commonEntityFields));
@ -118,12 +119,12 @@ public class EntityKeyMapping {
contactBasedAliases.put(LABEL, TITLE);
aliases.put(EntityType.TENANT, contactBasedAliases);
aliases.put(EntityType.CUSTOMER, contactBasedAliases);
aliases.put(EntityType.DASHBOARD, contactBasedAliases);
Map<String, String> commonEntityAliases = new HashMap<>();
commonEntityAliases.put(TITLE, NAME);
aliases.put(EntityType.DEVICE, commonEntityAliases);
aliases.put(EntityType.ASSET, commonEntityAliases);
aliases.put(EntityType.ENTITY_VIEW, commonEntityAliases);
aliases.put(EntityType.DASHBOARD, commonEntityAliases);
aliases.put(EntityType.WIDGETS_BUNDLE, commonEntityAliases);
Map<String, String> userEntityAliases = new HashMap<>();

52
ui-ngx/src/app/core/services/resources.service.ts

@ -127,33 +127,39 @@ export class ResourcesService {
}
SystemJS.import(url).then(
(module) => {
let modules;
try {
modules = this.extractNgModules(module);
} catch (e) {}
if (modules && modules.length) {
const tasks: Promise<ModuleWithComponentFactories<any>>[] = [];
for (const m of modules) {
tasks.push(this.compiler.compileModuleAndAllComponentsAsync(m));
let modules;
try {
modules = this.extractNgModules(module);
} catch (e) {
}
forkJoin(tasks).subscribe((compiled) => {
try {
for (const c of compiled) {
c.ngModuleFactory.create(this.injector);
if (modules && modules.length) {
const tasks: Promise<ModuleWithComponentFactories<any>>[] = [];
for (const m of modules) {
tasks.push(this.compiler.compileModuleAndAllComponentsAsync(m));
}
forkJoin(tasks).subscribe((compiled) => {
try {
for (const c of compiled) {
c.ngModuleFactory.create(this.injector);
}
this.loadedModules[url].next(modules);
this.loadedModules[url].complete();
} catch (e) {
this.loadedModules[url].error(new Error(`Unable to init module from url: ${url}`));
delete this.loadedModules[url];
}
this.loadedModules[url].next(modules);
this.loadedModules[url].complete();
} catch (e) {
this.loadedModules[url].error(new Error(`Unable to init module from url: ${url}`));
},
(e) => {
this.loadedModules[url].error(new Error(`Unable to compile module from url: ${url}`));
delete this.loadedModules[url];
}
},
(e) => {
this.loadedModules[url].error(new Error(`Unable to compile module from url: ${url}`));
delete this.loadedModules[url];
});
} else {
this.loadedModules[url].error(new Error(`Module '${url}' doesn't have default export or not NgModule!`));
});
} else {
this.loadedModules[url].error(new Error(`Module '${url}' doesn't have default export or not NgModule!`));
delete this.loadedModules[url];
}
} catch (e) {
this.loadedModules[url].error(new Error(`Unable to load module from url: ${url}`));
delete this.loadedModules[url];
}
},

10
ui-ngx/src/app/modules/home/components/widget/widget.component.ts

@ -794,16 +794,10 @@ export class WidgetComponent extends PageComponent implements OnInit, AfterViewI
options.useDashboardTimewindow = true;
}
}
let datasource: Datasource;
if (options.type === widgetType.alarm) {
datasource = this.entityService.createAlarmSourceFromSubscriptionInfo(subscriptionsInfo[0]);
options.alarmSource = this.entityService.createAlarmSourceFromSubscriptionInfo(subscriptionsInfo[0]);
} else {
datasource = this.entityService.createDatasourcesFromSubscriptionsInfo(subscriptionsInfo);
}
if (options.type === widgetType.alarm) {
options.alarmSource = datasource;
} else {
options.datasources = [datasource];
options.datasources = this.entityService.createDatasourcesFromSubscriptionsInfo(subscriptionsInfo);
}
this.createSubscription(options, subscribe).subscribe(
(subscription) => {

Loading…
Cancel
Save