Commit 73c4f51e047b90858c687d2c6e9f34a3f06070ae

Authored by Vladyslav_Prykhodko
1 parent abac3098

UI: Add lazy load qrcode library; added validation qr code text

@@ -16,6 +16,7 @@ @@ -16,6 +16,7 @@
16 16
17 --> 17 -->
18 <div fxLayout="column" fxLayoutAlign="center center" style="width: 100%; height: 100%;"> 18 <div fxLayout="column" fxLayoutAlign="center center" style="width: 100%; height: 100%;">
19 - <canvas fxFlex #canvas [ngStyle]="{display: qrCodeText ? 'block' : 'none'}"></canvas>  
20 - <div *ngIf="!qrCodeText" translate>entity.no-data</div> 19 + <canvas fxFlex #canvas [ngStyle]="{display: qrCodeText && !invalidQrCodeText ? 'block' : 'none'}"></canvas>
  20 + <div *ngIf="!qrCodeText && !invalidQrCodeText" translate>entity.no-data</div>
  21 + <div *ngIf="invalidQrCodeText" translate>widgets.invalid-qr-code-text</div>
21 </div> 22 </div>
@@ -19,7 +19,6 @@ import { PageComponent } from '@shared/components/page.component'; @@ -19,7 +19,6 @@ import { PageComponent } from '@shared/components/page.component';
19 import { WidgetContext } from '@home/models/widget-component.models'; 19 import { WidgetContext } from '@home/models/widget-component.models';
20 import { Store } from '@ngrx/store'; 20 import { Store } from '@ngrx/store';
21 import { AppState } from '@core/core.state'; 21 import { AppState } from '@core/core.state';
22 -import QRCode from 'qrcode';  
23 import { 22 import {
24 fillPattern, 23 fillPattern,
25 parseData, 24 parseData,
@@ -30,6 +29,7 @@ import { @@ -30,6 +29,7 @@ import {
30 import { FormattedData } from '@home/components/widget/lib/maps/map-models'; 29 import { FormattedData } from '@home/components/widget/lib/maps/map-models';
31 import { DatasourceData } from '@shared/models/widget.models'; 30 import { DatasourceData } from '@shared/models/widget.models';
32 import { DataKeyType } from '@shared/models/telemetry/telemetry.models'; 31 import { DataKeyType } from '@shared/models/telemetry/telemetry.models';
  32 +import { isString } from '@core/utils';
33 33
34 interface QrCodeWidgetSettings { 34 interface QrCodeWidgetSettings {
35 qrCodeTextPattern: string; 35 qrCodeTextPattern: string;
@@ -53,6 +53,7 @@ export class QrCodeWidgetComponent extends PageComponent implements OnInit, Afte @@ -53,6 +53,7 @@ export class QrCodeWidgetComponent extends PageComponent implements OnInit, Afte
53 ctx: WidgetContext; 53 ctx: WidgetContext;
54 54
55 qrCodeText: string; 55 qrCodeText: string;
  56 + invalidQrCodeText = false;
56 57
57 private viewInited: boolean; 58 private viewInited: boolean;
58 private scheduleUpdateCanvas: boolean; 59 private scheduleUpdateCanvas: boolean;
@@ -109,8 +110,14 @@ export class QrCodeWidgetComponent extends PageComponent implements OnInit, Afte @@ -109,8 +110,14 @@ export class QrCodeWidgetComponent extends PageComponent implements OnInit, Afte
109 private updateQrCodeText(newQrCodeText: string): void { 110 private updateQrCodeText(newQrCodeText: string): void {
110 if (this.qrCodeText !== newQrCodeText) { 111 if (this.qrCodeText !== newQrCodeText) {
111 this.qrCodeText = newQrCodeText; 112 this.qrCodeText = newQrCodeText;
112 - if (this.qrCodeText) {  
113 - this.updateCanvas(); 113 + if (isString(newQrCodeText)) {
  114 + this.invalidQrCodeText = false;
  115 + if (this.qrCodeText) {
  116 + this.updateCanvas();
  117 + }
  118 + this.cd.detectChanges();
  119 + } else {
  120 + this.invalidQrCodeText = true;
114 } 121 }
115 this.cd.detectChanges(); 122 this.cd.detectChanges();
116 } 123 }
@@ -118,9 +125,11 @@ export class QrCodeWidgetComponent extends PageComponent implements OnInit, Afte @@ -118,9 +125,11 @@ export class QrCodeWidgetComponent extends PageComponent implements OnInit, Afte
118 125
119 private updateCanvas() { 126 private updateCanvas() {
120 if (this.viewInited) { 127 if (this.viewInited) {
121 - QRCode.toCanvas(this.canvasRef.nativeElement, this.qrCodeText);  
122 - this.canvasRef.nativeElement.style.width = 'auto';  
123 - this.canvasRef.nativeElement.style.height = 'auto'; 128 + import('qrcode').then((QRCode) => {
  129 + QRCode.toCanvas(this.canvasRef.nativeElement, this.qrCodeText);
  130 + this.canvasRef.nativeElement.style.width = 'auto';
  131 + this.canvasRef.nativeElement.style.height = 'auto';
  132 + });
124 } else { 133 } else {
125 this.scheduleUpdateCanvas = true; 134 this.scheduleUpdateCanvas = true;
126 } 135 }
@@ -3123,7 +3123,8 @@ @@ -3123,7 +3123,8 @@
3123 "update-attribute": "Update attribute", 3123 "update-attribute": "Update attribute",
3124 "update-timeseries": "Update timeseries", 3124 "update-timeseries": "Update timeseries",
3125 "value": "Value" 3125 "value": "Value"
3126 - } 3126 + },
  3127 + "invalid-qr-code-text": "Invalid input text for QR code. Input should have a string type"
3127 }, 3128 },
3128 "icon": { 3129 "icon": {
3129 "icon": "Icon", 3130 "icon": "Icon",