/// /// 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 { KeyValueChanges, KeyValueDiffer, KeyValueDiffers, Pipe, PipeTransform } from '@angular/core'; import { KeyValue, KeyValuePipe } from "@angular/common"; @Pipe({ name: 'keyValueIsNotEmpty', }) export class KeyValueIsNotEmptyPipe extends KeyValuePipe implements PipeTransform { private difference!: KeyValueDiffer; constructor(private readonly keyValueDiffers: KeyValueDiffers) { super(keyValueDiffers); } transform( input: Record, compareFn?: (a: KeyValue, b: KeyValue) => number ): KeyValue[] & null { super.transform(input, compareFn); this.difference ??= this.keyValueDiffers.find(input).create(); const differChanges: KeyValueChanges | null = this.difference.diff(input as any); if (differChanges) { console.log(differChanges) const filteredEntries = [...Object.entries(input)] .filter(([_, value]) => value !== null && value !== undefined); return super.transform(new Map(filteredEntries), compareFn) as KeyValue[] & null; } } }