UNPKG

@c8y/ngx-components

Version:

Angular modules for Cumulocity IoT applications

69 lines 12 kB
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