@c8y/ngx-components 1010.0.31 → 1010.0.35

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. package/bundles/c8y-ngx-components-operations-bulk-operations-list.umd.js +18 -10
  2. package/bundles/c8y-ngx-components-operations-bulk-operations-list.umd.js.map +1 -1
  3. package/bundles/c8y-ngx-components-operations-bulk-operations-list.umd.min.js +1 -1
  4. package/bundles/c8y-ngx-components-operations-bulk-operations-list.umd.min.js.map +1 -1
  5. package/bundles/c8y-ngx-components-repository.umd.js +8 -4
  6. package/bundles/c8y-ngx-components-repository.umd.js.map +1 -1
  7. package/bundles/c8y-ngx-components-repository.umd.min.js +1 -1
  8. package/bundles/c8y-ngx-components-repository.umd.min.js.map +1 -1
  9. package/bundles/c8y-ngx-components-sensor-phone.umd.js +1 -1
  10. package/bundles/c8y-ngx-components-sensor-phone.umd.js.map +1 -1
  11. package/bundles/c8y-ngx-components-sensor-phone.umd.min.js +1 -1
  12. package/bundles/c8y-ngx-components-sensor-phone.umd.min.js.map +1 -1
  13. package/bundles/c8y-ngx-components.umd.js +14 -8
  14. package/bundles/c8y-ngx-components.umd.js.map +1 -1
  15. package/bundles/c8y-ngx-components.umd.min.js +1 -1
  16. package/bundles/c8y-ngx-components.umd.min.js.map +1 -1
  17. package/c8y-ngx-components.metadata.json +1 -1
  18. package/core/file-picker/file-picker.component.d.ts +8 -0
  19. package/esm2015/core/file-picker/file-picker.component.js +12 -2
  20. package/esm2015/core/file-picker/file-picker.module.js +6 -8
  21. package/esm2015/operations/bulk-operations-list/bulk-operation-list-item.component.js +4 -3
  22. package/esm2015/operations/bulk-operations-list/bulk-operation-list-item.model.js +16 -9
  23. package/esm2015/repository/configuration/configuration-detail.component.js +7 -2
  24. package/esm2015/repository/firmware/add-firmware-modal.component.js +7 -2
  25. package/esm2015/repository/firmware/add-firmware-patch-modal.component.js +7 -2
  26. package/esm2015/repository/software/add-software-modal.component.js +7 -2
  27. package/esm2015/sensor-phone/sensor-phone-modal.component.js +2 -2
  28. package/esm5/core/file-picker/file-picker.component.js +12 -2
  29. package/esm5/core/file-picker/file-picker.module.js +6 -8
  30. package/esm5/operations/bulk-operations-list/bulk-operation-list-item.component.js +5 -4
  31. package/esm5/operations/bulk-operations-list/bulk-operation-list-item.model.js +16 -9
  32. package/esm5/repository/configuration/configuration-detail.component.js +3 -2
  33. package/esm5/repository/firmware/add-firmware-modal.component.js +3 -2
  34. package/esm5/repository/firmware/add-firmware-patch-modal.component.js +3 -2
  35. package/esm5/repository/software/add-software-modal.component.js +3 -2
  36. package/esm5/sensor-phone/sensor-phone-modal.component.js +2 -2
  37. package/fesm2015/c8y-ngx-components-operations-bulk-operations-list.js +17 -9
  38. package/fesm2015/c8y-ngx-components-operations-bulk-operations-list.js.map +1 -1
  39. package/fesm2015/c8y-ngx-components-repository.js +24 -4
  40. package/fesm2015/c8y-ngx-components-repository.js.map +1 -1
  41. package/fesm2015/c8y-ngx-components-sensor-phone.js +1 -1
  42. package/fesm2015/c8y-ngx-components-sensor-phone.js.map +1 -1
  43. package/fesm2015/c8y-ngx-components.js +14 -8
  44. package/fesm2015/c8y-ngx-components.js.map +1 -1
  45. package/fesm5/c8y-ngx-components-operations-bulk-operations-list.js +18 -10
  46. package/fesm5/c8y-ngx-components-operations-bulk-operations-list.js.map +1 -1
  47. package/fesm5/c8y-ngx-components-repository.js +8 -4
  48. package/fesm5/c8y-ngx-components-repository.js.map +1 -1
  49. package/fesm5/c8y-ngx-components-sensor-phone.js +1 -1
  50. package/fesm5/c8y-ngx-components-sensor-phone.js.map +1 -1
  51. package/fesm5/c8y-ngx-components.js +14 -8
  52. package/fesm5/c8y-ngx-components.js.map +1 -1
  53. package/locales/locales.pot +33 -9
  54. package/operations/bulk-operations-list/bulk-operation-list-item.model.d.ts +2 -0
  55. package/package.json +2 -2
  56. package/repository/c8y-ngx-components-repository.metadata.json +1 -1
  57. package/repository/configuration/configuration-detail.component.d.ts +1 -0
  58. package/repository/firmware/add-firmware-modal.component.d.ts +1 -0
  59. package/repository/firmware/add-firmware-patch-modal.component.d.ts +1 -0
  60. package/repository/software/add-software-modal.component.d.ts +1 -0
  61. package/sensor-phone/c8y-ngx-components-sensor-phone.metadata.json +1 -1
@@ -204,38 +204,45 @@ var BULK_OPERATION_STATUS_LABELS = {
204
204
  EXECUTING: gettext('Executing'),
205
205
  CANCELED: gettext('Canceled'),
206
206
  FAILED: gettext('Completed with failures'),
207
- SUCCESSFUL: gettext('Completed successfully')
207
+ SUCCESSFUL: gettext('Completed successfully'),
208
+ DELETED: gettext('Deleted'),
208
209
  };
209
210
  var BULK_OPERATION_STATUS_OPTIONS = [
210
211
  {
211
212
  label: BULK_OPERATION_STATUS_LABELS.SCHEDULED,
212
213
  generalStatus: [OperationBulkGeneralStatus.SCHEDULED],
213
- iconClass: 'dlt-c8y-icon-calendar text-info'
214
+ iconClass: 'dlt-c8y-icon-calendar text-info',
214
215
  },
215
216
  {
216
217
  label: BULK_OPERATION_STATUS_LABELS.EXECUTING,
217
218
  generalStatus: [
218
219
  OperationBulkGeneralStatus.EXECUTING,
219
- OperationBulkGeneralStatus.EXECUTING_WITH_ERROR
220
+ OperationBulkGeneralStatus.EXECUTING_WITH_ERROR,
220
221
  ],
221
- iconClass: 'dlt-c8y-icon-refresh text-primary'
222
+ iconClass: 'dlt-c8y-icon-refresh text-primary',
223
+ },
224
+ {
225
+ label: BULK_OPERATION_STATUS_LABELS.DELETED,
226
+ generalStatus: [OperationBulkGeneralStatus.DELETED],
227
+ iconClass: 'dlt-c8y-icon-delete-document text-muted',
222
228
  },
223
229
  {
224
230
  label: BULK_OPERATION_STATUS_LABELS.CANCELED,
225
231
  generalStatus: [OperationBulkGeneralStatus.CANCELED],
226
- iconClass: 'dlt-c8y-icon-ban text-muted'
232
+ iconClass: 'dlt-c8y-icon-ban text-muted',
227
233
  },
228
234
  {
229
235
  label: BULK_OPERATION_STATUS_LABELS.FAILED,
230
236
  generalStatus: [OperationBulkGeneralStatus.FAILED],
231
- iconClass: 'dlt-c8y-icon-exclamation-triangle text-danger'
237
+ iconClass: 'dlt-c8y-icon-exclamation-triangle text-danger',
232
238
  },
233
239
  {
234
240
  label: BULK_OPERATION_STATUS_LABELS.SUCCESSFUL,
235
241
  generalStatus: [OperationBulkGeneralStatus.SUCCESSFUL],
236
- iconClass: 'dlt-c8y-icon-check-circle text-success'
237
- }
242
+ iconClass: 'dlt-c8y-icon-check-circle text-success',
243
+ },
238
244
  ];
245
+ var BULK_OPERATION_FALLBACK_STATUS_ICON = 'dlt-c8y-icon-ask-question text-muted';
239
246
 
