@c8y/ngx-components 1024.20.1 → 1024.21.3

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 (142) hide show
  1. package/fesm2022/c8y-ngx-components-ai-agent-chat.mjs +527 -12
  2. package/fesm2022/c8y-ngx-components-ai-agent-chat.mjs.map +1 -1
  3. package/fesm2022/c8y-ngx-components-ai-ai-chat.mjs +31 -9
  4. package/fesm2022/c8y-ngx-components-ai-ai-chat.mjs.map +1 -1
  5. package/fesm2022/c8y-ngx-components-ai.mjs +503 -62
  6. package/fesm2022/c8y-ngx-components-ai.mjs.map +1 -1
  7. package/fesm2022/c8y-ngx-components-alarm-event-selector.mjs +2 -2
  8. package/fesm2022/c8y-ngx-components-alarm-event-selector.mjs.map +1 -1
  9. package/fesm2022/c8y-ngx-components-alarms.mjs +3 -3
  10. package/fesm2022/c8y-ngx-components-alarms.mjs.map +1 -1
  11. package/fesm2022/c8y-ngx-components-application-access-list.mjs +1 -1
  12. package/fesm2022/c8y-ngx-components-application-access-list.mjs.map +1 -1
  13. package/fesm2022/c8y-ngx-components-application-select.mjs +1 -1
  14. package/fesm2022/c8y-ngx-components-application-select.mjs.map +1 -1
  15. package/fesm2022/c8y-ngx-components-asset-properties.mjs +3 -2
  16. package/fesm2022/c8y-ngx-components-asset-properties.mjs.map +1 -1
  17. package/fesm2022/c8y-ngx-components-auth-configuration.mjs +1 -1
  18. package/fesm2022/c8y-ngx-components-auth-configuration.mjs.map +1 -1
  19. package/fesm2022/c8y-ngx-components-bookmarks.mjs +1 -1
  20. package/fesm2022/c8y-ngx-components-bookmarks.mjs.map +1 -1
  21. package/fesm2022/c8y-ngx-components-branding-shared-lazy.mjs +1 -1
  22. package/fesm2022/c8y-ngx-components-branding-shared-lazy.mjs.map +1 -1
  23. package/fesm2022/c8y-ngx-components-cockpit-config.mjs +5 -5
  24. package/fesm2022/c8y-ngx-components-cockpit-config.mjs.map +1 -1
  25. package/fesm2022/{c8y-ngx-components-context-dashboard-dashboard-version-history.component-Jyjkv4JT.mjs → c8y-ngx-components-context-dashboard-dashboard-version-history.component-CP1afwVe.mjs} +2 -2
  26. package/fesm2022/{c8y-ngx-components-context-dashboard-dashboard-version-history.component-Jyjkv4JT.mjs.map → c8y-ngx-components-context-dashboard-dashboard-version-history.component-CP1afwVe.mjs.map} +1 -1
  27. package/fesm2022/c8y-ngx-components-context-dashboard.mjs +81 -20
  28. package/fesm2022/c8y-ngx-components-context-dashboard.mjs.map +1 -1
  29. package/fesm2022/{c8y-ngx-components-dashboard-details-advanced-tab-dashboard-details-advanced-tab.component-UEUYsXBv.mjs → c8y-ngx-components-dashboard-details-advanced-tab-dashboard-details-advanced-tab.component-CRvgIgri.mjs} +2 -2
  30. package/fesm2022/{c8y-ngx-components-dashboard-details-advanced-tab-dashboard-details-advanced-tab.component-UEUYsXBv.mjs.map → c8y-ngx-components-dashboard-details-advanced-tab-dashboard-details-advanced-tab.component-CRvgIgri.mjs.map} +1 -1
  31. package/fesm2022/c8y-ngx-components-dashboard-details-advanced-tab.mjs +2 -2
  32. package/fesm2022/c8y-ngx-components-dashboard-manager.mjs +1 -1
  33. package/fesm2022/c8y-ngx-components-dashboard-manager.mjs.map +1 -1
  34. package/fesm2022/c8y-ngx-components-datapoint-explorer-view.mjs +3 -3
  35. package/fesm2022/c8y-ngx-components-datapoint-explorer-view.mjs.map +1 -1
  36. package/fesm2022/c8y-ngx-components-datapoint-selector.mjs +2 -2
  37. package/fesm2022/c8y-ngx-components-datapoint-selector.mjs.map +1 -1
  38. package/fesm2022/c8y-ngx-components-device-profile.mjs +2 -2
  39. package/fesm2022/c8y-ngx-components-device-profile.mjs.map +1 -1
  40. package/fesm2022/c8y-ngx-components-diagnostics.mjs +1 -1
  41. package/fesm2022/c8y-ngx-components-diagnostics.mjs.map +1 -1
  42. package/fesm2022/c8y-ngx-components-echart.mjs +146 -126
  43. package/fesm2022/c8y-ngx-components-echart.mjs.map +1 -1
  44. package/fesm2022/c8y-ngx-components-ecosystem-application-plugins.mjs +2 -2
  45. package/fesm2022/c8y-ngx-components-ecosystem-application-plugins.mjs.map +1 -1
  46. package/fesm2022/c8y-ngx-components-ecosystem-shared.mjs +1 -1
  47. package/fesm2022/c8y-ngx-components-ecosystem-shared.mjs.map +1 -1
  48. package/fesm2022/c8y-ngx-components-ecosystem.mjs +4 -4
  49. package/fesm2022/c8y-ngx-components-ecosystem.mjs.map +1 -1
  50. package/fesm2022/c8y-ngx-components-events-events-timeline.mjs +1 -1
  51. package/fesm2022/c8y-ngx-components-events-events-timeline.mjs.map +1 -1
  52. package/fesm2022/c8y-ngx-components-events.mjs +2 -2
  53. package/fesm2022/c8y-ngx-components-events.mjs.map +1 -1
  54. package/fesm2022/c8y-ngx-components-icon-selector.mjs +4 -4
  55. package/fesm2022/c8y-ngx-components-icon-selector.mjs.map +1 -1
  56. package/fesm2022/c8y-ngx-components-operations-bulk-operation-list-item.mjs +1 -1
  57. package/fesm2022/c8y-ngx-components-operations-bulk-operation-list-item.mjs.map +1 -1
  58. package/fesm2022/c8y-ngx-components-operations-operations-list.mjs +1 -1
  59. package/fesm2022/c8y-ngx-components-operations-operations-list.mjs.map +1 -1
  60. package/fesm2022/c8y-ngx-components-operations-operations-timeline.mjs +1 -1
  61. package/fesm2022/c8y-ngx-components-operations-operations-timeline.mjs.map +1 -1
  62. package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-configuration.mjs +1 -1
  63. package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-configuration.mjs.map +1 -1
  64. package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-device-profile.mjs +2 -2
  65. package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-device-profile.mjs.map +1 -1
  66. package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-firmware.mjs +2 -2
  67. package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-firmware.mjs.map +1 -1
  68. package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-software.mjs +2 -2
  69. package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-software.mjs.map +1 -1
  70. package/fesm2022/c8y-ngx-components-protocol-lpwan.mjs +5 -5
  71. package/fesm2022/c8y-ngx-components-protocol-lpwan.mjs.map +1 -1
  72. package/fesm2022/c8y-ngx-components-protocol-opcua.mjs +1 -1
  73. package/fesm2022/c8y-ngx-components-protocol-opcua.mjs.map +1 -1
  74. package/fesm2022/c8y-ngx-components-register-device.mjs +3 -3
  75. package/fesm2022/c8y-ngx-components-register-device.mjs.map +1 -1
  76. package/fesm2022/c8y-ngx-components-remote-access-configurations.mjs +1 -1
  77. package/fesm2022/c8y-ngx-components-remote-access-configurations.mjs.map +1 -1
  78. package/fesm2022/c8y-ngx-components-replace-device-replace-device-wizard.mjs +1 -1
  79. package/fesm2022/c8y-ngx-components-replace-device-replace-device-wizard.mjs.map +1 -1
  80. package/fesm2022/c8y-ngx-components-report-dashboard.mjs +1 -1
  81. package/fesm2022/c8y-ngx-components-report-dashboard.mjs.map +1 -1
  82. package/fesm2022/c8y-ngx-components-repository-configuration.mjs +4 -4
  83. package/fesm2022/c8y-ngx-components-repository-configuration.mjs.map +1 -1
  84. package/fesm2022/c8y-ngx-components-repository-firmware.mjs +4 -4
  85. package/fesm2022/c8y-ngx-components-repository-firmware.mjs.map +1 -1
  86. package/fesm2022/c8y-ngx-components-repository-shared.mjs +2 -2
  87. package/fesm2022/c8y-ngx-components-repository-shared.mjs.map +1 -1
  88. package/fesm2022/c8y-ngx-components-repository-software.mjs +3 -3
  89. package/fesm2022/c8y-ngx-components-repository-software.mjs.map +1 -1
  90. package/fesm2022/c8y-ngx-components-static-assets-modal.mjs +1 -1
  91. package/fesm2022/c8y-ngx-components-static-assets-modal.mjs.map +1 -1
  92. package/fesm2022/c8y-ngx-components-tracking.mjs +1 -1
  93. package/fesm2022/c8y-ngx-components-tracking.mjs.map +1 -1
  94. package/fesm2022/c8y-ngx-components-trusted-certificates.mjs +1 -1
  95. package/fesm2022/c8y-ngx-components-trusted-certificates.mjs.map +1 -1
  96. package/fesm2022/c8y-ngx-components-widgets-definitions-html-widget.mjs +17 -1
  97. package/fesm2022/c8y-ngx-components-widgets-definitions-html-widget.mjs.map +1 -1
  98. package/fesm2022/c8y-ngx-components-widgets-definitions-scada.mjs +21 -1
  99. package/fesm2022/c8y-ngx-components-widgets-definitions-scada.mjs.map +1 -1
  100. package/fesm2022/c8y-ngx-components-widgets-implementations-asset-table.mjs +60 -31
  101. package/fesm2022/c8y-ngx-components-widgets-implementations-asset-table.mjs.map +1 -1
  102. package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-graph.mjs +2 -2
  103. package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-graph.mjs.map +1 -1
  104. package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-list.mjs +2 -2
  105. package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-list.mjs.map +1 -1
  106. package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-table.mjs +1 -1
  107. package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-table.mjs.map +1 -1
  108. package/fesm2022/c8y-ngx-components-widgets-implementations-image.mjs +1 -1
  109. package/fesm2022/c8y-ngx-components-widgets-implementations-image.mjs.map +1 -1
  110. package/fesm2022/c8y-ngx-components-widgets-implementations-quick-links.mjs +1 -1
  111. package/fesm2022/c8y-ngx-components-widgets-implementations-quick-links.mjs.map +1 -1
  112. package/fesm2022/c8y-ngx-components-widgets-implementations-scada.mjs +1 -1
  113. package/fesm2022/c8y-ngx-components-widgets-implementations-scada.mjs.map +1 -1
  114. package/fesm2022/c8y-ngx-components.mjs +500 -38
  115. package/fesm2022/c8y-ngx-components.mjs.map +1 -1
  116. package/locales/de.po +72 -0
  117. package/locales/es.po +72 -0
  118. package/locales/fr.po +72 -0
  119. package/locales/ja_JP.po +72 -0
  120. package/locales/ko.po +72 -0
  121. package/locales/locales.pot +72 -3
  122. package/locales/nl.po +72 -0
  123. package/locales/pl.po +73 -1
  124. package/locales/pt_BR.po +74 -2
  125. package/locales/zh_CN.po +72 -0
  126. package/locales/zh_TW.po +72 -0
  127. package/package.json +1 -1
  128. package/types/c8y-ngx-components-ai-agent-chat.d.ts +201 -3
  129. package/types/c8y-ngx-components-ai-agent-chat.d.ts.map +1 -1
  130. package/types/c8y-ngx-components-ai-ai-chat.d.ts +14 -4
  131. package/types/c8y-ngx-components-ai-ai-chat.d.ts.map +1 -1
  132. package/types/c8y-ngx-components-ai.d.ts +157 -2
  133. package/types/c8y-ngx-components-ai.d.ts.map +1 -1
  134. package/types/c8y-ngx-components-asset-properties.d.ts.map +1 -1
  135. package/types/c8y-ngx-components-context-dashboard.d.ts +37 -3
  136. package/types/c8y-ngx-components-context-dashboard.d.ts.map +1 -1
  137. package/types/c8y-ngx-components-echart.d.ts +6 -0
  138. package/types/c8y-ngx-components-echart.d.ts.map +1 -1
  139. package/types/c8y-ngx-components-widgets-implementations-asset-table.d.ts +5 -0
  140. package/types/c8y-ngx-components-widgets-implementations-asset-table.d.ts.map +1 -1
  141. package/types/c8y-ngx-components.d.ts +310 -12
  142. package/types/c8y-ngx-components.d.ts.map +1 -1
@@ -379,7 +379,7 @@ class BulkOperationListItemComponent {
379
379
  return this.bulkOperation.generalStatus === this.bulkOperationGeneralStatus.FAILED;
380
380
  }
381
381
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.19", ngImport: i0, type: BulkOperationListItemComponent, deps: [{ token: BulkOperationListItemService }, { token: i1.BulkOperationsService }, { token: i3.ModalService }, { token: i3.AlertService }, { token: i2.BsModalService }], target: i0.ɵɵFactoryTarget.Component }); }
382
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.19", type: BulkOperationListItemComponent, isStandalone: true, selector: "c8y-bulk-operation-list-item", inputs: { bulkOperation: "bulkOperation", detailsCollapsed: "detailsCollapsed", readOnly: "readOnly" }, outputs: { showFailedOperation: "showFailedOperation", reload: "reload" }, viewQueries: [{ propertyName: "listItem", first: true, predicate: ["listItem"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<c8y-li\n class=\"c8y-list__item--double-actions\"\n [ngClass]=\"{ 'c8y-list__item--no-expand': !detailsCollapsed }\"\n [collapsed]=\"detailsCollapsed\"\n #listItem\n id=\"{{ bulkOperation.id }}\"\n>\n <c8y-li-icon>\n <i\n [c8yIcon]=\"getOperationStatusOptions().icon\"\n [ngClass]=\"getOperationStatusOptions().styleClass\"\n [tooltip]=\"getOperationStatusOptions().label | translate\"\n ></i>\n </c8y-li-icon>\n <div [ngClass]=\"{ 'content-flex-58': !readOnly, 'content-flex-50': readOnly }\">\n <div class=\"col-5\">\n <button\n class=\"btn-clean\"\n type=\"button\"\n title=\"{{ bulkOperation.id }} - {{\n bulkOperation.operationPrototype.description | translate\n }}\"\n (click)=\"listItem.toggleCollapsed()\"\n >\n <span class=\"text-truncate\">\n <strong class=\"text-muted m-r-4\">{{ bulkOperation.id }}</strong>\n {{ bulkOperation.operationPrototype.description | translate }}\n </span>\n </button>\n </div>\n <div class=\"flex-grow\">\n <div class=\"m-t-8 visible-xs\"></div>\n <hr *ngIf=\"isStatusCanceled(); else statusNotCanceled\" class=\"m-t-16 m-b-0 visible-xs\" />\n <ng-template #statusNotCanceled>\n <div\n [class]=\"progressBarClass\"\n title=\"{{ progressBarStatus | c8yNumber: 'floor':'1.0-0' }}%\"\n >\n <div\n [class]=\"progressBarColor\"\n role=\"progressbar\"\n [attr.aria-label]=\"'Progress' | translate\"\n aria-valuenow=\"0\"\n aria-valuemin=\"0\"\n aria-valuemax=\"100\"\n [style.width.%]=\"progressBarStatus\"\n >\n <span *ngIf=\"progressBarStatus !== 0\">\n {{ progressBarStatus | c8yNumber: 'floor':'1.0-0' }}%\n </span>\n </div>\n </div>\n </ng-template>\n </div>\n <div class=\"col-4\">\n <div class=\"p-t-8 visible-xs\"></div>\n <small *ngIf=\"bulkOperation.progress.successful > 0\" class=\"m-r-8 icon-flex\">\n <i c8yIcon=\"check-circle\" class=\"text-success m-r-4\"></i>\n <span\n ngNonBindable\n translate\n [translateParams]=\"{ bulkOperationsCountSuccessful: bulkOperation.progress.successful }\"\n >\n {{ bulkOperationsCountSuccessful }} successful\n </span>\n </small>\n <small *ngIf=\"bulkOperation.progress.failed > 0\" class=\"m-r-8 icon-flex\">\n <i c8yIcon=\"warning\" class=\"text-danger m-r-4\"></i>\n <span\n ngNonBindable\n translate\n [translateParams]=\"{ bulkOperationsCountFailed: bulkOperation.progress.failed }\"\n >\n {{ bulkOperationsCountFailed }} failed\n </span>\n </small>\n <small *ngIf=\"bulkOperation.progress.executing > 0\" class=\"m-r-8 icon-flex\">\n <i c8yIcon=\"refresh\" class=\"text-primary m-r-4\"></i>\n <span\n ngNonBindable\n translate\n [translateParams]=\"{ bulkOperationsCountExecuting: bulkOperation.progress.executing }\"\n >\n {{ bulkOperationsCountExecuting }} executing\n </span>\n </small>\n <small *ngIf=\"bulkOperation.progress.pending > 0\" class=\"m-r-8 icon-flex\">\n <i c8yIcon=\"clock-o\" class=\"text-primary m-r-4\"></i>\n <span\n ngNonBindable\n translate\n [translateParams]=\"{ bulkOperationsCountPending: bulkOperation.progress.pending }\"\n >\n {{ bulkOperationsCountPending }} pending\n </span>\n </small>\n </div>\n </div>\n <div class=\"c8y-list__item__footer\">\n <div class=\"m-r-16\">\n <span class=\"text-label-small m-r-4\" translate>Start</span>\n <small class=\"icon-flex\">\n <i c8yIcon=\"calendar\" class=\"m-r-4\"></i>\n <span>\n {{ bulkOperation.startDate | c8yDate }}\n </span>\n </small>\n </div>\n <div class=\"m-r-16\" *ngIf=\"bulkOperationGeneralStatus.CANCELED !== bulkOperation.generalStatus\">\n <span class=\"text-label-small m-r-4\" translate>Finish</span>\n\n <small class=\"icon-flex\">\n <i c8yIcon=\"calendar\" class=\"m-r-4\"></i>\n <span>{{ finishDate | c8yDate }}</span>\n </small>\n <button\n class=\"btn-help btn-help--sm\"\n type=\"button\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ finishDatePopoverText | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n *ngIf=\"isStatusScheduled() || isStatusExecutingOrExecutingWithError()\"\n ></button>\n </div>\n </div>\n <ng-container *ngIf=\"!readOnly\">\n <c8y-li-action\n *ngIf=\"isStatusScheduled()\"\n label=\"{{ 'Edit schedule' | translate }}\"\n (click)=\"editSchedule()\"\n icon=\"pencil\"\n c8yProductExperience\n [actionName]=\"BULK_OPERATION_EVENT\"\n ></c8y-li-action>\n <c8y-li-action\n *ngIf=\"\n isStatusScheduled() || (isStatusExecutingOrExecutingWithError() && !allOperationsCreated())\n \"\n label=\"{{ 'Cancel bulk operation' | translate }}\"\n (click)=\"cancelBulkOperation()\"\n icon=\"remove\"\n c8yProductExperience\n [actionName]=\"BULK_OPERATION_EVENT\"\n ></c8y-li-action>\n <c8y-li-action\n *ngIf=\"isStatusFailed()\"\n label=\"{{ 'Retry failed operations' | translate }}\"\n (click)=\"retryFailedOperation()\"\n icon=\"repeat\"\n c8yProductExperience\n [actionName]=\"BULK_OPERATION_EVENT\"\n ></c8y-li-action>\n <c8y-li-action\n *ngIf=\"isStatusFailed()\"\n label=\"{{ 'Set operation to SUCCESSFUL' | translate }}\"\n (click)=\"setToSuccessful()\"\n icon=\"check-circle\"\n c8yProductExperience\n [actionName]=\"BULK_OPERATION_EVENT\"\n ></c8y-li-action>\n </ng-container>\n <c8y-li-collapse class=\"m-b-16\">\n <c8y-operation-details-tabs\n *ngIf=\"!listItem.collapsed\"\n [operation]=\"bulkOperation\"\n [readOnly]=\"readOnly\"\n (onRetryFailedOperations)=\"retryFailedOperation()\"\n (showFailedOperation)=\"openFailedOperation($event)\"\n [bulkOperationModalDetailsService]=\"bulkOperationListItemService\"\n ></c8y-operation-details-tabs>\n </c8y-li-collapse>\n</c8y-li>\n", dependencies: [{ kind: "component", type: ListItemComponent, selector: "c8y-list-item, c8y-li", inputs: ["active", "highlighted", "emptyActions", "dense", "collapsed", "selectable"], outputs: ["collapsedChange"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: ListItemIconComponent, selector: "c8y-list-item-icon, c8y-li-icon", inputs: ["icon", "status"] }, { kind: "directive", type: IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: TooltipDirective, selector: "[tooltip], [tooltipHtml]", inputs: ["adaptivePosition", "tooltip", "placement", "triggers", "container", "containerClass", "boundariesElement", "isOpen", "isDisabled", "delay", "tooltipHtml", "tooltipPlacement", "tooltipIsOpen", "tooltipEnable", "tooltipAppendToBody", "tooltipAnimation", "tooltipClass", "tooltipContext", "tooltipPopupDelay", "tooltipFadeDuration", "tooltipTrigger"], outputs: ["tooltipChange", "onShown", "onHidden", "tooltipStateChanged"], exportAs: ["bs-tooltip"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: PopoverDirective, selector: "[popover]", inputs: ["adaptivePosition", "boundariesElement", "popover", "popoverContext", "popoverTitle", "placement", "outsideClick", "triggers", "container", "containerClass", "isOpen", "delay"], outputs: ["onShown", "onHidden"], exportAs: ["bs-popover"] }, { kind: "component", type: ListItemActionComponent, selector: "c8y-list-item-action, c8y-li-action", inputs: ["label", "icon", "disabled"], outputs: ["click"] }, { kind: "directive", type: ProductExperienceDirective, selector: "[c8yProductExperience]", inputs: ["actionName", "actionData", "inherit", "suppressDataOverriding"] }, { kind: "component", type: ListItemCollapseComponent, selector: "c8y-list-item-collapse, c8y-li-collapse", inputs: ["collapseWay"] }, { kind: "component", type: OperationDetailsTabsComponent, selector: "c8y-operation-details-tabs", inputs: ["operation", "readOnly", "bulkOperationModalDetailsService"], outputs: ["onRetryFailedOperations", "showFailedOperation"] }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: DatePipe, name: "c8yDate" }, { kind: "pipe", type: NumberPipe, name: "c8yNumber" }], changeDetection: i0.ChangeDetectionStrategy.Eager }); }
382
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.19", type: BulkOperationListItemComponent, isStandalone: true, selector: "c8y-bulk-operation-list-item", inputs: { bulkOperation: "bulkOperation", detailsCollapsed: "detailsCollapsed", readOnly: "readOnly" }, outputs: { showFailedOperation: "showFailedOperation", reload: "reload" }, viewQueries: [{ propertyName: "listItem", first: true, predicate: ["listItem"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<c8y-li\n class=\"c8y-list__item--double-actions\"\n [ngClass]=\"{ 'c8y-list__item--no-expand': !detailsCollapsed }\"\n [collapsed]=\"detailsCollapsed\"\n #listItem\n id=\"{{ bulkOperation.id }}\"\n>\n <c8y-li-icon>\n <i\n [c8yIcon]=\"getOperationStatusOptions().icon\"\n [ngClass]=\"getOperationStatusOptions().styleClass\"\n [tooltip]=\"getOperationStatusOptions().label | translate\"\n ></i>\n </c8y-li-icon>\n <div [ngClass]=\"{ 'content-flex-58': !readOnly, 'content-flex-50': readOnly }\">\n <div class=\"col-5\">\n <button\n class=\"btn-clean\"\n type=\"button\"\n title=\"{{ bulkOperation.id }} - {{\n bulkOperation.operationPrototype.description | translate\n }}\"\n (click)=\"listItem.toggleCollapsed()\"\n >\n <span class=\"text-truncate\">\n <strong class=\"text-muted m-r-4\">{{ bulkOperation.id }}</strong>\n {{ bulkOperation.operationPrototype.description | translate }}\n </span>\n </button>\n </div>\n <div class=\"flex-grow\">\n <div class=\"m-t-8 visible-xs\"></div>\n <hr *ngIf=\"isStatusCanceled(); else statusNotCanceled\" class=\"m-t-16 m-b-0 visible-xs\" />\n <ng-template #statusNotCanceled>\n <div\n [class]=\"progressBarClass\"\n title=\"{{ progressBarStatus | c8yNumber: 'floor':'1.0-0' }}%\"\n >\n <div\n [class]=\"progressBarColor\"\n role=\"progressbar\"\n [attr.aria-label]=\"'Progress' | translate\"\n aria-valuenow=\"0\"\n aria-valuemin=\"0\"\n aria-valuemax=\"100\"\n [style.width.%]=\"progressBarStatus\"\n >\n <span *ngIf=\"progressBarStatus !== 0\">\n {{ progressBarStatus | c8yNumber: 'floor':'1.0-0' }}%\n </span>\n </div>\n </div>\n </ng-template>\n </div>\n <div class=\"col-4\">\n <div class=\"p-t-8 visible-xs\"></div>\n <small *ngIf=\"bulkOperation.progress.successful > 0\" class=\"m-r-8 icon-flex\">\n <i c8yIcon=\"check-circle\" class=\"text-success m-r-4\"></i>\n <span\n ngNonBindable\n translate\n [translateParams]=\"{ bulkOperationsCountSuccessful: bulkOperation.progress.successful }\"\n >\n {{ bulkOperationsCountSuccessful }} successful\n </span>\n </small>\n <small *ngIf=\"bulkOperation.progress.failed > 0\" class=\"m-r-8 icon-flex\">\n <i c8yIcon=\"warning\" class=\"text-danger m-r-4\"></i>\n <span\n ngNonBindable\n translate\n [translateParams]=\"{ bulkOperationsCountFailed: bulkOperation.progress.failed }\"\n >\n {{ bulkOperationsCountFailed }} failed\n </span>\n </small>\n <small *ngIf=\"bulkOperation.progress.executing > 0\" class=\"m-r-8 icon-flex\">\n <i c8yIcon=\"refresh\" class=\"text-primary m-r-4\"></i>\n <span\n ngNonBindable\n translate\n [translateParams]=\"{ bulkOperationsCountExecuting: bulkOperation.progress.executing }\"\n >\n {{ bulkOperationsCountExecuting }} executing\n </span>\n </small>\n <small *ngIf=\"bulkOperation.progress.pending > 0\" class=\"m-r-8 icon-flex\">\n <i c8yIcon=\"clock-o\" class=\"text-primary m-r-4\"></i>\n <span\n ngNonBindable\n translate\n [translateParams]=\"{ bulkOperationsCountPending: bulkOperation.progress.pending }\"\n >\n {{ bulkOperationsCountPending }} pending\n </span>\n </small>\n </div>\n </div>\n <div class=\"c8y-list__item__footer\">\n <div class=\"m-r-16\">\n <span class=\"text-label-small m-r-4\" translate>Start</span>\n <small class=\"icon-flex\">\n <i c8yIcon=\"calendar\" class=\"m-r-4\"></i>\n <span>\n {{ bulkOperation.startDate | c8yDate }}\n </span>\n </small>\n </div>\n <div class=\"m-r-16\" *ngIf=\"bulkOperationGeneralStatus.CANCELED !== bulkOperation.generalStatus\">\n <span class=\"text-label-small m-r-4\" translate>Finish</span>\n\n <small class=\"icon-flex\">\n <i c8yIcon=\"calendar\" class=\"m-r-4\"></i>\n <span>{{ finishDate | c8yDate }}</span>\n </small>\n <button\n class=\"btn-help btn-help--sm\"\n type=\"button\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ finishDatePopoverText | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n *ngIf=\"isStatusScheduled() || isStatusExecutingOrExecutingWithError()\"\n ></button>\n </div>\n </div>\n <ng-container *ngIf=\"!readOnly\">\n <c8y-li-action\n *ngIf=\"isStatusScheduled()\"\n label=\"{{ 'Edit schedule' | translate }}\"\n (click)=\"editSchedule()\"\n icon=\"pencil\"\n c8yProductExperience\n [actionName]=\"BULK_OPERATION_EVENT\"\n ></c8y-li-action>\n <c8y-li-action\n *ngIf=\"\n isStatusScheduled() || (isStatusExecutingOrExecutingWithError() && !allOperationsCreated())\n \"\n label=\"{{ 'Cancel bulk operation' | translate }}\"\n (click)=\"cancelBulkOperation()\"\n icon=\"remove\"\n c8yProductExperience\n [actionName]=\"BULK_OPERATION_EVENT\"\n ></c8y-li-action>\n <c8y-li-action\n *ngIf=\"isStatusFailed()\"\n label=\"{{ 'Retry failed operations' | translate }}\"\n (click)=\"retryFailedOperation()\"\n icon=\"repeat\"\n c8yProductExperience\n [actionName]=\"BULK_OPERATION_EVENT\"\n ></c8y-li-action>\n <c8y-li-action\n *ngIf=\"isStatusFailed()\"\n label=\"{{ 'Set operation to SUCCESSFUL' | translate }}\"\n (click)=\"setToSuccessful()\"\n icon=\"check-circle\"\n c8yProductExperience\n [actionName]=\"BULK_OPERATION_EVENT\"\n ></c8y-li-action>\n </ng-container>\n <c8y-li-collapse class=\"m-b-16\">\n <c8y-operation-details-tabs\n *ngIf=\"!listItem.collapsed\"\n [operation]=\"bulkOperation\"\n [readOnly]=\"readOnly\"\n (onRetryFailedOperations)=\"retryFailedOperation()\"\n (showFailedOperation)=\"openFailedOperation($event)\"\n [bulkOperationModalDetailsService]=\"bulkOperationListItemService\"\n ></c8y-operation-details-tabs>\n </c8y-li-collapse>\n</c8y-li>\n", dependencies: [{ kind: "component", type: ListItemComponent, selector: "c8y-list-item, c8y-li", inputs: ["active", "highlighted", "emptyActions", "dense", "collapsed", "selectable", "selectOnClick"], outputs: ["collapsedChange"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: ListItemIconComponent, selector: "c8y-list-item-icon, c8y-li-icon", inputs: ["icon", "status"] }, { kind: "directive", type: IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: TooltipDirective, selector: "[tooltip], [tooltipHtml]", inputs: ["adaptivePosition", "tooltip", "placement", "triggers", "container", "containerClass", "boundariesElement", "isOpen", "isDisabled", "delay", "tooltipHtml", "tooltipPlacement", "tooltipIsOpen", "tooltipEnable", "tooltipAppendToBody", "tooltipAnimation", "tooltipClass", "tooltipContext", "tooltipPopupDelay", "tooltipFadeDuration", "tooltipTrigger"], outputs: ["tooltipChange", "onShown", "onHidden", "tooltipStateChanged"], exportAs: ["bs-tooltip"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: PopoverDirective, selector: "[popover]", inputs: ["adaptivePosition", "boundariesElement", "popover", "popoverContext", "popoverTitle", "placement", "outsideClick", "triggers", "container", "containerClass", "isOpen", "delay"], outputs: ["onShown", "onHidden"], exportAs: ["bs-popover"] }, { kind: "component", type: ListItemActionComponent, selector: "c8y-list-item-action, c8y-li-action", inputs: ["label", "icon", "disabled"], outputs: ["click"] }, { kind: "directive", type: ProductExperienceDirective, selector: "[c8yProductExperience]", inputs: ["actionName", "actionData", "inherit", "suppressDataOverriding"] }, { kind: "component", type: ListItemCollapseComponent, selector: "c8y-list-item-collapse, c8y-li-collapse", inputs: ["collapseWay"] }, { kind: "component", type: OperationDetailsTabsComponent, selector: "c8y-operation-details-tabs", inputs: ["operation", "readOnly", "bulkOperationModalDetailsService"], outputs: ["onRetryFailedOperations", "showFailedOperation"] }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: DatePipe, name: "c8yDate" }, { kind: "pipe", type: NumberPipe, name: "c8yNumber" }], changeDetection: i0.ChangeDetectionStrategy.Eager }); }
383
383
  }
