Merge pull request #4966 from vvlladd28/improvement/qr-code/load

UI: Add lazy load qrcode library; added validation qr code text
This commit is contained in:
Igor Kulikov 2021-07-23 16:30:23 +03:00 committed by GitHub
commit ae996e88d5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 19 additions and 9 deletions

View File

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

View File

@ -19,7 +19,6 @@ import { PageComponent } from '@shared/components/page.component';
import { WidgetContext } from '@home/models/widget-component.models'; import { WidgetContext } from '@home/models/widget-component.models';
import { Store } from '@ngrx/store'; import { Store } from '@ngrx/store';
import { AppState } from '@core/core.state'; import { AppState } from '@core/core.state';
import QRCode from 'qrcode';
import { import {
fillPattern, fillPattern,
parseData, parseData,
@ -30,6 +29,7 @@ import {
import { FormattedData } from '@home/components/widget/lib/maps/map-models'; import { FormattedData } from '@home/components/widget/lib/maps/map-models';
import { DatasourceData } from '@shared/models/widget.models'; import { DatasourceData } from '@shared/models/widget.models';
import { DataKeyType } from '@shared/models/telemetry/telemetry.models'; import { DataKeyType } from '@shared/models/telemetry/telemetry.models';
import { isNumber, isObject } from '@core/utils';
interface QrCodeWidgetSettings { interface QrCodeWidgetSettings {
qrCodeTextPattern: string; qrCodeTextPattern: string;
@ -53,6 +53,7 @@ export class QrCodeWidgetComponent extends PageComponent implements OnInit, Afte
ctx: WidgetContext; ctx: WidgetContext;
qrCodeText: string; qrCodeText: string;
invalidQrCodeText = false;
private viewInited: boolean; private viewInited: boolean;
private scheduleUpdateCanvas: boolean; private scheduleUpdateCanvas: boolean;
@ -109,18 +110,25 @@ export class QrCodeWidgetComponent extends PageComponent implements OnInit, Afte
private updateQrCodeText(newQrCodeText: string): void { private updateQrCodeText(newQrCodeText: string): void {
if (this.qrCodeText !== newQrCodeText) { if (this.qrCodeText !== newQrCodeText) {
this.qrCodeText = newQrCodeText; this.qrCodeText = newQrCodeText;
if (!(isObject(newQrCodeText) || isNumber(newQrCodeText))) {
this.invalidQrCodeText = false;
if (this.qrCodeText) { if (this.qrCodeText) {
this.updateCanvas(); this.updateCanvas();
} }
} else {
this.invalidQrCodeText = true;
}
this.cd.detectChanges(); this.cd.detectChanges();
} }
} }
private updateCanvas() { private updateCanvas() {
if (this.viewInited) { if (this.viewInited) {
import('qrcode').then((QRCode) => {
QRCode.toCanvas(this.canvasRef.nativeElement, this.qrCodeText); QRCode.toCanvas(this.canvasRef.nativeElement, this.qrCodeText);
this.canvasRef.nativeElement.style.width = 'auto'; this.canvasRef.nativeElement.style.width = 'auto';
this.canvasRef.nativeElement.style.height = 'auto'; this.canvasRef.nativeElement.style.height = 'auto';
});
} else { } else {
this.scheduleUpdateCanvas = true; this.scheduleUpdateCanvas = true;
} }

View File

@ -3123,7 +3123,8 @@
"update-attribute": "Update attribute", "update-attribute": "Update attribute",
"update-timeseries": "Update timeseries", "update-timeseries": "Update timeseries",
"value": "Value" "value": "Value"
} },
"invalid-qr-code-text": "Invalid input text for QR code. Input should have a string type"
}, },
"icon": { "icon": {
"icon": "Icon", "icon": "Icon",