2024-06-14 12:55:27 +03:00
|
|
|
///
|
|
|
|
|
/// 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.
|
|
|
|
|
///
|
|
|
|
|
|
2024-06-17 11:09:47 +03:00
|
|
|
import {
|
|
|
|
|
inject,
|
|
|
|
|
KeyValueChangeRecord,
|
|
|
|
|
KeyValueChanges,
|
|
|
|
|
KeyValueDiffer,
|
|
|
|
|
KeyValueDiffers,
|
|
|
|
|
Pipe,
|
|
|
|
|
PipeTransform
|
|
|
|
|
} from '@angular/core';
|
2024-07-08 11:54:49 +03:00
|
|
|
import { KeyValue } from '@angular/common';
|
|
|
|
|
import { isDefinedAndNotNull } from '@core/utils';
|
2024-06-14 12:48:47 +03:00
|
|
|
|
|
|
|
|
@Pipe({
|
2024-06-14 17:44:29 +03:00
|
|
|
name: 'keyValueIsNotEmpty',
|
2024-06-17 11:09:47 +03:00
|
|
|
pure: false,
|
|
|
|
|
standalone: true,
|
2024-06-14 12:48:47 +03:00
|
|
|
})
|
2024-06-17 11:09:47 +03:00
|
|
|
export class KeyValueIsNotEmptyPipe implements PipeTransform {
|
|
|
|
|
private differs: KeyValueDiffers = inject(KeyValueDiffers);
|
|
|
|
|
private differ!: KeyValueDiffer<string, unknown>;
|
|
|
|
|
private keyValues: Array<KeyValue<string, unknown>> = [];
|
2024-06-14 17:44:29 +03:00
|
|
|
|
2024-06-17 11:09:47 +03:00
|
|
|
// 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);
|
2024-06-14 17:44:29 +03:00
|
|
|
|
|
|
|
|
if (differChanges) {
|
2024-06-17 11:09:47 +03:00
|
|
|
this.keyValues = [];
|
|
|
|
|
differChanges.forEachItem((r: KeyValueChangeRecord<string, unknown>) => {
|
2024-06-17 14:43:02 +03:00
|
|
|
if (isDefinedAndNotNull(r.currentValue)) {
|
2024-06-17 11:09:47 +03:00
|
|
|
this.keyValues.push(this.makeKeyValuePair(r.key, r.currentValue!));
|
|
|
|
|
}
|
|
|
|
|
});
|
2024-06-14 17:44:29 +03:00
|
|
|
}
|
2024-06-17 11:09:47 +03:00
|
|
|
|
|
|
|
|
return this.keyValues;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private makeKeyValuePair(key: string, value: unknown): KeyValue<string, unknown> {
|
2024-07-10 14:59:29 +03:00
|
|
|
return {key, value};
|
2024-06-14 12:48:47 +03:00
|
|
|
}
|
|
|
|
|
}
|