@c8y/ngx-components 1019.2.4 → 1019.2.9

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 (170) hide show
  1. package/NOTICES +26 -0
  2. package/core/common/forOf.directive.d.ts +10 -1
  3. package/core/common/forOf.directive.d.ts.map +1 -1
  4. package/core/common/geo.service.d.ts +9 -0
  5. package/core/common/geo.service.d.ts.map +1 -0
  6. package/core/common/index.d.ts +1 -0
  7. package/core/common/index.d.ts.map +1 -1
  8. package/core/common/load-more.component.d.ts +1 -0
  9. package/core/common/load-more.component.d.ts.map +1 -1
  10. package/core/core.module.d.ts +50 -49
  11. package/core/core.module.d.ts.map +1 -1
  12. package/core/index.d.ts +1 -0
  13. package/core/index.d.ts.map +1 -1
  14. package/core/realtime/realtime-button.component.d.ts +5 -2
  15. package/core/realtime/realtime-button.component.d.ts.map +1 -1
  16. package/core/router/context-route.service.d.ts +6 -5
  17. package/core/router/context-route.service.d.ts.map +1 -1
  18. package/core/time-interval/index.d.ts +3 -0
  19. package/core/time-interval/index.d.ts.map +1 -0
  20. package/core/time-interval/time-interval.component.d.ts +26 -0
  21. package/core/time-interval/time-interval.component.d.ts.map +1 -0
  22. package/core/time-interval/time-interval.model.d.ts +33 -0
  23. package/core/time-interval/time-interval.model.d.ts.map +1 -0
  24. package/esm2022/context-dashboard/report-dashboard/report-dashboard-list.component.mjs +1 -1
  25. package/esm2022/core/audit-log/audit-log.component.mjs +1 -1
  26. package/esm2022/core/bootstrap/bootstrap.component.mjs +3 -3
  27. package/esm2022/core/common/forOf.directive.mjs +18 -2
  28. package/esm2022/core/common/geo.service.mjs +30 -0
  29. package/esm2022/core/common/index.mjs +2 -1
  30. package/esm2022/core/common/load-more.component.mjs +5 -2
  31. package/esm2022/core/core.module.mjs +11 -7
  32. package/esm2022/core/dynamic-forms/typeahead/typeahead.type.component.mjs +1 -1
  33. package/esm2022/core/index.mjs +2 -1
  34. package/esm2022/core/realtime/realtime-button.component.mjs +10 -4
  35. package/esm2022/core/router/context-route.service.mjs +10 -4
  36. package/esm2022/core/search/search-input.component.mjs +1 -1
  37. package/esm2022/core/time-interval/index.mjs +3 -0
  38. package/esm2022/core/time-interval/time-interval.component.mjs +85 -0
  39. package/esm2022/core/time-interval/time-interval.model.mjs +54 -0
  40. package/esm2022/datapoint-library/list/datapoint-library-list.component.mjs +2 -2
  41. package/esm2022/datapoint-selector/datapoint-selector-list-item/datapoint-selector-list-item.component.mjs +1 -1
  42. package/esm2022/device-profile/device-profile-list.component.mjs +1 -1
  43. package/esm2022/device-profile/device-tab-profile/device-tab-profile.component.mjs +1 -1
  44. package/esm2022/device-shell/shell/shell.component.mjs +1 -1
  45. package/esm2022/diagnostics/diagnostics.component.mjs +1 -1
  46. package/esm2022/ecosystem/applications/install-from-package/install-from-package.component.mjs +1 -1
  47. package/esm2022/ecosystem/shared/package-version-select/package-version-select.component.mjs +1 -1
  48. package/esm2022/location/location.component.mjs +1 -1
  49. package/esm2022/map/cluster-map.component.mjs +7 -7
  50. package/esm2022/map/map.component.mjs +92 -36
  51. package/esm2022/map/map.model.mjs +3 -2
  52. package/esm2022/operations/bulk-operations-list/bulk-operations-list.component.mjs +1 -1
  53. package/esm2022/operations/bulk-single-operations-list/single-operations-list.component.mjs +1 -1
  54. package/esm2022/operations/operations-list/operations-list.component.mjs +1 -1
  55. package/esm2022/operations/operations-timeline/operations-timeline.component.mjs +1 -1
  56. package/esm2022/operations/stepper-bulk-type-configuration/stepper-bulk-type-configuration.component.mjs +1 -1
  57. package/esm2022/operations/stepper-bulk-type-device-profile/select-device-profile-step.component.mjs +1 -1
  58. package/esm2022/operations/stepper-bulk-type-firmware/select-firmware.component.mjs +1 -1
  59. package/esm2022/operations/stepper-bulk-type-firmware/version-or-patch.component.mjs +1 -1
  60. package/esm2022/operations/stepper-bulk-type-software/select-software-step.component.mjs +1 -1
  61. package/esm2022/protocol-lpwan/lpwan-set-connections.component.mjs +1 -1
  62. package/esm2022/protocol-lpwan/lpwan-set-device-protocol.component.mjs +1 -1
  63. package/esm2022/repository/configuration/list/configuration-detail.component.mjs +1 -1
  64. package/esm2022/repository/configuration/list/configuration-list.component.mjs +1 -1
  65. package/esm2022/repository/firmware/list/add-firmware-modal.component.mjs +1 -1
  66. package/esm2022/repository/firmware/list/add-firmware-patch-modal.component.mjs +1 -1
  67. package/esm2022/repository/firmware/list/firmware-details.component.mjs +1 -1
  68. package/esm2022/repository/firmware/list/firmware-list.component.mjs +1 -1
  69. package/esm2022/repository/shared/software-type/software-type.component.mjs +1 -1
  70. package/esm2022/repository/software/device-tab/device-software-list.component.mjs +1 -1
  71. package/esm2022/repository/software/list/add-software-modal.component.mjs +1 -1
  72. package/esm2022/repository/software/list/columns/software-type.filtering-form-renderer.component.mjs +1 -1
  73. package/esm2022/repository/software/list/software-details.component.mjs +1 -1
  74. package/esm2022/sub-assets/location/asset-location.component.mjs +1 -1
  75. package/esm2022/tracking/c8y-ngx-components-tracking.mjs +5 -0
  76. package/esm2022/tracking/index.mjs +6 -0
  77. package/esm2022/tracking/tracking-marker-popup.component.mjs +34 -0
  78. package/esm2022/tracking/tracking-tab.guard.mjs +25 -0
  79. package/esm2022/tracking/tracking.component.mjs +92 -0
  80. package/esm2022/tracking/tracking.feature.mjs +16 -0
  81. package/esm2022/tracking/tracking.service.mjs +124 -0
  82. package/esm2022/trusted-certificates/crl/crl-settings.component.mjs +5 -5
  83. package/esm2022/trusted-certificates/list/trusted-certificate-list.component.mjs +1 -1
  84. package/esm2022/widgets/implementations/map/map-widget-config.component.mjs +2 -2
  85. package/fesm2022/c8y-ngx-components-context-dashboard.mjs +1 -1
  86. package/fesm2022/c8y-ngx-components-context-dashboard.mjs.map +1 -1
  87. package/fesm2022/c8y-ngx-components-datapoint-library-list.mjs +1 -1
  88. package/fesm2022/c8y-ngx-components-datapoint-library-list.mjs.map +1 -1
  89. package/fesm2022/c8y-ngx-components-datapoint-selector.mjs +1 -1
  90. package/fesm2022/c8y-ngx-components-datapoint-selector.mjs.map +1 -1
  91. package/fesm2022/c8y-ngx-components-device-profile.mjs +2 -2
  92. package/fesm2022/c8y-ngx-components-device-profile.mjs.map +1 -1
  93. package/fesm2022/c8y-ngx-components-device-shell.mjs +1 -1
  94. package/fesm2022/c8y-ngx-components-device-shell.mjs.map +1 -1
  95. package/fesm2022/c8y-ngx-components-diagnostics.mjs +1 -1
  96. package/fesm2022/c8y-ngx-components-diagnostics.mjs.map +1 -1
  97. package/fesm2022/c8y-ngx-components-ecosystem-shared.mjs +1 -1
  98. package/fesm2022/c8y-ngx-components-ecosystem-shared.mjs.map +1 -1
  99. package/fesm2022/c8y-ngx-components-ecosystem.mjs +1 -1
  100. package/fesm2022/c8y-ngx-components-ecosystem.mjs.map +1 -1
  101. package/fesm2022/c8y-ngx-components-location.mjs +1 -1
  102. package/fesm2022/c8y-ngx-components-location.mjs.map +1 -1
  103. package/fesm2022/c8y-ngx-components-map.mjs +95 -38
  104. package/fesm2022/c8y-ngx-components-map.mjs.map +1 -1
  105. package/fesm2022/c8y-ngx-components-operations-bulk-operations-list.mjs +1 -1
  106. package/fesm2022/c8y-ngx-components-operations-bulk-operations-list.mjs.map +1 -1
  107. package/fesm2022/c8y-ngx-components-operations-bulk-single-operations-list.mjs +1 -1
  108. package/fesm2022/c8y-ngx-components-operations-bulk-single-operations-list.mjs.map +1 -1
  109. package/fesm2022/c8y-ngx-components-operations-operations-list.mjs +1 -1
  110. package/fesm2022/c8y-ngx-components-operations-operations-list.mjs.map +1 -1
  111. package/fesm2022/c8y-ngx-components-operations-operations-timeline.mjs +1 -1
  112. package/fesm2022/c8y-ngx-components-operations-operations-timeline.mjs.map +1 -1
  113. package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-configuration.mjs +1 -1
  114. package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-configuration.mjs.map +1 -1
  115. package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-device-profile.mjs +1 -1
  116. package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-device-profile.mjs.map +1 -1
  117. package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-firmware.mjs +2 -2
  118. package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-firmware.mjs.map +1 -1
  119. package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-software.mjs +1 -1
  120. package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-software.mjs.map +1 -1
  121. package/fesm2022/c8y-ngx-components-protocol-lpwan.mjs +2 -2
  122. package/fesm2022/c8y-ngx-components-protocol-lpwan.mjs.map +1 -1
  123. package/fesm2022/c8y-ngx-components-repository-configuration.mjs +2 -2
  124. package/fesm2022/c8y-ngx-components-repository-configuration.mjs.map +1 -1
  125. package/fesm2022/c8y-ngx-components-repository-firmware.mjs +4 -4
  126. package/fesm2022/c8y-ngx-components-repository-firmware.mjs.map +1 -1
  127. package/fesm2022/c8y-ngx-components-repository-shared.mjs +1 -1
  128. package/fesm2022/c8y-ngx-components-repository-shared.mjs.map +1 -1
  129. package/fesm2022/c8y-ngx-components-repository-software.mjs +4 -4
  130. package/fesm2022/c8y-ngx-components-repository-software.mjs.map +1 -1
  131. package/fesm2022/c8y-ngx-components-sub-assets.mjs +1 -1
  132. package/fesm2022/c8y-ngx-components-sub-assets.mjs.map +1 -1
  133. package/fesm2022/c8y-ngx-components-tracking.mjs +271 -0
  134. package/fesm2022/c8y-ngx-components-tracking.mjs.map +1 -0
  135. package/fesm2022/c8y-ngx-components-trusted-certificates.mjs +5 -5
  136. package/fesm2022/c8y-ngx-components-trusted-certificates.mjs.map +1 -1
  137. package/fesm2022/c8y-ngx-components-widgets-implementations-map.mjs +1 -1
  138. package/fesm2022/c8y-ngx-components-widgets-implementations-map.mjs.map +1 -1
  139. package/fesm2022/c8y-ngx-components.mjs +204 -16
  140. package/fesm2022/c8y-ngx-components.mjs.map +1 -1
  141. package/locales/de.po +158 -83
  142. package/locales/en.po +6 -0
  143. package/locales/es.po +361 -205
  144. package/locales/fr.po +342 -186
  145. package/locales/locales.pot +40 -7
  146. package/locales/nl.po +326 -170
  147. package/locales/pl.po +60 -59
  148. package/locales/pt_BR.po +342 -186
  149. package/map/cluster-map.component.d.ts +3 -3
  150. package/map/cluster-map.component.d.ts.map +1 -1
  151. package/map/map.component.d.ts +17 -7
  152. package/map/map.component.d.ts.map +1 -1
  153. package/map/map.model.d.ts +14 -6
  154. package/map/map.model.d.ts.map +1 -1
  155. package/package.json +1 -1
  156. package/tracking/c8y-ngx-components-tracking.d.ts.map +1 -0
  157. package/tracking/index.d.ts +6 -0
  158. package/tracking/index.d.ts.map +1 -0
  159. package/tracking/tracking-marker-popup.component.d.ts +17 -0
  160. package/tracking/tracking-marker-popup.component.d.ts.map +1 -0
  161. package/tracking/tracking-tab.guard.d.ts +12 -0
  162. package/tracking/tracking-tab.guard.d.ts.map +1 -0
  163. package/tracking/tracking.component.d.ts +33 -0
  164. package/tracking/tracking.component.d.ts.map +1 -0
  165. package/tracking/tracking.feature.d.ts +3 -0
  166. package/tracking/tracking.feature.d.ts.map +1 -0
  167. package/tracking/tracking.service.d.ts +38 -0
  168. package/tracking/tracking.service.d.ts.map +1 -0
  169. package/trusted-certificates/crl/crl-settings.component.d.ts +1 -1
  170. package/trusted-certificates/crl/crl-settings.component.d.ts.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"c8y-ngx-components-repository-software.mjs","sources":["../../repository/software/list/add-software-modal.component.ts","../../repository/software/list/add-software-modal.component.html","../../repository/software/list/columns/description.grid-column.ts","../../repository/software/list/columns/device-type.cell-renderer.component.ts","../../repository/software/list/columns/device-type.cell-renderer.component.html","../../repository/software/list/columns/device-type.grid-column.ts","../../repository/software/list/columns/name.cell-renderer.component.ts","../../repository/software/list/columns/name.grid-column.ts","../../repository/software/list/columns/software-type.cell-renderer.component.ts","../../repository/software/list/columns/software-type.cell-renderer.component.html","../../repository/software/list/columns/software-type.filtering-form-renderer.component.ts","../../repository/software/list/columns/software-type.filtering-form-renderer.component.html","../../repository/software/list/columns/software-type.grid-column.ts","../../repository/software/list/columns/versions.cell-renderer.component.ts","../../repository/software/list/columns/versions.cell-renderer.component.html","../../repository/software/list/columns/versions.grid-column.ts","../../repository/software/list/software-list.component.ts","../../repository/software/list/software-list.component.html","../../repository/software/list/software-details.component.ts","../../repository/software/list/software-details.component.html","../../repository/software/list/software-repository-navigation-factory.ts","../../repository/software/list/software-repository-list.module.ts","../../repository/software/device-tab/device-software.service.ts","../../repository/software/device-tab/device-software-list.component.ts","../../repository/software/device-tab/device-software-list.component.html","../../repository/software/device-tab/device-software-changes.component.ts","../../repository/software/device-tab/device-software-changes.component.html","../../repository/software/device-tab/installed-software.component.ts","../../repository/software/device-tab/installed-software.component.html","../../repository/software/device-tab/software-device-tab.component.ts","../../repository/software/device-tab/software-device-tab.component.html","../../repository/software/device-tab/software-device-tab.guard.ts","../../repository/software/device-tab/software-repository-device-tab.module.ts","../../repository/software/software-repository.module.ts","../../repository/software/c8y-ngx-components-repository-software.ts"],"sourcesContent":["import { Component, EventEmitter, Output, ViewChild } from '@angular/core';\nimport { NgForm } from '@angular/forms';\nimport { IManagedObject } from '@c8y/client';\nimport { AlertService, gettext, PickedFiles } from '@c8y/ngx-components';\nimport {\n ModalModel,\n PRODUCT_EXPERIENCE_REPOSITORY_SHARED,\n RepositoryCategory,\n RepositoryService,\n RepositoryType\n} from '@c8y/ngx-components/repository/shared';\nimport { assign, get, isUndefined } from 'lodash-es';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { BehaviorSubject, from, Subscription } from 'rxjs';\nimport { debounceTime, distinctUntilChanged, switchMap, tap } from 'rxjs/operators';\n\n@Component({\n selector: 'c8y-add-software-software-modal',\n templateUrl: 'add-software-modal.component.html'\n})\nexport class AddSoftwareModalComponent {\n PRODUCT_EXPERIENCE = PRODUCT_EXPERIENCE_REPOSITORY_SHARED;\n @ViewChild('softwareForm', { static: false }) form: NgForm;\n @Output() saved: EventEmitter<RepositoryCategory> = new EventEmitter<RepositoryCategory>();\n onInput: BehaviorSubject<string> = new BehaviorSubject<string>('');\n model: ModalModel = {\n selected: undefined,\n version: undefined,\n description: undefined,\n deviceType: undefined,\n softwareType: undefined,\n binary: {\n file: undefined,\n url: undefined\n }\n };\n\n softwaresResult;\n saving = false;\n softwarePreselected = false;\n textForSoftwareUrlPopover: string =\n gettext(`Path for binaries can vary depending on device agent implementation, for example:\n /software/binaries/software1.bin\n https://software/binary/123\n ftp://software/binary/123.tar.gz\n `);\n private inputSubscription$: Subscription;\n\n constructor(\n private modal: BsModalRef,\n private repositoryService: RepositoryService,\n private alert: AlertService\n ) {}\n\n ngOnInit() {\n this.setInitialState();\n this.loadSoftwares();\n }\n\n setInitialState() {\n if (this.model.selected) {\n this.softwarePreselected = true;\n }\n }\n\n loadSoftwares() {\n this.inputSubscription$ = this.onInput\n .pipe(\n tap(() => {\n if (!this.softwarePreselected) {\n this.model.description = null;\n if (this.form) {\n this.form.form.get('description').reset();\n }\n }\n }),\n debounceTime(300),\n distinctUntilChanged(),\n switchMap(searchStr => this.getSoftwareResult(searchStr))\n )\n .subscribe(result => {\n this.softwaresResult = result;\n });\n }\n\n getSoftwareResult(searchStr: string) {\n return from(\n this.repositoryService.listRepositoryEntries(RepositoryType.SOFTWARE, {\n partialName: searchStr,\n skipLegacy: true\n })\n );\n }\n\n async save() {\n this.saving = true;\n this.repositoryService\n .create(this.model, RepositoryType.SOFTWARE)\n .then(savedSoftware => {\n this.successMsg();\n this.saving = false;\n this.saved.next(savedSoftware);\n this.cancel();\n })\n .catch(e => {\n this.saving = false;\n this.saved.error(e);\n this.cancel();\n });\n }\n\n successMsg() {\n const msg = gettext('Software added.');\n this.alert.success(msg);\n }\n\n cancel() {\n this.modal.hide();\n this.saved.complete();\n }\n\n ngOnDestroy() {\n this.inputSubscription$.unsubscribe();\n }\n\n onFile(dropped: PickedFiles) {\n if (!isUndefined(dropped.url)) {\n this.model.binary = {\n url: dropped.url\n };\n return;\n } else if (dropped.droppedFiles) {\n this.model.binary = {\n file: dropped.droppedFiles[0].file\n };\n return;\n } else {\n this.model.binary = {\n file: undefined,\n url: undefined\n };\n }\n }\n\n onSoftwareSelect(software: IManagedObject) {\n assign(this.model, {\n selected: software,\n description: software.description,\n deviceType: get(software, 'c8y_Filter.type'),\n softwareType: software\n });\n }\n}\n","<div class=\"viewport-modal\">\n <div class=\"modal-header dialog-header\">\n <i [c8yIcon]=\"'c8y-tools'\"></i>\n <div class=\"modal-title\" translate id=\"addSoftwareModalTitle\">Add software</div>\n </div>\n <div class=\"p-16 text-center separator-bottom\" *ngIf=\"!softwarePreselected\">\n <p class=\"text-medium text-16\" translate>Select or create new software</p>\n </div>\n <form\n class=\"d-contents\"\n autocomplete=\"off\"\n #softwareForm=\"ngForm\"\n (ngSubmit)=\"softwareForm.form.valid && save()\"\n >\n <div class=\"modal-inner-scroll\">\n <div class=\"modal-body\" id=\"addSoftwareModalDescription\">\n <div [hidden]=\"softwarePreselected\">\n <c8y-form-group>\n <label for=\"softwareName\" translate>Software</label>\n <c8y-typeahead\n [(ngModel)]=\"model.selected\"\n name=\"softwareName\"\n placeholder=\"{{ 'Select or enter' | translate }}\"\n (onSearch)=\"onInput.next($event)\"\n [required]=\"true\"\n >\n <c8y-li\n *c8yFor=\"\n let software of softwaresResult;\n loadMore: 'auto';\n notFound: notFoundTemplate\n \"\n class=\"p-l-8 p-r-8 c8y-list__item--link\"\n (click)=\"onSoftwareSelect(software)\"\n [active]=\"model.selected === software\"\n >\n <c8y-highlight\n [text]=\"software.name || '--'\"\n [pattern]=\"onInput | async\"\n ></c8y-highlight>\n </c8y-li>\n <ng-template #notFoundTemplate>\n <c8y-li class=\"bg-level-2 p-8\" *ngIf=\"(onInput | async)?.length > 0\">\n <span translate>No match found.</span>\n <button\n class=\"btn btn-primary btn-xs m-l-8\"\n type=\"button\"\n title=\"{{ 'Add new`software`' | translate }}\"\n >\n {{ 'Add new`software`' | translate }}\n </button>\n </c8y-li>\n </ng-template>\n </c8y-typeahead>\n </c8y-form-group>\n\n <c8y-form-group>\n <label for=\"softwareDescription\" translate>Description</label>\n <input\n id=\"softwareDescription\"\n class=\"form-control\"\n autocomplete=\"off\"\n name=\"description\"\n [(ngModel)]=\"model.description\"\n placeholder=\"{{ 'e.g. Cloud connectivity software' | translate }}\"\n [disabled]=\"model.selected?.id\"\n [required]=\"true\"\n />\n </c8y-form-group>\n\n <c8y-form-group>\n <label class=\"control-label\" for=\"softwareDeviceTypeFilter\">\n {{ 'Device type filter' | translate }}\n <button\n class=\"btn-help\"\n type=\"button\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{\n 'If the filter is set, the software will show up for installation only for devices of that type. If no filter is set, it will be available for all devices.'\n | translate\n }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n ></button>\n </label>\n <input\n id=\"softwareDeviceTypeFilter\"\n class=\"form-control\"\n name=\"softwareDeviceTypeFilter\"\n [(ngModel)]=\"model.deviceType\"\n placeholder=\"{{ 'e.g.' | translate }} c8y_Linux\"\n [disabled]=\"model.selected?.id\"\n />\n </c8y-form-group>\n\n <c8y-form-group>\n <label for=\"softwareType\" translate>Software type</label>\n <c8y-software-type\n name=\"softwareType\"\n [(ngModel)]=\"model.softwareType\"\n [disabled]=\"model.selected?.id\"\n ></c8y-software-type>\n </c8y-form-group>\n </div>\n\n <c8y-form-group>\n <label for=\"softwareVersion\" translate>Version</label>\n <input\n id=\"softwareVersion\"\n class=\"form-control\"\n autocomplete=\"off\"\n name=\"version\"\n [(ngModel)]=\"model.version\"\n placeholder=\"{{ 'e.g.' | translate }} 1.0.0\"\n [required]=\"true\"\n />\n </c8y-form-group>\n\n <c8y-form-group>\n <div class=\"legend form-block m-t-40\" translate>Software file</div>\n <c8y-file-picker\n [maxAllowedFiles]=\"1\"\n (onFilesPicked)=\"onFile($event)\"\n [fileUrlPopover]=\"textForSoftwareUrlPopover\"\n ></c8y-file-picker>\n </c8y-form-group>\n </div>\n </div>\n <div class=\"modal-footer\">\n <button\n class=\"btn btn-default\"\n type=\"button\"\n title=\"{{ 'Cancel' | translate }}\"\n (click)=\"cancel()\"\n [disabled]=\"saving\"\n >\n {{ 'Cancel' | translate }}\n </button>\n\n <button\n class=\"btn btn-primary\"\n type=\"submit\"\n title=\"{{ 'Add software' | translate }}\"\n [ngClass]=\"{ 'btn-pending': saving }\"\n [disabled]=\"\n !softwareForm.form.valid ||\n softwareForm.form.pristine ||\n saving ||\n (!model.binary?.url && !model.binary?.file)\n \"\n c8yProductExperience\n [actionName]=\"PRODUCT_EXPERIENCE.SOFTWARE.EVENTS.REPOSITORY\"\n [actionData]=\"{\n component: PRODUCT_EXPERIENCE.SOFTWARE.COMPONENTS.ADD_SOFTWARE_MODAL,\n result:\n softwarePreselected || model.selected?.id\n ? PRODUCT_EXPERIENCE.SOFTWARE.RESULTS.ADD_SOFTWARE_VERSION\n : PRODUCT_EXPERIENCE.SOFTWARE.RESULTS.ADD_SOFTWARE\n }\"\n >\n {{ 'Add software' | translate }}\n </button>\n </div>\n </form>\n</div>\n","import {\n BaseColumn,\n ColumnConfig,\n getBasicInputArrayFormFieldConfig,\n gettext\n} from '@c8y/ngx-components';\n\nexport class DescriptionGridColumn extends BaseColumn {\n constructor(initialColumnConfig?: ColumnConfig) {\n super(initialColumnConfig);\n this.name = 'description';\n this.path = 'description';\n this.header = gettext('Description');\n\n this.filterable = true;\n this.filteringConfig = {\n fields: getBasicInputArrayFormFieldConfig({\n key: 'descriptions',\n label: gettext('Filter software by description'),\n addText: gettext('Add next`description`'),\n tooltip: gettext('Use * as a wildcard character'),\n placeholder: gettext('Cloud connectivity software')\n }),\n getFilter(model: any): any {\n const filter: any = {};\n if (model.descriptions.length) {\n filter.description = { __in: model.descriptions };\n }\n return filter;\n }\n };\n\n this.sortable = true;\n this.sortingConfig = {\n pathSortingConfigs: [{ path: this.path }]\n };\n }\n}\n","import { Component } from '@angular/core';\nimport { CellRendererContext } from '@c8y/ngx-components';\n\n@Component({\n templateUrl: './device-type.cell-renderer.component.html'\n})\nexport class DeviceTypeCellRendererComponent {\n constructor(public context: CellRendererContext) {}\n}\n","<span *ngIf=\"context.item.c8y_Filter?.type; else emptyText\">\n {{ context.item.c8y_Filter?.type }}\n</span>\n<ng-template #emptyText>\n <small class=\"text-muted\">\n <em translate>Undefined`device type`</em>\n </small>\n</ng-template>\n","import {\n BaseColumn,\n ColumnConfig,\n getBasicInputArrayFormFieldConfig,\n gettext\n} from '@c8y/ngx-components';\nimport { DeviceTypeCellRendererComponent } from './device-type.cell-renderer.component';\n\nexport class DeviceTypeGridColumn extends BaseColumn {\n constructor(initialColumnConfig?: ColumnConfig) {\n super(initialColumnConfig);\n this.name = 'deviceType';\n this.path = 'c8y_Filter.type';\n this.header = gettext('Device type');\n this.cellRendererComponent = DeviceTypeCellRendererComponent;\n\n this.filterable = true;\n\n this.filteringConfig = {\n fields: [\n ...getBasicInputArrayFormFieldConfig({\n key: 'types',\n label: gettext('Filter software by device type'),\n addText: gettext('Add next`type`'),\n tooltip: gettext('Use * as a wildcard character'),\n placeholder: 'c8y_Linux',\n optional: true\n }),\n {\n key: 'noDeviceType',\n type: 'switch',\n templateOptions: {\n label: gettext('No device type')\n }\n }\n ],\n getFilter(model: any): any {\n const filter: any = { __or: {} };\n if (model.types?.length) {\n filter.__or = {\n 'c8y_Filter.type': { __in: model.types }\n };\n }\n if (model.noDeviceType) {\n filter.__or = {\n ...filter.__or,\n __or: {\n __not: { __has: 'c8y_Filter.type' },\n 'c8y_Filter.type': ''\n }\n };\n }\n return filter;\n }\n };\n\n this.sortable = true;\n this.sortingConfig = {\n pathSortingConfigs: [{ path: this.path }]\n };\n }\n}\n","import { Component } from '@angular/core';\nimport { CellRendererContext } from '@c8y/ngx-components';\n\n@Component({\n template: `\n <a class=\"interact\" [title]=\"context.item.name\" [routerLink]=\"[context.item.id]\">\n {{ context.item.name }}\n </a>\n `\n})\nexport class SoftwareNameCellRendererComponent {\n constructor(public context: CellRendererContext) {}\n}\n","import {\n BaseColumn,\n ColumnConfig,\n getBasicInputArrayFormFieldConfig,\n gettext\n} from '@c8y/ngx-components';\nimport { SoftwareNameCellRendererComponent } from './name.cell-renderer.component';\n\nexport class SoftwareNameGridColumn extends BaseColumn {\n constructor(initialColumnConfig?: ColumnConfig) {\n super(initialColumnConfig);\n this.name = 'name';\n this.path = 'name';\n this.header = gettext('Name');\n this.cellRendererComponent = SoftwareNameCellRendererComponent;\n\n this.filterable = true;\n this.filteringConfig = {\n fields: getBasicInputArrayFormFieldConfig({\n key: 'names',\n label: gettext('Filter software by name'),\n addText: gettext('Add next`name`'),\n tooltip: gettext('Use * as a wildcard character'),\n placeholder: gettext('Cloud connectivity')\n }),\n getFilter(model: any): any {\n const filter: any = {};\n if (model.names.length) {\n filter.name = { __in: model.names };\n }\n return filter;\n }\n };\n\n this.sortable = true;\n this.sortingConfig = {\n pathSortingConfigs: [{ path: this.path }]\n };\n }\n}\n","import { Component } from '@angular/core';\nimport { CellRendererContext } from '@c8y/ngx-components';\n\n@Component({\n templateUrl: './software-type.cell-renderer.component.html'\n})\nexport class SoftwareTypeCellRendererComponent {\n constructor(public context: CellRendererContext) {}\n}\n","<span *ngIf=\"!!context?.item?.softwareType; else emptyText\" class=\"label label-info\">{{\n context.item.softwareType\n}}</span>\n<ng-template #emptyText>\n <small class=\"text-muted\">\n <em translate>Undefined`software type`</em>\n </small>\n</ng-template>\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n HostListener,\n OnInit,\n ViewChild\n} from '@angular/core';\nimport { IManagedObject, IResultList, QueriesUtil } from '@c8y/client';\nimport {\n Column,\n FilteringFormRendererContext,\n ForOfFilterPipe,\n gettext,\n TypeaheadComponent\n} from '@c8y/ngx-components';\nimport { RepositoryService, RepositoryType } from '@c8y/ngx-components/repository/shared';\nimport { cloneDeep, uniqBy } from 'lodash-es';\nimport { BehaviorSubject, NEVER, Observable, pipe } from 'rxjs';\nimport { debounceTime, map, switchMap, tap } from 'rxjs/operators';\n\n@Component({\n templateUrl: './software-type.filtering-form-renderer.component.html',\n changeDetection: ChangeDetectionStrategy.Default\n})\nexport class SoftwareTypeFilteringFormRendererComponent implements OnInit, AfterViewInit {\n selectedType: IManagedObject;\n softwareWithType$: Observable<IResultList<IManagedObject>> = NEVER;\n search$: BehaviorSubject<string> = new BehaviorSubject(null);\n filterPipe: ForOfFilterPipe<IManagedObject> = pipe(tap());\n typeaheadPlaceholder = gettext('Start typing to search, for example, {{ example }}');\n @ViewChild(TypeaheadComponent, { static: false }) typeahead: TypeaheadComponent;\n private queriesUtil: QueriesUtil = new QueriesUtil();\n private softwareTypes: Set<string> = new Set();\n\n constructor(\n public context: FilteringFormRendererContext,\n public changeDetectorRef: ChangeDetectorRef,\n private repositoryService: RepositoryService,\n private elementRef: ElementRef\n ) {\n this.softwareWithType$ = this.search$.pipe(\n debounceTime(300),\n tap(() => this.softwareTypes.clear()),\n switchMap((searchString: string) => {\n let query = this.queriesUtil.prependOrderbys({}, [{ softwareType: 1 }]);\n const filter = !!searchString\n ? {\n softwareType: {\n __eq: `*${searchString}*`\n }\n }\n : {\n __has: 'softwareType'\n };\n query = this.queriesUtil.addAndFilter(query, filter);\n\n return this.repositoryService.listRepositoryEntries(RepositoryType.SOFTWARE, {\n skipDefaultOrder: true,\n query,\n params: {\n pageSize: 200\n }\n });\n })\n );\n\n this.filterPipe = pipe(\n map(\n this.removeDuplicatesBySoftwareType.bind(\n this\n ) as SoftwareTypeFilteringFormRendererComponent['removeDuplicatesBySoftwareType']\n ),\n tap(() => this.changeDetectorRef.detectChanges())\n );\n }\n\n @HostListener('keyup.enter', ['$event']) onEnterKeyUp(event: KeyboardEvent) {\n event.stopPropagation();\n this.applyFilter();\n }\n @HostListener('keydown.escape', ['$event']) onEscapeKeyDown(event: KeyboardEvent) {\n event.stopPropagation();\n this.context.resetFilter();\n }\n\n ngOnInit(): void {\n const column: Column = this.context.property;\n this.selectedType = cloneDeep(column.externalFilterQuery || {});\n }\n\n ngAfterViewInit(): void {\n this.typeahead?.searchControl?.nativeElement?.focus();\n try {\n this.elementRef.nativeElement.parentElement.parentElement.style.overflow = 'visible';\n } catch (ex) {\n // intentionally empty\n }\n }\n\n applyFilter() {\n this.context.applyFilter({\n externalFilterQuery: this.selectedType\n });\n }\n\n private removeDuplicatesBySoftwareType(list: IManagedObject[]): IManagedObject[] {\n const uniqueBySoftwareType: IManagedObject[] = uniqBy(list, 'softwareType').filter(\n (sw: IManagedObject) => !this.softwareTypes.has(sw.softwareType)\n );\n uniqueBySoftwareType.forEach((sw: IManagedObject) => this.softwareTypes.add(sw.softwareType));\n return uniqueBySoftwareType;\n }\n}\n","<c8y-form-group>\n <label translate>Filter by software type</label>\n <c8y-typeahead\n [(ngModel)]=\"selectedType\"\n name=\"softwareType\"\n placeholder=\"{{ typeaheadPlaceholder | translate: { example: 'yum' } }}\"\n displayProperty=\"softwareType\"\n (onSearch)=\"search$.next($event)\"\n >\n <c8y-li\n *c8yFor=\"let software of softwareWithType$; pipe: filterPipe; loadMore: 'auto'\"\n class=\"p-l-8 p-r-8 c8y-list__item--link\"\n (click)=\"\n selectedType = software; typeahead.dropdown.hide(); changeDetectorRef.detectChanges()\n \"\n [active]=\"selectedType?.softwareType === software?.softwareType\"\n >\n <c8y-highlight\n [text]=\"software?.softwareType || '--'\"\n [pattern]=\"search$.value\"\n ></c8y-highlight>\n </c8y-li>\n </c8y-typeahead>\n</c8y-form-group>\n\n<div class=\"data-grid__dropdown__footer d-flex separator-top\">\n <button\n class=\"btn btn-default btn-sm m-r-8 flex-grow\"\n (click)=\"context.resetFilter()\"\n title=\"{{ 'Reset' | translate }}\"\n translate\n >\n Reset\n </button>\n\n <button\n class=\"btn btn-primary btn-sm flex-grow\"\n (click)=\"applyFilter()\"\n title=\"{{ 'Apply' | translate }}\"\n translate\n >\n Apply\n </button>\n</div>\n","import { BaseColumn, ColumnConfig, gettext } from '@c8y/ngx-components';\nimport { SoftwareTypeCellRendererComponent } from './software-type.cell-renderer.component';\nimport { SoftwareTypeFilteringFormRendererComponent } from './software-type.filtering-form-renderer.component';\n\nexport class SoftwareTypeGridColumn extends BaseColumn {\n constructor(initialColumnConfig?: ColumnConfig) {\n super(initialColumnConfig);\n this.name = 'type';\n this.path = 'softwareType';\n this.header = gettext('Software type');\n this.cellRendererComponent = SoftwareTypeCellRendererComponent;\n\n this.filterable = true;\n this.filteringFormRendererComponent = SoftwareTypeFilteringFormRendererComponent;\n this.filteringConfig = {\n getFilter(model) {\n const filter: any = {};\n if (model.softwareType) {\n filter.softwareType = { __eq: model.softwareType };\n }\n return filter;\n }\n };\n\n this.sortable = true;\n this.sortingConfig = {\n pathSortingConfigs: [{ path: this.path }]\n };\n }\n}\n","import { Component } from '@angular/core';\nimport { IManagedObject } from '@c8y/client';\nimport { CellRendererContext, memoize } from '@c8y/ngx-components';\nimport { property } from 'lodash-es';\nimport { Observable } from 'rxjs';\nimport { shareReplay } from 'rxjs/operators';\nimport { RepositoryService } from '@c8y/ngx-components/repository/shared';\n\n@Component({\n templateUrl: './versions.cell-renderer.component.html'\n})\nexport class VersionsCellRendererComponent {\n isLegacy = this.repositoryService.isLegacyEntry.bind(this.repositoryService);\n software;\n constructor(public context: CellRendererContext, private repositoryService: RepositoryService) {\n this.software = context.item;\n }\n\n @memoize(property('id'))\n getBaseVersionsCount$(software: IManagedObject): Observable<number | string> {\n return this.repositoryService.getBaseVersionsCount$(software).pipe(shareReplay(1));\n }\n}\n","<span class=\"label label-warning m-l-auto-sm\" *ngIf=\"isLegacy(software)\">\n <span translate> Legacy </span>\n</span>\n<span *ngIf=\"!isLegacy(software)\">\n <span *ngIf=\"(getBaseVersionsCount$(software) | async) === null\">\n <span class=\"badge badge-info m-l-auto-sm\">\n <i class=\"icon-spin\" c8yIcon=\"circle-o-notch\"></i>\n </span>\n </span>\n <span *ngIf=\"(getBaseVersionsCount$(software) | async) !== null\">\n <span class=\"badge badge-info m-l-auto-sm\">\n {{ getBaseVersionsCount$(software) | async }}\n </span>\n </span>\n</span>\n","import { BaseColumn, ColumnConfig, gettext } from '@c8y/ngx-components';\nimport { VersionsCellRendererComponent } from './versions.cell-renderer.component';\n\nexport class VersionsGridColumn extends BaseColumn {\n constructor(initialColumnConfig?: ColumnConfig) {\n super(initialColumnConfig);\n this.name = 'versions';\n this.header = gettext('Versions');\n this.cellRendererComponent = VersionsCellRendererComponent;\n this.sortable = false;\n }\n}\n","import { Component, EventEmitter, OnInit } from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { IManagedObject, IResultList } from '@c8y/client';\nimport {\n ActionControl,\n AlertService,\n BuiltInActionType,\n Column,\n DataGridService,\n DataSourceModifier,\n gettext,\n ModalService,\n ServerSideDataCallback,\n ServerSideDataResult,\n Status\n} from '@c8y/ngx-components';\nimport {\n PRODUCT_EXPERIENCE_REPOSITORY_SHARED,\n RepositoryService,\n RepositoryType\n} from '@c8y/ngx-components/repository/shared';\nimport { TranslateService } from '@ngx-translate/core';\nimport { BsModalService, ModalOptions } from 'ngx-bootstrap/modal';\nimport { AddSoftwareModalComponent } from './add-software-modal.component';\nimport { DescriptionGridColumn } from './columns/description.grid-column';\nimport { DeviceTypeGridColumn } from './columns/device-type.grid-column';\nimport { SoftwareNameGridColumn } from './columns/name.grid-column';\nimport { SoftwareTypeGridColumn } from './columns/software-type.grid-column';\nimport { VersionsGridColumn } from './columns/versions.grid-column';\n\n@Component({\n selector: 'c8y-software-list',\n templateUrl: 'software-list.component.html'\n})\nexport class SoftwareListComponent implements OnInit {\n sizeRequest: Promise<number>;\n sizeRequestDone = false;\n refresh$: EventEmitter<void> = new EventEmitter();\n\n columns: Column[] = [\n new SoftwareNameGridColumn(),\n new DescriptionGridColumn(),\n new DeviceTypeGridColumn(),\n new SoftwareTypeGridColumn(),\n new VersionsGridColumn()\n ];\n actionControls: ActionControl[] = [];\n serverSideDataCallback: ServerSideDataCallback;\n pagination = {\n pageSize: 50,\n currentPage: 1\n };\n\n constructor(\n private repositoryService: RepositoryService,\n private gridService: DataGridService,\n private modalService: ModalService,\n private bsModalService: BsModalService,\n private translateService: TranslateService,\n private alertService: AlertService,\n private router: Router,\n private activatedRoute: ActivatedRoute\n ) {\n this.serverSideDataCallback = this.onDataSourceModifier.bind(this);\n this.sizeRequest = this.repositoryService\n .listRepositoryEntries(RepositoryType.SOFTWARE, {\n skipDefaultOrder: true,\n params: { pageSize: 1 }\n })\n .then(response => {\n this.sizeRequestDone = true;\n return response?.paging?.totalPages;\n });\n }\n\n ngOnInit(): void {\n this.actionControls.push({\n type: BuiltInActionType.Edit,\n callback: this.editSoftware.bind(this)\n });\n this.actionControls.push({\n type: BuiltInActionType.Delete,\n callback: this.deleteSoftware.bind(this)\n });\n }\n\n async onDataSourceModifier(\n dataSourceModifier: DataSourceModifier\n ): Promise<ServerSideDataResult> {\n const dataRequest: Promise<IResultList<IManagedObject>> =\n this.repositoryService.listRepositoryEntries(RepositoryType.SOFTWARE, {\n query: this.gridService.getQueryObj(dataSourceModifier.columns),\n skipDefaultOrder: true,\n params: {\n pageSize: dataSourceModifier.pagination.pageSize,\n currentPage: dataSourceModifier.pagination.currentPage\n }\n });\n\n const filtererdSizeRequest: Promise<number> = this.repositoryService\n .listRepositoryEntries(RepositoryType.SOFTWARE, {\n skipDefaultOrder: true,\n query: this.gridService.getQueryObj(dataSourceModifier.columns),\n params: { pageSize: 1 }\n })\n .then(response => response?.paging?.totalPages);\n\n const [dataResponse, size, filteredSize] = await Promise.all([\n dataRequest,\n this.sizeRequest,\n filtererdSizeRequest\n ]);\n\n const { res, data, paging } = dataResponse;\n\n const serverSideDataResult: ServerSideDataResult = {\n res,\n data,\n paging,\n filteredSize,\n size\n };\n\n return serverSideDataResult;\n }\n\n addSoftware() {\n const config: ModalOptions<AddSoftwareModalComponent> = {\n class: 'modal-sm',\n ariaDescribedby: 'addSoftwareModalDescription',\n ariaLabelledBy: 'addSoftwareModalTitle',\n ignoreBackdropClick: true,\n keyboard: false\n };\n const modalRef = this.bsModalService.show(AddSoftwareModalComponent, config);\n modalRef.content.saved.subscribe(savedSoftware => this.editSoftware(savedSoftware));\n }\n\n editSoftware(software: Partial<IManagedObject>) {\n this.router.navigate([software.id], { relativeTo: this.activatedRoute });\n }\n\n async deleteSoftware(software: IManagedObject) {\n try {\n const title = gettext('Delete software');\n const body = `\n ${this.translateService.instant(\n gettext('You are about to delete software \"{{ name }}\" with all its versions.'),\n { name: software.name }\n )}\n ${this.translateService.instant(gettext('This operation is irreversible.'))}\n ${this.translateService.instant(gettext('Do you want to proceed?'))}\n `;\n const labels = {\n ok: gettext('Delete')\n };\n await this.modalService.confirm(\n title,\n body,\n Status.DANGER,\n labels,\n {},\n { eventName: PRODUCT_EXPERIENCE_REPOSITORY_SHARED.SOFTWARE.EVENTS.REPOSITORY }\n );\n await this.repositoryService.delete(software);\n this.alertService.success(gettext('Software deleted.'));\n this.refresh$.next();\n } catch (ex) {\n // only if not cancel from modal\n if (ex) {\n this.alertService.addServerFailure(ex);\n }\n }\n }\n\n trackByName(_index, column: Column): string {\n return column.name;\n }\n}\n","<c8y-title>\n {{ 'Software repository' | translate }}\n</c8y-title>\n<c8y-breadcrumb>\n <c8y-breadcrumb-item\n icon=\"c8y-management\"\n label=\"{{ 'Management' | translate }}\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n icon=\"c8y-tools\"\n label=\"{{ 'Software repository' | translate }}\"\n ></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<c8y-action-bar-item [placement]=\"'right'\">\n <button\n class=\"btn btn-link\"\n title=\"{{ 'Add software' | translate }}\"\n type=\"button\"\n (click)=\"addSoftware()\"\n >\n <i c8yIcon=\"plus-circle\"></i>\n {{ 'Add software' | translate }}\n </button>\n</c8y-action-bar-item>\n\n<c8y-help\n src=\"/docs/device-management-application/managing-device-data/#managing-software\"\n></c8y-help>\n\n<div class=\"content-fullpage border-top border-bottom\">\n <c8y-data-grid\n [title]=\"'Software' | translate\"\n [refresh]=\"refresh$\"\n [pagination]=\"pagination\"\n [columns]=\"columns\"\n [actionControls]=\"actionControls\"\n [infiniteScroll]=\"'auto'\"\n [serverSideDataCallback]=\"serverSideDataCallback\"\n >\n <div class=\"c8y-empty-state\">\n <ng-container *ngIf=\"!sizeRequestDone\">\n <c8y-loading></c8y-loading>\n </ng-container>\n <ng-container *ngIf=\"sizeRequestDone\">\n <ng-container *ngIf=\"(sizeRequest | async) === 0; else noResults\">\n <div class=\"text-center\">\n <h1\n class=\"c8y-icon-duocolor\"\n c8yIcon=\"c8y-tools\"\n ></h1>\n <h3 translate>No software to display.</h3>\n <p translate>Add a new software by clicking below.</p>\n <p>\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Add software' | translate }}\"\n type=\"button\"\n (click)=\"addSoftware()\"\n >\n {{ 'Add software' | translate }}\n </button>\n </p>\n </div>\n </ng-container>\n <ng-template #noResults>\n <h1 c8yIcon=\"search\"></h1>\n <div>\n <p>\n <strong>{{ 'No results to display.' | translate }}</strong>\n </p>\n <small>{{ 'Refine your search terms or check your spelling.' | translate }}</small>\n </div>\n </ng-template>\n </ng-container>\n </div>\n <ng-container *ngFor=\"let column of columns; trackBy: trackByName\">\n <c8y-column [name]=\"column.name\"></c8y-column>\n </ng-container>\n </c8y-data-grid>\n</div>\n","import { Component, OnDestroy, OnInit, ViewChild } from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { IManagedObject, InventoryService, IResultList } from '@c8y/client';\nimport {\n AlertService,\n GainsightService,\n gettext,\n memoize,\n ModalService,\n Status\n} from '@c8y/ngx-components';\nimport {\n PRODUCT_EXPERIENCE_REPOSITORY_SHARED,\n RepositoryService,\n SoftwareTypeComponent\n} from '@c8y/ngx-components/repository/shared';\nimport { TranslateService } from '@ngx-translate/core';\nimport { BsModalService, ModalOptions } from 'ngx-bootstrap/modal';\nimport { BehaviorSubject, from, merge, Observable, Subject } from 'rxjs';\nimport {\n distinctUntilKeyChanged,\n map,\n shareReplay,\n switchMap,\n take,\n takeUntil,\n tap,\n withLatestFrom\n} from 'rxjs/operators';\nimport { AddSoftwareModalComponent } from './add-software-modal.component';\n\n@Component({\n selector: 'c8y-software-details',\n templateUrl: './software-details.component.html'\n})\nexport class SoftwareDetailsComponent implements OnInit, OnDestroy {\n @ViewChild(SoftwareTypeComponent, { static: true })\n softwareType: SoftwareTypeComponent;\n\n reload$: Subject<void> = new Subject();\n reloading$: BehaviorSubject<boolean> = new BehaviorSubject(false);\n softwareTypeObject: IManagedObject;\n isSoftwareTypeChanged = false;\n\n updateSoftware$: Subject<Partial<IManagedObject>> = new Subject();\n softwareUpdated$: Subject<IManagedObject> = new Subject();\n baseVersionsUpdated$: Subject<void> = new Subject();\n\n software$: Observable<IManagedObject> = merge(\n this.activatedRoute.params.pipe(\n map(params => params.id),\n switchMap(id => from(this.inventoryService.detail(id).then(result => result.data)))\n ),\n this.reload$.pipe(\n tap(() => this.reloading$.next(true)),\n switchMap(() => this.activatedRoute.params),\n map(params => params.id),\n switchMap(id => from(this.inventoryService.detail(id).then(result => result.data))),\n tap(() => this.reloading$.next(false))\n ),\n this.softwareUpdated$\n ).pipe(shareReplay(1));\n\n baseVersions$: Observable<IResultList<IManagedObject>> = merge(\n this.software$.pipe(distinctUntilKeyChanged('id')),\n this.baseVersionsUpdated$,\n this.reload$\n ).pipe(\n switchMap(() => this.software$),\n switchMap(software => this.repositoryService.listBaseVersions(software)),\n shareReplay(1)\n );\n\n isLegacy$: Observable<boolean> = this.software$.pipe(\n map(software => this.repositoryService.isLegacyEntry(software)),\n shareReplay(1)\n );\n\n destroy$: Subject<boolean> = new Subject<boolean>();\n\n constructor(\n private activatedRoute: ActivatedRoute,\n private inventoryService: InventoryService,\n private repositoryService: RepositoryService,\n private alertService: AlertService,\n private translateService: TranslateService,\n private modalService: ModalService,\n private bsModalService: BsModalService,\n private gainsightService: GainsightService,\n private router: Router\n ) {}\n\n ngOnInit() {\n this.updateSoftware$\n .pipe(\n withLatestFrom(this.software$),\n switchMap(([softwarePartial, software]) =>\n this.inventoryService.update({\n id: software.id,\n ...softwarePartial\n })\n ),\n map(({ data }) => data),\n tap(software => this.softwareUpdated$.next(software)),\n tap(() => this.alertService.success(gettext('Saved.'))),\n tap(() =>\n this.gainsightService.triggerEvent(\n PRODUCT_EXPERIENCE_REPOSITORY_SHARED.SOFTWARE.EVENTS.REPOSITORY,\n {\n result: PRODUCT_EXPERIENCE_REPOSITORY_SHARED.SOFTWARE.RESULTS.EDIT_SOFTWARE\n }\n )\n ),\n takeUntil(this.destroy$)\n )\n .subscribe();\n\n this.software$.subscribe(software => {\n this.softwareTypeObject = software;\n });\n }\n\n @memoize()\n getBinaryName$(binaryUrl) {\n return this.repositoryService.getBinaryName$(binaryUrl);\n }\n\n addBaseVersion() {\n this.software$\n .pipe(\n take(1),\n switchMap(software => {\n const initialState = {\n model: {\n selected: software,\n description: software.description\n }\n };\n const config: ModalOptions<AddSoftwareModalComponent> = {\n class: 'modal-sm',\n ariaDescribedby: 'addSoftwareModalDescription',\n ariaLabelledBy: 'addSoftwareModalTitle',\n ignoreBackdropClick: true,\n keyboard: false,\n initialState\n };\n const modalRef = this.bsModalService.show(AddSoftwareModalComponent, config);\n return modalRef.content.saved;\n })\n )\n .subscribe(() => this.baseVersionsUpdated$.next());\n }\n\n async deleteBaseVersion(baseVersion: IManagedObject) {\n try {\n const title = gettext('Delete software');\n const body = `\n ${this.translateService.instant(\n gettext('You are about to delete software {{ version }}.'),\n { version: baseVersion.c8y_Software.version }\n )}\n ${this.translateService.instant(gettext('This operation is irreversible.'))}\n ${this.translateService.instant(gettext('Do you want to proceed?'))}\n `;\n const labels = {\n ok: gettext('Delete')\n };\n await this.modalService.confirm(title, body, Status.DANGER, labels);\n const isLastVersion = await this.baseVersions$\n .pipe(\n map(versions => versions?.data?.length === 1),\n take(1)\n )\n .toPromise();\n if (isLastVersion) {\n await this.repositoryService.delete(this.softwareTypeObject);\n this.router.navigateByUrl('/software');\n } else {\n await this.repositoryService.delete(baseVersion);\n this.baseVersionsUpdated$.next();\n }\n this.alertService.success(gettext('Software deleted.'));\n } catch (ex) {\n // only if not cancel from modal\n if (ex) {\n this.alertService.addServerFailure(ex);\n }\n }\n }\n\n onSelectSoftwareType(software) {\n this.isSoftwareTypeChanged = !(\n this.softwareTypeObject?.softwareType === software?.softwareType\n );\n this.softwareTypeObject = software;\n }\n\n ngOnDestroy() {\n this.destroy$.next(true);\n this.destroy$.unsubscribe();\n }\n}\n","<c8y-title>\n {{ (software$ | async)?.name }}\n</c8y-title>\n\n<c8y-breadcrumb>\n <c8y-breadcrumb-item\n label=\"{{ 'Management' | translate }}\"\n icon=\"c8y-management\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n path=\"#/software\"\n label=\"{{ 'Software repository' | translate }}\"\n icon=\"c8y-tools\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n label=\"{{ (software$ | async)?.name }}\"\n icon=\"c8y-tools\"\n ></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<c8y-action-bar-item [placement]=\"'right'\">\n <button\n class=\"btn btn-link\"\n type=\"button\"\n title=\"{{ 'Add software' | translate }}\"\n (click)=\"addBaseVersion()\"\n *ngIf=\"!(isLegacy$ | async)\"\n >\n <i c8yIcon=\"plus-circle\"></i>\n {{ 'Add software' | translate }}\n </button>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item [placement]=\"'right'\">\n <button\n class=\"btn btn-link\"\n type=\"button\"\n title=\"{{ 'Reload' | translate }}\"\n (click)=\"reload$.next()\"\n >\n <i\n c8yIcon=\"refresh\"\n [ngClass]=\"{ 'icon-spin': reloading$ | async }\"\n ></i>\n {{ 'Reload' | translate }}\n </button>\n</c8y-action-bar-item>\n\n<div class=\"row\">\n <div class=\"col-lg-12 col-lg-max\">\n <div class=\"card card--fullpage\">\n <div class=\"card-block bg-level-1 flex-no-shrink p-t-24 p-b-24 overflow-visible\">\n <div class=\"content-flex-70\">\n <div class=\"text-center\">\n <i class=\"c8y-icon-duocolor icon-48 c8y-icon c8y-icon-tools\"></i>\n <p>\n <small class=\"label label-info\">Software</small>\n </p>\n </div>\n <div class=\"flex-grow col-10\">\n <div class=\"row\">\n <div class=\"col-sm-6\">\n <c8y-form-group>\n <label class=\"control-label\">\n {{ 'Name' | translate }}\n </label>\n <div class=\"input-group input-group-editable\">\n <input\n #nameInput\n type=\"text\"\n class=\"form-control\"\n [ngModel]=\"(software$ | async)?.name\"\n #nameModel=\"ngModel\"\n placeholder=\"{{ 'e.g. My software' | translate }}\"\n [ngStyle]=\"{ 'width.ch': (software$ | async)?.name?.length + 2 || 31 }\"\n required\n />\n <span></span>\n <div class=\"input-group-btn\">\n <button\n class=\"btn btn-primary\"\n type=\"button\"\n title=\"{{ 'Save' | translate }}\"\n (click)=\"updateSoftware$.next({ name: nameInput.value }); nameModel.reset()\"\n [disabled]=\"nameInput.value.length === 0\"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n </div>\n </c8y-form-group>\n </div>\n <div class=\"col-sm-6\">\n <c8y-form-group>\n <label class=\"control-label\">\n {{ 'Description' | translate }}\n </label>\n <div class=\"input-group input-group-editable\">\n <input\n #descriptionInput\n type=\"text\"\n class=\"form-control\"\n [ngModel]=\"(software$ | async)?.description\"\n #descriptionModel=\"ngModel\"\n placeholder=\"{{ 'e.g. Cloud connectivity software' | translate }}\"\n [ngStyle]=\"{ 'width.ch': (software$ | async)?.description?.length + 2 || 31 }\"\n />\n <span></span>\n <div class=\"input-group-btn\">\n <button\n class=\"btn btn-primary\"\n type=\"button\"\n title=\"{{ 'Save' | translate }}\"\n (click)=\"\n updateSoftware$.next({ description: descriptionInput.value });\n descriptionModel.reset()\n \"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n </div>\n </c8y-form-group>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-sm-6\">\n <c8y-form-group>\n <label class=\"control-label\">\n {{ 'Device type' | translate }}\n <button\n class=\"btn-help\"\n type=\"button\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{\n 'If the filter is set, the software will show up for installation only for devices of that type. If no filter is set, it will be available for all devices.'\n | translate\n }}\"\n triggers=\"focus\"\n container=\"body\"\n >\n <i c8yIcon=\"question-circle-o\"></i>\n </button>\n </label>\n <div class=\"input-group input-group-editable\">\n <input\n #deviceTypeInput\n type=\"text\"\n class=\"form-control\"\n [ngModel]=\"(software$ | async)?.c8y_Filter?.type\"\n #deviceTypeModel=\"ngModel\"\n placeholder=\"{{ 'e.g.' | translate }} c8y_Linux\"\n [ngStyle]=\"{ 'width.ch': (software$ | async)?.type?.length + 2 || 31 }\"\n />\n <span></span>\n <div class=\"input-group-btn\">\n <button\n class=\"btn btn-primary\"\n type=\"button\"\n title=\"{{ 'Save' | translate }}\"\n (click)=\"\n updateSoftware$.next({ c8y_Filter: { type: deviceTypeInput.value } });\n deviceTypeModel.reset()\n \"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n </div>\n </c8y-form-group>\n </div>\n <div class=\"col-sm-6\">\n <c8y-form-group>\n <label class=\"control-label\">\n {{ 'Software type' | translate }}\n </label>\n <div class=\"input-group input-group-editable\">\n <c8y-software-type\n [softwareTypeMO]=\"softwareTypeObject\"\n [style]=\"{ 'width.ch': softwareTypeObject?.softwareType?.length + 2 || 31 }\"\n (onSelectSoftware)=\"onSelectSoftwareType($event)\"\n ></c8y-software-type>\n <div class=\"input-group-btn\">\n <button\n class=\"btn btn-primary\"\n type=\"button\"\n title=\"{{ 'Save' | translate }}\"\n [ngClass]=\"isSoftwareTypeChanged ? '' : 'hidden'\"\n [disabled]=\"softwareTypeObject?.softwareType === ''\"\n (click)=\"\n updateSoftware$.next({ softwareType: softwareTypeObject.softwareType });\n softwareType.resetInput();\n isSoftwareTypeChanged = false\n \"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n </div>\n </c8y-form-group>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"inner-scroll\">\n <div class=\"card-header separator-top-bottom sticky-top bg-component\">\n <div\n class=\"card-title\"\n translate\n >\n Versions\n </div>\n </div>\n\n <div class=\"card-block p-t-0 p-b-24\">\n <c8y-ui-empty-state\n *ngIf=\"(baseVersions$ | async)?.data.length === 0\"\n [icon]=\"'c8y-tools'\"\n [title]=\"'No versions to display.' | translate\"\n [subtitle]=\"'Add a new version by clicking below.' | translate\"\n >\n <p>\n <button\n class=\"btn btn-primary\"\n type=\"button\"\n title=\"{{ 'Add software' | translate }}\"\n (click)=\"addBaseVersion()\"\n >\n {{ 'Add software' | translate }}\n </button>\n </p>\n </c8y-ui-empty-state>\n\n <c8y-list-group *ngIf=\"(baseVersions$ | async)?.data.length > 0\">\n <c8y-li\n *c8yFor=\"let baseVersion of baseVersions$ | async; let i = index; loadMore: 'auto'\"\n >\n <c8y-li-icon>\n <i c8yIcon=\"c8y-tools\"></i>\n </c8y-li-icon>\n\n <c8y-li-body class=\"content-flex-50\">\n <div class=\"col-4\">\n <p\n class=\"text-truncate-wrap\"\n title=\"{{ baseVersion.c8y_Software.version }}\"\n >\n {{ baseVersion.c8y_Software.version }}\n </p>\n </div>\n <div class=\"col-5\">\n <p class=\"text-truncate-wrap\">\n <span\n class=\"text-label-small m-r-8\"\n translate\n >\n File\n </span>\n <span title=\" {{ getBinaryName$(baseVersion.c8y_Software.url) | async }}\">\n <c8y-file-download\n url=\"{{ baseVersion.c8y_Software.url }}\"\n ></c8y-file-download>\n </span>\n </p>\n </div>\n <div class=\"col-2 d-flex a-i-start\">\n <span\n *ngIf=\"isLegacy$ | async\"\n class=\"label label-warning m-l-auto-sm\"\n >\n {{ 'Legacy' | translate }}\n </span>\n\n <div\n class=\"fit-h-20\"\n *ngIf=\"!(isLegacy$ | async)\"\n >\n <button\n class=\"btn btn-danger btn-xs visible-xs m-l-auto m-r-8 m-t-8\"\n type=\"button\"\n title=\"{{ 'Delete' | translate }}\"\n (click)=\"deleteBaseVersion(baseVersion)\"\n >\n <i c8yIcon=\"delete\"></i>\n {{ 'Delete' | translate }}\n </button>\n </div>\n </div>\n <div\n *ngIf=\"!(isLegacy$ | async)\"\n class=\"m-l-auto fit-h-20 hidden-xs\"\n >\n <button\n class=\"btn btn-dot text-danger showOnHover\"\n type=\"button\"\n data-cy=\"software-details-component--Delete-button\"\n [attr.aria-label]=\"'Delete' | translate\"\n tooltip=\"{{ 'Delete' | translate }}\"\n [delay]=\"500\"\n (click)=\"deleteBaseVersion(baseVersion)\"\n >\n <i c8yIcon=\"delete\"></i>\n </button>\n </div>\n </c8y-li-body>\n </c8y-li>\n </c8y-list-group>\n </div>\n </div>\n </div>\n </div>\n</div>\n","import { Injectable } from '@angular/core';\nimport { gettext, NavigatorNode, NavigatorNodeFactory } from '@c8y/ngx-components';\n\n@Injectable()\nexport class SoftwareRepositoryNavigationFactory implements NavigatorNodeFactory {\n node: NavigatorNode;\n\n constructor() {\n this.node = new NavigatorNode({\n label: gettext('Software repository'),\n path: 'software',\n icon: 'c8y-tools',\n parent: gettext('Management'),\n priority: 900\n });\n }\n\n get(): NavigatorNode {\n return this.node;\n }\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { SoftwareNameCellRendererComponent } from './columns/name.cell-renderer.component';\nimport { SoftwareTypeCellRendererComponent } from './columns/software-type.cell-renderer.component';\nimport { SoftwareTypeFilteringFormRendererComponent } from './columns/software-type.filtering-form-renderer.component';\nimport { DeviceTypeCellRendererComponent } from './columns/device-type.cell-renderer.component';\nimport { VersionsCellRendererComponent } from './columns/versions.cell-renderer.component';\nimport { SoftwareListComponent } from './software-list.component';\nimport { SoftwareDetailsComponent } from './software-details.component';\nimport { AddSoftwareModalComponent } from './add-software-modal.component';\nimport { CoreModule, FormsModule, hookNavigator, hookRoute } from '@c8y/ngx-components';\nimport { SoftwareRepositoryNavigationFactory } from './software-repository-navigation-factory';\nimport { PopoverModule } from 'ngx-bootstrap/popover';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport { RouterModule } from '@angular/router';\nimport { SharedRepositoryModule } from '@c8y/ngx-components/repository/shared';\nimport { DeviceGridModule } from '@c8y/ngx-components/device-grid';\n\n@NgModule({\n imports: [\n CommonModule,\n CoreModule,\n FormsModule,\n DeviceGridModule,\n PopoverModule,\n TooltipModule,\n RouterModule,\n SharedRepositoryModule\n ],\n declarations: [\n SoftwareListComponent,\n SoftwareDetailsComponent,\n AddSoftwareModalComponent,\n SoftwareNameCellRendererComponent,\n SoftwareTypeCellRendererComponent,\n SoftwareTypeFilteringFormRendererComponent,\n DeviceTypeCellRendererComponent,\n VersionsCellRendererComponent\n ]\n})\nexport class SoftwareRepositoryListModule {\n static forRoot(): ModuleWithProviders<SoftwareRepositoryListModule> {\n return {\n ngModule: SoftwareRepositoryListModule,\n providers: [\n hookNavigator(SoftwareRepositoryNavigationFactory),\n hookRoute([\n {\n path: 'software',\n component: SoftwareListComponent\n },\n {\n path: 'software/:id',\n component: SoftwareDetailsComponent\n }\n ])\n ]\n };\n }\n}\n","import { Injectable } from '@angular/core';\nimport { IResultList, Paging } from '@c8y/client';\nimport {\n AdvancedSoftwareService,\n DeviceSoftware,\n FilterCriteria\n} from '@c8y/ngx-components/repository/shared';\nimport { set } from 'lodash-es';\nimport { BehaviorSubject, Observable, Subject } from 'rxjs';\nimport { share, switchMap } from 'rxjs/operators';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class DeviceSoftwareService {\n /**\n * Indicates whether device software data is currently being loaded.\n */\n get loading$(): Observable<boolean> {\n return this.loadingSubject$.asObservable().pipe(share());\n }\n\n private reloadSubject$ = new BehaviorSubject<void>(null);\n private loadingSubject$ = new Subject<boolean>();\n\n constructor(private advancedSoftwareService: AdvancedSoftwareService) {}\n\n /**\n * Trigger device software data reload.\n */\n reload() {\n this.reloadSubject$.next();\n }\n\n /**\n * Retrieves the software list that is installed on a given device.\n *\n * @param deviceId ID of the device to retrieve software data for\n * @param filterCriteria Criteria that software items are filtered by.\n * @param legacySoftwareList If provided no data will be fetched from backend. The provided software list\n * will be filtered by the specified filter criteria.\n *\n * @returns The software items installed on the specified device filtered by the specified criteria.\n */\n getSoftwareList(\n deviceId,\n filterCriteria: FilterCriteria,\n legacySoftwareList?: DeviceSoftware[]\n ): Observable<IResultList<DeviceSoftware>> {\n this.loadingSubject$.next(true);\n\n return this.reloadSubject$.pipe(\n switchMap(() => {\n const softwareList$ = !!legacySoftwareList\n ? this.getLegacySoftwareList(legacySoftwareList, filterCriteria)\n : this.getAdvancedSoftwareList(deviceId, filterCriteria);\n return softwareList$.then(resultList => {\n this.loadingSubject$.next(false);\n return resultList;\n });\n }),\n share()\n );\n }\n\n private getAdvancedSoftwareList(\n deviceId,\n filterCriteria: FilterCriteria\n ): Promise<IResultList<DeviceSoftware>> {\n const queryFilter = {\n deviceId,\n currentPage: 1,\n pageSize: 50,\n withTotalPages: true\n };\n if (filterCriteria?.name) {\n set(queryFilter, 'name', `*${filterCriteria.name}*`);\n }\n if (filterCriteria?.softwareType) {\n set(queryFilter, 'type', `${filterCriteria.softwareType}`);\n }\n return this.advancedSoftwareService.list(queryFilter) as unknown as Promise<\n IResultList<DeviceSoftware>\n >;\n }\n\n private getLegacySoftwareList(\n legacySoftwareList: DeviceSoftware[],\n filterCriteria: FilterCriteria\n ): Promise<IResultList<DeviceSoftware>> {\n const data = filterCriteria\n ? legacySoftwareList.filter(item => {\n let match = true;\n if (filterCriteria?.name) {\n match = match && item.name?.includes(filterCriteria.name);\n }\n if (filterCriteria?.softwareType) {\n match = match && item.softwareType === filterCriteria.softwareType;\n }\n\n return match;\n })\n : legacySoftwareList;\n return Promise.resolve({\n data,\n res: null,\n paging: {\n totalPages: data.length\n } as Paging<DeviceSoftware>\n });\n }\n}\n","import {\n AfterContentInit,\n Component,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output\n} from '@angular/core';\nimport { IManagedObject, IResultList } from '@c8y/client';\nimport { gettext } from '@c8y/ngx-components';\nimport {\n DeviceSoftware,\n DeviceSoftwareChange,\n FilterCriteria,\n PRODUCT_EXPERIENCE_REPOSITORY_SHARED\n} from '@c8y/ngx-components/repository/shared';\nimport { filter, get } from 'lodash-es';\nimport { BehaviorSubject, combineLatest, Observable, of, Subject } from 'rxjs';\nimport {\n debounceTime,\n distinctUntilChanged,\n map,\n share,\n switchMap,\n takeUntil,\n tap\n} from 'rxjs/operators';\nimport { DeviceSoftwareService } from './device-software.service';\n\n@Component({\n selector: 'c8y-device-software-list',\n templateUrl: 'device-software-list.component.html'\n})\nexport class DeviceSoftwareListComponent implements OnInit, AfterContentInit, OnDestroy {\n PRODUCT_EXPERIENCE = PRODUCT_EXPERIENCE_REPOSITORY_SHARED;\n @Input() set softwareList(softwareList: DeviceSoftware[]) {\n if (softwareList !== null) {\n this.legacySoftwareList$.next(softwareList);\n }\n }\n @Input() device: IManagedObject;\n @Input() deviceSoftwareChanges: DeviceSoftwareChange[];\n @Input() filterCriteria$: Observable<FilterCriteria> = of(null);\n @Output() update = new EventEmitter<DeviceSoftware>();\n @Output() remove = new EventEmitter<DeviceSoftware>();\n @Output() onListEmpty: EventEmitter<boolean> = new EventEmitter();\n softwareItems$: Observable<IResultList<DeviceSoftware>>;\n showUpdate: boolean;\n showRemove: boolean;\n emptyList: boolean;\n noSearchResults: boolean;\n alreadyInstalledMessage = gettext('This software is already installed on the device');\n supportsSoftwareOperations = false;\n\n private readonly operationTypes = ['c8y_SoftwareUpdate', 'c8y_SoftwareList', 'c8y_Software'];\n\n private legacySoftwareList$: BehaviorSubject<DeviceSoftware[]> = new BehaviorSubject([]);\n private destroyed$ = new Subject<void>();\n\n constructor(private deviceSoftwareService: DeviceSoftwareService) {}\n\n ngOnInit(): void {\n this.softwareItems$ = combineLatest([\n this.filterCriteria$.pipe(debounceTime(300), distinctUntilChanged()),\n this.legacySoftwareList$\n ]).pipe(\n switchMap(([filterCriteria, legacySoftwareList]) =>\n this.deviceSoftwareService\n .getSoftwareList(this.device?.id, filterCriteria, legacySoftwareList)\n .pipe(map(resultList => ({ resultList, filterCriteria })))\n ),\n tap(({ resultList, filterCriteria }) => {\n this.notifyListEmpty(!resultList?.paging?.totalPages && !filterCriteria);\n this.noSearchResults = !resultList?.paging?.totalPages && !!filterCriteria;\n }),\n map(({ resultList }) => resultList),\n share(),\n takeUntil(this.destroyed$)\n );\n const supportedOperations = get(this.device, 'c8y_SupportedOperations', []);\n this.supportsSoftwareOperations = this.operationTypes.some(\n operationType => supportedOperations.indexOf(operationType) > -1\n );\n }\n\n ngAfterContentInit() {\n this.showUpdate = this.update.observers.length > 0;\n this.showRemove = this.remove.observers.length > 0;\n }\n\n isSoftwareGoingToBeChanged(software: DeviceSoftware): boolean {\n const relevantChanges = filter(this.deviceSoftwareChanges, software);\n return relevantChanges.length > 0;\n }\n\n ngOnDestroy(): void {\n this.destroyed$.next();\n this.destroyed$.complete();\n }\n\n private notifyListEmpty(isEmpty: boolean): void {\n this.emptyList = isEmpty;\n this.onListEmpty.emit(isEmpty);\n }\n}\n","<c8y-list-group class=\"no-border-2nd-last\">\n <c8y-li\n [ngClass]=\"{ disabled: isSoftwareGoingToBeChanged(software) }\"\n *c8yFor=\"let software of softwareItems$\"\n >\n <!-- SOFTWARE ICON -->\n <c8y-li-icon>\n <i c8yIcon=\"c8y-tools\"></i>\n </c8y-li-icon>\n\n <c8y-li-body class=\"content-flex-20\">\n <div title=\"{{ software.name }}\" class=\"col-9\">\n <p class=\"d-flex\">\n <!-- SOFTWARE NAME -->\n <span class=\"text-truncate\">\n {{ software.name }}\n </span>\n <!-- SOFTWARE TYPE-->\n <span class=\"text-truncate\">\n <span class=\"label label-primary m-l-8\">{{ software.softwareType }}</span>\n </span>\n </p>\n <!-- SOFTWARE VERSION -->\n <p class=\"d-flex a-i-center\">\n <span class=\"text-truncate text-label-small m-r-4\" translate>Version</span>\n <span class=\"text-truncate m-r-4\" title=\"{{ software.version }}\">\n {{ software.version }}\n </span>\n <i\n *ngIf=\"software.installed\"\n c8yIcon=\"warning\"\n class=\"text-warning a-s-center\"\n [tooltip]=\"\n alreadyInstalledMessage\n | translate: { name: software.name, version: software.version }\n \"\n container=\"body\"\n placement=\"top\"\n [delay]=\"500\"\n ></i>\n </p>\n </div>\n\n <div\n *ngIf=\"supportsSoftwareOperations && (showUpdate || showRemove)\"\n class=\"col-3 text-right m-0 flex-grow d-flex a-i-center\"\n >\n <!-- UPDATE SOFTWARE -->\n <button\n class=\"btn btn-default btn-xs m-l-auto m-r-4\"\n type=\"button\"\n title=\"{{ 'Update`software,verb`' | translate }}\"\n *ngIf=\"showUpdate && !isSoftwareGoingToBeChanged(software)\"\n (click)=\"update.emit(software)\"\n c8yProductExperience\n [actionName]=\"PRODUCT_EXPERIENCE.SOFTWARE.EVENTS.DEVICE_TAB\"\n [actionData]=\"{\n component: PRODUCT_EXPERIENCE.SOFTWARE.COMPONENTS.DEVICE_SOFTWARE_LIST,\n action: PRODUCT_EXPERIENCE.SOFTWARE.ACTIONS.OPEN_UPDATE_SOFTWARE\n }\"\n >\n {{ 'Update`software,verb`' | translate }}\n </button>\n\n <!-- REMOVE SOFTWARE -->\n <button\n class=\"btn btn-dot btn-dot--danger m-l-4\"\n type=\"button\"\n [attr.aria-label]=\"'Remove`software,verb`' | translate\"\n tooltip=\"{{ 'Remove`software,verb`' | translate }}\"\n placement=\"bottom\"\n container=\"body\"\n [delay]=\"500\"\n c8yProductExperience\n [actionName]=\"PRODUCT_EXPERIENCE.SOFTWARE.EVENTS.DEVICE_TAB\"\n [actionData]=\"{\n component: PRODUCT_EXPERIENCE.SOFTWARE.COMPONENTS.DEVICE_SOFTWARE_LIST,\n action: PRODUCT_EXPERIENCE.SOFTWARE.ACTIONS.DELETE_SOFTWARE\n }\"\n *ngIf=\"showRemove && !isSoftwareGoingToBeChanged(software)\"\n (click)=\"remove.emit(software)\"\n >\n <i c8yIcon=\"minus-circle\"></i>\n </button>\n </div>\n </c8y-li-body>\n </c8y-li>\n</c8y-list-group>\n<!-- NO SEARCH RESULTS STATE -->\n<div class=\"card-block\" *ngIf=\"noSearchResults || emptyList\">\n <ng-content *ngIf=\"emptyList\" select=\".c8y-empty-state:not(.c8y-no-results-state)\"></ng-content>\n <ng-content *ngIf=\"noSearchResults\" select=\".c8y-no-results-state\"></ng-content>\n</div>\n","import { Component, EventEmitter, Input, OnChanges, Output, SimpleChanges } from '@angular/core';\nimport { gettext } from '@c8y/ngx-components';\nimport {\n DeviceSoftwareChange,\n PRODUCT_EXPERIENCE_REPOSITORY_SHARED\n} from '@c8y/ngx-components/repository/shared';\nimport { BehaviorSubject } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\n@Component({\n selector: 'c8y-device-software-changes',\n templateUrl: 'device-software-changes.component.html'\n})\nexport class DeviceSoftwareChangesComponent implements OnChanges {\n PRODUCT_EXPERIENCE = PRODUCT_EXPERIENCE_REPOSITORY_SHARED;\n @Input() changes: DeviceSoftwareChange[];\n @Input() changesInProgress: boolean;\n @Output() clear: EventEmitter<void> = new EventEmitter();\n @Output() drop: EventEmitter<DeviceSoftwareChange> = new EventEmitter();\n @Output() apply: EventEmitter<void> = new EventEmitter();\n @Output() hideSoftwareChanges = new EventEmitter<void>();\n\n get applyButtonLabel() {\n return this.changesInProgress ? gettext('Applying changes…') : gettext('Apply changes');\n }\n\n changes$ = new BehaviorSubject<DeviceSoftwareChange[]>([]);\n installations$ = this.changes$.pipe(\n map(changes => {\n return changes.filter(change => change.action === 'install');\n })\n );\n\n removals$ = this.changes$.pipe(\n map(changes => {\n return changes.filter(change => change.action === 'delete');\n })\n );\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes.changes) {\n this.changes$.next(changes.changes.currentValue);\n }\n }\n}\n","<div class=\"inner-scroll d-flex d-col\">\n <div class=\"card-header separator sticky-top visible-sm visible-xs\">\n <button\n class=\"btn btn-dot text-primary\"\n [title]=\"'Back' | translate\"\n type=\"button\"\n (click)=\"hideSoftwareChanges.emit()\"\n >\n <i c8yIcon=\"chevron-left\"></i>\n <span translate>Back</span>\n </button>\n </div>\n <div class=\"card-header separator large-padding sticky-top\">\n <div class=\"card-title\" translate>Software changes</div>\n </div>\n <div id=\"software-changes-list\" class=\"flex-grow inner-scroll\">\n <div class=\"card-block large-padding\" *ngIf=\"(changes$ | async).length === 0; else changesList\">\n <div class=\"c8y-empty-state\">\n <div class=\"h1 c8y-icon c8y-icon-device-control c8y-icon-duocolor\"></div>\n <p>\n <strong translate>No software changes.</strong>\n <br />\n <small translate>Selected actions will be displayed here.</small>\n </p>\n </div>\n </div>\n\n <ng-template #changesList>\n <fieldset\n class=\"card-block p-t-0 p-b-0\"\n *ngIf=\"(installations$ | async).length > 0\"\n [disabled]=\"changesInProgress\"\n >\n <div class=\"form-block legend\" translate>Installations`software`</div>\n <c8y-device-software-list\n [softwareList]=\"installations$ | async\"\n (remove)=\"drop.emit($event)\"\n ></c8y-device-software-list>\n </fieldset>\n\n <fieldset\n class=\"card-block p-t-0 p-b-0\"\n *ngIf=\"(removals$ | async).length > 0\"\n [disabled]=\"changesInProgress\"\n >\n <div class=\"form-block legend\" translate>Removals`software`</div>\n <c8y-device-software-list\n [softwareList]=\"removals$ | async\"\n (remove)=\"drop.emit($event)\"\n ></c8y-device-software-list>\n </fieldset>\n </ng-template>\n </div>\n <div\n class=\"card-footer separator large-padding sticky-bottom\"\n *ngIf=\"(changes$ | async).length > 0\"\n >\n <button\n class=\"btn btn-default\"\n title=\"{{ 'Clear changes' | translate }}\"\n type=\"button\"\n (click)=\"clear.emit()\"\n [disabled]=\"changesInProgress\"\n translate\n c8yProductExperience\n [actionName]=\"PRODUCT_EXPERIENCE.SOFTWARE.EVENTS.DEVICE_TAB\"\n [actionData]=\"{\n component: PRODUCT_EXPERIENCE.SOFTWARE.COMPONENTS.DEVICE_SOFTWARE_CHANGES,\n action: PRODUCT_EXPERIENCE.SOFTWARE.ACTIONS.CLEAR_SOFTWARE_CHANGES\n }\"\n >\n Clear`changes`\n </button>\n <button\n class=\"btn btn-primary\"\n title=\"{{ applyButtonLabel | translate }}\"\n type=\"button\"\n [ngClass]=\"{ 'btn-pending': changesInProgress }\"\n [disabled]=\"changesInProgress\"\n (click)=\"apply.emit(); hideSoftwareChanges.emit()\"\n c8yProductExperience\n [actionName]=\"PRODUCT_EXPERIENCE.SOFTWARE.EVENTS.DEVICE_TAB\"\n [actionData]=\"{\n component: PRODUCT_EXPERIENCE.SOFTWARE.COMPONENTS.DEVICE_SOFTWARE_CHANGES,\n action: PRODUCT_EXPERIENCE.SOFTWARE.ACTIONS.APPLY_SOFTWARE_CHANGES\n }\"\n >\n {{ applyButtonLabel | translate }}\n </button>\n </div>\n</div>\n","import {\n Component,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n TemplateRef,\n ViewChild\n} from '@angular/core';\nimport { IManagedObject, IOperation, QueriesUtil } from '@c8y/client';\nimport {\n gettext,\n ISelectModalObject,\n IUpdateItemEvent,\n ModalSelectionMode\n} from '@c8y/ngx-components';\nimport {\n DeviceSoftware,\n DeviceSoftwareChange,\n FilterCriteria,\n PRODUCT_EXPERIENCE_REPOSITORY_SHARED,\n RepositorySelectModalComponent,\n RepositoryService,\n RepositoryType\n} from '@c8y/ngx-components/repository/shared';\nimport { get } from 'lodash-es';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { BehaviorSubject, combineLatest, from, Observable, of, pipe, Subject } from 'rxjs';\nimport {\n distinctUntilChanged,\n filter,\n map,\n mergeMap,\n shareReplay,\n switchMap,\n takeUntil,\n tap\n} from 'rxjs/operators';\n\n@Component({\n selector: 'c8y-installed-software',\n templateUrl: 'installed-software.component.html'\n})\nexport class InstalledSoftwareComponent implements OnDestroy, OnInit {\n PRODUCT_EXPERIENCE = PRODUCT_EXPERIENCE_REPOSITORY_SHARED;\n @Input() device: IManagedObject;\n @Input() softwareList: DeviceSoftware[];\n @Input() deviceSoftwareChanges: DeviceSoftwareChange[];\n @Input() deviceSoftwareChangesOperation: IOperation;\n @Input() deviceSoftwareChangesInProgress: boolean;\n @Input() typesQuery: object;\n @Output() changes = new EventEmitter<DeviceSoftwareChange[]>();\n @Output() showSoftwareChanges = new EventEmitter<void>();\n\n @ViewChild('alreadyInstalledWarning', { static: true })\n alreadyInstalledWarningTemplate: TemplateRef<any>;\n alreadyInstalledMessage = gettext(\n '{{ name }} (v. {{ version }}) is already installed on this device'\n );\n @ViewChild('loading', { static: true })\n loadingTemplate: TemplateRef<any>;\n\n @ViewChild('softwareType', { static: true })\n softwareTypeTemplate: TemplateRef<any>;\n\n showFilter = false;\n supportsSoftwareOperations = false;\n textFilter$: BehaviorSubject<string> = new BehaviorSubject('');\n softwareTypeFilter$: BehaviorSubject<string> = new BehaviorSubject('');\n filterCriteria$: Observable<FilterCriteria>;\n\n private readonly operationTypes = ['c8y_SoftwareUpdate', 'c8y_SoftwareList', 'c8y_Software'];\n\n private queriesUtil: QueriesUtil;\n private modalSearch: (filterCriteria: FilterCriteria) => void;\n private destroyed$: Subject<void> = new Subject();\n\n constructor(\n private repository: RepositoryService,\n private bsModal: BsModalService\n ) {\n this.filterCriteria$ = combineLatest([this.textFilter$, this.softwareTypeFilter$]).pipe(\n map(([textFilter, softwareTypeFilter]) => ({\n name: textFilter,\n softwareType: softwareTypeFilter\n })),\n map(filterCriteria =>\n !filterCriteria.name && !filterCriteria.softwareType ? null : filterCriteria\n )\n );\n this.queriesUtil = new QueriesUtil();\n }\n\n ngOnInit(): void {\n const supportedOperations = get(this.device, 'c8y_SupportedOperations', []);\n this.supportsSoftwareOperations = this.operationTypes.some(\n operationType => supportedOperations.indexOf(operationType) > -1\n );\n }\n\n installSoftware() {\n const { resultEmitter, choiceEmitter, updateInstallableList$ } =\n this.displaySoftwareSelectModal({\n title: gettext('Install software'),\n subTitle: gettext('Available softwares matching the device type'),\n labels: { ok: gettext('Install') },\n noItemsMessage: gettext('No matching software available.'),\n showAdditionalFilter: true,\n additionalFilterTemplate: this.softwareTypeTemplate,\n repositoryEntriesWithVersions$: of([]),\n repositoryEntriesWithVersionsFn$: modal =>\n this.getInstallableSoftwareListWithVersions$(modal.content.searchTerm)\n });\n\n resultEmitter.pipe(takeUntil(this.destroyed$)).subscribe(softwareToInstall => {\n this.emitSoftwareInstall(softwareToInstall);\n this.showSoftwareChanges.emit();\n });\n\n choiceEmitter\n .pipe(\n this.isSoftwareInstalledOnDevicePipe(updateInstallableList$),\n takeUntil(this.destroyed$)\n )\n .subscribe(({ item }) =>\n updateInstallableList$.next({\n object: item,\n template: this.alreadyInstalledWarningTemplate,\n mapper: object => {\n object.installed = true;\n return object;\n }\n })\n );\n }\n\n updateSoftware(softwareToUpdate) {\n const { resultEmitter, choiceEmitter, updateInstallableList$ } =\n this.displaySoftwareSelectModal({\n title: gettext('Update software'),\n subTitle: gettext('Select one of the available software versions'),\n labels: { ok: gettext('Update') },\n noItemsMessage: gettext('No other software versions available.'),\n showFilter: false,\n repositoryEntriesWithVersions$: this.getSingleSoftwareWithVersions$(softwareToUpdate)\n });\n\n resultEmitter.pipe(takeUntil(this.destroyed$)).subscribe(softwareToInstall => {\n this.emitSoftwareInstall(softwareToInstall);\n this.showSoftwareChanges.emit();\n });\n\n choiceEmitter\n .pipe(\n this.isSoftwareInstalledOnDevicePipe(updateInstallableList$),\n takeUntil(this.destroyed$)\n )\n .subscribe(({ item }) =>\n updateInstallableList$.next({\n object: item,\n template: this.alreadyInstalledWarningTemplate,\n mapper: object => {\n object.installed = true;\n return object;\n }\n })\n );\n }\n\n removeSoftware(softwareToRemove) {\n this.emitSoftwareRemoval([softwareToRemove]);\n }\n\n getInstallableSoftwareListWithVersions$(searchTerm$: BehaviorSubject<FilterCriteria>) {\n const installedSoftwareNames = (this.softwareList || []).map(s => s.name);\n return searchTerm$.pipe(\n distinctUntilChanged(),\n switchMap(searchTerm =>\n this.repository.listRepositoryEntries(RepositoryType.SOFTWARE, {\n query: searchTerm.softwareType\n ? this.queriesUtil.addAndFilter(this.typesQuery, {\n softwareType: searchTerm.softwareType\n })\n : this.typesQuery,\n partialName: searchTerm?.name,\n params: { pageSize: 100 }\n })\n ),\n map(({ data }) => data),\n map(softwareList => {\n return softwareList.filter(software => {\n return !installedSoftwareNames.includes(software.name);\n });\n }),\n map(softwareList => this.attachVersions(softwareList)),\n shareReplay(1)\n );\n }\n\n getSingleSoftwareWithVersions$(software: DeviceSoftware) {\n return from(\n this.repository.listRepositoryEntries(RepositoryType.SOFTWARE, {\n query: { name: software.name }\n })\n ).pipe(\n map(({ data }) => data),\n map(softwareList => this.attachVersions(softwareList)),\n shareReplay(1)\n );\n }\n\n attachVersions(softwareList: IManagedObject[]) {\n softwareList.forEach(software => {\n software.versions = this.repository.listBaseVersions(software);\n });\n return softwareList;\n }\n\n displaySoftwareSelectModal(initialStateOverrides) {\n const initialState = {\n repositoryType: RepositoryType.SOFTWARE,\n mode: ModalSelectionMode.MULTI,\n icon: 'c8y-tools',\n disableSelected: false,\n selected: this.softwareList,\n hideEmptyItems: true,\n ...initialStateOverrides\n };\n const modal = this.bsModal.show(RepositorySelectModalComponent, {\n ignoreBackdropClick: true,\n class: 'modal-sm',\n ariaDescribedby: 'modal-body',\n ariaLabelledBy: 'modal-title',\n initialState\n });\n\n if (initialStateOverrides.repositoryEntriesWithVersionsFn$) {\n modal.content.repositoryEntriesWithVersions$ =\n initialStateOverrides.repositoryEntriesWithVersionsFn$(modal);\n }\n\n this.modalSearch = modal.content.search.bind(modal.content);\n\n modal.content.load.next();\n return {\n resultEmitter: modal.content.resultEmitter,\n choiceEmitter: modal.content.onChoiceUpdated,\n updateInstallableList$: modal.content.updateInstallableList$\n };\n }\n\n search(filterCriteria: FilterCriteria) {\n if (this.modalSearch) {\n this.modalSearch(filterCriteria);\n }\n }\n\n emitSoftwareInstall(items: DeviceSoftware[]) {\n this.changes.emit(\n items.map(item => {\n return { ...item, action: 'install' };\n })\n );\n }\n\n emitSoftwareRemoval(items: DeviceSoftware[]) {\n this.changes.emit(\n items.map(item => {\n return { ...item, action: 'delete' };\n })\n );\n }\n\n ngOnDestroy(): void {\n this.destroyed$.next();\n this.destroyed$.complete();\n }\n\n private isSoftwareInstalledOnDevicePipe(updateInstallableList$: Subject<IUpdateItemEvent<any>>) {\n return pipe(\n tap((item: ISelectModalObject) =>\n updateInstallableList$.next({ object: item, template: this.loadingTemplate })\n ),\n map(item => ({\n item,\n software: (\n (item.options || []).find(option => option.obj.id === (item as any).selectedId) || {}\n ).obj\n })),\n mergeMap(({ item, software }) =>\n from(\n this.repository.isSoftwareInstalledOnDevice(this.device.id, software as DeviceSoftware)\n ).pipe(map(installed => ({ item, installed })))\n ),\n tap(({ item }) => updateInstallableList$.next({ object: item })),\n filter(({ installed }) => !!installed)\n );\n }\n}\n","<div class=\"d-flex d-col flex-grow\">\n <div class=\"card-header large-padding separator sticky-top\">\n <div\n class=\"card-title\"\n translate\n >\n Installed software\n </div>\n </div>\n <div class=\"flex-grow\">\n <fieldset\n class=\"card-block large-padding bg-level-2 p-0\"\n id=\"operation-block\"\n *ngIf=\"deviceSoftwareChangesOperation\"\n >\n <c8y-operation-details [operation]=\"deviceSoftwareChangesOperation\"></c8y-operation-details>\n </fieldset>\n <fieldset\n class=\"card-block large-padding overflow-visible separator-bottom\"\n *ngIf=\"showFilter\"\n >\n <div class=\"row\">\n <div class=\"col-xs-6\">\n <div class=\"input-group input-group-search\">\n <label\n class=\"sr-only\"\n for=\"filter\"\n >\n {{ 'Filter…' | translate }}\n </label>\n <input\n class=\"form-control\"\n title=\"{{ 'Filter…' | translate }}\"\n id=\"filter\"\n placeholder=\"{{ 'Filter…' | translate }}\"\n type=\"search\"\n [ngModel]=\"textFilter$ | async\"\n (ngModelChange)=\"textFilter$.next($event)\"\n />\n <span class=\"input-group-addon\">\n <i\n c8yIcon=\"search\"\n *ngIf=\"(textFilter$ | async).length === 0\"\n ></i>\n <i\n class=\"text-muted\"\n c8yIcon=\"times\"\n *ngIf=\"(textFilter$ | async).length > 0\"\n (click)=\"textFilter$.next('')\"\n ></i>\n </span>\n <span\n class=\"sr-only\"\n for=\"search\"\n translate\n >\n Filter…\n </span>\n </div>\n </div>\n <div class=\"col-xs-6\">\n <c8y-software-type\n [required]=\"false\"\n [emitResultsOnly]=\"true\"\n [showBtnInNotFoundMessage]=\"false\"\n [allowFreeEntries]=\"false\"\n [placeholder]=\"'Filter by software type…' | translate\"\n [showClearSelectionOption]=\"true\"\n [presetSoftwareTypes]=\"device.c8y_SupportedSoftwareTypes\"\n (onSelectSoftware)=\"softwareTypeFilter$.next($event?.softwareType)\"\n ></c8y-software-type>\n </div>\n </div>\n </fieldset>\n\n <fieldset\n class=\"flex-grow inner-scroll\"\n id=\"software-list\"\n [disabled]=\"deviceSoftwareChangesInProgress\"\n >\n <!-- NOT EMPTY STATE -->\n <c8y-device-software-list\n class=\"d-block p-l-16 p-r-16\"\n container=\"body\"\n [device]=\"device\"\n [filterCriteria$]=\"filterCriteria$\"\n [softwareList]=\"softwareList\"\n [deviceSoftwareChanges]=\"deviceSoftwareChanges\"\n (update)=\"updateSoftware($event)\"\n (remove)=\"removeSoftware($event)\"\n (onListEmpty)=\"showFilter = !$event\"\n >\n <!-- EMPTY STATE -->\n <div class=\"c8y-empty-state text-center\">\n <div class=\"h1 c8y-icon c8y-icon-tools c8y-icon-duocolor\"></div>\n <p>\n <strong translate>No software installed.</strong>\n <br />\n <small translate>Click below to install software into this device.</small>\n </p>\n </div>\n <!-- NO SEARCH RESULTS STATE -->\n <div class=\"c8y-empty-state c8y-no-results-state text-center\">\n <div class=\"h1 c8y-icon c8y-icon-tools c8y-icon-duocolor\"></div>\n <p>\n <strong translate>No software matches your filter criteria.</strong>\n <br />\n <small translate>Try changing your search criteria.</small>\n </p>\n </div>\n </c8y-device-software-list>\n </fieldset>\n </div>\n <!-- INSTALL SOFTWARE-->\n <div\n class=\"card-footer large-padding separator sticky-bottom d-flex j-c-between bg-level-0\"\n [ngClass]=\"{ 'visible-sm visible-xs': !supportsSoftwareOperations }\"\n >\n <button\n class=\"btn btn-default\"\n title=\"{{ 'Install software' | translate }}\"\n *ngIf=\"supportsSoftwareOperations\"\n (click)=\"installSoftware()\"\n [disabled]=\"deviceSoftwareChangesInProgress\"\n c8yProductExperience\n [actionName]=\"PRODUCT_EXPERIENCE.SOFTWARE.EVENTS.DEVICE_TAB\"\n [actionData]=\"{\n component: PRODUCT_EXPERIENCE.SOFTWARE.COMPONENTS.DEVICE_SOFTWARE_LIST,\n action: PRODUCT_EXPERIENCE.SOFTWARE.ACTIONS.OPEN_INSTALL_SOFTWARE\n }\"\n >\n <i c8yIcon=\"plus-circle\"></i>\n {{ 'Install software' | translate }}\n </button>\n <button\n class=\"btn btn-clean text-primary visible-sm visible-xs\"\n [title]=\"'Show &quot;Software changes&quot;' | translate\"\n (click)=\"showSoftwareChanges.emit()\"\n >\n <span translate>Show \"Software changes\"</span>\n <i c8yIcon=\"chevron-right\"></i>\n </button>\n </div>\n</div>\n\n<ng-template\n #alreadyInstalledWarning\n let-item\n let-option=\"option\"\n>\n <i\n class=\"text-warning a-s-center\"\n c8yIcon=\"warning\"\n [tooltip]=\"\n alreadyInstalledMessage\n | translate : { name: item.body[0].value, version: option.body[0].value }\n \"\n ></i>\n</ng-template>\n\n<ng-template #loading>\n <div class=\"p-relative d-flex m-l-auto\">\n <i\n class=\"icon-spin\"\n c8yIcon=\"circle-o-notch\"\n ></i>\n </div>\n</ng-template>\n\n<ng-template #softwareType>\n <c8y-software-type\n additionalFilter\n [required]=\"false\"\n [placeholder]=\"'Filter by software type…' | translate\"\n (onSelectSoftware)=\"search({ softwareType: $event?.softwareType })\"\n [emitResultsOnly]=\"true\"\n [showBtnInNotFoundMessage]=\"false\"\n [allowFreeEntries]=\"false\"\n [showClearSelectionOption]=\"true\"\n [presetSoftwareTypes]=\"device.c8y_SupportedSoftwareTypes\"\n ></c8y-software-type>\n</ng-template>\n","import { Component, OnInit } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { IManagedObject, InventoryService, IOperation, OperationStatus } from '@c8y/client';\nimport {\n AdvancedSoftwareService,\n DeviceSoftware,\n DeviceSoftwareChange,\n RepositoryService,\n RepositoryType\n} from '@c8y/ngx-components/repository/shared';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { filter, map, switchMap, take } from 'rxjs/operators';\nimport { DeviceSoftwareService } from './device-software.service';\n\n@Component({\n selector: 'c8y-software-device-tab',\n templateUrl: 'software-device-tab.component.html'\n})\nexport class SoftwareDeviceTabComponent implements OnInit {\n deviceId: string | number = this.route.snapshot.parent.data.contextData.id;\n device$ = new BehaviorSubject<IManagedObject>(this.route.snapshot.parent.data.contextData);\n typesQuery$: Observable<object> = this.device$.pipe(\n map(device => {\n const deviceTypeQuery = this.repository.getDeviceTypeQuery(RepositoryType.SOFTWARE, device);\n return this.repository.getSoftwareTypeQuery(device, deviceTypeQuery);\n })\n );\n list$: Observable<DeviceSoftware[]> = this.device$.pipe(\n switchMap(device =>\n this.advancedSoftwareService\n .isASMAvailable()\n .then(isASMAvailable => ({ isASMAvailable, device }))\n ),\n map(({ isASMAvailable, device }) =>\n // with ASM available software items will be retrieved directly in the\n // device-software-list component\n isASMAvailable ? undefined : this.repository.getDeviceSoftwareList(device)\n )\n );\n changes$ = new BehaviorSubject<DeviceSoftwareChange[]>([]);\n changesOperation$ = new BehaviorSubject<IOperation>(null);\n changesInProgress$: Observable<boolean> = this.changesOperation$.pipe(\n map(operation => this.isInProgress(operation))\n );\n reloading = false;\n showSoftwareChanges = false;\n\n constructor(\n private route: ActivatedRoute,\n private repository: RepositoryService,\n private inventory: InventoryService,\n private deviceSoftwareService: DeviceSoftwareService,\n private advancedSoftwareService: AdvancedSoftwareService\n ) {}\n\n async ngOnInit() {\n await this.loadDevice();\n await this.loadOperation();\n }\n\n addChanges(requestedChanges: DeviceSoftwareChange[]) {\n let stagedChanges = [...this.changes$.value];\n requestedChanges.forEach(requestedChange => {\n const alreadyStaged = stagedChanges.some(stagedChange =>\n this.areSameChanges(stagedChange, requestedChange)\n );\n if (!alreadyStaged) {\n stagedChanges = [...stagedChanges, requestedChange];\n }\n });\n this.changes$.next(stagedChanges);\n }\n\n dropChange(changeToBeDropped: DeviceSoftwareChange) {\n let stagedChanges = [...this.changes$.value];\n stagedChanges = stagedChanges.filter(\n stagedChange => !this.areSameChanges(stagedChange, changeToBeDropped)\n );\n this.changes$.next(stagedChanges);\n }\n\n areSameChanges(change1: DeviceSoftwareChange, change2: DeviceSoftwareChange) {\n return (\n change1.name === change2.name &&\n change1.version === change2.version &&\n change1.action === change2.action\n );\n }\n\n clearChanges() {\n this.changes$.next([]);\n }\n\n async loadDevice() {\n this.reloading = true;\n this.deviceSoftwareService.reload();\n const device = await Promise.all([\n this.deviceSoftwareService.loading$\n .pipe(\n filter(loading => !loading),\n take(1)\n )\n .toPromise(),\n this.inventory.detail(this.deviceId, { withChildren: false }).then(result => result.data)\n ]).then(([_, device]) => device);\n this.device$.next(device);\n this.reloading = false;\n }\n\n async applyChanges() {\n const operation = await this.repository.createSoftwareUpdateOperation(\n this.device$.value,\n this.changes$.value\n );\n await this.trackOperation(operation);\n }\n\n private async loadOperation() {\n const operation = await this.repository.getLastSoftwareUpdateOperation(this.deviceId);\n await this.trackOperation(operation);\n }\n\n private async trackOperation(operation: IOperation) {\n this.changesOperation$.next(operation);\n\n if (this.isInProgress(operation)) {\n await this.displayChangesFromOperation(operation);\n this.repository.observeOperation(operation).subscribe(\n operationUpdate => {\n this.changesOperation$.next(operationUpdate);\n if (operationUpdate.status === OperationStatus.SUCCESSFUL) {\n this.clearChanges();\n this.loadDevice();\n }\n },\n operationUpdate => {\n this.changesOperation$.next(operationUpdate);\n }\n );\n }\n }\n\n private async displayChangesFromOperation(operation: IOperation) {\n const changes = await this.repository.getDeviceSoftwareChangesFromOperation(\n operation,\n this.device$.value\n );\n this.changes$.next(changes);\n }\n\n private isInProgress(operation: IOperation) {\n return (\n operation && [OperationStatus.PENDING, OperationStatus.EXECUTING].includes(operation.status)\n );\n }\n}\n","<c8y-action-bar-item [placement]=\"'right'\">\n <button class=\"btn btn-link\" title=\"{{ 'Reload' | translate }}\" (click)=\"loadDevice()\">\n <i c8yIcon=\"refresh\" [ngClass]=\"{ 'icon-spin': reloading }\"></i>\n {{ 'Reload' | translate }}\n </button>\n</c8y-action-bar-item>\n\n<div class=\"card split-view--7-5 m-b-0\">\n <c8y-installed-software\n class=\"split-view__list\"\n [device]=\"device$ | async\"\n [typesQuery]=\"typesQuery$ | async\"\n [softwareList]=\"list$ | async\"\n [deviceSoftwareChanges]=\"changes$ | async\"\n [deviceSoftwareChangesOperation]=\"changesOperation$ | async\"\n [deviceSoftwareChangesInProgress]=\"changesInProgress$ | async\"\n (changes)=\"addChanges($event)\"\n (showSoftwareChanges)=\"showSoftwareChanges = true\"\n ></c8y-installed-software>\n <c8y-device-software-changes\n class=\"bg-level-1 split-view__detail\"\n [ngClass]=\"{ 'split-view__detail--selected': showSoftwareChanges }\"\n [changes]=\"changes$ | async\"\n [changesInProgress]=\"changesInProgress$ | async\"\n (clear)=\"clearChanges()\"\n (drop)=\"dropChange($event)\"\n (apply)=\"applyChanges()\"\n (hideSoftwareChanges)=\"showSoftwareChanges = false\"\n ></c8y-device-software-changes>\n</div>\n","import { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot } from '@angular/router';\nimport { IManagedObject } from '@c8y/client';\nimport { get, has } from 'lodash-es';\n\n@Injectable()\nexport class SoftwareDeviceTabGuard {\n private readonly operations = ['c8y_SoftwareUpdate', 'c8y_SoftwareList', 'c8y_Software'];\n\n canActivate(route: ActivatedRouteSnapshot) {\n const device = get(route, 'data.contextData') || get(route, 'parent.data.contextData');\n return (\n this.isAnyOperationSupported(device) ||\n has(device, 'c8y_Software') ||\n has(device, 'c8y_SoftwareList') ||\n has(device, 'c8y_SupportedSoftwareTypes')\n );\n }\n\n private isAnyOperationSupported(device: IManagedObject) {\n const supportedOperations = device?.c8y_SupportedOperations || [];\n return this.operations.some(operation => supportedOperations.indexOf(operation) >= 0);\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { ModuleWithProviders, NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { CoreModule, gettext, hookRoute, ViewContext } from '@c8y/ngx-components';\nimport { OperationDetailsModule } from '@c8y/ngx-components/operations/operation-details';\nimport { SharedRepositoryModule } from '@c8y/ngx-components/repository/shared';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport { DeviceSoftwareChangesComponent } from './device-software-changes.component';\nimport { DeviceSoftwareListComponent } from './device-software-list.component';\nimport { InstalledSoftwareComponent } from './installed-software.component';\nimport { SoftwareDeviceTabComponent } from './software-device-tab.component';\nimport { SoftwareDeviceTabGuard } from './software-device-tab.guard';\n\n@NgModule({\n imports: [\n CommonModule,\n CoreModule,\n RouterModule,\n SharedRepositoryModule,\n OperationDetailsModule,\n TooltipModule\n ],\n declarations: [\n SoftwareDeviceTabComponent,\n InstalledSoftwareComponent,\n DeviceSoftwareListComponent,\n DeviceSoftwareChangesComponent\n ]\n})\nexport class SoftwareRepositoryDeviceTabModule {\n static forRoot(): ModuleWithProviders<SoftwareRepositoryDeviceTabModule> {\n return {\n ngModule: SoftwareRepositoryDeviceTabModule,\n providers: [\n SoftwareDeviceTabGuard,\n hookRoute({\n context: ViewContext.Device,\n path: 'software',\n component: SoftwareDeviceTabComponent,\n label: gettext('Software'),\n icon: 'c8y-tools',\n priority: 499,\n canActivate: [SoftwareDeviceTabGuard]\n })\n ]\n };\n }\n}\n","import { NgModule } from '@angular/core';\nimport { SoftwareRepositoryDeviceTabModule } from './device-tab/software-repository-device-tab.module';\nimport { SoftwareRepositoryListModule } from './list/software-repository-list.module';\n\n@NgModule({\n imports: [SoftwareRepositoryDeviceTabModule.forRoot(), SoftwareRepositoryListModule.forRoot()]\n})\nexport class SoftwareRepositoryModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i3","i4","i1","i2","i5","i6","i7","i8","i9","i1.DeviceSoftwareService","i3.DeviceSoftwareListComponent","filter","i8.DeviceSoftwareListComponent","i4.DeviceSoftwareService","i7.InstalledSoftwareComponent","i8.DeviceSoftwareChangesComponent","i1.SoftwareRepositoryDeviceTabModule","i2.SoftwareRepositoryListModule"],"mappings":"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"}
