Commit ae996e88d55be452d4eeb1ee193dbbfc971bdadf
Committed by
GitHub
Merge pull request #4966 from vvlladd28/improvement/qr-code/load
UI: Add lazy load qrcode library; added validation qr code text
Showing
3 changed files
with
19 additions
and
9 deletions
@@ -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 { isNumber, isObject } 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,13 @@ export class QrCodeWidgetComponent extends PageComponent implements OnInit, Afte | @@ -109,8 +110,13 @@ 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 (!(isObject(newQrCodeText) || isNumber(newQrCodeText))) { |
114 | + this.invalidQrCodeText = false; | ||
115 | + if (this.qrCodeText) { | ||
116 | + this.updateCanvas(); | ||
117 | + } | ||
118 | + } else { | ||
119 | + this.invalidQrCodeText = true; | ||
114 | } | 120 | } |
115 | this.cd.detectChanges(); | 121 | this.cd.detectChanges(); |
116 | } | 122 | } |
@@ -118,9 +124,11 @@ export class QrCodeWidgetComponent extends PageComponent implements OnInit, Afte | @@ -118,9 +124,11 @@ export class QrCodeWidgetComponent extends PageComponent implements OnInit, Afte | ||
118 | 124 | ||
119 | private updateCanvas() { | 125 | private updateCanvas() { |
120 | if (this.viewInited) { | 126 | 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'; | 127 | + import('qrcode').then((QRCode) => { |
128 | + QRCode.toCanvas(this.canvasRef.nativeElement, this.qrCodeText); | ||
129 | + this.canvasRef.nativeElement.style.width = 'auto'; | ||
130 | + this.canvasRef.nativeElement.style.height = 'auto'; | ||
131 | + }); | ||
124 | } else { | 132 | } else { |
125 | this.scheduleUpdateCanvas = true; | 133 | this.scheduleUpdateCanvas = true; |
126 | } | 134 | } |
@@ -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", |