3 changed files with 71 additions and 2 deletions
@ -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<string, unknown>; |
||||
|
private keyValues: Array<KeyValue<string, unknown>> = []; |
||||
|
|
||||
|
// 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<string, unknown>, |
||||
|
): Array<KeyValue<string, unknown>> { |
||||
|
if (!input || (!(input instanceof Map) && typeof input !== 'object')) { |
||||
|
return null; |
||||
|
} |
||||
|
|
||||
|
this.differ ??= this.differs.find(input).create(); |
||||
|
|
||||
|
const differChanges: KeyValueChanges<string, unknown> | null = this.differ.diff(input); |
||||
|
|
||||
|
if (differChanges) { |
||||
|
this.keyValues = []; |
||||
|
differChanges.forEachItem((r: KeyValueChangeRecord<string, unknown>) => { |
||||
|
if (isDefinedAndNotNull(r.currentValue)) { |
||||
|
this.keyValues.push(this.makeKeyValuePair(r.key, r.currentValue!)); |
||||
|
} |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
return this.keyValues; |
||||
|
} |
||||
|
|
||||
|
private makeKeyValuePair(key: string, value: unknown): KeyValue<string, unknown> { |
||||
|
return {key: key, value: value}; |
||||
|
} |
||||
|
} |
||||
Loading…
Reference in new issue