diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-service-rpc-connector-templates.component.html b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-service-rpc-connector-templates.component.html
index 2fdfcfbf0a..ee644c54c7 100644
--- a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-service-rpc-connector-templates.component.html
+++ b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-service-rpc-connector-templates.component.html
@@ -32,7 +32,7 @@
diff --git a/ui-ngx/src/app/modules/home/components/widget/widget-components.module.ts b/ui-ngx/src/app/modules/home/components/widget/widget-components.module.ts
index 04f3e5b996..b391f3367f 100644
--- a/ui-ngx/src/app/modules/home/components/widget/widget-components.module.ts
+++ b/ui-ngx/src/app/modules/home/components/widget/widget-components.module.ts
@@ -100,6 +100,7 @@ import { BarChartWidgetComponent } from '@home/components/widget/lib/chart/bar-c
import { PolarAreaWidgetComponent } from '@home/components/widget/lib/chart/polar-area-widget.component';
import { RadarChartWidgetComponent } from '@home/components/widget/lib/chart/radar-chart-widget.component';
import { MobileAppQrcodeWidgetComponent } from '@home/components/widget/lib/mobile-app-qrcode-widget.component';
+import { KeyValueIsNotEmptyPipe } from '@shared/pipe/key-value-not-empty.pipe';
import { LabelCardWidgetComponent } from '@home/components/widget/lib/cards/label-card-widget.component';
import { LabelValueCardWidgetComponent } from '@home/components/widget/lib/cards/label-value-card-widget.component';
import {
@@ -181,7 +182,8 @@ import {
RpcWidgetsModule,
HomePageWidgetsModule,
SharedHomeComponentsModule,
- RestConnectorSecurityComponent
+ RestConnectorSecurityComponent,
+ KeyValueIsNotEmptyPipe
],
exports: [
EntitiesTableWidgetComponent,
diff --git a/ui-ngx/src/app/shared/pipe/key-value-not-empty.pipe.ts b/ui-ngx/src/app/shared/pipe/key-value-not-empty.pipe.ts
new file mode 100644
index 0000000000..94eeced50e
--- /dev/null
+++ b/ui-ngx/src/app/shared/pipe/key-value-not-empty.pipe.ts
@@ -0,0 +1,67 @@
+///
+/// Copyright © 2016-2024 The Thingsboard Authors
+///
+/// Licensed under the Apache License, Version 2.0 (the "License");
+/// you may not use this file except in compliance with the License.
+/// You may obtain a copy of the License at
+///
+/// http://www.apache.org/licenses/LICENSE-2.0
+///
+/// Unless required by applicable law or agreed to in writing, software
+/// distributed under the License is distributed on an "AS IS" BASIS,
+/// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+/// See the License for the specific language governing permissions and
+/// limitations under the License.
+///
+
+import {
+ inject,
+ KeyValueChangeRecord,
+ KeyValueChanges,
+ KeyValueDiffer,
+ KeyValueDiffers,
+ Pipe,
+ PipeTransform
+} from '@angular/core';
+import { KeyValue } from '@angular/common';
+import { isDefinedAndNotNull } from '@core/utils';
+
+@Pipe({
+ name: 'keyValueIsNotEmpty',
+ pure: false,
+ standalone: true,
+})
+export class KeyValueIsNotEmptyPipe implements PipeTransform {
+ private differs: KeyValueDiffers = inject(KeyValueDiffers);
+ private differ!: KeyValueDiffer;
+ private keyValues: Array> = [];
+
+ // This is a custom implementation of angular keyvalue pipe
+ // https://github.com/angular/angular/blob/main/packages/common/src/pipes/keyvalue_pipe.ts
+ transform(
+ input: Record,
+ ): Array> {
+ if (!input || (!(input instanceof Map) && typeof input !== 'object')) {
+ return null;
+ }
+
+ this.differ ??= this.differs.find(input).create();
+
+ const differChanges: KeyValueChanges | null = this.differ.diff(input);
+
+ if (differChanges) {
+ this.keyValues = [];
+ differChanges.forEachItem((r: KeyValueChangeRecord) => {
+ if (isDefinedAndNotNull(r.currentValue)) {
+ this.keyValues.push(this.makeKeyValuePair(r.key, r.currentValue!));
+ }
+ });
+ }
+
+ return this.keyValues;
+ }
+
+ private makeKeyValuePair(key: string, value: unknown): KeyValue {
+ return {key: key, value: value};
+ }
+}