384
384
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.19", ngImport: i0, type: BulkOperationListItemComponent, decorators: [{
385
385
  type: Component,
@@ -1 +1 @@
1
- {"version":3,"file":"c8y-ngx-components-operations-bulk-operation-list-item.mjs","sources":["../../operations/bulk-operation-list-item/bulk-operation-list-item.model.ts","../../operations/bulk-operation-list-item/bulk-operation-wrapper.model.ts","../../operations/bulk-operation-list-item/modal-body-host.directive.ts","../../operations/bulk-operation-list-item/bulk-operation-wrapper.component.ts","../../operations/bulk-operation-list-item/bulk-operation-wrapper.component.html","../../operations/bulk-operation-list-item/bulk-operation-list-item.service.ts","../../operations/bulk-operation-list-item/modals/bulk-operations-reschedule-modal.component.ts","../../operations/bulk-operation-list-item/modals/bulk-operations-reschedule-modal.component.html","../../operations/bulk-operation-list-item/bulk-operation-list-item.component.ts","../../operations/bulk-operation-list-item/bulk-operation-list-item.component.html","../../operations/bulk-operation-list-item/bulk-operation-list-item.module.ts","../../operations/bulk-operation-list-item/c8y-ngx-components-operations-bulk-operation-list-item.ts"],"sourcesContent":["import { OperationBulkGeneralStatus } from '@c8y/client';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { OperationStatusOption } from '@c8y/ngx-components/operations/shared';\n\nexport type OperationStatusOptionsMap = {\n [key in keyof typeof BULK_OPERATION_STATUS_LABELS]?: OperationStatusOption;\n};\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: OperationStatusOptionsMap = {\n SCHEDULED: {\n label: BULK_OPERATION_STATUS_LABELS.SCHEDULED,\n generalStatuses: [OperationBulkGeneralStatus.SCHEDULED],\n icon: 'calendar',\n styleClass: 'text-info'\n },\n EXECUTING: {\n label: BULK_OPERATION_STATUS_LABELS.EXECUTING,\n generalStatuses: [\n OperationBulkGeneralStatus.EXECUTING,\n OperationBulkGeneralStatus.EXECUTING_WITH_ERROR\n ],\n icon: 'refresh',\n styleClass: 'text-primary'\n },\n DELETED: {\n label: BULK_OPERATION_STATUS_LABELS.DELETED,\n generalStatuses: [OperationBulkGeneralStatus.DELETED],\n icon: 'delete-document',\n styleClass: 'text-muted'\n },\n CANCELED: {\n label: BULK_OPERATION_STATUS_LABELS.CANCELED,\n generalStatuses: [OperationBulkGeneralStatus.CANCELED],\n icon: 'ban',\n styleClass: 'text-primary'\n },\n FAILED: {\n label: BULK_OPERATION_STATUS_LABELS.FAILED,\n generalStatuses: [OperationBulkGeneralStatus.FAILED],\n icon: 'exclamation-circle',\n styleClass: 'text-danger'\n },\n SUCCESSFUL: {\n label: BULK_OPERATION_STATUS_LABELS.SUCCESSFUL,\n generalStatuses: [OperationBulkGeneralStatus.SUCCESSFUL],\n icon: 'check-circle',\n styleClass: 'text-success'\n }\n};\n","import { EventEmitter, InjectionToken, Type } from '@angular/core';\nimport { IOperationBulk } from '@c8y/client';\n\nexport const BULK_OPERATION_WRAPPER_MODAL_BODY_COMPONENT =\n new InjectionToken<BulkOperationDetailsModalBodyConfiguration>(\n 'BulkOperationWrapperModalBodyComponent'\n );\n\nexport interface BulkOperationDetailsModalBodyConfiguration {\n component: Type<BulkOperationDetailsModalBody>;\n config?: object;\n}\n\nexport interface BulkOperationDetailsModalBody {\n bulkOperation: Partial<IOperationBulk>;\n showFailedOperation: EventEmitter<any>;\n}\n","import { Directive, ViewContainerRef } from '@angular/core';\n\n@Directive({ selector: '[modalBodyHost]' })\nexport class ModalBodyHostDirective {\n constructor(public viewContainerRef: ViewContainerRef) {}\n}\n","import { Component, Inject, Input, OnDestroy, OnInit, Optional, ViewChild, ChangeDetectionStrategy } from '@angular/core';\nimport { IOperationBulk } from '@c8y/client';\nimport { BulkOperationsService } from '@c8y/ngx-components/operations/bulk-operations-service';\nimport { assign } from 'lodash-es';\nimport { BsModalRef, BsModalService } from 'ngx-bootstrap/modal';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport {\n BulkOperationDetailsModalBody,\n BulkOperationDetailsModalBodyConfiguration,\n BULK_OPERATION_WRAPPER_MODAL_BODY_COMPONENT\n} from './bulk-operation-wrapper.model';\nimport { ModalBodyHostDirective } from './modal-body-host.directive';\nimport { C8yTranslatePipe } from '@c8y/ngx-components';\n@Component({\n selector: 'c8y-bulk-operations-wrapper',\n templateUrl: './bulk-operation-wrapper.component.html',\n imports: [ModalBodyHostDirective, C8yTranslatePipe],\n changeDetection: ChangeDetectionStrategy.Eager\n})\nexport class BulkOperationWrapperComponent implements OnInit, OnDestroy {\n @Input() bulkOperation: Partial<IOperationBulk>;\n\n @ViewChild(ModalBodyHostDirective, { static: true })\n modalBodyHost: ModalBodyHostDirective;\n\n private destroyed$: Subject<void> = new Subject();\n\n constructor(\n public bulkOperationsService: BulkOperationsService,\n public modalRef: BsModalRef,\n private modalService: BsModalService,\n @Optional()\n @Inject(BULK_OPERATION_WRAPPER_MODAL_BODY_COMPONENT)\n private modalBodyConfig: BulkOperationDetailsModalBodyConfiguration\n ) {}\n\n ngOnInit(): void {\n if (this.modalBodyConfig) {\n const componentRef =\n this.modalBodyHost.viewContainerRef.createComponent<BulkOperationDetailsModalBody>(\n this.modalBodyConfig.component\n );\n assign(componentRef.instance, this.modalBodyConfig.config);\n componentRef.instance.bulkOperation = this.bulkOperation;\n componentRef.instance.showFailedOperation\n .pipe(takeUntil(this.destroyed$))\n .subscribe(event => this.openDetails(event));\n }\n }\n\n ngOnDestroy(): void {\n this.destroyed$.next();\n this.destroyed$.complete();\n }\n\n // openDetails function needs to be defined in the both places (component and the service) to avoid circular dependency.\n async openDetails(bulkOperationId: string | number) {\n const bulkOperation: IOperationBulk = (\n await this.bulkOperationsService.getBulkOperationById(bulkOperationId)\n ).data;\n const initialState = { bulkOperation };\n this.modalService.show(BulkOperationWrapperComponent, {\n initialState,\n class: 'modal-lg',\n ariaDescribedby: 'modal-body',\n ariaLabelledBy: 'modal-title'\n });\n }\n}\n","<div class=\"viewport-modal\">\n <div class=\"modal-header\">\n <h3 id=\"modal-title\">{{ 'Bulk operation details' | translate }}</h3>\n </div>\n\n <div class=\"modal-inner-scroll\" id=\"modal-body\">\n <ng-container modalBodyHost></ng-container>\n </div>\n\n <div class=\"modal-footer\">\n <button\n title=\"{{ 'Close' | translate }}\"\n type=\"button\"\n class=\"btn btn-default\"\n (click)=\"modalRef.hide()\"\n >\n {{ 'Close' | translate }}\n </button>\n </div>\n</div>\n","import { Injectable } from '@angular/core';\nimport { IOperationBulk } from '@c8y/client';\nimport { BulkOperationModalDetailsService } from '@c8y/ngx-components/operations/bulk-operation-modal-details';\nimport { BulkOperationsService } from '@c8y/ngx-components/operations/bulk-operations-service';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { BulkOperationWrapperComponent } from './bulk-operation-wrapper.component';\n\n@Injectable({ providedIn: 'root' })\nexport class BulkOperationListItemService implements BulkOperationModalDetailsService {\n constructor(\n private bulkOperationsService: BulkOperationsService,\n private modalService: BsModalService\n ) {}\n\n async openDetails(bulkOperationId: string | number) {\n const bulkOperation: IOperationBulk = (\n await this.bulkOperationsService.getBulkOperationById(bulkOperationId)\n ).data;\n const initialState = { bulkOperation };\n this.modalService.show(BulkOperationWrapperComponent, {\n initialState,\n class: 'modal-lg',\n ariaDescribedby: 'modal-body',\n ariaLabelledBy: 'modal-title'\n });\n }\n}\n","import { Component, HostListener, OnInit, ChangeDetectionStrategy } from '@angular/core';\nimport { IOperationBulk } from '@c8y/client';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport {\n AlertService,\n GainsightService,\n IconDirective,\n ProductExperienceDirective,\n C8yTranslateDirective,\n C8yTranslatePipe\n} from '@c8y/ngx-components';\nimport {\n OperationSchedule,\n OperationSchedulerComponent\n} from '@c8y/ngx-components/operations/bulk-operation-scheduler';\nimport { BulkOperationsService } from '@c8y/ngx-components/operations/bulk-operations-service';\nimport { BULK_OPERATION_EVENT } from '@c8y/ngx-components/operations/product-experience';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { Subject } from 'rxjs';\nimport { OperationSummaryComponent } from '@c8y/ngx-components/operations/operation-summary';\nimport { FormsModule } from '@angular/forms';\n@Component({\n selector: 'c8y-bulk-operations-reschedule-modal',\n templateUrl: 'bulk-operations-reschedule-modal.component.html',\n imports: [\n IconDirective,\n OperationSummaryComponent,\n OperationSchedulerComponent,\n FormsModule,\n ProductExperienceDirective,\n C8yTranslateDirective,\n C8yTranslatePipe\n ],\n changeDetection: ChangeDetectionStrategy.Eager\n})\nexport class BulkOperationsRescheduleModalComponent implements OnInit {\n BULK_OPERATION_EVENT = BULK_OPERATION_EVENT;\n closeSubject: Subject<IOperationBulk> = new Subject();\n dateAndDelay: OperationSchedule;\n bulkOperation: Partial<IOperationBulk>;\n isRetryOperation: boolean;\n modalTitle: string;\n\n private readonly CARRIAGE_RETURN_CODE = 'Escape';\n\n constructor(\n public bsModalRef: BsModalRef,\n private bulkOperationsService: BulkOperationsService,\n private alert: AlertService,\n private gainsightService: GainsightService\n ) {}\n\n @HostListener('window:keyup', ['$event'])\n onKeyUp(event: KeyboardEvent) {\n if (event.code === this.CARRIAGE_RETURN_CODE) {\n this.gainsightService.triggerEvent('modalDialog', {\n title: this.modalTitle,\n result: 'Cancel'\n });\n }\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","<div class=\"viewport-modal\">\n <div class=\"modal-header dialog-header\">\n <i c8yIcon=\"c8y-energy\"></i>\n <h4 id=\"modal-title\">{{ modalTitle | translate }}</h4>\n </div>\n <div class=\"modal-inner-scroll\" id=\"modal-body\">\n <div class=\"modal-body\">\n <div class=\"text-center\">\n <c8y-operation-summary\n [description]=\"bulkOperation.operationPrototype.description\"\n ></c8y-operation-summary>\n </div>\n <div class=\"p-t-16 center-block\" style=\"max-width: 300px\">\n <c8y-operation-scheduler\n [(ngModel)]=\"dateAndDelay\"\n #scheduler=\"ngModel\"\n ></c8y-operation-scheduler>\n </div>\n </div>\n </div>\n <div class=\"modal-footer\">\n <button\n (click)=\"onCancel()\"\n type=\"button\"\n class=\"btn btn-default\"\n title=\"{{ 'Cancel' | translate }}\"\n c8yProductExperience\n [actionName]=\"BULK_OPERATION_EVENT\"\n [actionData]=\"{ title: modalTitle, result: 'Cancel' }\"\n >\n <span translate>Cancel</span>\n </button>\n <button\n id=\"save-btn\"\n (click)=\"onSave()\"\n type=\"button\"\n class=\"btn btn-primary\"\n title=\"{{ 'Save' | translate }}\"\n [disabled]=\"scheduler?.control?.errors\"\n c8yProductExperience\n [actionName]=\"BULK_OPERATION_EVENT\"\n [actionData]=\"{ title: modalTitle, result: 'Save' }\"\n >\n <span translate>Save</span>\n </button>\n </div>\n</div>\n","import {\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnInit,\n Output,\n SimpleChanges,\n ViewChild,\n ChangeDetectionStrategy\n} from '@angular/core';\nimport { IOperationBulk, OperationBulkGeneralStatus } from '@c8y/client';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport {\n AlertService,\n ListItemComponent,\n ModalService,\n Status,\n ListItemIconComponent,\n IconDirective,\n C8yTranslateDirective,\n ListItemActionComponent,\n ProductExperienceDirective,\n ListItemCollapseComponent,\n C8yTranslatePipe,\n DatePipe,\n NumberPipe\n} from '@c8y/ngx-components';\nimport { BulkOperationsService } from '@c8y/ngx-components/operations/bulk-operations-service';\nimport { BULK_OPERATION_EVENT } from '@c8y/ngx-components/operations/product-experience';\nimport { assign, cloneDeep, find, values } from 'lodash-es';\nimport { BsModalRef, BsModalService, ModalOptions } from 'ngx-bootstrap/modal';\nimport {\n BULK_OPERATION_STATUS_OPTIONS,\n OperationStatusOptionsMap\n} from './bulk-operation-list-item.model';\nimport { BulkOperationListItemService } from './bulk-operation-list-item.service';\nimport { BulkOperationsRescheduleModalComponent } from './modals/bulk-operations-reschedule-modal.component';\nimport { NgClass, NgIf } from '@angular/common';\nimport { TooltipDirective } from 'ngx-bootstrap/tooltip';\nimport { PopoverDirective } from 'ngx-bootstrap/popover';\nimport { OperationDetailsTabsComponent } from '@c8y/ngx-components/operations/operations-list-item-details';\n\n@Component({\n selector: 'c8y-bulk-operation-list-item',\n templateUrl: './bulk-operation-list-item.component.html',\n imports: [\n ListItemComponent,\n NgClass,\n ListItemIconComponent,\n IconDirective,\n TooltipDirective,\n NgIf,\n C8yTranslateDirective,\n PopoverDirective,\n ListItemActionComponent,\n ProductExperienceDirective,\n ListItemCollapseComponent,\n OperationDetailsTabsComponent,\n C8yTranslatePipe,\n DatePipe,\n NumberPipe\n ],\n changeDetection: ChangeDetectionStrategy.Eager\n})\nexport class BulkOperationListItemComponent implements OnInit, OnChanges {\n BULK_OPERATION_EVENT = BULK_OPERATION_EVENT;\n @Input()\n bulkOperation: Partial<IOperationBulk>;\n @Input()\n detailsCollapsed = true;\n @Input()\n readOnly = 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 BULK_OPERATION_STATUS_OPTIONS: OperationStatusOptionsMap = BULK_OPERATION_STATUS_OPTIONS;\n bsModalRef: BsModalRef;\n finishDatePopoverText: string = gettext(\n 'Approximate date, estimated based on the bulk operation settings.'\n );\n progressBarClass = 'progress';\n progressBarColor: string;\n progressBarStatus = 0;\n\n constructor(\n public bulkOperationListItemService: BulkOperationListItemService,\n private bulkOperationsService: BulkOperationsService,\n private modal: ModalService,\n private alert: AlertService,\n private bsModalService: BsModalService\n ) {}\n\n ngOnInit() {\n this.finishDate = this.calculateFinishDateMs();\n this.setProgressBar();\n }\n\n getOperationStatusOptions() {\n const statusOptions = values(BULK_OPERATION_STATUS_OPTIONS);\n return find(statusOptions, options =>\n options.generalStatuses.includes(this.bulkOperation.generalStatus)\n );\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.bulkOperation && !changes.bulkOperation.firstChange) {\n this.setProgressBar();\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 = {\n initialState,\n class: 'modal-sm',\n ariaDescribedby: 'modal-body',\n ariaLabelledBy: 'modal-title',\n backdrop: 'static'\n } 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 {},\n { eventName: BULK_OPERATION_EVENT }\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 { eventName: BULK_OPERATION_EVENT }\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","<c8y-li\n class=\"c8y-list__item--double-actions\"\n [ngClass]=\"{ 'c8y-list__item--no-expand': !detailsCollapsed }\"\n [collapsed]=\"detailsCollapsed\"\n #listItem\n id=\"{{ bulkOperation.id }}\"\n>\n <c8y-li-icon>\n <i\n [c8yIcon]=\"getOperationStatusOptions().icon\"\n [ngClass]=\"getOperationStatusOptions().styleClass\"\n [tooltip]=\"getOperationStatusOptions().label | translate\"\n ></i>\n </c8y-li-icon>\n <div [ngClass]=\"{ 'content-flex-58': !readOnly, 'content-flex-50': readOnly }\">\n <div class=\"col-5\">\n <button\n class=\"btn-clean\"\n type=\"button\"\n title=\"{{ bulkOperation.id }} - {{\n bulkOperation.operationPrototype.description | translate\n }}\"\n (click)=\"listItem.toggleCollapsed()\"\n >\n <span class=\"text-truncate\">\n <strong class=\"text-muted m-r-4\">{{ bulkOperation.id }}</strong>\n {{ bulkOperation.operationPrototype.description | translate }}\n </span>\n </button>\n </div>\n <div class=\"flex-grow\">\n <div class=\"m-t-8 visible-xs\"></div>\n <hr *ngIf=\"isStatusCanceled(); else statusNotCanceled\" class=\"m-t-16 m-b-0 visible-xs\" />\n <ng-template #statusNotCanceled>\n <div\n [class]=\"progressBarClass\"\n title=\"{{ progressBarStatus | c8yNumber: 'floor':'1.0-0' }}%\"\n >\n <div\n [class]=\"progressBarColor\"\n role=\"progressbar\"\n [attr.aria-label]=\"'Progress' | translate\"\n aria-valuenow=\"0\"\n aria-valuemin=\"0\"\n aria-valuemax=\"100\"\n [style.width.%]=\"progressBarStatus\"\n >\n <span *ngIf=\"progressBarStatus !== 0\">\n {{ progressBarStatus | c8yNumber: 'floor':'1.0-0' }}%\n </span>\n </div>\n </div>\n </ng-template>\n </div>\n <div class=\"col-4\">\n <div class=\"p-t-8 visible-xs\"></div>\n <small *ngIf=\"bulkOperation.progress.successful > 0\" class=\"m-r-8 icon-flex\">\n <i c8yIcon=\"check-circle\" class=\"text-success m-r-4\"></i>\n <span\n ngNonBindable\n translate\n [translateParams]=\"{ bulkOperationsCountSuccessful: bulkOperation.progress.successful }\"\n >\n {{ bulkOperationsCountSuccessful }} successful\n </span>\n </small>\n <small *ngIf=\"bulkOperation.progress.failed > 0\" class=\"m-r-8 icon-flex\">\n <i c8yIcon=\"warning\" class=\"text-danger m-r-4\"></i>\n <span\n ngNonBindable\n translate\n [translateParams]=\"{ bulkOperationsCountFailed: bulkOperation.progress.failed }\"\n >\n {{ bulkOperationsCountFailed }} failed\n </span>\n </small>\n <small *ngIf=\"bulkOperation.progress.executing > 0\" class=\"m-r-8 icon-flex\">\n <i c8yIcon=\"refresh\" class=\"text-primary m-r-4\"></i>\n <span\n ngNonBindable\n translate\n [translateParams]=\"{ bulkOperationsCountExecuting: bulkOperation.progress.executing }\"\n >\n {{ bulkOperationsCountExecuting }} executing\n </span>\n </small>\n <small *ngIf=\"bulkOperation.progress.pending > 0\" class=\"m-r-8 icon-flex\">\n <i c8yIcon=\"clock-o\" class=\"text-primary m-r-4\"></i>\n <span\n ngNonBindable\n translate\n [translateParams]=\"{ bulkOperationsCountPending: bulkOperation.progress.pending }\"\n >\n {{ bulkOperationsCountPending }} pending\n </span>\n </small>\n </div>\n </div>\n <div class=\"c8y-list__item__footer\">\n <div class=\"m-r-16\">\n <span class=\"text-label-small m-r-4\" translate>Start</span>\n <small class=\"icon-flex\">\n <i c8yIcon=\"calendar\" class=\"m-r-4\"></i>\n <span>\n {{ bulkOperation.startDate | c8yDate }}\n </span>\n </small>\n </div>\n <div class=\"m-r-16\" *ngIf=\"bulkOperationGeneralStatus.CANCELED !== bulkOperation.generalStatus\">\n <span class=\"text-label-small m-r-4\" translate>Finish</span>\n\n <small class=\"icon-flex\">\n <i c8yIcon=\"calendar\" class=\"m-r-4\"></i>\n <span>{{ finishDate | c8yDate }}</span>\n </small>\n <button\n class=\"btn-help btn-help--sm\"\n type=\"button\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ finishDatePopoverText | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n *ngIf=\"isStatusScheduled() || isStatusExecutingOrExecutingWithError()\"\n ></button>\n </div>\n </div>\n <ng-container *ngIf=\"!readOnly\">\n <c8y-li-action\n *ngIf=\"isStatusScheduled()\"\n label=\"{{ 'Edit schedule' | translate }}\"\n (click)=\"editSchedule()\"\n icon=\"pencil\"\n c8yProductExperience\n [actionName]=\"BULK_OPERATION_EVENT\"\n ></c8y-li-action>\n <c8y-li-action\n *ngIf=\"\n isStatusScheduled() || (isStatusExecutingOrExecutingWithError() && !allOperationsCreated())\n \"\n label=\"{{ 'Cancel bulk operation' | translate }}\"\n (click)=\"cancelBulkOperation()\"\n icon=\"remove\"\n c8yProductExperience\n [actionName]=\"BULK_OPERATION_EVENT\"\n ></c8y-li-action>\n <c8y-li-action\n *ngIf=\"isStatusFailed()\"\n label=\"{{ 'Retry failed operations' | translate }}\"\n (click)=\"retryFailedOperation()\"\n icon=\"repeat\"\n c8yProductExperience\n [actionName]=\"BULK_OPERATION_EVENT\"\n ></c8y-li-action>\n <c8y-li-action\n *ngIf=\"isStatusFailed()\"\n label=\"{{ 'Set operation to SUCCESSFUL' | translate }}\"\n (click)=\"setToSuccessful()\"\n icon=\"check-circle\"\n c8yProductExperience\n [actionName]=\"BULK_OPERATION_EVENT\"\n ></c8y-li-action>\n </ng-container>\n <c8y-li-collapse class=\"m-b-16\">\n <c8y-operation-details-tabs\n *ngIf=\"!listItem.collapsed\"\n [operation]=\"bulkOperation\"\n [readOnly]=\"readOnly\"\n (onRetryFailedOperations)=\"retryFailedOperation()\"\n (showFailedOperation)=\"openFailedOperation($event)\"\n [bulkOperationModalDetailsService]=\"bulkOperationListItemService\"\n ></c8y-operation-details-tabs>\n </c8y-li-collapse>\n</c8y-li>\n","import { NgModule } from '@angular/core';\nimport { BulkOperationListItemComponent } from './bulk-operation-list-item.component';\nimport { BulkOperationListItemService } from './bulk-operation-list-item.service';\nimport { BulkOperationWrapperComponent } from './bulk-operation-wrapper.component';\nimport { BULK_OPERATION_WRAPPER_MODAL_BODY_COMPONENT } from './bulk-operation-wrapper.model';\nimport { ModalBodyHostDirective } from './modal-body-host.directive';\nimport { BulkOperationsRescheduleModalComponent } from './modals/bulk-operations-reschedule-modal.component';\n\n/**\n * This module allows for displaying the list item of a bulk operation with its details.\n */\n@NgModule({\n imports: [\n BulkOperationListItemComponent,\n BulkOperationsRescheduleModalComponent,\n BulkOperationWrapperComponent,\n ModalBodyHostDirective\n ],\n providers: [\n BulkOperationListItemService,\n {\n provide: BULK_OPERATION_WRAPPER_MODAL_BODY_COMPONENT,\n useValue: {\n component: BulkOperationListItemComponent,\n config: { detailsCollapsed: false, readOnly: true }\n }\n }\n ],\n exports: [\n BulkOperationListItemComponent,\n BulkOperationsRescheduleModalComponent,\n BulkOperationWrapperComponent\n ]\n})\nexport class BulkOperationListItemModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2","i1.BulkOperationListItemService","i4"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAQO,MAAM,4BAA4B,GAAG;AAC1C,IAAA,SAAS,EAAE,OAAO,CAAC,WAAW,CAAC;AAC/B,IAAA,SAAS,EAAE,OAAO,CAAC,WAAW,CAAC;AAC/B,IAAA,QAAQ,EAAE,OAAO,CAAC,UAAU,CAAC;AAC7B,IAAA,MAAM,EAAE,OAAO,CAAC,yBAAyB,CAAC;AAC1C,IAAA,UAAU,EAAE,OAAO,CAAC,wBAAwB,CAAC;AAC7C,IAAA,OAAO,EAAE,OAAO,CAAC,SAAS;;AAGrB,MAAM,6BAA6B,GAA8B;AACtE,IAAA,SAAS,EAAE;QACT,KAAK,EAAE,4BAA4B,CAAC,SAAS;AAC7C,QAAA,eAAe,EAAE,CAAC,0BAA0B,CAAC,SAAS,CAAC;AACvD,QAAA,IAAI,EAAE,UAAU;AAChB,QAAA,UAAU,EAAE;AACb,KAAA;AACD,IAAA,SAAS,EAAE;QACT,KAAK,EAAE,4BAA4B,CAAC,SAAS;AAC7C,QAAA,eAAe,EAAE;AACf,YAAA,0BAA0B,CAAC,SAAS;AACpC,YAAA,0BAA0B,CAAC;AAC5B,SAAA;AACD,QAAA,IAAI,EAAE,SAAS;AACf,QAAA,UAAU,EAAE;AACb,KAAA;AACD,IAAA,OAAO,EAAE;QACP,KAAK,EAAE,4BAA4B,CAAC,OAAO;AAC3C,QAAA,eAAe,EAAE,CAAC,0BAA0B,CAAC,OAAO,CAAC;AACrD,QAAA,IAAI,EAAE,iBAAiB;AACvB,QAAA,UAAU,EAAE;AACb,KAAA;AACD,IAAA,QAAQ,EAAE;QACR,KAAK,EAAE,4BAA4B,CAAC,QAAQ;AAC5C,QAAA,eAAe,EAAE,CAAC,0BAA0B,CAAC,QAAQ,CAAC;AACtD,QAAA,IAAI,EAAE,KAAK;AACX,QAAA,UAAU,EAAE;AACb,KAAA;AACD,IAAA,MAAM,EAAE;QACN,KAAK,EAAE,4BAA4B,CAAC,MAAM;AAC1C,QAAA,eAAe,EAAE,CAAC,0BAA0B,CAAC,MAAM,CAAC;AACpD,QAAA,IAAI,EAAE,oBAAoB;AAC1B,QAAA,UAAU,EAAE;AACb,KAAA;AACD,IAAA,UAAU,EAAE;QACV,KAAK,EAAE,4BAA4B,CAAC,UAAU;AAC9C,QAAA,eAAe,EAAE,CAAC,0BAA0B,CAAC,UAAU,CAAC;AACxD,QAAA,IAAI,EAAE,cAAc;AACpB,QAAA,UAAU,EAAE;AACb;;;ACrDI,MAAM,2CAA2C,GACtD,IAAI,cAAc,CAChB,wCAAwC,CACzC;;MCHU,sBAAsB,CAAA;AACjC,IAAA,WAAA,CAAmB,gBAAkC,EAAA;QAAlC,IAAA,CAAA,gBAAgB,GAAhB,gBAAgB;IAAqB;+GAD7C,sBAAsB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAAtB,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;4FAAtB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBADlC,SAAS;mBAAC,EAAE,QAAQ,EAAE,iBAAiB,EAAE;;;MCkB7B,6BAA6B,CAAA;AAQxC,IAAA,WAAA,CACS,qBAA4C,EAC5C,QAAoB,EACnB,YAA4B,EAG5B,eAA2D,EAAA;QAL5D,IAAA,CAAA,qBAAqB,GAArB,qBAAqB;QACrB,IAAA,CAAA,QAAQ,GAAR,QAAQ;QACP,IAAA,CAAA,YAAY,GAAZ,YAAY;QAGZ,IAAA,CAAA,eAAe,GAAf,eAAe;AARjB,QAAA,IAAA,CAAA,UAAU,GAAkB,IAAI,OAAO,EAAE;IAS9C;IAEH,QAAQ,GAAA;AACN,QAAA,IAAI,IAAI,CAAC,eAAe,EAAE;AACxB,YAAA,MAAM,YAAY,GAChB,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC,eAAe,CACjD,IAAI,CAAC,eAAe,CAAC,SAAS,CAC/B;YACH,MAAM,CAAC,YAAY,CAAC,QAAQ,EAAE,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC;YAC1D,YAAY,CAAC,QAAQ,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa;YACxD,YAAY,CAAC,QAAQ,CAAC;AACnB,iBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC;AAC/B,iBAAA,SAAS,CAAC,KAAK,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAChD;IACF;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;AACtB,QAAA,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE;IAC5B;;IAGA,MAAM,WAAW,CAAC,eAAgC,EAAA;AAChD,QAAA,MAAM,aAAa,GAAmB,CACpC,MAAM,IAAI,CAAC,qBAAqB,CAAC,oBAAoB,CAAC,eAAe,CAAC,EACtE,IAAI;AACN,QAAA,MAAM,YAAY,GAAG,EAAE,aAAa,EAAE;AACtC,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,6BAA6B,EAAE;YACpD,YAAY;AACZ,YAAA,KAAK,EAAE,UAAU;AACjB,YAAA,eAAe,EAAE,YAAY;AAC7B,YAAA,cAAc,EAAE;AACjB,SAAA,CAAC;IACJ;AAhDW,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,6BAA6B,+GAa9B,2CAA2C,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAb1C,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,6BAA6B,kLAG7B,sBAAsB,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECvBnC,2gBAoBA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDHY,sBAAsB,uDAAE,gBAAgB,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,KAAA,EAAA,CAAA,CAAA;;4FAGvC,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBANzC,SAAS;+BACE,6BAA6B,EAAA,OAAA,EAE9B,CAAC,sBAAsB,EAAE,gBAAgB,CAAC,EAAA,eAAA,EAClC,uBAAuB,CAAC,KAAK,EAAA,QAAA,EAAA,2gBAAA,EAAA;;0BAc3C;;0BACA,MAAM;2BAAC,2CAA2C;;sBAZpD;;sBAEA,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,sBAAsB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;;;MEfxC,4BAA4B,CAAA;IACvC,WAAA,CACU,qBAA4C,EAC5C,YAA4B,EAAA;QAD5B,IAAA,CAAA,qBAAqB,GAArB,qBAAqB;QACrB,IAAA,CAAA,YAAY,GAAZ,YAAY;IACnB;IAEH,MAAM,WAAW,CAAC,eAAgC,EAAA;AAChD,QAAA,MAAM,aAAa,GAAmB,CACpC,MAAM,IAAI,CAAC,qBAAqB,CAAC,oBAAoB,CAAC,eAAe,CAAC,EACtE,IAAI;AACN,QAAA,MAAM,YAAY,GAAG,EAAE,aAAa,EAAE;AACtC,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,6BAA6B,EAAE;YACpD,YAAY;AACZ,YAAA,KAAK,EAAE,UAAU;AACjB,YAAA,eAAe,EAAE,YAAY;AAC7B,YAAA,cAAc,EAAE;AACjB,SAAA,CAAC;IACJ;+GAjBW,4BAA4B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,qBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,cAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAA5B,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,4BAA4B,cADf,MAAM,EAAA,CAAA,CAAA;;4FACnB,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBADxC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;MC4BrB,sCAAsC,CAAA;AAUjD,IAAA,WAAA,CACS,UAAsB,EACrB,qBAA4C,EAC5C,KAAmB,EACnB,gBAAkC,EAAA;QAHnC,IAAA,CAAA,UAAU,GAAV,UAAU;QACT,IAAA,CAAA,qBAAqB,GAArB,qBAAqB;QACrB,IAAA,CAAA,KAAK,GAAL,KAAK;QACL,IAAA,CAAA,gBAAgB,GAAhB,gBAAgB;QAb1B,IAAA,CAAA,oBAAoB,GAAG,oBAAoB;AAC3C,QAAA,IAAA,CAAA,YAAY,GAA4B,IAAI,OAAO,EAAE;QAMpC,IAAA,CAAA,oBAAoB,GAAG,QAAQ;IAO7C;AAGH,IAAA,OAAO,CAAC,KAAoB,EAAA;QAC1B,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,oBAAoB,EAAE;AAC5C,YAAA,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,aAAa,EAAE;gBAChD,KAAK,EAAE,IAAI,CAAC,UAAU;AACtB,gBAAA,MAAM,EAAE;AACT,aAAA,CAAC;QACJ;IACF;IAEA,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,QAAQ,EAAE;IACnC;AAEA,IAAA,oBAAoB,CAAC,MAAM,EAAA;AACzB,QAAA,IAAI,CAAC,YAAY,GAAG,MAAM;IAC5B;IAEA,QAAQ,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC,GAAG,OAAO,CAAC,eAAe,CAAC;IACtF;IAEA,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;IACxB;AAEA,IAAA,MAAM,MAAM,GAAA;AACV,QAAA,IAAI,gBAAgB;AACpB,QAAA,IAAI,CAAC,aAAa,CAAC,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,WAAW,EAAE;QAC5E,IAAI,CAAC,aAAa,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,cAAc;AAElE,QAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE;AACzB,YAAA,IAAI;AACF,gBAAA,gBAAgB,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,mBAAmB,CAAC,IAAI,CAAC,aAAa,CAAC;gBAC3F,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,uCAAuC,CAAC,CAAC;YACtE;YAAE,OAAO,EAAE,EAAE;AACX,gBAAA,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,EAAE,CAAC;YACjC;QACF;aAAO;AACL,YAAA,IAAI;AACF,gBAAA,gBAAgB,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,mBAAmB,CAAC,IAAI,CAAC,aAAa,CAAC;gBAC3F,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,2BAA2B,CAAC,CAAC;YAC1D;YAAE,OAAO,EAAE,EAAE;AACX,gBAAA,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,EAAE,CAAC;YACjC;QACF;;QAGA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;AAC7C,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;IACxB;+GAnEW,sCAAsC,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,EAAA,CAAA,qBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,YAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAtC,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,sCAAsC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sCAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,cAAA,EAAA,iBAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECnCnD,q+CA+CA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDtBI,aAAa,2EACb,yBAAyB,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,aAAA,EAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACzB,2BAA2B,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAC3B,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACX,0BAA0B,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,YAAA,EAAA,SAAA,EAAA,wBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAC1B,qBAAqB,mEACrB,gBAAgB,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,KAAA,EAAA,CAAA,CAAA;;4FAIP,sCAAsC,EAAA,UAAA,EAAA,CAAA;kBAdlD,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,sCAAsC,EAAA,OAAA,EAEvC;wBACP,aAAa;wBACb,yBAAyB;wBACzB,2BAA2B;wBAC3B,WAAW;wBACX,0BAA0B;wBAC1B,qBAAqB;wBACrB;qBACD,EAAA,eAAA,EACgB,uBAAuB,CAAC,KAAK,EAAA,QAAA,EAAA,q+CAAA,EAAA;;sBAmB7C,YAAY;uBAAC,cAAc,EAAE,CAAC,QAAQ,CAAC;;;MEa7B,8BAA8B,CAAA;IAwBzC,WAAA,CACS,4BAA0D,EACzD,qBAA4C,EAC5C,KAAmB,EACnB,KAAmB,EACnB,cAA8B,EAAA;QAJ/B,IAAA,CAAA,4BAA4B,GAA5B,4BAA4B;QAC3B,IAAA,CAAA,qBAAqB,GAArB,qBAAqB;QACrB,IAAA,CAAA,KAAK,GAAL,KAAK;QACL,IAAA,CAAA,KAAK,GAAL,KAAK;QACL,IAAA,CAAA,cAAc,GAAd,cAAc;QA5BxB,IAAA,CAAA,oBAAoB,GAAG,oBAAoB;QAI3C,IAAA,CAAA,gBAAgB,GAAG,IAAI;QAEvB,IAAA,CAAA,QAAQ,GAAG,KAAK;AACN,QAAA,IAAA,CAAA,mBAAmB,GAAG,IAAI,YAAY,EAAE;AACxC,QAAA,IAAA,CAAA,MAAM,GAAsB,IAAI,YAAY,EAAE;QAIxD,IAAA,CAAA,cAAc,GAAG,KAAK;QACtB,IAAA,CAAA,0BAA0B,GAAG,0BAA0B;QACvD,IAAA,CAAA,6BAA6B,GAA8B,6BAA6B;AAExF,QAAA,IAAA,CAAA,qBAAqB,GAAW,OAAO,CACrC,mEAAmE,CACpE;QACD,IAAA,CAAA,gBAAgB,GAAG,UAAU;QAE7B,IAAA,CAAA,iBAAiB,GAAG,CAAC;IAQlB;IAEH,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,qBAAqB,EAAE;QAC9C,IAAI,CAAC,cAAc,EAAE;IACvB;IAEA,yBAAyB,GAAA;AACvB,QAAA,MAAM,aAAa,GAAG,MAAM,CAAC,6BAA6B,CAAC;QAC3D,OAAO,IAAI,CAAC,aAAa,EAAE,OAAO,IAChC,OAAO,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,CACnE;IACH;AAEA,IAAA,WAAW,CAAC,OAAsB,EAAA;QAChC,IAAI,OAAO,CAAC,aAAa,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,WAAW,EAAE;YAC/D,IAAI,CAAC,cAAc,EAAE;QACvB;IACF;IACA,qBAAqB,GAAA;AACnB,QAAA,MAAM,WAAW,GAAW,IAAI,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE;QAC5E,MAAM,cAAc,GAAW,IAAI,CAAC,aAAa,CAAC,YAAY,GAAG,IAAI;QAErE,OAAO,WAAW,GAAG,cAAc,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,GAAG;IACvE;IAEA,qBAAqB,GAAA;AACnB,QAAA,QACE,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,MAAM;AAC3E,YAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,GAAG;AACjC,YAAA,GAAG;IAEP;IAEA,cAAc,GAAA;QACZ,MAAM,oBAAoB,GAAG,mDAAmD;AAEhF,QAAA,MAAM,gBAAgB,GAAG;AACvB,YAAA,SAAS,EAAE;AACT,gBAAA,gBAAgB,EAAE,kCAAkC;gBACpD,gBAAgB,EAAE,CAAA,EAAG,oBAAoB,CAAA,QAAA,CAAU;AACnD,gBAAA,iBAAiB,EAAE,IAAI,CAAC,qBAAqB;AAC9C,aAAA;AACD,YAAA,oBAAoB,EAAE;AACpB,gBAAA,gBAAgB,EAAE,kCAAkC;gBACpD,gBAAgB,EAAE,CAAA,EAAG,oBAAoB,CAAA,OAAA,CAAS;AAClD,gBAAA,iBAAiB,EAAE,IAAI,CAAC,qBAAqB;AAC9C,aAAA;AACD,YAAA,MAAM,EAAE;AACN,gBAAA,gBAAgB,EAAE,UAAU;gBAC5B,gBAAgB,EAAE,CAAA,EAAG,oBAAoB,CAAA,OAAA,CAAS;AAClD,gBAAA,iBAAiB,EAAE;AACpB,aAAA;AACD,YAAA,UAAU,EAAE;AACV,gBAAA,gBAAgB,EAAE,UAAU;gBAC5B,gBAAgB,EAAE,CAAA,EAAG,oBAAoB,CAAA,QAAA,CAAU;AACnD,gBAAA,iBAAiB,EAAE;AACpB;SACF;AAED,QAAA,MAAM,CAAC,IAAI,EAAE,gBAAgB,CAAC,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC;IAClE;IAEA,YAAY,GAAA;QACV,MAAM,oBAAoB,GAAG,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC;AAC1D,QAAA,MAAM,YAAY,GAAG;AACnB,YAAA,aAAa,EAAE;SAChB;AACD,QAAA,MAAM,YAAY,GAAG;YACnB,YAAY;AACZ,YAAA,KAAK,EAAE,UAAU;AACjB,YAAA,eAAe,EAAE,YAAY;AAC7B,YAAA,cAAc,EAAE,aAAa;AAC7B,YAAA,QAAQ,EAAE;SACK;AACjB,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CACxC,sCAAsC,EACtC,YAAY,CACb;IACH;AAEA,IAAA,MAAM,mBAAmB,GAAA;AACvB,QAAA,IAAI;AACF,YAAA,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CACtB,OAAO,CAAC,uBAAuB,CAAC,EAChC,OAAO,CAAC,qEAAqE,CAAC,EAC9E,MAAM,CAAC,MAAM,EACb,EAAE,EACF,EAAE,EACF,EAAE,SAAS,EAAE,oBAAoB,EAAE,CACpC;AACD,YAAA,MAAM,IAAI,CAAC,qBAAqB,CAAC,mBAAmB,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC;AAC3E,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;YAClB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;QACpD;QAAE,OAAO,EAAE,EAAE;AACX,YAAA,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,EAAE,CAAC;QACjC;IACF;IAEA,oBAAoB,GAAA;QAClB,MAAM,UAAU,GAAG,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC;;QAGhD,OAAO,UAAU,CAAC,OAAO;QACzB,UAAU,CAAC,cAAc,GAAG,IAAI,CAAC,aAAa,CAAC,EAAE;;AAGjD,QAAA,MAAM,YAAY,GAAG;AACnB,YAAA,aAAa,EAAE,UAAU;AACzB,YAAA,gBAAgB,EAAE;SACnB;AACD,QAAA,MAAM,YAAY,GAAG,EAAE,YAAY,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAkB;AAC5F,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CACxC,sCAAsC,EACtC,YAAY,CACb;QACD,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,YAAY,CAAC,SAAS,CAAC,MAAK;AAClD,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;AACpB,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,MAAM,eAAe,GAAA;AACnB,QAAA,IAAI;AACF,YAAA,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CACtB,OAAO,CAAC,2CAA2C,CAAC,EACpD,OAAO,CACL,0FAA0F,CAC3F,EACD,MAAM,CAAC,MAAM,EACb,EAAE,EACF,EAAE,EACF,EAAE,SAAS,EAAE,oBAAoB,EAAE,CACpC;AAED,YAAA,MAAM,IAAI,CAAC,qBAAqB,CAAC,mBAAmB,CAAC;AACnD,gBAAA,EAAE,EAAE,IAAI,CAAC,aAAa,CAAC,EAAE;gBACzB,aAAa,EAAE,0BAA0B,CAAC;AAC3C,aAAA,CAAC;AACF,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;YAClB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,yCAAyC,CAAC,CAAC;QACxE;QAAE,OAAO,EAAE,EAAE;AACX,YAAA,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,EAAE,CAAC;QACjC;IACF;AAEA,IAAA,mBAAmB,CAAC,cAAc,EAAA;AAChC,QAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,cAAc,CAAC;IAC/C;IAEA,iBAAiB,GAAA;QACf,OAAO,IAAI,CAAC,aAAa,CAAC,aAAa,KAAK,IAAI,CAAC,0BAA0B,CAAC,SAAS;IACvF;IAEA,qCAAqC,GAAA;QACnC,QACE,IAAI,CAAC,aAAa,CAAC,aAAa,KAAK,IAAI,CAAC,0BAA0B,CAAC,SAAS;YAC9E,IAAI,CAAC,aAAa,CAAC,aAAa,KAAK,IAAI,CAAC,0BAA0B,CAAC,oBAAoB;IAE7F;IAEA,oBAAoB,GAAA;AAClB,QAAA,QACE,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,GAAG;AAC/B,YAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,SAAS;AACnC,gBAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,MAAM;AAClC,gBAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,OAAO;AACnC,gBAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,UAAU;IAE5C;IAEA,gBAAgB,GAAA;QACd,OAAO,IAAI,CAAC,aAAa,CAAC,aAAa,KAAK,IAAI,CAAC,0BAA0B,CAAC,QAAQ;IACtF;IAEA,cAAc,GAAA;QACZ,OAAO,IAAI,CAAC,aAAa,CAAC,aAAa,KAAK,IAAI,CAAC,0BAA0B,CAAC,MAAM;IACpF;+GA9MW,8BAA8B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,4BAAA,EAAA,EAAA,EAAA,KAAA,EAAAD,EAAA,CAAA,qBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,YAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,YAAA,EAAA,EAAA,EAAA,KAAA,EAAAE,EAAA,CAAA,cAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA9B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,8BAA8B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,8BAAA,EAAA,MAAA,EAAA,EAAA,aAAA,EAAA,eAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,UAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,UAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECjE3C,uxMA8KA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,ED/HI,iBAAiB,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,aAAA,EAAA,cAAA,EAAA,OAAA,EAAA,WAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACjB,OAAO,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACP,qBAAqB,EAAA,QAAA,EAAA,iCAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACrB,aAAa,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACb,gBAAgB,ghBAChB,IAAI,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACJ,qBAAqB,EAAA,QAAA,EAAA,6BAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACrB,gBAAgB,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,EAAA,mBAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,WAAA,EAAA,cAAA,EAAA,UAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChB,uBAAuB,EAAA,QAAA,EAAA,qCAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACvB,0BAA0B,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,YAAA,EAAA,SAAA,EAAA,wBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAC1B,yBAAyB,EAAA,QAAA,EAAA,yCAAA,EAAA,MAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACzB,6BAA6B,EAAA,QAAA,EAAA,4BAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,UAAA,EAAA,kCAAA,CAAA,EAAA,OAAA,EAAA,CAAA,yBAAA,EAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAC7B,gBAAgB,EAAA,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAChB,QAAQ,2CACR,UAAU,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,KAAA,EAAA,CAAA,CAAA;;4FAID,8BAA8B,EAAA,UAAA,EAAA,CAAA;kBAtB1C,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,8BAA8B,EAAA,OAAA,EAE/B;wBACP,iBAAiB;wBACjB,OAAO;wBACP,qBAAqB;wBACrB,aAAa;wBACb,gBAAgB;wBAChB,IAAI;wBACJ,qBAAqB;wBACrB,gBAAgB;wBAChB,uBAAuB;wBACvB,0BAA0B;wBAC1B,yBAAyB;wBACzB,6BAA6B;wBAC7B,gBAAgB;wBAChB,QAAQ;wBACR;qBACD,EAAA,eAAA,EACgB,uBAAuB,CAAC,KAAK,EAAA,QAAA,EAAA,uxMAAA,EAAA;;sBAI7C;;sBAEA;;sBAEA;;sBAEA;;sBACA;;sBACA,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,UAAU,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;;;AEnEzC;;AAEG;MAwBU,2BAA2B,CAAA;+GAA3B,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAA3B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,2BAA2B,YArBpC,8BAA8B;YAC9B,sCAAsC;YACtC,6BAA6B;AAC7B,YAAA,sBAAsB,aAatB,8BAA8B;YAC9B,sCAAsC;YACtC,6BAA6B,CAAA,EAAA,CAAA,CAAA;AAGpB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,2BAA2B,EAAA,SAAA,EAhB3B;YACT,4BAA4B;AAC5B,YAAA;AACE,gBAAA,OAAO,EAAE,2CAA2C;AACpD,gBAAA,QAAQ,EAAE;AACR,oBAAA,SAAS,EAAE,8BAA8B;oBACzC,MAAM,EAAE,EAAE,gBAAgB,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI;AAClD;AACF;AACF,SAAA,EAAA,OAAA,EAAA,CAdC,8BAA8B;YAC9B,sCAAsC,CAAA,EAAA,CAAA,CAAA;;4FAoB7B,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAvBvC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE;wBACP,8BAA8B;wBAC9B,sCAAsC;wBACtC,6BAA6B;wBAC7B;AACD,qBAAA;AACD,oBAAA,SAAS,EAAE;wBACT,4BAA4B;AAC5B,wBAAA;AACE,4BAAA,OAAO,EAAE,2CAA2C;AACpD,4BAAA,QAAQ,EAAE;AACR,gCAAA,SAAS,EAAE,8BAA8B;gCACzC,MAAM,EAAE,EAAE,gBAAgB,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI;AAClD;AACF;AACF,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACP,8BAA8B;wBAC9B,sCAAsC;wBACtC;AACD;AACF,iBAAA;;;ACjCD;;AAEG;;;;"}
1
+ {"version":3,"file":"c8y-ngx-components-operations-bulk-operation-list-item.mjs","sources":["../../operations/bulk-operation-list-item/bulk-operation-list-item.model.ts","../../operations/bulk-operation-list-item/bulk-operation-wrapper.model.ts","../../operations/bulk-operation-list-item/modal-body-host.directive.ts","../../operations/bulk-operation-list-item/bulk-operation-wrapper.component.ts","../../operations/bulk-operation-list-item/bulk-operation-wrapper.component.html","../../operations/bulk-operation-list-item/bulk-operation-list-item.service.ts","../../operations/bulk-operation-list-item/modals/bulk-operations-reschedule-modal.component.ts","../../operations/bulk-operation-list-item/modals/bulk-operations-reschedule-modal.component.html","../../operations/bulk-operation-list-item/bulk-operation-list-item.component.ts","../../operations/bulk-operation-list-item/bulk-operation-list-item.component.html","../../operations/bulk-operation-list-item/bulk-operation-list-item.module.ts","../../operations/bulk-operation-list-item/c8y-ngx-components-operations-bulk-operation-list-item.ts"],"sourcesContent":["import { OperationBulkGeneralStatus } from '@c8y/client';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { OperationStatusOption } from '@c8y/ngx-components/operations/shared';\n\nexport type OperationStatusOptionsMap = {\n [key in keyof typeof BULK_OPERATION_STATUS_LABELS]?: OperationStatusOption;\n};\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: OperationStatusOptionsMap = {\n SCHEDULED: {\n label: BULK_OPERATION_STATUS_LABELS.SCHEDULED,\n generalStatuses: [OperationBulkGeneralStatus.SCHEDULED],\n icon: 'calendar',\n styleClass: 'text-info'\n },\n EXECUTING: {\n label: BULK_OPERATION_STATUS_LABELS.EXECUTING,\n generalStatuses: [\n OperationBulkGeneralStatus.EXECUTING,\n OperationBulkGeneralStatus.EXECUTING_WITH_ERROR\n ],\n icon: 'refresh',\n styleClass: 'text-primary'\n },\n DELETED: {\n label: BULK_OPERATION_STATUS_LABELS.DELETED,\n generalStatuses: [OperationBulkGeneralStatus.DELETED],\n icon: 'delete-document',\n styleClass: 'text-muted'\n },\n CANCELED: {\n label: BULK_OPERATION_STATUS_LABELS.CANCELED,\n generalStatuses: [OperationBulkGeneralStatus.CANCELED],\n icon: 'ban',\n styleClass: 'text-primary'\n },\n FAILED: {\n label: BULK_OPERATION_STATUS_LABELS.FAILED,\n generalStatuses: [OperationBulkGeneralStatus.FAILED],\n icon: 'exclamation-circle',\n styleClass: 'text-danger'\n },\n SUCCESSFUL: {\n label: BULK_OPERATION_STATUS_LABELS.SUCCESSFUL,\n generalStatuses: [OperationBulkGeneralStatus.SUCCESSFUL],\n icon: 'check-circle',\n styleClass: 'text-success'\n }\n};\n","import { EventEmitter, InjectionToken, Type } from '@angular/core';\nimport { IOperationBulk } from '@c8y/client';\n\nexport const BULK_OPERATION_WRAPPER_MODAL_BODY_COMPONENT =\n new InjectionToken<BulkOperationDetailsModalBodyConfiguration>(\n 'BulkOperationWrapperModalBodyComponent'\n );\n\nexport interface BulkOperationDetailsModalBodyConfiguration {\n component: Type<BulkOperationDetailsModalBody>;\n config?: object;\n}\n\nexport interface BulkOperationDetailsModalBody {\n bulkOperation: Partial<IOperationBulk>;\n showFailedOperation: EventEmitter<any>;\n}\n","import { Directive, ViewContainerRef } from '@angular/core';\n\n@Directive({ selector: '[modalBodyHost]' })\nexport class ModalBodyHostDirective {\n constructor(public viewContainerRef: ViewContainerRef) {}\n}\n","import { Component, Inject, Input, OnDestroy, OnInit, Optional, ViewChild, ChangeDetectionStrategy } from '@angular/core';\nimport { IOperationBulk } from '@c8y/client';\nimport { BulkOperationsService } from '@c8y/ngx-components/operations/bulk-operations-service';\nimport { assign } from 'lodash-es';\nimport { BsModalRef, BsModalService } from 'ngx-bootstrap/modal';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport {\n BulkOperationDetailsModalBody,\n BulkOperationDetailsModalBodyConfiguration,\n BULK_OPERATION_WRAPPER_MODAL_BODY_COMPONENT\n} from './bulk-operation-wrapper.model';\nimport { ModalBodyHostDirective } from './modal-body-host.directive';\nimport { C8yTranslatePipe } from '@c8y/ngx-components';\n@Component({\n selector: 'c8y-bulk-operations-wrapper',\n templateUrl: './bulk-operation-wrapper.component.html',\n imports: [ModalBodyHostDirective, C8yTranslatePipe],\n changeDetection: ChangeDetectionStrategy.Eager\n})\nexport class BulkOperationWrapperComponent implements OnInit, OnDestroy {\n @Input() bulkOperation: Partial<IOperationBulk>;\n\n @ViewChild(ModalBodyHostDirective, { static: true })\n modalBodyHost: ModalBodyHostDirective;\n\n private destroyed$: Subject<void> = new Subject();\n\n constructor(\n public bulkOperationsService: BulkOperationsService,\n public modalRef: BsModalRef,\n private modalService: BsModalService,\n @Optional()\n @Inject(BULK_OPERATION_WRAPPER_MODAL_BODY_COMPONENT)\n private modalBodyConfig: BulkOperationDetailsModalBodyConfiguration\n ) {}\n\n ngOnInit(): void {\n if (this.modalBodyConfig) {\n const componentRef =\n this.modalBodyHost.viewContainerRef.createComponent<BulkOperationDetailsModalBody>(\n this.modalBodyConfig.component\n );\n assign(componentRef.instance, this.modalBodyConfig.config);\n componentRef.instance.bulkOperation = this.bulkOperation;\n componentRef.instance.showFailedOperation\n .pipe(takeUntil(this.destroyed$))\n .subscribe(event => this.openDetails(event));\n }\n }\n\n ngOnDestroy(): void {\n this.destroyed$.next();\n this.destroyed$.complete();\n }\n\n // openDetails function needs to be defined in the both places (component and the service) to avoid circular dependency.\n async openDetails(bulkOperationId: string | number) {\n const bulkOperation: IOperationBulk = (\n await this.bulkOperationsService.getBulkOperationById(bulkOperationId)\n ).data;\n const initialState = { bulkOperation };\n this.modalService.show(BulkOperationWrapperComponent, {\n initialState,\n class: 'modal-lg',\n ariaDescribedby: 'modal-body',\n ariaLabelledBy: 'modal-title'\n });\n }\n}\n","<div class=\"viewport-modal\">\n <div class=\"modal-header\">\n <h3 id=\"modal-title\">{{ 'Bulk operation details' | translate }}</h3>\n </div>\n\n <div class=\"modal-inner-scroll\" id=\"modal-body\">\n <ng-container modalBodyHost></ng-container>\n </div>\n\n <div class=\"modal-footer\">\n <button\n title=\"{{ 'Close' | translate }}\"\n type=\"button\"\n class=\"btn btn-default\"\n (click)=\"modalRef.hide()\"\n >\n {{ 'Close' | translate }}\n </button>\n </div>\n</div>\n","import { Injectable } from '@angular/core';\nimport { IOperationBulk } from '@c8y/client';\nimport { BulkOperationModalDetailsService } from '@c8y/ngx-components/operations/bulk-operation-modal-details';\nimport { BulkOperationsService } from '@c8y/ngx-components/operations/bulk-operations-service';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { BulkOperationWrapperComponent } from './bulk-operation-wrapper.component';\n\n@Injectable({ providedIn: 'root' })\nexport class BulkOperationListItemService implements BulkOperationModalDetailsService {\n constructor(\n private bulkOperationsService: BulkOperationsService,\n private modalService: BsModalService\n ) {}\n\n async openDetails(bulkOperationId: string | number) {\n const bulkOperation: IOperationBulk = (\n await this.bulkOperationsService.getBulkOperationById(bulkOperationId)\n ).data;\n const initialState = { bulkOperation };\n this.modalService.show(BulkOperationWrapperComponent, {\n initialState,\n class: 'modal-lg',\n ariaDescribedby: 'modal-body',\n ariaLabelledBy: 'modal-title'\n });\n }\n}\n","import { Component, HostListener, OnInit, ChangeDetectionStrategy } from '@angular/core';\nimport { IOperationBulk } from '@c8y/client';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport {\n AlertService,\n GainsightService,\n IconDirective,\n ProductExperienceDirective,\n C8yTranslateDirective,\n C8yTranslatePipe\n} from '@c8y/ngx-components';\nimport {\n OperationSchedule,\n OperationSchedulerComponent\n} from '@c8y/ngx-components/operations/bulk-operation-scheduler';\nimport { BulkOperationsService } from '@c8y/ngx-components/operations/bulk-operations-service';\nimport { BULK_OPERATION_EVENT } from '@c8y/ngx-components/operations/product-experience';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { Subject } from 'rxjs';\nimport { OperationSummaryComponent } from '@c8y/ngx-components/operations/operation-summary';\nimport { FormsModule } from '@angular/forms';\n@Component({\n selector: 'c8y-bulk-operations-reschedule-modal',\n templateUrl: 'bulk-operations-reschedule-modal.component.html',\n imports: [\n IconDirective,\n OperationSummaryComponent,\n OperationSchedulerComponent,\n FormsModule,\n ProductExperienceDirective,\n C8yTranslateDirective,\n C8yTranslatePipe\n ],\n changeDetection: ChangeDetectionStrategy.Eager\n})\nexport class BulkOperationsRescheduleModalComponent implements OnInit {\n BULK_OPERATION_EVENT = BULK_OPERATION_EVENT;\n closeSubject: Subject<IOperationBulk> = new Subject();\n dateAndDelay: OperationSchedule;\n bulkOperation: Partial<IOperationBulk>;\n isRetryOperation: boolean;\n modalTitle: string;\n\n private readonly CARRIAGE_RETURN_CODE = 'Escape';\n\n constructor(\n public bsModalRef: BsModalRef,\n private bulkOperationsService: BulkOperationsService,\n private alert: AlertService,\n private gainsightService: GainsightService\n ) {}\n\n @HostListener('window:keyup', ['$event'])\n onKeyUp(event: KeyboardEvent) {\n if (event.code === this.CARRIAGE_RETURN_CODE) {\n this.gainsightService.triggerEvent('modalDialog', {\n title: this.modalTitle,\n result: 'Cancel'\n });\n }\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","<div class=\"viewport-modal\">\n <div class=\"modal-header dialog-header\">\n <i c8yIcon=\"c8y-energy\"></i>\n <h4 id=\"modal-title\">{{ modalTitle | translate }}</h4>\n </div>\n <div class=\"modal-inner-scroll\" id=\"modal-body\">\n <div class=\"modal-body\">\n <div class=\"text-center\">\n <c8y-operation-summary\n [description]=\"bulkOperation.operationPrototype.description\"\n ></c8y-operation-summary>\n </div>\n <div class=\"p-t-16 center-block\" style=\"max-width: 300px\">\n <c8y-operation-scheduler\n [(ngModel)]=\"dateAndDelay\"\n #scheduler=\"ngModel\"\n ></c8y-operation-scheduler>\n </div>\n </div>\n </div>\n <div class=\"modal-footer\">\n <button\n (click)=\"onCancel()\"\n type=\"button\"\n class=\"btn btn-default\"\n title=\"{{ 'Cancel' | translate }}\"\n c8yProductExperience\n [actionName]=\"BULK_OPERATION_EVENT\"\n [actionData]=\"{ title: modalTitle, result: 'Cancel' }\"\n >\n <span translate>Cancel</span>\n </button>\n <button\n id=\"save-btn\"\n (click)=\"onSave()\"\n type=\"button\"\n class=\"btn btn-primary\"\n title=\"{{ 'Save' | translate }}\"\n [disabled]=\"scheduler?.control?.errors\"\n c8yProductExperience\n [actionName]=\"BULK_OPERATION_EVENT\"\n [actionData]=\"{ title: modalTitle, result: 'Save' }\"\n >\n <span translate>Save</span>\n </button>\n </div>\n</div>\n","import {\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnInit,\n Output,\n SimpleChanges,\n ViewChild,\n ChangeDetectionStrategy\n} from '@angular/core';\nimport { IOperationBulk, OperationBulkGeneralStatus } from '@c8y/client';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport {\n AlertService,\n ListItemComponent,\n ModalService,\n Status,\n ListItemIconComponent,\n IconDirective,\n C8yTranslateDirective,\n ListItemActionComponent,\n ProductExperienceDirective,\n ListItemCollapseComponent,\n C8yTranslatePipe,\n DatePipe,\n NumberPipe\n} from '@c8y/ngx-components';\nimport { BulkOperationsService } from '@c8y/ngx-components/operations/bulk-operations-service';\nimport { BULK_OPERATION_EVENT } from '@c8y/ngx-components/operations/product-experience';\nimport { assign, cloneDeep, find, values } from 'lodash-es';\nimport { BsModalRef, BsModalService, ModalOptions } from 'ngx-bootstrap/modal';\nimport {\n BULK_OPERATION_STATUS_OPTIONS,\n OperationStatusOptionsMap\n} from './bulk-operation-list-item.model';\nimport { BulkOperationListItemService } from './bulk-operation-list-item.service';\nimport { BulkOperationsRescheduleModalComponent } from './modals/bulk-operations-reschedule-modal.component';\nimport { NgClass, NgIf } from '@angular/common';\nimport { TooltipDirective } from 'ngx-bootstrap/tooltip';\nimport { PopoverDirective } from 'ngx-bootstrap/popover';\nimport { OperationDetailsTabsComponent } from '@c8y/ngx-components/operations/operations-list-item-details';\n\n@Component({\n selector: 'c8y-bulk-operation-list-item',\n templateUrl: './bulk-operation-list-item.component.html',\n imports: [\n ListItemComponent,\n NgClass,\n ListItemIconComponent,\n IconDirective,\n TooltipDirective,\n NgIf,\n C8yTranslateDirective,\n PopoverDirective,\n ListItemActionComponent,\n ProductExperienceDirective,\n ListItemCollapseComponent,\n OperationDetailsTabsComponent,\n C8yTranslatePipe,\n DatePipe,\n NumberPipe\n ],\n changeDetection: ChangeDetectionStrategy.Eager\n})\nexport class BulkOperationListItemComponent implements OnInit, OnChanges {\n BULK_OPERATION_EVENT = BULK_OPERATION_EVENT;\n @Input()\n bulkOperation: Partial<IOperationBulk>;\n @Input()\n detailsCollapsed = true;\n @Input()\n readOnly = 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 BULK_OPERATION_STATUS_OPTIONS: OperationStatusOptionsMap = BULK_OPERATION_STATUS_OPTIONS;\n bsModalRef: BsModalRef;\n finishDatePopoverText: string = gettext(\n 'Approximate date, estimated based on the bulk operation settings.'\n );\n progressBarClass = 'progress';\n progressBarColor: string;\n progressBarStatus = 0;\n\n constructor(\n public bulkOperationListItemService: BulkOperationListItemService,\n private bulkOperationsService: BulkOperationsService,\n private modal: ModalService,\n private alert: AlertService,\n private bsModalService: BsModalService\n ) {}\n\n ngOnInit() {\n this.finishDate = this.calculateFinishDateMs();\n this.setProgressBar();\n }\n\n getOperationStatusOptions() {\n const statusOptions = values(BULK_OPERATION_STATUS_OPTIONS);\n return find(statusOptions, options =>\n options.generalStatuses.includes(this.bulkOperation.generalStatus)\n );\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.bulkOperation && !changes.bulkOperation.firstChange) {\n this.setProgressBar();\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 = {\n initialState,\n class: 'modal-sm',\n ariaDescribedby: 'modal-body',\n ariaLabelledBy: 'modal-title',\n backdrop: 'static'\n } 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 {},\n { eventName: BULK_OPERATION_EVENT }\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 { eventName: BULK_OPERATION_EVENT }\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","<c8y-li\n class=\"c8y-list__item--double-actions\"\n [ngClass]=\"{ 'c8y-list__item--no-expand': !detailsCollapsed }\"\n [collapsed]=\"detailsCollapsed\"\n #listItem\n id=\"{{ bulkOperation.id }}\"\n>\n <c8y-li-icon>\n <i\n [c8yIcon]=\"getOperationStatusOptions().icon\"\n [ngClass]=\"getOperationStatusOptions().styleClass\"\n [tooltip]=\"getOperationStatusOptions().label | translate\"\n ></i>\n </c8y-li-icon>\n <div [ngClass]=\"{ 'content-flex-58': !readOnly, 'content-flex-50': readOnly }\">\n <div class=\"col-5\">\n <button\n class=\"btn-clean\"\n type=\"button\"\n title=\"{{ bulkOperation.id }} - {{\n bulkOperation.operationPrototype.description | translate\n }}\"\n (click)=\"listItem.toggleCollapsed()\"\n >\n <span class=\"text-truncate\">\n <strong class=\"text-muted m-r-4\">{{ bulkOperation.id }}</strong>\n {{ bulkOperation.operationPrototype.description | translate }}\n </span>\n </button>\n </div>\n <div class=\"flex-grow\">\n <div class=\"m-t-8 visible-xs\"></div>\n <hr *ngIf=\"isStatusCanceled(); else statusNotCanceled\" class=\"m-t-16 m-b-0 visible-xs\" />\n <ng-template #statusNotCanceled>\n <div\n [class]=\"progressBarClass\"\n title=\"{{ progressBarStatus | c8yNumber: 'floor':'1.0-0' }}%\"\n >\n <div\n [class]=\"progressBarColor\"\n role=\"progressbar\"\n [attr.aria-label]=\"'Progress' | translate\"\n aria-valuenow=\"0\"\n aria-valuemin=\"0\"\n aria-valuemax=\"100\"\n [style.width.%]=\"progressBarStatus\"\n >\n <span *ngIf=\"progressBarStatus !== 0\">\n {{ progressBarStatus | c8yNumber: 'floor':'1.0-0' }}%\n </span>\n </div>\n </div>\n </ng-template>\n </div>\n <div class=\"col-4\">\n <div class=\"p-t-8 visible-xs\"></div>\n <small *ngIf=\"bulkOperation.progress.successful > 0\" class=\"m-r-8 icon-flex\">\n <i c8yIcon=\"check-circle\" class=\"text-success m-r-4\"></i>\n <span\n ngNonBindable\n translate\n [translateParams]=\"{ bulkOperationsCountSuccessful: bulkOperation.progress.successful }\"\n >\n {{ bulkOperationsCountSuccessful }} successful\n </span>\n </small>\n <small *ngIf=\"bulkOperation.progress.failed > 0\" class=\"m-r-8 icon-flex\">\n <i c8yIcon=\"warning\" class=\"text-danger m-r-4\"></i>\n <span\n ngNonBindable\n translate\n [translateParams]=\"{ bulkOperationsCountFailed: bulkOperation.progress.failed }\"\n >\n {{ bulkOperationsCountFailed }} failed\n </span>\n </small>\n <small *ngIf=\"bulkOperation.progress.executing > 0\" class=\"m-r-8 icon-flex\">\n <i c8yIcon=\"refresh\" class=\"text-primary m-r-4\"></i>\n <span\n ngNonBindable\n translate\n [translateParams]=\"{ bulkOperationsCountExecuting: bulkOperation.progress.executing }\"\n >\n {{ bulkOperationsCountExecuting }} executing\n </span>\n </small>\n <small *ngIf=\"bulkOperation.progress.pending > 0\" class=\"m-r-8 icon-flex\">\n <i c8yIcon=\"clock-o\" class=\"text-primary m-r-4\"></i>\n <span\n ngNonBindable\n translate\n [translateParams]=\"{ bulkOperationsCountPending: bulkOperation.progress.pending }\"\n >\n {{ bulkOperationsCountPending }} pending\n </span>\n </small>\n </div>\n </div>\n <div class=\"c8y-list__item__footer\">\n <div class=\"m-r-16\">\n <span class=\"text-label-small m-r-4\" translate>Start</span>\n <small class=\"icon-flex\">\n <i c8yIcon=\"calendar\" class=\"m-r-4\"></i>\n <span>\n {{ bulkOperation.startDate | c8yDate }}\n </span>\n </small>\n </div>\n <div class=\"m-r-16\" *ngIf=\"bulkOperationGeneralStatus.CANCELED !== bulkOperation.generalStatus\">\n <span class=\"text-label-small m-r-4\" translate>Finish</span>\n\n <small class=\"icon-flex\">\n <i c8yIcon=\"calendar\" class=\"m-r-4\"></i>\n <span>{{ finishDate | c8yDate }}</span>\n </small>\n <button\n class=\"btn-help btn-help--sm\"\n type=\"button\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ finishDatePopoverText | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n *ngIf=\"isStatusScheduled() || isStatusExecutingOrExecutingWithError()\"\n ></button>\n </div>\n </div>\n <ng-container *ngIf=\"!readOnly\">\n <c8y-li-action\n *ngIf=\"isStatusScheduled()\"\n label=\"{{ 'Edit schedule' | translate }}\"\n (click)=\"editSchedule()\"\n icon=\"pencil\"\n c8yProductExperience\n [actionName]=\"BULK_OPERATION_EVENT\"\n ></c8y-li-action>\n <c8y-li-action\n *ngIf=\"\n isStatusScheduled() || (isStatusExecutingOrExecutingWithError() && !allOperationsCreated())\n \"\n label=\"{{ 'Cancel bulk operation' | translate }}\"\n (click)=\"cancelBulkOperation()\"\n icon=\"remove\"\n c8yProductExperience\n [actionName]=\"BULK_OPERATION_EVENT\"\n ></c8y-li-action>\n <c8y-li-action\n *ngIf=\"isStatusFailed()\"\n label=\"{{ 'Retry failed operations' | translate }}\"\n (click)=\"retryFailedOperation()\"\n icon=\"repeat\"\n c8yProductExperience\n [actionName]=\"BULK_OPERATION_EVENT\"\n ></c8y-li-action>\n <c8y-li-action\n *ngIf=\"isStatusFailed()\"\n label=\"{{ 'Set operation to SUCCESSFUL' | translate }}\"\n (click)=\"setToSuccessful()\"\n icon=\"check-circle\"\n c8yProductExperience\n [actionName]=\"BULK_OPERATION_EVENT\"\n ></c8y-li-action>\n </ng-container>\n <c8y-li-collapse class=\"m-b-16\">\n <c8y-operation-details-tabs\n *ngIf=\"!listItem.collapsed\"\n [operation]=\"bulkOperation\"\n [readOnly]=\"readOnly\"\n (onRetryFailedOperations)=\"retryFailedOperation()\"\n (showFailedOperation)=\"openFailedOperation($event)\"\n [bulkOperationModalDetailsService]=\"bulkOperationListItemService\"\n ></c8y-operation-details-tabs>\n </c8y-li-collapse>\n</c8y-li>\n","import { NgModule } from '@angular/core';\nimport { BulkOperationListItemComponent } from './bulk-operation-list-item.component';\nimport { BulkOperationListItemService } from './bulk-operation-list-item.service';\nimport { BulkOperationWrapperComponent } from './bulk-operation-wrapper.component';\nimport { BULK_OPERATION_WRAPPER_MODAL_BODY_COMPONENT } from './bulk-operation-wrapper.model';\nimport { ModalBodyHostDirective } from './modal-body-host.directive';\nimport { BulkOperationsRescheduleModalComponent } from './modals/bulk-operations-reschedule-modal.component';\n\n/**\n * This module allows for displaying the list item of a bulk operation with its details.\n */\n@NgModule({\n imports: [\n BulkOperationListItemComponent,\n BulkOperationsRescheduleModalComponent,\n BulkOperationWrapperComponent,\n ModalBodyHostDirective\n ],\n providers: [\n BulkOperationListItemService,\n {\n provide: BULK_OPERATION_WRAPPER_MODAL_BODY_COMPONENT,\n useValue: {\n component: BulkOperationListItemComponent,\n config: { detailsCollapsed: false, readOnly: true }\n }\n }\n ],\n exports: [\n BulkOperationListItemComponent,\n BulkOperationsRescheduleModalComponent,\n BulkOperationWrapperComponent\n ]\n})\nexport class BulkOperationListItemModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2","i1.BulkOperationListItemService","i4"],"mappings":"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"}
@@ -199,7 +199,7 @@ class OperationsListItemComponent {
199
199
  provide: PRODUCT_EXPERIENCE_EVENT_SOURCE,
200
200
  useExisting: forwardRef(() => OperationsListItemComponent)
201
201
  }
202
- ], viewQueries: [{ propertyName: "listItem", first: true, predicate: ["listItem"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<c8y-li\n class=\"c8y-list__item--double-actions\"\n [ngClass]=\"{ 'c8y-list__item--no-expand': noExpandToggle }\"\n [collapsed]=\"collapsed\"\n #listItem\n id=\"{{ operation.id }}\"\n>\n <c8y-li-icon>\n <button\n class=\"btn-clean\"\n type=\"button\"\n [attr.aria-label]=\"OPERATION_STATUS_OPTIONS_MAP[operation.status].label | translate\"\n [tooltip]=\"OPERATION_STATUS_OPTIONS_MAP[operation.status].label | translate\"\n placement=\"right\"\n container=\"body\"\n [delay]=\"500\"\n >\n <i\n [c8yIcon]=\"OPERATION_STATUS_OPTIONS_MAP[operation.status].icon\"\n [ngClass]=\"OPERATION_STATUS_OPTIONS_MAP[operation.status].styleClass\"\n ></i>\n </button>\n </c8y-li-icon>\n <div [ngClass]=\"{ 'content-flex-58': !readOnly, 'content-flex-50': readOnly }\">\n <div class=\"col-5\">\n <span title=\"{{ operationTitle | translate }}\" class=\"text-truncate\">\n {{ operationTitle | translate }}\n </span>\n </div>\n <div class=\"col-3\" *ngIf=\"!deviceId\">\n <a\n title=\"{{ operation.deviceName }}\"\n [routerLink]=\"['/device', operation.deviceId, 'device-info']\"\n routerLinkActive=\"active\"\n class=\"text-truncate\"\n >\n {{ operation.deviceName }}\n </a>\n </div>\n <div class=\"col-3\">\n <small class=\"icon-flex text-muted\">\n <i c8yIcon=\"calendar\" class=\"m-r-4\"></i>\n {{ operation.creationTime | c8yDate }}\n </small>\n </div>\n </div>\n <ng-container *ngIf=\"!readOnly\">\n <c8y-li-action\n label=\"{{ 'Schedule as bulk operation' | translate }}\"\n (click)=\"createCustomizedBulkOperation($event)\"\n icon=\"c8y-icon c8y-icon-energy\"\n c8yProductExperience\n inherit\n ></c8y-li-action>\n <ng-container *c8yIfAllowed=\"inventoryPermissions; allowAny: true\">\n <ng-container *c8yIfAllowed=\"smartRuleAdminPermissions; allowAny: true\">\n <c8y-li-action\n *ngIf=\"isSmartRulesMicroserviceAvailable\"\n label=\"{{ 'Create smart rule' | translate }}\"\n (click)=\"operationsListService.createSmartRule(operation)\"\n icon=\"sliders\"\n c8yProductExperience\n inherit\n ></c8y-li-action>\n </ng-container>\n </ng-container>\n <c8y-li-action\n *ngIf=\"operation.status === OPERATION_STATUS.PENDING\"\n label=\"{{ 'Cancel operation' | translate }}\"\n (click)=\"$event.stopPropagation(); sharedService.cancel(operation)\"\n icon=\"times-circle\"\n c8yProductExperience\n inherit\n ></c8y-li-action>\n </ng-container>\n <c8y-li-collapse class=\"m-b-16\">\n <c8y-operation-details-tabs\n *ngIf=\"!listItem.collapsed\"\n [operation]=\"operation\"\n [bulkOperationModalDetailsService]=\"bulkOperationListItemService\"\n ></c8y-operation-details-tabs>\n </c8y-li-collapse>\n</c8y-li>\n", dependencies: [{ kind: "ngmodule", type: CoreModule }, { kind: "directive", type: i1$2.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i4$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$2.IfAllowedDirective, selector: "[c8yIfAllowed]", inputs: ["c8yIfAllowed", "c8yIfAllowedAllowAny"] }, { kind: "component", type: i1$2.ListItemComponent, selector: "c8y-list-item, c8y-li", inputs: ["active", "highlighted", "emptyActions", "dense", "collapsed", "selectable"], outputs: ["collapsedChange"] }, { kind: "component", type: i1$2.ListItemIconComponent, selector: "c8y-list-item-icon, c8y-li-icon", inputs: ["icon", "status"] }, { kind: "component", type: i1$2.ListItemActionComponent, selector: "c8y-list-item-action, c8y-li-action", inputs: ["label", "icon", "disabled"], outputs: ["click"] }, { kind: "component", type: i1$2.ListItemCollapseComponent, selector: "c8y-list-item-collapse, c8y-li-collapse", inputs: ["collapseWay"] }, { kind: "directive", type: i1$2.ProductExperienceDirective, selector: "[c8yProductExperience]", inputs: ["actionName", "actionData", "inherit", "suppressDataOverriding"] }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i7.TooltipDirective, selector: "[tooltip], [tooltipHtml]", inputs: ["adaptivePosition", "tooltip", "placement", "triggers", "container", "containerClass", "boundariesElement", "isOpen", "isDisabled", "delay", "tooltipHtml", "tooltipPlacement", "tooltipIsOpen", "tooltipEnable", "tooltipAppendToBody", "tooltipAnimation", "tooltipClass", "tooltipContext", "tooltipPopupDelay", "tooltipFadeDuration", "tooltipTrigger"], outputs: ["tooltipChange", "onShown", "onHidden", "tooltipStateChanged"], exportAs: ["bs-tooltip"] }, { kind: "ngmodule", type: OperationsListItemDetailsModule }, { kind: "component", type: i8.OperationDetailsTabsComponent, selector: "c8y-operation-details-tabs", inputs: ["operation", "readOnly", "bulkOperationModalDetailsService"], outputs: ["onRetryFailedOperations", "showFailedOperation"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "pipe", type: i1$2.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i1$2.DatePipe, name: "c8yDate" }], changeDetection: i0.ChangeDetectionStrategy.Eager }); }
202
+ ], viewQueries: [{ propertyName: "listItem", first: true, predicate: ["listItem"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<c8y-li\n class=\"c8y-list__item--double-actions\"\n [ngClass]=\"{ 'c8y-list__item--no-expand': noExpandToggle }\"\n [collapsed]=\"collapsed\"\n #listItem\n id=\"{{ operation.id }}\"\n>\n <c8y-li-icon>\n <button\n class=\"btn-clean\"\n type=\"button\"\n [attr.aria-label]=\"OPERATION_STATUS_OPTIONS_MAP[operation.status].label | translate\"\n [tooltip]=\"OPERATION_STATUS_OPTIONS_MAP[operation.status].label | translate\"\n placement=\"right\"\n container=\"body\"\n [delay]=\"500\"\n >\n <i\n [c8yIcon]=\"OPERATION_STATUS_OPTIONS_MAP[operation.status].icon\"\n [ngClass]=\"OPERATION_STATUS_OPTIONS_MAP[operation.status].styleClass\"\n ></i>\n </button>\n </c8y-li-icon>\n <div [ngClass]=\"{ 'content-flex-58': !readOnly, 'content-flex-50': readOnly }\">\n <div class=\"col-5\">\n <span title=\"{{ operationTitle | translate }}\" class=\"text-truncate\">\n {{ operationTitle | translate }}\n </span>\n </div>\n <div class=\"col-3\" *ngIf=\"!deviceId\">\n <a\n title=\"{{ operation.deviceName }}\"\n [routerLink]=\"['/device', operation.deviceId, 'device-info']\"\n routerLinkActive=\"active\"\n class=\"text-truncate\"\n >\n {{ operation.deviceName }}\n </a>\n </div>\n <div class=\"col-3\">\n <small class=\"icon-flex text-muted\">\n <i c8yIcon=\"calendar\" class=\"m-r-4\"></i>\n {{ operation.creationTime | c8yDate }}\n </small>\n </div>\n </div>\n <ng-container *ngIf=\"!readOnly\">\n <c8y-li-action\n label=\"{{ 'Schedule as bulk operation' | translate }}\"\n (click)=\"createCustomizedBulkOperation($event)\"\n icon=\"c8y-icon c8y-icon-energy\"\n c8yProductExperience\n inherit\n ></c8y-li-action>\n <ng-container *c8yIfAllowed=\"inventoryPermissions; allowAny: true\">\n <ng-container *c8yIfAllowed=\"smartRuleAdminPermissions; allowAny: true\">\n <c8y-li-action\n *ngIf=\"isSmartRulesMicroserviceAvailable\"\n label=\"{{ 'Create smart rule' | translate }}\"\n (click)=\"operationsListService.createSmartRule(operation)\"\n icon=\"sliders\"\n c8yProductExperience\n inherit\n ></c8y-li-action>\n </ng-container>\n </ng-container>\n <c8y-li-action\n *ngIf=\"operation.status === OPERATION_STATUS.PENDING\"\n label=\"{{ 'Cancel operation' | translate }}\"\n (click)=\"$event.stopPropagation(); sharedService.cancel(operation)\"\n icon=\"times-circle\"\n c8yProductExperience\n inherit\n ></c8y-li-action>\n </ng-container>\n <c8y-li-collapse class=\"m-b-16\">\n <c8y-operation-details-tabs\n *ngIf=\"!listItem.collapsed\"\n [operation]=\"operation\"\n [bulkOperationModalDetailsService]=\"bulkOperationListItemService\"\n ></c8y-operation-details-tabs>\n </c8y-li-collapse>\n</c8y-li>\n", dependencies: [{ kind: "ngmodule", type: CoreModule }, { kind: "directive", type: i1$2.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i4$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$2.IfAllowedDirective, selector: "[c8yIfAllowed]", inputs: ["c8yIfAllowed", "c8yIfAllowedAllowAny"] }, { kind: "component", type: i1$2.ListItemComponent, selector: "c8y-list-item, c8y-li", inputs: ["active", "highlighted", "emptyActions", "dense", "collapsed", "selectable", "selectOnClick"], outputs: ["collapsedChange"] }, { kind: "component", type: i1$2.ListItemIconComponent, selector: "c8y-list-item-icon, c8y-li-icon", inputs: ["icon", "status"] }, { kind: "component", type: i1$2.ListItemActionComponent, selector: "c8y-list-item-action, c8y-li-action", inputs: ["label", "icon", "disabled"], outputs: ["click"] }, { kind: "component", type: i1$2.ListItemCollapseComponent, selector: "c8y-list-item-collapse, c8y-li-collapse", inputs: ["collapseWay"] }, { kind: "directive", type: i1$2.ProductExperienceDirective, selector: "[c8yProductExperience]", inputs: ["actionName", "actionData", "inherit", "suppressDataOverriding"] }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i7.TooltipDirective, selector: "[tooltip], [tooltipHtml]", inputs: ["adaptivePosition", "tooltip", "placement", "triggers", "container", "containerClass", "boundariesElement", "isOpen", "isDisabled", "delay", "tooltipHtml", "tooltipPlacement", "tooltipIsOpen", "tooltipEnable", "tooltipAppendToBody", "tooltipAnimation", "tooltipClass", "tooltipContext", "tooltipPopupDelay", "tooltipFadeDuration", "tooltipTrigger"], outputs: ["tooltipChange", "onShown", "onHidden", "tooltipStateChanged"], exportAs: ["bs-tooltip"] }, { kind: "ngmodule", type: OperationsListItemDetailsModule }, { kind: "component", type: i8.OperationDetailsTabsComponent, selector: "c8y-operation-details-tabs", inputs: ["operation", "readOnly", "bulkOperationModalDetailsService"], outputs: ["onRetryFailedOperations", "showFailedOperation"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "pipe", type: i1$2.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i1$2.DatePipe, name: "c8yDate" }], changeDetection: i0.ChangeDetectionStrategy.Eager }); }
203
203
  }
