@c8y/ngx-components 1023.17.20 → 1023.22.5

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 (64) hide show
  1. package/auth-configuration/index.d.ts +4 -2
  2. package/auth-configuration/index.d.ts.map +1 -1
  3. package/datapoint-explorer/view/index.d.ts.map +1 -1
  4. package/echart/index.d.ts +3 -0
  5. package/echart/index.d.ts.map +1 -1
  6. package/echart/models/index.d.ts +3 -0
  7. package/echart/models/index.d.ts.map +1 -1
  8. package/fesm2022/c8y-ngx-components-auth-configuration.mjs +25 -17
  9. package/fesm2022/c8y-ngx-components-auth-configuration.mjs.map +1 -1
  10. package/fesm2022/c8y-ngx-components-datapoint-explorer-view.mjs +4 -2
  11. package/fesm2022/c8y-ngx-components-datapoint-explorer-view.mjs.map +1 -1
  12. package/fesm2022/c8y-ngx-components-echart-models.mjs.map +1 -1
  13. package/fesm2022/c8y-ngx-components-echart.mjs +98 -59
  14. package/fesm2022/c8y-ngx-components-echart.mjs.map +1 -1
  15. package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-firmware.mjs +2 -3
  16. package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-firmware.mjs.map +1 -1
  17. package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-software.mjs +7 -9
  18. package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-software.mjs.map +1 -1
  19. package/fesm2022/c8y-ngx-components-protocol-opcua-mappings.mjs +2 -2
  20. package/fesm2022/c8y-ngx-components-protocol-opcua-mappings.mjs.map +1 -1
  21. package/fesm2022/c8y-ngx-components-protocol-opcua.mjs +1 -1
  22. package/fesm2022/c8y-ngx-components-protocol-opcua.mjs.map +1 -1
  23. package/fesm2022/c8y-ngx-components-repository-firmware.mjs +6 -8
  24. package/fesm2022/c8y-ngx-components-repository-firmware.mjs.map +1 -1
  25. package/fesm2022/c8y-ngx-components-repository-software.mjs +6 -8
  26. package/fesm2022/c8y-ngx-components-repository-software.mjs.map +1 -1
  27. package/fesm2022/c8y-ngx-components-tenants.mjs +2 -2
  28. package/fesm2022/c8y-ngx-components-tenants.mjs.map +1 -1
  29. package/fesm2022/c8y-ngx-components-trusted-certificates.mjs +9 -4
  30. package/fesm2022/c8y-ngx-components-trusted-certificates.mjs.map +1 -1
  31. package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-graph.mjs +4 -2
  32. package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-graph.mjs.map +1 -1
  33. package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-table.mjs +6 -6
  34. package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-table.mjs.map +1 -1
  35. package/fesm2022/c8y-ngx-components-widgets-implementations-info-gauge.mjs +5 -4
  36. package/fesm2022/c8y-ngx-components-widgets-implementations-info-gauge.mjs.map +1 -1
  37. package/fesm2022/c8y-ngx-components-widgets-implementations-kpi.mjs +5 -5
  38. package/fesm2022/c8y-ngx-components-widgets-implementations-kpi.mjs.map +1 -1
  39. package/fesm2022/c8y-ngx-components-widgets-implementations-linear-gauge.mjs +2 -3
  40. package/fesm2022/c8y-ngx-components-widgets-implementations-linear-gauge.mjs.map +1 -1
  41. package/fesm2022/c8y-ngx-components.mjs +31 -16
  42. package/fesm2022/c8y-ngx-components.mjs.map +1 -1
  43. package/index.d.ts +2 -1
  44. package/index.d.ts.map +1 -1
  45. package/locales/de.po +49 -35
  46. package/locales/es.po +50 -30
  47. package/locales/fr.po +50 -33
  48. package/locales/ja_JP.po +43 -33
  49. package/locales/ko.po +47 -33
  50. package/locales/locales.pot +37 -25
  51. package/locales/nl.po +50 -29
  52. package/locales/pl.po +49 -30
  53. package/locales/pt_BR.po +50 -30
  54. package/locales/zh_CN.po +51 -33
  55. package/locales/zh_TW.po +51 -33
  56. package/operations/stepper-bulk-type-firmware/index.d.ts.map +1 -1
  57. package/operations/stepper-bulk-type-software/index.d.ts.map +1 -1
  58. package/package.json +1 -1
  59. package/repository/firmware/index.d.ts.map +1 -1
  60. package/repository/software/index.d.ts.map +1 -1
  61. package/trusted-certificates/index.d.ts.map +1 -1
  62. package/widgets/implementations/datapoints-graph/index.d.ts.map +1 -1
  63. package/widgets/implementations/datapoints-table/index.d.ts +1 -1
  64. package/widgets/implementations/info-gauge/index.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/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, FormsModule } from '@angular/forms';\nimport { IManagedObject } from '@c8y/client';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport {\n AlertService,\n PickedFiles,\n ValidationPattern,\n IconDirective,\n C8yTranslateDirective,\n FormGroupComponent,\n TypeaheadComponent,\n ForOfDirective,\n ListItemComponent,\n HighlightComponent,\n RequiredInputPlaceholderDirective,\n FilePickerComponent,\n ProductExperienceDirective,\n C8yTranslatePipe\n} from '@c8y/ngx-components';\nimport {\n ModalModel,\n PRODUCT_EXPERIENCE_REPOSITORY_SHARED,\n RepositoryCategory,\n RepositoryService,\n RepositoryType,\n SoftwareTypeComponent\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';\nimport { NgIf, NgClass, AsyncPipe } from '@angular/common';\nimport { PopoverDirective } from 'ngx-bootstrap/popover';\n\n@Component({\n selector: 'c8y-add-software-software-modal',\n templateUrl: 'add-software-modal.component.html',\n imports: [\n IconDirective,\n C8yTranslateDirective,\n NgIf,\n FormsModule,\n FormGroupComponent,\n TypeaheadComponent,\n ForOfDirective,\n ListItemComponent,\n HighlightComponent,\n RequiredInputPlaceholderDirective,\n PopoverDirective,\n SoftwareTypeComponent,\n FilePickerComponent,\n ProductExperienceDirective,\n NgClass,\n AsyncPipe,\n C8yTranslatePipe\n ]\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 ValidationPattern = ValidationPattern;\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\n class=\"modal-title\"\n id=\"addSoftwareModalTitle\"\n translate\n >\n Add software\n </div>\n </div>\n <div\n class=\"p-16 text-center separator-bottom\"\n *ngIf=\"!softwarePreselected\"\n >\n <p\n class=\"text-medium text-16\"\n translate\n >\n Select or create new software\n </p>\n </div>\n <form\n class=\"d-contents\"\n autocomplete=\"off\"\n #softwareForm=\"ngForm\"\n (ngSubmit)=\"softwareForm.form.valid && save()\"\n >\n <div class=\"modal-inner-scroll\">\n <div\n class=\"modal-body\"\n id=\"addSoftwareModalDescription\"\n >\n <div [hidden]=\"softwarePreselected\">\n <c8y-form-group>\n <label\n for=\"softwareName\"\n translate\n >\n Software\n </label>\n <c8y-typeahead\n placeholder=\"{{ 'Select or enter' | translate }}\"\n name=\"softwareName\"\n [(ngModel)]=\"model.selected\"\n (onSearch)=\"onInput.next($event)\"\n [required]=\"true\"\n >\n <c8y-li\n class=\"p-l-8 p-r-8 c8y-list__item--link\"\n *c8yFor=\"\n let software of softwaresResult;\n loadMore: 'auto';\n notFound: notFoundTemplate\n \"\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\n class=\"bg-level-2 p-8\"\n *ngIf=\"(onInput | async)?.length > 0\"\n >\n <span translate>No match found.</span>\n <button\n class=\"btn btn-primary btn-xs m-l-8\"\n title=\"{{ 'Add new`software`' | translate }}\"\n type=\"button\"\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\n for=\"softwareDescription\"\n translate\n >\n Description\n </label>\n <input\n class=\"form-control\"\n id=\"softwareDescription\"\n placeholder=\"{{ 'e.g. Cloud connectivity software' | translate }}\"\n name=\"description\"\n autocomplete=\"off\"\n [(ngModel)]=\"model.description\"\n [disabled]=\"model.selected?.id\"\n [required]=\"true\"\n [pattern]=\"ValidationPattern.rules.noWhiteSpaceOnly.pattern\"\n />\n </c8y-form-group>\n\n <c8y-form-group>\n <label\n class=\"control-label\"\n for=\"softwareDeviceTypeFilter\"\n >\n {{ 'Device type filter' | translate }}\n <button\n class=\"btn-help\"\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 type=\"button\"\n ></button>\n </label>\n <input\n class=\"form-control\"\n id=\"softwareDeviceTypeFilter\"\n placeholder=\"{{ 'e.g.' | translate }} c8y_Linux\"\n name=\"softwareDeviceTypeFilter\"\n [(ngModel)]=\"model.deviceType\"\n [disabled]=\"model.selected?.id\"\n [pattern]=\"ValidationPattern.rules.noWhiteSpaceOnly.pattern\"\n />\n </c8y-form-group>\n\n <c8y-form-group>\n <label\n for=\"softwareType\"\n translate\n >\n Software type\n </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\n for=\"softwareVersion\"\n translate\n >\n Version\n </label>\n <input\n class=\"form-control\"\n id=\"softwareVersion\"\n placeholder=\"{{ 'e.g.' | translate }} 1.0.0\"\n name=\"version\"\n autocomplete=\"off\"\n [(ngModel)]=\"model.version\"\n [required]=\"true\"\n [pattern]=\"ValidationPattern.rules.noWhiteSpaceOnly.pattern\"\n />\n </c8y-form-group>\n\n <c8y-form-group>\n <div\n class=\"legend form-block m-t-40\"\n translate\n >\n Software file\n </div>\n <c8y-file-picker\n [maxAllowedFiles]=\"1\"\n [allowedUploadChoices]=\"['uploadBinary', 'uploadUrl', 'provided']\"\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 title=\"{{ 'Cancel' | translate }}\"\n type=\"button\"\n (click)=\"cancel()\"\n [disabled]=\"saving\"\n >\n {{ 'Cancel' | translate }}\n </button>\n\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Add software' | translate }}\"\n type=\"submit\"\n [ngClass]=\"{ 'btn-pending': saving }\"\n [disabled]=\"\n !softwareForm.form.valid ||\n softwareForm.form.pristine ||\n saving ||\n (!model.binary?.url && !model.binary?.file)\n \"\n 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 { Component, EventEmitter, OnInit } from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { IManagedObject, IResultList } from '@c8y/client';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport {\n ActionControl,\n AlertService,\n BuiltInActionType,\n Column,\n DataGridService,\n DataSourceModifier,\n ModalService,\n ServerSideDataCallback,\n ServerSideDataResult,\n Status,\n TitleComponent,\n BreadcrumbComponent,\n BreadcrumbItemComponent,\n ActionBarItemComponent,\n IconDirective,\n HelpComponent,\n DataGridComponent,\n EmptyStateContextDirective,\n EmptyStateComponent,\n ColumnDirective,\n C8yTranslatePipe\n} from '@c8y/ngx-components';\nimport {\n DescriptionGridColumn,\n DeviceTypeGridColumn,\n PRODUCT_EXPERIENCE_REPOSITORY_SHARED,\n RepositoryItemNameGridColumn,\n RepositoryService,\n RepositoryType,\n TypeGridColumn,\n VersionsGridColumn\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 { NgIf, NgFor } from '@angular/common';\n\n@Component({\n selector: 'c8y-software-list',\n templateUrl: 'software-list.component.html',\n imports: [\n TitleComponent,\n BreadcrumbComponent,\n BreadcrumbItemComponent,\n ActionBarItemComponent,\n IconDirective,\n HelpComponent,\n DataGridComponent,\n EmptyStateContextDirective,\n EmptyStateComponent,\n NgIf,\n NgFor,\n ColumnDirective,\n C8yTranslatePipe\n ]\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 RepositoryItemNameGridColumn({\n filterLabel: gettext('Filter software by name')\n }),\n new DescriptionGridColumn({\n filterLabel: gettext('Filter software by description'),\n placeholder: gettext('Cloud connectivity software')\n }),\n new DeviceTypeGridColumn({ filterLabel: gettext('Filter software by device type') }),\n new TypeGridColumn({\n header: gettext('Software type'),\n filterLabel: gettext('Filter by software type'),\n example: 'yum',\n path: 'softwareType',\n repositoryType: RepositoryType.SOFTWARE\n }),\n new VersionsGridColumn()\n ];\n actionControls: ActionControl[] = [];\n serverSideDataCallback: ServerSideDataCallback;\n pagination = {\n pageSize: 50,\n currentPage: 1\n };\n\n noResultsMessage = gettext('No results to display.');\n noDataMessage = gettext('No software to display.');\n noResultsSubtitle = gettext('Refine your search terms or check your spelling.');\n noDataSubtitle = gettext('Add a new software by clicking below.');\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 }\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 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 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 <c8y-ui-empty-state\n [icon]=\"stats?.size > 0 ? 'search' : 'c8y-tools'\"\n [title]=\"stats?.size > 0 ? (noResultsMessage | translate) : (noDataMessage | translate)\"\n [subtitle]=\"stats?.size > 0 ? (noResultsSubtitle | translate) : (noDataSubtitle | translate)\"\n *emptyStateContext=\"let stats\"\n [horizontal]=\"stats?.size > 0\"\n >\n <p *ngIf=\"stats?.size === 0\">\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 </c8y-ui-empty-state>\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 { gettext } from '@c8y/ngx-components/gettext';\nimport {\n AlertService,\n GainsightService,\n memoize,\n ModalService,\n Status,\n TitleComponent,\n BreadcrumbComponent,\n BreadcrumbItemComponent,\n ActionBarItemComponent,\n IconDirective,\n FormGroupComponent,\n RequiredInputPlaceholderDirective,\n C8yTranslateDirective,\n EmptyStateComponent,\n ListGroupComponent,\n ForOfDirective,\n ListItemComponent,\n ListItemIconComponent,\n ListItemBodyComponent,\n C8yTranslatePipe\n} from '@c8y/ngx-components';\nimport {\n PRODUCT_EXPERIENCE_REPOSITORY_SHARED,\n RepositoryService,\n SoftwareTypeComponent,\n FileDownloadComponent\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';\nimport { NgIf, NgClass, NgStyle, AsyncPipe } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { PopoverDirective } from 'ngx-bootstrap/popover';\nimport { TooltipDirective } from 'ngx-bootstrap/tooltip';\n\n@Component({\n selector: 'c8y-software-details',\n templateUrl: './software-details.component.html',\n imports: [\n TitleComponent,\n BreadcrumbComponent,\n BreadcrumbItemComponent,\n ActionBarItemComponent,\n NgIf,\n IconDirective,\n NgClass,\n FormGroupComponent,\n RequiredInputPlaceholderDirective,\n FormsModule,\n NgStyle,\n PopoverDirective,\n SoftwareTypeComponent,\n C8yTranslateDirective,\n EmptyStateComponent,\n ListGroupComponent,\n ForOfDirective,\n ListItemComponent,\n ListItemIconComponent,\n ListItemBodyComponent,\n FileDownloadComponent,\n TooltipDirective,\n AsyncPipe,\n C8yTranslatePipe\n ]\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 icon=\"c8y-management\"\n label=\"{{ 'Management' | translate }}\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n icon=\"c8y-tools\"\n path=\"#/software\"\n label=\"{{ 'Software repository' | translate }}\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n icon=\"c8y-tools\"\n label=\"{{ (software$ | async)?.name }}\"\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)=\"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 title=\"{{ 'Reload' | translate }}\"\n type=\"button\"\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 class=\"form-control\"\n [ngStyle]=\"{ 'width.ch': (software$ | async)?.name?.length + 2 || 31 }\"\n placeholder=\"{{ 'e.g. My software' | translate }}\"\n type=\"text\"\n required\n #nameInput\n [ngModel]=\"(software$ | async)?.name\"\n #nameModel=\"ngModel\"\n />\n <span></span>\n <div class=\"input-group-btn\">\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Save' | translate }}\"\n type=\"button\"\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 class=\"form-control\"\n [ngStyle]=\"{ 'width.ch': (software$ | async)?.description?.length + 2 || 31 }\"\n placeholder=\"{{ 'e.g. Cloud connectivity software' | translate }}\"\n type=\"text\"\n #descriptionInput\n [ngModel]=\"(software$ | async)?.description\"\n #descriptionModel=\"ngModel\"\n />\n <span></span>\n <div class=\"input-group-btn\">\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Save' | translate }}\"\n type=\"button\"\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 [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 type=\"button\"\n >\n <i c8yIcon=\"question-circle-o\"></i>\n </button>\n </label>\n <div class=\"input-group input-group-editable\">\n <input\n class=\"form-control\"\n [ngStyle]=\"{ 'width.ch': (software$ | async)?.type?.length + 2 || 31 }\"\n placeholder=\"{{ 'e.g.' | translate }} c8y_Linux\"\n type=\"text\"\n #deviceTypeInput\n [ngModel]=\"(software$ | async)?.c8y_Filter?.type\"\n #deviceTypeModel=\"ngModel\"\n />\n <span></span>\n <div class=\"input-group-btn\">\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Save' | translate }}\"\n type=\"button\"\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 [style]=\"{ 'width.ch': softwareTypeObject?.softwareType?.length + 2 || 31 }\"\n [softwareTypeMO]=\"softwareTypeObject\"\n (onSelectSoftware)=\"onSelectSoftwareType($event)\"\n ></c8y-software-type>\n <div class=\"input-group-btn\">\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Save' | translate }}\"\n type=\"button\"\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 [icon]=\"'c8y-tools'\"\n [title]=\"'No versions to display.' | translate\"\n [subtitle]=\"'Add a new version by clicking below.' | translate\"\n *ngIf=\"(baseVersions$ | async)?.data.length === 0\"\n >\n <p>\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Add software' | translate }}\"\n type=\"button\"\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 <ng-container\n *ngIf=\"baseVersion?.c8y_Software?.url === '$PROVIDED'; else fileDownload\"\n >\n <span title=\"{{ 'Provided by device' | translate }}\">\n {{ 'Provided by device' | translate }}\n </span>\n </ng-container>\n\n <ng-template #fileDownload>\n <span title=\"{{ getBinaryName$(baseVersion.c8y_Software.url) | async }}\">\n <c8y-file-download [url]=\"baseVersion.c8y_Software.url\"></c8y-file-download>\n </span>\n </ng-template>\n </p>\n </div>\n <div class=\"col-2 d-flex a-i-start\">\n <span\n class=\"label label-warning m-l-auto-sm\"\n *ngIf=\"isLegacy$ | async\"\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 title=\"{{ 'Delete' | translate }}\"\n type=\"button\"\n (click)=\"deleteBaseVersion(baseVersion)\"\n >\n <i c8yIcon=\"delete\"></i>\n {{ 'Delete' | translate }}\n </button>\n </div>\n </div>\n <div\n class=\"m-l-auto fit-h-20 hidden-xs\"\n *ngIf=\"!(isLegacy$ | async)\"\n >\n <button\n class=\"btn btn-dot text-danger showOnHover\"\n [attr.aria-label]=\"'Delete' | translate\"\n tooltip=\"{{ 'Delete' | translate }}\"\n type=\"button\"\n data-cy=\"software-details-component--Delete-button\"\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 } from '@c8y/ngx-components/gettext';\nimport { 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 { hookNavigator, hookRoute } from '@c8y/ngx-components';\nimport { SharedRepositoryModule } from '@c8y/ngx-components/repository/shared';\nimport { AddSoftwareModalComponent } from './add-software-modal.component';\nimport { SoftwareDetailsComponent } from './software-details.component';\nimport { SoftwareListComponent } from './software-list.component';\nimport { SoftwareRepositoryNavigationFactory } from './software-repository-navigation-factory';\n\n@NgModule({\n imports: [\n SharedRepositoryModule,\n SoftwareListComponent,\n SoftwareDetailsComponent,\n AddSoftwareModalComponent\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 { ServiceRegistry } from '@c8y/ngx-components';\nimport {\n DeviceSoftware,\n FilterCriteria,\n IAdvancedSoftwareService\n} from '@c8y/ngx-components/repository/shared';\nimport { head, 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 serviceRegistry: ServiceRegistry) {}\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 const advancedSoftwareService: IAdvancedSoftwareService = head(this.serviceRegistry.get('asm'));\n if (filterCriteria?.name) {\n set(queryFilter, 'name', `*${filterCriteria.name}*`);\n }\n if (filterCriteria?.softwareType) {\n set(queryFilter, 'type', `${filterCriteria.softwareType}`);\n }\n return 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/gettext';\nimport {\n ListGroupComponent,\n ForOfDirective,\n ListItemComponent,\n ListItemIconComponent,\n IconDirective,\n ListItemBodyComponent,\n C8yTranslateDirective,\n ProductExperienceDirective,\n C8yTranslatePipe\n} 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';\nimport { NgClass, NgIf } from '@angular/common';\nimport { TooltipDirective } from 'ngx-bootstrap/tooltip';\n\n@Component({\n selector: 'c8y-device-software-list',\n templateUrl: 'device-software-list.component.html',\n imports: [\n ListGroupComponent,\n ForOfDirective,\n ListItemComponent,\n NgClass,\n ListItemIconComponent,\n IconDirective,\n ListItemBodyComponent,\n C8yTranslateDirective,\n NgIf,\n TooltipDirective,\n ProductExperienceDirective,\n C8yTranslatePipe\n ]\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 { IOperation } from '@c8y/client';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport {\n IconDirective,\n C8yTranslateDirective,\n ProductExperienceDirective,\n C8yTranslatePipe\n} 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';\nimport { NgIf, NgClass, AsyncPipe } from '@angular/common';\nimport { OperationDetailsComponent } from '@c8y/ngx-components/operations/operation-details';\nimport { DeviceSoftwareListComponent } from './device-software-list.component';\n\n@Component({\n selector: 'c8y-device-software-changes',\n templateUrl: 'device-software-changes.component.html',\n imports: [\n IconDirective,\n C8yTranslateDirective,\n NgIf,\n OperationDetailsComponent,\n DeviceSoftwareListComponent,\n ProductExperienceDirective,\n NgClass,\n AsyncPipe,\n C8yTranslatePipe\n ]\n})\nexport class DeviceSoftwareChangesComponent implements OnChanges {\n PRODUCT_EXPERIENCE = PRODUCT_EXPERIENCE_REPOSITORY_SHARED;\n @Input() changes: DeviceSoftwareChange[];\n @Input() changesInProgress: boolean;\n @Input() deviceSoftwareChangesOperation: IOperation;\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\n class=\"card-title\"\n translate\n >\n Software changes\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 </div>\n <div\n class=\"flex-grow inner-scroll\"\n id=\"software-changes-list\"\n >\n <div\n class=\"card-block large-padding\"\n *ngIf=\"(changes$ | async).length === 0; else changesList\"\n >\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\n class=\"form-block legend\"\n translate\n >\n Installations`software`\n </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\n class=\"form-block legend\"\n translate\n >\n Removals`software`\n </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, QueriesUtil } from '@c8y/client';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport {\n ISelectModalObject,\n IUpdateItemEvent,\n ModalSelectionMode,\n C8yTranslateDirective,\n IconDirective,\n ProductExperienceDirective,\n C8yTranslatePipe\n} from '@c8y/ngx-components';\nimport {\n DeviceSoftware,\n DeviceSoftwareChange,\n FilterCriteria,\n PRODUCT_EXPERIENCE_REPOSITORY_SHARED,\n RepositorySelectModalComponent,\n RepositoryService,\n RepositoryType,\n SoftwareTypeComponent\n} from '@c8y/ngx-components/repository/shared';\nimport { get } from 'lodash-es';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { BehaviorSubject, Observable, Subject, combineLatest, from, of, pipe } from 'rxjs';\nimport {\n distinctUntilChanged,\n filter,\n map,\n mergeMap,\n shareReplay,\n switchMap,\n takeUntil,\n tap\n} from 'rxjs/operators';\nimport { NgIf, NgClass, AsyncPipe } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { DeviceSoftwareListComponent } from './device-software-list.component';\nimport { TooltipDirective } from 'ngx-bootstrap/tooltip';\n\n@Component({\n selector: 'c8y-installed-software',\n templateUrl: 'installed-software.component.html',\n imports: [\n C8yTranslateDirective,\n NgIf,\n FormsModule,\n IconDirective,\n SoftwareTypeComponent,\n DeviceSoftwareListComponent,\n NgClass,\n ProductExperienceDirective,\n TooltipDirective,\n AsyncPipe,\n C8yTranslatePipe\n ]\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() 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 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, IOperation, InventoryService, OperationStatus } from '@c8y/client';\nimport {\n ServiceRegistry,\n ActionBarItemComponent,\n IconDirective,\n C8yTranslatePipe\n} from '@c8y/ngx-components';\nimport {\n DeviceSoftware,\n DeviceSoftwareChange,\n IAdvancedSoftwareService,\n RepositoryService,\n RepositoryType\n} from '@c8y/ngx-components/repository/shared';\nimport { head } from 'lodash-es';\nimport { BehaviorSubject, Observable, of } from 'rxjs';\nimport { filter, map, switchMap, take } from 'rxjs/operators';\nimport { DeviceSoftwareService } from './device-software.service';\nimport { NgClass, AsyncPipe } from '@angular/common';\nimport { InstalledSoftwareComponent } from './installed-software.component';\nimport { DeviceSoftwareChangesComponent } from './device-software-changes.component';\n\n@Component({\n selector: 'c8y-software-device-tab',\n templateUrl: 'software-device-tab.component.html',\n imports: [\n ActionBarItemComponent,\n IconDirective,\n NgClass,\n InstalledSoftwareComponent,\n DeviceSoftwareChangesComponent,\n AsyncPipe,\n C8yTranslatePipe\n ]\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[]>;\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 serviceRegistry: ServiceRegistry\n ) {}\n\n async ngOnInit() {\n const advancedSoftwareService: IAdvancedSoftwareService | undefined = head(\n this.serviceRegistry.get('asm')\n );\n this.list$ = this.device$.pipe(\n switchMap(device =>\n advancedSoftwareService\n ? advancedSoftwareService\n .isASMAvailable()\n .then(isASMAvailable => ({ isASMAvailable, device }))\n : of({ isASMAvailable: false, 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 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 if ([OperationStatus.SUCCESSFUL, OperationStatus.FAILED].includes(operation?.status)) {\n this.changesOperation$.next(undefined);\n } else 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\n class=\"btn btn-link\"\n title=\"{{ 'Reload' | translate }}\"\n (click)=\"loadDevice()\"\n >\n <i\n c8yIcon=\"refresh\"\n [ngClass]=\"{ 'icon-spin': reloading }\"\n ></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 [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 [deviceSoftwareChangesOperation]=\"changesOperation$ | async\"\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 { ModuleWithProviders, NgModule } from '@angular/core';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { hookRoute, ViewContext } from '@c8y/ngx-components';\nimport { OperationDetailsModule } from '@c8y/ngx-components/operations/operation-details';\nimport { SharedRepositoryModule } from '@c8y/ngx-components/repository/shared';\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 SharedRepositoryModule,\n OperationDetailsModule,\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":["i2","i3","i1","i4","i5","i6","i7","i1.DeviceSoftwareService","filter","i4.DeviceSoftwareService","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/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 { AsyncPipe, NgClass } from '@angular/common';\nimport { Component, EventEmitter, Output, ViewChild } from '@angular/core';\nimport { FormsModule, NgForm } from '@angular/forms';\nimport { IManagedObject } from '@c8y/client';\nimport {\n AlertService,\n C8yTranslateDirective,\n C8yTranslatePipe,\n FilePickerComponent,\n FormGroupComponent,\n ForOfDirective,\n HighlightComponent,\n IconDirective,\n ListItemComponent,\n PickedFiles,\n ProductExperienceDirective,\n RequiredInputPlaceholderDirective,\n TypeaheadComponent,\n ValidationPattern\n} from '@c8y/ngx-components';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport {\n ModalModel,\n PRODUCT_EXPERIENCE_REPOSITORY_SHARED,\n RepositoryCategory,\n RepositoryService,\n RepositoryType,\n SoftwareTypeComponent\n} from '@c8y/ngx-components/repository/shared';\nimport { assign, get, isUndefined } from 'lodash-es';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { PopoverDirective } from 'ngx-bootstrap/popover';\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 imports: [\n IconDirective,\n C8yTranslateDirective,\n FormsModule,\n FormGroupComponent,\n TypeaheadComponent,\n ForOfDirective,\n ListItemComponent,\n HighlightComponent,\n RequiredInputPlaceholderDirective,\n PopoverDirective,\n SoftwareTypeComponent,\n FilePickerComponent,\n ProductExperienceDirective,\n NgClass,\n AsyncPipe,\n C8yTranslatePipe\n ]\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 ValidationPattern = ValidationPattern;\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\n class=\"modal-title\"\n id=\"addSoftwareModalTitle\"\n translate\n >\n Add software\n </div>\n </div>\n @if (!softwarePreselected) {\n <div class=\"p-16 text-center separator-bottom\">\n <p\n class=\"text-medium text-16\"\n translate\n >\n Select or create new software\n </p>\n </div>\n }\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\n class=\"modal-body\"\n id=\"addSoftwareModalDescription\"\n >\n <div [hidden]=\"softwarePreselected\">\n <c8y-form-group>\n <label\n for=\"softwareName\"\n translate\n >\n Software\n </label>\n <c8y-typeahead\n placeholder=\"{{ 'Select or enter' | translate }}\"\n name=\"softwareName\"\n [(ngModel)]=\"model.selected\"\n (onSearch)=\"onInput.next($event)\"\n [required]=\"true\"\n >\n <c8y-li\n class=\"p-l-8 p-r-8 c8y-list__item--link\"\n *c8yFor=\"\n let software of softwaresResult;\n loadMore: 'auto';\n notFound: notFoundTemplate\n \"\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 @if ((onInput | async)?.length > 0) {\n <c8y-li class=\"bg-level-2 p-8\">\n <span translate>No match found.</span>\n <button\n class=\"btn btn-primary btn-xs m-l-8\"\n title=\"{{ 'Add new`software`' | translate }}\"\n type=\"button\"\n >\n {{ 'Add new`software`' | translate }}\n </button>\n </c8y-li>\n }\n </ng-template>\n </c8y-typeahead>\n </c8y-form-group>\n\n <c8y-form-group>\n <label\n for=\"softwareDescription\"\n translate\n >\n Description\n </label>\n <input\n class=\"form-control\"\n id=\"softwareDescription\"\n placeholder=\"{{ 'e.g. Cloud connectivity software' | translate }}\"\n name=\"description\"\n autocomplete=\"off\"\n [(ngModel)]=\"model.description\"\n [disabled]=\"model.selected?.id\"\n [required]=\"true\"\n [pattern]=\"ValidationPattern.rules.noWhiteSpaceOnly.pattern\"\n />\n </c8y-form-group>\n\n <c8y-form-group>\n <label\n class=\"control-label\"\n for=\"softwareDeviceTypeFilter\"\n >\n {{ 'Device type filter' | translate }}\n <button\n class=\"btn-help\"\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 type=\"button\"\n ></button>\n </label>\n <input\n class=\"form-control\"\n id=\"softwareDeviceTypeFilter\"\n placeholder=\"{{ 'e.g.' | translate }} c8y_Linux\"\n name=\"softwareDeviceTypeFilter\"\n [(ngModel)]=\"model.deviceType\"\n [disabled]=\"model.selected?.id\"\n [pattern]=\"ValidationPattern.rules.noWhiteSpaceOnly.pattern\"\n />\n </c8y-form-group>\n\n <c8y-form-group>\n <label\n for=\"softwareType\"\n translate\n >\n Software type\n </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\n for=\"softwareVersion\"\n translate\n >\n Version\n </label>\n <input\n class=\"form-control\"\n id=\"softwareVersion\"\n placeholder=\"{{ 'e.g.' | translate }} 1.0.0\"\n name=\"version\"\n autocomplete=\"off\"\n [(ngModel)]=\"model.version\"\n [required]=\"true\"\n [pattern]=\"ValidationPattern.rules.noWhiteSpaceOnly.pattern\"\n />\n </c8y-form-group>\n\n <c8y-form-group>\n <div\n class=\"legend form-block m-t-40\"\n translate\n >\n Software file\n </div>\n <c8y-file-picker\n [maxAllowedFiles]=\"1\"\n [allowedUploadChoices]=\"['uploadBinary', 'uploadUrl', 'provided']\"\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 title=\"{{ 'Cancel' | translate }}\"\n type=\"button\"\n (click)=\"cancel()\"\n [disabled]=\"saving\"\n >\n {{ 'Cancel' | translate }}\n </button>\n\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Add software' | translate }}\"\n type=\"submit\"\n [ngClass]=\"{ 'btn-pending': saving }\"\n [disabled]=\"\n !softwareForm.form.valid ||\n softwareForm.form.pristine ||\n saving ||\n (model.binary?.url == null && !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 { Component, EventEmitter, OnInit } from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { IManagedObject, IResultList } from '@c8y/client';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport {\n ActionControl,\n AlertService,\n BuiltInActionType,\n Column,\n DataGridService,\n DataSourceModifier,\n ModalService,\n ServerSideDataCallback,\n ServerSideDataResult,\n Status,\n TitleComponent,\n BreadcrumbComponent,\n BreadcrumbItemComponent,\n ActionBarItemComponent,\n IconDirective,\n HelpComponent,\n DataGridComponent,\n EmptyStateContextDirective,\n EmptyStateComponent,\n ColumnDirective,\n C8yTranslatePipe\n} from '@c8y/ngx-components';\nimport {\n DescriptionGridColumn,\n DeviceTypeGridColumn,\n PRODUCT_EXPERIENCE_REPOSITORY_SHARED,\n RepositoryItemNameGridColumn,\n RepositoryService,\n RepositoryType,\n TypeGridColumn,\n VersionsGridColumn\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 { NgIf, NgFor } from '@angular/common';\n\n@Component({\n selector: 'c8y-software-list',\n templateUrl: 'software-list.component.html',\n imports: [\n TitleComponent,\n BreadcrumbComponent,\n BreadcrumbItemComponent,\n ActionBarItemComponent,\n IconDirective,\n HelpComponent,\n DataGridComponent,\n EmptyStateContextDirective,\n EmptyStateComponent,\n NgIf,\n NgFor,\n ColumnDirective,\n C8yTranslatePipe\n ]\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 RepositoryItemNameGridColumn({\n filterLabel: gettext('Filter software by name')\n }),\n new DescriptionGridColumn({\n filterLabel: gettext('Filter software by description'),\n placeholder: gettext('Cloud connectivity software')\n }),\n new DeviceTypeGridColumn({ filterLabel: gettext('Filter software by device type') }),\n new TypeGridColumn({\n header: gettext('Software type'),\n filterLabel: gettext('Filter by software type'),\n example: 'yum',\n path: 'softwareType',\n repositoryType: RepositoryType.SOFTWARE\n }),\n new VersionsGridColumn()\n ];\n actionControls: ActionControl[] = [];\n serverSideDataCallback: ServerSideDataCallback;\n pagination = {\n pageSize: 50,\n currentPage: 1\n };\n\n noResultsMessage = gettext('No results to display.');\n noDataMessage = gettext('No software to display.');\n noResultsSubtitle = gettext('Refine your search terms or check your spelling.');\n noDataSubtitle = gettext('Add a new software by clicking below.');\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 }\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 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 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 <c8y-ui-empty-state\n [icon]=\"stats?.size > 0 ? 'search' : 'c8y-tools'\"\n [title]=\"stats?.size > 0 ? (noResultsMessage | translate) : (noDataMessage | translate)\"\n [subtitle]=\"stats?.size > 0 ? (noResultsSubtitle | translate) : (noDataSubtitle | translate)\"\n *emptyStateContext=\"let stats\"\n [horizontal]=\"stats?.size > 0\"\n >\n <p *ngIf=\"stats?.size === 0\">\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 </c8y-ui-empty-state>\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 { AsyncPipe, NgClass, NgStyle } from '@angular/common';\nimport { Component, OnDestroy, OnInit, ViewChild } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { IManagedObject, InventoryService, IResultList } from '@c8y/client';\nimport {\n ActionBarItemComponent,\n AlertService,\n BreadcrumbComponent,\n BreadcrumbItemComponent,\n C8yTranslateDirective,\n C8yTranslatePipe,\n EmptyStateComponent,\n FormGroupComponent,\n ForOfDirective,\n GainsightService,\n IconDirective,\n ListGroupComponent,\n ListItemBodyComponent,\n ListItemComponent,\n ListItemIconComponent,\n memoize,\n ModalService,\n RequiredInputPlaceholderDirective,\n Status,\n TitleComponent\n} from '@c8y/ngx-components';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport {\n FileDownloadComponent,\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 { PopoverDirective } from 'ngx-bootstrap/popover';\nimport { TooltipDirective } from 'ngx-bootstrap/tooltip';\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 imports: [\n TitleComponent,\n BreadcrumbComponent,\n BreadcrumbItemComponent,\n ActionBarItemComponent,\n IconDirective,\n NgClass,\n FormGroupComponent,\n RequiredInputPlaceholderDirective,\n FormsModule,\n NgStyle,\n PopoverDirective,\n SoftwareTypeComponent,\n C8yTranslateDirective,\n EmptyStateComponent,\n ListGroupComponent,\n ForOfDirective,\n ListItemComponent,\n ListItemIconComponent,\n ListItemBodyComponent,\n FileDownloadComponent,\n TooltipDirective,\n AsyncPipe,\n C8yTranslatePipe\n ]\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 icon=\"c8y-management\"\n label=\"{{ 'Management' | translate }}\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n icon=\"c8y-tools\"\n path=\"#/software\"\n label=\"{{ 'Software repository' | translate }}\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n icon=\"c8y-tools\"\n label=\"{{ (software$ | async)?.name }}\"\n ></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<c8y-action-bar-item [placement]=\"'right'\">\n @if (!(isLegacy$ | async)) {\n <button\n class=\"btn btn-link\"\n title=\"{{ 'Add software' | translate }}\"\n type=\"button\"\n (click)=\"addBaseVersion()\"\n >\n <i c8yIcon=\"plus-circle\"></i>\n {{ 'Add software' | translate }}\n </button>\n }\n</c8y-action-bar-item>\n\n<c8y-action-bar-item [placement]=\"'right'\">\n <button\n class=\"btn btn-link\"\n title=\"{{ 'Reload' | translate }}\"\n type=\"button\"\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 class=\"form-control\"\n [ngStyle]=\"{ 'width.ch': (software$ | async)?.name?.length + 2 || 31 }\"\n placeholder=\"{{ 'e.g. My software' | translate }}\"\n type=\"text\"\n required\n #nameInput\n [ngModel]=\"(software$ | async)?.name\"\n #nameModel=\"ngModel\"\n />\n <span></span>\n <div class=\"input-group-btn\">\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Save' | translate }}\"\n type=\"button\"\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 class=\"form-control\"\n [ngStyle]=\"{ 'width.ch': (software$ | async)?.description?.length + 2 || 31 }\"\n placeholder=\"{{ 'e.g. Cloud connectivity software' | translate }}\"\n type=\"text\"\n #descriptionInput\n [ngModel]=\"(software$ | async)?.description\"\n #descriptionModel=\"ngModel\"\n />\n <span></span>\n <div class=\"input-group-btn\">\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Save' | translate }}\"\n type=\"button\"\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 [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 type=\"button\"\n >\n <i c8yIcon=\"question-circle-o\"></i>\n </button>\n </label>\n <div class=\"input-group input-group-editable\">\n <input\n class=\"form-control\"\n [ngStyle]=\"{ 'width.ch': (software$ | async)?.type?.length + 2 || 31 }\"\n placeholder=\"{{ 'e.g.' | translate }} c8y_Linux\"\n type=\"text\"\n #deviceTypeInput\n [ngModel]=\"(software$ | async)?.c8y_Filter?.type\"\n #deviceTypeModel=\"ngModel\"\n />\n <span></span>\n <div class=\"input-group-btn\">\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Save' | translate }}\"\n type=\"button\"\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 [style]=\"{ 'width.ch': softwareTypeObject?.softwareType?.length + 2 || 31 }\"\n [softwareTypeMO]=\"softwareTypeObject\"\n (onSelectSoftware)=\"onSelectSoftwareType($event)\"\n ></c8y-software-type>\n <div class=\"input-group-btn\">\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Save' | translate }}\"\n type=\"button\"\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 @if ((baseVersions$ | async)?.data.length === 0) {\n <c8y-ui-empty-state\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 title=\"{{ 'Add software' | translate }}\"\n type=\"button\"\n (click)=\"addBaseVersion()\"\n >\n {{ 'Add software' | translate }}\n </button>\n </p>\n </c8y-ui-empty-state>\n }\n\n @if ((baseVersions$ | async)?.data.length > 0) {\n <c8y-list-group>\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 <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 @if (baseVersion?.c8y_Software?.url === '') {\n <span title=\"{{ 'Provided by device' | translate }}\">\n {{ 'Provided by device' | translate }}\n </span>\n } @else {\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 }\n </p>\n </div>\n <div class=\"col-2 d-flex a-i-start\">\n @if (isLegacy$ | async) {\n <span class=\"label label-warning m-l-auto-sm\">\n {{ 'Legacy' | translate }}\n </span>\n }\n @if (!(isLegacy$ | async)) {\n <div class=\"fit-h-20\">\n <button\n class=\"btn btn-danger btn-xs visible-xs m-l-auto m-r-8 m-t-8\"\n title=\"{{ 'Delete' | translate }}\"\n type=\"button\"\n (click)=\"deleteBaseVersion(baseVersion)\"\n >\n <i c8yIcon=\"delete\"></i>\n {{ 'Delete' | translate }}\n </button>\n </div>\n }\n </div>\n @if (!(isLegacy$ | async)) {\n <div class=\"m-l-auto fit-h-20 hidden-xs\">\n <button\n class=\"btn btn-dot text-danger showOnHover\"\n [attr.aria-label]=\"'Delete' | translate\"\n tooltip=\"{{ 'Delete' | translate }}\"\n type=\"button\"\n data-cy=\"software-details-component--Delete-button\"\n [delay]=\"500\"\n (click)=\"deleteBaseVersion(baseVersion)\"\n >\n <i c8yIcon=\"delete\"></i>\n </button>\n </div>\n }\n </c8y-li-body>\n </c8y-li>\n </c8y-list-group>\n }\n </div>\n </div>\n </div>\n </div>\n</div>\n","import { Injectable } from '@angular/core';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { 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 { hookNavigator, hookRoute } from '@c8y/ngx-components';\nimport { SharedRepositoryModule } from '@c8y/ngx-components/repository/shared';\nimport { AddSoftwareModalComponent } from './add-software-modal.component';\nimport { SoftwareDetailsComponent } from './software-details.component';\nimport { SoftwareListComponent } from './software-list.component';\nimport { SoftwareRepositoryNavigationFactory } from './software-repository-navigation-factory';\n\n@NgModule({\n imports: [\n SharedRepositoryModule,\n SoftwareListComponent,\n SoftwareDetailsComponent,\n AddSoftwareModalComponent\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 { ServiceRegistry } from '@c8y/ngx-components';\nimport {\n DeviceSoftware,\n FilterCriteria,\n IAdvancedSoftwareService\n} from '@c8y/ngx-components/repository/shared';\nimport { head, 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 serviceRegistry: ServiceRegistry) {}\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 const advancedSoftwareService: IAdvancedSoftwareService = head(this.serviceRegistry.get('asm'));\n if (filterCriteria?.name) {\n set(queryFilter, 'name', `*${filterCriteria.name}*`);\n }\n if (filterCriteria?.softwareType) {\n set(queryFilter, 'type', `${filterCriteria.softwareType}`);\n }\n return 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/gettext';\nimport {\n ListGroupComponent,\n ForOfDirective,\n ListItemComponent,\n ListItemIconComponent,\n IconDirective,\n ListItemBodyComponent,\n C8yTranslateDirective,\n ProductExperienceDirective,\n C8yTranslatePipe\n} 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';\nimport { NgClass, NgIf } from '@angular/common';\nimport { TooltipDirective } from 'ngx-bootstrap/tooltip';\n\n@Component({\n selector: 'c8y-device-software-list',\n templateUrl: 'device-software-list.component.html',\n imports: [\n ListGroupComponent,\n ForOfDirective,\n ListItemComponent,\n NgClass,\n ListItemIconComponent,\n IconDirective,\n ListItemBodyComponent,\n C8yTranslateDirective,\n NgIf,\n TooltipDirective,\n ProductExperienceDirective,\n C8yTranslatePipe\n ]\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 { IOperation } from '@c8y/client';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport {\n IconDirective,\n C8yTranslateDirective,\n ProductExperienceDirective,\n C8yTranslatePipe\n} 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';\nimport { NgIf, NgClass, AsyncPipe } from '@angular/common';\nimport { OperationDetailsComponent } from '@c8y/ngx-components/operations/operation-details';\nimport { DeviceSoftwareListComponent } from './device-software-list.component';\n\n@Component({\n selector: 'c8y-device-software-changes',\n templateUrl: 'device-software-changes.component.html',\n imports: [\n IconDirective,\n C8yTranslateDirective,\n NgIf,\n OperationDetailsComponent,\n DeviceSoftwareListComponent,\n ProductExperienceDirective,\n NgClass,\n AsyncPipe,\n C8yTranslatePipe\n ]\n})\nexport class DeviceSoftwareChangesComponent implements OnChanges {\n PRODUCT_EXPERIENCE = PRODUCT_EXPERIENCE_REPOSITORY_SHARED;\n @Input() changes: DeviceSoftwareChange[];\n @Input() changesInProgress: boolean;\n @Input() deviceSoftwareChangesOperation: IOperation;\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\n class=\"card-title\"\n translate\n >\n Software changes\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 </div>\n <div\n class=\"flex-grow inner-scroll\"\n id=\"software-changes-list\"\n >\n <div\n class=\"card-block large-padding\"\n *ngIf=\"(changes$ | async).length === 0; else changesList\"\n >\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\n class=\"form-block legend\"\n translate\n >\n Installations`software`\n </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\n class=\"form-block legend\"\n translate\n >\n Removals`software`\n </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, QueriesUtil } from '@c8y/client';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport {\n ISelectModalObject,\n IUpdateItemEvent,\n ModalSelectionMode,\n C8yTranslateDirective,\n IconDirective,\n ProductExperienceDirective,\n C8yTranslatePipe\n} from '@c8y/ngx-components';\nimport {\n DeviceSoftware,\n DeviceSoftwareChange,\n FilterCriteria,\n PRODUCT_EXPERIENCE_REPOSITORY_SHARED,\n RepositorySelectModalComponent,\n RepositoryService,\n RepositoryType,\n SoftwareTypeComponent\n} from '@c8y/ngx-components/repository/shared';\nimport { get } from 'lodash-es';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { BehaviorSubject, Observable, Subject, combineLatest, from, of, pipe } from 'rxjs';\nimport {\n distinctUntilChanged,\n filter,\n map,\n mergeMap,\n shareReplay,\n switchMap,\n takeUntil,\n tap\n} from 'rxjs/operators';\nimport { NgIf, NgClass, AsyncPipe } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { DeviceSoftwareListComponent } from './device-software-list.component';\nimport { TooltipDirective } from 'ngx-bootstrap/tooltip';\n\n@Component({\n selector: 'c8y-installed-software',\n templateUrl: 'installed-software.component.html',\n imports: [\n C8yTranslateDirective,\n NgIf,\n FormsModule,\n IconDirective,\n SoftwareTypeComponent,\n DeviceSoftwareListComponent,\n NgClass,\n ProductExperienceDirective,\n TooltipDirective,\n AsyncPipe,\n C8yTranslatePipe\n ]\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() 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 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, IOperation, InventoryService, OperationStatus } from '@c8y/client';\nimport {\n ServiceRegistry,\n ActionBarItemComponent,\n IconDirective,\n C8yTranslatePipe\n} from '@c8y/ngx-components';\nimport {\n DeviceSoftware,\n DeviceSoftwareChange,\n IAdvancedSoftwareService,\n RepositoryService,\n RepositoryType\n} from '@c8y/ngx-components/repository/shared';\nimport { head } from 'lodash-es';\nimport { BehaviorSubject, Observable, of } from 'rxjs';\nimport { filter, map, switchMap, take } from 'rxjs/operators';\nimport { DeviceSoftwareService } from './device-software.service';\nimport { NgClass, AsyncPipe } from '@angular/common';\nimport { InstalledSoftwareComponent } from './installed-software.component';\nimport { DeviceSoftwareChangesComponent } from './device-software-changes.component';\n\n@Component({\n selector: 'c8y-software-device-tab',\n templateUrl: 'software-device-tab.component.html',\n imports: [\n ActionBarItemComponent,\n IconDirective,\n NgClass,\n InstalledSoftwareComponent,\n DeviceSoftwareChangesComponent,\n AsyncPipe,\n C8yTranslatePipe\n ]\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[]>;\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 serviceRegistry: ServiceRegistry\n ) {}\n\n async ngOnInit() {\n const advancedSoftwareService: IAdvancedSoftwareService | undefined = head(\n this.serviceRegistry.get('asm')\n );\n this.list$ = this.device$.pipe(\n switchMap(device =>\n advancedSoftwareService\n ? advancedSoftwareService\n .isASMAvailable()\n .then(isASMAvailable => ({ isASMAvailable, device }))\n : of({ isASMAvailable: false, 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 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 if ([OperationStatus.SUCCESSFUL, OperationStatus.FAILED].includes(operation?.status)) {\n this.changesOperation$.next(undefined);\n } else 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\n class=\"btn btn-link\"\n title=\"{{ 'Reload' | translate }}\"\n (click)=\"loadDevice()\"\n >\n <i\n c8yIcon=\"refresh\"\n [ngClass]=\"{ 'icon-spin': reloading }\"\n ></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 [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 [deviceSoftwareChangesOperation]=\"changesOperation$ | async\"\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 { ModuleWithProviders, NgModule } from '@angular/core';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { hookRoute, ViewContext } from '@c8y/ngx-components';\nimport { OperationDetailsModule } from '@c8y/ngx-components/operations/operation-details';\nimport { SharedRepositoryModule } from '@c8y/ngx-components/repository/shared';\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 SharedRepositoryModule,\n OperationDetailsModule,\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":["i2","i3","i1","i4","i5","i6","i7","i1.DeviceSoftwareService","filter","i4.DeviceSoftwareService","i1.SoftwareRepositoryDeviceTabModule","i2.SoftwareRepositoryListModule"],"mappings":"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"}