@c8y/ngx-components
Version:
Angular modules for Cumulocity IoT applications
69 lines • 12 kB
JavaScript
import { Injectable } from '@angular/core';
import { InventoryService } from '@c8y/client';
import { flatten, pick } from 'lodash';
import { DynamicBulkIIdentifiedResolver } from './abstract-id-resolver';
import { DynamicResolverService } from './dynamic-resolver.service';
import * as i0 from "@angular/core";
import * as i1 from "./dynamic-resolver.service";
import * as i2 from "@c8y/client";
/**
* A DynamicDetailsResolver responsible to resolve managedObjects for dynamic components.
* This service implements bulk resolving. This reduces the number of requests made to
* the backend by querying multiple managedObjectIds in a single request.
*/
export class DynamicManagedObjectResolver extends DynamicBulkIIdentifiedResolver {
constructor(dynamicResolver, inventory) {
super(dynamicResolver);
this.dynamicResolver = dynamicResolver;
this.inventory = inventory;
this.typeForErrorMessage = 'managedObject';
this.maxNumberOfManagedObjectsPerRequest = 50;
this.queryFilter = {};
}
performBulkRequest(uniqIds, bulkRequestId) {
return this.loadManagedObjectsInChunks(uniqIds, bulkRequestId);
}
async loadManagedObjectsInChunks(uniqIds, bulkRequestId) {
if (!uniqIds.length) {
return { result: [], bulkRequestId, errors: [] };
}
const promiseArray = new Array();
while (uniqIds.length) {
const idsToProcess = uniqIds.splice(0, this.maxNumberOfManagedObjectsPerRequest);
promiseArray.push(this.loadAChunkOfManagedObjects(idsToProcess));
}
const result = await Promise.all(promiseArray);
const managedObjects = flatten(result.map(tmp => tmp.managedObjects));
const errors = flatten(result.map(tmp => tmp.errors));
return { result: managedObjects, bulkRequestId, errors };
}
async loadAChunkOfManagedObjects(uniqIds) {
const { data: managedObjects } = await this.inventory.list(Object.assign({}, this.queryFilter || {}, {
ids: uniqIds.join(),
pageSize: this.maxNumberOfManagedObjectsPerRequest
}));
const notFoundMOs = uniqIds.filter(id => !managedObjects.find(tmp => tmp.id === id));
if (notFoundMOs.length) {
const promArray = notFoundMOs.map(id => this.getStatusDetails(id));
const res = await Promise.all(promArray);
return { managedObjects, errors: res };
}
return { managedObjects, errors: [] };
}
async getStatusDetails(moId) {
try {
const res = await this.inventory.detail(moId);
return { id: moId, ...pick(res.res, ['status', 'statusText']) };
}
catch (e) {
return { id: moId, ...pick(e.res, ['status', 'statusText']) };
}
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DynamicManagedObjectResolver, deps: [{ token: i1.DynamicResolverService }, { token: i2.InventoryService }], target: i0.ɵɵFactoryTarget.Injectable }); }
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DynamicManagedObjectResolver, providedIn: 'root' }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DynamicManagedObjectResolver, decorators: [{
type: Injectable,
args: [{ providedIn: 'root' }]
}], ctorParameters: () => [{ type: i1.DynamicResolverService }, { type: i2.InventoryService }] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFuYWdlZE9iamVjdC1yZXNvbHZlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvcmUvZHluYW1pYy1jb21wb25lbnQvbWFuYWdlZE9iamVjdC1yZXNvbHZlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBa0IsZ0JBQWdCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDL0QsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFHdkMsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDeEUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7Ozs7QUFFcEU7Ozs7R0FJRztBQUVILE1BQU0sT0FBTyw0QkFBNkIsU0FBUSw4QkFBOEM7SUFLOUYsWUFDWSxlQUF1QyxFQUN2QyxTQUEyQjtRQUVyQyxLQUFLLENBQUMsZUFBZSxDQUFDLENBQUM7UUFIYixvQkFBZSxHQUFmLGVBQWUsQ0FBd0I7UUFDdkMsY0FBUyxHQUFULFNBQVMsQ0FBa0I7UUFON0Isd0JBQW1CLEdBQUcsZUFBZSxDQUFDO1FBQzdCLHdDQUFtQyxHQUFHLEVBQUUsQ0FBQztRQUNsRCxnQkFBVyxHQUFRLEVBQUUsQ0FBQztJQU9oQyxDQUFDO0lBRVMsa0JBQWtCLENBQzFCLE9BQWlCLEVBQ2pCLGFBQXFCO1FBWXJCLE9BQU8sSUFBSSxDQUFDLDBCQUEwQixDQUFDLE9BQU8sRUFBRSxhQUFhLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBRVMsS0FBSyxDQUFDLDBCQUEwQixDQUN4QyxPQUFpQixFQUNqQixhQUFxQjtRQU1yQixJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3BCLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLGFBQWEsRUFBRSxNQUFNLEVBQUUsRUFBRSxF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QU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElNYW5hZ2VkT2JqZWN0LCBJbnZlbnRvcnlTZXJ2aWNlIH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHsgZmxhdHRlbiwgcGljayB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBEeW5hbWljQnVsa1JldHJpZXZhbEVycm9yIH0gZnJvbSAnLi9keW5hbWljLWJ1bGstcmV0cmlldmFsLWVycm9yLm1vZGVsJztcbmltcG9ydCB7IER5bmFtaWNCdWxrSUlkZW50aWZpZWRSZXNvbHZlciB9IGZyb20gJy4vYWJzdHJhY3QtaWQtcmVzb2x2ZXInO1xuaW1wb3J0IHsgRHluYW1pY1Jlc29sdmVyU2VydmljZSB9IGZyb20gJy4vZHluYW1pYy1yZXNvbHZlci5zZXJ2aWNlJztcblxuLyoqXG4gKiBBIER5bmFtaWNEZXRhaWxzUmVzb2x2ZXIgcmVzcG9uc2libGUgdG8gcmVzb2x2ZSBtYW5hZ2VkT2JqZWN0cyBmb3IgZHluYW1pYyBjb21wb25lbnRzLlxuICogVGhpcyBzZXJ2aWNlIGltcGxlbWVudHMgYnVsayByZXNvbHZpbmcuIFRoaXMgcmVkdWNlcyB0aGUgbnVtYmVyIG9mIHJlcXVlc3RzIG1hZGUgdG9cbiAqIHRoZSBiYWNrZW5kIGJ5IHF1ZXJ5aW5nIG11bHRpcGxlIG1hbmFnZWRPYmplY3RJZHMgaW4gYSBzaW5nbGUgcmVxdWVzdC5cbiAqL1xuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBEeW5hbWljTWFuYWdlZE9iamVjdFJlc29sdmVyIGV4dGVuZHMgRHluYW1pY0J1bGtJSWRlbnRpZmllZFJlc29sdmVyPElNYW5hZ2VkT2JqZWN0PiB7XG4gIHByb3RlY3RlZCB0eXBlRm9yRXJyb3JNZXNzYWdlID0gJ21hbmFnZWRPYmplY3QnO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgbWF4TnVtYmVyT2ZNYW5hZ2VkT2JqZWN0c1BlclJlcXVlc3QgPSA1MDtcbiAgcHJvdGVjdGVkIHF1ZXJ5RmlsdGVyOiBhbnkgPSB7fTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgZHluYW1pY1Jlc29sdmVyOiBEeW5hbWljUmVzb2x2ZXJTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBpbnZlbnRvcnk6IEludmVudG9yeVNlcnZpY2VcbiAgKSB7XG4gICAgc3VwZXIoZHluYW1pY1Jlc29sdmVyKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBwZXJmb3JtQnVsa1JlcXVlc3QoXG4gICAgdW5pcUlkczogc3RyaW5nW10sXG4gICAgYnVsa1JlcXVlc3RJZDogbnVtYmVyXG4gICk6XG4gICAgfCBQcm9taXNlPHtcbiAgICAgICAgcmVzdWx0OiBJTWFuYWdlZE9iamVjdFtdO1xuICAgICAgICBidWxrUmVxdWVzdElkOiBudW1iZXI7XG4gICAgICAgIGVycm9yczogRHluYW1pY0J1bGtSZXRyaWV2YWxFcnJvcltdO1xuICAgICAgfT5cbiAgICB8IE9ic2VydmFibGU8e1xuICAgICAgICByZXN1bHQ6IElNYW5hZ2VkT2JqZWN0W107XG4gICAgICAgIGJ1bGtSZXF1ZXN0SWQ6IG51bWJlcjtcbiAgICAgICAgZXJyb3JzOiBEeW5hbWljQnVsa1JldHJpZXZhbEVycm9yW107XG4gICAgICB9PiB7XG4gICAgcmV0dXJuIHRoaXMubG9hZE1hbmFnZWRPYmplY3RzSW5DaHVua3ModW5pcUlkcywgYnVsa1JlcXVlc3RJZCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgbG9hZE1hbmFnZWRPYmplY3RzSW5DaHVua3MoXG4gICAgdW5pcUlkczogc3RyaW5nW10sXG4gICAgYnVsa1JlcXVlc3RJZDogbnVtYmVyXG4gICk6IFByb21pc2U8e1xuICAgIHJlc3VsdDogSU1hbmFnZWRPYmplY3RbXTtcbiAgICBidWxrUmVxdWVzdElkOiBudW1iZXI7XG4gICAgZXJyb3JzOiBEeW5hbWljQnVsa1JldHJpZXZhbEVycm9yW107XG4gIH0+IHtcbiAgICBpZiAoIXVuaXFJZHMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4geyByZXN1bHQ6IFtdLCBidWxrUmVxdWVzdElkLCBlcnJvcnM6IFtdIH07XG4gICAgfVxuICAgIGNvbnN0IHByb21pc2VBcnJheSA9IG5ldyBBcnJheTxcbiAgICAgIFByb21pc2U8eyBtYW5hZ2VkT2JqZWN0czogSU1hbmFnZWRPYmplY3RbXTsgZXJyb3JzOiBEeW5hbWljQnVsa1JldHJpZXZhbEVycm9yW10gfT5cbiAgICA+KCk7XG4gICAgd2hpbGUgKHVuaXFJZHMubGVuZ3RoKSB7XG4gICAgICBjb25zdCBpZHNUb1Byb2Nlc3MgPSB1bmlxSWRzLnNwbGljZSgwLCB0aGlzLm1heE51bWJlck9mTWFuYWdlZE9iamVjdHNQZXJSZXF1ZXN0KTtcbiAgICAgIHByb21pc2VBcnJheS5wdXNoKHRoaXMubG9hZEFDaHVua09mTWFuYWdlZE9iamVjdHMoaWRzVG9Qcm9jZXNzKSk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZUFycmF5KTtcbiAgICBjb25zdCBtYW5hZ2VkT2JqZWN0cyA9IGZsYXR0ZW4ocmVzdWx0Lm1hcCh0bXAgPT4gdG1wLm1hbmFnZWRPYmplY3RzKSk7XG4gICAgY29uc3QgZXJyb3JzID0gZmxhdHRlbihyZXN1bHQubWFwKHRtcCA9PiB0bXAuZXJyb3JzKSk7XG5cbiAgICByZXR1cm4geyByZXN1bHQ6IG1hbmFnZWRPYmplY3RzLCBidWxrUmVxdWVzdElkLCBlcnJvcnMgfTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBsb2FkQUNodW5rT2ZNYW5hZ2VkT2JqZWN0cyhcbiAgICB1bmlxSWRzOiBzdHJpbmdbXVxuICApOiBQcm9taXNlPHsgbWFuYWdlZE9iamVjdHM6IElNYW5hZ2VkT2JqZWN0W107IGVycm9yczogRHluYW1pY0J1bGtSZXRyaWV2YWxFcnJvcltdIH0+IHtcbiAgICBjb25zdCB7IGRhdGE6IG1hbmFnZWRPYmplY3RzIH0gPSBhd2FpdCB0aGlzLmludmVudG9yeS5saXN0KFxuICAgICAgT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5xdWVyeUZpbHRlciB8fCB7fSwge1xuICAgICAgICBpZHM6IHVuaXFJZHMuam9pbigpLFxuICAgICAgICBwYWdlU2l6ZTogdGhpcy5tYXhOdW1iZXJPZk1hbmFnZWRPYmplY3RzUGVyUmVxdWVzdFxuICAgICAgfSlcbiAgICApO1xuXG4gICAgY29uc3Qgbm90Rm91bmRNT3MgPSB1bmlxSWRzLmZpbHRlcihpZCA9PiAhbWFuYWdlZE9iamVjdHMuZmluZCh0bXAgPT4gdG1wLmlkID09PSBpZCkpO1xuICAgIGlmIChub3RGb3VuZE1Pcy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IHByb21BcnJheSA9IG5vdEZvdW5kTU9zLm1hcChpZCA9PiB0aGlzLmdldFN0YXR1c0RldGFpbHMoaWQpKTtcbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IFByb21pc2UuYWxsKHByb21BcnJheSk7XG4gICAgICByZXR1cm4geyBtYW5hZ2VkT2JqZWN0cywgZXJyb3JzOiByZXMgfTtcbiAgICB9XG5cbiAgICByZXR1cm4geyBtYW5hZ2VkT2JqZWN0cywgZXJyb3JzOiBbXSB9O1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGdldFN0YXR1c0RldGFpbHMobW9JZDogc3RyaW5nKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuaW52ZW50b3J5LmRldGFpbChtb0lkKTtcbiAgICAgIHJldHVybiB7IGlkOiBtb0lkLCAuLi5waWNrKHJlcy5yZXMsIFsnc3RhdHVzJywgJ3N0YXR1c1RleHQnXSkgfTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4geyBpZDogbW9JZCwgLi4ucGljayhlLnJlcywgWydzdGF0dXMnLCAnc3RhdHVzVGV4dCddKSB9O1xuICAgIH1cbiAgfVxufVxuIl19