204
204
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.19", ngImport: i0, type: OperationsListItemComponent, decorators: [{
205
205
  type: Component,
@@ -1 +1 @@
1
- {"version":3,"file":"c8y-ngx-components-operations-operations-list.mjs","sources":["../../operations/operations-list/single-operations-tab.factory.ts","../../operations/operations-list/device-control.feature.ts","../../operations/operations-list/operations-list.service.ts","../../operations/operations-list/operations-list-item.component.ts","../../operations/operations-list/operations-list-item.component.html","../../operations/operations-list/operations-list.component.ts","../../operations/operations-list/operations-list.component.html","../../operations/operations-list/c8y-ngx-components-operations-operations-list.ts"],"sourcesContent":["import { Inject, Injectable, InjectionToken, Optional } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { gettext } from '@c8y/ngx-components/gettext';\r\nimport { Tab, TabFactory } from '@c8y/ngx-components';\r\nimport { isNil, omitBy } from 'lodash-es';\r\n\r\nexport const SINGLE_OPERATIONS_TAB_CONFIG = new InjectionToken<Partial<Tab>>(\r\n 'SINGLE_OPERATIONS_TAB_CONFIG'\r\n);\r\n\r\n@Injectable()\r\nexport class SingleOperationsTabsFactory implements TabFactory {\r\n constructor(\r\n public router: Router,\r\n @Optional()\r\n @Inject(SINGLE_OPERATIONS_TAB_CONFIG)\r\n private config: Tab\r\n ) {}\r\n get() {\r\n const tabs: Tab[] = [];\r\n if (this.router.url.match(/devicecontrol/g)) {\r\n tabs.push(<Tab>{\r\n ...{\r\n path: 'devicecontrol/single',\r\n label: gettext('Single operations'),\r\n icon: 'c8y-icon c8y-icon-device-control',\r\n priority: 1100,\r\n orientation: 'horizontal'\r\n },\r\n ...omitBy(this.config, isNil)\r\n });\r\n }\r\n\r\n return tabs;\r\n }\r\n}\r\n","import { EnvironmentProviders, makeEnvironmentProviders } from '@angular/core';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport {\n hookNavigator,\n hookRoute,\n hookTab,\n Route,\n TabOrientation,\n ViewContext\n} from '@c8y/ngx-components';\nimport {\n DEVICE_CONTROL_NAVIGATOR_NODE_CONFIG,\n OperationsNavigationFactory\n} from '@c8y/ngx-components/operations/shared';\nimport { isNil, omitBy } from 'lodash-es';\nimport {\n SINGLE_OPERATIONS_TAB_CONFIG,\n SingleOperationsTabsFactory\n} from './single-operations-tab.factory';\n\nexport interface DeviceControlOverviewFeatureConfig {\n path?: string;\n tabLabel?: string;\n tabIcon?: string;\n tabPriority?: number;\n tabOrientation?: TabOrientation;\n navigatorLabel?: string;\n navigatorIcon?: string;\n navigatorPriority?: number;\n navigatorParent?: string;\n}\n\nexport const deviceControlOverviewFeatureProviderFactory: (\n config?: DeviceControlOverviewFeatureConfig\n) => EnvironmentProviders = (config?: DeviceControlOverviewFeatureConfig) => {\n config = {\n ...{ path: 'devicecontrol/single' },\n ...omitBy(config, isNil)\n };\n return makeEnvironmentProviders([\n hookRoute({\n path: config.path,\n loadComponent: () =>\n import('./operations-list.component').then(m => m.OperationsListComponent)\n }),\n hookRoute({\n path: config.path,\n redirectTo: config.path,\n pathMatch: 'full'\n }),\n /* Provide config for SingleOperationsTabsFactory */\n {\n provide: SINGLE_OPERATIONS_TAB_CONFIG,\n useValue: {\n path: config.path,\n label: config.tabLabel,\n icon: config.tabIcon,\n priority: config.tabPriority,\n orientation: config.tabOrientation\n }\n },\n hookTab(SingleOperationsTabsFactory),\n /* Provide config for OperationsNavigationFactory */\n {\n provide: DEVICE_CONTROL_NAVIGATOR_NODE_CONFIG,\n useValue: {\n path: config.path,\n label: config.navigatorLabel,\n icon: config.navigatorIcon,\n priority: config.navigatorPriority,\n parent: config.navigatorParent\n }\n },\n hookNavigator(OperationsNavigationFactory)\n ]);\n};\n\nexport const deviceControlTabFeatureProviderFactory: (\n route?: Partial<Route>\n) => EnvironmentProviders = (route: Partial<Route>) =>\n makeEnvironmentProviders([\n hookRoute({\n ...{\n context: ViewContext.Device,\n path: 'control',\n loadComponent: () =>\n import('./operations-list.component').then(m => m.OperationsListComponent),\n label: gettext('Control'),\n icon: 'c8y-icon c8y-icon-device-control',\n priority: 100\n },\n ...omitBy(route, isNil)\n })\n ]);\n","import { Injectable, Optional } from '@angular/core';\nimport { IOperation, OperationService, SmartRulesService } from '@c8y/client';\nimport { Ng1SmartRulesService } from '@c8y/ngx-components/upgrade/upgraded-services';\n\n@Injectable({ providedIn: 'root' })\nexport class OperationsListService {\n constructor(\n private operationService: OperationService,\n private smartRulesService: SmartRulesService,\n @Optional() private ng1SmartRulesService: Ng1SmartRulesService\n ) {}\n\n getOperations(customFilter = {}) {\n const filter = {\n withTotalPages: true,\n withDeleted: true,\n pageSize: 50,\n dateFrom: new Date(0).toISOString(),\n revert: true,\n ...customFilter\n };\n\n return this.operationService.list(filter);\n }\n\n isSmartRulesMicroserviceAvailable() {\n return this.smartRulesService.isMicroserviceAvailable();\n }\n\n getSmartRulesCreatePermissions() {\n if (this.ng1SmartRulesService && this.ng1SmartRulesService.permissionsCfgs) {\n return this.ng1SmartRulesService.permissionsCfgs.create;\n }\n }\n\n async createSmartRule(operation: Partial<IOperation>) {\n if (this.ng1SmartRulesService) {\n return await this.ng1SmartRulesService.addNewForOutputOperationWithUI(operation);\n }\n }\n}\n","import { Component, forwardRef, Input, OnInit, SimpleChanges, ViewChild, ChangeDetectionStrategy } from '@angular/core';\nimport { ActivatedRoute, Router, RouterLink } from '@angular/router';\nimport { IOperation, OperationStatus } from '@c8y/client';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport {\n CoreModule,\n ListItemComponent,\n PRODUCT_EXPERIENCE_EVENT_SOURCE,\n ProductExperienceEvent,\n ProductExperienceEventSource\n} from '@c8y/ngx-components';\nimport { BulkOperationListItemService } from '@c8y/ngx-components/operations/bulk-operation-list-item';\nimport { OperationsListItemDetailsModule } from '@c8y/ngx-components/operations/operations-list-item-details';\nimport {\n OPERATION_STATUS_OPTIONS_MAP,\n OperationsService,\n OperationStatusOptionsMapShared\n} from '@c8y/ngx-components/operations/shared';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport { OperationsListService } from './operations-list.service';\n\n@Component({\n selector: 'c8y-operations-list-item',\n templateUrl: './operations-list-item.component.html',\n imports: [CoreModule, TooltipModule, OperationsListItemDetailsModule, RouterLink],\n providers: [\n {\n provide: PRODUCT_EXPERIENCE_EVENT_SOURCE,\n useExisting: forwardRef(() => OperationsListItemComponent)\n }\n ],\n changeDetection: ChangeDetectionStrategy.Eager\n})\nexport class OperationsListItemComponent implements OnInit, ProductExperienceEventSource {\n @Input()\n operation: Partial<IOperation>;\n @Input()\n collapsed = true;\n @Input()\n readOnly = false;\n @Input()\n noExpandToggle = false;\n @Input()\n isSmartRulesMicroserviceAvailable: boolean;\n @ViewChild('listItem', { static: true }) listItem: ListItemComponent;\n refreshLoading = false;\n OPERATION_STATUS = OperationStatus;\n OPERATION_STATUS_OPTIONS_MAP: OperationStatusOptionsMapShared = OPERATION_STATUS_OPTIONS_MAP;\n deviceId: string | number =\n this.route.snapshot.parent?.data.contextData?.id ||\n this.route.snapshot.firstChild?.data.contextData?.id;\n inventoryPermissions: string[];\n smartRuleAdminPermissions: string[];\n operationTitle: string;\n productExperienceEvent: ProductExperienceEvent;\n\n constructor(\n public bulkOperationListItemService: BulkOperationListItemService,\n public sharedService: OperationsService,\n public operationsListService: OperationsListService,\n private route: ActivatedRoute,\n private router: Router\n ) {}\n\n ngOnInit() {\n this.updateOperationTitle();\n\n const smartRulesCreatePermissions = this.operationsListService.getSmartRulesCreatePermissions();\n if (smartRulesCreatePermissions) {\n this.inventoryPermissions = smartRulesCreatePermissions[0].anyRole;\n this.smartRuleAdminPermissions = smartRulesCreatePermissions[1].anyRole;\n }\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.operation && changes.operation.currentValue) {\n this.updateOperationTitle();\n }\n }\n\n createCustomizedBulkOperation($event?: Event) {\n if ($event) {\n $event.stopPropagation();\n }\n\n this.router.navigateByUrl(`/devicecontrol/single/create-bulk/${this.operation.id}`);\n }\n\n private updateOperationTitle(): void {\n this.operationTitle =\n this.operation?.description ||\n this.operation?.c8y_Command?.text ||\n gettext('No command text or description available');\n }\n}\n","<c8y-li\n class=\"c8y-list__item--double-actions\"\n [ngClass]=\"{ 'c8y-list__item--no-expand': noExpandToggle }\"\n [collapsed]=\"collapsed\"\n #listItem\n id=\"{{ operation.id }}\"\n>\n <c8y-li-icon>\n <button\n class=\"btn-clean\"\n type=\"button\"\n [attr.aria-label]=\"OPERATION_STATUS_OPTIONS_MAP[operation.status].label | translate\"\n [tooltip]=\"OPERATION_STATUS_OPTIONS_MAP[operation.status].label | translate\"\n placement=\"right\"\n container=\"body\"\n [delay]=\"500\"\n >\n <i\n [c8yIcon]=\"OPERATION_STATUS_OPTIONS_MAP[operation.status].icon\"\n [ngClass]=\"OPERATION_STATUS_OPTIONS_MAP[operation.status].styleClass\"\n ></i>\n </button>\n </c8y-li-icon>\n <div [ngClass]=\"{ 'content-flex-58': !readOnly, 'content-flex-50': readOnly }\">\n <div class=\"col-5\">\n <span title=\"{{ operationTitle | translate }}\" class=\"text-truncate\">\n {{ operationTitle | translate }}\n </span>\n </div>\n <div class=\"col-3\" *ngIf=\"!deviceId\">\n <a\n title=\"{{ operation.deviceName }}\"\n [routerLink]=\"['/device', operation.deviceId, 'device-info']\"\n routerLinkActive=\"active\"\n class=\"text-truncate\"\n >\n {{ operation.deviceName }}\n </a>\n </div>\n <div class=\"col-3\">\n <small class=\"icon-flex text-muted\">\n <i c8yIcon=\"calendar\" class=\"m-r-4\"></i>\n {{ operation.creationTime | c8yDate }}\n </small>\n </div>\n </div>\n <ng-container *ngIf=\"!readOnly\">\n <c8y-li-action\n label=\"{{ 'Schedule as bulk operation' | translate }}\"\n (click)=\"createCustomizedBulkOperation($event)\"\n icon=\"c8y-icon c8y-icon-energy\"\n c8yProductExperience\n inherit\n ></c8y-li-action>\n <ng-container *c8yIfAllowed=\"inventoryPermissions; allowAny: true\">\n <ng-container *c8yIfAllowed=\"smartRuleAdminPermissions; allowAny: true\">\n <c8y-li-action\n *ngIf=\"isSmartRulesMicroserviceAvailable\"\n label=\"{{ 'Create smart rule' | translate }}\"\n (click)=\"operationsListService.createSmartRule(operation)\"\n icon=\"sliders\"\n c8yProductExperience\n inherit\n ></c8y-li-action>\n </ng-container>\n </ng-container>\n <c8y-li-action\n *ngIf=\"operation.status === OPERATION_STATUS.PENDING\"\n label=\"{{ 'Cancel operation' | translate }}\"\n (click)=\"$event.stopPropagation(); sharedService.cancel(operation)\"\n icon=\"times-circle\"\n c8yProductExperience\n inherit\n ></c8y-li-action>\n </ng-container>\n <c8y-li-collapse class=\"m-b-16\">\n <c8y-operation-details-tabs\n *ngIf=\"!listItem.collapsed\"\n [operation]=\"operation\"\n [bulkOperationModalDetailsService]=\"bulkOperationListItemService\"\n ></c8y-operation-details-tabs>\n </c8y-li-collapse>\n</c8y-li>\n","import { Component, forwardRef, input, ViewChild, ChangeDetectionStrategy } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { IOperation, IResultList } from '@c8y/client';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport {\n CoreModule,\n OperationRealtimeService,\n PRODUCT_EXPERIENCE_EVENT_SOURCE,\n ProductExperienceEvent,\n ProductExperienceEventSource\n} from '@c8y/ngx-components';\nimport {\n SINGLE_OPERATION_EVENT_DEVICE_TAB,\n SINGLE_OPERATION_EVENT_OVERVIEW\n} from '@c8y/ngx-components/operations/product-experience';\nimport {\n OPERATION_STATUS_OPTIONS_MAP,\n OperationStatusOption,\n OperationStatusOptionsMapShared\n} from '@c8y/ngx-components/operations/shared';\nimport {\n StatusFilterComponent,\n StatusFilterModule\n} from '@c8y/ngx-components/operations/status-filter';\nimport { flatten } from 'lodash-es';\nimport { BehaviorSubject, combineLatest, Observable, pipe } from 'rxjs';\nimport { map, shareReplay, switchMap, tap } from 'rxjs/operators';\nimport { OperationsListItemComponent } from './operations-list-item.component';\nimport { OperationsListService } from './operations-list.service';\n\n@Component({\n selector: 'c8y-operations-list',\n templateUrl: 'operations-list.component.html',\n imports: [CoreModule, StatusFilterModule, OperationsListItemComponent],\n providers: [\n OperationRealtimeService,\n {\n provide: PRODUCT_EXPERIENCE_EVENT_SOURCE,\n useExisting: forwardRef(() => OperationsListComponent)\n }\n ],\n changeDetection: ChangeDetectionStrategy.Eager\n})\nexport class OperationsListComponent implements ProductExperienceEventSource {\n fragmentType = input<string>();\n readOnlyItems = input(false);\n deviceId: string | number = this.route.snapshot.parent.data.contextData?.id;\n OPERATION_STATUS_OPTIONS_MAP: OperationStatusOptionsMapShared = OPERATION_STATUS_OPTIONS_MAP;\n\n title: string;\n refreshLoading = false;\n isSmartRulesMicroserviceAvailable = false;\n showOverviewBreadcrumbs = false;\n statusFilter$: BehaviorSubject<OperationStatusOption[]> = new BehaviorSubject(null);\n reload$: BehaviorSubject<void> = new BehaviorSubject(null);\n @ViewChild('statusFilter', { static: true }) statusFilter: StatusFilterComponent;\n\n operations$: Observable<IResultList<IOperation>> = combineLatest(\n this.statusFilter$,\n this.reload$\n ).pipe(\n tap(() => {\n this.refreshLoading = true;\n }),\n switchMap(([statusFilters]) => this.filter(statusFilters)),\n tap(() => {\n this.refreshLoading = false;\n }),\n shareReplay(1)\n );\n\n operationsFilterPipe = pipe(\n map((operations: IOperation[]) => {\n const statusFilters = this.statusFilter$.getValue();\n if (!statusFilters || !statusFilters.length) {\n return operations;\n }\n const allowedStatuses = flatten(statusFilters.map(sf => sf.status));\n return operations.filter(op => allowedStatuses.includes(op.status));\n })\n );\n\n productExperienceEvent: ProductExperienceEvent = {\n eventName: !!this.deviceId ? SINGLE_OPERATION_EVENT_DEVICE_TAB : SINGLE_OPERATION_EVENT_OVERVIEW\n };\n\n constructor(\n public realtime: OperationRealtimeService,\n private operationsListService: OperationsListService,\n private route: ActivatedRoute\n ) {\n this.title = this.route.snapshot.parent.data.contextData\n ? this.route.snapshot.parent.data.contextData.name\n : gettext('Single operations');\n this.showOverviewBreadcrumbs = !this.deviceId;\n }\n\n async ngOnInit() {\n this.isSmartRulesMicroserviceAvailable =\n await this.operationsListService.isSmartRulesMicroserviceAvailable();\n }\n\n filter(statusFilters: OperationStatusOption[]) {\n const status =\n statusFilters && statusFilters.length > 0\n ? {\n status: flatten(statusFilters.map(statusFilter => statusFilter.status))\n }\n : {};\n\n return this.getOperations(status);\n }\n\n getOperations(filter?) {\n let queryFilter = this.deviceId ? { ...filter, deviceId: this.deviceId } : filter;\n if (this.fragmentType()) {\n queryFilter = { ...queryFilter, fragmentType: this.fragmentType() };\n }\n return this.operationsListService.getOperations(queryFilter);\n }\n\n compareOperations(operationA: IOperation, operationB: IOperation): number {\n return (\n new Date(operationA.creationTime).getTime() - new Date(operationB.creationTime).getTime()\n );\n }\n}\n","<c8y-title>{{ title | translate }}</c8y-title>\n\n<c8y-breadcrumb *ngIf=\"showOverviewBreadcrumbs\">\n <c8y-breadcrumb-item\n [icon]=\"'c8y-overviews'\"\n [label]=\"'Overviews' | translate\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [icon]=\"'c8y-device-control'\"\n [label]=\"'Device Control' | translate\"\n [path]=\"'devicecontrol/single'\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [icon]=\"'c8y-device-control'\"\n [label]=\"'Single operations' | translate\"\n ></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<c8y-action-bar-item\n [placement]=\"'left'\"\n itemClass=\"navbar-form\"\n>\n <c8y-status-filter\n #statusFilter\n [options]=\"OPERATION_STATUS_OPTIONS_MAP\"\n (onFilterChanged)=\"statusFilter$.next($event)\"\n c8yProductExperience\n inherit\n ></c8y-status-filter>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item [placement]=\"'right'\">\n <c8y-realtime-btn [service]=\"realtime\"></c8y-realtime-btn>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item [placement]=\"'right'\">\n <button\n class=\"btn btn-link d-flex a-i-center\"\n title=\"{{ 'Reload' | translate }}\"\n (click)=\"reload$.next()\"\n >\n <i\n class=\"m-r-4\"\n c8yIcon=\"refresh\"\n [ngClass]=\"{ 'icon-spin': refreshLoading }\"\n ></i>\n <span class=\"text-truncate\">\n {{ 'Reload' | translate }}\n </span>\n </button>\n</c8y-action-bar-item>\n\n<ng-content select=\"c8y-help\">\n <c8y-help\n src=\"/docs/device-management-application/monitoring-and-controlling-devices/#to-view-single-operations\"\n ></c8y-help>\n</ng-content>\n\n<!-- Empty state -->\n<c8y-ui-empty-state\n [icon]=\"'c8y-energy'\"\n [title]=\"'No items to display.' | translate\"\n [subtitle]=\"'Operations will be displayed here.' | translate\"\n *ngIf=\"(operations$ | async)?.data.length === 0 && !(statusFilter$ | async)\"\n></c8y-ui-empty-state>\n<!-- No results empty state -->\n<c8y-ui-empty-state\n [icon]=\"'search'\"\n [title]=\"'No results to display.' | translate\"\n [subtitle]=\"'Adjust or reset the filter.' | translate\"\n *ngIf=\"(operations$ | async)?.data.length === 0 && (statusFilter$ | async)\"\n>\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Reset filter' | translate }}\"\n type=\"button\"\n (click)=\"statusFilter.reset()\"\n translate\n >\n Reset filter\n </button>\n</c8y-ui-empty-state>\n\n<!-- Detailed list of operations + load more button -->\n<c8y-list-group class=\"m-b-24\">\n <div\n class=\"page-sticky-header c8y-list__item c8y-list__item--double-actions hidden-xs\"\n *ngIf=\"(operations$ | async)?.data.length\"\n >\n <div class=\"c8y-list__item__block\">\n <div class=\"c8y-list__item__icon\">\n <i class=\"p-l-24\"></i>\n </div>\n <div class=\"c8y-list__item__body text-truncate-wrap\">\n <div class=\"content-flex-57\">\n <div class=\"col-5\">\n {{ 'Operation' | translate }}\n </div>\n <div\n class=\"flex-grow\"\n *ngIf=\"!deviceId\"\n >\n {{ 'Device' | translate }}\n </div>\n <div class=\"col-4\">\n {{ 'Date created' | translate }}\n </div>\n </div>\n </div>\n <div class=\"c8y-list__item__actions\"></div>\n </div>\n </div>\n <div\n class=\"d-contents\"\n *c8yFor=\"\n let op of operations$ | async;\n let i = index;\n realtime: realtime;\n realtimeOptions: { entityOrId: deviceId, removeOnUpdate: true, insertOnUpdate: true };\n comparator: compareOperations.bind(this);\n loadMore: 'auto';\n pipe: operationsFilterPipe\n \"\n >\n <c8y-operations-list-item\n class=\"d-contents\"\n [operation]=\"op\"\n [readOnly]=\"readOnlyItems()\"\n [isSmartRulesMicroserviceAvailable]=\"isSmartRulesMicroserviceAvailable\"\n (reload)=\"reload$.next()\"\n c8yProductExperience\n inherit\n ></c8y-operations-list-item>\n </div>\n</c8y-list-group>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2","i3.OperationsListService","i5","i6","i2.OperationsListService","i3","i4"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAMO,MAAM,4BAA4B,GAAG,IAAI,cAAc,CAC5D,8BAA8B,CAC/B;MAGY,2BAA2B,CAAA;IACtC,WAAA,CACS,MAAc,EAGb,MAAW,EAAA;QAHZ,IAAA,CAAA,MAAM,GAAN,MAAM;QAGL,IAAA,CAAA,MAAM,GAAN,MAAM;IACb;IACH,GAAG,GAAA;QACD,MAAM,IAAI,GAAU,EAAE;QACtB,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,gBAAgB,CAAC,EAAE;YAC3C,IAAI,CAAC,IAAI,CAAM;gBACb,GAAG;AACD,oBAAA,IAAI,EAAE,sBAAsB;AAC5B,oBAAA,KAAK,EAAE,OAAO,CAAC,mBAAmB,CAAC;AACnC,oBAAA,IAAI,EAAE,kCAAkC;AACxC,oBAAA,QAAQ,EAAE,IAAI;AACd,oBAAA,WAAW,EAAE;AACd,iBAAA;AACD,gBAAA,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK;AAC7B,aAAA,CAAC;QACJ;AAEA,QAAA,OAAO,IAAI;IACb;AAvBW,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,2BAA2B,wCAI5B,4BAA4B,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAJ3B,2BAA2B,EAAA,CAAA,CAAA;;4FAA3B,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBADvC;;0BAII;;0BACA,MAAM;2BAAC,4BAA4B;;;ACiBjC,MAAM,2CAA2C,GAE5B,CAAC,MAA2C,KAAI;AAC1E,IAAA,MAAM,GAAG;AACP,QAAA,GAAG,EAAE,IAAI,EAAE,sBAAsB,EAAE;AACnC,QAAA,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK;KACxB;AACD,IAAA,OAAO,wBAAwB,CAAC;AAC9B,QAAA,SAAS,CAAC;YACR,IAAI,EAAE,MAAM,CAAC,IAAI;AACjB,YAAA,aAAa,EAAE,MACb,wEAAqC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,uBAAuB;SAC5E,CAAC;AACF,QAAA,SAAS,CAAC;YACR,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,UAAU,EAAE,MAAM,CAAC,IAAI;AACvB,YAAA,SAAS,EAAE;SACZ,CAAC;;AAEF,QAAA;AACE,YAAA,OAAO,EAAE,4BAA4B;AACrC,YAAA,QAAQ,EAAE;gBACR,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,KAAK,EAAE,MAAM,CAAC,QAAQ;gBACtB,IAAI,EAAE,MAAM,CAAC,OAAO;gBACpB,QAAQ,EAAE,MAAM,CAAC,WAAW;gBAC5B,WAAW,EAAE,MAAM,CAAC;AACrB;AACF,SAAA;QACD,OAAO,CAAC,2BAA2B,CAAC;;AAEpC,QAAA;AACE,YAAA,OAAO,EAAE,oCAAoC;AAC7C,YAAA,QAAQ,EAAE;gBACR,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,KAAK,EAAE,MAAM,CAAC,cAAc;gBAC5B,IAAI,EAAE,MAAM,CAAC,aAAa;gBAC1B,QAAQ,EAAE,MAAM,CAAC,iBAAiB;gBAClC,MAAM,EAAE,MAAM,CAAC;AAChB;AACF,SAAA;QACD,aAAa,CAAC,2BAA2B;AAC1C,KAAA,CAAC;AACJ;AAEO,MAAM,sCAAsC,GAEvB,CAAC,KAAqB,KAChD,wBAAwB,CAAC;AACvB,IAAA,SAAS,CAAC;QACR,GAAG;YACD,OAAO,EAAE,WAAW,CAAC,MAAM;AAC3B,YAAA,IAAI,EAAE,SAAS;AACf,YAAA,aAAa,EAAE,MACb,wEAAqC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,uBAAuB,CAAC;AAC5E,YAAA,KAAK,EAAE,OAAO,CAAC,SAAS,CAAC;AACzB,YAAA,IAAI,EAAE,kCAAkC;AACxC,YAAA,QAAQ,EAAE;AACX,SAAA;AACD,QAAA,GAAG,MAAM,CAAC,KAAK,EAAE,KAAK;KACvB;AACF,CAAA;;MCxFU,qBAAqB,CAAA;AAChC,IAAA,WAAA,CACU,gBAAkC,EAClC,iBAAoC,EACxB,oBAA0C,EAAA;QAFtD,IAAA,CAAA,gBAAgB,GAAhB,gBAAgB;QAChB,IAAA,CAAA,iBAAiB,GAAjB,iBAAiB;QACL,IAAA,CAAA,oBAAoB,GAApB,oBAAoB;IACvC;IAEH,aAAa,CAAC,YAAY,GAAG,EAAE,EAAA;AAC7B,QAAA,MAAM,MAAM,GAAG;AACb,YAAA,cAAc,EAAE,IAAI;AACpB,YAAA,WAAW,EAAE,IAAI;AACjB,YAAA,QAAQ,EAAE,EAAE;YACZ,QAAQ,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE;AACnC,YAAA,MAAM,EAAE,IAAI;AACZ,YAAA,GAAG;SACJ;QAED,OAAO,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC;IAC3C;IAEA,iCAAiC,GAAA;AAC/B,QAAA,OAAO,IAAI,CAAC,iBAAiB,CAAC,uBAAuB,EAAE;IACzD;IAEA,8BAA8B,GAAA;QAC5B,IAAI,IAAI,CAAC,oBAAoB,IAAI,IAAI,CAAC,oBAAoB,CAAC,eAAe,EAAE;AAC1E,YAAA,OAAO,IAAI,CAAC,oBAAoB,CAAC,eAAe,CAAC,MAAM;QACzD;IACF;IAEA,MAAM,eAAe,CAAC,SAA8B,EAAA;AAClD,QAAA,IAAI,IAAI,CAAC,oBAAoB,EAAE;YAC7B,OAAO,MAAM,IAAI,CAAC,oBAAoB,CAAC,8BAA8B,CAAC,SAAS,CAAC;QAClF;IACF;+GAlCW,qBAAqB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAArB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,qBAAqB,cADR,MAAM,EAAA,CAAA,CAAA;;4FACnB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBADjC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;0BAK7B;;;MCwBQ,2BAA2B,CAAA;IAuBtC,WAAA,CACS,4BAA0D,EAC1D,aAAgC,EAChC,qBAA4C,EAC3C,KAAqB,EACrB,MAAc,EAAA;QAJf,IAAA,CAAA,4BAA4B,GAA5B,4BAA4B;QAC5B,IAAA,CAAA,aAAa,GAAb,aAAa;QACb,IAAA,CAAA,qBAAqB,GAArB,qBAAqB;QACpB,IAAA,CAAA,KAAK,GAAL,KAAK;QACL,IAAA,CAAA,MAAM,GAAN,MAAM;QAxBhB,IAAA,CAAA,SAAS,GAAG,IAAI;QAEhB,IAAA,CAAA,QAAQ,GAAG,KAAK;QAEhB,IAAA,CAAA,cAAc,GAAG,KAAK;QAItB,IAAA,CAAA,cAAc,GAAG,KAAK;QACtB,IAAA,CAAA,gBAAgB,GAAG,eAAe;QAClC,IAAA,CAAA,4BAA4B,GAAoC,4BAA4B;AAC5F,QAAA,IAAA,CAAA,QAAQ,GACN,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,WAAW,EAAE,EAAE;AAChD,YAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC,WAAW,EAAE,EAAE;IAYnD;IAEH,QAAQ,GAAA;QACN,IAAI,CAAC,oBAAoB,EAAE;QAE3B,MAAM,2BAA2B,GAAG,IAAI,CAAC,qBAAqB,CAAC,8BAA8B,EAAE;QAC/F,IAAI,2BAA2B,EAAE;YAC/B,IAAI,CAAC,oBAAoB,GAAG,2BAA2B,CAAC,CAAC,CAAC,CAAC,OAAO;YAClE,IAAI,CAAC,yBAAyB,GAAG,2BAA2B,CAAC,CAAC,CAAC,CAAC,OAAO;QACzE;IACF;AAEA,IAAA,WAAW,CAAC,OAAsB,EAAA;QAChC,IAAI,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,SAAS,CAAC,YAAY,EAAE;YACvD,IAAI,CAAC,oBAAoB,EAAE;QAC7B;IACF;AAEA,IAAA,6BAA6B,CAAC,MAAc,EAAA;QAC1C,IAAI,MAAM,EAAE;YACV,MAAM,CAAC,eAAe,EAAE;QAC1B;AAEA,QAAA,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAA,kCAAA,EAAqC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAA,CAAE,CAAC;IACrF;IAEQ,oBAAoB,GAAA;AAC1B,QAAA,IAAI,CAAC,cAAc;YACjB,IAAI,CAAC,SAAS,EAAE,WAAW;AAC3B,gBAAA,IAAI,CAAC,SAAS,EAAE,WAAW,EAAE,IAAI;gBACjC,OAAO,CAAC,0CAA0C,CAAC;IACvD;+GA5DW,2BAA2B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,IAAA,CAAA,4BAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,IAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,qBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,cAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA3B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,2BAA2B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,WAAA,EAAA,SAAA,EAAA,WAAA,EAAA,QAAA,EAAA,UAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,iCAAA,EAAA,mCAAA,EAAA,EAAA,SAAA,EAR3B;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,+BAA+B;AACxC,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,2BAA2B;AAC1D;SACF,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,UAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,UAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC9BH,24FAmFA,2CD3DY,UAAU,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,EAAA,sBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,aAAA,EAAA,cAAA,EAAA,OAAA,EAAA,WAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,qBAAA,EAAA,QAAA,EAAA,iCAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,qCAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,yBAAA,EAAA,QAAA,EAAA,yCAAA,EAAA,MAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,0BAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,YAAA,EAAA,SAAA,EAAA,wBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,EAAA,SAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,YAAA,EAAA,OAAA,EAAA,aAAA,EAAA,kBAAA,EAAA,eAAA,EAAA,eAAA,EAAA,qBAAA,EAAA,kBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,EAAA,SAAA,EAAA,UAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,+BAA+B,0QAAE,UAAU,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,aAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,OAAA,EAAA,MAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,gBAAA,EAAA,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,QAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,KAAA,EAAA,CAAA,CAAA;;4FASrE,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAZvC,SAAS;+BACE,0BAA0B,EAAA,OAAA,EAE3B,CAAC,UAAU,EAAE,aAAa,EAAE,+BAA+B,EAAE,UAAU,CAAC,EAAA,SAAA,EACtE;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,+BAA+B;AACxC,4BAAA,WAAW,EAAE,UAAU,CAAC,iCAAiC;AAC1D;qBACF,EAAA,eAAA,EACgB,uBAAuB,CAAC,KAAK,EAAA,QAAA,EAAA,24FAAA,EAAA;;sBAG7C;;sBAEA;;sBAEA;;sBAEA;;sBAEA;;sBAEA,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,UAAU,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;;;MED5B,uBAAuB,CAAA;AA2ClC,IAAA,WAAA,CACS,QAAkC,EACjC,qBAA4C,EAC5C,KAAqB,EAAA;QAFtB,IAAA,CAAA,QAAQ,GAAR,QAAQ;QACP,IAAA,CAAA,qBAAqB,GAArB,qBAAqB;QACrB,IAAA,CAAA,KAAK,GAAL,KAAK;QA7Cf,IAAA,CAAA,YAAY,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,cAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAU;AAC9B,QAAA,IAAA,CAAA,aAAa,GAAG,KAAK,CAAC,KAAK,oFAAC;AAC5B,QAAA,IAAA,CAAA,QAAQ,GAAoB,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE;QAC3E,IAAA,CAAA,4BAA4B,GAAoC,4BAA4B;QAG5F,IAAA,CAAA,cAAc,GAAG,KAAK;QACtB,IAAA,CAAA,iCAAiC,GAAG,KAAK;QACzC,IAAA,CAAA,uBAAuB,GAAG,KAAK;AAC/B,QAAA,IAAA,CAAA,aAAa,GAA6C,IAAI,eAAe,CAAC,IAAI,CAAC;AACnF,QAAA,IAAA,CAAA,OAAO,GAA0B,IAAI,eAAe,CAAC,IAAI,CAAC;AAG1D,QAAA,IAAA,CAAA,WAAW,GAAwC,aAAa,CAC9D,IAAI,CAAC,aAAa,EAClB,IAAI,CAAC,OAAO,CACb,CAAC,IAAI,CACJ,GAAG,CAAC,MAAK;AACP,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI;QAC5B,CAAC,CAAC,EACF,SAAS,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,EAC1D,GAAG,CAAC,MAAK;AACP,YAAA,IAAI,CAAC,cAAc,GAAG,KAAK;AAC7B,QAAA,CAAC,CAAC,EACF,WAAW,CAAC,CAAC,CAAC,CACf;QAED,IAAA,CAAA,oBAAoB,GAAG,IAAI,CACzB,GAAG,CAAC,CAAC,UAAwB,KAAI;YAC/B,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE;YACnD,IAAI,CAAC,aAAa,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE;AAC3C,gBAAA,OAAO,UAAU;YACnB;AACA,YAAA,MAAM,eAAe,GAAG,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,MAAM,CAAC,CAAC;AACnE,YAAA,OAAO,UAAU,CAAC,MAAM,CAAC,EAAE,IAAI,eAAe,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;QACrE,CAAC,CAAC,CACH;AAED,QAAA,IAAA,CAAA,sBAAsB,GAA2B;AAC/C,YAAA,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,GAAG,iCAAiC,GAAG;SAClE;AAOC,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC;AAC3C,cAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC;AAC9C,cAAE,OAAO,CAAC,mBAAmB,CAAC;AAChC,QAAA,IAAI,CAAC,uBAAuB,GAAG,CAAC,IAAI,CAAC,QAAQ;IAC/C;AAEA,IAAA,MAAM,QAAQ,GAAA;AACZ,QAAA,IAAI,CAAC,iCAAiC;AACpC,YAAA,MAAM,IAAI,CAAC,qBAAqB,CAAC,iCAAiC,EAAE;IACxE;AAEA,IAAA,MAAM,CAAC,aAAsC,EAAA;QAC3C,MAAM,MAAM,GACV,aAAa,IAAI,aAAa,CAAC,MAAM,GAAG;AACtC,cAAE;AACE,gBAAA,MAAM,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,YAAY,IAAI,YAAY,CAAC,MAAM,CAAC;AACvE;cACD,EAAE;AAER,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;IACnC;AAEA,IAAA,aAAa,CAAC,MAAO,EAAA;QACnB,IAAI,WAAW,GAAG,IAAI,CAAC,QAAQ,GAAG,EAAE,GAAG,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,GAAG,MAAM;AACjF,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE,EAAE;AACvB,YAAA,WAAW,GAAG,EAAE,GAAG,WAAW,EAAE,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,EAAE;QACrE;QACA,OAAO,IAAI,CAAC,qBAAqB,CAAC,aAAa,CAAC,WAAW,CAAC;IAC9D;IAEA,iBAAiB,CAAC,UAAsB,EAAE,UAAsB,EAAA;QAC9D,QACE,IAAI,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,OAAO,EAAE;IAE7F;+GAlFW,uBAAuB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAH,IAAA,CAAA,wBAAA,EAAA,EAAA,EAAA,KAAA,EAAAK,qBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,EAAA,CAAA,cAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAvB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,uBAAuB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,SAAA,EATvB;YACT,wBAAwB;AACxB,YAAA;AACE,gBAAA,OAAO,EAAE,+BAA+B;AACxC,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,uBAAuB;AACtD;AACF,SAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,cAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,cAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECxCH,i9HAuIA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDtGY,UAAU,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAN,IAAA,CAAA,sBAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,UAAA,EAAA,SAAA,EAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,WAAA,EAAA,OAAA,EAAA,MAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,qBAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAO,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAP,IAAA,CAAA,cAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,qBAAA,EAAA,uBAAA,EAAA,qBAAA,EAAA,oBAAA,EAAA,gBAAA,EAAA,uBAAA,EAAA,kBAAA,EAAA,2BAAA,EAAA,gCAAA,EAAA,6BAAA,EAAA,oCAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,cAAA,EAAA,yBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,cAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,0BAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,YAAA,EAAA,SAAA,EAAA,wBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,KAAA,EAAA,aAAA,EAAA,UAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,EAAA,OAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,kBAAkB,6LAAE,2BAA2B,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,WAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,mCAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,gBAAA,EAAA,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAO,IAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,KAAA,EAAA,CAAA,CAAA;;4FAU1D,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAbnC,SAAS;+BACE,qBAAqB,EAAA,OAAA,EAEtB,CAAC,UAAU,EAAE,kBAAkB,EAAE,2BAA2B,CAAC,EAAA,SAAA,EAC3D;wBACT,wBAAwB;AACxB,wBAAA;AACE,4BAAA,OAAO,EAAE,+BAA+B;AACxC,4BAAA,WAAW,EAAE,UAAU,CAAC,6BAA6B;AACtD;qBACF,EAAA,eAAA,EACgB,uBAAuB,CAAC,KAAK,EAAA,QAAA,EAAA,i9HAAA,EAAA;;sBAc7C,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,cAAc,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;;;;;;;;AEvD7C;;AAEG;;;;"}
1
+ {"version":3,"file":"c8y-ngx-components-operations-operations-list.mjs","sources":["../../operations/operations-list/single-operations-tab.factory.ts","../../operations/operations-list/device-control.feature.ts","../../operations/operations-list/operations-list.service.ts","../../operations/operations-list/operations-list-item.component.ts","../../operations/operations-list/operations-list-item.component.html","../../operations/operations-list/operations-list.component.ts","../../operations/operations-list/operations-list.component.html","../../operations/operations-list/c8y-ngx-components-operations-operations-list.ts"],"sourcesContent":["import { Inject, Injectable, InjectionToken, Optional } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { gettext } from '@c8y/ngx-components/gettext';\r\nimport { Tab, TabFactory } from '@c8y/ngx-components';\r\nimport { isNil, omitBy } from 'lodash-es';\r\n\r\nexport const SINGLE_OPERATIONS_TAB_CONFIG = new InjectionToken<Partial<Tab>>(\r\n 'SINGLE_OPERATIONS_TAB_CONFIG'\r\n);\r\n\r\n@Injectable()\r\nexport class SingleOperationsTabsFactory implements TabFactory {\r\n constructor(\r\n public router: Router,\r\n @Optional()\r\n @Inject(SINGLE_OPERATIONS_TAB_CONFIG)\r\n private config: Tab\r\n ) {}\r\n get() {\r\n const tabs: Tab[] = [];\r\n if (this.router.url.match(/devicecontrol/g)) {\r\n tabs.push(<Tab>{\r\n ...{\r\n path: 'devicecontrol/single',\r\n label: gettext('Single operations'),\r\n icon: 'c8y-icon c8y-icon-device-control',\r\n priority: 1100,\r\n orientation: 'horizontal'\r\n },\r\n ...omitBy(this.config, isNil)\r\n });\r\n }\r\n\r\n return tabs;\r\n }\r\n}\r\n","import { EnvironmentProviders, makeEnvironmentProviders } from '@angular/core';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport {\n hookNavigator,\n hookRoute,\n hookTab,\n Route,\n TabOrientation,\n ViewContext\n} from '@c8y/ngx-components';\nimport {\n DEVICE_CONTROL_NAVIGATOR_NODE_CONFIG,\n OperationsNavigationFactory\n} from '@c8y/ngx-components/operations/shared';\nimport { isNil, omitBy } from 'lodash-es';\nimport {\n SINGLE_OPERATIONS_TAB_CONFIG,\n SingleOperationsTabsFactory\n} from './single-operations-tab.factory';\n\nexport interface DeviceControlOverviewFeatureConfig {\n path?: string;\n tabLabel?: string;\n tabIcon?: string;\n tabPriority?: number;\n tabOrientation?: TabOrientation;\n navigatorLabel?: string;\n navigatorIcon?: string;\n navigatorPriority?: number;\n navigatorParent?: string;\n}\n\nexport const deviceControlOverviewFeatureProviderFactory: (\n config?: DeviceControlOverviewFeatureConfig\n) => EnvironmentProviders = (config?: DeviceControlOverviewFeatureConfig) => {\n config = {\n ...{ path: 'devicecontrol/single' },\n ...omitBy(config, isNil)\n };\n return makeEnvironmentProviders([\n hookRoute({\n path: config.path,\n loadComponent: () =>\n import('./operations-list.component').then(m => m.OperationsListComponent)\n }),\n hookRoute({\n path: config.path,\n redirectTo: config.path,\n pathMatch: 'full'\n }),\n /* Provide config for SingleOperationsTabsFactory */\n {\n provide: SINGLE_OPERATIONS_TAB_CONFIG,\n useValue: {\n path: config.path,\n label: config.tabLabel,\n icon: config.tabIcon,\n priority: config.tabPriority,\n orientation: config.tabOrientation\n }\n },\n hookTab(SingleOperationsTabsFactory),\n /* Provide config for OperationsNavigationFactory */\n {\n provide: DEVICE_CONTROL_NAVIGATOR_NODE_CONFIG,\n useValue: {\n path: config.path,\n label: config.navigatorLabel,\n icon: config.navigatorIcon,\n priority: config.navigatorPriority,\n parent: config.navigatorParent\n }\n },\n hookNavigator(OperationsNavigationFactory)\n ]);\n};\n\nexport const deviceControlTabFeatureProviderFactory: (\n route?: Partial<Route>\n) => EnvironmentProviders = (route: Partial<Route>) =>\n makeEnvironmentProviders([\n hookRoute({\n ...{\n context: ViewContext.Device,\n path: 'control',\n loadComponent: () =>\n import('./operations-list.component').then(m => m.OperationsListComponent),\n label: gettext('Control'),\n icon: 'c8y-icon c8y-icon-device-control',\n priority: 100\n },\n ...omitBy(route, isNil)\n })\n ]);\n","import { Injectable, Optional } from '@angular/core';\nimport { IOperation, OperationService, SmartRulesService } from '@c8y/client';\nimport { Ng1SmartRulesService } from '@c8y/ngx-components/upgrade/upgraded-services';\n\n@Injectable({ providedIn: 'root' })\nexport class OperationsListService {\n constructor(\n private operationService: OperationService,\n private smartRulesService: SmartRulesService,\n @Optional() private ng1SmartRulesService: Ng1SmartRulesService\n ) {}\n\n getOperations(customFilter = {}) {\n const filter = {\n withTotalPages: true,\n withDeleted: true,\n pageSize: 50,\n dateFrom: new Date(0).toISOString(),\n revert: true,\n ...customFilter\n };\n\n return this.operationService.list(filter);\n }\n\n isSmartRulesMicroserviceAvailable() {\n return this.smartRulesService.isMicroserviceAvailable();\n }\n\n getSmartRulesCreatePermissions() {\n if (this.ng1SmartRulesService && this.ng1SmartRulesService.permissionsCfgs) {\n return this.ng1SmartRulesService.permissionsCfgs.create;\n }\n }\n\n async createSmartRule(operation: Partial<IOperation>) {\n if (this.ng1SmartRulesService) {\n return await this.ng1SmartRulesService.addNewForOutputOperationWithUI(operation);\n }\n }\n}\n","import { Component, forwardRef, Input, OnInit, SimpleChanges, ViewChild, ChangeDetectionStrategy } from '@angular/core';\nimport { ActivatedRoute, Router, RouterLink } from '@angular/router';\nimport { IOperation, OperationStatus } from '@c8y/client';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport {\n CoreModule,\n ListItemComponent,\n PRODUCT_EXPERIENCE_EVENT_SOURCE,\n ProductExperienceEvent,\n ProductExperienceEventSource\n} from '@c8y/ngx-components';\nimport { BulkOperationListItemService } from '@c8y/ngx-components/operations/bulk-operation-list-item';\nimport { OperationsListItemDetailsModule } from '@c8y/ngx-components/operations/operations-list-item-details';\nimport {\n OPERATION_STATUS_OPTIONS_MAP,\n OperationsService,\n OperationStatusOptionsMapShared\n} from '@c8y/ngx-components/operations/shared';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport { OperationsListService } from './operations-list.service';\n\n@Component({\n selector: 'c8y-operations-list-item',\n templateUrl: './operations-list-item.component.html',\n imports: [CoreModule, TooltipModule, OperationsListItemDetailsModule, RouterLink],\n providers: [\n {\n provide: PRODUCT_EXPERIENCE_EVENT_SOURCE,\n useExisting: forwardRef(() => OperationsListItemComponent)\n }\n ],\n changeDetection: ChangeDetectionStrategy.Eager\n})\nexport class OperationsListItemComponent implements OnInit, ProductExperienceEventSource {\n @Input()\n operation: Partial<IOperation>;\n @Input()\n collapsed = true;\n @Input()\n readOnly = false;\n @Input()\n noExpandToggle = false;\n @Input()\n isSmartRulesMicroserviceAvailable: boolean;\n @ViewChild('listItem', { static: true }) listItem: ListItemComponent;\n refreshLoading = false;\n OPERATION_STATUS = OperationStatus;\n OPERATION_STATUS_OPTIONS_MAP: OperationStatusOptionsMapShared = OPERATION_STATUS_OPTIONS_MAP;\n deviceId: string | number =\n this.route.snapshot.parent?.data.contextData?.id ||\n this.route.snapshot.firstChild?.data.contextData?.id;\n inventoryPermissions: string[];\n smartRuleAdminPermissions: string[];\n operationTitle: string;\n productExperienceEvent: ProductExperienceEvent;\n\n constructor(\n public bulkOperationListItemService: BulkOperationListItemService,\n public sharedService: OperationsService,\n public operationsListService: OperationsListService,\n private route: ActivatedRoute,\n private router: Router\n ) {}\n\n ngOnInit() {\n this.updateOperationTitle();\n\n const smartRulesCreatePermissions = this.operationsListService.getSmartRulesCreatePermissions();\n if (smartRulesCreatePermissions) {\n this.inventoryPermissions = smartRulesCreatePermissions[0].anyRole;\n this.smartRuleAdminPermissions = smartRulesCreatePermissions[1].anyRole;\n }\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.operation && changes.operation.currentValue) {\n this.updateOperationTitle();\n }\n }\n\n createCustomizedBulkOperation($event?: Event) {\n if ($event) {\n $event.stopPropagation();\n }\n\n this.router.navigateByUrl(`/devicecontrol/single/create-bulk/${this.operation.id}`);\n }\n\n private updateOperationTitle(): void {\n this.operationTitle =\n this.operation?.description ||\n this.operation?.c8y_Command?.text ||\n gettext('No command text or description available');\n }\n}\n","<c8y-li\n class=\"c8y-list__item--double-actions\"\n [ngClass]=\"{ 'c8y-list__item--no-expand': noExpandToggle }\"\n [collapsed]=\"collapsed\"\n #listItem\n id=\"{{ operation.id }}\"\n>\n <c8y-li-icon>\n <button\n class=\"btn-clean\"\n type=\"button\"\n [attr.aria-label]=\"OPERATION_STATUS_OPTIONS_MAP[operation.status].label | translate\"\n [tooltip]=\"OPERATION_STATUS_OPTIONS_MAP[operation.status].label | translate\"\n placement=\"right\"\n container=\"body\"\n [delay]=\"500\"\n >\n <i\n [c8yIcon]=\"OPERATION_STATUS_OPTIONS_MAP[operation.status].icon\"\n [ngClass]=\"OPERATION_STATUS_OPTIONS_MAP[operation.status].styleClass\"\n ></i>\n </button>\n </c8y-li-icon>\n <div [ngClass]=\"{ 'content-flex-58': !readOnly, 'content-flex-50': readOnly }\">\n <div class=\"col-5\">\n <span title=\"{{ operationTitle | translate }}\" class=\"text-truncate\">\n {{ operationTitle | translate }}\n </span>\n </div>\n <div class=\"col-3\" *ngIf=\"!deviceId\">\n <a\n title=\"{{ operation.deviceName }}\"\n [routerLink]=\"['/device', operation.deviceId, 'device-info']\"\n routerLinkActive=\"active\"\n class=\"text-truncate\"\n >\n {{ operation.deviceName }}\n </a>\n </div>\n <div class=\"col-3\">\n <small class=\"icon-flex text-muted\">\n <i c8yIcon=\"calendar\" class=\"m-r-4\"></i>\n {{ operation.creationTime | c8yDate }}\n </small>\n </div>\n </div>\n <ng-container *ngIf=\"!readOnly\">\n <c8y-li-action\n label=\"{{ 'Schedule as bulk operation' | translate }}\"\n (click)=\"createCustomizedBulkOperation($event)\"\n icon=\"c8y-icon c8y-icon-energy\"\n c8yProductExperience\n inherit\n ></c8y-li-action>\n <ng-container *c8yIfAllowed=\"inventoryPermissions; allowAny: true\">\n <ng-container *c8yIfAllowed=\"smartRuleAdminPermissions; allowAny: true\">\n <c8y-li-action\n *ngIf=\"isSmartRulesMicroserviceAvailable\"\n label=\"{{ 'Create smart rule' | translate }}\"\n (click)=\"operationsListService.createSmartRule(operation)\"\n icon=\"sliders\"\n c8yProductExperience\n inherit\n ></c8y-li-action>\n </ng-container>\n </ng-container>\n <c8y-li-action\n *ngIf=\"operation.status === OPERATION_STATUS.PENDING\"\n label=\"{{ 'Cancel operation' | translate }}\"\n (click)=\"$event.stopPropagation(); sharedService.cancel(operation)\"\n icon=\"times-circle\"\n c8yProductExperience\n inherit\n ></c8y-li-action>\n </ng-container>\n <c8y-li-collapse class=\"m-b-16\">\n <c8y-operation-details-tabs\n *ngIf=\"!listItem.collapsed\"\n [operation]=\"operation\"\n [bulkOperationModalDetailsService]=\"bulkOperationListItemService\"\n ></c8y-operation-details-tabs>\n </c8y-li-collapse>\n</c8y-li>\n","import { Component, forwardRef, input, ViewChild, ChangeDetectionStrategy } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { IOperation, IResultList } from '@c8y/client';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport {\n CoreModule,\n OperationRealtimeService,\n PRODUCT_EXPERIENCE_EVENT_SOURCE,\n ProductExperienceEvent,\n ProductExperienceEventSource\n} from '@c8y/ngx-components';\nimport {\n SINGLE_OPERATION_EVENT_DEVICE_TAB,\n SINGLE_OPERATION_EVENT_OVERVIEW\n} from '@c8y/ngx-components/operations/product-experience';\nimport {\n OPERATION_STATUS_OPTIONS_MAP,\n OperationStatusOption,\n OperationStatusOptionsMapShared\n} from '@c8y/ngx-components/operations/shared';\nimport {\n StatusFilterComponent,\n StatusFilterModule\n} from '@c8y/ngx-components/operations/status-filter';\nimport { flatten } from 'lodash-es';\nimport { BehaviorSubject, combineLatest, Observable, pipe } from 'rxjs';\nimport { map, shareReplay, switchMap, tap } from 'rxjs/operators';\nimport { OperationsListItemComponent } from './operations-list-item.component';\nimport { OperationsListService } from './operations-list.service';\n\n@Component({\n selector: 'c8y-operations-list',\n templateUrl: 'operations-list.component.html',\n imports: [CoreModule, StatusFilterModule, OperationsListItemComponent],\n providers: [\n OperationRealtimeService,\n {\n provide: PRODUCT_EXPERIENCE_EVENT_SOURCE,\n useExisting: forwardRef(() => OperationsListComponent)\n }\n ],\n changeDetection: ChangeDetectionStrategy.Eager\n})\nexport class OperationsListComponent implements ProductExperienceEventSource {\n fragmentType = input<string>();\n readOnlyItems = input(false);\n deviceId: string | number = this.route.snapshot.parent.data.contextData?.id;\n OPERATION_STATUS_OPTIONS_MAP: OperationStatusOptionsMapShared = OPERATION_STATUS_OPTIONS_MAP;\n\n title: string;\n refreshLoading = false;\n isSmartRulesMicroserviceAvailable = false;\n showOverviewBreadcrumbs = false;\n statusFilter$: BehaviorSubject<OperationStatusOption[]> = new BehaviorSubject(null);\n reload$: BehaviorSubject<void> = new BehaviorSubject(null);\n @ViewChild('statusFilter', { static: true }) statusFilter: StatusFilterComponent;\n\n operations$: Observable<IResultList<IOperation>> = combineLatest(\n this.statusFilter$,\n this.reload$\n ).pipe(\n tap(() => {\n this.refreshLoading = true;\n }),\n switchMap(([statusFilters]) => this.filter(statusFilters)),\n tap(() => {\n this.refreshLoading = false;\n }),\n shareReplay(1)\n );\n\n operationsFilterPipe = pipe(\n map((operations: IOperation[]) => {\n const statusFilters = this.statusFilter$.getValue();\n if (!statusFilters || !statusFilters.length) {\n return operations;\n }\n const allowedStatuses = flatten(statusFilters.map(sf => sf.status));\n return operations.filter(op => allowedStatuses.includes(op.status));\n })\n );\n\n productExperienceEvent: ProductExperienceEvent = {\n eventName: !!this.deviceId ? SINGLE_OPERATION_EVENT_DEVICE_TAB : SINGLE_OPERATION_EVENT_OVERVIEW\n };\n\n constructor(\n public realtime: OperationRealtimeService,\n private operationsListService: OperationsListService,\n private route: ActivatedRoute\n ) {\n this.title = this.route.snapshot.parent.data.contextData\n ? this.route.snapshot.parent.data.contextData.name\n : gettext('Single operations');\n this.showOverviewBreadcrumbs = !this.deviceId;\n }\n\n async ngOnInit() {\n this.isSmartRulesMicroserviceAvailable =\n await this.operationsListService.isSmartRulesMicroserviceAvailable();\n }\n\n filter(statusFilters: OperationStatusOption[]) {\n const status =\n statusFilters && statusFilters.length > 0\n ? {\n status: flatten(statusFilters.map(statusFilter => statusFilter.status))\n }\n : {};\n\n return this.getOperations(status);\n }\n\n getOperations(filter?) {\n let queryFilter = this.deviceId ? { ...filter, deviceId: this.deviceId } : filter;\n if (this.fragmentType()) {\n queryFilter = { ...queryFilter, fragmentType: this.fragmentType() };\n }\n return this.operationsListService.getOperations(queryFilter);\n }\n\n compareOperations(operationA: IOperation, operationB: IOperation): number {\n return (\n new Date(operationA.creationTime).getTime() - new Date(operationB.creationTime).getTime()\n );\n }\n}\n","<c8y-title>{{ title | translate }}</c8y-title>\n\n<c8y-breadcrumb *ngIf=\"showOverviewBreadcrumbs\">\n <c8y-breadcrumb-item\n [icon]=\"'c8y-overviews'\"\n [label]=\"'Overviews' | translate\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [icon]=\"'c8y-device-control'\"\n [label]=\"'Device Control' | translate\"\n [path]=\"'devicecontrol/single'\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [icon]=\"'c8y-device-control'\"\n [label]=\"'Single operations' | translate\"\n ></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<c8y-action-bar-item\n [placement]=\"'left'\"\n itemClass=\"navbar-form\"\n>\n <c8y-status-filter\n #statusFilter\n [options]=\"OPERATION_STATUS_OPTIONS_MAP\"\n (onFilterChanged)=\"statusFilter$.next($event)\"\n c8yProductExperience\n inherit\n ></c8y-status-filter>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item [placement]=\"'right'\">\n <c8y-realtime-btn [service]=\"realtime\"></c8y-realtime-btn>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item [placement]=\"'right'\">\n <button\n class=\"btn btn-link d-flex a-i-center\"\n title=\"{{ 'Reload' | translate }}\"\n (click)=\"reload$.next()\"\n >\n <i\n class=\"m-r-4\"\n c8yIcon=\"refresh\"\n [ngClass]=\"{ 'icon-spin': refreshLoading }\"\n ></i>\n <span class=\"text-truncate\">\n {{ 'Reload' | translate }}\n </span>\n </button>\n</c8y-action-bar-item>\n\n<ng-content select=\"c8y-help\">\n <c8y-help\n src=\"/docs/device-management-application/monitoring-and-controlling-devices/#to-view-single-operations\"\n ></c8y-help>\n</ng-content>\n\n<!-- Empty state -->\n<c8y-ui-empty-state\n [icon]=\"'c8y-energy'\"\n [title]=\"'No items to display.' | translate\"\n [subtitle]=\"'Operations will be displayed here.' | translate\"\n *ngIf=\"(operations$ | async)?.data.length === 0 && !(statusFilter$ | async)\"\n></c8y-ui-empty-state>\n<!-- No results empty state -->\n<c8y-ui-empty-state\n [icon]=\"'search'\"\n [title]=\"'No results to display.' | translate\"\n [subtitle]=\"'Adjust or reset the filter.' | translate\"\n *ngIf=\"(operations$ | async)?.data.length === 0 && (statusFilter$ | async)\"\n>\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Reset filter' | translate }}\"\n type=\"button\"\n (click)=\"statusFilter.reset()\"\n translate\n >\n Reset filter\n </button>\n</c8y-ui-empty-state>\n\n<!-- Detailed list of operations + load more button -->\n<c8y-list-group class=\"m-b-24\">\n <div\n class=\"page-sticky-header c8y-list__item c8y-list__item--double-actions hidden-xs\"\n *ngIf=\"(operations$ | async)?.data.length\"\n >\n <div class=\"c8y-list__item__block\">\n <div class=\"c8y-list__item__icon\">\n <i class=\"p-l-24\"></i>\n </div>\n <div class=\"c8y-list__item__body text-truncate-wrap\">\n <div class=\"content-flex-57\">\n <div class=\"col-5\">\n {{ 'Operation' | translate }}\n </div>\n <div\n class=\"flex-grow\"\n *ngIf=\"!deviceId\"\n >\n {{ 'Device' | translate }}\n </div>\n <div class=\"col-4\">\n {{ 'Date created' | translate }}\n </div>\n </div>\n </div>\n <div class=\"c8y-list__item__actions\"></div>\n </div>\n </div>\n <div\n class=\"d-contents\"\n *c8yFor=\"\n let op of operations$ | async;\n let i = index;\n realtime: realtime;\n realtimeOptions: { entityOrId: deviceId, removeOnUpdate: true, insertOnUpdate: true };\n comparator: compareOperations.bind(this);\n loadMore: 'auto';\n pipe: operationsFilterPipe\n \"\n >\n <c8y-operations-list-item\n class=\"d-contents\"\n [operation]=\"op\"\n [readOnly]=\"readOnlyItems()\"\n [isSmartRulesMicroserviceAvailable]=\"isSmartRulesMicroserviceAvailable\"\n (reload)=\"reload$.next()\"\n c8yProductExperience\n inherit\n ></c8y-operations-list-item>\n </div>\n</c8y-list-group>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2","i3.OperationsListService","i5","i6","i2.OperationsListService","i3","i4"],"mappings":"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"}
@@ -20,7 +20,7 @@ class OperationsTimelineComponent {
20
20
  this.OPERATION_STATUS_OPTIONS_MAP = OPERATION_STATUS_OPTIONS_MAP;
21
21
  }
22
22
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.19", ngImport: i0, type: OperationsTimelineComponent, deps: [{ token: i1.OperationRealtimeService }, { token: i2.OperationsService }], target: i0.ɵɵFactoryTarget.Component }); }
23
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.19", type: OperationsTimelineComponent, isStandalone: true, selector: "c8y-operations-timeline", inputs: { operations: "operations", sourceId: "sourceId", filterPipe: "filterPipe", loadMoreMode: "loadMoreMode", bodyTemplate: "bodyTemplate", footerTemplates: "footerTemplates", propertiesToHide: "propertiesToHide" }, ngImport: i0, template: "@if (!operations?.data || !operations?.data?.length) {\n <c8y-ui-empty-state\n [icon]=\"'c8y-energy'\"\n [title]=\"'No recent operations found.' | translate\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n}\n\n<c8y-list-group>\n <c8y-li-timeline\n *c8yFor=\"\n let op of operations;\n pipe: filterPipe;\n realtime: realtime;\n realtimeOptions: { entityOrId: sourceId };\n loadMore: loadMoreMode\n \"\n >\n {{ op.creationTime | c8yDate: 'medium' }}\n\n <c8y-li>\n <c8y-li-icon>\n <i\n [c8yIcon]=\"OPERATION_STATUS_OPTIONS_MAP[op.status].icon\"\n [tooltip]=\"op.status | translate\"\n container=\"body\"\n [ngClass]=\"OPERATION_STATUS_OPTIONS_MAP[op.status].styleClass\"\n [delay]=\"500\"\n ></i>\n </c8y-li-icon>\n\n <c8y-li-body>\n <div class=\"d-flex text-break-word\">\n <div>\n {{ op.status | translate }}\n <br class=\"visible-xs visible-sm\" />\n\n @if (bodyTemplate) {\n <ng-container\n [ngTemplateOutlet]=\"bodyTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: op }\"\n ></ng-container>\n } @else {\n <small>{{ op.description }}</small>\n }\n </div>\n\n @if (op.status === 'PENDING') {\n <div class=\"m-l-auto showOnHover\">\n <button\n class=\"btn btn-dot btn-dot--danger\"\n [attr.aria-label]=\"'Cancel operation' | translate\"\n tooltip=\"{{ 'Cancel operation' | translate }}\"\n placement=\"left\"\n type=\"button\"\n [delay]=\"500\"\n (click)=\"$event.stopPropagation(); operationsService.cancel(op)\"\n >\n <i c8yIcon=\"minus-circle\"></i>\n </button>\n </div>\n }\n </div>\n </c8y-li-body>\n\n <c8y-li-collapse #collapseEl>\n <div\n class=\"legend form-block\"\n translate\n >\n Details\n </div>\n\n <ul class=\"list-unstyled small\">\n @for (prop of operationsService.getStandardKeys(op) | keyvalue; track prop.key) {\n <li class=\"p-t-4 p-b-4 d-flex separator-bottom\">\n <label class=\"small m-b-0 m-r-8 a-s-start\">\n {{ prop.value | translate }}\n </label>\n <span class=\"m-l-auto text-break-word\">\n {{ op[prop.key] | translate }}\n </span>\n </li>\n }\n\n @for (key of operationsService.getNonStandardKeys(op, propertiesToHide); track key) {\n <li class=\"p-t-4 p-b-4 d-flex separator-bottom\">\n <label class=\"small m-b-0 m-r-8 a-s-start\">\n {{ key | humanize | translate }}\n </label>\n <span class=\"m-l-auto text-code\">\n {{ op[key] | json }}\n </span>\n </li>\n }\n </ul>\n\n @for (footer of footerTemplates; track footer) {\n <ng-container\n [ngTemplateOutlet]=\"footer\"\n [ngTemplateOutletContext]=\"{ $implicit: op }\"\n ></ng-container>\n }\n </c8y-li-collapse>\n </c8y-li>\n </c8y-li-timeline>\n</c8y-list-group>\n", dependencies: [{ kind: "component", type: EmptyStateComponent, selector: "c8y-ui-empty-state", inputs: ["icon", "title", "subtitle", "horizontal"] }, { kind: "component", type: ListGroupComponent, selector: "c8y-list-group" }, { kind: "directive", type: ForOfDirective, selector: "[c8yFor]", inputs: ["c8yForOf", "c8yForLoadMore", "c8yForPipe", "c8yForNotFound", "c8yForMaxIterations", "c8yForLoadingTemplate", "c8yForLoadNextLabel", "c8yForLoadingLabel", "c8yForRealtime", "c8yForRealtimeOptions", "c8yForComparator", "c8yForEnableVirtualScroll", "c8yForVirtualScrollElementSize", "c8yForVirtualScrollStrategy", "c8yForVirtualScrollContainerHeight"], outputs: ["c8yForCount", "c8yForChange", "c8yForLoadMoreComponent"] }, { kind: "component", type: ListItemTimelineComponent, selector: "c8y-list-item-timeline, c8y-li-timeline" }, { kind: "component", type: ListItemComponent, selector: "c8y-list-item, c8y-li", inputs: ["active", "highlighted", "emptyActions", "dense", "collapsed", "selectable"], outputs: ["collapsedChange"] }, { kind: "component", type: ListItemIconComponent, selector: "c8y-list-item-icon, c8y-li-icon", inputs: ["icon", "status"] }, { kind: "directive", type: IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: TooltipDirective, selector: "[tooltip], [tooltipHtml]", inputs: ["adaptivePosition", "tooltip", "placement", "triggers", "container", "containerClass", "boundariesElement", "isOpen", "isDisabled", "delay", "tooltipHtml", "tooltipPlacement", "tooltipIsOpen", "tooltipEnable", "tooltipAppendToBody", "tooltipAnimation", "tooltipClass", "tooltipContext", "tooltipPopupDelay", "tooltipFadeDuration", "tooltipTrigger"], outputs: ["tooltipChange", "onShown", "onHidden", "tooltipStateChanged"], exportAs: ["bs-tooltip"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: ListItemBodyComponent, selector: "c8y-list-item-body, c8y-li-body", inputs: ["body"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: ListItemCollapseComponent, selector: "c8y-list-item-collapse, c8y-li-collapse", inputs: ["collapseWay"] }, { kind: "directive", type: C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "pipe", type: JsonPipe, name: "json" }, { kind: "pipe", type: DatePipe, name: "c8yDate" }, { kind: "pipe", type: KeyValuePipe, name: "keyvalue" }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: HumanizePipe, name: "humanize" }], changeDetection: i0.ChangeDetectionStrategy.Eager }); }
23
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.19", type: OperationsTimelineComponent, isStandalone: true, selector: "c8y-operations-timeline", inputs: { operations: "operations", sourceId: "sourceId", filterPipe: "filterPipe", loadMoreMode: "loadMoreMode", bodyTemplate: "bodyTemplate", footerTemplates: "footerTemplates", propertiesToHide: "propertiesToHide" }, ngImport: i0, template: "@if (!operations?.data || !operations?.data?.length) {\n <c8y-ui-empty-state\n [icon]=\"'c8y-energy'\"\n [title]=\"'No recent operations found.' | translate\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n}\n\n<c8y-list-group>\n <c8y-li-timeline\n *c8yFor=\"\n let op of operations;\n pipe: filterPipe;\n realtime: realtime;\n realtimeOptions: { entityOrId: sourceId };\n loadMore: loadMoreMode\n \"\n >\n {{ op.creationTime | c8yDate: 'medium' }}\n\n <c8y-li>\n <c8y-li-icon>\n <i\n [c8yIcon]=\"OPERATION_STATUS_OPTIONS_MAP[op.status].icon\"\n [tooltip]=\"op.status | translate\"\n container=\"body\"\n [ngClass]=\"OPERATION_STATUS_OPTIONS_MAP[op.status].styleClass\"\n [delay]=\"500\"\n ></i>\n </c8y-li-icon>\n\n <c8y-li-body>\n <div class=\"d-flex text-break-word\">\n <div>\n {{ op.status | translate }}\n <br class=\"visible-xs visible-sm\" />\n\n @if (bodyTemplate) {\n <ng-container\n [ngTemplateOutlet]=\"bodyTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: op }\"\n ></ng-container>\n } @else {\n <small>{{ op.description }}</small>\n }\n </div>\n\n @if (op.status === 'PENDING') {\n <div class=\"m-l-auto showOnHover\">\n <button\n class=\"btn btn-dot btn-dot--danger\"\n [attr.aria-label]=\"'Cancel operation' | translate\"\n tooltip=\"{{ 'Cancel operation' | translate }}\"\n placement=\"left\"\n type=\"button\"\n [delay]=\"500\"\n (click)=\"$event.stopPropagation(); operationsService.cancel(op)\"\n >\n <i c8yIcon=\"minus-circle\"></i>\n </button>\n </div>\n }\n </div>\n </c8y-li-body>\n\n <c8y-li-collapse #collapseEl>\n <div\n class=\"legend form-block\"\n translate\n >\n Details\n </div>\n\n <ul class=\"list-unstyled small\">\n @for (prop of operationsService.getStandardKeys(op) | keyvalue; track prop.key) {\n <li class=\"p-t-4 p-b-4 d-flex separator-bottom\">\n <label class=\"small m-b-0 m-r-8 a-s-start\">\n {{ prop.value | translate }}\n </label>\n <span class=\"m-l-auto text-break-word\">\n {{ op[prop.key] | translate }}\n </span>\n </li>\n }\n\n @for (key of operationsService.getNonStandardKeys(op, propertiesToHide); track key) {\n <li class=\"p-t-4 p-b-4 d-flex separator-bottom\">\n <label class=\"small m-b-0 m-r-8 a-s-start\">\n {{ key | humanize | translate }}\n </label>\n <span class=\"m-l-auto text-code\">\n {{ op[key] | json }}\n </span>\n </li>\n }\n </ul>\n\n @for (footer of footerTemplates; track footer) {\n <ng-container\n [ngTemplateOutlet]=\"footer\"\n [ngTemplateOutletContext]=\"{ $implicit: op }\"\n ></ng-container>\n }\n </c8y-li-collapse>\n </c8y-li>\n </c8y-li-timeline>\n</c8y-list-group>\n", dependencies: [{ kind: "component", type: EmptyStateComponent, selector: "c8y-ui-empty-state", inputs: ["icon", "title", "subtitle", "horizontal"] }, { kind: "component", type: ListGroupComponent, selector: "c8y-list-group" }, { kind: "directive", type: ForOfDirective, selector: "[c8yFor]", inputs: ["c8yForOf", "c8yForLoadMore", "c8yForPipe", "c8yForNotFound", "c8yForMaxIterations", "c8yForLoadingTemplate", "c8yForLoadNextLabel", "c8yForLoadingLabel", "c8yForRealtime", "c8yForRealtimeOptions", "c8yForComparator", "c8yForEnableVirtualScroll", "c8yForVirtualScrollElementSize", "c8yForVirtualScrollStrategy", "c8yForVirtualScrollContainerHeight"], outputs: ["c8yForCount", "c8yForChange", "c8yForLoadMoreComponent"] }, { kind: "component", type: ListItemTimelineComponent, selector: "c8y-list-item-timeline, c8y-li-timeline" }, { kind: "component", type: ListItemComponent, selector: "c8y-list-item, c8y-li", inputs: ["active", "highlighted", "emptyActions", "dense", "collapsed", "selectable", "selectOnClick"], outputs: ["collapsedChange"] }, { kind: "component", type: ListItemIconComponent, selector: "c8y-list-item-icon, c8y-li-icon", inputs: ["icon", "status"] }, { kind: "directive", type: IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: TooltipDirective, selector: "[tooltip], [tooltipHtml]", inputs: ["adaptivePosition", "tooltip", "placement", "triggers", "container", "containerClass", "boundariesElement", "isOpen", "isDisabled", "delay", "tooltipHtml", "tooltipPlacement", "tooltipIsOpen", "tooltipEnable", "tooltipAppendToBody", "tooltipAnimation", "tooltipClass", "tooltipContext", "tooltipPopupDelay", "tooltipFadeDuration", "tooltipTrigger"], outputs: ["tooltipChange", "onShown", "onHidden", "tooltipStateChanged"], exportAs: ["bs-tooltip"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: ListItemBodyComponent, selector: "c8y-list-item-body, c8y-li-body", inputs: ["body"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: ListItemCollapseComponent, selector: "c8y-list-item-collapse, c8y-li-collapse", inputs: ["collapseWay"] }, { kind: "directive", type: C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "pipe", type: JsonPipe, name: "json" }, { kind: "pipe", type: DatePipe, name: "c8yDate" }, { kind: "pipe", type: KeyValuePipe, name: "keyvalue" }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: HumanizePipe, name: "humanize" }], changeDetection: i0.ChangeDetectionStrategy.Eager }); }
24
24
  }
25
25
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.19", ngImport: i0, type: OperationsTimelineComponent, decorators: [{
26
26
  type: Component,