1
+ {"version":3,"file":"c8y-ngx-components-repository-software.mjs","sources":["../../repository/software/list/add-software-modal.component.ts","../../repository/software/list/add-software-modal.component.html","../../repository/software/list/columns/description.grid-column.ts","../../repository/software/list/columns/device-type.cell-renderer.component.ts","../../repository/software/list/columns/device-type.cell-renderer.component.html","../../repository/software/list/columns/device-type.grid-column.ts","../../repository/software/list/columns/name.cell-renderer.component.ts","../../repository/software/list/columns/name.grid-column.ts","../../repository/software/list/columns/software-type.cell-renderer.component.ts","../../repository/software/list/columns/software-type.cell-renderer.component.html","../../repository/software/list/columns/software-type.filtering-form-renderer.component.ts","../../repository/software/list/columns/software-type.filtering-form-renderer.component.html","../../repository/software/list/columns/software-type.grid-column.ts","../../repository/software/list/columns/versions.cell-renderer.component.ts","../../repository/software/list/columns/versions.cell-renderer.component.html","../../repository/software/list/columns/versions.grid-column.ts","../../repository/software/list/software-list.component.ts","../../repository/software/list/software-list.component.html","../../repository/software/list/software-details.component.ts","../../repository/software/list/software-details.component.html","../../repository/software/list/software-repository-navigation-factory.ts","../../repository/software/list/software-repository-list.module.ts","../../repository/software/device-tab/device-software.service.ts","../../repository/software/device-tab/device-software-list.component.ts","../../repository/software/device-tab/device-software-list.component.html","../../repository/software/device-tab/device-software-changes.component.ts","../../repository/software/device-tab/device-software-changes.component.html","../../repository/software/device-tab/installed-software.component.ts","../../repository/software/device-tab/installed-software.component.html","../../repository/software/device-tab/software-device-tab.component.ts","../../repository/software/device-tab/software-device-tab.component.html","../../repository/software/device-tab/software-device-tab.guard.ts","../../repository/software/device-tab/software-repository-device-tab.module.ts","../../repository/software/software-repository.module.ts","../../repository/software/c8y-ngx-components-repository-software.ts"],"sourcesContent":["import { Component, EventEmitter, Output, ViewChild } from '@angular/core';\nimport { NgForm } from '@angular/forms';\nimport { IManagedObject } from '@c8y/client';\nimport { AlertService, gettext, PickedFiles } from '@c8y/ngx-components';\nimport {\n ModalModel,\n PRODUCT_EXPERIENCE_REPOSITORY_SHARED,\n RepositoryCategory,\n RepositoryService,\n RepositoryType\n} from '@c8y/ngx-components/repository/shared';\nimport { assign, get, isUndefined } from 'lodash-es';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { BehaviorSubject, from, Subscription } from 'rxjs';\nimport { debounceTime, distinctUntilChanged, switchMap, tap } from 'rxjs/operators';\n\n@Component({\n selector: 'c8y-add-software-software-modal',\n templateUrl: 'add-software-modal.component.html'\n})\nexport class AddSoftwareModalComponent {\n PRODUCT_EXPERIENCE = PRODUCT_EXPERIENCE_REPOSITORY_SHARED;\n @ViewChild('softwareForm', { static: false }) form: NgForm;\n @Output() saved: EventEmitter<RepositoryCategory> = new EventEmitter<RepositoryCategory>();\n onInput: BehaviorSubject<string> = new BehaviorSubject<string>('');\n model: ModalModel = {\n selected: undefined,\n version: undefined,\n description: undefined,\n deviceType: undefined,\n softwareType: undefined,\n binary: {\n file: undefined,\n url: undefined\n }\n };\n\n softwaresResult;\n saving = false;\n softwarePreselected = false;\n textForSoftwareUrlPopover: string =\n gettext(`Path for binaries can vary depending on device agent implementation, for example:\n /software/binaries/software1.bin\n https://software/binary/123\n ftp://software/binary/123.tar.gz\n `);\n private inputSubscription$: Subscription;\n\n constructor(\n private modal: BsModalRef,\n private repositoryService: RepositoryService,\n private alert: AlertService\n ) {}\n\n ngOnInit() {\n this.setInitialState();\n this.loadSoftwares();\n }\n\n setInitialState() {\n if (this.model.selected) {\n this.softwarePreselected = true;\n }\n }\n\n loadSoftwares() {\n this.inputSubscription$ = this.onInput\n .pipe(\n tap(() => {\n if (!this.softwarePreselected) {\n this.model.description = null;\n if (this.form) {\n this.form.form.get('description').reset();\n }\n }\n }),\n debounceTime(300),\n distinctUntilChanged(),\n switchMap(searchStr => this.getSoftwareResult(searchStr))\n )\n .subscribe(result => {\n this.softwaresResult = result;\n });\n }\n\n getSoftwareResult(searchStr: string) {\n return from(\n this.repositoryService.listRepositoryEntries(RepositoryType.SOFTWARE, {\n partialName: searchStr,\n skipLegacy: true\n })\n );\n }\n\n async save() {\n this.saving = true;\n this.repositoryService\n .create(this.model, RepositoryType.SOFTWARE)\n .then(savedSoftware => {\n this.successMsg();\n this.saving = false;\n this.saved.next(savedSoftware);\n this.cancel();\n })\n .catch(e => {\n this.saving = false;\n this.saved.error(e);\n this.cancel();\n });\n }\n\n successMsg() {\n const msg = gettext('Software added.');\n this.alert.success(msg);\n }\n\n cancel() {\n this.modal.hide();\n this.saved.complete();\n }\n\n ngOnDestroy() {\n this.inputSubscription$.unsubscribe();\n }\n\n onFile(dropped: PickedFiles) {\n if (!isUndefined(dropped.url)) {\n this.model.binary = {\n url: dropped.url\n };\n return;\n } else if (dropped.droppedFiles) {\n this.model.binary = {\n file: dropped.droppedFiles[0].file\n };\n return;\n } else {\n this.model.binary = {\n file: undefined,\n url: undefined\n };\n }\n }\n\n onSoftwareSelect(software: IManagedObject) {\n assign(this.model, {\n selected: software,\n description: software.description,\n deviceType: get(software, 'c8y_Filter.type'),\n softwareType: software\n });\n }\n}\n","<div class=\"viewport-modal\">\n <div class=\"modal-header dialog-header\">\n <i [c8yIcon]=\"'c8y-tools'\"></i>\n <div class=\"modal-title\" translate id=\"addSoftwareModalTitle\">Add software</div>\n </div>\n <div class=\"p-16 text-center separator-bottom\" *ngIf=\"!softwarePreselected\">\n <p class=\"text-medium text-16\" translate>Select or create new software</p>\n </div>\n <form\n class=\"d-contents\"\n autocomplete=\"off\"\n #softwareForm=\"ngForm\"\n (ngSubmit)=\"softwareForm.form.valid && save()\"\n >\n <div class=\"modal-inner-scroll\">\n <div class=\"modal-body\" id=\"addSoftwareModalDescription\">\n <div [hidden]=\"softwarePreselected\">\n <c8y-form-group>\n <label for=\"softwareName\" translate>Software</label>\n <c8y-typeahead\n [(ngModel)]=\"model.selected\"\n name=\"softwareName\"\n placeholder=\"{{ 'Select or enter' | translate }}\"\n (onSearch)=\"onInput.next($event)\"\n [required]=\"true\"\n >\n <c8y-li\n *c8yFor=\"\n let software of softwaresResult;\n loadMore: 'auto';\n notFound: notFoundTemplate\n \"\n class=\"p-l-8 p-r-8 c8y-list__item--link\"\n (click)=\"onSoftwareSelect(software)\"\n [active]=\"model.selected === software\"\n >\n <c8y-highlight\n [text]=\"software.name || '--'\"\n [pattern]=\"onInput | async\"\n ></c8y-highlight>\n </c8y-li>\n <ng-template #notFoundTemplate>\n <c8y-li class=\"bg-level-2 p-8\" *ngIf=\"(onInput | async)?.length > 0\">\n <span translate>No match found.</span>\n <button\n class=\"btn btn-primary btn-xs m-l-8\"\n type=\"button\"\n title=\"{{ 'Add new`software`' | translate }}\"\n >\n {{ 'Add new`software`' | translate }}\n </button>\n </c8y-li>\n </ng-template>\n </c8y-typeahead>\n </c8y-form-group>\n\n <c8y-form-group>\n <label for=\"softwareDescription\" translate>Description</label>\n <input\n id=\"softwareDescription\"\n class=\"form-control\"\n autocomplete=\"off\"\n name=\"description\"\n [(ngModel)]=\"model.description\"\n placeholder=\"{{ 'e.g. Cloud connectivity software' | translate }}\"\n [disabled]=\"model.selected?.id\"\n [required]=\"true\"\n />\n </c8y-form-group>\n\n <c8y-form-group>\n <label class=\"control-label\" for=\"softwareDeviceTypeFilter\">\n {{ 'Device type filter' | translate }}\n <button\n class=\"btn-help\"\n type=\"button\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{\n 'If the filter is set, the software will show up for installation only for devices of that type. If no filter is set, it will be available for all devices.'\n | translate\n }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n ></button>\n </label>\n <input\n id=\"softwareDeviceTypeFilter\"\n class=\"form-control\"\n name=\"softwareDeviceTypeFilter\"\n [(ngModel)]=\"model.deviceType\"\n placeholder=\"{{ 'e.g.' | translate }} c8y_Linux\"\n [disabled]=\"model.selected?.id\"\n />\n </c8y-form-group>\n\n <c8y-form-group>\n <label for=\"softwareType\" translate>Software type</label>\n <c8y-software-type\n name=\"softwareType\"\n [(ngModel)]=\"model.softwareType\"\n [disabled]=\"model.selected?.id\"\n ></c8y-software-type>\n </c8y-form-group>\n </div>\n\n <c8y-form-group>\n <label for=\"softwareVersion\" translate>Version</label>\n <input\n id=\"softwareVersion\"\n class=\"form-control\"\n autocomplete=\"off\"\n name=\"version\"\n [(ngModel)]=\"model.version\"\n placeholder=\"{{ 'e.g.' | translate }} 1.0.0\"\n [required]=\"true\"\n />\n </c8y-form-group>\n\n <c8y-form-group>\n <div class=\"legend form-block m-t-40\" translate>Software file</div>\n <c8y-file-picker\n [maxAllowedFiles]=\"1\"\n (onFilesPicked)=\"onFile($event)\"\n [fileUrlPopover]=\"textForSoftwareUrlPopover\"\n ></c8y-file-picker>\n </c8y-form-group>\n </div>\n </div>\n <div class=\"modal-footer\">\n <button\n class=\"btn btn-default\"\n type=\"button\"\n title=\"{{ 'Cancel' | translate }}\"\n (click)=\"cancel()\"\n [disabled]=\"saving\"\n >\n {{ 'Cancel' | translate }}\n </button>\n\n <button\n class=\"btn btn-primary\"\n type=\"submit\"\n title=\"{{ 'Add software' | translate }}\"\n [ngClass]=\"{ 'btn-pending': saving }\"\n [disabled]=\"\n !softwareForm.form.valid ||\n softwareForm.form.pristine ||\n saving ||\n (!model.binary?.url && !model.binary?.file)\n \"\n c8yProductExperience\n [actionName]=\"PRODUCT_EXPERIENCE.SOFTWARE.EVENTS.REPOSITORY\"\n [actionData]=\"{\n component: PRODUCT_EXPERIENCE.SOFTWARE.COMPONENTS.ADD_SOFTWARE_MODAL,\n result:\n softwarePreselected || model.selected?.id\n ? PRODUCT_EXPERIENCE.SOFTWARE.RESULTS.ADD_SOFTWARE_VERSION\n : PRODUCT_EXPERIENCE.SOFTWARE.RESULTS.ADD_SOFTWARE\n }\"\n >\n {{ 'Add software' | translate }}\n </button>\n </div>\n </form>\n</div>\n","import {\n BaseColumn,\n ColumnConfig,\n getBasicInputArrayFormFieldConfig,\n gettext\n} from '@c8y/ngx-components';\n\nexport class DescriptionGridColumn extends BaseColumn {\n constructor(initialColumnConfig?: ColumnConfig) {\n super(initialColumnConfig);\n this.name = 'description';\n this.path = 'description';\n this.header = gettext('Description');\n\n this.filterable = true;\n this.filteringConfig = {\n fields: getBasicInputArrayFormFieldConfig({\n key: 'descriptions',\n label: gettext('Filter software by description'),\n addText: gettext('Add next`description`'),\n tooltip: gettext('Use * as a wildcard character'),\n placeholder: gettext('Cloud connectivity software')\n }),\n getFilter(model: any): any {\n const filter: any = {};\n if (model.descriptions.length) {\n filter.description = { __in: model.descriptions };\n }\n return filter;\n }\n };\n\n this.sortable = true;\n this.sortingConfig = {\n pathSortingConfigs: [{ path: this.path }]\n };\n }\n}\n","import { Component } from '@angular/core';\nimport { CellRendererContext } from '@c8y/ngx-components';\n\n@Component({\n templateUrl: './device-type.cell-renderer.component.html'\n})\nexport class DeviceTypeCellRendererComponent {\n constructor(public context: CellRendererContext) {}\n}\n","<span *ngIf=\"context.item.c8y_Filter?.type; else emptyText\">\n {{ context.item.c8y_Filter?.type }}\n</span>\n<ng-template #emptyText>\n <small class=\"text-muted\">\n <em translate>Undefined`device type`</em>\n </small>\n</ng-template>\n","import {\n BaseColumn,\n ColumnConfig,\n getBasicInputArrayFormFieldConfig,\n gettext\n} from '@c8y/ngx-components';\nimport { DeviceTypeCellRendererComponent } from './device-type.cell-renderer.component';\n\nexport class DeviceTypeGridColumn extends BaseColumn {\n constructor(initialColumnConfig?: ColumnConfig) {\n super(initialColumnConfig);\n this.name = 'deviceType';\n this.path = 'c8y_Filter.type';\n this.header = gettext('Device type');\n this.cellRendererComponent = DeviceTypeCellRendererComponent;\n\n this.filterable = true;\n\n this.filteringConfig = {\n fields: [\n ...getBasicInputArrayFormFieldConfig({\n key: 'types',\n label: gettext('Filter software by device type'),\n addText: gettext('Add next`type`'),\n tooltip: gettext('Use * as a wildcard character'),\n placeholder: 'c8y_Linux',\n optional: true\n }),\n {\n key: 'noDeviceType',\n type: 'switch',\n templateOptions: {\n label: gettext('No device type')\n }\n }\n ],\n getFilter(model: any): any {\n const filter: any = { __or: {} };\n if (model.types?.length) {\n filter.__or = {\n 'c8y_Filter.type': { __in: model.types }\n };\n }\n if (model.noDeviceType) {\n filter.__or = {\n ...filter.__or,\n __or: {\n __not: { __has: 'c8y_Filter.type' },\n 'c8y_Filter.type': ''\n }\n };\n }\n return filter;\n }\n };\n\n this.sortable = true;\n this.sortingConfig = {\n pathSortingConfigs: [{ path: this.path }]\n };\n }\n}\n","import { Component } from '@angular/core';\nimport { CellRendererContext } from '@c8y/ngx-components';\n\n@Component({\n template: `\n <a class=\"interact\" [title]=\"context.item.name\" [routerLink]=\"[context.item.id]\">\n {{ context.item.name }}\n </a>\n `\n})\nexport class SoftwareNameCellRendererComponent {\n constructor(public context: CellRendererContext) {}\n}\n","import {\n BaseColumn,\n ColumnConfig,\n getBasicInputArrayFormFieldConfig,\n gettext\n} from '@c8y/ngx-components';\nimport { SoftwareNameCellRendererComponent } from './name.cell-renderer.component';\n\nexport class SoftwareNameGridColumn extends BaseColumn {\n constructor(initialColumnConfig?: ColumnConfig) {\n super(initialColumnConfig);\n this.name = 'name';\n this.path = 'name';\n this.header = gettext('Name');\n this.cellRendererComponent = SoftwareNameCellRendererComponent;\n\n this.filterable = true;\n this.filteringConfig = {\n fields: getBasicInputArrayFormFieldConfig({\n key: 'names',\n label: gettext('Filter software by name'),\n addText: gettext('Add next`name`'),\n tooltip: gettext('Use * as a wildcard character'),\n placeholder: gettext('Cloud connectivity')\n }),\n getFilter(model: any): any {\n const filter: any = {};\n if (model.names.length) {\n filter.name = { __in: model.names };\n }\n return filter;\n }\n };\n\n this.sortable = true;\n this.sortingConfig = {\n pathSortingConfigs: [{ path: this.path }]\n };\n }\n}\n","import { Component } from '@angular/core';\nimport { CellRendererContext } from '@c8y/ngx-components';\n\n@Component({\n templateUrl: './software-type.cell-renderer.component.html'\n})\nexport class SoftwareTypeCellRendererComponent {\n constructor(public context: CellRendererContext) {}\n}\n","<span *ngIf=\"!!context?.item?.softwareType; else emptyText\" class=\"label label-info\">{{\n context.item.softwareType\n}}</span>\n<ng-template #emptyText>\n <small class=\"text-muted\">\n <em translate>Undefined`software type`</em>\n </small>\n</ng-template>\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n HostListener,\n OnInit,\n ViewChild\n} from '@angular/core';\nimport { IManagedObject, IResultList, QueriesUtil } from '@c8y/client';\nimport {\n Column,\n FilteringFormRendererContext,\n ForOfFilterPipe,\n gettext,\n TypeaheadComponent\n} from '@c8y/ngx-components';\nimport { RepositoryService, RepositoryType } from '@c8y/ngx-components/repository/shared';\nimport { cloneDeep, uniqBy } from 'lodash-es';\nimport { BehaviorSubject, NEVER, Observable, pipe } from 'rxjs';\nimport { debounceTime, map, switchMap, tap } from 'rxjs/operators';\n\n@Component({\n templateUrl: './software-type.filtering-form-renderer.component.html',\n changeDetection: ChangeDetectionStrategy.Default\n})\nexport class SoftwareTypeFilteringFormRendererComponent implements OnInit, AfterViewInit {\n selectedType: IManagedObject;\n softwareWithType$: Observable<IResultList<IManagedObject>> = NEVER;\n search$: BehaviorSubject<string> = new BehaviorSubject(null);\n filterPipe: ForOfFilterPipe<IManagedObject> = pipe(tap());\n typeaheadPlaceholder = gettext('Start typing to search, for example, {{ example }}');\n @ViewChild(TypeaheadComponent, { static: false }) typeahead: TypeaheadComponent;\n private queriesUtil: QueriesUtil = new QueriesUtil();\n private softwareTypes: Set<string> = new Set();\n\n constructor(\n public context: FilteringFormRendererContext,\n public changeDetectorRef: ChangeDetectorRef,\n private repositoryService: RepositoryService,\n private elementRef: ElementRef\n ) {\n this.softwareWithType$ = this.search$.pipe(\n debounceTime(300),\n tap(() => this.softwareTypes.clear()),\n switchMap((searchString: string) => {\n let query = this.queriesUtil.prependOrderbys({}, [{ softwareType: 1 }]);\n const filter = !!searchString\n ? {\n softwareType: {\n __eq: `*${searchString}*`\n }\n }\n : {\n __has: 'softwareType'\n };\n query = this.queriesUtil.addAndFilter(query, filter);\n\n return this.repositoryService.listRepositoryEntries(RepositoryType.SOFTWARE, {\n skipDefaultOrder: true,\n query,\n params: {\n pageSize: 200\n }\n });\n })\n );\n\n this.filterPipe = pipe(\n map(\n this.removeDuplicatesBySoftwareType.bind(\n this\n ) as SoftwareTypeFilteringFormRendererComponent['removeDuplicatesBySoftwareType']\n ),\n tap(() => this.changeDetectorRef.detectChanges())\n );\n }\n\n @HostListener('keyup.enter', ['$event']) onEnterKeyUp(event: KeyboardEvent) {\n event.stopPropagation();\n this.applyFilter();\n }\n @HostListener('keydown.escape', ['$event']) onEscapeKeyDown(event: KeyboardEvent) {\n event.stopPropagation();\n this.context.resetFilter();\n }\n\n ngOnInit(): void {\n const column: Column = this.context.property;\n this.selectedType = cloneDeep(column.externalFilterQuery || {});\n }\n\n ngAfterViewInit(): void {\n this.typeahead?.searchControl?.nativeElement?.focus();\n try {\n this.elementRef.nativeElement.parentElement.parentElement.style.overflow = 'visible';\n } catch (ex) {\n // intentionally empty\n }\n }\n\n applyFilter() {\n this.context.applyFilter({\n externalFilterQuery: this.selectedType\n });\n }\n\n private removeDuplicatesBySoftwareType(list: IManagedObject[]): IManagedObject[] {\n const uniqueBySoftwareType: IManagedObject[] = uniqBy(list, 'softwareType').filter(\n (sw: IManagedObject) => !this.softwareTypes.has(sw.softwareType)\n );\n uniqueBySoftwareType.forEach((sw: IManagedObject) => this.softwareTypes.add(sw.softwareType));\n return uniqueBySoftwareType;\n }\n}\n","<c8y-form-group>\n <label translate>Filter by software type</label>\n <c8y-typeahead\n [(ngModel)]=\"selectedType\"\n name=\"softwareType\"\n placeholder=\"{{ typeaheadPlaceholder | translate: { example: 'yum' } }}\"\n displayProperty=\"softwareType\"\n (onSearch)=\"search$.next($event)\"\n >\n <c8y-li\n *c8yFor=\"let software of softwareWithType$; pipe: filterPipe; loadMore: 'auto'\"\n class=\"p-l-8 p-r-8 c8y-list__item--link\"\n (click)=\"\n selectedType = software; typeahead.dropdown.hide(); changeDetectorRef.detectChanges()\n \"\n [active]=\"selectedType?.softwareType === software?.softwareType\"\n >\n <c8y-highlight\n [text]=\"software?.softwareType || '--'\"\n [pattern]=\"search$.value\"\n ></c8y-highlight>\n </c8y-li>\n </c8y-typeahead>\n</c8y-form-group>\n\n<div class=\"data-grid__dropdown__footer d-flex separator-top\">\n <button\n class=\"btn btn-default btn-sm m-r-8 flex-grow\"\n (click)=\"context.resetFilter()\"\n title=\"{{ 'Reset' | translate }}\"\n translate\n >\n Reset\n </button>\n\n <button\n class=\"btn btn-primary btn-sm flex-grow\"\n (click)=\"applyFilter()\"\n title=\"{{ 'Apply' | translate }}\"\n translate\n >\n Apply\n </button>\n</div>\n","import { BaseColumn, ColumnConfig, gettext } from '@c8y/ngx-components';\nimport { SoftwareTypeCellRendererComponent } from './software-type.cell-renderer.component';\nimport { SoftwareTypeFilteringFormRendererComponent } from './software-type.filtering-form-renderer.component';\n\nexport class SoftwareTypeGridColumn extends BaseColumn {\n constructor(initialColumnConfig?: ColumnConfig) {\n super(initialColumnConfig);\n this.name = 'type';\n this.path = 'softwareType';\n this.header = gettext('Software type');\n this.cellRendererComponent = SoftwareTypeCellRendererComponent;\n\n this.filterable = true;\n this.filteringFormRendererComponent = SoftwareTypeFilteringFormRendererComponent;\n this.filteringConfig = {\n getFilter(model) {\n const filter: any = {};\n if (model.softwareType) {\n filter.softwareType = { __eq: model.softwareType };\n }\n return filter;\n }\n };\n\n this.sortable = true;\n this.sortingConfig = {\n pathSortingConfigs: [{ path: this.path }]\n };\n }\n}\n","import { Component } from '@angular/core';\nimport { IManagedObject } from '@c8y/client';\nimport { CellRendererContext, memoize } from '@c8y/ngx-components';\nimport { property } from 'lodash-es';\nimport { Observable } from 'rxjs';\nimport { shareReplay } from 'rxjs/operators';\nimport { RepositoryService } from '@c8y/ngx-components/repository/shared';\n\n@Component({\n templateUrl: './versions.cell-renderer.component.html'\n})\nexport class VersionsCellRendererComponent {\n isLegacy = this.repositoryService.isLegacyEntry.bind(this.repositoryService);\n software;\n constructor(public context: CellRendererContext, private repositoryService: RepositoryService) {\n this.software = context.item;\n }\n\n @memoize(property('id'))\n getBaseVersionsCount$(software: IManagedObject): Observable<number | string> {\n return this.repositoryService.getBaseVersionsCount$(software).pipe(shareReplay(1));\n }\n}\n","<span class=\"label label-warning m-l-auto-sm\" *ngIf=\"isLegacy(software)\">\n <span translate> Legacy </span>\n</span>\n<span *ngIf=\"!isLegacy(software)\">\n <span *ngIf=\"(getBaseVersionsCount$(software) | async) === null\">\n <span class=\"badge badge-info m-l-auto-sm\">\n <i class=\"icon-spin\" c8yIcon=\"circle-o-notch\"></i>\n </span>\n </span>\n <span *ngIf=\"(getBaseVersionsCount$(software) | async) !== null\">\n <span class=\"badge badge-info m-l-auto-sm\">\n {{ getBaseVersionsCount$(software) | async }}\n </span>\n </span>\n</span>\n","import { BaseColumn, ColumnConfig, gettext } from '@c8y/ngx-components';\nimport { VersionsCellRendererComponent } from './versions.cell-renderer.component';\n\nexport class VersionsGridColumn extends BaseColumn {\n constructor(initialColumnConfig?: ColumnConfig) {\n super(initialColumnConfig);\n this.name = 'versions';\n this.header = gettext('Versions');\n this.cellRendererComponent = VersionsCellRendererComponent;\n this.sortable = false;\n }\n}\n","import { Component, EventEmitter, OnInit } from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { IManagedObject, IResultList } from '@c8y/client';\nimport {\n ActionControl,\n AlertService,\n BuiltInActionType,\n Column,\n DataGridService,\n DataSourceModifier,\n gettext,\n ModalService,\n ServerSideDataCallback,\n ServerSideDataResult,\n Status\n} from '@c8y/ngx-components';\nimport {\n PRODUCT_EXPERIENCE_REPOSITORY_SHARED,\n RepositoryService,\n RepositoryType\n} from '@c8y/ngx-components/repository/shared';\nimport { TranslateService } from '@ngx-translate/core';\nimport { BsModalService, ModalOptions } from 'ngx-bootstrap/modal';\nimport { AddSoftwareModalComponent } from './add-software-modal.component';\nimport { DescriptionGridColumn } from './columns/description.grid-column';\nimport { DeviceTypeGridColumn } from './columns/device-type.grid-column';\nimport { SoftwareNameGridColumn } from './columns/name.grid-column';\nimport { SoftwareTypeGridColumn } from './columns/software-type.grid-column';\nimport { VersionsGridColumn } from './columns/versions.grid-column';\n\n@Component({\n selector: 'c8y-software-list',\n templateUrl: 'software-list.component.html'\n})\nexport class SoftwareListComponent implements OnInit {\n sizeRequest: Promise<number>;\n sizeRequestDone = false;\n refresh$: EventEmitter<void> = new EventEmitter();\n\n columns: Column[] = [\n new SoftwareNameGridColumn(),\n new DescriptionGridColumn(),\n new DeviceTypeGridColumn(),\n new SoftwareTypeGridColumn(),\n new VersionsGridColumn()\n ];\n actionControls: ActionControl[] = [];\n serverSideDataCallback: ServerSideDataCallback;\n pagination = {\n pageSize: 50,\n currentPage: 1\n };\n\n constructor(\n private repositoryService: RepositoryService,\n private gridService: DataGridService,\n private modalService: ModalService,\n private bsModalService: BsModalService,\n private translateService: TranslateService,\n private alertService: AlertService,\n private router: Router,\n private activatedRoute: ActivatedRoute\n ) {\n this.serverSideDataCallback = this.onDataSourceModifier.bind(this);\n this.sizeRequest = this.repositoryService\n .listRepositoryEntries(RepositoryType.SOFTWARE, {\n skipDefaultOrder: true,\n params: { pageSize: 1 }\n })\n .then(response => {\n this.sizeRequestDone = true;\n return response?.paging?.totalPages;\n });\n }\n\n ngOnInit(): void {\n this.actionControls.push({\n type: BuiltInActionType.Edit,\n callback: this.editSoftware.bind(this)\n });\n this.actionControls.push({\n type: BuiltInActionType.Delete,\n callback: this.deleteSoftware.bind(this)\n });\n }\n\n async onDataSourceModifier(\n dataSourceModifier: DataSourceModifier\n ): Promise<ServerSideDataResult> {\n const dataRequest: Promise<IResultList<IManagedObject>> =\n this.repositoryService.listRepositoryEntries(RepositoryType.SOFTWARE, {\n query: this.gridService.getQueryObj(dataSourceModifier.columns),\n skipDefaultOrder: true,\n params: {\n pageSize: dataSourceModifier.pagination.pageSize,\n currentPage: dataSourceModifier.pagination.currentPage\n }\n });\n\n const filtererdSizeRequest: Promise<number> = this.repositoryService\n .listRepositoryEntries(RepositoryType.SOFTWARE, {\n skipDefaultOrder: true,\n query: this.gridService.getQueryObj(dataSourceModifier.columns),\n params: { pageSize: 1 }\n })\n .then(response => response?.paging?.totalPages);\n\n const [dataResponse, size, filteredSize] = await Promise.all([\n dataRequest,\n this.sizeRequest,\n filtererdSizeRequest\n ]);\n\n const { res, data, paging } = dataResponse;\n\n const serverSideDataResult: ServerSideDataResult = {\n res,\n data,\n paging,\n filteredSize,\n size\n };\n\n return serverSideDataResult;\n }\n\n addSoftware() {\n const config: ModalOptions<AddSoftwareModalComponent> = {\n class: 'modal-sm',\n ariaDescribedby: 'addSoftwareModalDescription',\n ariaLabelledBy: 'addSoftwareModalTitle',\n ignoreBackdropClick: true,\n keyboard: false\n };\n const modalRef = this.bsModalService.show(AddSoftwareModalComponent, config);\n modalRef.content.saved.subscribe(savedSoftware => this.editSoftware(savedSoftware));\n }\n\n editSoftware(software: Partial<IManagedObject>) {\n this.router.navigate([software.id], { relativeTo: this.activatedRoute });\n }\n\n async deleteSoftware(software: IManagedObject) {\n try {\n const title = gettext('Delete software');\n const body = `\n ${this.translateService.instant(\n gettext('You are about to delete software \"{{ name }}\" with all its versions.'),\n { name: software.name }\n )}\n ${this.translateService.instant(gettext('This operation is irreversible.'))}\n ${this.translateService.instant(gettext('Do you want to proceed?'))}\n `;\n const labels = {\n ok: gettext('Delete')\n };\n await this.modalService.confirm(\n title,\n body,\n Status.DANGER,\n labels,\n {},\n { eventName: PRODUCT_EXPERIENCE_REPOSITORY_SHARED.SOFTWARE.EVENTS.REPOSITORY }\n );\n await this.repositoryService.delete(software);\n this.alertService.success(gettext('Software deleted.'));\n this.refresh$.next();\n } catch (ex) {\n // only if not cancel from modal\n if (ex) {\n this.alertService.addServerFailure(ex);\n }\n }\n }\n\n trackByName(_index, column: Column): string {\n return column.name;\n }\n}\n","<c8y-title>\n {{ 'Software repository' | translate }}\n</c8y-title>\n<c8y-breadcrumb>\n <c8y-breadcrumb-item\n icon=\"c8y-management\"\n label=\"{{ 'Management' | translate }}\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n icon=\"c8y-tools\"\n label=\"{{ 'Software repository' | translate }}\"\n ></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<c8y-action-bar-item [placement]=\"'right'\">\n <button\n class=\"btn btn-link\"\n title=\"{{ 'Add software' | translate }}\"\n type=\"button\"\n (click)=\"addSoftware()\"\n >\n <i c8yIcon=\"plus-circle\"></i>\n {{ 'Add software' | translate }}\n </button>\n</c8y-action-bar-item>\n\n<c8y-help\n src=\"/docs/device-management-application/managing-device-data/#managing-software\"\n></c8y-help>\n\n<div class=\"content-fullpage border-top border-bottom\">\n <c8y-data-grid\n [title]=\"'Software' | translate\"\n [refresh]=\"refresh$\"\n [pagination]=\"pagination\"\n [columns]=\"columns\"\n [actionControls]=\"actionControls\"\n [infiniteScroll]=\"'auto'\"\n [serverSideDataCallback]=\"serverSideDataCallback\"\n >\n <div class=\"c8y-empty-state\">\n <ng-container *ngIf=\"!sizeRequestDone\">\n <c8y-loading></c8y-loading>\n </ng-container>\n <ng-container *ngIf=\"sizeRequestDone\">\n <ng-container *ngIf=\"(sizeRequest | async) === 0; else noResults\">\n <div class=\"text-center\">\n <h1\n class=\"c8y-icon-duocolor\"\n c8yIcon=\"c8y-tools\"\n ></h1>\n <h3 translate>No software to display.</h3>\n <p translate>Add a new software by clicking below.</p>\n <p>\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Add software' | translate }}\"\n type=\"button\"\n (click)=\"addSoftware()\"\n >\n {{ 'Add software' | translate }}\n </button>\n </p>\n </div>\n </ng-container>\n <ng-template #noResults>\n <h1 c8yIcon=\"search\"></h1>\n <div>\n <p>\n <strong>{{ 'No results to display.' | translate }}</strong>\n </p>\n <small>{{ 'Refine your search terms or check your spelling.' | translate }}</small>\n </div>\n </ng-template>\n </ng-container>\n </div>\n <ng-container *ngFor=\"let column of columns; trackBy: trackByName\">\n <c8y-column [name]=\"column.name\"></c8y-column>\n </ng-container>\n </c8y-data-grid>\n</div>\n","import { Component, OnDestroy, OnInit, ViewChild } from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { IManagedObject, InventoryService, IResultList } from '@c8y/client';\nimport {\n AlertService,\n GainsightService,\n gettext,\n memoize,\n ModalService,\n Status\n} from '@c8y/ngx-components';\nimport {\n PRODUCT_EXPERIENCE_REPOSITORY_SHARED,\n RepositoryService,\n SoftwareTypeComponent\n} from '@c8y/ngx-components/repository/shared';\nimport { TranslateService } from '@ngx-translate/core';\nimport { BsModalService, ModalOptions } from 'ngx-bootstrap/modal';\nimport { BehaviorSubject, from, merge, Observable, Subject } from 'rxjs';\nimport {\n distinctUntilKeyChanged,\n map,\n shareReplay,\n switchMap,\n take,\n takeUntil,\n tap,\n withLatestFrom\n} from 'rxjs/operators';\nimport { AddSoftwareModalComponent } from './add-software-modal.component';\n\n@Component({\n selector: 'c8y-software-details',\n templateUrl: './software-details.component.html'\n})\nexport class SoftwareDetailsComponent implements OnInit, OnDestroy {\n @ViewChild(SoftwareTypeComponent, { static: true })\n softwareType: SoftwareTypeComponent;\n\n reload$: Subject<void> = new Subject();\n reloading$: BehaviorSubject<boolean> = new BehaviorSubject(false);\n softwareTypeObject: IManagedObject;\n isSoftwareTypeChanged = false;\n\n updateSoftware$: Subject<Partial<IManagedObject>> = new Subject();\n softwareUpdated$: Subject<IManagedObject> = new Subject();\n baseVersionsUpdated$: Subject<void> = new Subject();\n\n software$: Observable<IManagedObject> = merge(\n this.activatedRoute.params.pipe(\n map(params => params.id),\n switchMap(id => from(this.inventoryService.detail(id).then(result => result.data)))\n ),\n this.reload$.pipe(\n tap(() => this.reloading$.next(true)),\n switchMap(() => this.activatedRoute.params),\n map(params => params.id),\n switchMap(id => from(this.inventoryService.detail(id).then(result => result.data))),\n tap(() => this.reloading$.next(false))\n ),\n this.softwareUpdated$\n ).pipe(shareReplay(1));\n\n baseVersions$: Observable<IResultList<IManagedObject>> = merge(\n this.software$.pipe(distinctUntilKeyChanged('id')),\n this.baseVersionsUpdated$,\n this.reload$\n ).pipe(\n switchMap(() => this.software$),\n switchMap(software => this.repositoryService.listBaseVersions(software)),\n shareReplay(1)\n );\n\n isLegacy$: Observable<boolean> = this.software$.pipe(\n map(software => this.repositoryService.isLegacyEntry(software)),\n shareReplay(1)\n );\n\n destroy$: Subject<boolean> = new Subject<boolean>();\n\n constructor(\n private activatedRoute: ActivatedRoute,\n private inventoryService: InventoryService,\n private repositoryService: RepositoryService,\n private alertService: AlertService,\n private translateService: TranslateService,\n private modalService: ModalService,\n private bsModalService: BsModalService,\n private gainsightService: GainsightService,\n private router: Router\n ) {}\n\n ngOnInit() {\n this.updateSoftware$\n .pipe(\n withLatestFrom(this.software$),\n switchMap(([softwarePartial, software]) =>\n this.inventoryService.update({\n id: software.id,\n ...softwarePartial\n })\n ),\n map(({ data }) => data),\n tap(software => this.softwareUpdated$.next(software)),\n tap(() => this.alertService.success(gettext('Saved.'))),\n tap(() =>\n this.gainsightService.triggerEvent(\n PRODUCT_EXPERIENCE_REPOSITORY_SHARED.SOFTWARE.EVENTS.REPOSITORY,\n {\n result: PRODUCT_EXPERIENCE_REPOSITORY_SHARED.SOFTWARE.RESULTS.EDIT_SOFTWARE\n }\n )\n ),\n takeUntil(this.destroy$)\n )\n .subscribe();\n\n this.software$.subscribe(software => {\n this.softwareTypeObject = software;\n });\n }\n\n @memoize()\n getBinaryName$(binaryUrl) {\n return this.repositoryService.getBinaryName$(binaryUrl);\n }\n\n addBaseVersion() {\n this.software$\n .pipe(\n take(1),\n switchMap(software => {\n const initialState = {\n model: {\n selected: software,\n description: software.description\n }\n };\n const config: ModalOptions<AddSoftwareModalComponent> = {\n class: 'modal-sm',\n ariaDescribedby: 'addSoftwareModalDescription',\n ariaLabelledBy: 'addSoftwareModalTitle',\n ignoreBackdropClick: true,\n keyboard: false,\n initialState\n };\n const modalRef = this.bsModalService.show(AddSoftwareModalComponent, config);\n return modalRef.content.saved;\n })\n )\n .subscribe(() => this.baseVersionsUpdated$.next());\n }\n\n async deleteBaseVersion(baseVersion: IManagedObject) {\n try {\n const title = gettext('Delete software');\n const body = `\n ${this.translateService.instant(\n gettext('You are about to delete software {{ version }}.'),\n { version: baseVersion.c8y_Software.version }\n )}\n ${this.translateService.instant(gettext('This operation is irreversible.'))}\n ${this.translateService.instant(gettext('Do you want to proceed?'))}\n `;\n const labels = {\n ok: gettext('Delete')\n };\n await this.modalService.confirm(title, body, Status.DANGER, labels);\n const isLastVersion = await this.baseVersions$\n .pipe(\n map(versions => versions?.data?.length === 1),\n take(1)\n )\n .toPromise();\n if (isLastVersion) {\n await this.repositoryService.delete(this.softwareTypeObject);\n this.router.navigateByUrl('/software');\n } else {\n await this.repositoryService.delete(baseVersion);\n this.baseVersionsUpdated$.next();\n }\n this.alertService.success(gettext('Software deleted.'));\n } catch (ex) {\n // only if not cancel from modal\n if (ex) {\n this.alertService.addServerFailure(ex);\n }\n }\n }\n\n onSelectSoftwareType(software) {\n this.isSoftwareTypeChanged = !(\n this.softwareTypeObject?.softwareType === software?.softwareType\n );\n this.softwareTypeObject = software;\n }\n\n ngOnDestroy() {\n this.destroy$.next(true);\n this.destroy$.unsubscribe();\n }\n}\n","<c8y-title>\n {{ (software$ | async)?.name }}\n</c8y-title>\n\n<c8y-breadcrumb>\n <c8y-breadcrumb-item\n label=\"{{ 'Management' | translate }}\"\n icon=\"c8y-management\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n path=\"#/software\"\n label=\"{{ 'Software repository' | translate }}\"\n icon=\"c8y-tools\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n label=\"{{ (software$ | async)?.name }}\"\n icon=\"c8y-tools\"\n ></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<c8y-action-bar-item [placement]=\"'right'\">\n <button\n class=\"btn btn-link\"\n type=\"button\"\n title=\"{{ 'Add software' | translate }}\"\n (click)=\"addBaseVersion()\"\n *ngIf=\"!(isLegacy$ | async)\"\n >\n <i c8yIcon=\"plus-circle\"></i>\n {{ 'Add software' | translate }}\n </button>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item [placement]=\"'right'\">\n <button\n class=\"btn btn-link\"\n type=\"button\"\n title=\"{{ 'Reload' | translate }}\"\n (click)=\"reload$.next()\"\n >\n <i\n c8yIcon=\"refresh\"\n [ngClass]=\"{ 'icon-spin': reloading$ | async }\"\n ></i>\n {{ 'Reload' | translate }}\n </button>\n</c8y-action-bar-item>\n\n<div class=\"row\">\n <div class=\"col-lg-12 col-lg-max\">\n <div class=\"card card--fullpage\">\n <div class=\"card-block bg-level-1 flex-no-shrink p-t-24 p-b-24 overflow-visible\">\n <div class=\"content-flex-70\">\n <div class=\"text-center\">\n <i class=\"c8y-icon-duocolor icon-48 c8y-icon c8y-icon-tools\"></i>\n <p>\n <small class=\"label label-info\">Software</small>\n </p>\n </div>\n <div class=\"flex-grow col-10\">\n <div class=\"row\">\n <div class=\"col-sm-6\">\n <c8y-form-group>\n <label class=\"control-label\">\n {{ 'Name' | translate }}\n </label>\n <div class=\"input-group input-group-editable\">\n <input\n #nameInput\n type=\"text\"\n class=\"form-control\"\n [ngModel]=\"(software$ | async)?.name\"\n #nameModel=\"ngModel\"\n placeholder=\"{{ 'e.g. My software' | translate }}\"\n [ngStyle]=\"{ 'width.ch': (software$ | async)?.name?.length + 2 || 31 }\"\n required\n />\n <span></span>\n <div class=\"input-group-btn\">\n <button\n class=\"btn btn-primary\"\n type=\"button\"\n title=\"{{ 'Save' | translate }}\"\n (click)=\"updateSoftware$.next({ name: nameInput.value }); nameModel.reset()\"\n [disabled]=\"nameInput.value.length === 0\"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n </div>\n </c8y-form-group>\n </div>\n <div class=\"col-sm-6\">\n <c8y-form-group>\n <label class=\"control-label\">\n {{ 'Description' | translate }}\n </label>\n <div class=\"input-group input-group-editable\">\n <input\n #descriptionInput\n type=\"text\"\n class=\"form-control\"\n [ngModel]=\"(software$ | async)?.description\"\n #descriptionModel=\"ngModel\"\n placeholder=\"{{ 'e.g. Cloud connectivity software' | translate }}\"\n [ngStyle]=\"{ 'width.ch': (software$ | async)?.description?.length + 2 || 31 }\"\n />\n <span></span>\n <div class=\"input-group-btn\">\n <button\n class=\"btn btn-primary\"\n type=\"button\"\n title=\"{{ 'Save' | translate }}\"\n (click)=\"\n updateSoftware$.next({ description: descriptionInput.value });\n descriptionModel.reset()\n \"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n </div>\n </c8y-form-group>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-sm-6\">\n <c8y-form-group>\n <label class=\"control-label\">\n {{ 'Device type' | translate }}\n <button\n class=\"btn-help\"\n type=\"button\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{\n 'If the filter is set, the software will show up for installation only for devices of that type. If no filter is set, it will be available for all devices.'\n | translate\n }}\"\n triggers=\"focus\"\n container=\"body\"\n >\n <i c8yIcon=\"question-circle-o\"></i>\n </button>\n </label>\n <div class=\"input-group input-group-editable\">\n <input\n #deviceTypeInput\n type=\"text\"\n class=\"form-control\"\n [ngModel]=\"(software$ | async)?.c8y_Filter?.type\"\n #deviceTypeModel=\"ngModel\"\n placeholder=\"{{ 'e.g.' | translate }} c8y_Linux\"\n [ngStyle]=\"{ 'width.ch': (software$ | async)?.type?.length + 2 || 31 }\"\n />\n <span></span>\n <div class=\"input-group-btn\">\n <button\n class=\"btn btn-primary\"\n type=\"button\"\n title=\"{{ 'Save' | translate }}\"\n (click)=\"\n updateSoftware$.next({ c8y_Filter: { type: deviceTypeInput.value } });\n deviceTypeModel.reset()\n \"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n </div>\n </c8y-form-group>\n </div>\n <div class=\"col-sm-6\">\n <c8y-form-group>\n <label class=\"control-label\">\n {{ 'Software type' | translate }}\n </label>\n <div class=\"input-group input-group-editable\">\n <c8y-software-type\n [softwareTypeMO]=\"softwareTypeObject\"\n [style]=\"{ 'width.ch': softwareTypeObject?.softwareType?.length + 2 || 31 }\"\n (onSelectSoftware)=\"onSelectSoftwareType($event)\"\n ></c8y-software-type>\n <div class=\"input-group-btn\">\n <button\n class=\"btn btn-primary\"\n type=\"button\"\n title=\"{{ 'Save' | translate }}\"\n [ngClass]=\"isSoftwareTypeChanged ? '' : 'hidden'\"\n [disabled]=\"softwareTypeObject?.softwareType === ''\"\n (click)=\"\n updateSoftware$.next({ softwareType: softwareTypeObject.softwareType });\n softwareType.resetInput();\n isSoftwareTypeChanged = false\n \"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n </div>\n </c8y-form-group>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"inner-scroll\">\n <div class=\"card-header separator-top-bottom sticky-top bg-component\">\n <div\n class=\"card-title\"\n translate\n >\n Versions\n </div>\n </div>\n\n <div class=\"card-block p-t-0 p-b-24\">\n <c8y-ui-empty-state\n *ngIf=\"(baseVersions$ | async)?.data.length === 0\"\n [icon]=\"'c8y-tools'\"\n [title]=\"'No versions to display.' | translate\"\n [subtitle]=\"'Add a new version by clicking below.' | translate\"\n >\n <p>\n <button\n class=\"btn btn-primary\"\n type=\"button\"\n title=\"{{ 'Add software' | translate }}\"\n (click)=\"addBaseVersion()\"\n >\n {{ 'Add software' | translate }}\n </button>\n </p>\n </c8y-ui-empty-state>\n\n <c8y-list-group *ngIf=\"(baseVersions$ | async)?.data.length > 0\">\n <c8y-li\n *c8yFor=\"let baseVersion of baseVersions$ | async; let i = index; loadMore: 'auto'\"\n >\n <c8y-li-icon>\n <i c8yIcon=\"c8y-tools\"></i>\n </c8y-li-icon>\n\n <c8y-li-body class=\"content-flex-50\">\n <div class=\"col-4\">\n <p\n class=\"text-truncate-wrap\"\n title=\"{{ baseVersion.c8y_Software.version }}\"\n >\n {{ baseVersion.c8y_Software.version }}\n </p>\n </div>\n <div class=\"col-5\">\n <p class=\"text-truncate-wrap\">\n <span\n class=\"text-label-small m-r-8\"\n translate\n >\n File\n </span>\n <span title=\" {{ getBinaryName$(baseVersion.c8y_Software.url) | async }}\">\n <c8y-file-download\n url=\"{{ baseVersion.c8y_Software.url }}\"\n ></c8y-file-download>\n </span>\n </p>\n </div>\n <div class=\"col-2 d-flex a-i-start\">\n <span\n *ngIf=\"isLegacy$ | async\"\n class=\"label label-warning m-l-auto-sm\"\n >\n {{ 'Legacy' | translate }}\n </span>\n\n <div\n class=\"fit-h-20\"\n *ngIf=\"!(isLegacy$ | async)\"\n >\n <button\n class=\"btn btn-danger btn-xs visible-xs m-l-auto m-r-8 m-t-8\"\n type=\"button\"\n title=\"{{ 'Delete' | translate }}\"\n (click)=\"deleteBaseVersion(baseVersion)\"\n >\n <i c8yIcon=\"delete\"></i>\n {{ 'Delete' | translate }}\n </button>\n </div>\n </div>\n <div\n *ngIf=\"!(isLegacy$ | async)\"\n class=\"m-l-auto fit-h-20 hidden-xs\"\n >\n <button\n class=\"btn btn-dot text-danger showOnHover\"\n type=\"button\"\n data-cy=\"software-details-component--Delete-button\"\n [attr.aria-label]=\"'Delete' | translate\"\n tooltip=\"{{ 'Delete' | translate }}\"\n [delay]=\"500\"\n (click)=\"deleteBaseVersion(baseVersion)\"\n >\n <i c8yIcon=\"delete\"></i>\n </button>\n </div>\n </c8y-li-body>\n </c8y-li>\n </c8y-list-group>\n </div>\n </div>\n </div>\n </div>\n</div>\n","import { Injectable } from '@angular/core';\nimport { gettext, NavigatorNode, NavigatorNodeFactory } from '@c8y/ngx-components';\n\n@Injectable()\nexport class SoftwareRepositoryNavigationFactory implements NavigatorNodeFactory {\n node: NavigatorNode;\n\n constructor() {\n this.node = new NavigatorNode({\n label: gettext('Software repository'),\n path: 'software',\n icon: 'c8y-tools',\n parent: gettext('Management'),\n priority: 900\n });\n }\n\n get(): NavigatorNode {\n return this.node;\n }\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { SoftwareNameCellRendererComponent } from './columns/name.cell-renderer.component';\nimport { SoftwareTypeCellRendererComponent } from './columns/software-type.cell-renderer.component';\nimport { SoftwareTypeFilteringFormRendererComponent } from './columns/software-type.filtering-form-renderer.component';\nimport { DeviceTypeCellRendererComponent } from './columns/device-type.cell-renderer.component';\nimport { VersionsCellRendererComponent } from './columns/versions.cell-renderer.component';\nimport { SoftwareListComponent } from './software-list.component';\nimport { SoftwareDetailsComponent } from './software-details.component';\nimport { AddSoftwareModalComponent } from './add-software-modal.component';\nimport { CoreModule, FormsModule, hookNavigator, hookRoute } from '@c8y/ngx-components';\nimport { SoftwareRepositoryNavigationFactory } from './software-repository-navigation-factory';\nimport { PopoverModule } from 'ngx-bootstrap/popover';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport { RouterModule } from '@angular/router';\nimport { SharedRepositoryModule } from '@c8y/ngx-components/repository/shared';\nimport { DeviceGridModule } from '@c8y/ngx-components/device-grid';\n\n@NgModule({\n imports: [\n CommonModule,\n CoreModule,\n FormsModule,\n DeviceGridModule,\n PopoverModule,\n TooltipModule,\n RouterModule,\n SharedRepositoryModule\n ],\n declarations: [\n SoftwareListComponent,\n SoftwareDetailsComponent,\n AddSoftwareModalComponent,\n SoftwareNameCellRendererComponent,\n SoftwareTypeCellRendererComponent,\n SoftwareTypeFilteringFormRendererComponent,\n DeviceTypeCellRendererComponent,\n VersionsCellRendererComponent\n ]\n})\nexport class SoftwareRepositoryListModule {\n static forRoot(): ModuleWithProviders<SoftwareRepositoryListModule> {\n return {\n ngModule: SoftwareRepositoryListModule,\n providers: [\n hookNavigator(SoftwareRepositoryNavigationFactory),\n hookRoute([\n {\n path: 'software',\n component: SoftwareListComponent\n },\n {\n path: 'software/:id',\n component: SoftwareDetailsComponent\n }\n ])\n ]\n };\n }\n}\n","import { Injectable } from '@angular/core';\nimport { IResultList, Paging } from '@c8y/client';\nimport {\n AdvancedSoftwareService,\n DeviceSoftware,\n FilterCriteria\n} from '@c8y/ngx-components/repository/shared';\nimport { set } from 'lodash-es';\nimport { BehaviorSubject, Observable, Subject } from 'rxjs';\nimport { share, switchMap } from 'rxjs/operators';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class DeviceSoftwareService {\n /**\n * Indicates whether device software data is currently being loaded.\n */\n get loading$(): Observable<boolean> {\n return this.loadingSubject$.asObservable().pipe(share());\n }\n\n private reloadSubject$ = new BehaviorSubject<void>(null);\n private loadingSubject$ = new Subject<boolean>();\n\n constructor(private advancedSoftwareService: AdvancedSoftwareService) {}\n\n /**\n * Trigger device software data reload.\n */\n reload() {\n this.reloadSubject$.next();\n }\n\n /**\n * Retrieves the software list that is installed on a given device.\n *\n * @param deviceId ID of the device to retrieve software data for\n * @param filterCriteria Criteria that software items are filtered by.\n * @param legacySoftwareList If provided no data will be fetched from backend. The provided software list\n * will be filtered by the specified filter criteria.\n *\n * @returns The software items installed on the specified device filtered by the specified criteria.\n */\n getSoftwareList(\n deviceId,\n filterCriteria: FilterCriteria,\n legacySoftwareList?: DeviceSoftware[]\n ): Observable<IResultList<DeviceSoftware>> {\n this.loadingSubject$.next(true);\n\n return this.reloadSubject$.pipe(\n switchMap(() => {\n const softwareList$ = !!legacySoftwareList\n ? this.getLegacySoftwareList(legacySoftwareList, filterCriteria)\n : this.getAdvancedSoftwareList(deviceId, filterCriteria);\n return softwareList$.then(resultList => {\n this.loadingSubject$.next(false);\n return resultList;\n });\n }),\n share()\n );\n }\n\n private getAdvancedSoftwareList(\n deviceId,\n filterCriteria: FilterCriteria\n ): Promise<IResultList<DeviceSoftware>> {\n const queryFilter = {\n deviceId,\n currentPage: 1,\n pageSize: 50,\n withTotalPages: true\n };\n if (filterCriteria?.name) {\n set(queryFilter, 'name', `*${filterCriteria.name}*`);\n }\n if (filterCriteria?.softwareType) {\n set(queryFilter, 'type', `${filterCriteria.softwareType}`);\n }\n return this.advancedSoftwareService.list(queryFilter) as unknown as Promise<\n IResultList<DeviceSoftware>\n >;\n }\n\n private getLegacySoftwareList(\n legacySoftwareList: DeviceSoftware[],\n filterCriteria: FilterCriteria\n ): Promise<IResultList<DeviceSoftware>> {\n const data = filterCriteria\n ? legacySoftwareList.filter(item => {\n let match = true;\n if (filterCriteria?.name) {\n match = match && item.name?.includes(filterCriteria.name);\n }\n if (filterCriteria?.softwareType) {\n match = match && item.softwareType === filterCriteria.softwareType;\n }\n\n return match;\n })\n : legacySoftwareList;\n return Promise.resolve({\n data,\n res: null,\n paging: {\n totalPages: data.length\n } as Paging<DeviceSoftware>\n });\n }\n}\n","import {\n AfterContentInit,\n Component,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output\n} from '@angular/core';\nimport { IManagedObject, IResultList } from '@c8y/client';\nimport { gettext } from '@c8y/ngx-components';\nimport {\n DeviceSoftware,\n DeviceSoftwareChange,\n FilterCriteria,\n PRODUCT_EXPERIENCE_REPOSITORY_SHARED\n} from '@c8y/ngx-components/repository/shared';\nimport { filter, get } from 'lodash-es';\nimport { BehaviorSubject, combineLatest, Observable, of, Subject } from 'rxjs';\nimport {\n debounceTime,\n distinctUntilChanged,\n map,\n share,\n switchMap,\n takeUntil,\n tap\n} from 'rxjs/operators';\nimport { DeviceSoftwareService } from './device-software.service';\n\n@Component({\n selector: 'c8y-device-software-list',\n templateUrl: 'device-software-list.component.html'\n})\nexport class DeviceSoftwareListComponent implements OnInit, AfterContentInit, OnDestroy {\n PRODUCT_EXPERIENCE = PRODUCT_EXPERIENCE_REPOSITORY_SHARED;\n @Input() set softwareList(softwareList: DeviceSoftware[]) {\n if (softwareList !== null) {\n this.legacySoftwareList$.next(softwareList);\n }\n }\n @Input() device: IManagedObject;\n @Input() deviceSoftwareChanges: DeviceSoftwareChange[];\n @Input() filterCriteria$: Observable<FilterCriteria> = of(null);\n @Output() update = new EventEmitter<DeviceSoftware>();\n @Output() remove = new EventEmitter<DeviceSoftware>();\n @Output() onListEmpty: EventEmitter<boolean> = new EventEmitter();\n softwareItems$: Observable<IResultList<DeviceSoftware>>;\n showUpdate: boolean;\n showRemove: boolean;\n emptyList: boolean;\n noSearchResults: boolean;\n alreadyInstalledMessage = gettext('This software is already installed on the device');\n supportsSoftwareOperations = false;\n\n private readonly operationTypes = ['c8y_SoftwareUpdate', 'c8y_SoftwareList', 'c8y_Software'];\n\n private legacySoftwareList$: BehaviorSubject<DeviceSoftware[]> = new BehaviorSubject([]);\n private destroyed$ = new Subject<void>();\n\n constructor(private deviceSoftwareService: DeviceSoftwareService) {}\n\n ngOnInit(): void {\n this.softwareItems$ = combineLatest([\n this.filterCriteria$.pipe(debounceTime(300), distinctUntilChanged()),\n this.legacySoftwareList$\n ]).pipe(\n switchMap(([filterCriteria, legacySoftwareList]) =>\n this.deviceSoftwareService\n .getSoftwareList(this.device?.id, filterCriteria, legacySoftwareList)\n .pipe(map(resultList => ({ resultList, filterCriteria })))\n ),\n tap(({ resultList, filterCriteria }) => {\n this.notifyListEmpty(!resultList?.paging?.totalPages && !filterCriteria);\n this.noSearchResults = !resultList?.paging?.totalPages && !!filterCriteria;\n }),\n map(({ resultList }) => resultList),\n share(),\n takeUntil(this.destroyed$)\n );\n const supportedOperations = get(this.device, 'c8y_SupportedOperations', []);\n this.supportsSoftwareOperations = this.operationTypes.some(\n operationType => supportedOperations.indexOf(operationType) > -1\n );\n }\n\n ngAfterContentInit() {\n this.showUpdate = this.update.observers.length > 0;\n this.showRemove = this.remove.observers.length > 0;\n }\n\n isSoftwareGoingToBeChanged(software: DeviceSoftware): boolean {\n const relevantChanges = filter(this.deviceSoftwareChanges, software);\n return relevantChanges.length > 0;\n }\n\n ngOnDestroy(): void {\n this.destroyed$.next();\n this.destroyed$.complete();\n }\n\n private notifyListEmpty(isEmpty: boolean): void {\n this.emptyList = isEmpty;\n this.onListEmpty.emit(isEmpty);\n }\n}\n","<c8y-list-group class=\"no-border-2nd-last\">\n <c8y-li\n [ngClass]=\"{ disabled: isSoftwareGoingToBeChanged(software) }\"\n *c8yFor=\"let software of softwareItems$\"\n >\n <!-- SOFTWARE ICON -->\n <c8y-li-icon>\n <i c8yIcon=\"c8y-tools\"></i>\n </c8y-li-icon>\n\n <c8y-li-body class=\"content-flex-20\">\n <div title=\"{{ software.name }}\" class=\"col-9\">\n <p class=\"d-flex\">\n <!-- SOFTWARE NAME -->\n <span class=\"text-truncate\">\n {{ software.name }}\n </span>\n <!-- SOFTWARE TYPE-->\n <span class=\"text-truncate\">\n <span class=\"label label-primary m-l-8\">{{ software.softwareType }}</span>\n </span>\n </p>\n <!-- SOFTWARE VERSION -->\n <p class=\"d-flex a-i-center\">\n <span class=\"text-truncate text-label-small m-r-4\" translate>Version</span>\n <span class=\"text-truncate m-r-4\" title=\"{{ software.version }}\">\n {{ software.version }}\n </span>\n <i\n *ngIf=\"software.installed\"\n c8yIcon=\"warning\"\n class=\"text-warning a-s-center\"\n [tooltip]=\"\n alreadyInstalledMessage\n | translate: { name: software.name, version: software.version }\n \"\n container=\"body\"\n placement=\"top\"\n [delay]=\"500\"\n ></i>\n </p>\n </div>\n\n <div\n *ngIf=\"supportsSoftwareOperations && (showUpdate || showRemove)\"\n class=\"col-3 text-right m-0 flex-grow d-flex a-i-center\"\n >\n <!-- UPDATE SOFTWARE -->\n <button\n class=\"btn btn-default btn-xs m-l-auto m-r-4\"\n type=\"button\"\n title=\"{{ 'Update`software,verb`' | translate }}\"\n *ngIf=\"showUpdate && !isSoftwareGoingToBeChanged(software)\"\n (click)=\"update.emit(software)\"\n c8yProductExperience\n [actionName]=\"PRODUCT_EXPERIENCE.SOFTWARE.EVENTS.DEVICE_TAB\"\n [actionData]=\"{\n component: PRODUCT_EXPERIENCE.SOFTWARE.COMPONENTS.DEVICE_SOFTWARE_LIST,\n action: PRODUCT_EXPERIENCE.SOFTWARE.ACTIONS.OPEN_UPDATE_SOFTWARE\n }\"\n >\n {{ 'Update`software,verb`' | translate }}\n </button>\n\n <!-- REMOVE SOFTWARE -->\n <button\n class=\"btn btn-dot btn-dot--danger m-l-4\"\n type=\"button\"\n [attr.aria-label]=\"'Remove`software,verb`' | translate\"\n tooltip=\"{{ 'Remove`software,verb`' | translate }}\"\n placement=\"bottom\"\n container=\"body\"\n [delay]=\"500\"\n c8yProductExperience\n [actionName]=\"PRODUCT_EXPERIENCE.SOFTWARE.EVENTS.DEVICE_TAB\"\n [actionData]=\"{\n component: PRODUCT_EXPERIENCE.SOFTWARE.COMPONENTS.DEVICE_SOFTWARE_LIST,\n action: PRODUCT_EXPERIENCE.SOFTWARE.ACTIONS.DELETE_SOFTWARE\n }\"\n *ngIf=\"showRemove && !isSoftwareGoingToBeChanged(software)\"\n (click)=\"remove.emit(software)\"\n >\n <i c8yIcon=\"minus-circle\"></i>\n </button>\n </div>\n </c8y-li-body>\n </c8y-li>\n</c8y-list-group>\n<!-- NO SEARCH RESULTS STATE -->\n<div class=\"card-block\" *ngIf=\"noSearchResults || emptyList\">\n <ng-content *ngIf=\"emptyList\" select=\".c8y-empty-state:not(.c8y-no-results-state)\"></ng-content>\n <ng-content *ngIf=\"noSearchResults\" select=\".c8y-no-results-state\"></ng-content>\n</div>\n","import { Component, EventEmitter, Input, OnChanges, Output, SimpleChanges } from '@angular/core';\nimport { gettext } from '@c8y/ngx-components';\nimport {\n DeviceSoftwareChange,\n PRODUCT_EXPERIENCE_REPOSITORY_SHARED\n} from '@c8y/ngx-components/repository/shared';\nimport { BehaviorSubject } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\n@Component({\n selector: 'c8y-device-software-changes',\n templateUrl: 'device-software-changes.component.html'\n})\nexport class DeviceSoftwareChangesComponent implements OnChanges {\n PRODUCT_EXPERIENCE = PRODUCT_EXPERIENCE_REPOSITORY_SHARED;\n @Input() changes: DeviceSoftwareChange[];\n @Input() changesInProgress: boolean;\n @Output() clear: EventEmitter<void> = new EventEmitter();\n @Output() drop: EventEmitter<DeviceSoftwareChange> = new EventEmitter();\n @Output() apply: EventEmitter<void> = new EventEmitter();\n @Output() hideSoftwareChanges = new EventEmitter<void>();\n\n get applyButtonLabel() {\n return this.changesInProgress ? gettext('Applying changes…') : gettext('Apply changes');\n }\n\n changes$ = new BehaviorSubject<DeviceSoftwareChange[]>([]);\n installations$ = this.changes$.pipe(\n map(changes => {\n return changes.filter(change => change.action === 'install');\n })\n );\n\n removals$ = this.changes$.pipe(\n map(changes => {\n return changes.filter(change => change.action === 'delete');\n })\n );\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes.changes) {\n this.changes$.next(changes.changes.currentValue);\n }\n }\n}\n","<div class=\"inner-scroll d-flex d-col\">\n <div class=\"card-header separator sticky-top visible-sm visible-xs\">\n <button\n class=\"btn btn-dot text-primary\"\n [title]=\"'Back' | translate\"\n type=\"button\"\n (click)=\"hideSoftwareChanges.emit()\"\n >\n <i c8yIcon=\"chevron-left\"></i>\n <span translate>Back</span>\n </button>\n </div>\n <div class=\"card-header separator large-padding sticky-top\">\n <div class=\"card-title\" translate>Software changes</div>\n </div>\n <div id=\"software-changes-list\" class=\"flex-grow inner-scroll\">\n <div class=\"card-block large-padding\" *ngIf=\"(changes$ | async).length === 0; else changesList\">\n <div class=\"c8y-empty-state\">\n <div class=\"h1 c8y-icon c8y-icon-device-control c8y-icon-duocolor\"></div>\n <p>\n <strong translate>No software changes.</strong>\n <br />\n <small translate>Selected actions will be displayed here.</small>\n </p>\n </div>\n </div>\n\n <ng-template #changesList>\n <fieldset\n class=\"card-block p-t-0 p-b-0\"\n *ngIf=\"(installations$ | async).length > 0\"\n [disabled]=\"changesInProgress\"\n >\n <div class=\"form-block legend\" translate>Installations`software`</div>\n <c8y-device-software-list\n [softwareList]=\"installations$ | async\"\n (remove)=\"drop.emit($event)\"\n ></c8y-device-software-list>\n </fieldset>\n\n <fieldset\n class=\"card-block p-t-0 p-b-0\"\n *ngIf=\"(removals$ | async).length > 0\"\n [disabled]=\"changesInProgress\"\n >\n <div class=\"form-block legend\" translate>Removals`software`</div>\n <c8y-device-software-list\n [softwareList]=\"removals$ | async\"\n (remove)=\"drop.emit($event)\"\n ></c8y-device-software-list>\n </fieldset>\n </ng-template>\n </div>\n <div\n class=\"card-footer separator large-padding sticky-bottom\"\n *ngIf=\"(changes$ | async).length > 0\"\n >\n <button\n class=\"btn btn-default\"\n title=\"{{ 'Clear changes' | translate }}\"\n type=\"button\"\n (click)=\"clear.emit()\"\n [disabled]=\"changesInProgress\"\n translate\n c8yProductExperience\n [actionName]=\"PRODUCT_EXPERIENCE.SOFTWARE.EVENTS.DEVICE_TAB\"\n [actionData]=\"{\n component: PRODUCT_EXPERIENCE.SOFTWARE.COMPONENTS.DEVICE_SOFTWARE_CHANGES,\n action: PRODUCT_EXPERIENCE.SOFTWARE.ACTIONS.CLEAR_SOFTWARE_CHANGES\n }\"\n >\n Clear`changes`\n </button>\n <button\n class=\"btn btn-primary\"\n title=\"{{ applyButtonLabel | translate }}\"\n type=\"button\"\n [ngClass]=\"{ 'btn-pending': changesInProgress }\"\n [disabled]=\"changesInProgress\"\n (click)=\"apply.emit(); hideSoftwareChanges.emit()\"\n c8yProductExperience\n [actionName]=\"PRODUCT_EXPERIENCE.SOFTWARE.EVENTS.DEVICE_TAB\"\n [actionData]=\"{\n component: PRODUCT_EXPERIENCE.SOFTWARE.COMPONENTS.DEVICE_SOFTWARE_CHANGES,\n action: PRODUCT_EXPERIENCE.SOFTWARE.ACTIONS.APPLY_SOFTWARE_CHANGES\n }\"\n >\n {{ applyButtonLabel | translate }}\n </button>\n </div>\n</div>\n","import {\n Component,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n TemplateRef,\n ViewChild\n} from '@angular/core';\nimport { IManagedObject, IOperation, QueriesUtil } from '@c8y/client';\nimport {\n gettext,\n ISelectModalObject,\n IUpdateItemEvent,\n ModalSelectionMode\n} from '@c8y/ngx-components';\nimport {\n DeviceSoftware,\n DeviceSoftwareChange,\n FilterCriteria,\n PRODUCT_EXPERIENCE_REPOSITORY_SHARED,\n RepositorySelectModalComponent,\n RepositoryService,\n RepositoryType\n} from '@c8y/ngx-components/repository/shared';\nimport { get } from 'lodash-es';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { BehaviorSubject, combineLatest, from, Observable, of, pipe, Subject } from 'rxjs';\nimport {\n distinctUntilChanged,\n filter,\n map,\n mergeMap,\n shareReplay,\n switchMap,\n takeUntil,\n tap\n} from 'rxjs/operators';\n\n@Component({\n selector: 'c8y-installed-software',\n templateUrl: 'installed-software.component.html'\n})\nexport class InstalledSoftwareComponent implements OnDestroy, OnInit {\n PRODUCT_EXPERIENCE = PRODUCT_EXPERIENCE_REPOSITORY_SHARED;\n @Input() device: IManagedObject;\n @Input() softwareList: DeviceSoftware[];\n @Input() deviceSoftwareChanges: DeviceSoftwareChange[];\n @Input() deviceSoftwareChangesOperation: IOperation;\n @Input() deviceSoftwareChangesInProgress: boolean;\n @Input() typesQuery: object;\n @Output() changes = new EventEmitter<DeviceSoftwareChange[]>();\n @Output() showSoftwareChanges = new EventEmitter<void>();\n\n @ViewChild('alreadyInstalledWarning', { static: true })\n alreadyInstalledWarningTemplate: TemplateRef<any>;\n alreadyInstalledMessage = gettext(\n '{{ name }} (v. {{ version }}) is already installed on this device'\n );\n @ViewChild('loading', { static: true })\n loadingTemplate: TemplateRef<any>;\n\n @ViewChild('softwareType', { static: true })\n softwareTypeTemplate: TemplateRef<any>;\n\n showFilter = false;\n supportsSoftwareOperations = false;\n textFilter$: BehaviorSubject<string> = new BehaviorSubject('');\n softwareTypeFilter$: BehaviorSubject<string> = new BehaviorSubject('');\n filterCriteria$: Observable<FilterCriteria>;\n\n private readonly operationTypes = ['c8y_SoftwareUpdate', 'c8y_SoftwareList', 'c8y_Software'];\n\n private queriesUtil: QueriesUtil;\n private modalSearch: (filterCriteria: FilterCriteria) => void;\n private destroyed$: Subject<void> = new Subject();\n\n constructor(\n private repository: RepositoryService,\n private bsModal: BsModalService\n ) {\n this.filterCriteria$ = combineLatest([this.textFilter$, this.softwareTypeFilter$]).pipe(\n map(([textFilter, softwareTypeFilter]) => ({\n name: textFilter,\n softwareType: softwareTypeFilter\n })),\n map(filterCriteria =>\n !filterCriteria.name && !filterCriteria.softwareType ? null : filterCriteria\n )\n );\n this.queriesUtil = new QueriesUtil();\n }\n\n ngOnInit(): void {\n const supportedOperations = get(this.device, 'c8y_SupportedOperations', []);\n this.supportsSoftwareOperations = this.operationTypes.some(\n operationType => supportedOperations.indexOf(operationType) > -1\n );\n }\n\n installSoftware() {\n const { resultEmitter, choiceEmitter, updateInstallableList$ } =\n this.displaySoftwareSelectModal({\n title: gettext('Install software'),\n subTitle: gettext('Available softwares matching the device type'),\n labels: { ok: gettext('Install') },\n noItemsMessage: gettext('No matching software available.'),\n showAdditionalFilter: true,\n additionalFilterTemplate: this.softwareTypeTemplate,\n repositoryEntriesWithVersions$: of([]),\n repositoryEntriesWithVersionsFn$: modal =>\n this.getInstallableSoftwareListWithVersions$(modal.content.searchTerm)\n });\n\n resultEmitter.pipe(takeUntil(this.destroyed$)).subscribe(softwareToInstall => {\n this.emitSoftwareInstall(softwareToInstall);\n this.showSoftwareChanges.emit();\n });\n\n choiceEmitter\n .pipe(\n this.isSoftwareInstalledOnDevicePipe(updateInstallableList$),\n takeUntil(this.destroyed$)\n )\n .subscribe(({ item }) =>\n updateInstallableList$.next({\n object: item,\n template: this.alreadyInstalledWarningTemplate,\n mapper: object => {\n object.installed = true;\n return object;\n }\n })\n );\n }\n\n updateSoftware(softwareToUpdate) {\n const { resultEmitter, choiceEmitter, updateInstallableList$ } =\n this.displaySoftwareSelectModal({\n title: gettext('Update software'),\n subTitle: gettext('Select one of the available software versions'),\n labels: { ok: gettext('Update') },\n noItemsMessage: gettext('No other software versions available.'),\n showFilter: false,\n repositoryEntriesWithVersions$: this.getSingleSoftwareWithVersions$(softwareToUpdate)\n });\n\n resultEmitter.pipe(takeUntil(this.destroyed$)).subscribe(softwareToInstall => {\n this.emitSoftwareInstall(softwareToInstall);\n this.showSoftwareChanges.emit();\n });\n\n choiceEmitter\n .pipe(\n this.isSoftwareInstalledOnDevicePipe(updateInstallableList$),\n takeUntil(this.destroyed$)\n )\n .subscribe(({ item }) =>\n updateInstallableList$.next({\n object: item,\n template: this.alreadyInstalledWarningTemplate,\n mapper: object => {\n object.installed = true;\n return object;\n }\n })\n );\n }\n\n removeSoftware(softwareToRemove) {\n this.emitSoftwareRemoval([softwareToRemove]);\n }\n\n getInstallableSoftwareListWithVersions$(searchTerm$: BehaviorSubject<FilterCriteria>) {\n const installedSoftwareNames = (this.softwareList || []).map(s => s.name);\n return searchTerm$.pipe(\n distinctUntilChanged(),\n switchMap(searchTerm =>\n this.repository.listRepositoryEntries(RepositoryType.SOFTWARE, {\n query: searchTerm.softwareType\n ? this.queriesUtil.addAndFilter(this.typesQuery, {\n softwareType: searchTerm.softwareType\n })\n : this.typesQuery,\n partialName: searchTerm?.name,\n params: { pageSize: 100 }\n })\n ),\n map(({ data }) => data),\n map(softwareList => {\n return softwareList.filter(software => {\n return !installedSoftwareNames.includes(software.name);\n });\n }),\n map(softwareList => this.attachVersions(softwareList)),\n shareReplay(1)\n );\n }\n\n getSingleSoftwareWithVersions$(software: DeviceSoftware) {\n return from(\n this.repository.listRepositoryEntries(RepositoryType.SOFTWARE, {\n query: { name: software.name }\n })\n ).pipe(\n map(({ data }) => data),\n map(softwareList => this.attachVersions(softwareList)),\n shareReplay(1)\n );\n }\n\n attachVersions(softwareList: IManagedObject[]) {\n softwareList.forEach(software => {\n software.versions = this.repository.listBaseVersions(software);\n });\n return softwareList;\n }\n\n displaySoftwareSelectModal(initialStateOverrides) {\n const initialState = {\n repositoryType: RepositoryType.SOFTWARE,\n mode: ModalSelectionMode.MULTI,\n icon: 'c8y-tools',\n disableSelected: false,\n selected: this.softwareList,\n hideEmptyItems: true,\n ...initialStateOverrides\n };\n const modal = this.bsModal.show(RepositorySelectModalComponent, {\n ignoreBackdropClick: true,\n class: 'modal-sm',\n ariaDescribedby: 'modal-body',\n ariaLabelledBy: 'modal-title',\n initialState\n });\n\n if (initialStateOverrides.repositoryEntriesWithVersionsFn$) {\n modal.content.repositoryEntriesWithVersions$ =\n initialStateOverrides.repositoryEntriesWithVersionsFn$(modal);\n }\n\n this.modalSearch = modal.content.search.bind(modal.content);\n\n modal.content.load.next();\n return {\n resultEmitter: modal.content.resultEmitter,\n choiceEmitter: modal.content.onChoiceUpdated,\n updateInstallableList$: modal.content.updateInstallableList$\n };\n }\n\n search(filterCriteria: FilterCriteria) {\n if (this.modalSearch) {\n this.modalSearch(filterCriteria);\n }\n }\n\n emitSoftwareInstall(items: DeviceSoftware[]) {\n this.changes.emit(\n items.map(item => {\n return { ...item, action: 'install' };\n })\n );\n }\n\n emitSoftwareRemoval(items: DeviceSoftware[]) {\n this.changes.emit(\n items.map(item => {\n return { ...item, action: 'delete' };\n })\n );\n }\n\n ngOnDestroy(): void {\n this.destroyed$.next();\n this.destroyed$.complete();\n }\n\n private isSoftwareInstalledOnDevicePipe(updateInstallableList$: Subject<IUpdateItemEvent<any>>) {\n return pipe(\n tap((item: ISelectModalObject) =>\n updateInstallableList$.next({ object: item, template: this.loadingTemplate })\n ),\n map(item => ({\n item,\n software: (\n (item.options || []).find(option => option.obj.id === (item as any).selectedId) || {}\n ).obj\n })),\n mergeMap(({ item, software }) =>\n from(\n this.repository.isSoftwareInstalledOnDevice(this.device.id, software as DeviceSoftware)\n ).pipe(map(installed => ({ item, installed })))\n ),\n tap(({ item }) => updateInstallableList$.next({ object: item })),\n filter(({ installed }) => !!installed)\n );\n }\n}\n","<div class=\"d-flex d-col flex-grow\">\n <div class=\"card-header large-padding separator sticky-top\">\n <div\n class=\"card-title\"\n translate\n >\n Installed software\n </div>\n </div>\n <div class=\"flex-grow\">\n <fieldset\n class=\"card-block large-padding bg-level-2 p-0\"\n id=\"operation-block\"\n *ngIf=\"deviceSoftwareChangesOperation\"\n >\n <c8y-operation-details [operation]=\"deviceSoftwareChangesOperation\"></c8y-operation-details>\n </fieldset>\n <fieldset\n class=\"card-block large-padding overflow-visible separator-bottom\"\n *ngIf=\"showFilter\"\n >\n <div class=\"row\">\n <div class=\"col-xs-6\">\n <div class=\"input-group input-group-search\">\n <label\n class=\"sr-only\"\n for=\"filter\"\n >\n {{ 'Filter…' | translate }}\n </label>\n <input\n class=\"form-control\"\n title=\"{{ 'Filter…' | translate }}\"\n id=\"filter\"\n placeholder=\"{{ 'Filter…' | translate }}\"\n type=\"search\"\n [ngModel]=\"textFilter$ | async\"\n (ngModelChange)=\"textFilter$.next($event)\"\n />\n <span class=\"input-group-addon\">\n <i\n c8yIcon=\"search\"\n *ngIf=\"(textFilter$ | async).length === 0\"\n ></i>\n <i\n class=\"text-muted\"\n c8yIcon=\"times\"\n *ngIf=\"(textFilter$ | async).length > 0\"\n (click)=\"textFilter$.next('')\"\n ></i>\n </span>\n <span\n class=\"sr-only\"\n for=\"search\"\n translate\n >\n Filter…\n </span>\n </div>\n </div>\n <div class=\"col-xs-6\">\n <c8y-software-type\n [required]=\"false\"\n [emitResultsOnly]=\"true\"\n [showBtnInNotFoundMessage]=\"false\"\n [allowFreeEntries]=\"false\"\n [placeholder]=\"'Filter by software type…' | translate\"\n [showClearSelectionOption]=\"true\"\n [presetSoftwareTypes]=\"device.c8y_SupportedSoftwareTypes\"\n (onSelectSoftware)=\"softwareTypeFilter$.next($event?.softwareType)\"\n ></c8y-software-type>\n </div>\n </div>\n </fieldset>\n\n <fieldset\n class=\"flex-grow inner-scroll\"\n id=\"software-list\"\n [disabled]=\"deviceSoftwareChangesInProgress\"\n >\n <!-- NOT EMPTY STATE -->\n <c8y-device-software-list\n class=\"d-block p-l-16 p-r-16\"\n container=\"body\"\n [device]=\"device\"\n [filterCriteria$]=\"filterCriteria$\"\n [softwareList]=\"softwareList\"\n [deviceSoftwareChanges]=\"deviceSoftwareChanges\"\n (update)=\"updateSoftware($event)\"\n (remove)=\"removeSoftware($event)\"\n (onListEmpty)=\"showFilter = !$event\"\n >\n <!-- EMPTY STATE -->\n <div class=\"c8y-empty-state text-center\">\n <div class=\"h1 c8y-icon c8y-icon-tools c8y-icon-duocolor\"></div>\n <p>\n <strong translate>No software installed.</strong>\n <br />\n <small translate>Click below to install software into this device.</small>\n </p>\n </div>\n <!-- NO SEARCH RESULTS STATE -->\n <div class=\"c8y-empty-state c8y-no-results-state text-center\">\n <div class=\"h1 c8y-icon c8y-icon-tools c8y-icon-duocolor\"></div>\n <p>\n <strong translate>No software matches your filter criteria.</strong>\n <br />\n <small translate>Try changing your search criteria.</small>\n </p>\n </div>\n </c8y-device-software-list>\n </fieldset>\n </div>\n <!-- INSTALL SOFTWARE-->\n <div\n class=\"card-footer large-padding separator sticky-bottom d-flex j-c-between bg-level-0\"\n [ngClass]=\"{ 'visible-sm visible-xs': !supportsSoftwareOperations }\"\n >\n <button\n class=\"btn btn-default\"\n title=\"{{ 'Install software' | translate }}\"\n *ngIf=\"supportsSoftwareOperations\"\n (click)=\"installSoftware()\"\n [disabled]=\"deviceSoftwareChangesInProgress\"\n c8yProductExperience\n [actionName]=\"PRODUCT_EXPERIENCE.SOFTWARE.EVENTS.DEVICE_TAB\"\n [actionData]=\"{\n component: PRODUCT_EXPERIENCE.SOFTWARE.COMPONENTS.DEVICE_SOFTWARE_LIST,\n action: PRODUCT_EXPERIENCE.SOFTWARE.ACTIONS.OPEN_INSTALL_SOFTWARE\n }\"\n >\n <i c8yIcon=\"plus-circle\"></i>\n {{ 'Install software' | translate }}\n </button>\n <button\n class=\"btn btn-clean text-primary visible-sm visible-xs\"\n [title]=\"'Show &quot;Software changes&quot;' | translate\"\n (click)=\"showSoftwareChanges.emit()\"\n >\n <span translate>Show \"Software changes\"</span>\n <i c8yIcon=\"chevron-right\"></i>\n </button>\n </div>\n</div>\n\n<ng-template\n #alreadyInstalledWarning\n let-item\n let-option=\"option\"\n>\n <i\n class=\"text-warning a-s-center\"\n c8yIcon=\"warning\"\n [tooltip]=\"\n alreadyInstalledMessage\n | translate : { name: item.body[0].value, version: option.body[0].value }\n \"\n ></i>\n</ng-template>\n\n<ng-template #loading>\n <div class=\"p-relative d-flex m-l-auto\">\n <i\n class=\"icon-spin\"\n c8yIcon=\"circle-o-notch\"\n ></i>\n </div>\n</ng-template>\n\n<ng-template #softwareType>\n <c8y-software-type\n additionalFilter\n [required]=\"false\"\n [placeholder]=\"'Filter by software type…' | translate\"\n (onSelectSoftware)=\"search({ softwareType: $event?.softwareType })\"\n [emitResultsOnly]=\"true\"\n [showBtnInNotFoundMessage]=\"false\"\n [allowFreeEntries]=\"false\"\n [showClearSelectionOption]=\"true\"\n [presetSoftwareTypes]=\"device.c8y_SupportedSoftwareTypes\"\n ></c8y-software-type>\n</ng-template>\n","import { Component, OnInit } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { IManagedObject, InventoryService, IOperation, OperationStatus } from '@c8y/client';\nimport {\n AdvancedSoftwareService,\n DeviceSoftware,\n DeviceSoftwareChange,\n RepositoryService,\n RepositoryType\n} from '@c8y/ngx-components/repository/shared';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { filter, map, switchMap, take } from 'rxjs/operators';\nimport { DeviceSoftwareService } from './device-software.service';\n\n@Component({\n selector: 'c8y-software-device-tab',\n templateUrl: 'software-device-tab.component.html'\n})\nexport class SoftwareDeviceTabComponent implements OnInit {\n deviceId: string | number = this.route.snapshot.parent.data.contextData.id;\n device$ = new BehaviorSubject<IManagedObject>(this.route.snapshot.parent.data.contextData);\n typesQuery$: Observable<object> = this.device$.pipe(\n map(device => {\n const deviceTypeQuery = this.repository.getDeviceTypeQuery(RepositoryType.SOFTWARE, device);\n return this.repository.getSoftwareTypeQuery(device, deviceTypeQuery);\n })\n );\n list$: Observable<DeviceSoftware[]> = this.device$.pipe(\n switchMap(device =>\n this.advancedSoftwareService\n .isASMAvailable()\n .then(isASMAvailable => ({ isASMAvailable, device }))\n ),\n map(({ isASMAvailable, device }) =>\n // with ASM available software items will be retrieved directly in the\n // device-software-list component\n isASMAvailable ? undefined : this.repository.getDeviceSoftwareList(device)\n )\n );\n changes$ = new BehaviorSubject<DeviceSoftwareChange[]>([]);\n changesOperation$ = new BehaviorSubject<IOperation>(null);\n changesInProgress$: Observable<boolean> = this.changesOperation$.pipe(\n map(operation => this.isInProgress(operation))\n );\n reloading = false;\n showSoftwareChanges = false;\n\n constructor(\n private route: ActivatedRoute,\n private repository: RepositoryService,\n private inventory: InventoryService,\n private deviceSoftwareService: DeviceSoftwareService,\n private advancedSoftwareService: AdvancedSoftwareService\n ) {}\n\n async ngOnInit() {\n await this.loadDevice();\n await this.loadOperation();\n }\n\n addChanges(requestedChanges: DeviceSoftwareChange[]) {\n let stagedChanges = [...this.changes$.value];\n requestedChanges.forEach(requestedChange => {\n const alreadyStaged = stagedChanges.some(stagedChange =>\n this.areSameChanges(stagedChange, requestedChange)\n );\n if (!alreadyStaged) {\n stagedChanges = [...stagedChanges, requestedChange];\n }\n });\n this.changes$.next(stagedChanges);\n }\n\n dropChange(changeToBeDropped: DeviceSoftwareChange) {\n let stagedChanges = [...this.changes$.value];\n stagedChanges = stagedChanges.filter(\n stagedChange => !this.areSameChanges(stagedChange, changeToBeDropped)\n );\n this.changes$.next(stagedChanges);\n }\n\n areSameChanges(change1: DeviceSoftwareChange, change2: DeviceSoftwareChange) {\n return (\n change1.name === change2.name &&\n change1.version === change2.version &&\n change1.action === change2.action\n );\n }\n\n clearChanges() {\n this.changes$.next([]);\n }\n\n async loadDevice() {\n this.reloading = true;\n this.deviceSoftwareService.reload();\n const device = await Promise.all([\n this.deviceSoftwareService.loading$\n .pipe(\n filter(loading => !loading),\n take(1)\n )\n .toPromise(),\n this.inventory.detail(this.deviceId, { withChildren: false }).then(result => result.data)\n ]).then(([_, device]) => device);\n this.device$.next(device);\n this.reloading = false;\n }\n\n async applyChanges() {\n const operation = await this.repository.createSoftwareUpdateOperation(\n this.device$.value,\n this.changes$.value\n );\n await this.trackOperation(operation);\n }\n\n private async loadOperation() {\n const operation = await this.repository.getLastSoftwareUpdateOperation(this.deviceId);\n await this.trackOperation(operation);\n }\n\n private async trackOperation(operation: IOperation) {\n this.changesOperation$.next(operation);\n\n if (this.isInProgress(operation)) {\n await this.displayChangesFromOperation(operation);\n this.repository.observeOperation(operation).subscribe(\n operationUpdate => {\n this.changesOperation$.next(operationUpdate);\n if (operationUpdate.status === OperationStatus.SUCCESSFUL) {\n this.clearChanges();\n this.loadDevice();\n }\n },\n operationUpdate => {\n this.changesOperation$.next(operationUpdate);\n }\n );\n }\n }\n\n private async displayChangesFromOperation(operation: IOperation) {\n const changes = await this.repository.getDeviceSoftwareChangesFromOperation(\n operation,\n this.device$.value\n );\n this.changes$.next(changes);\n }\n\n private isInProgress(operation: IOperation) {\n return (\n operation && [OperationStatus.PENDING, OperationStatus.EXECUTING].includes(operation.status)\n );\n }\n}\n","<c8y-action-bar-item [placement]=\"'right'\">\n <button class=\"btn btn-link\" title=\"{{ 'Reload' | translate }}\" (click)=\"loadDevice()\">\n <i c8yIcon=\"refresh\" [ngClass]=\"{ 'icon-spin': reloading }\"></i>\n {{ 'Reload' | translate }}\n </button>\n</c8y-action-bar-item>\n\n<div class=\"card split-view--7-5 m-b-0\">\n <c8y-installed-software\n class=\"split-view__list\"\n [device]=\"device$ | async\"\n [typesQuery]=\"typesQuery$ | async\"\n [softwareList]=\"list$ | async\"\n [deviceSoftwareChanges]=\"changes$ | async\"\n [deviceSoftwareChangesOperation]=\"changesOperation$ | async\"\n [deviceSoftwareChangesInProgress]=\"changesInProgress$ | async\"\n (changes)=\"addChanges($event)\"\n (showSoftwareChanges)=\"showSoftwareChanges = true\"\n ></c8y-installed-software>\n <c8y-device-software-changes\n class=\"bg-level-1 split-view__detail\"\n [ngClass]=\"{ 'split-view__detail--selected': showSoftwareChanges }\"\n [changes]=\"changes$ | async\"\n [changesInProgress]=\"changesInProgress$ | async\"\n (clear)=\"clearChanges()\"\n (drop)=\"dropChange($event)\"\n (apply)=\"applyChanges()\"\n (hideSoftwareChanges)=\"showSoftwareChanges = false\"\n ></c8y-device-software-changes>\n</div>\n","import { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot } from '@angular/router';\nimport { IManagedObject } from '@c8y/client';\nimport { get, has } from 'lodash-es';\n\n@Injectable()\nexport class SoftwareDeviceTabGuard {\n private readonly operations = ['c8y_SoftwareUpdate', 'c8y_SoftwareList', 'c8y_Software'];\n\n canActivate(route: ActivatedRouteSnapshot) {\n const device = get(route, 'data.contextData') || get(route, 'parent.data.contextData');\n return (\n this.isAnyOperationSupported(device) ||\n has(device, 'c8y_Software') ||\n has(device, 'c8y_SoftwareList') ||\n has(device, 'c8y_SupportedSoftwareTypes')\n );\n }\n\n private isAnyOperationSupported(device: IManagedObject) {\n const supportedOperations = device?.c8y_SupportedOperations || [];\n return this.operations.some(operation => supportedOperations.indexOf(operation) >= 0);\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { ModuleWithProviders, NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { CoreModule, gettext, hookRoute, ViewContext } from '@c8y/ngx-components';\nimport { OperationDetailsModule } from '@c8y/ngx-components/operations/operation-details';\nimport { SharedRepositoryModule } from '@c8y/ngx-components/repository/shared';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport { DeviceSoftwareChangesComponent } from './device-software-changes.component';\nimport { DeviceSoftwareListComponent } from './device-software-list.component';\nimport { InstalledSoftwareComponent } from './installed-software.component';\nimport { SoftwareDeviceTabComponent } from './software-device-tab.component';\nimport { SoftwareDeviceTabGuard } from './software-device-tab.guard';\n\n@NgModule({\n imports: [\n CommonModule,\n CoreModule,\n RouterModule,\n SharedRepositoryModule,\n OperationDetailsModule,\n TooltipModule\n ],\n declarations: [\n SoftwareDeviceTabComponent,\n InstalledSoftwareComponent,\n DeviceSoftwareListComponent,\n DeviceSoftwareChangesComponent\n ]\n})\nexport class SoftwareRepositoryDeviceTabModule {\n static forRoot(): ModuleWithProviders<SoftwareRepositoryDeviceTabModule> {\n return {\n ngModule: SoftwareRepositoryDeviceTabModule,\n providers: [\n SoftwareDeviceTabGuard,\n hookRoute({\n context: ViewContext.Device,\n path: 'software',\n component: SoftwareDeviceTabComponent,\n label: gettext('Software'),\n icon: 'c8y-tools',\n priority: 499,\n canActivate: [SoftwareDeviceTabGuard]\n })\n ]\n };\n }\n}\n","import { NgModule } from '@angular/core';\nimport { SoftwareRepositoryDeviceTabModule } from './device-tab/software-repository-device-tab.module';\nimport { SoftwareRepositoryListModule } from './list/software-repository-list.module';\n\n@NgModule({\n imports: [SoftwareRepositoryDeviceTabModule.forRoot(), SoftwareRepositoryListModule.forRoot()]\n})\nexport class SoftwareRepositoryModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i3","i4","i1","i2","i5","i6","i7","i8","i9","i1.DeviceSoftwareService","i3.DeviceSoftwareListComponent","filter","i8.DeviceSoftwareListComponent","i4.DeviceSoftwareService","i7.InstalledSoftwareComponent","i8.DeviceSoftwareChangesComponent","i1.SoftwareRepositoryDeviceTabModule","i2.SoftwareRepositoryListModule"],"mappings":"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"}