@c8y/ngx-components
Version:
Angular modules for Cumulocity IoT applications
71 lines • 11.9 kB
JavaScript
import { Injectable } from '@angular/core';
import { pick } from 'lodash-es';
import { map } from 'rxjs/operators';
import { DynamicManagedObjectResolver } from './managedObject-resolver';
import * as i0 from "@angular/core";
import * as i1 from "./managedObject-resolver";
/**
* A DynamicDetailsResolver responsible to resolve configured datapoints for dynamic components.
* This service implements bulk resolving and uses the DynamicManagedObjectResolver in the background.
* It will update the datapoint details with the current values from the datapoint library and
* also updates the target of the datapoint in case e.g. the name changed.
*/
export class DynamicDatapointsResolver {
constructor(moResolver) {
this.moResolver = moResolver;
}
resolve(config, attribute, bulkRequestId) {
const datapoints = config[attribute];
if (!datapoints || !Array.isArray(datapoints) || !datapoints.length) {
return [];
}
const templateIds = datapoints.filter(dp => !!dp.__template).map(dp => `${dp.__template}`);
const targetIds = datapoints.filter(dp => !!dp.__target?.id).map(dp => `${dp.__target?.id}`);
const moIds = [...templateIds, ...targetIds];
this.moResolver.addIdsToBeLoaded(bulkRequestId, ...moIds);
return this.moResolver
.getResult$(bulkRequestId)
.pipe(map(({ result: updatedMos, errors: _errors }) => this.assignUpdatedValues(datapoints, updatedMos)));
}
serialize(config, attribute) {
const valueBehindAttribute = config[attribute];
if (!Array.isArray(valueBehindAttribute)) {
return config[attribute];
}
valueBehindAttribute.forEach(value => {
if (value.__target) {
value.__target = pick(value.__target, ['id', 'name']);
}
});
return valueBehindAttribute;
}
assignUpdatedValues(oldDatapoints, currentManagedObjects) {
return oldDatapoints.map(dp => this.assignUpdatedValuesToSingleDatapoint(dp, currentManagedObjects));
}
assignUpdatedValuesToSingleDatapoint(datapoint, currentManagedObjects) {
if (datapoint.__template) {
const foundUpdatedDp = currentManagedObjects.find(mo => mo.id === datapoint.__template || mo.id === `${datapoint.__template}`);
if (!foundUpdatedDp) {
return datapoint;
}
const updatedDatapoint = Object.assign({}, foundUpdatedDp.c8y_Kpi, {
__template: foundUpdatedDp.id
});
Object.assign(datapoint, updatedDatapoint);
}
if (datapoint.__target?.id) {
const foundUpdatedTarget = currentManagedObjects.find(mo => mo.id === datapoint.__target?.id || mo.id === `${datapoint.__target?.id}`);
if (foundUpdatedTarget) {
Object.assign(datapoint.__target, foundUpdatedTarget);
}
}
return datapoint;
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DynamicDatapointsResolver, deps: [{ token: i1.DynamicManagedObjectResolver }], target: i0.ɵɵFactoryTarget.Injectable }); }
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DynamicDatapointsResolver, providedIn: 'root' }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DynamicDatapointsResolver, decorators: [{
type: Injectable,
args: [{ providedIn: 'root' }]
}], ctorParameters: () => [{ type: i1.DynamicManagedObjectResolver }] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXBvaW50cy1yZXNvbHZlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvcmUvZHluYW1pYy1jb21wb25lbnQvZGF0YXBvaW50cy1yZXNvbHZlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFakMsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXJDLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLDBCQUEwQixDQUFDOzs7QUFFeEU7Ozs7O0dBS0c7QUFFSCxNQUFNLE9BQU8seUJBQXlCO0lBQ3BDLFlBQXNCLFVBQXdDO1FBQXhDLGVBQVUsR0FBVixVQUFVLENBQThCO0lBQUcsQ0FBQztJQUVsRSxPQUFPLENBQ0wsTUFBVyxFQUNYLFNBQWlCLEVBQ2pCLGFBQXFCO1FBRXJCLE1BQU0sVUFBVSxHQUFVLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM1QyxJQUFJLENBQUMsVUFBVSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNwRSxPQUFPLEVBQUUsQ0FBQztRQUNaLENBQUM7UUFFRCxNQUFNLFdBQVcsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO1FBQzNGLE1BQU0sU0FBUyxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FB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LENBQUM7UUFDRCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDOytHQTdFVSx5QkFBeUI7bUhBQXpCLHlCQUF5QixjQURaLE1BQU07OzRGQUNuQix5QkFBeUI7a0JBRHJDLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSU1hbmFnZWRPYmplY3QgfSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQgeyBwaWNrIH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IER5bmFtaWNEZXRhaWxzUmVzb2x2ZXIgfSBmcm9tICcuL2R5bmFtaWMtZGV0YWlscy1yZXNvbHZlcic7XG5pbXBvcnQgeyBEeW5hbWljTWFuYWdlZE9iamVjdFJlc29sdmVyIH0gZnJvbSAnLi9tYW5hZ2VkT2JqZWN0LXJlc29sdmVyJztcblxuLyoqXG4gKiBBIER5bmFtaWNEZXRhaWxzUmVzb2x2ZXIgcmVzcG9uc2libGUgdG8gcmVzb2x2ZSBjb25maWd1cmVkIGRhdGFwb2ludHMgZm9yIGR5bmFtaWMgY29tcG9uZW50cy5cbiAqIFRoaXMgc2VydmljZSBpbXBsZW1lbnRzIGJ1bGsgcmVzb2x2aW5nIGFuZCB1c2VzIHRoZSBEeW5hbWljTWFuYWdlZE9iamVjdFJlc29sdmVyIGluIHRoZSBiYWNrZ3JvdW5kLlxuICogSXQgd2lsbCB1cGRhdGUgdGhlIGRhdGFwb2ludCBkZXRhaWxzIHdpdGggdGhlIGN1cnJlbnQgdmFsdWVzIGZyb20gdGhlIGRhdGFwb2ludCBsaWJyYXJ5IGFuZFxuICogYWxzbyB1cGRhdGVzIHRoZSB0YXJnZXQgb2YgdGhlIGRhdGFwb2ludCBpbiBjYXNlIGUuZy4gdGhlIG5hbWUgY2hhbmdlZC5cbiAqL1xuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBEeW5hbWljRGF0YXBvaW50c1Jlc29sdmVyIGltcGxlbWVudHMgRHluYW1pY0RldGFpbHNSZXNvbHZlciB7XG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBtb1Jlc29sdmVyOiBEeW5hbWljTWFuYWdlZE9iamVjdFJlc29sdmVyKSB7fVxuXG4gIHJlc29sdmUoXG4gICAgY29uZmlnOiBhbnksXG4gICAgYXR0cmlidXRlOiBzdHJpbmcsXG4gICAgYnVsa1JlcXVlc3RJZDogbnVtYmVyXG4gICk6IGFueVtdIHwgUHJvbWlzZTxhbnlbXT4gfCBPYnNlcnZhYmxlPGFueVtdPiB7XG4gICAgY29uc3QgZGF0YXBvaW50czogYW55W10gPSBjb25maWdbYXR0cmlidXRlXTtcbiAgICBpZiAoIWRhdGFwb2ludHMgfHwgIUFycmF5LmlzQXJyYXkoZGF0YXBvaW50cykgfHwgIWRhdGFwb2ludHMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgY29uc3QgdGVtcGxhdGVJZHMgPSBkYXRhcG9pbnRzLmZpbHRlcihkcCA9PiAhIWRwLl9fdGVtcGxhdGUpLm1hcChkcCA9PiBgJHtkcC5fX3RlbXBsYXRlfWApO1xuICAgIGNvbnN0IHRhcmdldElkcyA9IGRhdGFwb2ludHMuZmlsdGVyKGRwID0+ICEhZHAuX190YXJnZXQ/LmlkKS5tYXAoZHAgPT4gYCR7ZHAuX190YXJnZXQ/LmlkfWApO1xuICAgIGNvbnN0IG1vSWRzID0gWy4uLnRlbXBsYXRlSWRzLCAuLi50YXJnZXRJZHNdO1xuXG4gICAgdGhpcy5tb1Jlc29sdmVyLmFkZElkc1RvQmVMb2FkZWQoYnVsa1JlcXVlc3RJZCwgLi4ubW9JZHMpO1xuXG4gICAgcmV0dXJuIHRoaXMubW9SZXNvbHZlclxuICAgICAgLmdldFJlc3VsdCQoYnVsa1JlcXVlc3RJZClcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKHsgcmVzdWx0OiB1cGRhdGVkTW9zLCBlcnJvcnM6IF9lcnJvcnMgfSkgPT5cbiAgICAgICAgICB0aGlzLmFzc2lnblVwZGF0ZWRWYWx1ZXMoZGF0YXBvaW50cywgdXBkYXRlZE1vcylcbiAgICAgICAgKVxuICAgICAgKTtcbiAgfVxuXG4gIHNlcmlhbGl6ZShjb25maWc6IGFueSwgYXR0cmlidXRlOiBzdHJpbmcpIHtcbiAgICBjb25zdCB2YWx1ZUJlaGluZEF0dHJpYnV0ZTogYW55W10gPSBjb25maWdbYXR0cmlidXRlXTtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWVCZWhpbmRBdHRyaWJ1dGUpKSB7XG4gICAgICByZXR1cm4gY29uZmlnW2F0dHJpYnV0ZV07XG4gICAgfVxuICAgIHZhbHVlQmVoaW5kQXR0cmlidXRlLmZvckVhY2godmFsdWUgPT4ge1xuICAgICAgaWYgKHZhbHVlLl9fdGFyZ2V0KSB7XG4gICAgICAgIHZhbHVlLl9fdGFyZ2V0ID0gcGljayh2YWx1ZS5fX3RhcmdldCwgWydpZCcsICduYW1lJ10pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiB2YWx1ZUJlaGluZEF0dHJpYnV0ZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3NpZ25VcGRhdGVkVmFsdWVzKFxuICAgIG9sZERhdGFwb2ludHM6IGFueVtdLFxuICAgIGN1cnJlbnRNYW5hZ2VkT2JqZWN0czogSU1hbmFnZWRPYmplY3RbXVxuICApOiBhbnlbXSB7XG4gICAgcmV0dXJuIG9sZERhdGFwb2ludHMubWFwKGRwID0+XG4gICAgICB0aGlzLmFzc2lnblVwZGF0ZWRWYWx1ZXNUb1NpbmdsZURhdGFwb2ludChkcCwgY3VycmVudE1hbmFnZWRPYmplY3RzKVxuICAgICk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXNzaWduVXBkYXRlZFZhbHVlc1RvU2luZ2xlRGF0YXBvaW50KFxuICAgIGRhdGFwb2ludDogYW55LFxuICAgIGN1cnJlbnRNYW5hZ2VkT2JqZWN0czogSU1hbmFnZWRPYmplY3RbXVxuICApOiBhbnkge1xuICAgIGlmIChkYXRhcG9pbnQuX190ZW1wbGF0ZSkge1xuICAgICAgY29uc3QgZm91bmRVcGRhdGVkRHAgPSBjdXJyZW50TWFuYWdlZE9iamVjdHMuZmluZChcbiAgICAgICAgbW8gPT4gbW8uaWQgPT09IGRhdGFwb2ludC5fX3RlbXBsYXRlIHx8IG1vLmlkID09PSBgJHtkYXRhcG9pbnQuX190ZW1wbGF0ZX1gXG4gICAgICApO1xuICAgICAgaWYgKCFmb3VuZFVwZGF0ZWREcCkge1xuICAgICAgICByZXR1cm4gZGF0YXBvaW50O1xuICAgICAgfVxuICAgICAgY29uc3QgdXBkYXRlZERhdGFwb2ludCA9IE9iamVjdC5hc3NpZ24oe30sIGZvdW5kVXBkYXRlZERwLmM4eV9LcGksIHtcbiAgICAgICAgX190ZW1wbGF0ZTogZm91bmRVcGRhdGVkRHAuaWRcbiAgICAgIH0pO1xuXG4gICAgICBPYmplY3QuYXNzaWduKGRhdGFwb2ludCwgdXBkYXRlZERhdGFwb2ludCk7XG4gICAgfVxuXG4gICAgaWYgKGRhdGFwb2ludC5fX3RhcmdldD8uaWQpIHtcbiAgICAgIGNvbnN0IGZvdW5kVXBkYXRlZFRhcmdldCA9IGN1cnJlbnRNYW5hZ2VkT2JqZWN0cy5maW5kKFxuICAgICAgICBtbyA9PiBtby5pZCA9PT0gZGF0YXBvaW50Ll9fdGFyZ2V0Py5pZCB8fCBtby5pZCA9PT0gYCR7ZGF0YXBvaW50Ll9fdGFyZ2V0Py5pZH1gXG4gICAgICApO1xuICAgICAgaWYgKGZvdW5kVXBkYXRlZFRhcmdldCkge1xuICAgICAgICBPYmplY3QuYXNzaWduKGRhdGFwb2ludC5fX3RhcmdldCwgZm91bmRVcGRhdGVkVGFyZ2V0KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGRhdGFwb2ludDtcbiAgfVxufVxuIl19