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 bebc9e09a4..6423bf33ce 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 @@ -16,6 +16,7 @@ -->
- -
entity.no-data
+ +
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 ba8ef3b3e8..6c1f148de5 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 @@ -19,7 +19,6 @@ import { PageComponent } from '@shared/components/page.component'; import { WidgetContext } from '@home/models/widget-component.models'; import { Store } from '@ngrx/store'; import { AppState } from '@core/core.state'; -import QRCode from 'qrcode'; import { fillPattern, parseData, @@ -30,6 +29,7 @@ import { import { FormattedData } from '@home/components/widget/lib/maps/map-models'; import { DatasourceData } from '@shared/models/widget.models'; import { DataKeyType } from '@shared/models/telemetry/telemetry.models'; +import { isNumber, isObject } from '@core/utils'; interface QrCodeWidgetSettings { qrCodeTextPattern: string; @@ -53,6 +53,7 @@ export class QrCodeWidgetComponent extends PageComponent implements OnInit, Afte ctx: WidgetContext; qrCodeText: string; + invalidQrCodeText = false; private viewInited: boolean; private scheduleUpdateCanvas: boolean; @@ -109,8 +110,13 @@ export class QrCodeWidgetComponent extends PageComponent implements OnInit, Afte private updateQrCodeText(newQrCodeText: string): void { if (this.qrCodeText !== newQrCodeText) { this.qrCodeText = newQrCodeText; - if (this.qrCodeText) { - this.updateCanvas(); + if (!(isObject(newQrCodeText) || isNumber(newQrCodeText))) { + this.invalidQrCodeText = false; + if (this.qrCodeText) { + this.updateCanvas(); + } + } else { + this.invalidQrCodeText = true; } this.cd.detectChanges(); } @@ -118,9 +124,11 @@ export class QrCodeWidgetComponent extends PageComponent implements OnInit, Afte private updateCanvas() { if (this.viewInited) { - QRCode.toCanvas(this.canvasRef.nativeElement, this.qrCodeText); - this.canvasRef.nativeElement.style.width = 'auto'; - this.canvasRef.nativeElement.style.height = 'auto'; + import('qrcode').then((QRCode) => { + QRCode.toCanvas(this.canvasRef.nativeElement, this.qrCodeText); + this.canvasRef.nativeElement.style.width = 'auto'; + this.canvasRef.nativeElement.style.height = 'auto'; + }); } else { this.scheduleUpdateCanvas = true; } diff --git a/ui-ngx/src/assets/locale/locale.constant-en_US.json b/ui-ngx/src/assets/locale/locale.constant-en_US.json index 5ba2d2c808..c954e03274 100644 --- a/ui-ngx/src/assets/locale/locale.constant-en_US.json +++ b/ui-ngx/src/assets/locale/locale.constant-en_US.json @@ -3123,7 +3123,8 @@ "update-attribute": "Update attribute", "update-timeseries": "Update timeseries", "value": "Value" - } + }, + "invalid-qr-code-text": "Invalid input text for QR code. Input should have a string type" }, "icon": { "icon": "Icon",