diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/alarms-table-widget.component.html b/ui-ngx/src/app/modules/home/components/widget/lib/alarms-table-widget.component.html
index 7e9a67c485..d269fbbe92 100644
--- a/ui-ngx/src/app/modules/home/components/widget/lib/alarms-table-widget.component.html
+++ b/ui-ngx/src/app/modules/home/components/widget/lib/alarms-table-widget.component.html
@@ -61,7 +61,7 @@
-
diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/alarms-table-widget.component.ts b/ui-ngx/src/app/modules/home/components/widget/lib/alarms-table-widget.component.ts
index 81834ff9c9..26055c55b2 100644
--- a/ui-ngx/src/app/modules/home/components/widget/lib/alarms-table-widget.component.ts
+++ b/ui-ngx/src/app/modules/home/components/widget/lib/alarms-table-widget.component.ts
@@ -247,11 +247,8 @@ export class AlarmsTableWidgetComponent extends PageComponent implements OnInit,
}
public onDataUpdated() {
- this.ngZone.run(() => {
- this.updateTitle(true);
- this.alarmsDatasource.updateAlarms();
- this.ctx.detectChanges();
- });
+ this.updateTitle(true);
+ this.alarmsDatasource.updateAlarms();
}
public pageLinkSortDirection(): SortDirection {
@@ -565,6 +562,10 @@ export class AlarmsTableWidgetComponent extends PageComponent implements OnInit,
return column.def;
}
+ public trackByRowIndex(index: number) {
+ return index;
+ }
+
public headerStyle(key: EntityColumn): any {
const columnWidth = this.columnWidth[key.def];
return widthStyle(columnWidth);
@@ -606,7 +607,19 @@ export class AlarmsTableWidgetComponent extends PageComponent implements OnInit,
} else {
content = this.defaultContent(key, contentInfo, value);
}
- return isDefined(content) ? this.domSanitizer.bypassSecurityTrustHtml(content) : '';
+
+ if (!isDefined(content)) {
+ return '';
+
+ } else {
+ switch (typeof content) {
+ case 'string':
+ return this.domSanitizer.bypassSecurityTrustHtml(content);
+ default:
+ return content;
+ }
+ }
+
} else {
return '';
}
diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/entities-table-widget.component.html b/ui-ngx/src/app/modules/home/components/widget/lib/entities-table-widget.component.html
index a2c70a3a89..2eb4b372b9 100644
--- a/ui-ngx/src/app/modules/home/components/widget/lib/entities-table-widget.component.html
+++ b/ui-ngx/src/app/modules/home/components/widget/lib/entities-table-widget.component.html
@@ -38,7 +38,7 @@
-
{{ column.title }}
diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/entities-table-widget.component.ts b/ui-ngx/src/app/modules/home/components/widget/lib/entities-table-widget.component.ts
index ef560dbfc5..dae33f3cfe 100644
--- a/ui-ngx/src/app/modules/home/components/widget/lib/entities-table-widget.component.ts
+++ b/ui-ngx/src/app/modules/home/components/widget/lib/entities-table-widget.component.ts
@@ -206,11 +206,8 @@ export class EntitiesTableWidgetComponent extends PageComponent implements OnIni
}
public onDataUpdated() {
- this.ngZone.run(() => {
- this.updateTitle(true);
- this.entityDatasource.dataUpdated();
- this.ctx.detectChanges();
- });
+ this.updateTitle(true);
+ this.entityDatasource.dataUpdated();
}
public pageLinkSortDirection(): SortDirection {
@@ -488,6 +485,10 @@ export class EntitiesTableWidgetComponent extends PageComponent implements OnIni
return column.def;
}
+ public trackByRowIndex(index: number) {
+ return index;
+ }
+
public headerStyle(key: EntityColumn): any {
const columnWidth = this.columnWidth[key.def];
return widthStyle(columnWidth);
@@ -529,7 +530,19 @@ export class EntitiesTableWidgetComponent extends PageComponent implements OnIni
} else {
content = this.defaultContent(key, contentInfo, value);
}
- return isDefined(content) ? this.domSanitizer.bypassSecurityTrustHtml(content) : '';
+
+ if (!isDefined(content)) {
+ return '';
+
+ } else {
+ switch (typeof content) {
+ case 'string':
+ return this.domSanitizer.bypassSecurityTrustHtml(content);
+ default:
+ return content;
+ }
+ }
+
} else {
return '';
}
diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/timeseries-table-widget.component.ts b/ui-ngx/src/app/modules/home/components/widget/lib/timeseries-table-widget.component.ts
index 28e6e58c25..e6cf7af811 100644
--- a/ui-ngx/src/app/modules/home/components/widget/lib/timeseries-table-widget.component.ts
+++ b/ui-ngx/src/app/modules/home/components/widget/lib/timeseries-table-widget.component.ts
@@ -40,7 +40,7 @@ import {
} from '@shared/models/widget.models';
import { UtilsService } from '@core/services/utils.service';
import { TranslateService } from '@ngx-translate/core';
-import { hashCode, isDefined, isNumber } from '@core/utils';
+import {hashCode, isDefined, isDefinedAndNotNull, isNumber} from '@core/utils';
import cssjs from '@core/css/css';
import { PageLink } from '@shared/models/page/page-link';
import { Direction, SortOrder, sortOrderFromString } from '@shared/models/page/sort-order';
@@ -197,11 +197,8 @@ export class TimeseriesTableWidgetComponent extends PageComponent implements OnI
}
public onDataUpdated() {
- this.ngZone.run(() => {
- this.sources.forEach((source) => {
- source.timeseriesDatasource.dataUpdated(this.data);
- });
- this.ctx.detectChanges();
+ this.sources.forEach((source) => {
+ source.timeseriesDatasource.dataUpdated(this.data);
});
}
@@ -410,7 +407,18 @@ export class TimeseriesTableWidgetComponent extends PageComponent implements OnI
const units = contentInfo.units || this.ctx.widgetConfig.units;
content = this.ctx.utils.formatValue(value, decimals, units, true);
}
- return isDefined(content) ? this.domSanitizer.bypassSecurityTrustHtml(content) : '';
+
+ if (!isDefined(content)) {
+ return '';
+
+ } else {
+ switch (typeof content) {
+ case 'string':
+ return this.domSanitizer.bypassSecurityTrustHtml(content);
+ default:
+ return content;
+ }
+ }
}
}
@@ -515,26 +523,22 @@ class TimeseriesDatasource implements DataSource {
row[d + 1] = cellData[1];
});
}
+
const rows: TimeseriesRow[] = [];
- for (const t of Object.keys(rowsMap)) {
- if (this.hideEmptyLines) {
- let hideLine = true;
- for (let c = 0; (c < data.length) && hideLine; c++) {
- if (rowsMap[t][c + 1]) {
- hideLine = false;
- }
- }
- if (!hideLine) {
- rows.push(rowsMap[t]);
- }
+
+ for (const value of Object.values(rowsMap)) {
+ this.hideEmptyLines = true;
+
+ if (this.hideEmptyLines && isDefinedAndNotNull(value[1])) {
+ rows.push(value);
} else {
- rows.push(rowsMap[t]);
+ rows.push(value);
}
}
+
return rows;
}
-
isEmpty(): Observable {
return this.rowsSubject.pipe(
map((rows) => !rows.length)