240
247
  var BulkOperationListItemComponent = /** @class */ (function () {
241
248
  function BulkOperationListItemComponent(bulkOperationsService, modal, alert, bsModalService) {
@@ -267,9 +274,10 @@ var BulkOperationListItemComponent = /** @class */ (function () {
267
274
  };
268
275
  BulkOperationListItemComponent.prototype.getIconClass = function () {
269
276
  var _this = this;
270
- return this.bulkOperationStatusOptions.find(function (statusOption) {
277
+ var statusOptions = this.bulkOperationStatusOptions.find(function (statusOption) {
271
278
  return statusOption.generalStatus.includes(_this.bulkOperation.generalStatus);
272
- }).iconClass;
279
+ });
280
+ return statusOptions ? statusOptions.iconClass : BULK_OPERATION_FALLBACK_STATUS_ICON;
273
281
  };
274
282
  BulkOperationListItemComponent.prototype.calculateFinishDateMs = function () {
275
283
  var startDateMs = new Date(this.bulkOperation.startDate).getTime();
@@ -1 +1 @@
1
- {"version":3,"file":"c8y-ngx-components-operations-bulk-operations-list.js","sources":["ng://@c8y/ngx-components/operations/bulk-operations-list/bulk-operation-wrapper.component.ts","ng://@c8y/ngx-components/operations/bulk-operations-list/bulk-operation-details.service.ts","ng://@c8y/ngx-components/operations/bulk-operations-list/modals/bulk-operations-modal.component.ts","ng://@c8y/ngx-components/operations/bulk-operations-list/modals/bulk-operation-modals.service.ts","ng://@c8y/ngx-components/operations/bulk-operations-list/modals/bulk-operations-reschedule-modal.component.ts","ng://@c8y/ngx-components/operations/bulk-operations-list/bulk-operation-list-item.model.ts","ng://@c8y/ngx-components/operations/bulk-operations-list/bulk-operation-list-item.component.ts","ng://@c8y/ngx-components/operations/bulk-operations-list/bulk-operations-list.component.ts","ng://@c8y/ngx-components/operations/bulk-operations-list/bulk-operation-details-tabs.component.ts","ng://@c8y/ngx-components/operations/bulk-operations-list/bulk-operation-details.component.ts","ng://@c8y/ngx-components/operations/bulk-operations-list/single-operation-item.model.ts","ng://@c8y/ngx-components/operations/bulk-operations-list/single-operations-list.component.ts","ng://@c8y/ngx-components/operations/bulk-operations-list/single-operation-item.component.ts","ng://@c8y/ngx-components/operations/bulk-operations-list/type-list/bulk-operation-type-list.component.ts","ng://@c8y/ngx-components/operations/bulk-operations-list/bulk-operations-list.module.ts","ng://@c8y/ngx-components/operations/bulk-operations-list/c8y-ngx-components-operations-bulk-operations-list.ts"],"sourcesContent":["import { Component, Input } from '@angular/core';\nimport { IOperationBulk } from '@c8y/client';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { BulkOperationDetailsService } from './bulk-operation-details.service';\n\n@Component({\n selector: 'c8y-bulk-operations-wrapper',\n templateUrl: './bulk-operation-wrapper.component.html'\n})\nexport class BulkOperationWrapperComponent {\n @Input() bulkOperation: Partial<IOperationBulk>;\n\n constructor(\n public bulkOperationDetailsService: BulkOperationDetailsService,\n public modalRef: BsModalRef\n ) {}\n}\n","import { Injectable } from '@angular/core';\nimport { IOperationBulk } from '@c8y/client';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { BulkOperationsService } from '@c8y/ngx-components/operations/bulk-operations-service';\nimport { BulkOperationWrapperComponent } from './bulk-operation-wrapper.component';\n\n@Injectable()\nexport class BulkOperationDetailsService {\n constructor(\n private bulkOperationsService: BulkOperationsService,\n private modalService: BsModalService\n ) {}\n\n async openDetails(bulkOperationId) {\n const bulkOperation: IOperationBulk = (await this.bulkOperationsService.getBulkOperationById(\n bulkOperationId\n )).data;\n const initialState = { bulkOperation };\n this.modalService.show(BulkOperationWrapperComponent, {\n initialState,\n class: 'modal-lg'\n });\n }\n}\n","import { Component, ViewContainerRef, ViewChild, ComponentFactoryResolver } from '@angular/core';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { OperationType } from '@c8y/ngx-components/operations/bulk-operations-service';\n\n@Component({\n selector: 'c8y-bulk-operations-modal',\n templateUrl: 'bulk-operations-modal.component.html'\n})\nexport class BulkOperationsModalComponent {\n @ViewChild('container', { static: false, read: ViewContainerRef }) container;\n showComponent: boolean = false;\n constructor(private bsModalRef: BsModalRef, private resolver: ComponentFactoryResolver) {}\n\n cancel() {\n this.bsModalRef.hide();\n }\n\n createComponent(item: OperationType) {\n if (item && item.component) {\n this.showComponent = true;\n const factory = this.resolver.resolveComponentFactory(item.component);\n this.container.createComponent(factory);\n }\n }\n}\n","import { Injectable } from '@angular/core';\nimport { BsModalRef, BsModalService } from 'ngx-bootstrap/modal';\nimport { BulkOperationsModalComponent } from './bulk-operations-modal.component';\n\n@Injectable()\nexport class BulkOperationModalsService {\n private bsModalRef: BsModalRef;\n\n constructor(private bsModalService: BsModalService) {}\n\n showNewBulkOperationModal() {\n this.bsModalRef = this.bsModalService.show(BulkOperationsModalComponent, {\n backdrop: 'static',\n class: 'modal-sm'\n });\n }\n\n hideNewBulkOperationModal() {\n if (this.bsModalRef) {\n this.bsModalRef.hide();\n }\n }\n}\n","import { Component, OnInit } from '@angular/core';\nimport { IOperationBulk } from '@c8y/client';\nimport { AlertService, gettext } from '@c8y/ngx-components';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { Subject } from 'rxjs';\nimport { OperationSchedule } from '@c8y/ngx-components/operations/bulk-operation-scheduler';\nimport { BulkOperationsService } from '@c8y/ngx-components/operations/bulk-operations-service';\n\n@Component({\n selector: 'c8y-bulk-operations-reschedule-modal',\n templateUrl: 'bulk-operations-reschedule-modal.component.html'\n})\nexport class BulkOperationsRescheduleModalComponent implements OnInit {\n closeSubject: Subject<IOperationBulk> = new Subject();\n dateAndDelay: OperationSchedule;\n bulkOperation: Partial<IOperationBulk>;\n isRetryOperation: boolean;\n modalTitle: string;\n\n constructor(\n public bsModalRef: BsModalRef,\n private bulkOperationsService: BulkOperationsService,\n private alert: AlertService\n ) {}\n\n ngOnInit() {\n this.modalTitle = this.getTitle();\n }\n\n onDateAndDelaySelect($event) {\n this.dateAndDelay = $event;\n }\n\n getTitle() {\n return this.isRetryOperation ? gettext('Retry operation') : gettext('Edit schedule');\n }\n\n onCancel() {\n this.bsModalRef.hide();\n }\n\n async onSave() {\n let newBulkOperation;\n this.bulkOperation.startDate = this.dateAndDelay.scheduledDate.toISOString();\n this.bulkOperation.creationRamp = this.dateAndDelay.delayInSeconds;\n\n if (this.isRetryOperation) {\n try {\n newBulkOperation = await this.bulkOperationsService.createBulkOperation(this.bulkOperation);\n this.alert.success(gettext('Successfully rescheduled for a retry.'));\n } catch (er) {\n this.alert.addServerFailure(er);\n }\n } else {\n try {\n newBulkOperation = await this.bulkOperationsService.updateBulkOperation(this.bulkOperation);\n this.alert.success(gettext('Successfully rescheduled.'));\n } catch (er) {\n this.alert.addServerFailure(er);\n }\n }\n\n // send back to component from which modal was called\n this.closeSubject.next(newBulkOperation.data);\n this.bsModalRef.hide();\n }\n}\n","import { OperationBulkGeneralStatus } from '@c8y/client';\nimport { gettext } from '@c8y/ngx-components';\nimport { IStatusOption } from '@c8y/ngx-components/operations/status-filter';\n\nexport const BULK_OPERATION_STATUS_LABELS = {\n SCHEDULED: gettext('Scheduled'),\n EXECUTING: gettext('Executing'),\n CANCELED: gettext('Canceled'),\n FAILED: gettext('Completed with failures'),\n SUCCESSFUL: gettext('Completed successfully')\n};\n\nexport const BULK_OPERATION_STATUS_OPTIONS: IStatusOption[] = [\n {\n label: BULK_OPERATION_STATUS_LABELS.SCHEDULED,\n generalStatus: [OperationBulkGeneralStatus.SCHEDULED],\n iconClass: 'dlt-c8y-icon-calendar text-info'\n },\n {\n label: BULK_OPERATION_STATUS_LABELS.EXECUTING,\n generalStatus: [\n OperationBulkGeneralStatus.EXECUTING,\n OperationBulkGeneralStatus.EXECUTING_WITH_ERROR\n ],\n iconClass: 'dlt-c8y-icon-refresh text-primary'\n },\n {\n label: BULK_OPERATION_STATUS_LABELS.CANCELED,\n generalStatus: [OperationBulkGeneralStatus.CANCELED],\n iconClass: 'dlt-c8y-icon-ban text-muted'\n },\n {\n label: BULK_OPERATION_STATUS_LABELS.FAILED,\n generalStatus: [OperationBulkGeneralStatus.FAILED],\n iconClass: 'dlt-c8y-icon-exclamation-triangle text-danger'\n },\n {\n label: BULK_OPERATION_STATUS_LABELS.SUCCESSFUL,\n generalStatus: [OperationBulkGeneralStatus.SUCCESSFUL],\n iconClass: 'dlt-c8y-icon-check-circle text-success'\n }\n];\n","import {\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnInit,\n Output,\n SimpleChanges,\n ViewChild\n} from '@angular/core';\nimport { IOperationBulk, OperationBulkGeneralStatus } from '@c8y/client';\nimport {\n AlertService,\n gettext,\n ListItemComponent,\n ModalService,\n Status\n} from '@c8y/ngx-components';\nimport { assign, cloneDeep } from 'lodash-es';\nimport { BsModalRef, BsModalService, ModalOptions } from 'ngx-bootstrap/modal';\nimport { BulkOperationsService } from '@c8y/ngx-components/operations/bulk-operations-service';\nimport { IStatusOption } from '@c8y/ngx-components/operations/status-filter';\nimport { BulkOperationsRescheduleModalComponent } from './modals/bulk-operations-reschedule-modal.component';\nimport { BULK_OPERATION_STATUS_OPTIONS } from './bulk-operation-list-item.model';\n\n@Component({\n selector: 'c8y-bulk-operation-list-item',\n templateUrl: './bulk-operation-list-item.component.html'\n})\nexport class BulkOperationListItemComponent implements OnInit, OnChanges {\n @Input()\n bulkOperation: Partial<IOperationBulk>;\n @Input()\n detailsCollapsed: boolean = true;\n @Input()\n readOnly: boolean = false;\n @Output() showFailedOperation = new EventEmitter();\n @Output() reload: EventEmitter<any> = new EventEmitter();\n @ViewChild('listItem', { static: true }) listItem: ListItemComponent;\n iconClass: string;\n finishDate: number;\n refreshLoading = false;\n bulkOperationGeneralStatus = OperationBulkGeneralStatus;\n bulkOperationStatusOptions: IStatusOption[] = BULK_OPERATION_STATUS_OPTIONS;\n bsModalRef: BsModalRef;\n finishDatePopoverText: string = gettext(\n 'Approximate date, estimated based on the bulk operation settings.'\n );\n progressBarClass: string = 'progress';\n progressBarColor: string;\n progressBarStatus: number = 0;\n\n constructor(\n private bulkOperationsService: BulkOperationsService,\n private modal: ModalService,\n private alert: AlertService,\n private bsModalService: BsModalService\n ) {}\n\n ngOnInit() {\n this.iconClass = this.getIconClass();\n this.finishDate = this.calculateFinishDateMs();\n this.setProgressBar();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.bulkOperation && !changes.bulkOperation.firstChange) {\n this.iconClass = this.getIconClass();\n this.setProgressBar();\n }\n }\n\n getIconClass() {\n return this.bulkOperationStatusOptions.find(statusOption =>\n statusOption.generalStatus.includes(this.bulkOperation.generalStatus)\n ).iconClass;\n }\n\n calculateFinishDateMs(): number {\n const startDateMs: number = new Date(this.bulkOperation.startDate).getTime();\n const creationRampMs: number = this.bulkOperation.creationRamp * 1000;\n\n return startDateMs + creationRampMs * this.bulkOperation.progress.all;\n }\n\n progressBarProgressFn() {\n return (\n ((this.bulkOperation.progress.successful + this.bulkOperation.progress.failed) /\n this.bulkOperation.progress.all) *\n 100\n );\n }\n\n setProgressBar() {\n const staticContentOfClass = 'progress-bar progress-striped active progress-bar';\n\n const progressBarState = {\n EXECUTING: {\n progressBarClass: 'progress progress-striped active',\n progressBarColor: `${staticContentOfClass}-primary`,\n progressBarStatus: this.progressBarProgressFn()\n },\n EXECUTING_WITH_ERROR: {\n progressBarClass: 'progress progress-striped active',\n progressBarColor: `${staticContentOfClass}-danger`,\n progressBarStatus: this.progressBarProgressFn()\n },\n FAILED: {\n progressBarClass: 'progress',\n progressBarColor: `${staticContentOfClass}-danger`,\n progressBarStatus: 100\n },\n SUCCESSFUL: {\n progressBarClass: 'progress',\n progressBarColor: `${staticContentOfClass}-success`,\n progressBarStatus: 100\n }\n };\n\n assign(this, progressBarState[this.bulkOperation.generalStatus]);\n }\n\n editSchedule() {\n const rescheduledOperation = cloneDeep(this.bulkOperation);\n const initialState = {\n bulkOperation: rescheduledOperation\n };\n const modalOptions = { initialState, class: 'modal-sm', backdrop: 'static' } as ModalOptions;\n this.bsModalRef = this.bsModalService.show(\n BulkOperationsRescheduleModalComponent,\n modalOptions\n );\n }\n\n async cancelBulkOperation() {\n try {\n await this.modal.confirm(\n gettext('Cancel bulk operation'),\n gettext('You are about to cancel the bulk operation. Do you want to proceed?'),\n Status.DANGER\n );\n await this.bulkOperationsService.deleteBulkOperation(this.bulkOperation.id);\n this.reload.emit();\n this.alert.success(gettext('Operation canceled.'));\n } catch (er) {\n this.alert.addServerFailure(er);\n }\n }\n\n retryFailedOperation() {\n const clonedBulk = cloneDeep(this.bulkOperation);\n\n // change the id to failedparentId similar to the logic in deviceBulkControl.service.js\n delete clonedBulk.groupId;\n clonedBulk.failedParentId = this.bulkOperation.id;\n\n // show reschdedule modal:\n const initialState = {\n bulkOperation: clonedBulk,\n isRetryOperation: true\n };\n const modalOptions = { initialState, class: 'modal-sm', backdrop: 'static' } as ModalOptions;\n this.bsModalRef = this.bsModalService.show(\n BulkOperationsRescheduleModalComponent,\n modalOptions\n );\n this.bsModalRef.content.closeSubject.subscribe(() => {\n this.reload.emit();\n });\n }\n\n async setToSuccessful() {\n try {\n await this.modal.confirm(\n gettext('Set manually bulk operation to SUCCESSFUL'),\n gettext(\n 'You are about to change the bulk operation status to SUCCESSFUL. Do you want to proceed?'\n ),\n Status.DANGER\n );\n\n await this.bulkOperationsService.updateBulkOperation({\n id: this.bulkOperation.id,\n generalStatus: OperationBulkGeneralStatus.SUCCESSFUL\n });\n this.reload.emit();\n this.alert.success(gettext('Operation status changed to SUCCESSFUL.'));\n } catch (er) {\n this.alert.addServerFailure(er);\n }\n }\n\n openFailedOperation(failedParentId) {\n this.showFailedOperation.emit(failedParentId);\n }\n\n isStatusScheduled() {\n return this.bulkOperation.generalStatus === this.bulkOperationGeneralStatus.SCHEDULED;\n }\n\n isStatusExecutingOrExecutingWithError() {\n return (\n this.bulkOperation.generalStatus === this.bulkOperationGeneralStatus.EXECUTING ||\n this.bulkOperation.generalStatus === this.bulkOperationGeneralStatus.EXECUTING_WITH_ERROR\n );\n }\n\n allOperationsCreated() {\n return (\n this.bulkOperation.progress.all ===\n this.bulkOperation.progress.executing +\n this.bulkOperation.progress.failed +\n this.bulkOperation.progress.pending +\n this.bulkOperation.progress.successful\n );\n }\n\n isStatusCanceled() {\n return this.bulkOperation.generalStatus === this.bulkOperationGeneralStatus.CANCELED;\n }\n\n isStatusFailed() {\n return this.bulkOperation.generalStatus === this.bulkOperationGeneralStatus.FAILED;\n }\n}\n","import { Component, OnInit, QueryList, ViewChild, ViewChildren } from '@angular/core';\nimport { IOperationBulk, IResultList } from '@c8y/client';\nimport { OperationBulkRealtimeService, DatePickerComponent } from '@c8y/ngx-components';\nimport { flatten } from 'lodash-es';\nimport { BehaviorSubject, Observable, combineLatest, pipe } from 'rxjs';\nimport { map, tap, switchMap, withLatestFrom, shareReplay } from 'rxjs/operators';\nimport { StatusFilterComponent, IStatusOption } from '@c8y/ngx-components/operations/status-filter';\nimport {\n BulkOperationsService,\n OperationType\n} from '@c8y/ngx-components/operations/bulk-operations-service';\nimport { BulkOperationModalsService } from './modals/bulk-operation-modals.service';\nimport { BulkOperationListItemComponent } from './bulk-operation-list-item.component';\nimport { BULK_OPERATION_STATUS_OPTIONS } from './bulk-operation-list-item.model';\n@Component({\n selector: 'c8y-bulk-operations',\n templateUrl: './bulk-operations-list.component.html',\n providers: [OperationBulkRealtimeService]\n})\nexport class BulkOperationsListComponent implements OnInit {\n bulkTypes: OperationType[] = [];\n selectedTypeFilters = this.getTypeFilters();\n bulkOperationStatusOptions: IStatusOption[] = BULK_OPERATION_STATUS_OPTIONS;\n\n filterPipe;\n refreshLoading: boolean = false;\n statusFilter$: BehaviorSubject<IStatusOption[]> = new BehaviorSubject(null);\n typeFilter$: BehaviorSubject<OperationType[]> = new BehaviorSubject(null);\n timeFilter$: BehaviorSubject<any> = new BehaviorSubject(null);\n reload$: BehaviorSubject<void> = new BehaviorSubject(null);\n @ViewChildren(BulkOperationListItemComponent) listItems: QueryList<\n BulkOperationListItemComponent\n >;\n @ViewChild('statusFilter', { static: true }) statusFilter: StatusFilterComponent;\n @ViewChild(DatePickerComponent, { static: true }) datePicker: DatePickerComponent;\n\n bulkOperations$: Observable<IResultList<IOperationBulk>> = combineLatest(\n this.statusFilter$,\n this.timeFilter$,\n this.typeFilter$,\n this.reload$\n ).pipe(\n tap(() => {\n this.refreshLoading = true;\n }),\n switchMap(([statusFilters, timeFilters]) => this.filter(statusFilters, timeFilters)),\n withLatestFrom(this.typeFilter$),\n map(([result, typeFilter]: [IResultList<IOperationBulk>, OperationType[]]) => {\n this.filterPipe = pipe(map((data: []) => this.filterByType(data, typeFilter)));\n return { ...result, data: this.filterByType(result.data, typeFilter) };\n }),\n tap(() => {\n this.refreshLoading = false;\n }),\n shareReplay(1)\n );\n\n private allFilterFragments: string[];\n\n constructor(\n public realtime: OperationBulkRealtimeService,\n private bulkOperationsService: BulkOperationsService,\n private bulkOperationModalsService: BulkOperationModalsService\n ) {\n this.allFilterFragments = this.flattenFilterFragments(this.getTypeFilters());\n }\n\n ngOnInit() {\n this.bulkTypes = this.bulkOperationsService.getBulkTypes();\n }\n\n filterByType(bulkOperations: IOperationBulk[], typeFilter) {\n const flattenedFragments: string[] = this.flattenFilterFragments(typeFilter);\n if (\n // return data unfiltered if no filters selected...\n !flattenedFragments.length ||\n // ...or when all filters are selected\n this.allFilterFragments.every(fragment => flattenedFragments.includes(fragment))\n ) {\n return bulkOperations;\n }\n\n const filteredData = bulkOperations.filter(item => {\n return Object.keys(item.operationPrototype).some(key => flattenedFragments.includes(key));\n });\n\n return filteredData;\n }\n\n resetFilter() {\n this.statusFilter$.next(null);\n this.timeFilter$.next(null);\n this.typeFilter$.next(null);\n\n this.datePicker.clearFilter();\n this.selectedTypeFilters = this.getTypeFilters();\n this.statusFilter.reset();\n }\n\n isFilterApplied() {\n return (\n this.statusFilter$.getValue() || this.typeFilter$.getValue() || this.timeFilter$.getValue()\n );\n }\n\n filter(statusFilters, timeFilter) {\n const status =\n statusFilters && statusFilters.length > 0\n ? {\n generalStatus: flatten(statusFilters.map(statusFilter => statusFilter.generalStatus))\n }\n : {};\n\n const time = timeFilter\n ? {\n ...(timeFilter.dateFrom && {\n dateFrom: timeFilter.dateFrom.toISOString()\n }),\n ...(timeFilter.dateTo && {\n dateTo: timeFilter.dateTo.toISOString()\n })\n }\n : {};\n return this.getBulkOperations({ ...status, ...time });\n }\n\n getBulkOperations(filter?) {\n return this.bulkOperationsService.getBulkOperations(filter);\n }\n\n getTypeFilters() {\n return this.bulkOperationsService.getBulkTypes();\n }\n\n addBulkOperation() {\n this.bulkOperationModalsService.showNewBulkOperationModal();\n }\n\n openFailedOperation(failedParentId) {\n this.listItems.forEach(item => {\n if (item.bulkOperation.id === failedParentId) {\n item.listItem.collapsed = false;\n item.listItem.element.nativeElement.scrollIntoView({ behavior: 'smooth', block: 'center' });\n }\n });\n }\n\n compareOperations(operationA: IOperationBulk, operationB: IOperationBulk): number {\n return new Date(operationA.startDate).getTime() - new Date(operationB.startDate).getTime();\n }\n\n private flattenFilterFragments(filters: OperationType[]): string[] {\n return (filters || []).reduce((flattened, current) => flattened.concat(current.fragments), []);\n }\n}\n","import {\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output,\n ViewChild,\n ViewContainerRef\n} from '@angular/core';\nimport { IOperationBulk } from '@c8y/client';\nimport { gettext, Tab } from '@c8y/ngx-components';\n\n@Component({\n selector: 'c8y-bulk-operation-details-tabs',\n templateUrl: './bulk-operation-details-tabs.component.html'\n})\nexport class BulkOperationDetailsTabsComponent implements OnInit {\n @Input()\n bulkOperation: Partial<IOperationBulk>;\n @Input()\n readOnly: boolean = false;\n @Output() onRetryFailedOperations: EventEmitter<Partial<IOperationBulk>> = new EventEmitter();\n @Output() showFailedOperation: EventEmitter<number> = new EventEmitter();\n\n @ViewChild('details', { static: true }) detailsTemplate: any;\n @ViewChild('audit', { static: true }) auditTemplate: any;\n\n tabs: Tab[] = [];\n template: ViewContainerRef;\n\n ngOnInit(): void {\n this.template = this.detailsTemplate;\n\n this.tabs = [\n {\n label: gettext('Details'),\n path: null,\n icon: 'asterisk',\n template: this.detailsTemplate\n },\n {\n label: gettext('History of changes'),\n path: null,\n icon: 'archive',\n template: this.auditTemplate\n }\n ];\n }\n}\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { IManagedObject, IOperationBulk } from '@c8y/client';\n\n@Component({\n selector: 'c8y-bulk-operation-details',\n templateUrl: './bulk-operation-details.component.html'\n})\nexport class BulkOperationDetailsComponent {\n allFilterIsSelected: boolean = false;\n collapsed: boolean;\n device: IManagedObject;\n\n @Input()\n bulkOperation: Partial<IOperationBulk>;\n @Input()\n readOnly: boolean = false;\n @Output() showFailedOperation: EventEmitter<number> = new EventEmitter();\n\n scrollToRetriedFromOperation(failedOperationId) {\n this.showFailedOperation.emit(failedOperationId);\n }\n}\n","import { gettext } from '@c8y/ngx-components';\n\nexport const SINGLE_OP_STATUS_NAMES = {\n PENDING: gettext('Pending'),\n EXECUTING: gettext('Executing'),\n FAILED: gettext('Failed'),\n SUCCESSFUL: gettext('Successful'),\n ALL: gettext('All')\n};\n\nexport const SINGLE_OP_STATUS_PROPERTIES = [\n {\n label: SINGLE_OP_STATUS_NAMES.PENDING,\n iconClass: 'dlt-c8y-icon-clock-o text-info',\n selected: false\n },\n {\n label: SINGLE_OP_STATUS_NAMES.EXECUTING,\n iconClass: 'dlt-c8y-icon-refresh text-info',\n selected: false\n },\n {\n label: SINGLE_OP_STATUS_NAMES.SUCCESSFUL,\n iconClass: 'dlt-c8y-icon-check-circle text-success',\n selected: false\n },\n {\n label: SINGLE_OP_STATUS_NAMES.FAILED,\n iconClass: 'dlt-c8y-icon-exclamation-circle text-danger',\n selected: false\n }\n];\n","import {\n AfterViewInit,\n Component,\n EventEmitter,\n Input,\n OnChanges,\n Output,\n SimpleChanges,\n ViewChild\n} from '@angular/core';\nimport { IOperation, IOperationBulk, IResultList } from '@c8y/client';\nimport { StatusFilterComponent, IStatusOption } from '@c8y/ngx-components/operations/status-filter';\nimport { BulkOperationsService } from '@c8y/ngx-components/operations/bulk-operations-service';\nimport { SINGLE_OP_STATUS_NAMES, SINGLE_OP_STATUS_PROPERTIES } from './single-operation-item.model';\n\n@Component({\n selector: 'c8y-single-operations-list',\n templateUrl: './single-operations-list.component.html'\n})\nexport class SingleOperationsListComponent implements AfterViewInit, OnChanges {\n @Input()\n bulkOperation: Partial<IOperationBulk>;\n @Input()\n readOnly: boolean = false;\n @Output() onRetryFailedOperations: EventEmitter<Partial<IOperationBulk>> = new EventEmitter();\n\n @ViewChild(StatusFilterComponent, { static: false })\n statusFilter: StatusFilterComponent;\n\n singleOperationStatusProperties = SINGLE_OP_STATUS_PROPERTIES;\n singleOperationStatusNames = SINGLE_OP_STATUS_NAMES;\n singleOperations: IResultList<IOperation>;\n\n constructor(private bulkOperationsService: BulkOperationsService) {}\n\n async ngAfterViewInit() {\n if (this.statusFilter) {\n this.filterOperationsByType();\n }\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes.bulkOperation && !changes.bulkOperation.firstChange) {\n this.filterOperationsByType();\n }\n }\n\n filterOperationsByType() {\n if (this.statusFilter) {\n const typeFilter = this.getFilterTypeOfSingleOperations();\n\n this.statusFilter.preset(\n typeFilter === this.singleOperationStatusNames.ALL\n ? []\n : [{ label: typeFilter } as IStatusOption]\n );\n } else {\n setTimeout(this.filterOperationsByType.bind(this));\n }\n }\n\n getFilterTypeOfSingleOperations() {\n const progress = this.bulkOperation.progress;\n\n if (progress.failed > 0) {\n return this.singleOperationStatusNames.FAILED;\n } else if (progress.failed === 0 && progress.successful === 0 && progress.pending === 0) {\n return this.singleOperationStatusNames.EXECUTING;\n } else if (progress.failed === 0 && progress.successful === 0 && progress.executing === 0) {\n return this.singleOperationStatusNames.PENDING;\n } else if (progress.failed === 0 && progress.pending === 0 && progress.executing === 0) {\n return this.singleOperationStatusNames.SUCCESSFUL;\n }\n\n return this.singleOperationStatusNames.ALL;\n }\n\n async getOperationsByStatus(filter: IStatusOption[]) {\n this.singleOperations = await this.bulkOperationsService.getSingleOperationsByStatus(\n filter[0] && filter[0].label,\n this.bulkOperation.id\n );\n }\n\n retryBulkOperation() {\n this.onRetryFailedOperations.emit(this.bulkOperation);\n }\n}\n","import { Component, ElementRef, Input, ViewChild } from '@angular/core';\nimport { IOperation } from '@c8y/client';\nimport { AlertService, gettext } from '@c8y/ngx-components';\nimport { BulkOperationsService } from '@c8y/ngx-components/operations/bulk-operations-service';\nimport { omit } from 'lodash-es';\nimport { SINGLE_OP_STATUS_NAMES, SINGLE_OP_STATUS_PROPERTIES } from './single-operation-item.model';\n\n@Component({\n selector: 'c8y-single-operation-item',\n templateUrl: './single-operation-item.component.html'\n})\nexport class SingleOperationItemComponent {\n device = {};\n showIfTextTruncated = false;\n singleOperationStatusNames = SINGLE_OP_STATUS_NAMES;\n singleOperationsStatusProperties = SINGLE_OP_STATUS_PROPERTIES;\n iconClass: string;\n @Input()\n operation: IOperation;\n @Input()\n readOnly: boolean = false;\n @ViewChild('failureReason', { static: true }) failureReasonRef: ElementRef;\n\n constructor(\n private bulkOperationsService: BulkOperationsService,\n private alertService: AlertService\n ) {}\n\n async ngOnInit() {\n this.iconClass = this.getIconClass();\n this.device = await this.getDeviceMO(this.operation.deviceId);\n }\n\n ngAfterViewInit() {\n this.isTextTruncated();\n }\n\n async retrySingleOperation(singleOperation) {\n const operationToCreate = omit(singleOperation, [\n 'id',\n 'self',\n 'status',\n 'failureReason',\n 'creationTime',\n 'delivery'\n ]);\n\n try {\n await this.bulkOperationsService.createSingleOperation(operationToCreate);\n this.alertService.success(gettext('Operation created.'));\n } catch (er) {\n this.alertService.addServerFailure(er);\n }\n }\n\n getIconClass() {\n return this.singleOperationsStatusProperties.find(\n operationProperties => operationProperties.label.toUpperCase() === this.operation.status\n ).iconClass;\n }\n\n private async getDeviceMO(deviceId) {\n const inventoryMO = await this.bulkOperationsService.getManagedObject(deviceId);\n if (inventoryMO) {\n return inventoryMO.data;\n }\n }\n\n private isTextTruncated() {\n if (this.operation.failureReason) {\n const el = this.failureReasonRef.nativeElement;\n this.showIfTextTruncated = el.offsetWidth < el.scrollWidth ? true : false;\n }\n }\n}\n","import { Component, EventEmitter, Output, OnInit } from '@angular/core';\nimport { Router } from '@angular/router';\nimport {\n BulkOperationsService,\n OperationType\n} from '@c8y/ngx-components/operations/bulk-operations-service';\nimport { BulkOperationModalsService } from '../modals/bulk-operation-modals.service';\n\n@Component({\n selector: 'c8y-bulk-operation-type-list',\n templateUrl: './bulk-operation-type-list.component.html'\n})\nexport class BulkOperationTypeListComponent implements OnInit {\n @Output() onCustomType: EventEmitter<OperationType> = new EventEmitter();\n bulkList: OperationType[] = [];\n\n constructor(\n private router: Router,\n private bulkOperationsService: BulkOperationsService,\n private bulkOperationModalsService: BulkOperationModalsService\n ) {}\n\n ngOnInit() {\n this.bulkList = this.bulkOperationsService.getBulkTypes();\n }\n\n handleClick(item: OperationType) {\n if (item.path) {\n this.bulkOperationModalsService.hideNewBulkOperationModal();\n this.router.navigateByUrl(item.path);\n } else if (item.component) {\n this.onCustomType.emit(item);\n }\n }\n}\n","import { NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { PopoverModule } from 'ngx-bootstrap/popover';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\n\nimport { CoreModule, Route } from '@c8y/ngx-components';\nimport { StatusFilterModule } from '@c8y/ngx-components/operations/status-filter';\nimport { OperationSummaryModule } from '@c8y/ngx-components/operations/operation-summary';\nimport { BulkOperationSchedulerModule } from '@c8y/ngx-components/operations/bulk-operation-scheduler';\n\nimport { BulkOperationDetailsService } from './bulk-operation-details.service';\nimport { BulkOperationsListComponent } from './bulk-operations-list.component';\nimport { BulkOperationListItemComponent } from './bulk-operation-list-item.component';\nimport { BulkOperationDetailsTabsComponent } from './bulk-operation-details-tabs.component';\nimport { BulkOperationDetailsComponent } from './bulk-operation-details.component';\nimport { SingleOperationsListComponent } from './single-operations-list.component';\nimport { SingleOperationItemComponent } from './single-operation-item.component';\nimport { BulkOperationWrapperComponent } from './bulk-operation-wrapper.component';\nimport { BulkOperationTypeListComponent } from './type-list/bulk-operation-type-list.component';\nimport { BulkOperationModalsService } from './modals/bulk-operation-modals.service';\nimport { BulkOperationsModalComponent } from './modals/bulk-operations-modal.component';\nimport { BulkOperationsRescheduleModalComponent } from './modals/bulk-operations-reschedule-modal.component';\n\nexport const bulkOperationListRoutes: Route[] = [\n {\n path: 'devicecontrol/bulk',\n component: BulkOperationsListComponent\n }\n];\n\n/**\n * This module allows for displaying the list of bulk operations and their details.\n */\n@NgModule({\n imports: [\n CoreModule,\n PopoverModule,\n TooltipModule,\n StatusFilterModule,\n OperationSummaryModule,\n BulkOperationSchedulerModule,\n RouterModule.forChild(bulkOperationListRoutes)\n ],\n providers: [BulkOperationDetailsService, BulkOperationModalsService],\n declarations: [\n BulkOperationsListComponent,\n BulkOperationListItemComponent,\n BulkOperationDetailsTabsComponent,\n BulkOperationDetailsComponent,\n SingleOperationsListComponent,\n SingleOperationItemComponent,\n BulkOperationWrapperComponent,\n BulkOperationTypeListComponent,\n BulkOperationsModalComponent,\n BulkOperationsRescheduleModalComponent\n ],\n entryComponents: [\n BulkOperationsListComponent,\n BulkOperationListItemComponent,\n BulkOperationDetailsTabsComponent,\n BulkOperationDetailsComponent,\n SingleOperationsListComponent,\n SingleOperationItemComponent,\n BulkOperationWrapperComponent,\n BulkOperationTypeListComponent,\n BulkOperationsModalComponent,\n BulkOperationsRescheduleModalComponent\n ],\n exports: [\n BulkOperationsListComponent,\n BulkOperationListItemComponent,\n BulkOperationDetailsTabsComponent,\n BulkOperationDetailsComponent,\n SingleOperationsListComponent,\n SingleOperationItemComponent,\n BulkOperationWrapperComponent,\n BulkOperationTypeListComponent,\n BulkOperationsModalComponent,\n BulkOperationsRescheduleModalComponent\n ]\n})\nexport class BulkOperationsListModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["tslib_1.__decorate"],"mappings":"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"}
1
+ {"version":3,"file":"c8y-ngx-components-operations-bulk-operations-list.js","sources":["ng://@c8y/ngx-components/operations/bulk-operations-list/bulk-operation-wrapper.component.ts","ng://@c8y/ngx-components/operations/bulk-operations-list/bulk-operation-details.service.ts","ng://@c8y/ngx-components/operations/bulk-operations-list/modals/bulk-operations-modal.component.ts","ng://@c8y/ngx-components/operations/bulk-operations-list/modals/bulk-operation-modals.service.ts","ng://@c8y/ngx-components/operations/bulk-operations-list/modals/bulk-operations-reschedule-modal.component.ts","ng://@c8y/ngx-components/operations/bulk-operations-list/bulk-operation-list-item.model.ts","ng://@c8y/ngx-components/operations/bulk-operations-list/bulk-operation-list-item.component.ts","ng://@c8y/ngx-components/operations/bulk-operations-list/bulk-operations-list.component.ts","ng://@c8y/ngx-components/operations/bulk-operations-list/bulk-operation-details-tabs.component.ts","ng://@c8y/ngx-components/operations/bulk-operations-list/bulk-operation-details.component.ts","ng://@c8y/ngx-components/operations/bulk-operations-list/single-operation-item.model.ts","ng://@c8y/ngx-components/operations/bulk-operations-list/single-operations-list.component.ts","ng://@c8y/ngx-components/operations/bulk-operations-list/single-operation-item.component.ts","ng://@c8y/ngx-components/operations/bulk-operations-list/type-list/bulk-operation-type-list.component.ts","ng://@c8y/ngx-components/operations/bulk-operations-list/bulk-operations-list.module.ts","ng://@c8y/ngx-components/operations/bulk-operations-list/c8y-ngx-components-operations-bulk-operations-list.ts"],"sourcesContent":["import { Component, Input } from '@angular/core';\nimport { IOperationBulk } from '@c8y/client';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { BulkOperationDetailsService } from './bulk-operation-details.service';\n\n@Component({\n selector: 'c8y-bulk-operations-wrapper',\n templateUrl: './bulk-operation-wrapper.component.html'\n})\nexport class BulkOperationWrapperComponent {\n @Input() bulkOperation: Partial<IOperationBulk>;\n\n constructor(\n public bulkOperationDetailsService: BulkOperationDetailsService,\n public modalRef: BsModalRef\n ) {}\n}\n","import { Injectable } from '@angular/core';\nimport { IOperationBulk } from '@c8y/client';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { BulkOperationsService } from '@c8y/ngx-components/operations/bulk-operations-service';\nimport { BulkOperationWrapperComponent } from './bulk-operation-wrapper.component';\n\n@Injectable()\nexport class BulkOperationDetailsService {\n constructor(\n private bulkOperationsService: BulkOperationsService,\n private modalService: BsModalService\n ) {}\n\n async openDetails(bulkOperationId) {\n const bulkOperation: IOperationBulk = (await this.bulkOperationsService.getBulkOperationById(\n bulkOperationId\n )).data;\n const initialState = { bulkOperation };\n this.modalService.show(BulkOperationWrapperComponent, {\n initialState,\n class: 'modal-lg'\n });\n }\n}\n","import { Component, ViewContainerRef, ViewChild, ComponentFactoryResolver } from '@angular/core';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { OperationType } from '@c8y/ngx-components/operations/bulk-operations-service';\n\n@Component({\n selector: 'c8y-bulk-operations-modal',\n templateUrl: 'bulk-operations-modal.component.html'\n})\nexport class BulkOperationsModalComponent {\n @ViewChild('container', { static: false, read: ViewContainerRef }) container;\n showComponent: boolean = false;\n constructor(private bsModalRef: BsModalRef, private resolver: ComponentFactoryResolver) {}\n\n cancel() {\n this.bsModalRef.hide();\n }\n\n createComponent(item: OperationType) {\n if (item && item.component) {\n this.showComponent = true;\n const factory = this.resolver.resolveComponentFactory(item.component);\n this.container.createComponent(factory);\n }\n }\n}\n","import { Injectable } from '@angular/core';\nimport { BsModalRef, BsModalService } from 'ngx-bootstrap/modal';\nimport { BulkOperationsModalComponent } from './bulk-operations-modal.component';\n\n@Injectable()\nexport class BulkOperationModalsService {\n private bsModalRef: BsModalRef;\n\n constructor(private bsModalService: BsModalService) {}\n\n showNewBulkOperationModal() {\n this.bsModalRef = this.bsModalService.show(BulkOperationsModalComponent, {\n backdrop: 'static',\n class: 'modal-sm'\n });\n }\n\n hideNewBulkOperationModal() {\n if (this.bsModalRef) {\n this.bsModalRef.hide();\n }\n }\n}\n","import { Component, OnInit } from '@angular/core';\nimport { IOperationBulk } from '@c8y/client';\nimport { AlertService, gettext } from '@c8y/ngx-components';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { Subject } from 'rxjs';\nimport { OperationSchedule } from '@c8y/ngx-components/operations/bulk-operation-scheduler';\nimport { BulkOperationsService } from '@c8y/ngx-components/operations/bulk-operations-service';\n\n@Component({\n selector: 'c8y-bulk-operations-reschedule-modal',\n templateUrl: 'bulk-operations-reschedule-modal.component.html'\n})\nexport class BulkOperationsRescheduleModalComponent implements OnInit {\n closeSubject: Subject<IOperationBulk> = new Subject();\n dateAndDelay: OperationSchedule;\n bulkOperation: Partial<IOperationBulk>;\n isRetryOperation: boolean;\n modalTitle: string;\n\n constructor(\n public bsModalRef: BsModalRef,\n private bulkOperationsService: BulkOperationsService,\n private alert: AlertService\n ) {}\n\n ngOnInit() {\n this.modalTitle = this.getTitle();\n }\n\n onDateAndDelaySelect($event) {\n this.dateAndDelay = $event;\n }\n\n getTitle() {\n return this.isRetryOperation ? gettext('Retry operation') : gettext('Edit schedule');\n }\n\n onCancel() {\n this.bsModalRef.hide();\n }\n\n async onSave() {\n let newBulkOperation;\n this.bulkOperation.startDate = this.dateAndDelay.scheduledDate.toISOString();\n this.bulkOperation.creationRamp = this.dateAndDelay.delayInSeconds;\n\n if (this.isRetryOperation) {\n try {\n newBulkOperation = await this.bulkOperationsService.createBulkOperation(this.bulkOperation);\n this.alert.success(gettext('Successfully rescheduled for a retry.'));\n } catch (er) {\n this.alert.addServerFailure(er);\n }\n } else {\n try {\n newBulkOperation = await this.bulkOperationsService.updateBulkOperation(this.bulkOperation);\n this.alert.success(gettext('Successfully rescheduled.'));\n } catch (er) {\n this.alert.addServerFailure(er);\n }\n }\n\n // send back to component from which modal was called\n this.closeSubject.next(newBulkOperation.data);\n this.bsModalRef.hide();\n }\n}\n","import { OperationBulkGeneralStatus } from '@c8y/client';\nimport { gettext } from '@c8y/ngx-components';\nimport { IStatusOption } from '@c8y/ngx-components/operations/status-filter';\n\nexport const BULK_OPERATION_STATUS_LABELS = {\n SCHEDULED: gettext('Scheduled'),\n EXECUTING: gettext('Executing'),\n CANCELED: gettext('Canceled'),\n FAILED: gettext('Completed with failures'),\n SUCCESSFUL: gettext('Completed successfully'),\n DELETED: gettext('Deleted'),\n};\n\nexport const BULK_OPERATION_STATUS_OPTIONS: IStatusOption[] = [\n {\n label: BULK_OPERATION_STATUS_LABELS.SCHEDULED,\n generalStatus: [OperationBulkGeneralStatus.SCHEDULED],\n iconClass: 'dlt-c8y-icon-calendar text-info',\n },\n {\n label: BULK_OPERATION_STATUS_LABELS.EXECUTING,\n generalStatus: [\n OperationBulkGeneralStatus.EXECUTING,\n OperationBulkGeneralStatus.EXECUTING_WITH_ERROR,\n ],\n iconClass: 'dlt-c8y-icon-refresh text-primary',\n },\n {\n label: BULK_OPERATION_STATUS_LABELS.DELETED,\n generalStatus: [OperationBulkGeneralStatus.DELETED],\n iconClass: 'dlt-c8y-icon-delete-document text-muted',\n },\n {\n label: BULK_OPERATION_STATUS_LABELS.CANCELED,\n generalStatus: [OperationBulkGeneralStatus.CANCELED],\n iconClass: 'dlt-c8y-icon-ban text-muted',\n },\n {\n label: BULK_OPERATION_STATUS_LABELS.FAILED,\n generalStatus: [OperationBulkGeneralStatus.FAILED],\n iconClass: 'dlt-c8y-icon-exclamation-triangle text-danger',\n },\n {\n label: BULK_OPERATION_STATUS_LABELS.SUCCESSFUL,\n generalStatus: [OperationBulkGeneralStatus.SUCCESSFUL],\n iconClass: 'dlt-c8y-icon-check-circle text-success',\n },\n];\n\nexport const BULK_OPERATION_FALLBACK_STATUS_ICON = 'dlt-c8y-icon-ask-question text-muted';\n","import {\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnInit,\n Output,\n SimpleChanges,\n ViewChild\n} from '@angular/core';\nimport { IOperationBulk, OperationBulkGeneralStatus } from '@c8y/client';\nimport {\n AlertService,\n gettext,\n ListItemComponent,\n ModalService,\n Status\n} from '@c8y/ngx-components';\nimport { assign, cloneDeep } from 'lodash-es';\nimport { BsModalRef, BsModalService, ModalOptions } from 'ngx-bootstrap/modal';\nimport { BulkOperationsService } from '@c8y/ngx-components/operations/bulk-operations-service';\nimport { IStatusOption } from '@c8y/ngx-components/operations/status-filter';\nimport { BulkOperationsRescheduleModalComponent } from './modals/bulk-operations-reschedule-modal.component';\nimport { BULK_OPERATION_FALLBACK_STATUS_ICON, BULK_OPERATION_STATUS_OPTIONS } from './bulk-operation-list-item.model';\n\n@Component({\n selector: 'c8y-bulk-operation-list-item',\n templateUrl: './bulk-operation-list-item.component.html'\n})\nexport class BulkOperationListItemComponent implements OnInit, OnChanges {\n @Input()\n bulkOperation: Partial<IOperationBulk>;\n @Input()\n detailsCollapsed: boolean = true;\n @Input()\n readOnly: boolean = false;\n @Output() showFailedOperation = new EventEmitter();\n @Output() reload: EventEmitter<any> = new EventEmitter();\n @ViewChild('listItem', { static: true }) listItem: ListItemComponent;\n iconClass: string;\n finishDate: number;\n refreshLoading = false;\n bulkOperationGeneralStatus = OperationBulkGeneralStatus;\n bulkOperationStatusOptions: IStatusOption[] = BULK_OPERATION_STATUS_OPTIONS;\n bsModalRef: BsModalRef;\n finishDatePopoverText: string = gettext(\n 'Approximate date, estimated based on the bulk operation settings.'\n );\n progressBarClass: string = 'progress';\n progressBarColor: string;\n progressBarStatus: number = 0;\n\n constructor(\n private bulkOperationsService: BulkOperationsService,\n private modal: ModalService,\n private alert: AlertService,\n private bsModalService: BsModalService\n ) {}\n\n ngOnInit() {\n this.iconClass = this.getIconClass();\n this.finishDate = this.calculateFinishDateMs();\n this.setProgressBar();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.bulkOperation && !changes.bulkOperation.firstChange) {\n this.iconClass = this.getIconClass();\n this.setProgressBar();\n }\n }\n\n getIconClass() {\n const statusOptions = this.bulkOperationStatusOptions.find(statusOption =>\n statusOption.generalStatus.includes(this.bulkOperation.generalStatus)\n );\n return statusOptions ? statusOptions.iconClass : BULK_OPERATION_FALLBACK_STATUS_ICON;\n }\n\n calculateFinishDateMs(): number {\n const startDateMs: number = new Date(this.bulkOperation.startDate).getTime();\n const creationRampMs: number = this.bulkOperation.creationRamp * 1000;\n\n return startDateMs + creationRampMs * this.bulkOperation.progress.all;\n }\n\n progressBarProgressFn() {\n return (\n ((this.bulkOperation.progress.successful + this.bulkOperation.progress.failed) /\n this.bulkOperation.progress.all) *\n 100\n );\n }\n\n setProgressBar() {\n const staticContentOfClass = 'progress-bar progress-striped active progress-bar';\n\n const progressBarState = {\n EXECUTING: {\n progressBarClass: 'progress progress-striped active',\n progressBarColor: `${staticContentOfClass}-primary`,\n progressBarStatus: this.progressBarProgressFn()\n },\n EXECUTING_WITH_ERROR: {\n progressBarClass: 'progress progress-striped active',\n progressBarColor: `${staticContentOfClass}-danger`,\n progressBarStatus: this.progressBarProgressFn()\n },\n FAILED: {\n progressBarClass: 'progress',\n progressBarColor: `${staticContentOfClass}-danger`,\n progressBarStatus: 100\n },\n SUCCESSFUL: {\n progressBarClass: 'progress',\n progressBarColor: `${staticContentOfClass}-success`,\n progressBarStatus: 100\n }\n };\n\n assign(this, progressBarState[this.bulkOperation.generalStatus]);\n }\n\n editSchedule() {\n const rescheduledOperation = cloneDeep(this.bulkOperation);\n const initialState = {\n bulkOperation: rescheduledOperation\n };\n const modalOptions = { initialState, class: 'modal-sm', backdrop: 'static' } as ModalOptions;\n this.bsModalRef = this.bsModalService.show(\n BulkOperationsRescheduleModalComponent,\n modalOptions\n );\n }\n\n async cancelBulkOperation() {\n try {\n await this.modal.confirm(\n gettext('Cancel bulk operation'),\n gettext('You are about to cancel the bulk operation. Do you want to proceed?'),\n Status.DANGER\n );\n await this.bulkOperationsService.deleteBulkOperation(this.bulkOperation.id);\n this.reload.emit();\n this.alert.success(gettext('Operation canceled.'));\n } catch (er) {\n this.alert.addServerFailure(er);\n }\n }\n\n retryFailedOperation() {\n const clonedBulk = cloneDeep(this.bulkOperation);\n\n // change the id to failedparentId similar to the logic in deviceBulkControl.service.js\n delete clonedBulk.groupId;\n clonedBulk.failedParentId = this.bulkOperation.id;\n\n // show reschdedule modal:\n const initialState = {\n bulkOperation: clonedBulk,\n isRetryOperation: true\n };\n const modalOptions = { initialState, class: 'modal-sm', backdrop: 'static' } as ModalOptions;\n this.bsModalRef = this.bsModalService.show(\n BulkOperationsRescheduleModalComponent,\n modalOptions\n );\n this.bsModalRef.content.closeSubject.subscribe(() => {\n this.reload.emit();\n });\n }\n\n async setToSuccessful() {\n try {\n await this.modal.confirm(\n gettext('Set manually bulk operation to SUCCESSFUL'),\n gettext(\n 'You are about to change the bulk operation status to SUCCESSFUL. Do you want to proceed?'\n ),\n Status.DANGER\n );\n\n await this.bulkOperationsService.updateBulkOperation({\n id: this.bulkOperation.id,\n generalStatus: OperationBulkGeneralStatus.SUCCESSFUL\n });\n this.reload.emit();\n this.alert.success(gettext('Operation status changed to SUCCESSFUL.'));\n } catch (er) {\n this.alert.addServerFailure(er);\n }\n }\n\n openFailedOperation(failedParentId) {\n this.showFailedOperation.emit(failedParentId);\n }\n\n isStatusScheduled() {\n return this.bulkOperation.generalStatus === this.bulkOperationGeneralStatus.SCHEDULED;\n }\n\n isStatusExecutingOrExecutingWithError() {\n return (\n this.bulkOperation.generalStatus === this.bulkOperationGeneralStatus.EXECUTING ||\n this.bulkOperation.generalStatus === this.bulkOperationGeneralStatus.EXECUTING_WITH_ERROR\n );\n }\n\n allOperationsCreated() {\n return (\n this.bulkOperation.progress.all ===\n this.bulkOperation.progress.executing +\n this.bulkOperation.progress.failed +\n this.bulkOperation.progress.pending +\n this.bulkOperation.progress.successful\n );\n }\n\n isStatusCanceled() {\n return this.bulkOperation.generalStatus === this.bulkOperationGeneralStatus.CANCELED;\n }\n\n isStatusFailed() {\n return this.bulkOperation.generalStatus === this.bulkOperationGeneralStatus.FAILED;\n }\n}\n","import { Component, OnInit, QueryList, ViewChild, ViewChildren } from '@angular/core';\nimport { IOperationBulk, IResultList } from '@c8y/client';\nimport { OperationBulkRealtimeService, DatePickerComponent } from '@c8y/ngx-components';\nimport { flatten } from 'lodash-es';\nimport { BehaviorSubject, Observable, combineLatest, pipe } from 'rxjs';\nimport { map, tap, switchMap, withLatestFrom, shareReplay } from 'rxjs/operators';\nimport { StatusFilterComponent, IStatusOption } from '@c8y/ngx-components/operations/status-filter';\nimport {\n BulkOperationsService,\n OperationType\n} from '@c8y/ngx-components/operations/bulk-operations-service';\nimport { BulkOperationModalsService } from './modals/bulk-operation-modals.service';\nimport { BulkOperationListItemComponent } from './bulk-operation-list-item.component';\nimport { BULK_OPERATION_STATUS_OPTIONS } from './bulk-operation-list-item.model';\n@Component({\n selector: 'c8y-bulk-operations',\n templateUrl: './bulk-operations-list.component.html',\n providers: [OperationBulkRealtimeService]\n})\nexport class BulkOperationsListComponent implements OnInit {\n bulkTypes: OperationType[] = [];\n selectedTypeFilters = this.getTypeFilters();\n bulkOperationStatusOptions: IStatusOption[] = BULK_OPERATION_STATUS_OPTIONS;\n\n filterPipe;\n refreshLoading: boolean = false;\n statusFilter$: BehaviorSubject<IStatusOption[]> = new BehaviorSubject(null);\n typeFilter$: BehaviorSubject<OperationType[]> = new BehaviorSubject(null);\n timeFilter$: BehaviorSubject<any> = new BehaviorSubject(null);\n reload$: BehaviorSubject<void> = new BehaviorSubject(null);\n @ViewChildren(BulkOperationListItemComponent) listItems: QueryList<\n BulkOperationListItemComponent\n >;\n @ViewChild('statusFilter', { static: true }) statusFilter: StatusFilterComponent;\n @ViewChild(DatePickerComponent, { static: true }) datePicker: DatePickerComponent;\n\n bulkOperations$: Observable<IResultList<IOperationBulk>> = combineLatest(\n this.statusFilter$,\n this.timeFilter$,\n this.typeFilter$,\n this.reload$\n ).pipe(\n tap(() => {\n this.refreshLoading = true;\n }),\n switchMap(([statusFilters, timeFilters]) => this.filter(statusFilters, timeFilters)),\n withLatestFrom(this.typeFilter$),\n map(([result, typeFilter]: [IResultList<IOperationBulk>, OperationType[]]) => {\n this.filterPipe = pipe(map((data: []) => this.filterByType(data, typeFilter)));\n return { ...result, data: this.filterByType(result.data, typeFilter) };\n }),\n tap(() => {\n this.refreshLoading = false;\n }),\n shareReplay(1)\n );\n\n private allFilterFragments: string[];\n\n constructor(\n public realtime: OperationBulkRealtimeService,\n private bulkOperationsService: BulkOperationsService,\n private bulkOperationModalsService: BulkOperationModalsService\n ) {\n this.allFilterFragments = this.flattenFilterFragments(this.getTypeFilters());\n }\n\n ngOnInit() {\n this.bulkTypes = this.bulkOperationsService.getBulkTypes();\n }\n\n filterByType(bulkOperations: IOperationBulk[], typeFilter) {\n const flattenedFragments: string[] = this.flattenFilterFragments(typeFilter);\n if (\n // return data unfiltered if no filters selected...\n !flattenedFragments.length ||\n // ...or when all filters are selected\n this.allFilterFragments.every(fragment => flattenedFragments.includes(fragment))\n ) {\n return bulkOperations;\n }\n\n const filteredData = bulkOperations.filter(item => {\n return Object.keys(item.operationPrototype).some(key => flattenedFragments.includes(key));\n });\n\n return filteredData;\n }\n\n resetFilter() {\n this.statusFilter$.next(null);\n this.timeFilter$.next(null);\n this.typeFilter$.next(null);\n\n this.datePicker.clearFilter();\n this.selectedTypeFilters = this.getTypeFilters();\n this.statusFilter.reset();\n }\n\n isFilterApplied() {\n return (\n this.statusFilter$.getValue() || this.typeFilter$.getValue() || this.timeFilter$.getValue()\n );\n }\n\n filter(statusFilters, timeFilter) {\n const status =\n statusFilters && statusFilters.length > 0\n ? {\n generalStatus: flatten(statusFilters.map(statusFilter => statusFilter.generalStatus))\n }\n : {};\n\n const time = timeFilter\n ? {\n ...(timeFilter.dateFrom && {\n dateFrom: timeFilter.dateFrom.toISOString()\n }),\n ...(timeFilter.dateTo && {\n dateTo: timeFilter.dateTo.toISOString()\n })\n }\n : {};\n return this.getBulkOperations({ ...status, ...time });\n }\n\n getBulkOperations(filter?) {\n return this.bulkOperationsService.getBulkOperations(filter);\n }\n\n getTypeFilters() {\n return this.bulkOperationsService.getBulkTypes();\n }\n\n addBulkOperation() {\n this.bulkOperationModalsService.showNewBulkOperationModal();\n }\n\n openFailedOperation(failedParentId) {\n this.listItems.forEach(item => {\n if (item.bulkOperation.id === failedParentId) {\n item.listItem.collapsed = false;\n item.listItem.element.nativeElement.scrollIntoView({ behavior: 'smooth', block: 'center' });\n }\n });\n }\n\n compareOperations(operationA: IOperationBulk, operationB: IOperationBulk): number {\n return new Date(operationA.startDate).getTime() - new Date(operationB.startDate).getTime();\n }\n\n private flattenFilterFragments(filters: OperationType[]): string[] {\n return (filters || []).reduce((flattened, current) => flattened.concat(current.fragments), []);\n }\n}\n","import {\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output,\n ViewChild,\n ViewContainerRef\n} from '@angular/core';\nimport { IOperationBulk } from '@c8y/client';\nimport { gettext, Tab } from '@c8y/ngx-components';\n\n@Component({\n selector: 'c8y-bulk-operation-details-tabs',\n templateUrl: './bulk-operation-details-tabs.component.html'\n})\nexport class BulkOperationDetailsTabsComponent implements OnInit {\n @Input()\n bulkOperation: Partial<IOperationBulk>;\n @Input()\n readOnly: boolean = false;\n @Output() onRetryFailedOperations: EventEmitter<Partial<IOperationBulk>> = new EventEmitter();\n @Output() showFailedOperation: EventEmitter<number> = new EventEmitter();\n\n @ViewChild('details', { static: true }) detailsTemplate: any;\n @ViewChild('audit', { static: true }) auditTemplate: any;\n\n tabs: Tab[] = [];\n template: ViewContainerRef;\n\n ngOnInit(): void {\n this.template = this.detailsTemplate;\n\n this.tabs = [\n {\n label: gettext('Details'),\n path: null,\n icon: 'asterisk',\n template: this.detailsTemplate\n },\n {\n label: gettext('History of changes'),\n path: null,\n icon: 'archive',\n template: this.auditTemplate\n }\n ];\n }\n}\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { IManagedObject, IOperationBulk } from '@c8y/client';\n\n@Component({\n selector: 'c8y-bulk-operation-details',\n templateUrl: './bulk-operation-details.component.html'\n})\nexport class BulkOperationDetailsComponent {\n allFilterIsSelected: boolean = false;\n collapsed: boolean;\n device: IManagedObject;\n\n @Input()\n bulkOperation: Partial<IOperationBulk>;\n @Input()\n readOnly: boolean = false;\n @Output() showFailedOperation: EventEmitter<number> = new EventEmitter();\n\n scrollToRetriedFromOperation(failedOperationId) {\n this.showFailedOperation.emit(failedOperationId);\n }\n}\n","import { gettext } from '@c8y/ngx-components';\n\nexport const SINGLE_OP_STATUS_NAMES = {\n PENDING: gettext('Pending'),\n EXECUTING: gettext('Executing'),\n FAILED: gettext('Failed'),\n SUCCESSFUL: gettext('Successful'),\n ALL: gettext('All')\n};\n\nexport const SINGLE_OP_STATUS_PROPERTIES = [\n {\n label: SINGLE_OP_STATUS_NAMES.PENDING,\n iconClass: 'dlt-c8y-icon-clock-o text-info',\n selected: false\n },\n {\n label: SINGLE_OP_STATUS_NAMES.EXECUTING,\n iconClass: 'dlt-c8y-icon-refresh text-info',\n selected: false\n },\n {\n label: SINGLE_OP_STATUS_NAMES.SUCCESSFUL,\n iconClass: 'dlt-c8y-icon-check-circle text-success',\n selected: false\n },\n {\n label: SINGLE_OP_STATUS_NAMES.FAILED,\n iconClass: 'dlt-c8y-icon-exclamation-circle text-danger',\n selected: false\n }\n];\n","import {\n AfterViewInit,\n Component,\n EventEmitter,\n Input,\n OnChanges,\n Output,\n SimpleChanges,\n ViewChild\n} from '@angular/core';\nimport { IOperation, IOperationBulk, IResultList } from '@c8y/client';\nimport { StatusFilterComponent, IStatusOption } from '@c8y/ngx-components/operations/status-filter';\nimport { BulkOperationsService } from '@c8y/ngx-components/operations/bulk-operations-service';\nimport { SINGLE_OP_STATUS_NAMES, SINGLE_OP_STATUS_PROPERTIES } from './single-operation-item.model';\n\n@Component({\n selector: 'c8y-single-operations-list',\n templateUrl: './single-operations-list.component.html'\n})\nexport class SingleOperationsListComponent implements AfterViewInit, OnChanges {\n @Input()\n bulkOperation: Partial<IOperationBulk>;\n @Input()\n readOnly: boolean = false;\n @Output() onRetryFailedOperations: EventEmitter<Partial<IOperationBulk>> = new EventEmitter();\n\n @ViewChild(StatusFilterComponent, { static: false })\n statusFilter: StatusFilterComponent;\n\n singleOperationStatusProperties = SINGLE_OP_STATUS_PROPERTIES;\n singleOperationStatusNames = SINGLE_OP_STATUS_NAMES;\n singleOperations: IResultList<IOperation>;\n\n constructor(private bulkOperationsService: BulkOperationsService) {}\n\n async ngAfterViewInit() {\n if (this.statusFilter) {\n this.filterOperationsByType();\n }\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes.bulkOperation && !changes.bulkOperation.firstChange) {\n this.filterOperationsByType();\n }\n }\n\n filterOperationsByType() {\n if (this.statusFilter) {\n const typeFilter = this.getFilterTypeOfSingleOperations();\n\n this.statusFilter.preset(\n typeFilter === this.singleOperationStatusNames.ALL\n ? []\n : [{ label: typeFilter } as IStatusOption]\n );\n } else {\n setTimeout(this.filterOperationsByType.bind(this));\n }\n }\n\n getFilterTypeOfSingleOperations() {\n const progress = this.bulkOperation.progress;\n\n if (progress.failed > 0) {\n return this.singleOperationStatusNames.FAILED;\n } else if (progress.failed === 0 && progress.successful === 0 && progress.pending === 0) {\n return this.singleOperationStatusNames.EXECUTING;\n } else if (progress.failed === 0 && progress.successful === 0 && progress.executing === 0) {\n return this.singleOperationStatusNames.PENDING;\n } else if (progress.failed === 0 && progress.pending === 0 && progress.executing === 0) {\n return this.singleOperationStatusNames.SUCCESSFUL;\n }\n\n return this.singleOperationStatusNames.ALL;\n }\n\n async getOperationsByStatus(filter: IStatusOption[]) {\n this.singleOperations = await this.bulkOperationsService.getSingleOperationsByStatus(\n filter[0] && filter[0].label,\n this.bulkOperation.id\n );\n }\n\n retryBulkOperation() {\n this.onRetryFailedOperations.emit(this.bulkOperation);\n }\n}\n","import { Component, ElementRef, Input, ViewChild } from '@angular/core';\nimport { IOperation } from '@c8y/client';\nimport { AlertService, gettext } from '@c8y/ngx-components';\nimport { BulkOperationsService } from '@c8y/ngx-components/operations/bulk-operations-service';\nimport { omit } from 'lodash-es';\nimport { SINGLE_OP_STATUS_NAMES, SINGLE_OP_STATUS_PROPERTIES } from './single-operation-item.model';\n\n@Component({\n selector: 'c8y-single-operation-item',\n templateUrl: './single-operation-item.component.html'\n})\nexport class SingleOperationItemComponent {\n device = {};\n showIfTextTruncated = false;\n singleOperationStatusNames = SINGLE_OP_STATUS_NAMES;\n singleOperationsStatusProperties = SINGLE_OP_STATUS_PROPERTIES;\n iconClass: string;\n @Input()\n operation: IOperation;\n @Input()\n readOnly: boolean = false;\n @ViewChild('failureReason', { static: true }) failureReasonRef: ElementRef;\n\n constructor(\n private bulkOperationsService: BulkOperationsService,\n private alertService: AlertService\n ) {}\n\n async ngOnInit() {\n this.iconClass = this.getIconClass();\n this.device = await this.getDeviceMO(this.operation.deviceId);\n }\n\n ngAfterViewInit() {\n this.isTextTruncated();\n }\n\n async retrySingleOperation(singleOperation) {\n const operationToCreate = omit(singleOperation, [\n 'id',\n 'self',\n 'status',\n 'failureReason',\n 'creationTime',\n 'delivery'\n ]);\n\n try {\n await this.bulkOperationsService.createSingleOperation(operationToCreate);\n this.alertService.success(gettext('Operation created.'));\n } catch (er) {\n this.alertService.addServerFailure(er);\n }\n }\n\n getIconClass() {\n return this.singleOperationsStatusProperties.find(\n operationProperties => operationProperties.label.toUpperCase() === this.operation.status\n ).iconClass;\n }\n\n private async getDeviceMO(deviceId) {\n const inventoryMO = await this.bulkOperationsService.getManagedObject(deviceId);\n if (inventoryMO) {\n return inventoryMO.data;\n }\n }\n\n private isTextTruncated() {\n if (this.operation.failureReason) {\n const el = this.failureReasonRef.nativeElement;\n this.showIfTextTruncated = el.offsetWidth < el.scrollWidth ? true : false;\n }\n }\n}\n","import { Component, EventEmitter, Output, OnInit } from '@angular/core';\nimport { Router } from '@angular/router';\nimport {\n BulkOperationsService,\n OperationType\n} from '@c8y/ngx-components/operations/bulk-operations-service';\nimport { BulkOperationModalsService } from '../modals/bulk-operation-modals.service';\n\n@Component({\n selector: 'c8y-bulk-operation-type-list',\n templateUrl: './bulk-operation-type-list.component.html'\n})\nexport class BulkOperationTypeListComponent implements OnInit {\n @Output() onCustomType: EventEmitter<OperationType> = new EventEmitter();\n bulkList: OperationType[] = [];\n\n constructor(\n private router: Router,\n private bulkOperationsService: BulkOperationsService,\n private bulkOperationModalsService: BulkOperationModalsService\n ) {}\n\n ngOnInit() {\n this.bulkList = this.bulkOperationsService.getBulkTypes();\n }\n\n handleClick(item: OperationType) {\n if (item.path) {\n this.bulkOperationModalsService.hideNewBulkOperationModal();\n this.router.navigateByUrl(item.path);\n } else if (item.component) {\n this.onCustomType.emit(item);\n }\n }\n}\n","import { NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { PopoverModule } from 'ngx-bootstrap/popover';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\n\nimport { CoreModule, Route } from '@c8y/ngx-components';\nimport { StatusFilterModule } from '@c8y/ngx-components/operations/status-filter';\nimport { OperationSummaryModule } from '@c8y/ngx-components/operations/operation-summary';\nimport { BulkOperationSchedulerModule } from '@c8y/ngx-components/operations/bulk-operation-scheduler';\n\nimport { BulkOperationDetailsService } from './bulk-operation-details.service';\nimport { BulkOperationsListComponent } from './bulk-operations-list.component';\nimport { BulkOperationListItemComponent } from './bulk-operation-list-item.component';\nimport { BulkOperationDetailsTabsComponent } from './bulk-operation-details-tabs.component';\nimport { BulkOperationDetailsComponent } from './bulk-operation-details.component';\nimport { SingleOperationsListComponent } from './single-operations-list.component';\nimport { SingleOperationItemComponent } from './single-operation-item.component';\nimport { BulkOperationWrapperComponent } from './bulk-operation-wrapper.component';\nimport { BulkOperationTypeListComponent } from './type-list/bulk-operation-type-list.component';\nimport { BulkOperationModalsService } from './modals/bulk-operation-modals.service';\nimport { BulkOperationsModalComponent } from './modals/bulk-operations-modal.component';\nimport { BulkOperationsRescheduleModalComponent } from './modals/bulk-operations-reschedule-modal.component';\n\nexport const bulkOperationListRoutes: Route[] = [\n {\n path: 'devicecontrol/bulk',\n component: BulkOperationsListComponent\n }\n];\n\n/**\n * This module allows for displaying the list of bulk operations and their details.\n */\n@NgModule({\n imports: [\n CoreModule,\n PopoverModule,\n TooltipModule,\n StatusFilterModule,\n OperationSummaryModule,\n BulkOperationSchedulerModule,\n RouterModule.forChild(bulkOperationListRoutes)\n ],\n providers: [BulkOperationDetailsService, BulkOperationModalsService],\n declarations: [\n BulkOperationsListComponent,\n BulkOperationListItemComponent,\n BulkOperationDetailsTabsComponent,\n BulkOperationDetailsComponent,\n SingleOperationsListComponent,\n SingleOperationItemComponent,\n BulkOperationWrapperComponent,\n BulkOperationTypeListComponent,\n BulkOperationsModalComponent,\n BulkOperationsRescheduleModalComponent\n ],\n entryComponents: [\n BulkOperationsListComponent,\n BulkOperationListItemComponent,\n BulkOperationDetailsTabsComponent,\n BulkOperationDetailsComponent,\n SingleOperationsListComponent,\n SingleOperationItemComponent,\n BulkOperationWrapperComponent,\n BulkOperationTypeListComponent,\n BulkOperationsModalComponent,\n BulkOperationsRescheduleModalComponent\n ],\n exports: [\n BulkOperationsListComponent,\n BulkOperationListItemComponent,\n BulkOperationDetailsTabsComponent,\n BulkOperationDetailsComponent,\n SingleOperationsListComponent,\n SingleOperationItemComponent,\n BulkOperationWrapperComponent,\n BulkOperationTypeListComponent,\n BulkOperationsModalComponent,\n BulkOperationsRescheduleModalComponent\n ]\n})\nexport class BulkOperationsListModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["tslib_1.__decorate"],"mappings":"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"}
@@ -1328,6 +1328,7 @@ var AddFirmwareModalComponent = /** @class */ (function () {
1328
1328
  };
1329
1329
  this.saving = false;
1330
1330
  this.firmwarePreselected = false;
1331
+ this.textForFirmwareUrlPopover = gettext("Path for binaries can vary depending on device agent implementation, e.g.:\n /firmware/binaries/firmware1.bin\n https://firmware/binary/123\n ftp://firmware/binary/123.tar.gz\n ");
1331
1332
  }
1332
1333
  AddFirmwareModalComponent.prototype.ngOnInit = function () {
1333
1334
  this.setInitialState();
@@ -1433,7 +1434,7 @@ var AddFirmwareModalComponent = /** @class */ (function () {
1433
1434
  AddFirmwareModalComponent = __decorate([
1434
1435
  Component({
1435
1436
  selector: 'c8y-add-firmware-software-modal',
1436
- template: "<div class=\"viewport-modal\">\n <div class=\"modal-header dialog-header\">\n <i [c8yIcon]=\"'c8y-firmware'\"></i>\n <h4 translate>\n Add firmware\n </h4>\n </div>\n <div class=\"p-16 text-center separator-bottom\" *ngIf=\"!firmwarePreselected\">\n <p class=\"lead m-0\" translate>\n Select or create new firmware\n </p>\n </div>\n <form\n class=\"d-contents\"\n autocomplete=\"off\"\n #firmwareForm=\"ngForm\"\n (ngSubmit)=\"firmwareForm.form.valid && save()\"\n >\n <div class=\"modal-inner-scroll\">\n <div class=\"modal-body\">\n <div [hidden]=\"firmwarePreselected\">\n <c8y-form-group>\n <label for=\"firmwareName\" translate>Firmware</label>\n <c8y-typeahead\n [(ngModel)]=\"model.selected\"\n name=\"firmwareName\"\n placeholder=\"{{ 'Select or enter' | translate }}\"\n (onSearch)=\"onInput.next($event)\"\n [required]=\"true\"\n >\n <c8y-li\n *c8yFor=\"\n let firmware of firmwaresResult;\n loadMore: 'auto';\n notFound: notFoundTemplate\n \"\n class=\"p-l-8 p-r-8 c8y-list__item--link\"\n (click)=\"onFirmwareSelect(firmware)\"\n [active]=\"model.selected === firmware\"\n >\n <c8y-highlight\n [text]=\"firmware.name || '--'\"\n [pattern]=\"onInput | async\"\n ></c8y-highlight>\n </c8y-li>\n <ng-template #notFoundTemplate>\n <c8y-li class=\"bg-gray-lighter p-8\" *ngIf=\"(onInput | async)?.length > 0\">\n <span translate>No match found, add new`firmware`? </span>\n <button\n title=\"{{ 'Create new`firmware`' | translate }}\"\n type=\"button\"\n class=\"btn btn-primary btn-xs m-l-16\"\n translate\n >\n Create new`firmware`\n </button>\n </c8y-li>\n </ng-template>\n </c8y-typeahead>\n </c8y-form-group>\n\n <c8y-form-group>\n <label for=\"firmwareDescription\" translate>Description</label>\n <input\n id=\"firmwareDescription\"\n class=\"form-control\"\n autocomplete=\"off\"\n name=\"description\"\n [(ngModel)]=\"model.description\"\n placeholder=\"{{ 'e.g. Firmware for hardware revision b' | translate }}\"\n [disabled]=\"model.selected?.id\"\n [required]=\"true\"\n />\n </c8y-form-group>\n\n <c8y-form-group>\n <label for=\"firmwareDeviceTypeFilter\" translate>Device type filter</label>\n <input\n id=\"firmwareDeviceTypeFilter\"\n class=\"form-control\"\n name=\"firmwareDeviceTypeFilter\"\n popover=\"{{\n 'If the filter is set, the firmware will show up for installation only for devices of that type. If no filter is set, it will be available for all devices.'\n | translate\n }}\"\n [(ngModel)]=\"model.deviceType\"\n placeholder=\"{{ 'e.g.' | translate }} c8y_Linux\"\n [disabled]=\"model.selected?.id\"\n />\n </c8y-form-group>\n </div>\n\n <c8y-form-group>\n <label for=\"firmwareVersion\" translate>Version</label>\n <input\n id=\"firmwareVersion\"\n class=\"form-control\"\n autocomplete=\"off\"\n name=\"version\"\n [(ngModel)]=\"model.version\"\n placeholder=\"{{ 'e.g.' | translate }} 1.0.0\"\n [required]=\"true\"\n />\n </c8y-form-group>\n\n <c8y-form-group>\n <div class=\"legend form-block m-t-40\" translate>Firmware file</div>\n <c8y-file-picker [maxAllowedFiles]=\"1\" (onFilesPicked)=\"onFile($event)\">\n </c8y-file-picker>\n </c8y-form-group>\n </div>\n </div>\n <div class=\"modal-footer\">\n <button\n title=\"{{ 'Cancel' | translate }}\"\n class=\"btn btn-default\"\n type=\"button\"\n (click)=\"cancel()\"\n [disabled]=\"saving\"\n translate\n >\n Cancel\n </button>\n\n <button\n title=\"{{ 'Add firmware' | translate }}\"\n class=\"btn btn-primary\"\n type=\"submit\"\n [ngClass]=\"{ 'btn-pending': saving }\"\n [disabled]=\"\n !firmwareForm.form.valid ||\n firmwareForm.form.pristine ||\n saving ||\n (!model.binary?.url && !model.binary?.file)\n \"\n translate\n >\n Add firmware\n </button>\n </div>\n </form>\n</div>\n"
1437
+ template: "<div class=\"viewport-modal\">\n <div class=\"modal-header dialog-header\">\n <i [c8yIcon]=\"'c8y-firmware'\"></i>\n <h4 translate>\n Add firmware\n </h4>\n </div>\n <div class=\"p-16 text-center separator-bottom\" *ngIf=\"!firmwarePreselected\">\n <p class=\"lead m-0\" translate>\n Select or create new firmware\n </p>\n </div>\n <form\n class=\"d-contents\"\n autocomplete=\"off\"\n #firmwareForm=\"ngForm\"\n (ngSubmit)=\"firmwareForm.form.valid && save()\"\n >\n <div class=\"modal-inner-scroll\">\n <div class=\"modal-body\">\n <div [hidden]=\"firmwarePreselected\">\n <c8y-form-group>\n <label for=\"firmwareName\" translate>Firmware</label>\n <c8y-typeahead\n [(ngModel)]=\"model.selected\"\n name=\"firmwareName\"\n placeholder=\"{{ 'Select or enter' | translate }}\"\n (onSearch)=\"onInput.next($event)\"\n [required]=\"true\"\n >\n <c8y-li\n *c8yFor=\"\n let firmware of firmwaresResult;\n loadMore: 'auto';\n notFound: notFoundTemplate\n \"\n class=\"p-l-8 p-r-8 c8y-list__item--link\"\n (click)=\"onFirmwareSelect(firmware)\"\n [active]=\"model.selected === firmware\"\n >\n <c8y-highlight\n [text]=\"firmware.name || '--'\"\n [pattern]=\"onInput | async\"\n ></c8y-highlight>\n </c8y-li>\n <ng-template #notFoundTemplate>\n <c8y-li class=\"bg-gray-lighter p-8\" *ngIf=\"(onInput | async)?.length > 0\">\n <span translate>No match found, add new`firmware`? </span>\n <button\n title=\"{{ 'Create new`firmware`' | translate }}\"\n type=\"button\"\n class=\"btn btn-primary btn-xs m-l-16\"\n translate\n >\n Create new`firmware`\n </button>\n </c8y-li>\n </ng-template>\n </c8y-typeahead>\n </c8y-form-group>\n\n <c8y-form-group>\n <label for=\"firmwareDescription\" translate>Description</label>\n <input\n id=\"firmwareDescription\"\n class=\"form-control\"\n autocomplete=\"off\"\n name=\"description\"\n [(ngModel)]=\"model.description\"\n placeholder=\"{{ 'e.g. Firmware for hardware revision b' | translate }}\"\n [disabled]=\"model.selected?.id\"\n [required]=\"true\"\n />\n </c8y-form-group>\n\n <c8y-form-group>\n <label for=\"firmwareDeviceTypeFilter\" translate>Device type filter</label>\n <input\n id=\"firmwareDeviceTypeFilter\"\n class=\"form-control\"\n name=\"firmwareDeviceTypeFilter\"\n popover=\"{{\n 'If the filter is set, the firmware will show up for installation only for devices of that type. If no filter is set, it will be available for all devices.'\n | translate\n }}\"\n [(ngModel)]=\"model.deviceType\"\n placeholder=\"{{ 'e.g.' | translate }} c8y_Linux\"\n [disabled]=\"model.selected?.id\"\n />\n </c8y-form-group>\n </div>\n\n <c8y-form-group>\n <label for=\"firmwareVersion\" translate>Version</label>\n <input\n id=\"firmwareVersion\"\n class=\"form-control\"\n autocomplete=\"off\"\n name=\"version\"\n [(ngModel)]=\"model.version\"\n placeholder=\"{{ 'e.g.' | translate }} 1.0.0\"\n [required]=\"true\"\n />\n </c8y-form-group>\n\n <c8y-form-group>\n <div class=\"legend form-block m-t-40\" translate>Firmware file</div>\n <c8y-file-picker [maxAllowedFiles]=\"1\" (onFilesPicked)=\"onFile($event)\" [fileUrlPopover]=\"textForFirmwareUrlPopover\">\n </c8y-file-picker>\n </c8y-form-group>\n </div>\n </div>\n <div class=\"modal-footer\">\n <button\n title=\"{{ 'Cancel' | translate }}\"\n class=\"btn btn-default\"\n type=\"button\"\n (click)=\"cancel()\"\n [disabled]=\"saving\"\n translate\n >\n Cancel\n </button>\n\n <button\n title=\"{{ 'Add firmware' | translate }}\"\n class=\"btn btn-primary\"\n type=\"submit\"\n [ngClass]=\"{ 'btn-pending': saving }\"\n [disabled]=\"\n !firmwareForm.form.valid ||\n firmwareForm.form.pristine ||\n saving ||\n (!model.binary?.url && !model.binary?.file)\n \"\n translate\n >\n Add firmware\n </button>\n </div>\n </form>\n</div>\n"
1437
1438
  })
1438
1439
  ], AddFirmwareModalComponent);
1439
1440
  return AddFirmwareModalComponent;
@@ -1446,6 +1447,7 @@ var AddFirmwarePatchModalComponent = /** @class */ (function () {
1446
1447
  this.repository = repository;
1447
1448
  this.alert = alert;
1448
1449
  this.saved = new EventEmitter();
1450
+ this.textForFirmwareUrlPopover = gettext("Path for binaries can vary depending on device agent implementation, e.g.:\n /firmware/binaries/firmware1.bin\n https://firmware/binary/123\n ftp://firmware/binary/123.tar.gz\n ");
1449
1451
  this.model = {
1450
1452
  selected: undefined,
1451
1453
  dependency: null,
@@ -1564,7 +1566,7 @@ var AddFirmwarePatchModalComponent = /** @class */ (function () {
1564
1566
  AddFirmwarePatchModalComponent = __decorate([
1565
1567
  Component({
1566
1568
  selector: 'c8y-add-firmware-patch-modal.component',
1567
- template: "<div class=\"viewport-modal\">\n <div class=\"modal-header dialog-header\">\n <i [c8yIcon]=\"'c8y-firmware'\"></i>\n <h4 translate>\n Add firmware patch\n </h4>\n </div>\n <div class=\"p-16 text-center separator-bottom\">\n <p class=\"lead m-0\" translate>\n Select a firmware version\n </p>\n </div>\n\n <form class=\"d-contents\" autocomplete=\"off\" #firmwarePatchForm=\"ngForm\" (ngSubmit)=\"save()\">\n <div class=\"modal-inner-scroll\">\n <div class=\"modal-body\">\n <div [hidden]=\"firmwarePreselected\">\n <c8y-form-group>\n <label for=\"firmwareName\" translate>Firmware</label>\n <c8y-typeahead\n [ngModel]=\"model.selected\"\n name=\"firmwareName\"\n placeholder=\"{{ 'Select or enter' | translate }}\"\n (onSearch)=\"firmwareInput$.next($event)\"\n [allowFreeEntries]=\"false\"\n [required]=\"true\"\n >\n <c8y-li\n *c8yFor=\"let firmware of firmwares$ | async; loadMore: 'auto'\"\n class=\"p-l-8 p-r-8 c8y-list__item--link\"\n (click)=\"model.selected = firmware; firmwareSelected$.next(firmware)\"\n [active]=\"model.selected === firmware\"\n >\n <c8y-highlight\n [text]=\"firmware.name || '--'\"\n [pattern]=\"firmwareInput$ | async\"\n ></c8y-highlight>\n </c8y-li>\n </c8y-typeahead>\n <c8y-messages\n ><c8y-message\n name=\"notExisting\"\n [text]=\"'Select one of the existing firmwares.' | translate\"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n </div>\n\n <c8y-form-group>\n <label for=\"patchDependency\" class=\"m-r-8\" translate>Version</label>\n <c8y-typeahead\n [ngModel]=\"model.dependency\"\n name=\"patchDependency\"\n placeholder=\"{{ 'Select or enter' | translate }}\"\n (onSearch)=\"patchDependencyInput$.next($event)\"\n [displayProperty]=\"'c8y_Firmware.version'\"\n [allowFreeEntries]=\"false\"\n [disabled]=\"\n (baseVersions$ | async) === null || (baseVersions$ | async)?.data.length === 0\n \"\n [required]=\"true\"\n >\n <c8y-li\n *c8yFor=\"\n let baseVersion of baseVersions$;\n loadMore: 'auto';\n pipe: baseVersionsFilterPipe\n \"\n class=\"p-l-8 p-r-8 c8y-list__item--link\"\n (click)=\"model.dependency = baseVersion\"\n [active]=\"model.dependency === baseVersion\"\n >\n <c8y-highlight\n [text]=\"baseVersion.c8y_Firmware.version || '--'\"\n [pattern]=\"patchDependencyInput$ | async\"\n ></c8y-highlight>\n </c8y-li>\n </c8y-typeahead>\n <c8y-messages\n ><c8y-message\n name=\"notExisting\"\n [text]=\"'Select one of the existing versions.' | translate\"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n\n <c8y-form-group>\n <label for=\"patchVersion\" translate>Patch</label>\n <input\n id=\"patchVersion\"\n class=\"form-control\"\n autocomplete=\"off\"\n name=\"patchVersion\"\n [(ngModel)]=\"model.patchVersion\"\n placeholder=\"{{ 'e.g.' | translate }} 1.0.0\"\n required\n />\n </c8y-form-group>\n\n <c8y-form-group>\n <div class=\"legend form-block m-t-40\" translate>Patch file</div>\n <c8y-file-picker [maxAllowedFiles]=\"1\" (onFilesPicked)=\"onFile($event)\">\n </c8y-file-picker>\n </c8y-form-group>\n </div>\n </div>\n <div class=\"modal-footer\">\n <button\n title=\"{{ 'Cancel' | translate }}\"\n class=\"btn btn-default\"\n type=\"button\"\n (click)=\"cancel()\"\n [disabled]=\"saving\"\n translate\n >\n Cancel\n </button>\n <button\n title=\"{{ 'Add firmware patch' | translate }}\"\n class=\"btn btn-primary\"\n [ngClass]=\"{ 'btn-pending': saving }\"\n type=\"submit\"\n [disabled]=\"\n !firmwarePatchForm.form.valid ||\n firmwarePatchForm.form.pristine ||\n (!model.binary?.url && !model.binary?.file) ||\n saving\n \"\n translate\n >\n Add firmware patch\n </button>\n </div>\n </form>\n</div>\n"
1569
+ template: "<div class=\"viewport-modal\">\n <div class=\"modal-header dialog-header\">\n <i [c8yIcon]=\"'c8y-firmware'\"></i>\n <h4 translate>\n Add firmware patch\n </h4>\n </div>\n <div class=\"p-16 text-center separator-bottom\">\n <p class=\"lead m-0\" translate>\n Select a firmware version\n </p>\n </div>\n\n <form\n class=\"d-contents\"\n autocomplete=\"off\"\n #firmwarePatchForm=\"ngForm\"\n (ngSubmit)=\"firmwarePatchForm.form.valid && save()\"\n >\n <div class=\"modal-inner-scroll\">\n <div class=\"modal-body\">\n <div [hidden]=\"firmwarePreselected\">\n <c8y-form-group>\n <label for=\"firmwareName\" translate>Firmware</label>\n <c8y-typeahead\n [ngModel]=\"model.selected\"\n name=\"firmwareName\"\n placeholder=\"{{ 'Select or enter' | translate }}\"\n (onSearch)=\"firmwareInput$.next($event)\"\n [allowFreeEntries]=\"false\"\n [required]=\"true\"\n >\n <c8y-li\n *c8yFor=\"let firmware of firmwares$ | async; loadMore: 'auto'\"\n class=\"p-l-8 p-r-8 c8y-list__item--link\"\n (click)=\"model.selected = firmware; firmwareSelected$.next(firmware)\"\n [active]=\"model.selected === firmware\"\n >\n <c8y-highlight\n [text]=\"firmware.name || '--'\"\n [pattern]=\"firmwareInput$ | async\"\n ></c8y-highlight>\n </c8y-li>\n </c8y-typeahead>\n <c8y-messages\n ><c8y-message\n name=\"notExisting\"\n [text]=\"'Select one of the existing firmwares.' | translate\"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n </div>\n\n <c8y-form-group>\n <label for=\"patchDependency\" class=\"m-r-8\" translate>Version</label>\n <c8y-typeahead\n [ngModel]=\"model.dependency\"\n name=\"patchDependency\"\n placeholder=\"{{ 'Select or enter' | translate }}\"\n (onSearch)=\"patchDependencyInput$.next($event)\"\n [displayProperty]=\"'c8y_Firmware.version'\"\n [allowFreeEntries]=\"false\"\n [disabled]=\"\n (baseVersions$ | async) === null || (baseVersions$ | async)?.data.length === 0\n \"\n [required]=\"true\"\n >\n <c8y-li\n *c8yFor=\"\n let baseVersion of baseVersions$;\n loadMore: 'auto';\n pipe: baseVersionsFilterPipe\n \"\n class=\"p-l-8 p-r-8 c8y-list__item--link\"\n (click)=\"model.dependency = baseVersion\"\n [active]=\"model.dependency === baseVersion\"\n >\n <c8y-highlight\n [text]=\"baseVersion.c8y_Firmware.version || '--'\"\n [pattern]=\"patchDependencyInput$ | async\"\n ></c8y-highlight>\n </c8y-li>\n </c8y-typeahead>\n <c8y-messages\n ><c8y-message\n name=\"notExisting\"\n [text]=\"'Select one of the existing versions.' | translate\"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n\n <c8y-form-group>\n <label for=\"patchVersion\" translate>Patch</label>\n <input\n id=\"patchVersion\"\n class=\"form-control\"\n autocomplete=\"off\"\n name=\"patchVersion\"\n [(ngModel)]=\"model.patchVersion\"\n placeholder=\"{{ 'e.g.' | translate }} 1.0.0\"\n required\n />\n </c8y-form-group>\n\n <c8y-form-group>\n <div class=\"legend form-block m-t-40\" translate>Patch file</div>\n <c8y-file-picker [maxAllowedFiles]=\"1\" (onFilesPicked)=\"onFile($event)\" [fileUrlPopover]=\"textForFirmwareUrlPopover\">\n </c8y-file-picker>\n </c8y-form-group>\n </div>\n </div>\n <div class=\"modal-footer\">\n <button\n title=\"{{ 'Cancel' | translate }}\"\n class=\"btn btn-default\"\n type=\"button\"\n (click)=\"cancel()\"\n [disabled]=\"saving\"\n translate\n >\n Cancel\n </button>\n <button\n title=\"{{ 'Add firmware patch' | translate }}\"\n class=\"btn btn-primary\"\n type=\"submit\"\n [ngClass]=\"{ 'btn-pending': saving }\"\n [disabled]=\"\n !firmwarePatchForm.form.valid ||\n firmwarePatchForm.form.pristine ||\n (!model.binary?.url && !model.binary?.file) ||\n saving\n \"\n translate\n >\n Add firmware patch\n </button>\n </div>\n </form>\n</div>\n"
1568
1570
  })
1569
1571
  ], AddFirmwarePatchModalComponent);
1570
1572
  return AddFirmwarePatchModalComponent;
@@ -1886,6 +1888,7 @@ var AddSoftwareModalComponent = /** @class */ (function () {
1886
1888
  };
1887
1889
  this.saving = false;
1888
1890
  this.softwarePreselected = false;
1891
+ this.textForSoftwareUrlPopover = gettext("Path for binaries can vary depending on device agent implementation, e.g.:\n /software/binaries/software1.bin\n https://software/binary/123\n ftp://software/binary/123.tar.gz\n ");
1889
1892
  }
1890
1893
  AddSoftwareModalComponent.prototype.ngOnInit = function () {
1891
1894
  this.setInitialState();
@@ -1991,7 +1994,7 @@ var AddSoftwareModalComponent = /** @class */ (function () {
1991
1994
  AddSoftwareModalComponent = __decorate([
1992
1995
  Component({
1993
1996
  selector: 'c8y-add-software-software-modal',
1994
- template: "<div class=\"viewport-modal\">\n <div class=\"modal-header dialog-header\">\n <i [c8yIcon]=\"'c8y-tools'\"></i>\n <h4 translate>\n Add software\n </h4>\n </div>\n <div class=\"p-16 text-center separator-bottom\" *ngIf=\"!softwarePreselected\">\n <p class=\"lead m-0\" translate>\n Select or create new software\n </p>\n </div>\n <form\n class=\"d-contents\"\n autocomplete=\"off\"\n #softwareForm=\"ngForm\"\n (ngSubmit)=\"softwareForm.form.valid && save()\"\n >\n <div class=\"modal-inner-scroll\">\n <div class=\"modal-body\">\n <div [hidden]=\"softwarePreselected\">\n <c8y-form-group>\n <label for=\"softwareName\" translate>Software</label>\n <c8y-typeahead\n [(ngModel)]=\"model.selected\"\n name=\"softwareName\"\n placeholder=\"{{ 'Select or enter' | translate }}\"\n (onSearch)=\"onInput.next($event)\"\n [required]=\"true\"\n >\n <c8y-li\n *c8yFor=\"\n let software of softwaresResult;\n loadMore: 'auto';\n notFound: notFoundTemplate\n \"\n class=\"p-l-8 p-r-8 c8y-list__item--link\"\n (click)=\"onSoftwareSelect(software)\"\n [active]=\"model.selected === software\"\n >\n <c8y-highlight\n [text]=\"software.name || '--'\"\n [pattern]=\"onInput | async\"\n ></c8y-highlight>\n </c8y-li>\n <ng-template #notFoundTemplate>\n <c8y-li class=\"bg-gray-lighter p-8\" *ngIf=\"(onInput | async)?.length > 0\">\n <span translate>No match found, add new`software`? </span>\n <button\n title=\"{{ 'Create new`software`' | translate }}\"\n type=\"button\"\n class=\"btn btn-primary btn-xs m-l-16\"\n translate\n >\n Create new`software`\n </button>\n </c8y-li>\n </ng-template>\n </c8y-typeahead>\n </c8y-form-group>\n\n <c8y-form-group>\n <label for=\"softwareDescription\" translate>Description</label>\n <input\n id=\"softwareDescription\"\n class=\"form-control\"\n autocomplete=\"off\"\n name=\"description\"\n [(ngModel)]=\"model.description\"\n placeholder=\"{{ 'e.g. Cloud connectivity software' | translate }}\"\n [disabled]=\"model.selected?.id\"\n [required]=\"true\"\n />\n </c8y-form-group>\n\n <c8y-form-group>\n <label for=\"softwareDeviceTypeFilter\" translate>Device type filter</label>\n <input\n id=\"softwareDeviceTypeFilter\"\n class=\"form-control\"\n name=\"softwareDeviceTypeFilter\"\n popover=\"{{\n 'If the filter is set, the firmware will show up for installation only for devices of that type. If no filter is set, it will be available for all devices.'\n | translate\n }}\"\n [(ngModel)]=\"model.deviceType\"\n placeholder=\"{{ 'e.g.' | translate }} c8y_Linux\"\n [disabled]=\"model.selected?.id\"\n />\n </c8y-form-group>\n </div>\n\n <c8y-form-group>\n <label for=\"softwareVersion\" translate>Version</label>\n <input\n id=\"softwareVersion\"\n class=\"form-control\"\n autocomplete=\"off\"\n name=\"version\"\n [(ngModel)]=\"model.version\"\n placeholder=\"{{ 'e.g.' | translate }} 1.0.0\"\n [required]=\"true\"\n />\n </c8y-form-group>\n\n <c8y-form-group>\n <div class=\"legend form-block m-t-40\" translate>Software file</div>\n <c8y-file-picker [maxAllowedFiles]=\"1\" (onFilesPicked)=\"onFile($event)\">\n </c8y-file-picker>\n </c8y-form-group>\n </div>\n </div>\n <div class=\"modal-footer\">\n <button\n title=\"{{ 'Cancel' | translate }}\"\n class=\"btn btn-default\"\n type=\"button\"\n (click)=\"cancel()\"\n [disabled]=\"saving\"\n translate\n >\n Cancel\n </button>\n\n <button\n title=\"{{ 'Add software' | translate }}\"\n class=\"btn btn-primary\"\n type=\"submit\"\n [ngClass]=\"{ 'btn-pending': saving }\"\n [disabled]=\"\n !softwareForm.form.valid ||\n softwareForm.form.pristine ||\n saving ||\n (!model.binary?.url && !model.binary?.file)\n \"\n translate\n >\n Add software\n </button>\n </div>\n </form>\n</div>\n"
1997
+ template: "<div class=\"viewport-modal\">\n <div class=\"modal-header dialog-header\">\n <i [c8yIcon]=\"'c8y-tools'\"></i>\n <h4 translate>\n Add software\n </h4>\n </div>\n <div class=\"p-16 text-center separator-bottom\" *ngIf=\"!softwarePreselected\">\n <p class=\"lead m-0\" translate>\n Select or create new software\n </p>\n </div>\n <form\n class=\"d-contents\"\n autocomplete=\"off\"\n #softwareForm=\"ngForm\"\n (ngSubmit)=\"softwareForm.form.valid && save()\"\n >\n <div class=\"modal-inner-scroll\">\n <div class=\"modal-body\">\n <div [hidden]=\"softwarePreselected\">\n <c8y-form-group>\n <label for=\"softwareName\" translate>Software</label>\n <c8y-typeahead\n [(ngModel)]=\"model.selected\"\n name=\"softwareName\"\n placeholder=\"{{ 'Select or enter' | translate }}\"\n (onSearch)=\"onInput.next($event)\"\n [required]=\"true\"\n >\n <c8y-li\n *c8yFor=\"\n let software of softwaresResult;\n loadMore: 'auto';\n notFound: notFoundTemplate\n \"\n class=\"p-l-8 p-r-8 c8y-list__item--link\"\n (click)=\"onSoftwareSelect(software)\"\n [active]=\"model.selected === software\"\n >\n <c8y-highlight\n [text]=\"software.name || '--'\"\n [pattern]=\"onInput | async\"\n ></c8y-highlight>\n </c8y-li>\n <ng-template #notFoundTemplate>\n <c8y-li class=\"bg-gray-lighter p-8\" *ngIf=\"(onInput | async)?.length > 0\">\n <span translate>No match found, add new`software`? </span>\n <button\n title=\"{{ 'Create new`software`' | translate }}\"\n type=\"button\"\n class=\"btn btn-primary btn-xs m-l-16\"\n translate\n >\n Create new`software`\n </button>\n </c8y-li>\n </ng-template>\n </c8y-typeahead>\n </c8y-form-group>\n\n <c8y-form-group>\n <label for=\"softwareDescription\" translate>Description</label>\n <input\n id=\"softwareDescription\"\n class=\"form-control\"\n autocomplete=\"off\"\n name=\"description\"\n [(ngModel)]=\"model.description\"\n placeholder=\"{{ 'e.g. Cloud connectivity software' | translate }}\"\n [disabled]=\"model.selected?.id\"\n [required]=\"true\"\n />\n </c8y-form-group>\n\n <c8y-form-group>\n <label for=\"softwareDeviceTypeFilter\" translate>Device type filter</label>\n <input\n id=\"softwareDeviceTypeFilter\"\n class=\"form-control\"\n name=\"softwareDeviceTypeFilter\"\n popover=\"{{\n 'If the filter is set, the firmware will show up for installation only for devices of that type. If no filter is set, it will be available for all devices.'\n | translate\n }}\"\n [(ngModel)]=\"model.deviceType\"\n placeholder=\"{{ 'e.g.' | translate }} c8y_Linux\"\n [disabled]=\"model.selected?.id\"\n />\n </c8y-form-group>\n </div>\n\n <c8y-form-group>\n <label for=\"softwareVersion\" translate>Version</label>\n <input\n id=\"softwareVersion\"\n class=\"form-control\"\n autocomplete=\"off\"\n name=\"version\"\n [(ngModel)]=\"model.version\"\n placeholder=\"{{ 'e.g.' | translate }} 1.0.0\"\n [required]=\"true\"\n />\n </c8y-form-group>\n\n <c8y-form-group>\n <div class=\"legend form-block m-t-40\" translate>Software file</div>\n <c8y-file-picker [maxAllowedFiles]=\"1\" (onFilesPicked)=\"onFile($event)\" [fileUrlPopover]=\"textForSoftwareUrlPopover\">\n </c8y-file-picker>\n </c8y-form-group>\n </div>\n </div>\n <div class=\"modal-footer\">\n <button\n title=\"{{ 'Cancel' | translate }}\"\n class=\"btn btn-default\"\n type=\"button\"\n (click)=\"cancel()\"\n [disabled]=\"saving\"\n translate\n >\n Cancel\n </button>\n\n <button\n title=\"{{ 'Add software' | translate }}\"\n class=\"btn btn-primary\"\n type=\"submit\"\n [ngClass]=\"{ 'btn-pending': saving }\"\n [disabled]=\"\n !softwareForm.form.valid ||\n softwareForm.form.pristine ||\n saving ||\n (!model.binary?.url && !model.binary?.file)\n \"\n translate\n >\n Add software\n </button>\n </div>\n </form>\n</div>\n"
1995
1998
  })
1996
1999
  ], AddSoftwareModalComponent);
1997
2000
  return AddSoftwareModalComponent;
@@ -2223,6 +2226,7 @@ var ConfigurationDetailComponent = /** @class */ (function () {
2223
2226
  this.mo = {};
2224
2227
  this.saving = false;
2225
2228
  this.uploadChoice = 'uploadBinary';
2229
+ this.textForConfigurationUrlPopover = gettext("Path for binaries can vary depending on device agent implementation, e.g.:\n /configuration/binaries/configuration1.bin\n https://configuration/binary/123\n ftp://configuration/binary/123.tar.gz\n ");
2226
2230
  this.result = new Promise(function (resolve, reject) {
2227
2231
  _this._save = resolve;
2228
2232
  _this._cancel = reject;
@@ -2328,7 +2332,7 @@ var ConfigurationDetailComponent = /** @class */ (function () {
2328
2332
  ConfigurationDetailComponent = __decorate([
2329
2333
  Component({
2330
2334
  selector: 'c8y-configuration-detail',
2331
- template: "<div class=\"viewport-modal\">\n <div class=\"modal-header dialog-header\">\n <i [c8yIcon]=\"'cogs'\"></i>\n <h4 translate *ngIf=\"mo.id\">Update configuration</h4>\n <h4 translate *ngIf=\"!mo.id\">Add configuration</h4>\n </div>\n\n <form class=\"d-contents\" #configurationForm=\"ngForm\" (ngSubmit)=\"configurationForm.form.valid && save()\">\n <div class=\"modal-inner-scroll\">\n <div class=\"modal-body\">\n <c8y-form-group>\n <label translate>Name</label>\n <input\n type=\"text\"\n class=\"form-control\"\n placeholder=\"{{ 'e.g.' | translate }} hosts\"\n autocomplete=\"off\"\n required\n maxlength=\"254\"\n [(ngModel)]=\"version\"\n name=\"version\"\n />\n </c8y-form-group>\n\n <c8y-form-group>\n <label translate>Device type</label>\n <input\n type=\"text\"\n class=\"form-control\"\n placeholder=\"{{ 'e.g.' | translate }} c8y_Linux\"\n maxlength=\"254\"\n autocomplete=\"off\"\n [(ngModel)]=\"deviceType\"\n name=\"deviceType\"\n />\n </c8y-form-group>\n\n <c8y-form-group>\n <label translate>Description</label>\n <input\n type=\"text\"\n class=\"form-control\"\n placeholder=\"{{ 'e.g. Host configuration' | translate }} c8y_Linux\"\n maxlength=\"254\"\n autocomplete=\"off\"\n [(ngModel)]=\"description\"\n name=\"description\"\n />\n </c8y-form-group>\n\n <c8y-form-group>\n <label translate>Configuration type</label>\n <c8y-typeahead\n [(ngModel)]=\"selected\"\n name=\"confType\"\n placeholder=\"{{ 'e.g.' | translate }} ssh\"\n (onSearch)=\"setPipe($event)\"\n displayProperty=\"configurationType\"\n >\n <c8y-li\n *c8yFor=\"let config of configs; pipe: filterPipe; notFound: notFoundTemplate\"\n class=\"p-l-8 p-r-8 c8y-list__item--link\"\n (click)=\"selected = config; setPipe('')\"\n [active]=\"selected === config\"\n >\n <c8y-highlight\n [text]=\"config.configurationType || '--'\"\n [pattern]=\"pattern\"\n ></c8y-highlight>\n </c8y-li>\n <ng-template #notFoundTemplate>\n <c8y-li class=\"bg-gray-lighter p-8\" *ngIf=\"pattern.length > 0\">\n <span translate>No match found, add new`configuration`?</span>\n <button title=\"Create new`configuration`\" type=\"button\" class=\"btn btn-primary btn-xs m-l-16\" translate>\n Create new`configuration`\n </button>\n </c8y-li>\n </ng-template>\n </c8y-typeahead>\n </c8y-form-group>\n\n <c8y-form-group>\n <div class=\"legend form-block m-t-40\" translate>Configuration file</div>\n <c8y-file-picker\n [maxAllowedFiles]=\"1\"\n (onFilesPicked)=\"onFile($event)\"\n [uploadChoice]=\"uploadChoice\"\n [fileUrl]=\"binary.url\"\n [fileBinary]=\"binary.file\"\n >\n </c8y-file-picker>\n </c8y-form-group>\n </div>\n </div>\n\n <div class=\"modal-footer\">\n <button\n (click)=\"cancel()\"\n type=\"button\"\n class=\"btn btn-default\"\n title=\"{{ 'Cancel' | translate }}\"\n [disabled]=\"saving\"\n >\n <span translate>Cancel</span>\n </button>\n <button\n class=\"btn btn-primary\"\n type=\"submit\"\n title=\"{{ submitButtonTitle | translate }}\"\n [ngClass]=\"{ 'btn-pending': saving }\"\n [disabled]=\"\n !configurationForm.valid ||\n configurationForm.pristine ||\n (!binary?.url && !binary?.file) ||\n saving\n \"\n >\n {{ submitButtonTitle | translate }}\n </button>\n </div>\n </form>\n</div>\n"
2335
+ template: "<div class=\"viewport-modal\">\n <div class=\"modal-header dialog-header\">\n <i [c8yIcon]=\"'cogs'\"></i>\n <h4 translate *ngIf=\"mo.id\">Update configuration</h4>\n <h4 translate *ngIf=\"!mo.id\">Add configuration</h4>\n </div>\n\n <form class=\"d-contents\" #configurationForm=\"ngForm\" (ngSubmit)=\"configurationForm.form.valid && save()\">\n <div class=\"modal-inner-scroll\">\n <div class=\"modal-body\">\n <c8y-form-group>\n <label translate>Name</label>\n <input\n type=\"text\"\n class=\"form-control\"\n placeholder=\"{{ 'e.g.' | translate }} hosts\"\n autocomplete=\"off\"\n required\n maxlength=\"254\"\n [(ngModel)]=\"version\"\n name=\"version\"\n />\n </c8y-form-group>\n\n <c8y-form-group>\n <label translate>Device type</label>\n <input\n type=\"text\"\n class=\"form-control\"\n placeholder=\"{{ 'e.g.' | translate }} c8y_Linux\"\n maxlength=\"254\"\n autocomplete=\"off\"\n [(ngModel)]=\"deviceType\"\n name=\"deviceType\"\n />\n </c8y-form-group>\n\n <c8y-form-group>\n <label translate>Description</label>\n <input\n type=\"text\"\n class=\"form-control\"\n placeholder=\"{{ 'e.g. Host configuration' | translate }} c8y_Linux\"\n maxlength=\"254\"\n autocomplete=\"off\"\n [(ngModel)]=\"description\"\n name=\"description\"\n />\n </c8y-form-group>\n\n <c8y-form-group>\n <label translate>Configuration type</label>\n <c8y-typeahead\n [(ngModel)]=\"selected\"\n name=\"confType\"\n placeholder=\"{{ 'e.g.' | translate }} ssh\"\n (onSearch)=\"setPipe($event)\"\n displayProperty=\"configurationType\"\n >\n <c8y-li\n *c8yFor=\"let config of configs; pipe: filterPipe; notFound: notFoundTemplate\"\n class=\"p-l-8 p-r-8 c8y-list__item--link\"\n (click)=\"selected = config; setPipe('')\"\n [active]=\"selected === config\"\n >\n <c8y-highlight\n [text]=\"config.configurationType || '--'\"\n [pattern]=\"pattern\"\n ></c8y-highlight>\n </c8y-li>\n <ng-template #notFoundTemplate>\n <c8y-li class=\"bg-gray-lighter p-8\" *ngIf=\"pattern.length > 0\">\n <span translate>No match found, add new`configuration`?</span>\n <button title=\"Create new`configuration`\" type=\"button\" class=\"btn btn-primary btn-xs m-l-16\" translate>\n Create new`configuration`\n </button>\n </c8y-li>\n </ng-template>\n </c8y-typeahead>\n </c8y-form-group>\n\n <c8y-form-group>\n <div class=\"legend form-block m-t-40\" translate>Configuration file</div>\n <c8y-file-picker\n [maxAllowedFiles]=\"1\"\n (onFilesPicked)=\"onFile($event)\"\n [uploadChoice]=\"uploadChoice\"\n [fileUrl]=\"binary.url\"\n [fileBinary]=\"binary.file\"\n [fileUrlPopover]=\"textForConfigurationUrlPopover\"\n >\n </c8y-file-picker>\n </c8y-form-group>\n </div>\n </div>\n\n <div class=\"modal-footer\">\n <button\n (click)=\"cancel()\"\n type=\"button\"\n class=\"btn btn-default\"\n title=\"{{ 'Cancel' | translate }}\"\n [disabled]=\"saving\"\n >\n <span translate>Cancel</span>\n </button>\n <button\n class=\"btn btn-primary\"\n type=\"submit\"\n title=\"{{ submitButtonTitle | translate }}\"\n [ngClass]=\"{ 'btn-pending': saving }\"\n [disabled]=\"\n !configurationForm.valid ||\n configurationForm.pristine ||\n (!binary?.url && !binary?.file) ||\n saving\n \"\n >\n {{ submitButtonTitle | translate }}\n </button>\n </div>\n </form>\n</div>\n"
2332
2336
  })
2333
2337
  ], ConfigurationDetailComponent);
2334
2338
  return ConfigurationDetailComponent;