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",