diff --git a/msa/tb-node/docker/Dockerfile b/msa/tb-node/docker/Dockerfile index 21babfdfbf..51618675bb 100644 --- a/msa/tb-node/docker/Dockerfile +++ b/msa/tb-node/docker/Dockerfile @@ -16,6 +16,8 @@ FROM thingsboard/openjdk11 +RUN echo 'networkaddress.cache.ttl=60' >> /etc/java-11-openjdk/security/java.security + COPY start-tb-node.sh ${pkg.name}.deb /tmp/ RUN chmod a+x /tmp/*.sh \ diff --git a/ui-ngx/src/app/core/api/data-aggregator.ts b/ui-ngx/src/app/core/api/data-aggregator.ts index 971f037282..300998548c 100644 --- a/ui-ngx/src/app/core/api/data-aggregator.ts +++ b/ui-ngx/src/app/core/api/data-aggregator.ts @@ -308,7 +308,7 @@ export class DataAggregator { } aggKeyData.delete(aggTimestamp); this.updatedData = true; - } else if (aggTimestamp < this.endTs) { + } else if (aggTimestamp < this.endTs || this.noAggregation) { const kvPair: [number, any] = [aggTimestamp, aggData.aggValue]; keyData.push(kvPair); } diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/markdown-widget.component.scss b/ui-ngx/src/app/modules/home/components/widget/lib/markdown-widget.component.scss index bea3ee1509..4ac6bf9095 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/markdown-widget.component.scss +++ b/ui-ngx/src/app/modules/home/components/widget/lib/markdown-widget.component.scss @@ -16,6 +16,7 @@ .tb-markdown-view { display: block; + height: 100%; ::ng-deep { h1 { font-size: 32px; diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/multiple-input-widget.component.html b/ui-ngx/src/app/modules/home/components/widget/lib/multiple-input-widget.component.html index 5dc5bc4be2..65db045157 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/multiple-input-widget.component.html +++ b/ui-ngx/src/app/modules/home/components/widget/lib/multiple-input-widget.component.html @@ -122,7 +122,7 @@
+ *ngIf="(!entityDetected || !isAllParametersValid) && datasourceDetected">
{{ 'widgets.input-widgets.no-entity-selected' | translate }}
diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/multiple-input-widget.component.ts b/ui-ngx/src/app/modules/home/components/widget/lib/multiple-input-widget.component.ts index 5ba5651511..def6404ffc 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/multiple-input-widget.component.ts +++ b/ui-ngx/src/app/modules/home/components/widget/lib/multiple-input-widget.component.ts @@ -117,6 +117,7 @@ export class MultipleInputWidgetComponent extends PageComponent implements OnIni resetButtonLabel: string; entityDetected = false; + datasourceDetected = false; isAllParametersValid = true; multipleInputFormGroup: FormGroup; @@ -203,7 +204,8 @@ export class MultipleInputWidgetComponent extends PageComponent implements OnIni } private updateDatasources() { - if (this.datasources && this.datasources.length) { + this.datasourceDetected = this.datasources?.length !== 0; + if (this.datasourceDetected) { this.entityDetected = true; let keyIndex = 0; this.datasources.forEach((datasource) => { diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/qrcode-widget.component.html b/ui-ngx/src/app/modules/home/components/widget/lib/qrcode-widget.component.html index 6423bf33ce..48f888340a 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/qrcode-widget.component.html +++ b/ui-ngx/src/app/modules/home/components/widget/lib/qrcode-widget.component.html @@ -17,6 +17,8 @@ -->
-
entity.no-data
-
widgets.invalid-qr-code-text
+
+
entity.no-data
+
widgets.invalid-qr-code-text
+
diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/qrcode-widget.component.ts b/ui-ngx/src/app/modules/home/components/widget/lib/qrcode-widget.component.ts index dff51a1378..a7c2c46911 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/qrcode-widget.component.ts +++ b/ui-ngx/src/app/modules/home/components/widget/lib/qrcode-widget.component.ts @@ -54,6 +54,7 @@ export class QrCodeWidgetComponent extends PageComponent implements OnInit, Afte qrCodeText: string; invalidQrCodeText = false; + datasourceDetected = false; private viewInited: boolean; private scheduleUpdateCanvas: boolean; @@ -95,6 +96,8 @@ export class QrCodeWidgetComponent extends PageComponent implements OnInit, Afte data: [] } ]; + } else { + this.datasourceDetected = false; } if (initialData) { const data = parseData(initialData); @@ -103,6 +106,7 @@ export class QrCodeWidgetComponent extends PageComponent implements OnInit, Afte safeExecute(this.qrCodeTextFunction, [dataSourceData]) : this.settings.qrCodeTextPattern; const replaceInfo = processPattern(pattern, dataSourceData); qrCodeText = fillPattern(pattern, replaceInfo, dataSourceData); + this.datasourceDetected = true; } this.updateQrCodeText(qrCodeText); } diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/rpc/switch.component.scss b/ui-ngx/src/app/modules/home/components/widget/lib/rpc/switch.component.scss index d5f5e2be56..293246c79e 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/rpc/switch.component.scss +++ b/ui-ngx/src/app/modules/home/components/widget/lib/rpc/switch.component.scss @@ -45,6 +45,7 @@ $error-height: 14px !default; font-weight: 500; color: #757575; white-space: nowrap; + z-index: 1; .off-label { color: #b7b5b5; @@ -86,6 +87,8 @@ $error-height: 14px !default; :host ::ng-deep { .tb-switch { .switch { + z-index: 1; + mat-slide-toggle { position: absolute; top: 0; 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 3f36769baf..94efa03663 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 @@ -19,7 +19,6 @@ import { Component, ElementRef, Input, - NgZone, OnInit, QueryList, ViewChild, @@ -59,7 +58,8 @@ import { getCellStyleInfo, getRowStyleInfo, RowStyleInfo, - TableWidgetDataKeySettings, TableWidgetSettings + TableWidgetDataKeySettings, + TableWidgetSettings } from '@home/components/widget/lib/table-widget.models'; import { Overlay } from '@angular/cdk/overlay'; import { SubscriptionEntityInfo } from '@core/api/widget-api.models'; @@ -151,7 +151,6 @@ export class TimeseriesTableWidgetComponent extends PageComponent implements OnI constructor(protected store: Store, private elementRef: ElementRef, - private ngZone: NgZone, private overlay: Overlay, private viewContainerRef: ViewContainerRef, private utils: UtilsService, @@ -199,6 +198,7 @@ export class TimeseriesTableWidgetComponent extends PageComponent implements OnI public onDataUpdated() { this.updateCurrentSourceData(); this.clearCache(); + this.ctx.detectChanges(); } private initialize() { @@ -291,7 +291,7 @@ export class TimeseriesTableWidgetComponent extends PageComponent implements OnI if (this.actionCellDescriptors.length) { source.displayedColumns.push('actions'); } - const tsDatasource = new TimeseriesDatasource(source, this.hideEmptyLines, this.dateFormatFilter, this.datePipe, this.ngZone); + const tsDatasource = new TimeseriesDatasource(source, this.hideEmptyLines, this.dateFormatFilter, this.datePipe); tsDatasource.dataUpdated(this.data); this.sources.push(source); } @@ -574,8 +574,7 @@ class TimeseriesDatasource implements DataSource { private source: TimeseriesTableSource, private hideEmptyLines: boolean, private dateFormatFilter: string, - private datePipe: DatePipe, - private ngZone: NgZone + private datePipe: DatePipe ) { this.source.timeseriesDatasource = this; } @@ -598,10 +597,8 @@ class TimeseriesDatasource implements DataSource { catchError(() => of(emptyPageData())), ).subscribe( (pageData) => { - this.ngZone.run(() => { - this.rowsSubject.next(pageData.data); - this.pageDataSubject.next(pageData); - }); + this.rowsSubject.next(pageData.data); + this.pageDataSubject.next(pageData); } ); }