@c8y/ngx-components
Version:
Angular modules for Cumulocity IoT applications
143 lines • 17.5 kB
JavaScript
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