Browse Source

Merge with master

pull/5268/head
Andrii Shvaika 5 years ago
parent
commit
cc866b5038
  1. 2
      msa/tb-node/docker/Dockerfile
  2. 2
      ui-ngx/src/app/core/api/data-aggregator.ts
  3. 1
      ui-ngx/src/app/modules/home/components/widget/lib/markdown-widget.component.scss
  4. 2
      ui-ngx/src/app/modules/home/components/widget/lib/multiple-input-widget.component.html
  5. 4
      ui-ngx/src/app/modules/home/components/widget/lib/multiple-input-widget.component.ts
  6. 6
      ui-ngx/src/app/modules/home/components/widget/lib/qrcode-widget.component.html
  7. 4
      ui-ngx/src/app/modules/home/components/widget/lib/qrcode-widget.component.ts
  8. 3
      ui-ngx/src/app/modules/home/components/widget/lib/rpc/switch.component.scss
  9. 17
      ui-ngx/src/app/modules/home/components/widget/lib/timeseries-table-widget.component.ts

2
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 \

2
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);
}

1
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;

2
ui-ngx/src/app/modules/home/components/widget/lib/multiple-input-widget.component.html

@ -122,7 +122,7 @@
</div>
</div>
<div class="tb-multiple-input__errors" fxLayout="column" fxLayoutAlign="center center" style="height: 100%;"
*ngIf="!entityDetected || !isAllParametersValid">
*ngIf="(!entityDetected || !isAllParametersValid) && datasourceDetected">
<div style="text-align: center; font-size: 18px; color: #a0a0a0;" [fxHide]="entityDetected">
{{ 'widgets.input-widgets.no-entity-selected' | translate }}
</div>

4
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) => {

6
ui-ngx/src/app/modules/home/components/widget/lib/qrcode-widget.component.html

@ -17,6 +17,8 @@
-->
<div fxLayout="column" fxLayoutAlign="center center" style="width: 100%; height: 100%;">
<canvas fxFlex #canvas [ngStyle]="{display: qrCodeText && !invalidQrCodeText ? 'block' : 'none'}"></canvas>
<div *ngIf="!qrCodeText && !invalidQrCodeText" translate>entity.no-data</div>
<div *ngIf="invalidQrCodeText" translate>widgets.invalid-qr-code-text</div>
<div *ngIf="datasourceDetected">
<div *ngIf="!qrCodeText && !invalidQrCodeText" style="text-align: center" translate>entity.no-data</div>
<div *ngIf="invalidQrCodeText" style="text-align: center" translate>widgets.invalid-qr-code-text</div>
</div>
</div>

4
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);
}

3
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;

17
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<AppState>,
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<TimeseriesRow> {
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<TimeseriesRow> {
catchError(() => of(emptyPageData<TimeseriesRow>())),
).subscribe(
(pageData) => {
this.ngZone.run(() => {
this.rowsSubject.next(pageData.data);
this.pageDataSubject.next(pageData);
});
this.rowsSubject.next(pageData.data);
this.pageDataSubject.next(pageData);
}
);
}

Loading…
Cancel
Save