UNPKG

@c8y/ngx-components

Version:

Angular modules for Cumulocity IoT applications

143 lines 17.5 kB
import { Location } from '@angular/common'; import { Inject, Injectable, InjectionToken, Optional } from '@angular/core'; import { flatten, has, isUndefined } from 'lodash-es'; import { Subject } from 'rxjs'; import { InventoryService, OperationBulkService, OperationService } from '@c8y/client'; import { hookGeneric } from '@c8y/ngx-components'; import * as i0 from "@angular/core"; import * as i1 from "@c8y/client"; import * as i2 from "@angular/common"; export const baseUrl = 'devicecontrol/bulk/creation/'; /** * @deprecated Consider using the `hookListBulkType` function instead. */ export const HOOK_LIST_BULK_TYPE = new InjectionToken('HOOK_LIST_BULK_TYPE'); /** * You can either provide a single `OperationType` as parameter: * ```typescript * hookListBulkType(...) * ``` * * Or an array to directly register multiple: * ```typescript * hookListBulkType([...]) * ``` * * Or you provide an Service that implements `ExtensionFactory<OperationType>` * ```typescript * export class MyListBulkTypeFactory implements ExtensionFactory<OperationType> {...} * ... * hookListBulkType(MyListBulkTypeFactory) * ``` * A typed alternative to `HOOK_LIST_BULK_TYPE`. * @param type The `OperationType`'s or `ExtensionFactory` to be provided. * @returns An `Provider` to be provided in your module. */ export function hookListBulkType(type, options) { return hookGeneric(type, HOOK_LIST_BULK_TYPE, options); } export class BulkOperationsService { constructor(operationBulkService, operationService, inventoryService, location, bulkTypes) { this.operationBulkService = operationBulkService; this.operationService = operationService; this.inventoryService = inventoryService; this.location = location; this.DD_LOW_COUNT = 10; this.firmwareId = new Subject(); this.bulkTypes = flatten(bulkTypes); this.bulkTypes = this.bulkTypes.map(type => { if (isUndefined(type.selected)) { type.selected = false; } return type; }); } getBulkOperations(customFilter = {}) { const filter = { withTotalPages: true, withDeleted: true, pageSize: 50, ...customFilter }; return this.operationBulkService.list(filter); } getBulkOperationById(bulkOperationId) { return this.operationBulkService.detail(bulkOperationId); } createBulkOperation(bulkOperation) { return this.operationBulkService.create(bulkOperation); } deleteBulkOperation(bulkOperationId) { return this.operationBulkService.delete(bulkOperationId); } updateBulkOperation(bulkOperation) { return this.operationBulkService.update(bulkOperation); } getOperation(id) { return this.operationService.detail(id); } returnToBulkOperationOverview() { this.location.back(); } setBulkTypes(list) { this.bulkTypes = list; } getBulkTypes() { return this.bulkTypes; } setFirmwareId(id) { this.firmwareId.next(id); } createGroup(deviceQueryDataString) { const dynamicGroup = { name: 'Bulk operations group', type: 'c8y_DynamicGroup', c8y_IsDynamicGroup: { invisible: {} }, c8y_DeviceQueryString: deviceQueryDataString }; return this.inventoryService.create(dynamicGroup); } async scheduleBulkOperation(deviceQueryString, details) { const dynamicGroup = await this.createGroup(deviceQueryString); const bulkOperation = { groupId: dynamicGroup.data.id, operationPrototype: details.prototype, creationRamp: details.schedule.delayInSeconds, startDate: details.schedule.scheduledDate.toISOString(), note: details.note }; await this.createBulkOperation(bulkOperation); } getSingleOperationsByStatus(status, bulkOperationId) { const filter = { withTotalPages: true, bulkOperationId, status: (status && status.toUpperCase()) || '' }; return this.operationService.list(filter); } updateSingleOperation(partialUpdateObject) { return this.operationService.update(partialUpdateObject); } retrieveBulkOperationType(operation) { let type; this.bulkTypes.some(t => { if (t.fragments.some(fragment => has(operation, fragment))) { type = t.type; return true; } }); return type; } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: BulkOperationsService, deps: [{ token: i1.OperationBulkService }, { token: i1.OperationService }, { token: i1.InventoryService }, { token: i2.Location }, { token: HOOK_LIST_BULK_TYPE, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); } static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: BulkOperationsService }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: BulkOperationsService, decorators: [{ type: Injectable }], ctorParameters: () => [{ type: i1.OperationBulkService }, { type: i1.OperationService }, { type: i1.InventoryService }, { type: i2.Location }, { type: Array, decorators: [{ type: Optional }, { type: Inject, args: [HOOK_LIST_BULK_TYPE] }] }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVsay1vcGVyYXRpb25zLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9vcGVyYXRpb25zL2J1bGstb3BlcmF0aW9ucy1zZXJ2aWNlL2J1bGstb3BlcmF0aW9ucy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdFLE9BQU8sRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUN0RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRS9CLE9BQU8sRUFHTCxnQkFBZ0IsRUFJaEIsb0JBQW9CLEVBQ3BCLGdCQUFnQixFQUNqQixNQUFNLGFBQWEsQ0FBQztBQUtyQixPQUFPLEVBQW1CLFdBQVcsRUFBc0IsTUFBTSxxQkFBcUIsQ0FBQzs7OztBQUV2RixNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsOEJBQThCLENBQUM7QUFFdEQ7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLGNBQWMsQ0FDbkQscUJBQXFCLENBQ3RCLENBQUM7QUFFRjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FvQkc7QUFDSCxNQUFNLFVBQVUsZ0JBQWdCLENBQzlCLElBQW9DLEVBQ3BDLE9BQXFDO0lBRXJDLE9BQU8sV0FBVyxDQUFnQixJQUFJLEVBQUUsbUJBQW1CLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDeEUsQ0FBQztBQUdELE1BQU0sT0FBTyxxQkFBcUI7SUFNaEMsWUFDVSxvQkFBMEMsRUFDMUMsZ0JBQWtDLEVBQ2xDLGdCQUFrQyxFQUNsQyxRQUFrQixFQUVlLFNBQWlEO1FBTGxGLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBc0I7UUFD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OzswQkFhTixRQUFROzswQkFBSSxNQUFNOzJCQUFDLG1CQUFtQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IExvY2F0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSwgSW5qZWN0aW9uVG9rZW4sIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBmbGF0dGVuLCBoYXMsIGlzVW5kZWZpbmVkIH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHtcbiAgSWRSZWZlcmVuY2UsXG4gIElNYW5hZ2VkT2JqZWN0LFxuICBJbnZlbnRvcnlTZXJ2aWNlLFxuICBJT3BlcmF0aW9uLFxuICBJT3BlcmF0aW9uQnVsayxcbiAgSVJlc3VsdCxcbiAgT3BlcmF0aW9uQnVsa1NlcnZpY2UsXG4gIE9wZXJhdGlvblNlcnZpY2Vcbn0gZnJvbSAnQGM4eS9jbGllbnQnO1xuXG5pbXBvcnQgeyBPcGVyYXRpb25EZXRhaWxzIH0gZnJvbSAnLi9vcGVyYXRpb24tZGV0YWlscy5tb2RlbCc7XG5pbXBvcnQgeyBPcGVyYXRpb25UeXBlIH0gZnJvbSAnLi9vcGVyYXRpb24tdHlwZS5tb2RlbCc7XG5pbXBvcnQgeyBCdWxrT3BlcmF0aW9uVHlwZSB9IGZyb20gJy4vYnVsay1vcGVyYXRpb24ubW9kZWwnO1xuaW1wb3J0IHsgR2VuZXJpY0hvb2tUeXBlLCBob29rR2VuZXJpYywgR2VuZXJpY0hvb2tPcHRpb25zIH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5cbmV4cG9ydCBjb25zdCBiYXNlVXJsID0gJ2RldmljZWNvbnRyb2wvYnVsay9jcmVhdGlvbi8nO1xuXG4vKipcbiAqIEBkZXByZWNhdGVkIENvbnNpZGVyIHVzaW5nIHRoZSBgaG9va0xpc3RCdWxrVHlwZWAgZnVuY3Rpb24gaW5zdGVhZC5cbiAqL1xuZXhwb3J0IGNvbnN0IEhPT0tfTElTVF9CVUxLX1RZUEUgPSBuZXcgSW5qZWN0aW9uVG9rZW48T3BlcmF0aW9uVHlwZSB8IE9wZXJhdGlvblR5cGVbXT4oXG4gICdIT09LX0xJU1RfQlVMS19UWVBFJ1xuKTtcblxuLyoqXG4gKiBZb3UgY2FuIGVpdGhlciBwcm92aWRlIGEgc2luZ2xlIGBPcGVyYXRpb25UeXBlYCBhcyBwYXJhbWV0ZXI6XG4gKiBgYGB0eXBlc2NyaXB0XG4gKiAgaG9va0xpc3RCdWxrVHlwZSguLi4pXG4gKiBgYGBcbiAqXG4gKiBPciBhbiBhcnJheSB0byBkaXJlY3RseSByZWdpc3RlciBtdWx0aXBsZTpcbiAqIGBgYHR5cGVzY3JpcHRcbiAqICBob29rTGlzdEJ1bGtUeXBlKFsuLi5dKVxuICogYGBgXG4gKlxuICogT3IgeW91IHByb3ZpZGUgYW4gU2VydmljZSB0aGF0IGltcGxlbWVudHMgYEV4dGVuc2lvbkZhY3Rvcnk8T3BlcmF0aW9uVHlwZT5gXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiAgZXhwb3J0IGNsYXNzIE15TGlzdEJ1bGtUeXBlRmFjdG9yeSBpbXBsZW1lbnRzIEV4dGVuc2lvbkZhY3Rvcnk8T3BlcmF0aW9uVHlwZT4gey4uLn1cbiAqICAuLi5cbiAqICBob29rTGlzdEJ1bGtUeXBlKE15TGlzdEJ1bGtUeXBlRmFjdG9yeSlcbiAqIGBgYFxuICogQSB0eXBlZCBhbHRlcm5hdGl2ZSB0byBgSE9PS19MSVNUX0JVTEtfVFlQRWAuXG4gKiBAcGFyYW0gdHlwZSBUaGUgYE9wZXJhdGlvblR5cGVgJ3Mgb3IgYEV4dGVuc2lvbkZhY3RvcnlgIHRvIGJlIHByb3ZpZGVkLlxuICogQHJldHVybnMgQW4gYFByb3ZpZGVyYCB0byBiZSBwcm92aWRlZCBpbiB5b3VyIG1vZHVsZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhvb2tMaXN0QnVsa1R5cGUoXG4gIHR5cGU6IEdlbmVyaWNIb29rVHlwZTxPcGVyYXRpb25UeXBlPixcbiAgb3B0aW9ucz86IFBhcnRpYWw8R2VuZXJpY0hvb2tPcHRpb25zPlxuKSB7XG4gIHJldHVybiBob29rR2VuZXJpYzxPcGVyYXRpb25UeXBlPih0eXBlLCBIT09LX0xJU1RfQlVMS19UWVBFLCBvcHRpb25zKTtcbn1cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEJ1bGtPcGVyYXRpb25zU2VydmljZSB7XG4gIHJlYWRvbmx5IEREX0xPV19DT1VOVDogbnVtYmVyID0gMTA7XG4gIGZpcm13YXJlSWQ6IFN1YmplY3Q8SWRSZWZlcmVuY2U+ID0gbmV3IFN1YmplY3Q8SWRSZWZlcmVuY2U+KCk7XG5cbiAgcHJpdmF0ZSBidWxrVHlwZXM6IE9wZXJhdGlvblR5cGVbXTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIG9wZXJhdGlvbkJ1bGtTZXJ2aWNlOiBPcGVyYXRpb25CdWxrU2VydmljZSxcbiAgICBwcml2YXRlIG9wZXJhdGlvblNlcnZpY2U6IE9wZXJhdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBpbnZlbnRvcnlTZXJ2aWNlOiBJbnZlbnRvcnlTZXJ2aWNlLFxuICAgIHByaXZhdGUgbG9jYXRpb246IExvY2F0aW9uLFxuXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChIT09LX0xJU1RfQlVMS19UWVBFKSBidWxrVHlwZXM6IEFycmF5PE9wZXJhdGlvblR5cGUgfCBPcGVyYXRpb25UeXBlW10+XG4gICkge1xuICAgIHRoaXMuYnVsa1R5cGVzID0gZmxhdHRlbihidWxrVHlwZXMpO1xuXG4gICAgdGhpcy5idWxrVHlwZXMgPSB0aGlzLmJ1bGtUeXBlcy5tYXAodHlwZSA9PiB7XG4gICAgICBpZiAoaXNVbmRlZmluZWQodHlwZS5zZWxlY3RlZCkpIHtcbiAgICAgICAgdHlwZS5zZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHR5cGU7XG4gICAgfSk7XG4gIH1cblxuICBnZXRCdWxrT3BlcmF0aW9ucyhjdXN0b21GaWx0ZXIgPSB7fSkge1xuICAgIGNvbnN0IGZpbHRlciA9IHtcbiAgICAgIHdpdGhUb3RhbFBhZ2VzOiB0cnVlLFxuICAgICAgd2l0aERlbGV0ZWQ6IHRydWUsXG4gICAgICBwYWdlU2l6ZTogNTAsXG4gICAgICAuLi5jdXN0b21GaWx0ZXJcbiAgICB9O1xuXG4gICAgcmV0dXJuIHRoaXMub3BlcmF0aW9uQnVsa1NlcnZpY2UubGlzdChmaWx0ZXIpO1xuICB9XG5cbiAgZ2V0QnVsa09wZXJhdGlvbkJ5SWQoYnVsa09wZXJhdGlvbklkOiBzdHJpbmcgfCBudW1iZXIpIHtcbiAgICByZXR1cm4gdGhpcy5vcGVyYXRpb25CdWxrU2VydmljZS5kZXRhaWwoYnVsa09wZXJhdGlvbklkKTtcbiAgfVxuXG4gIGNyZWF0ZUJ1bGtPcGVyYXRpb24oYnVsa09wZXJhdGlvbjogUGFydGlhbDxJT3BlcmF0aW9uQnVsaz4pIHtcbiAgICByZXR1cm4gdGhpcy5vcGVyYXRpb25CdWxrU2VydmljZS5jcmVhdGUoYnVsa09wZXJhdGlvbik7XG4gIH1cblxuICBkZWxldGVCdWxrT3BlcmF0aW9uKGJ1bGtPcGVyYXRpb25JZCkge1xuICAgIHJldHVybiB0aGlzLm9wZXJhdGlvbkJ1bGtTZXJ2aWNlLmRlbGV0ZShidWxrT3BlcmF0aW9uSWQpO1xuICB9XG5cbiAgdXBkYXRlQnVsa09wZXJhdGlvbihidWxrT3BlcmF0aW9uOiBQYXJ0aWFsPElPcGVyYXRpb25CdWxrPikge1xuICAgIHJldHVybiB0aGlzLm9wZXJhdGlvbkJ1bGtTZXJ2aWNlLnVwZGF0ZShidWxrT3BlcmF0aW9uKTtcbiAgfVxuXG4gIGdldE9wZXJhdGlvbihpZDogc3RyaW5nKTogUHJvbWlzZTxJUmVzdWx0PElPcGVyYXRpb24+PiB7XG4gICAgcmV0dXJuIHRoaXMub3BlcmF0aW9uU2VydmljZS5kZXRhaWwoaWQpO1xuICB9XG5cbiAgcmV0dXJuVG9CdWxrT3BlcmF0aW9uT3ZlcnZpZXcoKSB7XG4gICAgdGhpcy5sb2NhdGlvbi5iYWNrKCk7XG4gIH1cblxuICBzZXRCdWxrVHlwZXMobGlzdDogT3BlcmF0aW9uVHlwZVtdKSB7XG4gICAgdGhpcy5idWxrVHlwZXMgPSBsaXN0O1xuICB9XG5cbiAgZ2V0QnVsa1R5cGVzKCk6IE9wZXJhdGlvblR5cGVbXSB7XG4gICAgcmV0dXJuIHRoaXMuYnVsa1R5cGVzO1xuICB9XG5cbiAgc2V0RmlybXdhcmVJZChpZDogSWRSZWZlcmVuY2UpIHtcbiAgICB0aGlzLmZpcm13YXJlSWQubmV4dChpZCk7XG4gIH1cblxuICBjcmVhdGVHcm91cChkZXZpY2VRdWVyeURhdGFTdHJpbmc6IHN0cmluZykge1xuICAgIGNvbnN0IGR5bmFtaWNHcm91cDogUGFydGlhbDxJTWFuYWdlZE9iamVjdD4gPSB7XG4gICAgICBuYW1lOiAnQnVsayBvcGVyYXRpb25zIGdyb3VwJyxcbiAgICAgIHR5cGU6ICdjOHlfRHluYW1pY0dyb3VwJyxcbiAgICAgIGM4eV9Jc0R5bmFtaWNHcm91cDogeyBpbnZpc2libGU6IHt9IH0sXG4gICAgICBjOHlfRGV2aWNlUXVlcnlTdHJpbmc6IGRldmljZVF1ZXJ5RGF0YVN0cmluZ1xuICAgIH07XG5cbiAgICByZXR1cm4gdGhpcy5pbnZlbnRvcnlTZXJ2aWNlLmNyZWF0ZShkeW5hbWljR3JvdXApO1xuICB9XG5cbiAgYXN5bmMgc2NoZWR1bGVCdWxrT3BlcmF0aW9uKGRldmljZVF1ZXJ5U3RyaW5nOiBzdHJpbmcsIGRldGFpbHM6IE9wZXJhdGlvbkRldGFpbHMpIHtcbiAgICBjb25zdCBkeW5hbWljR3JvdXAgPSBhd2FpdCB0aGlzLmNyZWF0ZUdyb3VwKGRldmljZVF1ZXJ5U3RyaW5nKTtcblxuICAgIGNvbnN0IGJ1bGtPcGVyYXRpb246IElPcGVyYXRpb25CdWxrID0ge1xuICAgICAgZ3JvdXBJZDogZHluYW1pY0dyb3VwLmRhdGEuaWQsXG4gICAgICBvcGVyYXRpb25Qcm90b3R5cGU6IGRldGFpbHMucHJvdG90eXBlLFxuICAgICAgY3JlYXRpb25SYW1wOiBkZXRhaWxzLnNjaGVkdWxlLmRlbGF5SW5TZWNvbmRzLFxuICAgICAgc3RhcnREYXRlOiBkZXRhaWxzLnNjaGVkdWxlLnNjaGVkdWxlZERhdGUudG9JU09TdHJpbmcoKSxcbiAgICAgIG5vdGU6IGRldGFpbHMubm90ZVxuICAgIH07XG5cbiAgICBhd2FpdCB0aGlzLmNyZWF0ZUJ1bGtPcGVyYXRpb24oYnVsa09wZXJhdGlvbik7XG4gIH1cblxuICBnZXRTaW5nbGVPcGVyYXRpb25zQnlTdGF0dXMoc3RhdHVzLCBidWxrT3BlcmF0aW9uSWQpIHtcbiAgICBjb25zdCBmaWx0ZXIgPSB7XG4gICAgICB3aXRoVG90YWxQYWdlczogdHJ1ZSxcbiAgICAgIGJ1bGtPcGVyYXRpb25JZCxcbiAgICAgIHN0YXR1czogKHN0YXR1cyAmJiBzdGF0dXMudG9VcHBlckNhc2UoKSkgfHwgJydcbiAgICB9O1xuXG4gICAgcmV0dXJuIHRoaXMub3BlcmF0aW9uU2VydmljZS5saXN0KGZpbHRlcik7XG4gIH1cblxuICB1cGRhdGVTaW5nbGVPcGVyYXRpb24ocGFydGlhbFVwZGF0ZU9iamVjdDogUGFydGlhbDxJT3BlcmF0aW9uPikge1xuICAgIHJldHVybiB0aGlzLm9wZXJhdGlvblNlcnZpY2UudXBkYXRlKHBhcnRpYWxVcGRhdGVPYmplY3QpO1xuICB9XG5cbiAgcmV0cmlldmVCdWxrT3BlcmF0aW9uVHlwZShvcGVyYXRpb246IElPcGVyYXRpb24pOiBCdWxrT3BlcmF0aW9uVHlwZSB7XG4gICAgbGV0IHR5cGU6IEJ1bGtPcGVyYXRpb25UeXBlO1xuXG4gICAgdGhpcy5idWxrVHlwZXMuc29tZSh0ID0+IHtcbiAgICAgIGlmICh0LmZyYWdtZW50cy5zb21lKGZyYWdtZW50ID0+IGhhcyhvcGVyYXRpb24sIGZyYWdtZW50KSkpIHtcbiAgICAgICAgdHlwZSA9IHQudHlwZTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdHlwZTtcbiAgfVxufVxuIl19