@c8y/ngx-components 1019.2.4 → 1019.2.8
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.
- package/core/common/forOf.directive.d.ts +10 -1
- package/core/common/forOf.directive.d.ts.map +1 -1
- package/core/common/geo.service.d.ts +9 -0
- package/core/common/geo.service.d.ts.map +1 -0
- package/core/common/index.d.ts +1 -0
- package/core/common/index.d.ts.map +1 -1
- package/core/common/load-more.component.d.ts +1 -0
- package/core/common/load-more.component.d.ts.map +1 -1
- package/core/core.module.d.ts +50 -49
- package/core/core.module.d.ts.map +1 -1
- package/core/index.d.ts +1 -0
- package/core/index.d.ts.map +1 -1
- package/core/realtime/realtime-button.component.d.ts +5 -2
- package/core/realtime/realtime-button.component.d.ts.map +1 -1
- package/core/router/context-route.service.d.ts +6 -5
- package/core/router/context-route.service.d.ts.map +1 -1
- package/core/time-interval/index.d.ts +3 -0
- package/core/time-interval/index.d.ts.map +1 -0
- package/core/time-interval/time-interval.component.d.ts +26 -0
- package/core/time-interval/time-interval.component.d.ts.map +1 -0
- package/core/time-interval/time-interval.model.d.ts +33 -0
- package/core/time-interval/time-interval.model.d.ts.map +1 -0
- package/esm2022/context-dashboard/report-dashboard/report-dashboard-list.component.mjs +1 -1
- package/esm2022/core/audit-log/audit-log.component.mjs +1 -1
- package/esm2022/core/bootstrap/bootstrap.component.mjs +3 -3
- package/esm2022/core/common/forOf.directive.mjs +18 -2
- package/esm2022/core/common/geo.service.mjs +30 -0
- package/esm2022/core/common/index.mjs +2 -1
- package/esm2022/core/common/load-more.component.mjs +5 -2
- package/esm2022/core/core.module.mjs +11 -7
- package/esm2022/core/dynamic-forms/typeahead/typeahead.type.component.mjs +1 -1
- package/esm2022/core/index.mjs +2 -1
- package/esm2022/core/realtime/realtime-button.component.mjs +10 -4
- package/esm2022/core/router/context-route.service.mjs +10 -4
- package/esm2022/core/search/search-input.component.mjs +1 -1
- package/esm2022/core/time-interval/index.mjs +3 -0
- package/esm2022/core/time-interval/time-interval.component.mjs +85 -0
- package/esm2022/core/time-interval/time-interval.model.mjs +54 -0
- package/esm2022/datapoint-library/list/datapoint-library-list.component.mjs +2 -2
- package/esm2022/datapoint-selector/datapoint-selector-list-item/datapoint-selector-list-item.component.mjs +1 -1
- package/esm2022/device-profile/device-profile-list.component.mjs +1 -1
- package/esm2022/device-profile/device-tab-profile/device-tab-profile.component.mjs +1 -1
- package/esm2022/device-shell/shell/shell.component.mjs +1 -1
- package/esm2022/diagnostics/diagnostics.component.mjs +1 -1
- package/esm2022/ecosystem/applications/install-from-package/install-from-package.component.mjs +1 -1
- package/esm2022/ecosystem/shared/package-version-select/package-version-select.component.mjs +1 -1
- package/esm2022/location/location.component.mjs +1 -1
- package/esm2022/map/cluster-map.component.mjs +7 -7
- package/esm2022/map/map.component.mjs +92 -36
- package/esm2022/map/map.model.mjs +3 -2
- package/esm2022/operations/bulk-operations-list/bulk-operations-list.component.mjs +1 -1
- package/esm2022/operations/bulk-single-operations-list/single-operations-list.component.mjs +1 -1
- package/esm2022/operations/operations-list/operations-list.component.mjs +1 -1
- package/esm2022/operations/operations-timeline/operations-timeline.component.mjs +1 -1
- package/esm2022/operations/stepper-bulk-type-configuration/stepper-bulk-type-configuration.component.mjs +1 -1
- package/esm2022/operations/stepper-bulk-type-device-profile/select-device-profile-step.component.mjs +1 -1
- package/esm2022/operations/stepper-bulk-type-firmware/select-firmware.component.mjs +1 -1
- package/esm2022/operations/stepper-bulk-type-firmware/version-or-patch.component.mjs +1 -1
- package/esm2022/operations/stepper-bulk-type-software/select-software-step.component.mjs +1 -1
- package/esm2022/protocol-lpwan/lpwan-set-connections.component.mjs +1 -1
- package/esm2022/protocol-lpwan/lpwan-set-device-protocol.component.mjs +1 -1
- package/esm2022/repository/configuration/list/configuration-detail.component.mjs +1 -1
- package/esm2022/repository/configuration/list/configuration-list.component.mjs +1 -1
- package/esm2022/repository/firmware/list/add-firmware-modal.component.mjs +1 -1
- package/esm2022/repository/firmware/list/add-firmware-patch-modal.component.mjs +1 -1
- package/esm2022/repository/firmware/list/firmware-details.component.mjs +1 -1
- package/esm2022/repository/firmware/list/firmware-list.component.mjs +1 -1
- package/esm2022/repository/shared/software-type/software-type.component.mjs +1 -1
- package/esm2022/repository/software/device-tab/device-software-list.component.mjs +1 -1
- package/esm2022/repository/software/list/add-software-modal.component.mjs +1 -1
- package/esm2022/repository/software/list/columns/software-type.filtering-form-renderer.component.mjs +1 -1
- package/esm2022/repository/software/list/software-details.component.mjs +1 -1
- package/esm2022/sub-assets/location/asset-location.component.mjs +1 -1
- package/esm2022/tracking/c8y-ngx-components-tracking.mjs +5 -0
- package/esm2022/tracking/index.mjs +6 -0
- package/esm2022/tracking/tracking-marker-popup.component.mjs +34 -0
- package/esm2022/tracking/tracking-tab.guard.mjs +25 -0
- package/esm2022/tracking/tracking.component.mjs +92 -0
- package/esm2022/tracking/tracking.feature.mjs +16 -0
- package/esm2022/tracking/tracking.service.mjs +124 -0
- package/esm2022/trusted-certificates/crl/crl-settings.component.mjs +5 -5
- package/esm2022/trusted-certificates/list/trusted-certificate-list.component.mjs +1 -1
- package/esm2022/widgets/implementations/map/map-widget-config.component.mjs +2 -2
- package/fesm2022/c8y-ngx-components-context-dashboard.mjs +1 -1
- package/fesm2022/c8y-ngx-components-context-dashboard.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-datapoint-library-list.mjs +1 -1
- package/fesm2022/c8y-ngx-components-datapoint-library-list.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-datapoint-selector.mjs +1 -1
- package/fesm2022/c8y-ngx-components-datapoint-selector.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-device-profile.mjs +2 -2
- package/fesm2022/c8y-ngx-components-device-profile.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-device-shell.mjs +1 -1
- package/fesm2022/c8y-ngx-components-device-shell.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-diagnostics.mjs +1 -1
- package/fesm2022/c8y-ngx-components-diagnostics.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-ecosystem-shared.mjs +1 -1
- package/fesm2022/c8y-ngx-components-ecosystem-shared.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-ecosystem.mjs +1 -1
- package/fesm2022/c8y-ngx-components-ecosystem.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-location.mjs +1 -1
- package/fesm2022/c8y-ngx-components-location.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-map.mjs +95 -38
- package/fesm2022/c8y-ngx-components-map.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-bulk-operations-list.mjs +1 -1
- package/fesm2022/c8y-ngx-components-operations-bulk-operations-list.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-bulk-single-operations-list.mjs +1 -1
- package/fesm2022/c8y-ngx-components-operations-bulk-single-operations-list.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-operations-list.mjs +1 -1
- package/fesm2022/c8y-ngx-components-operations-operations-list.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-operations-timeline.mjs +1 -1
- package/fesm2022/c8y-ngx-components-operations-operations-timeline.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-configuration.mjs +1 -1
- package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-configuration.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-device-profile.mjs +1 -1
- package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-device-profile.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-firmware.mjs +2 -2
- package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-firmware.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-software.mjs +1 -1
- package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-software.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-protocol-lpwan.mjs +2 -2
- package/fesm2022/c8y-ngx-components-protocol-lpwan.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-repository-configuration.mjs +2 -2
- package/fesm2022/c8y-ngx-components-repository-configuration.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-repository-firmware.mjs +4 -4
- package/fesm2022/c8y-ngx-components-repository-firmware.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-repository-shared.mjs +1 -1
- package/fesm2022/c8y-ngx-components-repository-shared.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-repository-software.mjs +4 -4
- package/fesm2022/c8y-ngx-components-repository-software.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-sub-assets.mjs +1 -1
- package/fesm2022/c8y-ngx-components-sub-assets.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-tracking.mjs +271 -0
- package/fesm2022/c8y-ngx-components-tracking.mjs.map +1 -0
- package/fesm2022/c8y-ngx-components-trusted-certificates.mjs +5 -5
- package/fesm2022/c8y-ngx-components-trusted-certificates.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-map.mjs +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-map.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components.mjs +204 -16
- package/fesm2022/c8y-ngx-components.mjs.map +1 -1
- package/locales/de.po +158 -83
- package/locales/en.po +6 -0
- package/locales/fr.po +342 -186
- package/locales/locales.pot +34 -28
- package/locales/nl.po +326 -170
- package/locales/pt_BR.po +342 -186
- package/map/cluster-map.component.d.ts +3 -3
- package/map/cluster-map.component.d.ts.map +1 -1
- package/map/map.component.d.ts +17 -7
- package/map/map.component.d.ts.map +1 -1
- package/map/map.model.d.ts +14 -6
- package/map/map.model.d.ts.map +1 -1
- package/package.json +1 -1
- package/tracking/c8y-ngx-components-tracking.d.ts.map +1 -0
- package/tracking/index.d.ts +6 -0
- package/tracking/index.d.ts.map +1 -0
- package/tracking/tracking-marker-popup.component.d.ts +17 -0
- package/tracking/tracking-marker-popup.component.d.ts.map +1 -0
- package/tracking/tracking-tab.guard.d.ts +12 -0
- package/tracking/tracking-tab.guard.d.ts.map +1 -0
- package/tracking/tracking.component.d.ts +33 -0
- package/tracking/tracking.component.d.ts.map +1 -0
- package/tracking/tracking.feature.d.ts +3 -0
- package/tracking/tracking.feature.d.ts.map +1 -0
- package/tracking/tracking.service.d.ts +38 -0
- package/tracking/tracking.service.d.ts.map +1 -0
- package/trusted-certificates/crl/crl-settings.component.d.ts +1 -1
- package/trusted-certificates/crl/crl-settings.component.d.ts.map +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"c8y-ngx-components-operations-stepper-bulk-type-firmware.mjs","sources":["../../operations/stepper-bulk-type-firmware/version-or-patch.component.ts","../../operations/stepper-bulk-type-firmware/version-or-patch.component.html","../../operations/stepper-bulk-type-firmware/select-firmware.component.ts","../../operations/stepper-bulk-type-firmware/select-firmware.component.html","../../operations/stepper-bulk-type-firmware/stepper-bulk-type-firmware.component.ts","../../operations/stepper-bulk-type-firmware/stepper-bulk-type-firmware.component.html","../../operations/stepper-bulk-type-firmware/stepper-bulk-type-firmware.module.ts","../../operations/stepper-bulk-type-firmware/c8y-ngx-components-operations-stepper-bulk-type-firmware.ts"],"sourcesContent":["import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { IManagedObject, InventoryService, IResultList } from '@c8y/client';\nimport { memoize } from '@c8y/ngx-components';\nimport { BulkOperationsService } from '@c8y/ngx-components/operations/bulk-operations-service';\nimport { FirmwareBinary, RepositoryService } from '@c8y/ngx-components/repository/shared';\nimport { property } from 'lodash-es';\nimport { defer, Observable, of } from 'rxjs';\nimport {\n catchError,\n distinctUntilChanged,\n distinctUntilKeyChanged,\n map,\n shareReplay,\n switchMap,\n tap\n} from 'rxjs/operators';\n\n@Component({\n selector: 'c8y-version-or-patch-step',\n templateUrl: 'version-or-patch.component.html'\n})\nexport class VersionOrPatchComponent {\n @Input() selected: IManagedObject;\n @Output() versionOrPatch: EventEmitter<IManagedObject> = new EventEmitter<IManagedObject>();\n\n elementCount = 0;\n DD_LOW_COUNT = 10;\n\n firmware$: Observable<IManagedObject> = this.bulkOpsService.firmwareId.pipe(\n distinctUntilChanged(),\n switchMap(id =>\n defer(() => this.inventoryService.detail(id).then(result => result.data)).pipe(\n catchError(error => of(error))\n )\n ),\n shareReplay(1)\n );\n\n baseVersions$: Observable<IResultList<IManagedObject>> = this.firmware$.pipe(\n distinctUntilKeyChanged('id'),\n switchMap(firmware => this.repositoryService.listBaseVersions(firmware)),\n tap(resp => {\n this.elementCount = resp.data ? resp.data.length : 0;\n }),\n shareReplay(1)\n );\n\n isLegacy$: Observable<boolean> = this.firmware$.pipe(\n map(firmware => this.repositoryService.isLegacyEntry(firmware)),\n shareReplay(1)\n );\n\n expanded: { [id: string]: boolean } = {};\n\n constructor(\n private repositoryService: RepositoryService,\n private inventoryService: InventoryService,\n private bulkOpsService: BulkOperationsService\n ) {\n this.DD_LOW_COUNT = this.bulkOpsService.DD_LOW_COUNT;\n }\n\n @memoize()\n getBinaryName$(binaryUrl) {\n return this.repositoryService.getBinaryName$(binaryUrl);\n }\n\n @memoize(property('id'))\n getBaseVersionAndPatches$(baseVersion) {\n return this.firmware$.pipe(\n distinctUntilKeyChanged('id'),\n switchMap(firmware =>\n this.repositoryService.listBaseVersionAndPatches(firmware, baseVersion)\n ),\n shareReplay(1)\n );\n }\n\n @memoize(property('id'))\n getPatchVersionsCount$(baseVersion: FirmwareBinary) {\n return this.firmware$.pipe(\n distinctUntilKeyChanged('id'),\n switchMap(() => this.firmware$),\n switchMap(firmware => this.repositoryService.getPatchVersionsCount$(firmware, baseVersion)),\n shareReplay(1)\n );\n }\n\n selectVersionOrPatch(selected: boolean, versionOrPatch: IManagedObject) {\n if (selected) {\n this.versionOrPatch.emit(versionOrPatch);\n }\n }\n}\n","<c8y-list-group\n class=\"m-b-16\"\n *ngIf=\"(baseVersions$ | async)?.data.length > 0\"\n>\n <c8y-li *c8yFor=\"let baseVersion of baseVersions$ | async; let i = index; loadMore: 'auto'\">\n <c8y-li-icon>\n <i c8yIcon=\"c8y-firmware\"></i>\n </c8y-li-icon>\n\n <c8y-li-body class=\"content-flex-50\">\n <div class=\"col-10\">\n <p>{{ baseVersion.c8y_Firmware.version }}</p>\n </div>\n <div class=\"col-2\">\n <span\n class=\"label label-warning\"\n *ngIf=\"isLegacy$ | async\"\n >\n {{ 'Legacy' | translate }}\n </span>\n\n <span *ngIf=\"!(isLegacy$ | async)\">\n <span *ngIf=\"(getPatchVersionsCount$(baseVersion) | async) === null\">\n <span class=\"label label-info\">\n <i\n class=\"icon-spin\"\n c8yIcon=\"circle-o-notch\"\n ></i>\n </span>\n </span>\n\n <span *ngIf=\"(getPatchVersionsCount$(baseVersion) | async) !== null\">\n <span [ngPlural]=\"getPatchVersionsCount$(baseVersion) | async\">\n <ng-template ngPluralCase=\"=0\">\n <span class=\"label label-default\"><span translate>No patches</span></span>\n </ng-template>\n <ng-template ngPluralCase=\"=1\">\n <span class=\"label label-info\">\n <span translate>1 patch</span>\n </span>\n </ng-template>\n <ng-template ngPluralCase=\"other\">\n <span class=\"label label-info\">\n <span\n ngNonBindable\n translate\n [translateParams]=\"{ count: getPatchVersionsCount$(baseVersion) | async }\"\n >\n {{ count }} patches\n </span>\n </span>\n </ng-template>\n </span>\n </span>\n </span>\n </div>\n </c8y-li-body>\n\n <c8y-li-collapse>\n <c8y-list-group>\n <c8y-li\n *c8yFor=\"\n let patchVersion of getBaseVersionAndPatches$(baseVersion) | async;\n let i = index;\n loadMore: 'auto'\n \"\n >\n <c8y-li-radio\n (onSelect)=\"selectVersionOrPatch($event, patchVersion)\"\n [selected]=\"patchVersion === selected\"\n ></c8y-li-radio>\n <c8y-li-icon>\n <i c8yIcon=\"c8y-firmware\"></i>\n </c8y-li-icon>\n <c8y-li-body class=\"content-flex-50\">\n <div class=\"col-3\">\n {{ patchVersion.c8y_Firmware.version }}\n </div>\n <div class=\"col-3\">\n <span\n class=\"label label-info\"\n *ngIf=\"patchVersion.c8y_Patch; else version\"\n translate\n >\n patch\n </span>\n <ng-template #version>\n <span\n class=\"label label-primary\"\n translate\n >\n version\n </span>\n </ng-template>\n </div>\n <div class=\"col-6 text-truncate\">\n <span\n class=\"text-label-small m-r-4\"\n translate\n >\n File\n </span>\n <span title=\"{{ getBinaryName$(patchVersion.c8y_Firmware.url) | async }}\">\n {{ getBinaryName$(patchVersion.c8y_Firmware.url) | async }}\n </span>\n </div>\n </c8y-li-body>\n </c8y-li>\n </c8y-list-group>\n </c8y-li-collapse>\n </c8y-li>\n</c8y-list-group>\n","import { Component, Output, EventEmitter, Input } from '@angular/core';\nimport { Observable, BehaviorSubject } from 'rxjs';\nimport { debounceTime, distinctUntilChanged, tap, switchMap, shareReplay } from 'rxjs/operators';\nimport { memoize } from '@c8y/ngx-components';\nimport { RepositoryService, RepositoryType } from '@c8y/ngx-components/repository/shared';\nimport { gettext } from '@c8y/ngx-components';\nimport { IResultList, IManagedObject } from '@c8y/client';\nimport { TranslateService } from '@ngx-translate/core';\nimport { property, get } from 'lodash-es';\nimport { BulkOperationsService } from '@c8y/ngx-components/operations/bulk-operations-service';\n\n@Component({\n selector: 'c8y-select-firmware-step',\n templateUrl: 'select-firmware.component.html'\n})\nexport class SelectFirmwareComponent {\n @Input() selected: IManagedObject;\n @Output() firmware: EventEmitter<IManagedObject> = new EventEmitter<IManagedObject>();\n elementCount = 0;\n DD_LOW_COUNT = 10;\n textFilter$: BehaviorSubject<string> = new BehaviorSubject('');\n\n firmwares$: Observable<IResultList<IManagedObject>> = this.textFilter$\n .pipe(debounceTime(400), distinctUntilChanged())\n .pipe(\n switchMap(text => this.getFirmwares(text)),\n tap(resp => {\n this.elementCount = resp.data ? resp.data.length : 0;\n }),\n shareReplay(1)\n );\n isLegacy = this.repositoryService.isLegacyEntry.bind(this.repositoryService);\n readonly DEVICE_TYPE_NOT_AVAILABLE: string = gettext('No device type available.');\n readonly DESCRIPTION_NOT_AVAILABLE: string = gettext('No description available.');\n\n constructor(\n private repositoryService: RepositoryService,\n private bulkOpsService: BulkOperationsService,\n private translate: TranslateService\n ) {}\n\n ngOnInit() {\n this.DD_LOW_COUNT = this.bulkOpsService.DD_LOW_COUNT;\n }\n\n selectFirmware(selected: boolean, fw: IManagedObject) {\n if (selected) {\n this.firmware.emit(fw);\n }\n }\n\n @memoize(property('id'))\n getBaseVersionsCount$(firmware: IManagedObject): Observable<number | string> {\n return this.firmwares$.pipe(\n switchMap(() => this.repositoryService.getBaseVersionsCount$(firmware)),\n shareReplay(1)\n );\n }\n\n getDescriptionTitle(firmware: IManagedObject): string {\n return get(firmware, 'description', this.translate.instant(this.DESCRIPTION_NOT_AVAILABLE));\n }\n\n getDeviceTypeTitle(firmware: IManagedObject): string {\n return get(firmware, 'c8y_Filter.type', this.translate.instant(this.DEVICE_TYPE_NOT_AVAILABLE));\n }\n\n private getFirmwares(partialName?: string) {\n return this.repositoryService.listRepositoryEntries(RepositoryType.FIRMWARE, { partialName });\n }\n}\n","<c8y-select-step-frame\n [header]=\"'Select firmware' | translate\"\n [noResults]=\"(textFilter$ | async).length > 0 && elementCount === 0\"\n>\n <label\n class=\"sr-only\"\n for=\"fFilter\"\n >\n {{ 'Filter…' | translate }}\n </label>\n <div\n class=\"input-group input-group-search\"\n filters\n >\n <input\n class=\"form-control\"\n title=\"{{ 'Filter…' | translate }}\"\n id=\"fFilter\"\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 </div>\n <c8y-li\n class=\"hidden-sm hidden-xs m-r-8 m-l-8\"\n header\n >\n <c8y-li-icon><i class=\"p-l-32 p-r-40\"></i></c8y-li-icon>\n <c8y-li-body class=\"content-flex-40\">\n <div class=\"col-3\">\n <span\n class=\"text-truncate\"\n title=\" {{ 'Name' | translate }} \"\n >\n {{ 'Name' | translate }}\n </span>\n </div>\n <div class=\"col-4\">\n <span\n class=\"text-truncate\"\n title=\"{{ 'Description' | translate }}\"\n >\n {{ 'Description' | translate }}\n </span>\n </div>\n <div class=\"col-3\">\n <span\n class=\"text-truncate\"\n title=\"{{ 'Device type' | translate }}\"\n >\n {{ 'Device type' | translate }}\n </span>\n </div>\n <div class=\"col-2\">\n <span\n class=\"text-truncate\"\n title=\"{{ 'Versions' | translate }}\"\n >\n {{ 'Versions' | translate }}\n </span>\n </div>\n </c8y-li-body>\n </c8y-li>\n <c8y-list-group list>\n <c8y-li *c8yFor=\"let firmware of firmwares$ | async; let i = index; loadMore: 'auto'\">\n <c8y-li-radio\n (onSelect)=\"selectFirmware($event, firmware)\"\n [selected]=\"firmware === selected\"\n ></c8y-li-radio>\n <c8y-li-icon>\n <i c8yIcon=\"c8y-firmware\"></i>\n </c8y-li-icon>\n\n <c8y-li-body class=\"content-flex-40\">\n <div class=\"col-3 m-b-xs-8\">\n <div\n class=\"text-truncate\"\n title=\"{{ firmware.name }}\"\n >\n <c8y-highlight\n [text]=\"firmware.name\"\n [pattern]=\"textFilter$ | async\"\n ></c8y-highlight>\n </div>\n </div>\n <div class=\"col-4 m-b-xs-8\">\n <div\n class=\"text-truncate\"\n title=\"{{ getDescriptionTitle(firmware) }}\"\n >\n <span\n class=\"text-label-small m-r-8 visible-xs visible-sm\"\n translate\n >\n Description\n </span>\n <small *ngIf=\"firmware.description; else noDesc\">\n {{ firmware.description }}\n </small>\n <ng-template #noDesc>\n <small>\n <em\n class=\"text-muted\"\n translate\n >\n No description available.\n </em>\n </small>\n </ng-template>\n </div>\n </div>\n <div class=\"col-3 m-b-xs-8\">\n <div\n class=\"text-truncate\"\n title=\"{{ 'Device type' | translate }}: {{ getDeviceTypeTitle(firmware) }}\"\n >\n <span\n class=\"text-label-small m-r-8 visible-xs visible-sm\"\n translate\n >\n Device type\n </span>\n <span *ngIf=\"firmware.c8y_Filter?.type; else noType\">\n {{ firmware.c8y_Filter?.type }}\n </span>\n <ng-template #noType>\n <em\n class=\"text-muted\"\n translate\n >\n Undefined`device type`\n </em>\n </ng-template>\n </div>\n </div>\n <div class=\"col-2\">\n <span\n class=\"label label-warning m-l-auto-sm\"\n *ngIf=\"isLegacy(firmware)\"\n >\n <span translate>Legacy</span>\n </span>\n\n <span *ngIf=\"!isLegacy(firmware)\">\n <span *ngIf=\"(getBaseVersionsCount$(firmware) | async) === null\">\n <span class=\"label label-info\">\n <i\n class=\"icon-spin\"\n c8yIcon=\"circle-o-notch\"\n ></i>\n </span>\n </span>\n <span *ngIf=\"(getBaseVersionsCount$(firmware) | async) !== null\">\n <span [ngPlural]=\"getBaseVersionsCount$(firmware) | async\">\n <ng-template ngPluralCase=\"=0\">\n <span class=\"label label-default\">\n <span translate>No versions</span>\n </span>\n </ng-template>\n <ng-template ngPluralCase=\"=1\">\n <span\n class=\"text-label-small m-r-8 visible-xs visible-sm\"\n translate\n >\n version\n </span>\n <span class=\"badge badge-info m-l-auto-sm\">1</span>\n </ng-template>\n <ng-template ngPluralCase=\"other\">\n <span\n class=\"text-label-small m-r-8 visible-xs visible-sm\"\n translate\n >\n versions\n </span>\n <span class=\"badge badge-info m-l-auto-sm\">\n {{ getBaseVersionsCount$(firmware) | async }}\n </span>\n </ng-template>\n </span>\n </span>\n </span>\n </div>\n </c8y-li-body>\n </c8y-li>\n </c8y-list-group>\n</c8y-select-step-frame>\n","import { StepperSelectionEvent } from '@angular/cdk/stepper';\nimport { Component, OnDestroy } from '@angular/core';\nimport { IManagedObject, IOperation } from '@c8y/client';\nimport { gettext } from '@c8y/ngx-components';\nimport { BaseStepperComponent } from '@c8y/ngx-components/operations/bulk-operation-stepper';\nimport {\n BulkOperationsService,\n BulkOperationType,\n OperationDetails\n} from '@c8y/ngx-components/operations/bulk-operations-service';\nimport { TranslateService } from '@ngx-translate/core';\nimport { get } from 'lodash-es';\nimport { BehaviorSubject, Subscription } from 'rxjs';\n\n@Component({\n selector: 'c8y-stepper-firmware',\n templateUrl: 'stepper-bulk-type-firmware.component.html'\n})\nexport class StepperBulkTypeFirmwareComponent extends BaseStepperComponent implements OnDestroy {\n readonly type: BulkOperationType = BulkOperationType.FIRMWARE;\n readonly descriptionTemplate: string = gettext('{{ name }} (version {{ version }})');\n\n textFilter$: BehaviorSubject<string> = new BehaviorSubject('');\n\n stepData: { firmware: IManagedObject; versionOrPatch: IManagedObject } = {\n firmware: undefined,\n versionOrPatch: undefined\n };\n\n selectedFirmware: IManagedObject;\n selectedVersionOrPatch: IManagedObject;\n\n private subscription: Subscription;\n\n constructor(\n private bulkOperationService: BulkOperationsService,\n private translate: TranslateService\n ) {\n super();\n }\n\n goToVersionOrPatchStep({ stepper }) {\n const selectedFirmware = this.stepData.firmware;\n this.bulkOperationService.setFirmwareId(selectedFirmware.id);\n this.deviceTypes = (selectedFirmware.c8y_Filter || {}).type;\n stepper.next();\n }\n\n onVersionOrPatchSelected(versionOrPatch: IManagedObject) {\n this.stepData.versionOrPatch = versionOrPatch;\n }\n\n onFirmwareSelected(fw: IManagedObject) {\n this.stepData.firmware = fw;\n }\n\n ngOnDestroy(): void {\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n }\n\n protected retrieveOperationPrototype(): OperationDetails {\n const selectedFirmware = this.stepData.firmware;\n const selectedVersionOrPatch = this.stepData.versionOrPatch;\n\n if (!selectedFirmware || !selectedVersionOrPatch) {\n return;\n }\n\n const firmware: IManagedObject = {\n name: selectedFirmware.name,\n version: selectedVersionOrPatch.c8y_Firmware.version,\n url: selectedVersionOrPatch.c8y_Firmware.url\n } as unknown as IManagedObject;\n\n if (selectedVersionOrPatch.c8y_Patch) {\n firmware.isPatch = true;\n firmware.dependency = selectedVersionOrPatch.c8y_Patch.dependency;\n }\n\n const name = selectedFirmware.name;\n const version = selectedVersionOrPatch.c8y_Firmware.version;\n const description = `Update firmware to: ${name} (version: ${version}).`;\n\n return {\n name: gettext('Firmware update'),\n description: this.translate.instant(this.descriptionTemplate, {\n name: get(this.stepData, 'firmware.name'),\n version: get(this.stepData, 'versionOrPatch.c8y_Firmware.version')\n }),\n prototype: {\n description,\n c8y_Firmware: firmware\n } as unknown as IOperation\n };\n }\n\n protected onSelectionChange(event: StepperSelectionEvent) {\n this.textFilter$.next('');\n super.onSelectionChange(event);\n }\n}\n","<c8y-bulk-operation-stepper [type]=\"type\">\n <ng-container\n *customStep=\"\n 'Select firmware' | translate;\n completed: !!stepData?.firmware;\n buttonsDisabled: !stepData?.firmware;\n onNext: goToVersionOrPatchStep.bind(this)\n \"\n >\n <c8y-select-firmware-step\n [selected]=\"stepData?.firmware\"\n (firmware)=\"onFirmwareSelected($event)\"\n class=\"d-contents\"\n ></c8y-select-firmware-step\n ></ng-container>\n <ng-container\n *customStep=\"\n 'Select version or patch' | translate;\n completed: !!stepData?.versionOrPatch;\n buttonsDisabled: !stepData?.versionOrPatch\n \"\n >\n <c8y-preview-selection-frame\n [header]=\"'Select version or patch' | translate\"\n [name]=\"stepData?.firmware?.name\"\n [description]=\"stepData?.firmware?.description\"\n >\n <c8y-version-or-patch-step\n list\n [selected]=\"stepData?.versionOrPatch\"\n (versionOrPatch)=\"onVersionOrPatchSelected($event)\"\n >\n </c8y-version-or-patch-step>\n </c8y-preview-selection-frame>\n </ng-container>\n</c8y-bulk-operation-stepper>\n","import { NgModule } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\n\nimport { CoreModule, FormsModule, gettext } from '@c8y/ngx-components';\nimport { SharedRepositoryModule } from '@c8y/ngx-components/repository/shared';\nimport { BulkOperationStepperModule } from '@c8y/ngx-components/operations/bulk-operation-stepper';\nimport {\n baseUrl,\n BulkOperationType,\n hookListBulkType\n} from '@c8y/ngx-components/operations/bulk-operations-service';\nimport { StepperFramesModule } from '@c8y/ngx-components/operations/stepper-frames';\n\nimport { SelectFirmwareComponent } from './select-firmware.component';\nimport { VersionOrPatchComponent } from './version-or-patch.component';\nimport { StepperBulkTypeFirmwareComponent } from './stepper-bulk-type-firmware.component';\n\n/** Module for the 'Firmware update' operation type stepper */\n@NgModule({\n declarations: [\n StepperBulkTypeFirmwareComponent,\n VersionOrPatchComponent,\n SelectFirmwareComponent\n ],\n imports: [\n CoreModule,\n FormsModule,\n ReactiveFormsModule,\n BulkOperationStepperModule,\n StepperFramesModule,\n SharedRepositoryModule\n ],\n providers: [\n hookListBulkType({\n type: BulkOperationType.FIRMWARE,\n c8yIcon: 'c8y-firmware',\n name: gettext('Firmware update'),\n path: `${baseUrl}firmware`,\n component: StepperBulkTypeFirmwareComponent,\n fragments: ['c8y_Firmware'],\n selected: false\n })\n ],\n exports: [StepperBulkTypeFirmwareComponent]\n})\nexport class StepperBulkTypeFirmwareModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i2","i3","i1","i4","i5.VersionOrPatchComponent","i6.SelectFirmwareComponent","i7"],"mappings":";;;;;;;;;;;;;;;;;;;;;;MAqBa,uBAAuB,CAAA;AAiClC,IAAA,WAAA,CACU,iBAAoC,EACpC,gBAAkC,EAClC,cAAqC,EAAA;QAFrC,IAAiB,CAAA,iBAAA,GAAjB,iBAAiB,CAAmB;QACpC,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB,CAAkB;QAClC,IAAc,CAAA,cAAA,GAAd,cAAc,CAAuB;AAlCrC,QAAA,IAAA,CAAA,cAAc,GAAiC,IAAI,YAAY,EAAkB,CAAC;QAE5F,IAAY,CAAA,YAAA,GAAG,CAAC,CAAC;QACjB,IAAY,CAAA,YAAA,GAAG,EAAE,CAAC;AAElB,QAAA,IAAA,CAAA,SAAS,GAA+B,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,IAAI,CACzE,oBAAoB,EAAE,EACtB,SAAS,CAAC,EAAE,IACV,KAAK,CAAC,MAAM,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAC5E,UAAU,CAAC,KAAK,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,CAC/B,CACF,EACD,WAAW,CAAC,CAAC,CAAC,CACf,CAAC;AAEF,QAAA,IAAA,CAAA,aAAa,GAA4C,IAAI,CAAC,SAAS,CAAC,IAAI,CAC1E,uBAAuB,CAAC,IAAI,CAAC,EAC7B,SAAS,CAAC,QAAQ,IAAI,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,EACxE,GAAG,CAAC,IAAI,IAAG;AACT,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;AACvD,SAAC,CAAC,EACF,WAAW,CAAC,CAAC,CAAC,CACf,CAAC;AAEF,QAAA,IAAA,CAAA,SAAS,GAAwB,IAAI,CAAC,SAAS,CAAC,IAAI,CAClD,GAAG,CAAC,QAAQ,IAAI,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,EAC/D,WAAW,CAAC,CAAC,CAAC,CACf,CAAC;QAEF,IAAQ,CAAA,QAAA,GAA8B,EAAE,CAAC;QAOvC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC;KACtD;AAGD,IAAA,cAAc,CAAC,SAAS,EAAA;QACtB,OAAO,IAAI,CAAC,iBAAiB,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;KACzD;AAGD,IAAA,yBAAyB,CAAC,WAAW,EAAA;AACnC,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CACxB,uBAAuB,CAAC,IAAI,CAAC,EAC7B,SAAS,CAAC,QAAQ,IAChB,IAAI,CAAC,iBAAiB,CAAC,yBAAyB,CAAC,QAAQ,EAAE,WAAW,CAAC,CACxE,EACD,WAAW,CAAC,CAAC,CAAC,CACf,CAAC;KACH;AAGD,IAAA,sBAAsB,CAAC,WAA2B,EAAA;QAChD,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CACxB,uBAAuB,CAAC,IAAI,CAAC,EAC7B,SAAS,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,EAC/B,SAAS,CAAC,QAAQ,IAAI,IAAI,CAAC,iBAAiB,CAAC,sBAAsB,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC,EAC3F,WAAW,CAAC,CAAC,CAAC,CACf,CAAC;KACH;IAED,oBAAoB,CAAC,QAAiB,EAAE,cAA8B,EAAA;AACpE,QAAA,IAAI,QAAQ,EAAE;AACZ,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;AAC1C,SAAA;KACF;+GAvEU,uBAAuB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,qBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAvB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,uBAAuB,kJCrBpC,srHAgHA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,qBAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,qBAAA,EAAA,uBAAA,EAAA,qBAAA,EAAA,gBAAA,EAAA,uBAAA,EAAA,kBAAA,EAAA,2BAAA,EAAA,gCAAA,EAAA,6BAAA,EAAA,oCAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,cAAA,EAAA,WAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,qBAAA,EAAA,QAAA,EAAA,iCAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,qBAAA,EAAA,QAAA,EAAA,iCAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,yBAAA,EAAA,QAAA,EAAA,yCAAA,EAAA,MAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,sBAAA,EAAA,QAAA,EAAA,mCAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,MAAA,EAAA,UAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;ADlDE,UAAA,CAAA;AAAC,IAAA,OAAO,EAAE;;;;AAGT,CAAA,EAAA,uBAAA,CAAA,SAAA,EAAA,gBAAA,EAAA,IAAA,CAAA,CAAA;AAED,UAAA,CAAA;AAAC,IAAA,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;;;;AASvB,CAAA,EAAA,uBAAA,CAAA,SAAA,EAAA,2BAAA,EAAA,IAAA,CAAA,CAAA;AAED,UAAA,CAAA;AAAC,IAAA,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;;;;AAQvB,CAAA,EAAA,uBAAA,CAAA,SAAA,EAAA,wBAAA,EAAA,IAAA,CAAA,CAAA;4FAjEU,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAJnC,SAAS;+BACE,2BAA2B,EAAA,QAAA,EAAA,srHAAA,EAAA,CAAA;2KAI5B,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBACI,cAAc,EAAA,CAAA;sBAAvB,MAAM;gBAwCP,cAAc,EAAA,EAAA,EAKd,yBAAyB,EAAA,EAAA,EAWzB,sBAAsB,EAAA,EAAA,EAAA,EAAA,CAAA;;MEhEX,uBAAuB,CAAA;AAoBlC,IAAA,WAAA,CACU,iBAAoC,EACpC,cAAqC,EACrC,SAA2B,EAAA;QAF3B,IAAiB,CAAA,iBAAA,GAAjB,iBAAiB,CAAmB;QACpC,IAAc,CAAA,cAAA,GAAd,cAAc,CAAuB;QACrC,IAAS,CAAA,SAAA,GAAT,SAAS,CAAkB;AArB3B,QAAA,IAAA,CAAA,QAAQ,GAAiC,IAAI,YAAY,EAAkB,CAAC;QACtF,IAAY,CAAA,YAAA,GAAG,CAAC,CAAC;QACjB,IAAY,CAAA,YAAA,GAAG,EAAE,CAAC;AAClB,QAAA,IAAA,CAAA,WAAW,GAA4B,IAAI,eAAe,CAAC,EAAE,CAAC,CAAC;QAE/D,IAAU,CAAA,UAAA,GAA4C,IAAI,CAAC,WAAW;aACnE,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,oBAAoB,EAAE,CAAC;AAC/C,aAAA,IAAI,CACH,SAAS,CAAC,IAAI,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,EAC1C,GAAG,CAAC,IAAI,IAAG;AACT,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;AACvD,SAAC,CAAC,EACF,WAAW,CAAC,CAAC,CAAC,CACf,CAAC;AACJ,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;AACpE,QAAA,IAAA,CAAA,yBAAyB,GAAW,OAAO,CAAC,2BAA2B,CAAC,CAAC;AACzE,QAAA,IAAA,CAAA,yBAAyB,GAAW,OAAO,CAAC,2BAA2B,CAAC,CAAC;KAM9E;IAEJ,QAAQ,GAAA;QACN,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC;KACtD;IAED,cAAc,CAAC,QAAiB,EAAE,EAAkB,EAAA;AAClD,QAAA,IAAI,QAAQ,EAAE;AACZ,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACxB,SAAA;KACF;AAGD,IAAA,qBAAqB,CAAC,QAAwB,EAAA;QAC5C,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CACzB,SAAS,CAAC,MAAM,IAAI,CAAC,iBAAiB,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC,EACvE,WAAW,CAAC,CAAC,CAAC,CACf,CAAC;KACH;AAED,IAAA,mBAAmB,CAAC,QAAwB,EAAA;AAC1C,QAAA,OAAO,GAAG,CAAC,QAAQ,EAAE,aAAa,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC;KAC7F;AAED,IAAA,kBAAkB,CAAC,QAAwB,EAAA;AACzC,QAAA,OAAO,GAAG,CAAC,QAAQ,EAAE,iBAAiB,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC;KACjG;AAEO,IAAA,YAAY,CAAC,WAAoB,EAAA;AACvC,QAAA,OAAO,IAAI,CAAC,iBAAiB,CAAC,qBAAqB,CAAC,cAAc,CAAC,QAAQ,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC;KAC/F;+GAtDU,uBAAuB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,EAAA,CAAA,qBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,IAAA,CAAA,gBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAvB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,uBAAuB,qICfpC,snMAwMA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,qBAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,qBAAA,EAAA,uBAAA,EAAA,qBAAA,EAAA,gBAAA,EAAA,uBAAA,EAAA,kBAAA,EAAA,2BAAA,EAAA,gCAAA,EAAA,6BAAA,EAAA,oCAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,MAAA,EAAA,cAAA,EAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,cAAA,EAAA,WAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,qBAAA,EAAA,QAAA,EAAA,iCAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,qBAAA,EAAA,QAAA,EAAA,iCAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,sBAAA,EAAA,QAAA,EAAA,mCAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,MAAA,EAAA,UAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,wBAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;ADrJE,UAAA,CAAA;AAAC,IAAA,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;;;oCACyB,UAAU,CAAA;AAK1D,CAAA,EAAA,uBAAA,CAAA,SAAA,EAAA,uBAAA,EAAA,IAAA,CAAA,CAAA;4FA1CU,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAJnC,SAAS;+BACE,0BAA0B,EAAA,QAAA,EAAA,snMAAA,EAAA,CAAA;6KAI3B,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBACI,QAAQ,EAAA,CAAA;sBAAjB,MAAM;gBAmCP,qBAAqB,EAAA,EAAA,EAAA,EAAA,CAAA;;AElCjB,MAAO,gCAAiC,SAAQ,oBAAoB,CAAA;IAgBxE,WACU,CAAA,oBAA2C,EAC3C,SAA2B,EAAA;AAEnC,QAAA,KAAK,EAAE,CAAC;QAHA,IAAoB,CAAA,oBAAA,GAApB,oBAAoB,CAAuB;QAC3C,IAAS,CAAA,SAAA,GAAT,SAAS,CAAkB;AAjB5B,QAAA,IAAA,CAAA,IAAI,GAAsB,iBAAiB,CAAC,QAAQ,CAAC;AACrD,QAAA,IAAA,CAAA,mBAAmB,GAAW,OAAO,CAAC,oCAAoC,CAAC,CAAC;AAErF,QAAA,IAAA,CAAA,WAAW,GAA4B,IAAI,eAAe,CAAC,EAAE,CAAC,CAAC;AAE/D,QAAA,IAAA,CAAA,QAAQ,GAAiE;AACvE,YAAA,QAAQ,EAAE,SAAS;AACnB,YAAA,cAAc,EAAE,SAAS;SAC1B,CAAC;KAYD;IAED,sBAAsB,CAAC,EAAE,OAAO,EAAE,EAAA;AAChC,QAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAChD,IAAI,CAAC,oBAAoB,CAAC,aAAa,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;AAC7D,QAAA,IAAI,CAAC,WAAW,GAAG,CAAC,gBAAgB,CAAC,UAAU,IAAI,EAAE,EAAE,IAAI,CAAC;QAC5D,OAAO,CAAC,IAAI,EAAE,CAAC;KAChB;AAED,IAAA,wBAAwB,CAAC,cAA8B,EAAA;AACrD,QAAA,IAAI,CAAC,QAAQ,CAAC,cAAc,GAAG,cAAc,CAAC;KAC/C;AAED,IAAA,kBAAkB,CAAC,EAAkB,EAAA;AACnC,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,GAAG,EAAE,CAAC;KAC7B;IAED,WAAW,GAAA;QACT,IAAI,IAAI,CAAC,YAAY,EAAE;AACrB,YAAA,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC;AACjC,SAAA;KACF;IAES,0BAA0B,GAAA;AAClC,QAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;AAChD,QAAA,MAAM,sBAAsB,GAAG,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC;AAE5D,QAAA,IAAI,CAAC,gBAAgB,IAAI,CAAC,sBAAsB,EAAE;YAChD,OAAO;AACR,SAAA;AAED,QAAA,MAAM,QAAQ,GAAmB;YAC/B,IAAI,EAAE,gBAAgB,CAAC,IAAI;AAC3B,YAAA,OAAO,EAAE,sBAAsB,CAAC,YAAY,CAAC,OAAO;AACpD,YAAA,GAAG,EAAE,sBAAsB,CAAC,YAAY,CAAC,GAAG;SAChB,CAAC;QAE/B,IAAI,sBAAsB,CAAC,SAAS,EAAE;AACpC,YAAA,QAAQ,CAAC,OAAO,GAAG,IAAI,CAAC;YACxB,QAAQ,CAAC,UAAU,GAAG,sBAAsB,CAAC,SAAS,CAAC,UAAU,CAAC;AACnE,SAAA;AAED,QAAA,MAAM,IAAI,GAAG,gBAAgB,CAAC,IAAI,CAAC;AACnC,QAAA,MAAM,OAAO,GAAG,sBAAsB,CAAC,YAAY,CAAC,OAAO,CAAC;AAC5D,QAAA,MAAM,WAAW,GAAG,CAAA,oBAAA,EAAuB,IAAI,CAAc,WAAA,EAAA,OAAO,IAAI,CAAC;QAEzE,OAAO;AACL,YAAA,IAAI,EAAE,OAAO,CAAC,iBAAiB,CAAC;YAChC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,mBAAmB,EAAE;gBAC5D,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,eAAe,CAAC;gBACzC,OAAO,EAAE,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,qCAAqC,CAAC;aACnE,CAAC;AACF,YAAA,SAAS,EAAE;gBACT,WAAW;AACX,gBAAA,YAAY,EAAE,QAAQ;AACE,aAAA;SAC3B,CAAC;KACH;AAES,IAAA,iBAAiB,CAAC,KAA4B,EAAA;AACtD,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAC1B,QAAA,KAAK,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;KAChC;+GAnFU,gCAAgC,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,EAAA,CAAA,qBAAA,EAAA,EAAA,EAAA,KAAA,EAAAF,IAAA,CAAA,gBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAhC,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,gCAAgC,mFClB7C,koCAoCA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,4BAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,qBAAA,EAAA,2BAAA,EAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAE,EAAA,CAAA,8BAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,MAAA,EAAA,aAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,uBAAA,EAAA,QAAA,EAAA,2BAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,uBAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,gBAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;4FDlBa,gCAAgC,EAAA,UAAA,EAAA,CAAA;kBAJ5C,SAAS;+BACE,sBAAsB,EAAA,QAAA,EAAA,koCAAA,EAAA,CAAA;;;AEElC;MA4Ba,6BAA6B,CAAA;+GAA7B,6BAA6B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA,EAAA;AAA7B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,6BAA6B,iBAzBtC,gCAAgC;YAChC,uBAAuB;AACvB,YAAA,uBAAuB,aAGvB,UAAU;YACV,WAAW;YACX,mBAAmB;YACnB,0BAA0B;YAC1B,mBAAmB;AACnB,YAAA,sBAAsB,aAad,gCAAgC,CAAA,EAAA,CAAA,CAAA,EAAA;AAE/B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,6BAA6B,EAb7B,SAAA,EAAA;AACT,YAAA,gBAAgB,CAAC;gBACf,IAAI,EAAE,iBAAiB,CAAC,QAAQ;AAChC,gBAAA,OAAO,EAAE,cAAc;AACvB,gBAAA,IAAI,EAAE,OAAO,CAAC,iBAAiB,CAAC;gBAChC,IAAI,EAAE,CAAG,EAAA,OAAO,CAAU,QAAA,CAAA;AAC1B,gBAAA,SAAS,EAAE,gCAAgC;gBAC3C,SAAS,EAAE,CAAC,cAAc,CAAC;AAC3B,gBAAA,QAAQ,EAAE,KAAK;aAChB,CAAC;AACH,SAAA,EAAA,OAAA,EAAA,CAjBC,UAAU;YACV,WAAW;YACX,mBAAmB;YACnB,0BAA0B;YAC1B,mBAAmB;YACnB,sBAAsB,CAAA,EAAA,CAAA,CAAA,EAAA;;4FAeb,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBA3BzC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,YAAY,EAAE;wBACZ,gCAAgC;wBAChC,uBAAuB;wBACvB,uBAAuB;AACxB,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACP,UAAU;wBACV,WAAW;wBACX,mBAAmB;wBACnB,0BAA0B;wBAC1B,mBAAmB;wBACnB,sBAAsB;AACvB,qBAAA;AACD,oBAAA,SAAS,EAAE;AACT,wBAAA,gBAAgB,CAAC;4BACf,IAAI,EAAE,iBAAiB,CAAC,QAAQ;AAChC,4BAAA,OAAO,EAAE,cAAc;AACvB,4BAAA,IAAI,EAAE,OAAO,CAAC,iBAAiB,CAAC;4BAChC,IAAI,EAAE,CAAG,EAAA,OAAO,CAAU,QAAA,CAAA;AAC1B,4BAAA,SAAS,EAAE,gCAAgC;4BAC3C,SAAS,EAAE,CAAC,cAAc,CAAC;AAC3B,4BAAA,QAAQ,EAAE,KAAK;yBAChB,CAAC;AACH,qBAAA;oBACD,OAAO,EAAE,CAAC,gCAAgC,CAAC;AAC5C,iBAAA,CAAA;;;AC5CD;;AAEG;;;;"}
|
|
1
|
+
{"version":3,"file":"c8y-ngx-components-operations-stepper-bulk-type-firmware.mjs","sources":["../../operations/stepper-bulk-type-firmware/version-or-patch.component.ts","../../operations/stepper-bulk-type-firmware/version-or-patch.component.html","../../operations/stepper-bulk-type-firmware/select-firmware.component.ts","../../operations/stepper-bulk-type-firmware/select-firmware.component.html","../../operations/stepper-bulk-type-firmware/stepper-bulk-type-firmware.component.ts","../../operations/stepper-bulk-type-firmware/stepper-bulk-type-firmware.component.html","../../operations/stepper-bulk-type-firmware/stepper-bulk-type-firmware.module.ts","../../operations/stepper-bulk-type-firmware/c8y-ngx-components-operations-stepper-bulk-type-firmware.ts"],"sourcesContent":["import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { IManagedObject, InventoryService, IResultList } from '@c8y/client';\nimport { memoize } from '@c8y/ngx-components';\nimport { BulkOperationsService } from '@c8y/ngx-components/operations/bulk-operations-service';\nimport { FirmwareBinary, RepositoryService } from '@c8y/ngx-components/repository/shared';\nimport { property } from 'lodash-es';\nimport { defer, Observable, of } from 'rxjs';\nimport {\n catchError,\n distinctUntilChanged,\n distinctUntilKeyChanged,\n map,\n shareReplay,\n switchMap,\n tap\n} from 'rxjs/operators';\n\n@Component({\n selector: 'c8y-version-or-patch-step',\n templateUrl: 'version-or-patch.component.html'\n})\nexport class VersionOrPatchComponent {\n @Input() selected: IManagedObject;\n @Output() versionOrPatch: EventEmitter<IManagedObject> = new EventEmitter<IManagedObject>();\n\n elementCount = 0;\n DD_LOW_COUNT = 10;\n\n firmware$: Observable<IManagedObject> = this.bulkOpsService.firmwareId.pipe(\n distinctUntilChanged(),\n switchMap(id =>\n defer(() => this.inventoryService.detail(id).then(result => result.data)).pipe(\n catchError(error => of(error))\n )\n ),\n shareReplay(1)\n );\n\n baseVersions$: Observable<IResultList<IManagedObject>> = this.firmware$.pipe(\n distinctUntilKeyChanged('id'),\n switchMap(firmware => this.repositoryService.listBaseVersions(firmware)),\n tap(resp => {\n this.elementCount = resp.data ? resp.data.length : 0;\n }),\n shareReplay(1)\n );\n\n isLegacy$: Observable<boolean> = this.firmware$.pipe(\n map(firmware => this.repositoryService.isLegacyEntry(firmware)),\n shareReplay(1)\n );\n\n expanded: { [id: string]: boolean } = {};\n\n constructor(\n private repositoryService: RepositoryService,\n private inventoryService: InventoryService,\n private bulkOpsService: BulkOperationsService\n ) {\n this.DD_LOW_COUNT = this.bulkOpsService.DD_LOW_COUNT;\n }\n\n @memoize()\n getBinaryName$(binaryUrl) {\n return this.repositoryService.getBinaryName$(binaryUrl);\n }\n\n @memoize(property('id'))\n getBaseVersionAndPatches$(baseVersion) {\n return this.firmware$.pipe(\n distinctUntilKeyChanged('id'),\n switchMap(firmware =>\n this.repositoryService.listBaseVersionAndPatches(firmware, baseVersion)\n ),\n shareReplay(1)\n );\n }\n\n @memoize(property('id'))\n getPatchVersionsCount$(baseVersion: FirmwareBinary) {\n return this.firmware$.pipe(\n distinctUntilKeyChanged('id'),\n switchMap(() => this.firmware$),\n switchMap(firmware => this.repositoryService.getPatchVersionsCount$(firmware, baseVersion)),\n shareReplay(1)\n );\n }\n\n selectVersionOrPatch(selected: boolean, versionOrPatch: IManagedObject) {\n if (selected) {\n this.versionOrPatch.emit(versionOrPatch);\n }\n }\n}\n","<c8y-list-group\n class=\"m-b-16\"\n *ngIf=\"(baseVersions$ | async)?.data.length > 0\"\n>\n <c8y-li *c8yFor=\"let baseVersion of baseVersions$ | async; let i = index; loadMore: 'auto'\">\n <c8y-li-icon>\n <i c8yIcon=\"c8y-firmware\"></i>\n </c8y-li-icon>\n\n <c8y-li-body class=\"content-flex-50\">\n <div class=\"col-10\">\n <p>{{ baseVersion.c8y_Firmware.version }}</p>\n </div>\n <div class=\"col-2\">\n <span\n class=\"label label-warning\"\n *ngIf=\"isLegacy$ | async\"\n >\n {{ 'Legacy' | translate }}\n </span>\n\n <span *ngIf=\"!(isLegacy$ | async)\">\n <span *ngIf=\"(getPatchVersionsCount$(baseVersion) | async) === null\">\n <span class=\"label label-info\">\n <i\n class=\"icon-spin\"\n c8yIcon=\"circle-o-notch\"\n ></i>\n </span>\n </span>\n\n <span *ngIf=\"(getPatchVersionsCount$(baseVersion) | async) !== null\">\n <span [ngPlural]=\"getPatchVersionsCount$(baseVersion) | async\">\n <ng-template ngPluralCase=\"=0\">\n <span class=\"label label-default\"><span translate>No patches</span></span>\n </ng-template>\n <ng-template ngPluralCase=\"=1\">\n <span class=\"label label-info\">\n <span translate>1 patch</span>\n </span>\n </ng-template>\n <ng-template ngPluralCase=\"other\">\n <span class=\"label label-info\">\n <span\n ngNonBindable\n translate\n [translateParams]=\"{ count: getPatchVersionsCount$(baseVersion) | async }\"\n >\n {{ count }} patches\n </span>\n </span>\n </ng-template>\n </span>\n </span>\n </span>\n </div>\n </c8y-li-body>\n\n <c8y-li-collapse>\n <c8y-list-group>\n <c8y-li\n *c8yFor=\"\n let patchVersion of getBaseVersionAndPatches$(baseVersion) | async;\n let i = index;\n loadMore: 'auto'\n \"\n >\n <c8y-li-radio\n (onSelect)=\"selectVersionOrPatch($event, patchVersion)\"\n [selected]=\"patchVersion === selected\"\n ></c8y-li-radio>\n <c8y-li-icon>\n <i c8yIcon=\"c8y-firmware\"></i>\n </c8y-li-icon>\n <c8y-li-body class=\"content-flex-50\">\n <div class=\"col-3\">\n {{ patchVersion.c8y_Firmware.version }}\n </div>\n <div class=\"col-3\">\n <span\n class=\"label label-info\"\n *ngIf=\"patchVersion.c8y_Patch; else version\"\n translate\n >\n patch\n </span>\n <ng-template #version>\n <span\n class=\"label label-primary\"\n translate\n >\n version\n </span>\n </ng-template>\n </div>\n <div class=\"col-6 text-truncate\">\n <span\n class=\"text-label-small m-r-4\"\n translate\n >\n File\n </span>\n <span title=\"{{ getBinaryName$(patchVersion.c8y_Firmware.url) | async }}\">\n {{ getBinaryName$(patchVersion.c8y_Firmware.url) | async }}\n </span>\n </div>\n </c8y-li-body>\n </c8y-li>\n </c8y-list-group>\n </c8y-li-collapse>\n </c8y-li>\n</c8y-list-group>\n","import { Component, Output, EventEmitter, Input } from '@angular/core';\nimport { Observable, BehaviorSubject } from 'rxjs';\nimport { debounceTime, distinctUntilChanged, tap, switchMap, shareReplay } from 'rxjs/operators';\nimport { memoize } from '@c8y/ngx-components';\nimport { RepositoryService, RepositoryType } from '@c8y/ngx-components/repository/shared';\nimport { gettext } from '@c8y/ngx-components';\nimport { IResultList, IManagedObject } from '@c8y/client';\nimport { TranslateService } from '@ngx-translate/core';\nimport { property, get } from 'lodash-es';\nimport { BulkOperationsService } from '@c8y/ngx-components/operations/bulk-operations-service';\n\n@Component({\n selector: 'c8y-select-firmware-step',\n templateUrl: 'select-firmware.component.html'\n})\nexport class SelectFirmwareComponent {\n @Input() selected: IManagedObject;\n @Output() firmware: EventEmitter<IManagedObject> = new EventEmitter<IManagedObject>();\n elementCount = 0;\n DD_LOW_COUNT = 10;\n textFilter$: BehaviorSubject<string> = new BehaviorSubject('');\n\n firmwares$: Observable<IResultList<IManagedObject>> = this.textFilter$\n .pipe(debounceTime(400), distinctUntilChanged())\n .pipe(\n switchMap(text => this.getFirmwares(text)),\n tap(resp => {\n this.elementCount = resp.data ? resp.data.length : 0;\n }),\n shareReplay(1)\n );\n isLegacy = this.repositoryService.isLegacyEntry.bind(this.repositoryService);\n readonly DEVICE_TYPE_NOT_AVAILABLE: string = gettext('No device type available.');\n readonly DESCRIPTION_NOT_AVAILABLE: string = gettext('No description available.');\n\n constructor(\n private repositoryService: RepositoryService,\n private bulkOpsService: BulkOperationsService,\n private translate: TranslateService\n ) {}\n\n ngOnInit() {\n this.DD_LOW_COUNT = this.bulkOpsService.DD_LOW_COUNT;\n }\n\n selectFirmware(selected: boolean, fw: IManagedObject) {\n if (selected) {\n this.firmware.emit(fw);\n }\n }\n\n @memoize(property('id'))\n getBaseVersionsCount$(firmware: IManagedObject): Observable<number | string> {\n return this.firmwares$.pipe(\n switchMap(() => this.repositoryService.getBaseVersionsCount$(firmware)),\n shareReplay(1)\n );\n }\n\n getDescriptionTitle(firmware: IManagedObject): string {\n return get(firmware, 'description', this.translate.instant(this.DESCRIPTION_NOT_AVAILABLE));\n }\n\n getDeviceTypeTitle(firmware: IManagedObject): string {\n return get(firmware, 'c8y_Filter.type', this.translate.instant(this.DEVICE_TYPE_NOT_AVAILABLE));\n }\n\n private getFirmwares(partialName?: string) {\n return this.repositoryService.listRepositoryEntries(RepositoryType.FIRMWARE, { partialName });\n }\n}\n","<c8y-select-step-frame\n [header]=\"'Select firmware' | translate\"\n [noResults]=\"(textFilter$ | async).length > 0 && elementCount === 0\"\n>\n <label\n class=\"sr-only\"\n for=\"fFilter\"\n >\n {{ 'Filter…' | translate }}\n </label>\n <div\n class=\"input-group input-group-search\"\n filters\n >\n <input\n class=\"form-control\"\n title=\"{{ 'Filter…' | translate }}\"\n id=\"fFilter\"\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 </div>\n <c8y-li\n class=\"hidden-sm hidden-xs m-r-8 m-l-8\"\n header\n >\n <c8y-li-icon><i class=\"p-l-32 p-r-40\"></i></c8y-li-icon>\n <c8y-li-body class=\"content-flex-40\">\n <div class=\"col-3\">\n <span\n class=\"text-truncate\"\n title=\" {{ 'Name' | translate }} \"\n >\n {{ 'Name' | translate }}\n </span>\n </div>\n <div class=\"col-4\">\n <span\n class=\"text-truncate\"\n title=\"{{ 'Description' | translate }}\"\n >\n {{ 'Description' | translate }}\n </span>\n </div>\n <div class=\"col-3\">\n <span\n class=\"text-truncate\"\n title=\"{{ 'Device type' | translate }}\"\n >\n {{ 'Device type' | translate }}\n </span>\n </div>\n <div class=\"col-2\">\n <span\n class=\"text-truncate\"\n title=\"{{ 'Versions' | translate }}\"\n >\n {{ 'Versions' | translate }}\n </span>\n </div>\n </c8y-li-body>\n </c8y-li>\n <c8y-list-group list>\n <c8y-li *c8yFor=\"let firmware of firmwares$ | async; let i = index; loadMore: 'auto'\">\n <c8y-li-radio\n (onSelect)=\"selectFirmware($event, firmware)\"\n [selected]=\"firmware === selected\"\n ></c8y-li-radio>\n <c8y-li-icon>\n <i c8yIcon=\"c8y-firmware\"></i>\n </c8y-li-icon>\n\n <c8y-li-body class=\"content-flex-40\">\n <div class=\"col-3 m-b-xs-8\">\n <div\n class=\"text-truncate\"\n title=\"{{ firmware.name }}\"\n >\n <c8y-highlight\n [text]=\"firmware.name\"\n [pattern]=\"textFilter$ | async\"\n ></c8y-highlight>\n </div>\n </div>\n <div class=\"col-4 m-b-xs-8\">\n <div\n class=\"text-truncate\"\n title=\"{{ getDescriptionTitle(firmware) }}\"\n >\n <span\n class=\"text-label-small m-r-8 visible-xs visible-sm\"\n translate\n >\n Description\n </span>\n <small *ngIf=\"firmware.description; else noDesc\">\n {{ firmware.description }}\n </small>\n <ng-template #noDesc>\n <small>\n <em\n class=\"text-muted\"\n translate\n >\n No description available.\n </em>\n </small>\n </ng-template>\n </div>\n </div>\n <div class=\"col-3 m-b-xs-8\">\n <div\n class=\"text-truncate\"\n title=\"{{ 'Device type' | translate }}: {{ getDeviceTypeTitle(firmware) }}\"\n >\n <span\n class=\"text-label-small m-r-8 visible-xs visible-sm\"\n translate\n >\n Device type\n </span>\n <span *ngIf=\"firmware.c8y_Filter?.type; else noType\">\n {{ firmware.c8y_Filter?.type }}\n </span>\n <ng-template #noType>\n <em\n class=\"text-muted\"\n translate\n >\n Undefined`device type`\n </em>\n </ng-template>\n </div>\n </div>\n <div class=\"col-2\">\n <span\n class=\"label label-warning m-l-auto-sm\"\n *ngIf=\"isLegacy(firmware)\"\n >\n <span translate>Legacy</span>\n </span>\n\n <span *ngIf=\"!isLegacy(firmware)\">\n <span *ngIf=\"(getBaseVersionsCount$(firmware) | async) === null\">\n <span class=\"label label-info\">\n <i\n class=\"icon-spin\"\n c8yIcon=\"circle-o-notch\"\n ></i>\n </span>\n </span>\n <span *ngIf=\"(getBaseVersionsCount$(firmware) | async) !== null\">\n <span [ngPlural]=\"getBaseVersionsCount$(firmware) | async\">\n <ng-template ngPluralCase=\"=0\">\n <span class=\"label label-default\">\n <span translate>No versions</span>\n </span>\n </ng-template>\n <ng-template ngPluralCase=\"=1\">\n <span\n class=\"text-label-small m-r-8 visible-xs visible-sm\"\n translate\n >\n version\n </span>\n <span class=\"badge badge-info m-l-auto-sm\">1</span>\n </ng-template>\n <ng-template ngPluralCase=\"other\">\n <span\n class=\"text-label-small m-r-8 visible-xs visible-sm\"\n translate\n >\n versions\n </span>\n <span class=\"badge badge-info m-l-auto-sm\">\n {{ getBaseVersionsCount$(firmware) | async }}\n </span>\n </ng-template>\n </span>\n </span>\n </span>\n </div>\n </c8y-li-body>\n </c8y-li>\n </c8y-list-group>\n</c8y-select-step-frame>\n","import { StepperSelectionEvent } from '@angular/cdk/stepper';\nimport { Component, OnDestroy } from '@angular/core';\nimport { IManagedObject, IOperation } from '@c8y/client';\nimport { gettext } from '@c8y/ngx-components';\nimport { BaseStepperComponent } from '@c8y/ngx-components/operations/bulk-operation-stepper';\nimport {\n BulkOperationsService,\n BulkOperationType,\n OperationDetails\n} from '@c8y/ngx-components/operations/bulk-operations-service';\nimport { TranslateService } from '@ngx-translate/core';\nimport { get } from 'lodash-es';\nimport { BehaviorSubject, Subscription } from 'rxjs';\n\n@Component({\n selector: 'c8y-stepper-firmware',\n templateUrl: 'stepper-bulk-type-firmware.component.html'\n})\nexport class StepperBulkTypeFirmwareComponent extends BaseStepperComponent implements OnDestroy {\n readonly type: BulkOperationType = BulkOperationType.FIRMWARE;\n readonly descriptionTemplate: string = gettext('{{ name }} (version {{ version }})');\n\n textFilter$: BehaviorSubject<string> = new BehaviorSubject('');\n\n stepData: { firmware: IManagedObject; versionOrPatch: IManagedObject } = {\n firmware: undefined,\n versionOrPatch: undefined\n };\n\n selectedFirmware: IManagedObject;\n selectedVersionOrPatch: IManagedObject;\n\n private subscription: Subscription;\n\n constructor(\n private bulkOperationService: BulkOperationsService,\n private translate: TranslateService\n ) {\n super();\n }\n\n goToVersionOrPatchStep({ stepper }) {\n const selectedFirmware = this.stepData.firmware;\n this.bulkOperationService.setFirmwareId(selectedFirmware.id);\n this.deviceTypes = (selectedFirmware.c8y_Filter || {}).type;\n stepper.next();\n }\n\n onVersionOrPatchSelected(versionOrPatch: IManagedObject) {\n this.stepData.versionOrPatch = versionOrPatch;\n }\n\n onFirmwareSelected(fw: IManagedObject) {\n this.stepData.firmware = fw;\n }\n\n ngOnDestroy(): void {\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n }\n\n protected retrieveOperationPrototype(): OperationDetails {\n const selectedFirmware = this.stepData.firmware;\n const selectedVersionOrPatch = this.stepData.versionOrPatch;\n\n if (!selectedFirmware || !selectedVersionOrPatch) {\n return;\n }\n\n const firmware: IManagedObject = {\n name: selectedFirmware.name,\n version: selectedVersionOrPatch.c8y_Firmware.version,\n url: selectedVersionOrPatch.c8y_Firmware.url\n } as unknown as IManagedObject;\n\n if (selectedVersionOrPatch.c8y_Patch) {\n firmware.isPatch = true;\n firmware.dependency = selectedVersionOrPatch.c8y_Patch.dependency;\n }\n\n const name = selectedFirmware.name;\n const version = selectedVersionOrPatch.c8y_Firmware.version;\n const description = `Update firmware to: ${name} (version: ${version}).`;\n\n return {\n name: gettext('Firmware update'),\n description: this.translate.instant(this.descriptionTemplate, {\n name: get(this.stepData, 'firmware.name'),\n version: get(this.stepData, 'versionOrPatch.c8y_Firmware.version')\n }),\n prototype: {\n description,\n c8y_Firmware: firmware\n } as unknown as IOperation\n };\n }\n\n protected onSelectionChange(event: StepperSelectionEvent) {\n this.textFilter$.next('');\n super.onSelectionChange(event);\n }\n}\n","<c8y-bulk-operation-stepper [type]=\"type\">\n <ng-container\n *customStep=\"\n 'Select firmware' | translate;\n completed: !!stepData?.firmware;\n buttonsDisabled: !stepData?.firmware;\n onNext: goToVersionOrPatchStep.bind(this)\n \"\n >\n <c8y-select-firmware-step\n [selected]=\"stepData?.firmware\"\n (firmware)=\"onFirmwareSelected($event)\"\n class=\"d-contents\"\n ></c8y-select-firmware-step\n ></ng-container>\n <ng-container\n *customStep=\"\n 'Select version or patch' | translate;\n completed: !!stepData?.versionOrPatch;\n buttonsDisabled: !stepData?.versionOrPatch\n \"\n >\n <c8y-preview-selection-frame\n [header]=\"'Select version or patch' | translate\"\n [name]=\"stepData?.firmware?.name\"\n [description]=\"stepData?.firmware?.description\"\n >\n <c8y-version-or-patch-step\n list\n [selected]=\"stepData?.versionOrPatch\"\n (versionOrPatch)=\"onVersionOrPatchSelected($event)\"\n >\n </c8y-version-or-patch-step>\n </c8y-preview-selection-frame>\n </ng-container>\n</c8y-bulk-operation-stepper>\n","import { NgModule } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\n\nimport { CoreModule, FormsModule, gettext } from '@c8y/ngx-components';\nimport { SharedRepositoryModule } from '@c8y/ngx-components/repository/shared';\nimport { BulkOperationStepperModule } from '@c8y/ngx-components/operations/bulk-operation-stepper';\nimport {\n baseUrl,\n BulkOperationType,\n hookListBulkType\n} from '@c8y/ngx-components/operations/bulk-operations-service';\nimport { StepperFramesModule } from '@c8y/ngx-components/operations/stepper-frames';\n\nimport { SelectFirmwareComponent } from './select-firmware.component';\nimport { VersionOrPatchComponent } from './version-or-patch.component';\nimport { StepperBulkTypeFirmwareComponent } from './stepper-bulk-type-firmware.component';\n\n/** Module for the 'Firmware update' operation type stepper */\n@NgModule({\n declarations: [\n StepperBulkTypeFirmwareComponent,\n VersionOrPatchComponent,\n SelectFirmwareComponent\n ],\n imports: [\n CoreModule,\n FormsModule,\n ReactiveFormsModule,\n BulkOperationStepperModule,\n StepperFramesModule,\n SharedRepositoryModule\n ],\n providers: [\n hookListBulkType({\n type: BulkOperationType.FIRMWARE,\n c8yIcon: 'c8y-firmware',\n name: gettext('Firmware update'),\n path: `${baseUrl}firmware`,\n component: StepperBulkTypeFirmwareComponent,\n fragments: ['c8y_Firmware'],\n selected: false\n })\n ],\n exports: [StepperBulkTypeFirmwareComponent]\n})\nexport class StepperBulkTypeFirmwareModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i2","i3","i1","i4","i5.VersionOrPatchComponent","i6.SelectFirmwareComponent","i7"],"mappings":"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"}
|
|
@@ -79,7 +79,7 @@ class SelectSoftwareStepComponent {
|
|
|
79
79
|
return this.repositoryService.listRepositoryEntries(RepositoryType.SOFTWARE, { query });
|
|
80
80
|
}
|
|
81
81
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SelectSoftwareStepComponent, deps: [{ token: i1.RepositoryService }, { token: i2.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
82
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: SelectSoftwareStepComponent, selector: "c8y-select-software-step", outputs: { software: "software" }, viewQueries: [{ propertyName: "radioButtons", predicate: ListItemRadioComponent, descendants: true }], ngImport: i0, template: "<c8y-select-step-frame\n [header]=\"'Select software' | translate\"\n [noResults]=\"\n ((textFilter$ | async)?.length ||\n (deviceType$ | async)?.length ||\n (softwareTypeFilter$ | async)?.length) &&\n (software$ | async)?.data.length === 0\n \"\n>\n <div\n class=\"row\"\n filters\n >\n <div class=\"col-md-4 m-b-xs-8 m-b-sm-8\">\n <div class=\"input-group input-group-search\">\n <input\n class=\"form-control\"\n title=\"{{ 'Filter\u2026' | translate }}\"\n placeholder=\"{{ 'Filter\u2026' | 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 </div>\n </div>\n <div class=\"col-md-4 m-b-xs-8 m-b-sm-8\">\n <c8y-form-group class=\"m-0\">\n <c8y-typeahead\n placeholder=\"{{ 'Type to filter device types\u2026' | translate }}\"\n name=\"deviceType\"\n [(ngModel)]=\"selectedDeviceType\"\n (onSearch)=\"deviceType$.next($event)\"\n [allowFreeEntries]=\"false\"\n >\n <c8y-li\n class=\"p-l-8 p-r-8 c8y-list__item--link\"\n (click)=\"selectedDeviceType = { name: '' }; deviceType$.next('')\"\n [active]=\"!selectedDeviceType?.name\"\n >\n <span>{{ 'All device types' | translate }}</span>\n </c8y-li>\n <c8y-li\n class=\"p-l-8 p-r-8 c8y-list__item--link\"\n *ngFor=\"let deviceType of deviceTypes\"\n (click)=\"selectedDeviceType = deviceType; deviceType$.next(deviceType.name)\"\n [active]=\"selectedDeviceType === deviceType\"\n >\n <c8y-highlight\n [text]=\"deviceType.name\"\n [pattern]=\"deviceType$ | async\"\n ></c8y-highlight>\n </c8y-li>\n </c8y-typeahead>\n <c8y-messages>\n <c8y-message\n name=\"notExisting\"\n [text]=\"'Select one of the existing device types.' | translate\"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n </div>\n <div class=\"col-md-4\">\n <c8y-form-group class=\"m-0\">\n <c8y-software-type\n [required]=\"false\"\n [emitResultsOnly]=\"true\"\n [showBtnInNotFoundMessage]=\"false\"\n [allowFreeEntries]=\"false\"\n [placeholder]=\"'Type to filter software types\u2026' | translate\"\n [showClearSelectionOption]=\"true\"\n (onSelectSoftware)=\"softwareTypeFilter$.next($event?.softwareType)\"\n ></c8y-software-type>\n <c8y-messages>\n <c8y-message\n name=\"notExisting\"\n [text]=\"'Select one of the existing device types.' | translate\"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n </div>\n </div>\n <c8y-li\n class=\"hidden-sm hidden-xs m-r-8 m-l-8\"\n header\n >\n <c8y-li-icon><i class=\"p-l-24\"></i></c8y-li-icon>\n <c8y-li-body class=\"content-flex-40 p-r-32\">\n <div class=\"col-5\">\n <span\n class=\"text-truncate\"\n title=\" {{ 'Name' | translate }} \"\n >\n {{ 'Name' | translate }}\n </span>\n </div>\n <div class=\"col-2\">\n <span\n class=\"text-truncate\"\n title=\"{{ 'Device type' | translate }}\"\n >\n {{ 'Device type' | translate }}\n </span>\n </div>\n <div class=\"col-3\">\n <span\n class=\"text-truncate\"\n title=\"{{ 'Software type' | translate }}\"\n >\n {{ 'Software type' | translate }}\n </span>\n </div>\n <div class=\"col-2\">\n <span\n class=\"text-truncate\"\n title=\"{{ 'Versions' | translate }}\"\n >\n {{ 'Versions' | translate }}\n </span>\n </div>\n </c8y-li-body>\n </c8y-li>\n <c8y-list-group list>\n <c8y-li\n *c8yFor=\"let software of software$ | async; loadMore: 'auto'\"\n #li\n >\n <c8y-li-icon>\n <i c8yIcon=\"c8y-tools\"></i>\n </c8y-li-icon>\n <div class=\"content-flex-40\">\n <div class=\"col-5 m-b-xs-8\">\n <button\n class=\"btn-clean\"\n title=\"{{ software.name }}\"\n type=\"button\"\n (click)=\"li.collapsed = !li.collapsed\"\n >\n <c8y-highlight\n [text]=\"software.name\"\n [pattern]=\"textFilter$ | async\"\n ></c8y-highlight>\n </button>\n </div>\n <div class=\"col-2 m-b-xs-8\">\n <div\n class=\"text-truncate\"\n title=\"{{ 'Device type' | translate }}: {{ getDeviceTypeTitle(software) }}\"\n >\n <span\n class=\"text-label-small m-r-8 visible-xs visible-sm\"\n translate\n >\n Device type\n </span>\n <span *ngIf=\"software.c8y_Filter?.type; else noType\">\n {{ software.c8y_Filter?.type }}\n </span>\n <ng-template #noType>\n <small>\n <em\n class=\"text-muted\"\n translate\n >\n Undefined`device type`\n </em>\n </small>\n </ng-template>\n </div>\n </div>\n <div class=\"col-3 m-b-xs-8\">\n <span\n class=\"text-label-small m-r-8 visible-xs visible-sm\"\n translate\n >\n Software type\n </span>\n <span\n class=\"label label-info\"\n *ngIf=\"software.softwareType; else emptyText\"\n >\n {{ software.softwareType }}\n </span>\n <ng-template #emptyText>\n <small class=\"text-muted\">\n <em translate>Undefined`software type`</em>\n </small>\n </ng-template>\n </div>\n <div class=\"col-2\">\n <span\n class=\"label label-warning m-l-auto-sm\"\n *ngIf=\"isLegacy(software)\"\n >\n <span translate>Legacy</span>\n </span>\n <span *ngIf=\"!isLegacy(software)\">\n <span *ngIf=\"(getBaseVersionsCount$(software) | async) === null\">\n <span class=\"label label-info\">\n <i\n class=\"icon-spin\"\n c8yIcon=\"circle-o-notch\"\n ></i>\n </span>\n </span>\n <span *ngIf=\"(getBaseVersionsCount$(software) | async) !== null\">\n <span [ngPlural]=\"getBaseVersionsCount$(software) | async\">\n <ng-template ngPluralCase=\"=1\">\n <span\n class=\"text-label-small m-r-8 visible-xs visible-sm\"\n translate\n >\n version\n </span>\n <span class=\"badge badge-info m-l-auto-sm\">1</span>\n </ng-template>\n <ng-template ngPluralCase=\"other\">\n <span\n class=\"text-label-small m-r-8 visible-xs visible-sm\"\n translate\n >\n versions\n </span>\n <span class=\"badge badge-info m-l-auto-sm\">\n {{ getBaseVersionsCount$(software) | async }}\n </span>\n </ng-template>\n </span>\n </span>\n </span>\n </div>\n </div>\n <c8y-li-collapse>\n <c8y-list-group>\n <c8y-li *c8yFor=\"let option of getVersions(software) | async\">\n <c8y-li-radio\n [name]=\"software.id\"\n (onSelect)=\"selectSoftware({ option: option, software: software })\"\n ></c8y-li-radio>\n <c8y-li-body class=\"content-flex-40 p-r-16\">\n <div class=\"col-4\">\n {{ option.c8y_Software.version }}\n </div>\n <div class=\"col-5\">\n <div\n class=\"text-truncate\"\n title=\"{{ option.c8y_Software.url }}\"\n >\n <span\n class=\"text-label-small m-r-4\"\n translate\n >\n File\n </span>\n <span>{{ option.c8y_Software.url }}</span>\n </div>\n </div>\n <div\n class=\"col-3 d-flex\"\n *ngIf=\"option.id === software.selectedId\"\n >\n <div\n class=\"c8y-select-wrapper d-inline-block m-l-auto\"\n style=\"margin: -4px 0\"\n >\n <select\n class=\"form-control input-sm\"\n id=\"action\"\n [(ngModel)]=\"option.action\"\n (change)=\"emitSoftware({ option: option, software: software })\"\n >\n <option [ngValue]=\"'install'\">\n {{ 'Install/update`software`' | translate }}\n </option>\n <option [ngValue]=\"'delete'\">{{ 'Remove`software`' | translate }}</option>\n </select>\n <span></span>\n </div>\n </div>\n </c8y-li-body>\n </c8y-li>\n </c8y-list-group>\n </c8y-li-collapse>\n </c8y-li>\n </c8y-list-group>\n</c8y-select-step-frame>\n", dependencies: [{ kind: "directive", type: i3.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i3.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgPlural, selector: "[ngPlural]", inputs: ["ngPlural"] }, { kind: "directive", type: i4.NgPluralCase, selector: "[ngPluralCase]" }, { kind: "directive", type: i3.ForOfDirective, selector: "[c8yFor]", inputs: ["c8yForOf", "c8yForLoadMore", "c8yForPipe", "c8yForNotFound", "c8yForMaxIterations", "c8yForLoadingTemplate", "c8yForLoadNextLabel", "c8yForRealtime", "c8yForRealtimeOptions", "c8yForComparator", "c8yForEnableVirtualScroll", "c8yForVirtualScrollElementSize", "c8yForVirtualScrollStrategy", "c8yForVirtualScrollContainerHeight"], outputs: ["c8yForCount"] }, { kind: "component", type: i3.HighlightComponent, selector: "c8y-highlight", inputs: ["pattern", "text", "elementClass", "shouldTrimPattern"] }, { kind: "component", type: i3.TypeaheadComponent, selector: "c8y-typeahead", inputs: ["required", "maxlength", "disabled", "allowFreeEntries", "placeholder", "displayProperty", "icon", "name", "autoClose", "hideNew", "container", "selected"], outputs: ["onSearch", "onIconClick"] }, { kind: "directive", type: i5.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3.FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "directive", type: i3.MessageDirective, selector: "c8y-message", inputs: ["name", "text"] }, { kind: "component", type: i3.MessagesComponent, selector: "c8y-messages", inputs: ["show", "defaults"] }, { kind: "component", type: i3.ListGroupComponent, selector: "c8y-list-group" }, { kind: "component", type: i3.ListItemComponent, selector: "c8y-list-item, c8y-li", inputs: ["active", "emptyActions", "collapsed", "selectable"], outputs: ["collapsedChange"] }, { kind: "component", type: i3.ListItemIconComponent, selector: "c8y-list-item-icon, c8y-li-icon", inputs: ["icon", "status"] }, { kind: "component", type: i3.ListItemBodyComponent, selector: "c8y-list-item-body, c8y-li-body", inputs: ["body"] }, { kind: "component", type: i3.ListItemCollapseComponent, selector: "c8y-list-item-collapse, c8y-li-collapse", inputs: ["collapseWay"] }, { kind: "component", type: i3.ListItemRadioComponent, selector: "c8y-list-item-radio, c8y-li-radio", inputs: ["selected", "name", "disabled", "value"], outputs: ["onSelect"] }, { kind: "component", type: i1.SoftwareTypeComponent, selector: "c8y-software-type", inputs: ["softwareTypeMO", "disabled", "style", "required", "placeholder", "emitResultsOnly", "showBtnInNotFoundMessage", "allowFreeEntries", "showClearSelectionOption", "clearSelectionOptionLabel", "presetSoftwareTypes"], outputs: ["onSelectSoftware"] }, { kind: "component", type: i3$1.SelectStepFrameComponent, selector: "c8y-select-step-frame", inputs: ["header", "noResults"] }, { kind: "pipe", type: i3.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }] }); }
|
|
82
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: SelectSoftwareStepComponent, selector: "c8y-select-software-step", outputs: { software: "software" }, viewQueries: [{ propertyName: "radioButtons", predicate: ListItemRadioComponent, descendants: true }], ngImport: i0, template: "<c8y-select-step-frame\n [header]=\"'Select software' | translate\"\n [noResults]=\"\n ((textFilter$ | async)?.length ||\n (deviceType$ | async)?.length ||\n (softwareTypeFilter$ | async)?.length) &&\n (software$ | async)?.data.length === 0\n \"\n>\n <div\n class=\"row\"\n filters\n >\n <div class=\"col-md-4 m-b-xs-8 m-b-sm-8\">\n <div class=\"input-group input-group-search\">\n <input\n class=\"form-control\"\n title=\"{{ 'Filter\u2026' | translate }}\"\n placeholder=\"{{ 'Filter\u2026' | 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 </div>\n </div>\n <div class=\"col-md-4 m-b-xs-8 m-b-sm-8\">\n <c8y-form-group class=\"m-0\">\n <c8y-typeahead\n placeholder=\"{{ 'Type to filter device types\u2026' | translate }}\"\n name=\"deviceType\"\n [(ngModel)]=\"selectedDeviceType\"\n (onSearch)=\"deviceType$.next($event)\"\n [allowFreeEntries]=\"false\"\n >\n <c8y-li\n class=\"p-l-8 p-r-8 c8y-list__item--link\"\n (click)=\"selectedDeviceType = { name: '' }; deviceType$.next('')\"\n [active]=\"!selectedDeviceType?.name\"\n >\n <span>{{ 'All device types' | translate }}</span>\n </c8y-li>\n <c8y-li\n class=\"p-l-8 p-r-8 c8y-list__item--link\"\n *ngFor=\"let deviceType of deviceTypes\"\n (click)=\"selectedDeviceType = deviceType; deviceType$.next(deviceType.name)\"\n [active]=\"selectedDeviceType === deviceType\"\n >\n <c8y-highlight\n [text]=\"deviceType.name\"\n [pattern]=\"deviceType$ | async\"\n ></c8y-highlight>\n </c8y-li>\n </c8y-typeahead>\n <c8y-messages>\n <c8y-message\n name=\"notExisting\"\n [text]=\"'Select one of the existing device types.' | translate\"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n </div>\n <div class=\"col-md-4\">\n <c8y-form-group class=\"m-0\">\n <c8y-software-type\n [required]=\"false\"\n [emitResultsOnly]=\"true\"\n [showBtnInNotFoundMessage]=\"false\"\n [allowFreeEntries]=\"false\"\n [placeholder]=\"'Type to filter software types\u2026' | translate\"\n [showClearSelectionOption]=\"true\"\n (onSelectSoftware)=\"softwareTypeFilter$.next($event?.softwareType)\"\n ></c8y-software-type>\n <c8y-messages>\n <c8y-message\n name=\"notExisting\"\n [text]=\"'Select one of the existing device types.' | translate\"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n </div>\n </div>\n <c8y-li\n class=\"hidden-sm hidden-xs m-r-8 m-l-8\"\n header\n >\n <c8y-li-icon><i class=\"p-l-24\"></i></c8y-li-icon>\n <c8y-li-body class=\"content-flex-40 p-r-32\">\n <div class=\"col-5\">\n <span\n class=\"text-truncate\"\n title=\" {{ 'Name' | translate }} \"\n >\n {{ 'Name' | translate }}\n </span>\n </div>\n <div class=\"col-2\">\n <span\n class=\"text-truncate\"\n title=\"{{ 'Device type' | translate }}\"\n >\n {{ 'Device type' | translate }}\n </span>\n </div>\n <div class=\"col-3\">\n <span\n class=\"text-truncate\"\n title=\"{{ 'Software type' | translate }}\"\n >\n {{ 'Software type' | translate }}\n </span>\n </div>\n <div class=\"col-2\">\n <span\n class=\"text-truncate\"\n title=\"{{ 'Versions' | translate }}\"\n >\n {{ 'Versions' | translate }}\n </span>\n </div>\n </c8y-li-body>\n </c8y-li>\n <c8y-list-group list>\n <c8y-li\n *c8yFor=\"let software of software$ | async; loadMore: 'auto'\"\n #li\n >\n <c8y-li-icon>\n <i c8yIcon=\"c8y-tools\"></i>\n </c8y-li-icon>\n <div class=\"content-flex-40\">\n <div class=\"col-5 m-b-xs-8\">\n <button\n class=\"btn-clean\"\n title=\"{{ software.name }}\"\n type=\"button\"\n (click)=\"li.collapsed = !li.collapsed\"\n >\n <c8y-highlight\n [text]=\"software.name\"\n [pattern]=\"textFilter$ | async\"\n ></c8y-highlight>\n </button>\n </div>\n <div class=\"col-2 m-b-xs-8\">\n <div\n class=\"text-truncate\"\n title=\"{{ 'Device type' | translate }}: {{ getDeviceTypeTitle(software) }}\"\n >\n <span\n class=\"text-label-small m-r-8 visible-xs visible-sm\"\n translate\n >\n Device type\n </span>\n <span *ngIf=\"software.c8y_Filter?.type; else noType\">\n {{ software.c8y_Filter?.type }}\n </span>\n <ng-template #noType>\n <small>\n <em\n class=\"text-muted\"\n translate\n >\n Undefined`device type`\n </em>\n </small>\n </ng-template>\n </div>\n </div>\n <div class=\"col-3 m-b-xs-8\">\n <span\n class=\"text-label-small m-r-8 visible-xs visible-sm\"\n translate\n >\n Software type\n </span>\n <span\n class=\"label label-info\"\n *ngIf=\"software.softwareType; else emptyText\"\n >\n {{ software.softwareType }}\n </span>\n <ng-template #emptyText>\n <small class=\"text-muted\">\n <em translate>Undefined`software type`</em>\n </small>\n </ng-template>\n </div>\n <div class=\"col-2\">\n <span\n class=\"label label-warning m-l-auto-sm\"\n *ngIf=\"isLegacy(software)\"\n >\n <span translate>Legacy</span>\n </span>\n <span *ngIf=\"!isLegacy(software)\">\n <span *ngIf=\"(getBaseVersionsCount$(software) | async) === null\">\n <span class=\"label label-info\">\n <i\n class=\"icon-spin\"\n c8yIcon=\"circle-o-notch\"\n ></i>\n </span>\n </span>\n <span *ngIf=\"(getBaseVersionsCount$(software) | async) !== null\">\n <span [ngPlural]=\"getBaseVersionsCount$(software) | async\">\n <ng-template ngPluralCase=\"=1\">\n <span\n class=\"text-label-small m-r-8 visible-xs visible-sm\"\n translate\n >\n version\n </span>\n <span class=\"badge badge-info m-l-auto-sm\">1</span>\n </ng-template>\n <ng-template ngPluralCase=\"other\">\n <span\n class=\"text-label-small m-r-8 visible-xs visible-sm\"\n translate\n >\n versions\n </span>\n <span class=\"badge badge-info m-l-auto-sm\">\n {{ getBaseVersionsCount$(software) | async }}\n </span>\n </ng-template>\n </span>\n </span>\n </span>\n </div>\n </div>\n <c8y-li-collapse>\n <c8y-list-group>\n <c8y-li *c8yFor=\"let option of getVersions(software) | async\">\n <c8y-li-radio\n [name]=\"software.id\"\n (onSelect)=\"selectSoftware({ option: option, software: software })\"\n ></c8y-li-radio>\n <c8y-li-body class=\"content-flex-40 p-r-16\">\n <div class=\"col-4\">\n {{ option.c8y_Software.version }}\n </div>\n <div class=\"col-5\">\n <div\n class=\"text-truncate\"\n title=\"{{ option.c8y_Software.url }}\"\n >\n <span\n class=\"text-label-small m-r-4\"\n translate\n >\n File\n </span>\n <span>{{ option.c8y_Software.url }}</span>\n </div>\n </div>\n <div\n class=\"col-3 d-flex\"\n *ngIf=\"option.id === software.selectedId\"\n >\n <div\n class=\"c8y-select-wrapper d-inline-block m-l-auto\"\n style=\"margin: -4px 0\"\n >\n <select\n class=\"form-control input-sm\"\n id=\"action\"\n [(ngModel)]=\"option.action\"\n (change)=\"emitSoftware({ option: option, software: software })\"\n >\n <option [ngValue]=\"'install'\">\n {{ 'Install/update`software`' | translate }}\n </option>\n <option [ngValue]=\"'delete'\">{{ 'Remove`software`' | translate }}</option>\n </select>\n <span></span>\n </div>\n </div>\n </c8y-li-body>\n </c8y-li>\n </c8y-list-group>\n </c8y-li-collapse>\n </c8y-li>\n </c8y-list-group>\n</c8y-select-step-frame>\n", dependencies: [{ kind: "directive", type: i3.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i3.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgPlural, selector: "[ngPlural]", inputs: ["ngPlural"] }, { kind: "directive", type: i4.NgPluralCase, selector: "[ngPluralCase]" }, { kind: "directive", type: i3.ForOfDirective, selector: "[c8yFor]", inputs: ["c8yForOf", "c8yForLoadMore", "c8yForPipe", "c8yForNotFound", "c8yForMaxIterations", "c8yForLoadingTemplate", "c8yForLoadNextLabel", "c8yForLoadingLabel", "c8yForRealtime", "c8yForRealtimeOptions", "c8yForComparator", "c8yForEnableVirtualScroll", "c8yForVirtualScrollElementSize", "c8yForVirtualScrollStrategy", "c8yForVirtualScrollContainerHeight"], outputs: ["c8yForCount", "c8yForLoadMoreComponent"] }, { kind: "component", type: i3.HighlightComponent, selector: "c8y-highlight", inputs: ["pattern", "text", "elementClass", "shouldTrimPattern"] }, { kind: "component", type: i3.TypeaheadComponent, selector: "c8y-typeahead", inputs: ["required", "maxlength", "disabled", "allowFreeEntries", "placeholder", "displayProperty", "icon", "name", "autoClose", "hideNew", "container", "selected"], outputs: ["onSearch", "onIconClick"] }, { kind: "directive", type: i5.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3.FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "directive", type: i3.MessageDirective, selector: "c8y-message", inputs: ["name", "text"] }, { kind: "component", type: i3.MessagesComponent, selector: "c8y-messages", inputs: ["show", "defaults"] }, { kind: "component", type: i3.ListGroupComponent, selector: "c8y-list-group" }, { kind: "component", type: i3.ListItemComponent, selector: "c8y-list-item, c8y-li", inputs: ["active", "emptyActions", "collapsed", "selectable"], outputs: ["collapsedChange"] }, { kind: "component", type: i3.ListItemIconComponent, selector: "c8y-list-item-icon, c8y-li-icon", inputs: ["icon", "status"] }, { kind: "component", type: i3.ListItemBodyComponent, selector: "c8y-list-item-body, c8y-li-body", inputs: ["body"] }, { kind: "component", type: i3.ListItemCollapseComponent, selector: "c8y-list-item-collapse, c8y-li-collapse", inputs: ["collapseWay"] }, { kind: "component", type: i3.ListItemRadioComponent, selector: "c8y-list-item-radio, c8y-li-radio", inputs: ["selected", "name", "disabled", "value"], outputs: ["onSelect"] }, { kind: "component", type: i1.SoftwareTypeComponent, selector: "c8y-software-type", inputs: ["softwareTypeMO", "disabled", "style", "required", "placeholder", "emitResultsOnly", "showBtnInNotFoundMessage", "allowFreeEntries", "showClearSelectionOption", "clearSelectionOptionLabel", "presetSoftwareTypes"], outputs: ["onSelectSoftware"] }, { kind: "component", type: i3$1.SelectStepFrameComponent, selector: "c8y-select-step-frame", inputs: ["header", "noResults"] }, { kind: "pipe", type: i3.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }] }); }
|
|
83
83
|
}
|
|
84
84
|
__decorate([
|
|
85
85
|
memoize(property('id')),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"c8y-ngx-components-operations-stepper-bulk-type-software.mjs","sources":["../../operations/stepper-bulk-type-software/select-software-step.component.ts","../../operations/stepper-bulk-type-software/select-software-step.component.html","../../operations/stepper-bulk-type-software/confirm-software-selection-step.component.ts","../../operations/stepper-bulk-type-software/confirm-software-selection-step.component.html","../../operations/stepper-bulk-type-software/stepper-bulk-type-software.component.ts","../../operations/stepper-bulk-type-software/stepper-bulk-type-software.component.html","../../operations/stepper-bulk-type-software/stepper-bulk-type-software.module.ts","../../operations/stepper-bulk-type-software/c8y-ngx-components-operations-stepper-bulk-type-software.ts"],"sourcesContent":["import { Component, EventEmitter, Output, QueryList, ViewChildren } from '@angular/core';\nimport { IManagedObject, IResultList } from '@c8y/client';\nimport { gettext, ListItemRadioComponent, memoize } from '@c8y/ngx-components';\nimport { RepositoryService, RepositoryType } from '@c8y/ngx-components/repository/shared';\nimport { TranslateService } from '@ngx-translate/core';\nimport { get, isEqual, property, uniqWith } from 'lodash-es';\nimport { BehaviorSubject, combineLatest, from, Observable, Subscription } from 'rxjs';\nimport { debounceTime, distinctUntilChanged, shareReplay, switchMap } from 'rxjs/operators';\nimport { ISelectedSoftware } from './select-software.model';\n\n@Component({\n selector: 'c8y-select-software-step',\n templateUrl: 'select-software-step.component.html'\n})\nexport class SelectSoftwareStepComponent {\n @Output() software: EventEmitter<ISelectedSoftware> = new EventEmitter<ISelectedSoftware>();\n textFilter$: BehaviorSubject<string> = new BehaviorSubject('');\n deviceType$: BehaviorSubject<string> = new BehaviorSubject('');\n softwareTypeFilter$: BehaviorSubject<string> = new BehaviorSubject('');\n deviceTypes = [];\n selectedDeviceType = { name: '' };\n isLegacy = this.repositoryService.isLegacyEntry.bind(this.repositoryService);\n software$: Observable<IResultList<IManagedObject>> = combineLatest(\n this.textFilter$,\n this.deviceType$,\n this.softwareTypeFilter$\n ).pipe(\n switchMap(([name, deviceType, softwareType]) =>\n this.getSoftware(name, deviceType, softwareType)\n ),\n shareReplay(1)\n );\n readonly NO_DEVICE_TYPE_AVAILABLE = gettext('No device type available');\n @ViewChildren(ListItemRadioComponent) radioButtons: QueryList<ListItemRadioComponent>;\n\n private deviceTypeSubscription: Subscription;\n\n constructor(private repositoryService: RepositoryService, private translate: TranslateService) {\n this.loadDeviceTypes();\n }\n\n @memoize(property('id'))\n getBaseVersionsCount$(software: IManagedObject): Observable<number> {\n return this.repositoryService.getBaseVersionsCount$(software).pipe(shareReplay(1));\n }\n\n @memoize(property('id'))\n getVersions(software: IManagedObject) {\n return this.repositoryService.listAllVersions(software);\n }\n\n getDeviceTypeTitle(software: IManagedObject): string {\n return get(software, 'c8y_Filter.type', this.translate.instant(this.NO_DEVICE_TYPE_AVAILABLE));\n }\n\n loadDeviceTypes() {\n this.deviceTypeSubscription = this.deviceType$\n .pipe(\n debounceTime(300),\n distinctUntilChanged(),\n switchMap(searchStr => {\n const query = { 'c8y_Filter.type': `*${searchStr}*` };\n return from(\n this.repositoryService.listRepositoryEntries(RepositoryType.SOFTWARE, { query })\n );\n })\n )\n .subscribe(result => {\n const { data } = result;\n this.deviceTypes = uniqWith(\n data.map(val => ({ name: val.c8y_Filter.type })),\n isEqual\n );\n });\n }\n\n ngOnDestroy() {\n this.deviceTypeSubscription.unsubscribe();\n }\n\n resetSelection() {\n this.radioButtons.map(radio => radio.reset());\n }\n\n selectSoftware({ option, software }) {\n software.selectedId = option.id;\n option.action = 'install';\n this.emitSoftware({ option, software });\n }\n\n emitSoftware({ option, software }) {\n const emitData = Object.assign(\n {},\n { software },\n { version: option },\n { action: option.action }\n );\n this.software.emit(emitData);\n }\n\n private getSoftware(name?: string, deviceType?: string, softwareType?: string) {\n const query: any = name ? { name: `*${name}*` } : {};\n if (deviceType) {\n query.__or = [{ 'c8y_Filter.type': deviceType }, { __not: { __has: `c8y_Filter.type` } }];\n }\n if (softwareType) {\n query.__or = { softwareType };\n }\n return this.repositoryService.listRepositoryEntries(RepositoryType.SOFTWARE, { query });\n }\n}\n","<c8y-select-step-frame\n [header]=\"'Select software' | translate\"\n [noResults]=\"\n ((textFilter$ | async)?.length ||\n (deviceType$ | async)?.length ||\n (softwareTypeFilter$ | async)?.length) &&\n (software$ | async)?.data.length === 0\n \"\n>\n <div\n class=\"row\"\n filters\n >\n <div class=\"col-md-4 m-b-xs-8 m-b-sm-8\">\n <div class=\"input-group input-group-search\">\n <input\n class=\"form-control\"\n title=\"{{ 'Filter…' | translate }}\"\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 </div>\n </div>\n <div class=\"col-md-4 m-b-xs-8 m-b-sm-8\">\n <c8y-form-group class=\"m-0\">\n <c8y-typeahead\n placeholder=\"{{ 'Type to filter device types…' | translate }}\"\n name=\"deviceType\"\n [(ngModel)]=\"selectedDeviceType\"\n (onSearch)=\"deviceType$.next($event)\"\n [allowFreeEntries]=\"false\"\n >\n <c8y-li\n class=\"p-l-8 p-r-8 c8y-list__item--link\"\n (click)=\"selectedDeviceType = { name: '' }; deviceType$.next('')\"\n [active]=\"!selectedDeviceType?.name\"\n >\n <span>{{ 'All device types' | translate }}</span>\n </c8y-li>\n <c8y-li\n class=\"p-l-8 p-r-8 c8y-list__item--link\"\n *ngFor=\"let deviceType of deviceTypes\"\n (click)=\"selectedDeviceType = deviceType; deviceType$.next(deviceType.name)\"\n [active]=\"selectedDeviceType === deviceType\"\n >\n <c8y-highlight\n [text]=\"deviceType.name\"\n [pattern]=\"deviceType$ | async\"\n ></c8y-highlight>\n </c8y-li>\n </c8y-typeahead>\n <c8y-messages>\n <c8y-message\n name=\"notExisting\"\n [text]=\"'Select one of the existing device types.' | translate\"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n </div>\n <div class=\"col-md-4\">\n <c8y-form-group class=\"m-0\">\n <c8y-software-type\n [required]=\"false\"\n [emitResultsOnly]=\"true\"\n [showBtnInNotFoundMessage]=\"false\"\n [allowFreeEntries]=\"false\"\n [placeholder]=\"'Type to filter software types…' | translate\"\n [showClearSelectionOption]=\"true\"\n (onSelectSoftware)=\"softwareTypeFilter$.next($event?.softwareType)\"\n ></c8y-software-type>\n <c8y-messages>\n <c8y-message\n name=\"notExisting\"\n [text]=\"'Select one of the existing device types.' | translate\"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n </div>\n </div>\n <c8y-li\n class=\"hidden-sm hidden-xs m-r-8 m-l-8\"\n header\n >\n <c8y-li-icon><i class=\"p-l-24\"></i></c8y-li-icon>\n <c8y-li-body class=\"content-flex-40 p-r-32\">\n <div class=\"col-5\">\n <span\n class=\"text-truncate\"\n title=\" {{ 'Name' | translate }} \"\n >\n {{ 'Name' | translate }}\n </span>\n </div>\n <div class=\"col-2\">\n <span\n class=\"text-truncate\"\n title=\"{{ 'Device type' | translate }}\"\n >\n {{ 'Device type' | translate }}\n </span>\n </div>\n <div class=\"col-3\">\n <span\n class=\"text-truncate\"\n title=\"{{ 'Software type' | translate }}\"\n >\n {{ 'Software type' | translate }}\n </span>\n </div>\n <div class=\"col-2\">\n <span\n class=\"text-truncate\"\n title=\"{{ 'Versions' | translate }}\"\n >\n {{ 'Versions' | translate }}\n </span>\n </div>\n </c8y-li-body>\n </c8y-li>\n <c8y-list-group list>\n <c8y-li\n *c8yFor=\"let software of software$ | async; loadMore: 'auto'\"\n #li\n >\n <c8y-li-icon>\n <i c8yIcon=\"c8y-tools\"></i>\n </c8y-li-icon>\n <div class=\"content-flex-40\">\n <div class=\"col-5 m-b-xs-8\">\n <button\n class=\"btn-clean\"\n title=\"{{ software.name }}\"\n type=\"button\"\n (click)=\"li.collapsed = !li.collapsed\"\n >\n <c8y-highlight\n [text]=\"software.name\"\n [pattern]=\"textFilter$ | async\"\n ></c8y-highlight>\n </button>\n </div>\n <div class=\"col-2 m-b-xs-8\">\n <div\n class=\"text-truncate\"\n title=\"{{ 'Device type' | translate }}: {{ getDeviceTypeTitle(software) }}\"\n >\n <span\n class=\"text-label-small m-r-8 visible-xs visible-sm\"\n translate\n >\n Device type\n </span>\n <span *ngIf=\"software.c8y_Filter?.type; else noType\">\n {{ software.c8y_Filter?.type }}\n </span>\n <ng-template #noType>\n <small>\n <em\n class=\"text-muted\"\n translate\n >\n Undefined`device type`\n </em>\n </small>\n </ng-template>\n </div>\n </div>\n <div class=\"col-3 m-b-xs-8\">\n <span\n class=\"text-label-small m-r-8 visible-xs visible-sm\"\n translate\n >\n Software type\n </span>\n <span\n class=\"label label-info\"\n *ngIf=\"software.softwareType; else emptyText\"\n >\n {{ software.softwareType }}\n </span>\n <ng-template #emptyText>\n <small class=\"text-muted\">\n <em translate>Undefined`software type`</em>\n </small>\n </ng-template>\n </div>\n <div class=\"col-2\">\n <span\n class=\"label label-warning m-l-auto-sm\"\n *ngIf=\"isLegacy(software)\"\n >\n <span translate>Legacy</span>\n </span>\n <span *ngIf=\"!isLegacy(software)\">\n <span *ngIf=\"(getBaseVersionsCount$(software) | async) === null\">\n <span class=\"label label-info\">\n <i\n class=\"icon-spin\"\n c8yIcon=\"circle-o-notch\"\n ></i>\n </span>\n </span>\n <span *ngIf=\"(getBaseVersionsCount$(software) | async) !== null\">\n <span [ngPlural]=\"getBaseVersionsCount$(software) | async\">\n <ng-template ngPluralCase=\"=1\">\n <span\n class=\"text-label-small m-r-8 visible-xs visible-sm\"\n translate\n >\n version\n </span>\n <span class=\"badge badge-info m-l-auto-sm\">1</span>\n </ng-template>\n <ng-template ngPluralCase=\"other\">\n <span\n class=\"text-label-small m-r-8 visible-xs visible-sm\"\n translate\n >\n versions\n </span>\n <span class=\"badge badge-info m-l-auto-sm\">\n {{ getBaseVersionsCount$(software) | async }}\n </span>\n </ng-template>\n </span>\n </span>\n </span>\n </div>\n </div>\n <c8y-li-collapse>\n <c8y-list-group>\n <c8y-li *c8yFor=\"let option of getVersions(software) | async\">\n <c8y-li-radio\n [name]=\"software.id\"\n (onSelect)=\"selectSoftware({ option: option, software: software })\"\n ></c8y-li-radio>\n <c8y-li-body class=\"content-flex-40 p-r-16\">\n <div class=\"col-4\">\n {{ option.c8y_Software.version }}\n </div>\n <div class=\"col-5\">\n <div\n class=\"text-truncate\"\n title=\"{{ option.c8y_Software.url }}\"\n >\n <span\n class=\"text-label-small m-r-4\"\n translate\n >\n File\n </span>\n <span>{{ option.c8y_Software.url }}</span>\n </div>\n </div>\n <div\n class=\"col-3 d-flex\"\n *ngIf=\"option.id === software.selectedId\"\n >\n <div\n class=\"c8y-select-wrapper d-inline-block m-l-auto\"\n style=\"margin: -4px 0\"\n >\n <select\n class=\"form-control input-sm\"\n id=\"action\"\n [(ngModel)]=\"option.action\"\n (change)=\"emitSoftware({ option: option, software: software })\"\n >\n <option [ngValue]=\"'install'\">\n {{ 'Install/update`software`' | translate }}\n </option>\n <option [ngValue]=\"'delete'\">{{ 'Remove`software`' | translate }}</option>\n </select>\n <span></span>\n </div>\n </div>\n </c8y-li-body>\n </c8y-li>\n </c8y-list-group>\n </c8y-li-collapse>\n </c8y-li>\n </c8y-list-group>\n</c8y-select-step-frame>\n","import { Component, Input, OnChanges, SimpleChanges } from '@angular/core';\nimport { gettext } from '@c8y/ngx-components';\nimport { has, uniq } from 'lodash-es';\nimport { ISelectedSoftware } from './select-software.model';\n\n@Component({\n selector: 'c8y-confirm-software-selection-step',\n templateUrl: 'confirm-software-selection-step.component.html'\n})\nexport class ConfirmSoftwareSelectionStepComponent implements OnChanges {\n @Input() selectedItems: ISelectedSoftware[];\n title: string;\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.selectedItems) {\n const deviceTypes: string[] = this.deviceTypes;\n this.title =\n deviceTypes && deviceTypes.length\n ? deviceTypes.join(', ')\n : gettext('Undefined`device type`');\n }\n }\n\n get selectedToInstall() {\n return this.selectedItems.filter(software => software.action === 'install');\n }\n\n get selectedToDelete() {\n return this.selectedItems.filter(software => software.action === 'delete');\n }\n\n get deviceTypes() {\n return uniq(\n this.selectedItems\n .filter(val => has(val, ['software', 'c8y_Filter', 'type']))\n .map(val => val.software.c8y_Filter.type)\n .filter(val => !!val)\n );\n }\n}\n","<c8y-preview-selection-frame [header]=\"'Confirm selection' | translate\">\n <ng-container *previewBlock=\"'Device type' | translate\">\n <ng-container *ngIf=\"deviceTypes.length > 0; else noType\">\n <span *ngFor=\"let deviceType of deviceTypes; let last = last\"\n >{{ deviceType }}{{ last ? '' : ', ' }}</span\n >\n </ng-container>\n <ng-template #noType>\n <em class=\"text-muted\" translate>Undefined`device type`</em>\n </ng-template>\n </ng-container>\n <c8y-list-group\n *previewBlock=\"'Installations/updates`software`' | translate; if: !!selectedToInstall.length\"\n >\n <c8y-li *ngFor=\"let selectedItem of selectedToInstall\">\n <c8y-li-icon>\n <i c8yIcon=\"c8y-tools\"></i>\n </c8y-li-icon>\n <c8y-li-body class=\"content-flex-10\">\n <div class=\"col-6 text-truncate\" title=\"{{ selectedItem.software.name }}\">\n {{ selectedItem.software.name }}\n </div>\n <div class=\"col-6 text-right\" *ngIf=\"!!selectedItem?.version?.c8y_Software?.version\">\n <span class=\"text-label-small m-r-4\" translate> Version </span>\n <span>\n {{ selectedItem.version.c8y_Software.version }}\n </span>\n </div>\n </c8y-li-body>\n </c8y-li>\n </c8y-list-group>\n <c8y-list-group *previewBlock=\"'Removals`software`' | translate; if: !!selectedToDelete.length\">\n <c8y-li *ngFor=\"let selectedItem of selectedToDelete\">\n <c8y-li-icon>\n <i c8yIcon=\"c8y-tools\"></i>\n </c8y-li-icon>\n <c8y-li-body class=\"content-flex-10\">\n <div class=\"col-6\">\n {{ selectedItem.software.name }}\n </div>\n <div class=\"col-6 text-right\">\n <span class=\"text-label-small m-r-8\" translate> Version </span>\n <span>\n {{ selectedItem.version.c8y_Software.version }}\n </span>\n </div>\n </c8y-li-body>\n </c8y-li>\n </c8y-list-group>\n</c8y-preview-selection-frame>\n","import { CdkStep } from '@angular/cdk/stepper';\nimport { Component, ViewChild } from '@angular/core';\nimport { IOperation } from '@c8y/client';\nimport { C8yStepper, gettext, ModalService, Status } from '@c8y/ngx-components';\nimport { BaseStepperComponent } from '@c8y/ngx-components/operations/bulk-operation-stepper';\nimport {\n BulkOperationType,\n OperationDetails\n} from '@c8y/ngx-components/operations/bulk-operations-service';\nimport { TranslateService } from '@ngx-translate/core';\nimport { uniq } from 'lodash-es';\nimport { SelectSoftwareStepComponent } from './select-software-step.component';\nimport { ISelectedSoftware, ISoftwareUpdateOperationPrototype } from './select-software.model';\n\n@Component({\n selector: 'c8y-stepper-bulk-type-software',\n templateUrl: 'stepper-bulk-type-software.component.html'\n})\nexport class StepperBulkTypeSoftwareComponent extends BaseStepperComponent {\n readonly type: BulkOperationType = BulkOperationType.SOFTWARE;\n readonly descriptionTemplateSingle: string = gettext(\n 'Update software to: {{ name }} (version {{ version }})'\n );\n readonly descriptionTemplateOneOther: string = gettext(\n 'Update software to: {{ name }} (version {{ version }}) and one other'\n );\n readonly descriptionTemplateMultiple: string = gettext(\n 'Update software to: {{ name }} (version {{ version }}) and {{ count }} others'\n );\n\n selectedSoftware: ISelectedSoftware[] = [];\n @ViewChild(SelectSoftwareStepComponent, { static: false })\n selectSoftware: SelectSoftwareStepComponent;\n\n constructor(private modal: ModalService, private translate: TranslateService) {\n super();\n }\n\n onSoftwareSelected(selectedItem) {\n this.selectedSoftware = this.selectedSoftware.filter(\n item => item.software.id !== selectedItem.software.id\n );\n this.selectedSoftware.push(selectedItem);\n }\n\n async confirmSoftwareSelection($event: { stepper: C8yStepper; step: CdkStep }) {\n const deviceTypes: string[] = this.getUniqueDeviceTypes();\n this.deviceTypes = deviceTypes;\n if (deviceTypes.length > 1) {\n try {\n await this.modal.confirm(\n gettext('Selected software for various device types'),\n gettext('Operation may fail due to unsupported software. Do you want to proceed?'),\n Status.WARNING,\n { ok: gettext('Confirm'), cancel: gettext('Cancel') }\n );\n $event.stepper.next();\n } catch (ex) {\n this.selectedSoftware = [];\n this.selectSoftware.resetSelection();\n }\n } else {\n $event.stepper.next();\n }\n }\n\n protected retrieveOperationPrototype(): OperationDetails {\n const softwareList: ISoftwareUpdateOperationPrototype[] = this.selectedSoftware.map(item => ({\n name: item.software.name,\n version: item.version.c8y_Software.version,\n url: item.version.c8y_Software.url,\n action: item.action\n }));\n\n const interpolationParams: object = {\n name: softwareList[0].name,\n version: softwareList[0].version,\n count: softwareList.length - 1\n };\n let description: string;\n switch (softwareList.length) {\n case 1:\n description = this.translate.instant(this.descriptionTemplateSingle, interpolationParams);\n break;\n case 2:\n description = this.translate.instant(this.descriptionTemplateOneOther, interpolationParams);\n break;\n default:\n description = this.translate.instant(this.descriptionTemplateMultiple, interpolationParams);\n }\n\n return {\n name: gettext('Software update'),\n prototype: {\n description,\n c8y_SoftwareUpdate: softwareList\n } as unknown as IOperation\n };\n }\n\n private getUniqueDeviceTypes(): string[] {\n return uniq(\n this.selectedSoftware\n .map(item => item.software.c8y_Filter && item.software.c8y_Filter.type)\n .filter(type => !!type)\n );\n }\n}\n","<c8y-bulk-operation-stepper [type]=\"type\">\n <ng-container\n *customStep=\"\n 'Select software' | translate;\n completed: !!selectedSoftware.length;\n buttonsDisabled: !selectedSoftware.length;\n onNext: confirmSoftwareSelection.bind(this)\n \"\n >\n <c8y-select-software-step\n (software)=\"onSoftwareSelected($event)\"\n class=\"d-contents\"\n ></c8y-select-software-step>\n </ng-container>\n <ng-container *customStep=\"'Confirm selected software' | translate\">\n <c8y-confirm-software-selection-step\n class=\"d-contents\"\n [selectedItems]=\"selectedSoftware\"\n ></c8y-confirm-software-selection-step>\n </ng-container>\n</c8y-bulk-operation-stepper>\n","import { NgModule } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\n\nimport { CoreModule, FormsModule, gettext } from '@c8y/ngx-components';\nimport { SharedRepositoryModule } from '@c8y/ngx-components/repository/shared';\nimport { BulkOperationStepperModule } from '@c8y/ngx-components/operations/bulk-operation-stepper';\nimport {\n baseUrl,\n BulkOperationType,\n hookListBulkType\n} from '@c8y/ngx-components/operations/bulk-operations-service';\nimport { StepperFramesModule } from '@c8y/ngx-components/operations/stepper-frames';\n\nimport { ConfirmSoftwareSelectionStepComponent } from './confirm-software-selection-step.component';\nimport { SelectSoftwareStepComponent } from './select-software-step.component';\nimport { StepperBulkTypeSoftwareComponent } from './stepper-bulk-type-software.component';\n\n/** Module for the 'Software update' operation type stepper */\n@NgModule({\n declarations: [\n StepperBulkTypeSoftwareComponent,\n ConfirmSoftwareSelectionStepComponent,\n SelectSoftwareStepComponent\n ],\n imports: [\n CoreModule,\n FormsModule,\n ReactiveFormsModule,\n BulkOperationStepperModule,\n SharedRepositoryModule,\n StepperFramesModule\n ],\n providers: [\n hookListBulkType({\n type: BulkOperationType.SOFTWARE,\n c8yIcon: 'c8y-tools',\n name: gettext('Software update'),\n path: `${baseUrl}software`,\n component: StepperBulkTypeSoftwareComponent,\n fragments: ['c8y_SoftwareList', 'c8y_SoftwareUpdate'],\n selected: false\n })\n ],\n exports: [StepperBulkTypeSoftwareComponent]\n})\nexport class StepperBulkTypeSoftwareModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i6","i1","i2","i3","i4.ConfirmSoftwareSelectionStepComponent","i5.SelectSoftwareStepComponent"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"c8y-ngx-components-operations-stepper-bulk-type-software.mjs","sources":["../../operations/stepper-bulk-type-software/select-software-step.component.ts","../../operations/stepper-bulk-type-software/select-software-step.component.html","../../operations/stepper-bulk-type-software/confirm-software-selection-step.component.ts","../../operations/stepper-bulk-type-software/confirm-software-selection-step.component.html","../../operations/stepper-bulk-type-software/stepper-bulk-type-software.component.ts","../../operations/stepper-bulk-type-software/stepper-bulk-type-software.component.html","../../operations/stepper-bulk-type-software/stepper-bulk-type-software.module.ts","../../operations/stepper-bulk-type-software/c8y-ngx-components-operations-stepper-bulk-type-software.ts"],"sourcesContent":["import { Component, EventEmitter, Output, QueryList, ViewChildren } from '@angular/core';\nimport { IManagedObject, IResultList } from '@c8y/client';\nimport { gettext, ListItemRadioComponent, memoize } from '@c8y/ngx-components';\nimport { RepositoryService, RepositoryType } from '@c8y/ngx-components/repository/shared';\nimport { TranslateService } from '@ngx-translate/core';\nimport { get, isEqual, property, uniqWith } from 'lodash-es';\nimport { BehaviorSubject, combineLatest, from, Observable, Subscription } from 'rxjs';\nimport { debounceTime, distinctUntilChanged, shareReplay, switchMap } from 'rxjs/operators';\nimport { ISelectedSoftware } from './select-software.model';\n\n@Component({\n selector: 'c8y-select-software-step',\n templateUrl: 'select-software-step.component.html'\n})\nexport class SelectSoftwareStepComponent {\n @Output() software: EventEmitter<ISelectedSoftware> = new EventEmitter<ISelectedSoftware>();\n textFilter$: BehaviorSubject<string> = new BehaviorSubject('');\n deviceType$: BehaviorSubject<string> = new BehaviorSubject('');\n softwareTypeFilter$: BehaviorSubject<string> = new BehaviorSubject('');\n deviceTypes = [];\n selectedDeviceType = { name: '' };\n isLegacy = this.repositoryService.isLegacyEntry.bind(this.repositoryService);\n software$: Observable<IResultList<IManagedObject>> = combineLatest(\n this.textFilter$,\n this.deviceType$,\n this.softwareTypeFilter$\n ).pipe(\n switchMap(([name, deviceType, softwareType]) =>\n this.getSoftware(name, deviceType, softwareType)\n ),\n shareReplay(1)\n );\n readonly NO_DEVICE_TYPE_AVAILABLE = gettext('No device type available');\n @ViewChildren(ListItemRadioComponent) radioButtons: QueryList<ListItemRadioComponent>;\n\n private deviceTypeSubscription: Subscription;\n\n constructor(private repositoryService: RepositoryService, private translate: TranslateService) {\n this.loadDeviceTypes();\n }\n\n @memoize(property('id'))\n getBaseVersionsCount$(software: IManagedObject): Observable<number> {\n return this.repositoryService.getBaseVersionsCount$(software).pipe(shareReplay(1));\n }\n\n @memoize(property('id'))\n getVersions(software: IManagedObject) {\n return this.repositoryService.listAllVersions(software);\n }\n\n getDeviceTypeTitle(software: IManagedObject): string {\n return get(software, 'c8y_Filter.type', this.translate.instant(this.NO_DEVICE_TYPE_AVAILABLE));\n }\n\n loadDeviceTypes() {\n this.deviceTypeSubscription = this.deviceType$\n .pipe(\n debounceTime(300),\n distinctUntilChanged(),\n switchMap(searchStr => {\n const query = { 'c8y_Filter.type': `*${searchStr}*` };\n return from(\n this.repositoryService.listRepositoryEntries(RepositoryType.SOFTWARE, { query })\n );\n })\n )\n .subscribe(result => {\n const { data } = result;\n this.deviceTypes = uniqWith(\n data.map(val => ({ name: val.c8y_Filter.type })),\n isEqual\n );\n });\n }\n\n ngOnDestroy() {\n this.deviceTypeSubscription.unsubscribe();\n }\n\n resetSelection() {\n this.radioButtons.map(radio => radio.reset());\n }\n\n selectSoftware({ option, software }) {\n software.selectedId = option.id;\n option.action = 'install';\n this.emitSoftware({ option, software });\n }\n\n emitSoftware({ option, software }) {\n const emitData = Object.assign(\n {},\n { software },\n { version: option },\n { action: option.action }\n );\n this.software.emit(emitData);\n }\n\n private getSoftware(name?: string, deviceType?: string, softwareType?: string) {\n const query: any = name ? { name: `*${name}*` } : {};\n if (deviceType) {\n query.__or = [{ 'c8y_Filter.type': deviceType }, { __not: { __has: `c8y_Filter.type` } }];\n }\n if (softwareType) {\n query.__or = { softwareType };\n }\n return this.repositoryService.listRepositoryEntries(RepositoryType.SOFTWARE, { query });\n }\n}\n","<c8y-select-step-frame\n [header]=\"'Select software' | translate\"\n [noResults]=\"\n ((textFilter$ | async)?.length ||\n (deviceType$ | async)?.length ||\n (softwareTypeFilter$ | async)?.length) &&\n (software$ | async)?.data.length === 0\n \"\n>\n <div\n class=\"row\"\n filters\n >\n <div class=\"col-md-4 m-b-xs-8 m-b-sm-8\">\n <div class=\"input-group input-group-search\">\n <input\n class=\"form-control\"\n title=\"{{ 'Filter…' | translate }}\"\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 </div>\n </div>\n <div class=\"col-md-4 m-b-xs-8 m-b-sm-8\">\n <c8y-form-group class=\"m-0\">\n <c8y-typeahead\n placeholder=\"{{ 'Type to filter device types…' | translate }}\"\n name=\"deviceType\"\n [(ngModel)]=\"selectedDeviceType\"\n (onSearch)=\"deviceType$.next($event)\"\n [allowFreeEntries]=\"false\"\n >\n <c8y-li\n class=\"p-l-8 p-r-8 c8y-list__item--link\"\n (click)=\"selectedDeviceType = { name: '' }; deviceType$.next('')\"\n [active]=\"!selectedDeviceType?.name\"\n >\n <span>{{ 'All device types' | translate }}</span>\n </c8y-li>\n <c8y-li\n class=\"p-l-8 p-r-8 c8y-list__item--link\"\n *ngFor=\"let deviceType of deviceTypes\"\n (click)=\"selectedDeviceType = deviceType; deviceType$.next(deviceType.name)\"\n [active]=\"selectedDeviceType === deviceType\"\n >\n <c8y-highlight\n [text]=\"deviceType.name\"\n [pattern]=\"deviceType$ | async\"\n ></c8y-highlight>\n </c8y-li>\n </c8y-typeahead>\n <c8y-messages>\n <c8y-message\n name=\"notExisting\"\n [text]=\"'Select one of the existing device types.' | translate\"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n </div>\n <div class=\"col-md-4\">\n <c8y-form-group class=\"m-0\">\n <c8y-software-type\n [required]=\"false\"\n [emitResultsOnly]=\"true\"\n [showBtnInNotFoundMessage]=\"false\"\n [allowFreeEntries]=\"false\"\n [placeholder]=\"'Type to filter software types…' | translate\"\n [showClearSelectionOption]=\"true\"\n (onSelectSoftware)=\"softwareTypeFilter$.next($event?.softwareType)\"\n ></c8y-software-type>\n <c8y-messages>\n <c8y-message\n name=\"notExisting\"\n [text]=\"'Select one of the existing device types.' | translate\"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n </div>\n </div>\n <c8y-li\n class=\"hidden-sm hidden-xs m-r-8 m-l-8\"\n header\n >\n <c8y-li-icon><i class=\"p-l-24\"></i></c8y-li-icon>\n <c8y-li-body class=\"content-flex-40 p-r-32\">\n <div class=\"col-5\">\n <span\n class=\"text-truncate\"\n title=\" {{ 'Name' | translate }} \"\n >\n {{ 'Name' | translate }}\n </span>\n </div>\n <div class=\"col-2\">\n <span\n class=\"text-truncate\"\n title=\"{{ 'Device type' | translate }}\"\n >\n {{ 'Device type' | translate }}\n </span>\n </div>\n <div class=\"col-3\">\n <span\n class=\"text-truncate\"\n title=\"{{ 'Software type' | translate }}\"\n >\n {{ 'Software type' | translate }}\n </span>\n </div>\n <div class=\"col-2\">\n <span\n class=\"text-truncate\"\n title=\"{{ 'Versions' | translate }}\"\n >\n {{ 'Versions' | translate }}\n </span>\n </div>\n </c8y-li-body>\n </c8y-li>\n <c8y-list-group list>\n <c8y-li\n *c8yFor=\"let software of software$ | async; loadMore: 'auto'\"\n #li\n >\n <c8y-li-icon>\n <i c8yIcon=\"c8y-tools\"></i>\n </c8y-li-icon>\n <div class=\"content-flex-40\">\n <div class=\"col-5 m-b-xs-8\">\n <button\n class=\"btn-clean\"\n title=\"{{ software.name }}\"\n type=\"button\"\n (click)=\"li.collapsed = !li.collapsed\"\n >\n <c8y-highlight\n [text]=\"software.name\"\n [pattern]=\"textFilter$ | async\"\n ></c8y-highlight>\n </button>\n </div>\n <div class=\"col-2 m-b-xs-8\">\n <div\n class=\"text-truncate\"\n title=\"{{ 'Device type' | translate }}: {{ getDeviceTypeTitle(software) }}\"\n >\n <span\n class=\"text-label-small m-r-8 visible-xs visible-sm\"\n translate\n >\n Device type\n </span>\n <span *ngIf=\"software.c8y_Filter?.type; else noType\">\n {{ software.c8y_Filter?.type }}\n </span>\n <ng-template #noType>\n <small>\n <em\n class=\"text-muted\"\n translate\n >\n Undefined`device type`\n </em>\n </small>\n </ng-template>\n </div>\n </div>\n <div class=\"col-3 m-b-xs-8\">\n <span\n class=\"text-label-small m-r-8 visible-xs visible-sm\"\n translate\n >\n Software type\n </span>\n <span\n class=\"label label-info\"\n *ngIf=\"software.softwareType; else emptyText\"\n >\n {{ software.softwareType }}\n </span>\n <ng-template #emptyText>\n <small class=\"text-muted\">\n <em translate>Undefined`software type`</em>\n </small>\n </ng-template>\n </div>\n <div class=\"col-2\">\n <span\n class=\"label label-warning m-l-auto-sm\"\n *ngIf=\"isLegacy(software)\"\n >\n <span translate>Legacy</span>\n </span>\n <span *ngIf=\"!isLegacy(software)\">\n <span *ngIf=\"(getBaseVersionsCount$(software) | async) === null\">\n <span class=\"label label-info\">\n <i\n class=\"icon-spin\"\n c8yIcon=\"circle-o-notch\"\n ></i>\n </span>\n </span>\n <span *ngIf=\"(getBaseVersionsCount$(software) | async) !== null\">\n <span [ngPlural]=\"getBaseVersionsCount$(software) | async\">\n <ng-template ngPluralCase=\"=1\">\n <span\n class=\"text-label-small m-r-8 visible-xs visible-sm\"\n translate\n >\n version\n </span>\n <span class=\"badge badge-info m-l-auto-sm\">1</span>\n </ng-template>\n <ng-template ngPluralCase=\"other\">\n <span\n class=\"text-label-small m-r-8 visible-xs visible-sm\"\n translate\n >\n versions\n </span>\n <span class=\"badge badge-info m-l-auto-sm\">\n {{ getBaseVersionsCount$(software) | async }}\n </span>\n </ng-template>\n </span>\n </span>\n </span>\n </div>\n </div>\n <c8y-li-collapse>\n <c8y-list-group>\n <c8y-li *c8yFor=\"let option of getVersions(software) | async\">\n <c8y-li-radio\n [name]=\"software.id\"\n (onSelect)=\"selectSoftware({ option: option, software: software })\"\n ></c8y-li-radio>\n <c8y-li-body class=\"content-flex-40 p-r-16\">\n <div class=\"col-4\">\n {{ option.c8y_Software.version }}\n </div>\n <div class=\"col-5\">\n <div\n class=\"text-truncate\"\n title=\"{{ option.c8y_Software.url }}\"\n >\n <span\n class=\"text-label-small m-r-4\"\n translate\n >\n File\n </span>\n <span>{{ option.c8y_Software.url }}</span>\n </div>\n </div>\n <div\n class=\"col-3 d-flex\"\n *ngIf=\"option.id === software.selectedId\"\n >\n <div\n class=\"c8y-select-wrapper d-inline-block m-l-auto\"\n style=\"margin: -4px 0\"\n >\n <select\n class=\"form-control input-sm\"\n id=\"action\"\n [(ngModel)]=\"option.action\"\n (change)=\"emitSoftware({ option: option, software: software })\"\n >\n <option [ngValue]=\"'install'\">\n {{ 'Install/update`software`' | translate }}\n </option>\n <option [ngValue]=\"'delete'\">{{ 'Remove`software`' | translate }}</option>\n </select>\n <span></span>\n </div>\n </div>\n </c8y-li-body>\n </c8y-li>\n </c8y-list-group>\n </c8y-li-collapse>\n </c8y-li>\n </c8y-list-group>\n</c8y-select-step-frame>\n","import { Component, Input, OnChanges, SimpleChanges } from '@angular/core';\nimport { gettext } from '@c8y/ngx-components';\nimport { has, uniq } from 'lodash-es';\nimport { ISelectedSoftware } from './select-software.model';\n\n@Component({\n selector: 'c8y-confirm-software-selection-step',\n templateUrl: 'confirm-software-selection-step.component.html'\n})\nexport class ConfirmSoftwareSelectionStepComponent implements OnChanges {\n @Input() selectedItems: ISelectedSoftware[];\n title: string;\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.selectedItems) {\n const deviceTypes: string[] = this.deviceTypes;\n this.title =\n deviceTypes && deviceTypes.length\n ? deviceTypes.join(', ')\n : gettext('Undefined`device type`');\n }\n }\n\n get selectedToInstall() {\n return this.selectedItems.filter(software => software.action === 'install');\n }\n\n get selectedToDelete() {\n return this.selectedItems.filter(software => software.action === 'delete');\n }\n\n get deviceTypes() {\n return uniq(\n this.selectedItems\n .filter(val => has(val, ['software', 'c8y_Filter', 'type']))\n .map(val => val.software.c8y_Filter.type)\n .filter(val => !!val)\n );\n }\n}\n","<c8y-preview-selection-frame [header]=\"'Confirm selection' | translate\">\n <ng-container *previewBlock=\"'Device type' | translate\">\n <ng-container *ngIf=\"deviceTypes.length > 0; else noType\">\n <span *ngFor=\"let deviceType of deviceTypes; let last = last\"\n >{{ deviceType }}{{ last ? '' : ', ' }}</span\n >\n </ng-container>\n <ng-template #noType>\n <em class=\"text-muted\" translate>Undefined`device type`</em>\n </ng-template>\n </ng-container>\n <c8y-list-group\n *previewBlock=\"'Installations/updates`software`' | translate; if: !!selectedToInstall.length\"\n >\n <c8y-li *ngFor=\"let selectedItem of selectedToInstall\">\n <c8y-li-icon>\n <i c8yIcon=\"c8y-tools\"></i>\n </c8y-li-icon>\n <c8y-li-body class=\"content-flex-10\">\n <div class=\"col-6 text-truncate\" title=\"{{ selectedItem.software.name }}\">\n {{ selectedItem.software.name }}\n </div>\n <div class=\"col-6 text-right\" *ngIf=\"!!selectedItem?.version?.c8y_Software?.version\">\n <span class=\"text-label-small m-r-4\" translate> Version </span>\n <span>\n {{ selectedItem.version.c8y_Software.version }}\n </span>\n </div>\n </c8y-li-body>\n </c8y-li>\n </c8y-list-group>\n <c8y-list-group *previewBlock=\"'Removals`software`' | translate; if: !!selectedToDelete.length\">\n <c8y-li *ngFor=\"let selectedItem of selectedToDelete\">\n <c8y-li-icon>\n <i c8yIcon=\"c8y-tools\"></i>\n </c8y-li-icon>\n <c8y-li-body class=\"content-flex-10\">\n <div class=\"col-6\">\n {{ selectedItem.software.name }}\n </div>\n <div class=\"col-6 text-right\">\n <span class=\"text-label-small m-r-8\" translate> Version </span>\n <span>\n {{ selectedItem.version.c8y_Software.version }}\n </span>\n </div>\n </c8y-li-body>\n </c8y-li>\n </c8y-list-group>\n</c8y-preview-selection-frame>\n","import { CdkStep } from '@angular/cdk/stepper';\nimport { Component, ViewChild } from '@angular/core';\nimport { IOperation } from '@c8y/client';\nimport { C8yStepper, gettext, ModalService, Status } from '@c8y/ngx-components';\nimport { BaseStepperComponent } from '@c8y/ngx-components/operations/bulk-operation-stepper';\nimport {\n BulkOperationType,\n OperationDetails\n} from '@c8y/ngx-components/operations/bulk-operations-service';\nimport { TranslateService } from '@ngx-translate/core';\nimport { uniq } from 'lodash-es';\nimport { SelectSoftwareStepComponent } from './select-software-step.component';\nimport { ISelectedSoftware, ISoftwareUpdateOperationPrototype } from './select-software.model';\n\n@Component({\n selector: 'c8y-stepper-bulk-type-software',\n templateUrl: 'stepper-bulk-type-software.component.html'\n})\nexport class StepperBulkTypeSoftwareComponent extends BaseStepperComponent {\n readonly type: BulkOperationType = BulkOperationType.SOFTWARE;\n readonly descriptionTemplateSingle: string = gettext(\n 'Update software to: {{ name }} (version {{ version }})'\n );\n readonly descriptionTemplateOneOther: string = gettext(\n 'Update software to: {{ name }} (version {{ version }}) and one other'\n );\n readonly descriptionTemplateMultiple: string = gettext(\n 'Update software to: {{ name }} (version {{ version }}) and {{ count }} others'\n );\n\n selectedSoftware: ISelectedSoftware[] = [];\n @ViewChild(SelectSoftwareStepComponent, { static: false })\n selectSoftware: SelectSoftwareStepComponent;\n\n constructor(private modal: ModalService, private translate: TranslateService) {\n super();\n }\n\n onSoftwareSelected(selectedItem) {\n this.selectedSoftware = this.selectedSoftware.filter(\n item => item.software.id !== selectedItem.software.id\n );\n this.selectedSoftware.push(selectedItem);\n }\n\n async confirmSoftwareSelection($event: { stepper: C8yStepper; step: CdkStep }) {\n const deviceTypes: string[] = this.getUniqueDeviceTypes();\n this.deviceTypes = deviceTypes;\n if (deviceTypes.length > 1) {\n try {\n await this.modal.confirm(\n gettext('Selected software for various device types'),\n gettext('Operation may fail due to unsupported software. Do you want to proceed?'),\n Status.WARNING,\n { ok: gettext('Confirm'), cancel: gettext('Cancel') }\n );\n $event.stepper.next();\n } catch (ex) {\n this.selectedSoftware = [];\n this.selectSoftware.resetSelection();\n }\n } else {\n $event.stepper.next();\n }\n }\n\n protected retrieveOperationPrototype(): OperationDetails {\n const softwareList: ISoftwareUpdateOperationPrototype[] = this.selectedSoftware.map(item => ({\n name: item.software.name,\n version: item.version.c8y_Software.version,\n url: item.version.c8y_Software.url,\n action: item.action\n }));\n\n const interpolationParams: object = {\n name: softwareList[0].name,\n version: softwareList[0].version,\n count: softwareList.length - 1\n };\n let description: string;\n switch (softwareList.length) {\n case 1:\n description = this.translate.instant(this.descriptionTemplateSingle, interpolationParams);\n break;\n case 2:\n description = this.translate.instant(this.descriptionTemplateOneOther, interpolationParams);\n break;\n default:\n description = this.translate.instant(this.descriptionTemplateMultiple, interpolationParams);\n }\n\n return {\n name: gettext('Software update'),\n prototype: {\n description,\n c8y_SoftwareUpdate: softwareList\n } as unknown as IOperation\n };\n }\n\n private getUniqueDeviceTypes(): string[] {\n return uniq(\n this.selectedSoftware\n .map(item => item.software.c8y_Filter && item.software.c8y_Filter.type)\n .filter(type => !!type)\n );\n }\n}\n","<c8y-bulk-operation-stepper [type]=\"type\">\n <ng-container\n *customStep=\"\n 'Select software' | translate;\n completed: !!selectedSoftware.length;\n buttonsDisabled: !selectedSoftware.length;\n onNext: confirmSoftwareSelection.bind(this)\n \"\n >\n <c8y-select-software-step\n (software)=\"onSoftwareSelected($event)\"\n class=\"d-contents\"\n ></c8y-select-software-step>\n </ng-container>\n <ng-container *customStep=\"'Confirm selected software' | translate\">\n <c8y-confirm-software-selection-step\n class=\"d-contents\"\n [selectedItems]=\"selectedSoftware\"\n ></c8y-confirm-software-selection-step>\n </ng-container>\n</c8y-bulk-operation-stepper>\n","import { NgModule } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\n\nimport { CoreModule, FormsModule, gettext } from '@c8y/ngx-components';\nimport { SharedRepositoryModule } from '@c8y/ngx-components/repository/shared';\nimport { BulkOperationStepperModule } from '@c8y/ngx-components/operations/bulk-operation-stepper';\nimport {\n baseUrl,\n BulkOperationType,\n hookListBulkType\n} from '@c8y/ngx-components/operations/bulk-operations-service';\nimport { StepperFramesModule } from '@c8y/ngx-components/operations/stepper-frames';\n\nimport { ConfirmSoftwareSelectionStepComponent } from './confirm-software-selection-step.component';\nimport { SelectSoftwareStepComponent } from './select-software-step.component';\nimport { StepperBulkTypeSoftwareComponent } from './stepper-bulk-type-software.component';\n\n/** Module for the 'Software update' operation type stepper */\n@NgModule({\n declarations: [\n StepperBulkTypeSoftwareComponent,\n ConfirmSoftwareSelectionStepComponent,\n SelectSoftwareStepComponent\n ],\n imports: [\n CoreModule,\n FormsModule,\n ReactiveFormsModule,\n BulkOperationStepperModule,\n SharedRepositoryModule,\n StepperFramesModule\n ],\n providers: [\n hookListBulkType({\n type: BulkOperationType.SOFTWARE,\n c8yIcon: 'c8y-tools',\n name: gettext('Software update'),\n path: `${baseUrl}software`,\n component: StepperBulkTypeSoftwareComponent,\n fragments: ['c8y_SoftwareList', 'c8y_SoftwareUpdate'],\n selected: false\n })\n ],\n exports: [StepperBulkTypeSoftwareComponent]\n})\nexport class StepperBulkTypeSoftwareModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i6","i1","i2","i3","i4.ConfirmSoftwareSelectionStepComponent","i5.SelectSoftwareStepComponent"],"mappings":"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"}
|
|
@@ -892,7 +892,7 @@ class LpwanAssignLnsConnectionsComponent {
|
|
|
892
892
|
});
|
|
893
893
|
}
|
|
894
894
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: LpwanAssignLnsConnectionsComponent, deps: [{ token: LpwanSetDeviceProtocolService }, { token: i2.AlertService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
895
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: LpwanAssignLnsConnectionsComponent, selector: "set-lns-connections", inputs: { device: "device" }, viewQueries: [{ propertyName: "popoverConfirm", first: true, predicate: PopoverConfirmComponent, descendants: true, static: true }], ngImport: i0, template: "<div class=\"col-md-6\">\n <div class=\"form-group\">\n <label translate>Current connection</label>\n <p class=\"form-control-static\" *ngIf=\"!currentConnection\">\n {{ 'Connection is not set. Select connection for this device' | translate }}\n </p>\n <p class=\"form-control-static text-truncate\" *ngIf=\"currentConnection\" title=\"{{ currentConnection.name }}\">\n {{ currentConnection.name }}\n </p>\n </div>\n\n <c8y-form-group>\n <c8y-popover-confirm\n outsideClick=\"true\"\n containerClass=\"lns-connection-popover\"\n [message]=\"reRegisterMsg\"\n [buttons]=\"buttons\"\n [placement]=\"'bottom'\"\n ></c8y-popover-confirm>\n <c8y-typeahead\n *ngIf=\"!loading\"\n [(ngModel)]=\"newConnection\"\n placeholder=\"{{ 'Select new connection' | translate }}\"\n name=\"newConnection\"\n (onSearch)=\"setConnectionPipe($event)\"\n [allowFreeEntries]=\"false\"\n >\n <c8y-li\n *c8yFor=\"let connection of availableConnections; loadMore: 'hidden'; pipe: filterConnection\"\n class=\"p-l-8 p-r-8 c8y-list__item--link\"\n (click)=\"togglePopover(popoverConfirm)\"\n >\n <c8y-highlight [text]=\"connection.name\" [pattern]=\"pattern\"></c8y-highlight>\n </c8y-li>\n </c8y-typeahead>\n <c8y-messages\n ><c8y-message\n name=\"notExisting\"\n [text]=\"'Select one of the connections.' | translate\"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n</div>\n", dependencies: [{ kind: "directive", type: i2.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.ForOfDirective, selector: "[c8yFor]", inputs: ["c8yForOf", "c8yForLoadMore", "c8yForPipe", "c8yForNotFound", "c8yForMaxIterations", "c8yForLoadingTemplate", "c8yForLoadNextLabel", "c8yForRealtime", "c8yForRealtimeOptions", "c8yForComparator", "c8yForEnableVirtualScroll", "c8yForVirtualScrollElementSize", "c8yForVirtualScrollStrategy", "c8yForVirtualScrollContainerHeight"], outputs: ["c8yForCount"] }, { kind: "component", type: i2.PopoverConfirmComponent, selector: "c8y-popover-confirm", inputs: ["buttons", "message", "title", "isOpen", "containerClass", "placement", "outsideClick"] }, { kind: "component", type: i2.HighlightComponent, selector: "c8y-highlight", inputs: ["pattern", "text", "elementClass", "shouldTrimPattern"] }, { kind: "component", type: i2.TypeaheadComponent, selector: "c8y-typeahead", inputs: ["required", "maxlength", "disabled", "allowFreeEntries", "placeholder", "displayProperty", "icon", "name", "autoClose", "hideNew", "container", "selected"], outputs: ["onSearch", "onIconClick"] }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i2.FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "directive", type: i2.MessageDirective, selector: "c8y-message", inputs: ["name", "text"] }, { kind: "component", type: i2.MessagesComponent, selector: "c8y-messages", inputs: ["show", "defaults"] }, { kind: "component", type: i2.ListItemComponent, selector: "c8y-list-item, c8y-li", inputs: ["active", "emptyActions", "collapsed", "selectable"], outputs: ["collapsedChange"] }, { kind: "pipe", type: i2.C8yTranslatePipe, name: "translate" }] }); }
|
|
895
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: LpwanAssignLnsConnectionsComponent, selector: "set-lns-connections", inputs: { device: "device" }, viewQueries: [{ propertyName: "popoverConfirm", first: true, predicate: PopoverConfirmComponent, descendants: true, static: true }], ngImport: i0, template: "<div class=\"col-md-6\">\n <div class=\"form-group\">\n <label translate>Current connection</label>\n <p class=\"form-control-static\" *ngIf=\"!currentConnection\">\n {{ 'Connection is not set. Select connection for this device' | translate }}\n </p>\n <p class=\"form-control-static text-truncate\" *ngIf=\"currentConnection\" title=\"{{ currentConnection.name }}\">\n {{ currentConnection.name }}\n </p>\n </div>\n\n <c8y-form-group>\n <c8y-popover-confirm\n outsideClick=\"true\"\n containerClass=\"lns-connection-popover\"\n [message]=\"reRegisterMsg\"\n [buttons]=\"buttons\"\n [placement]=\"'bottom'\"\n ></c8y-popover-confirm>\n <c8y-typeahead\n *ngIf=\"!loading\"\n [(ngModel)]=\"newConnection\"\n placeholder=\"{{ 'Select new connection' | translate }}\"\n name=\"newConnection\"\n (onSearch)=\"setConnectionPipe($event)\"\n [allowFreeEntries]=\"false\"\n >\n <c8y-li\n *c8yFor=\"let connection of availableConnections; loadMore: 'hidden'; pipe: filterConnection\"\n class=\"p-l-8 p-r-8 c8y-list__item--link\"\n (click)=\"togglePopover(popoverConfirm)\"\n >\n <c8y-highlight [text]=\"connection.name\" [pattern]=\"pattern\"></c8y-highlight>\n </c8y-li>\n </c8y-typeahead>\n <c8y-messages\n ><c8y-message\n name=\"notExisting\"\n [text]=\"'Select one of the connections.' | translate\"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n</div>\n", dependencies: [{ kind: "directive", type: i2.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.ForOfDirective, selector: "[c8yFor]", inputs: ["c8yForOf", "c8yForLoadMore", "c8yForPipe", "c8yForNotFound", "c8yForMaxIterations", "c8yForLoadingTemplate", "c8yForLoadNextLabel", "c8yForLoadingLabel", "c8yForRealtime", "c8yForRealtimeOptions", "c8yForComparator", "c8yForEnableVirtualScroll", "c8yForVirtualScrollElementSize", "c8yForVirtualScrollStrategy", "c8yForVirtualScrollContainerHeight"], outputs: ["c8yForCount", "c8yForLoadMoreComponent"] }, { kind: "component", type: i2.PopoverConfirmComponent, selector: "c8y-popover-confirm", inputs: ["buttons", "message", "title", "isOpen", "containerClass", "placement", "outsideClick"] }, { kind: "component", type: i2.HighlightComponent, selector: "c8y-highlight", inputs: ["pattern", "text", "elementClass", "shouldTrimPattern"] }, { kind: "component", type: i2.TypeaheadComponent, selector: "c8y-typeahead", inputs: ["required", "maxlength", "disabled", "allowFreeEntries", "placeholder", "displayProperty", "icon", "name", "autoClose", "hideNew", "container", "selected"], outputs: ["onSearch", "onIconClick"] }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i2.FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "directive", type: i2.MessageDirective, selector: "c8y-message", inputs: ["name", "text"] }, { kind: "component", type: i2.MessagesComponent, selector: "c8y-messages", inputs: ["show", "defaults"] }, { kind: "component", type: i2.ListItemComponent, selector: "c8y-list-item, c8y-li", inputs: ["active", "emptyActions", "collapsed", "selectable"], outputs: ["collapsedChange"] }, { kind: "pipe", type: i2.C8yTranslatePipe, name: "translate" }] }); }
|
|
896
896
|
}
|
|
897
897
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: LpwanAssignLnsConnectionsComponent, decorators: [{
|
|
898
898
|
type: Component,
|
|
@@ -965,7 +965,7 @@ class LpwanAssignDeviceProtocolComponent {
|
|
|
965
965
|
}
|
|
966
966
|
}
|
|
967
967
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: LpwanAssignDeviceProtocolComponent, deps: [{ token: LpwanSetDeviceProtocolService }, { token: i2.AlertService }, { token: i3$1.Router }, { token: i1.InventoryService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
968
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: LpwanAssignDeviceProtocolComponent, selector: "set-device-protocol", viewQueries: [{ propertyName: "lpwanSetDeviceProtocolForm", first: true, predicate: ["lpwanSetDeviceProtocolForm"], descendants: true }], ngImport: i0, template: "<form #lpwanSetDeviceProtocolForm=\"ngForm\">\n <div class=\"row\">\n <div class=\"col-md-9\">\n <div class=\"card card--fullpage\">\n <div class=\"card-header separator\">\n <div class=\"card-title\">\n {{ 'LPWAN configuration' | translate }}\n </div>\n </div>\n\n <div class=\"card-block p-t-24 p-b-8 overflow-visible\">\n <div *ngIf=\"loading\">\n <c8y-loading></c8y-loading>\n </div>\n\n <div *ngIf=\"!loading\">\n <div class=\"col-md-6\">\n <div class=\"form-group\">\n <label translate>Current device protocol</label>\n <p class=\"form-control-static\" *ngIf=\"!currentProtocol\">\n {{ device.type }}\n </p>\n <p\n class=\"form-control-static text-truncate\"\n *ngIf=\"currentProtocol\"\n title=\"{{ currentProtocol.name }}\"\n >\n {{ currentProtocol.name }}\n </p>\n </div>\n <c8y-form-group>\n <c8y-typeahead\n [(ngModel)]=\"newProtocol\"\n placeholder=\"{{ 'Select new device protocol' | translate }}\"\n (onSearch)=\"setPipe($event)\"\n name=\"newProtocol\"\n [allowFreeEntries]=\"false\"\n >\n <c8y-li\n *c8yFor=\"\n let protocol of availableProtocols;\n loadMore: 'hidden';\n pipe: filterProtocols\n \"\n class=\"p-l-8 p-r-8 c8y-list__item--link\"\n (click)=\"newProtocol = protocol; setPipe('')\"\n >\n <c8y-highlight [text]=\"protocol.name\" [pattern]=\"pattern\"></c8y-highlight>\n </c8y-li>\n </c8y-typeahead>\n <c8y-messages>\n <c8y-message\n name=\"notExisting\"\n [text]=\"'Select one of the protocols.' | translate\"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n </div>\n <set-lns-connections [device]=\"device\"></set-lns-connections>\n </div>\n </div>\n\n <div class=\"card-footer separator\">\n <button\n title=\"{{ 'Save' | translate }}\"\n type=\"submit\"\n class=\"btn btn-primary\"\n (click)=\"apply(newProtocol)\"\n [disabled]=\"!newProtocol\"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n </div>\n </div>\n </div>\n</form>\n\u200C\n", dependencies: [{ kind: "directive", type: i2.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.ForOfDirective, selector: "[c8yFor]", inputs: ["c8yForOf", "c8yForLoadMore", "c8yForPipe", "c8yForNotFound", "c8yForMaxIterations", "c8yForLoadingTemplate", "c8yForLoadNextLabel", "c8yForRealtime", "c8yForRealtimeOptions", "c8yForComparator", "c8yForEnableVirtualScroll", "c8yForVirtualScrollElementSize", "c8yForVirtualScrollStrategy", "c8yForVirtualScrollContainerHeight"], outputs: ["c8yForCount"] }, { kind: "component", type: i2.LoadingComponent, selector: "c8y-loading" }, { kind: "component", type: i2.HighlightComponent, selector: "c8y-highlight", inputs: ["pattern", "text", "elementClass", "shouldTrimPattern"] }, { kind: "component", type: i2.TypeaheadComponent, selector: "c8y-typeahead", inputs: ["required", "maxlength", "disabled", "allowFreeEntries", "placeholder", "displayProperty", "icon", "name", "autoClose", "hideNew", "container", "selected"], outputs: ["onSearch", "onIconClick"] }, { kind: "directive", type: i6.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i6.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i2.FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "directive", type: i2.MessageDirective, selector: "c8y-message", inputs: ["name", "text"] }, { kind: "component", type: i2.MessagesComponent, selector: "c8y-messages", inputs: ["show", "defaults"] }, { kind: "component", type: i2.ListItemComponent, selector: "c8y-list-item, c8y-li", inputs: ["active", "emptyActions", "collapsed", "selectable"], outputs: ["collapsedChange"] }, { kind: "component", type: LpwanAssignLnsConnectionsComponent, selector: "set-lns-connections", inputs: ["device"] }, { kind: "pipe", type: i2.C8yTranslatePipe, name: "translate" }] }); }
|
|
968
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: LpwanAssignDeviceProtocolComponent, selector: "set-device-protocol", viewQueries: [{ propertyName: "lpwanSetDeviceProtocolForm", first: true, predicate: ["lpwanSetDeviceProtocolForm"], descendants: true }], ngImport: i0, template: "<form #lpwanSetDeviceProtocolForm=\"ngForm\">\n <div class=\"row\">\n <div class=\"col-md-9\">\n <div class=\"card card--fullpage\">\n <div class=\"card-header separator\">\n <div class=\"card-title\">\n {{ 'LPWAN configuration' | translate }}\n </div>\n </div>\n\n <div class=\"card-block p-t-24 p-b-8 overflow-visible\">\n <div *ngIf=\"loading\">\n <c8y-loading></c8y-loading>\n </div>\n\n <div *ngIf=\"!loading\">\n <div class=\"col-md-6\">\n <div class=\"form-group\">\n <label translate>Current device protocol</label>\n <p class=\"form-control-static\" *ngIf=\"!currentProtocol\">\n {{ device.type }}\n </p>\n <p\n class=\"form-control-static text-truncate\"\n *ngIf=\"currentProtocol\"\n title=\"{{ currentProtocol.name }}\"\n >\n {{ currentProtocol.name }}\n </p>\n </div>\n <c8y-form-group>\n <c8y-typeahead\n [(ngModel)]=\"newProtocol\"\n placeholder=\"{{ 'Select new device protocol' | translate }}\"\n (onSearch)=\"setPipe($event)\"\n name=\"newProtocol\"\n [allowFreeEntries]=\"false\"\n >\n <c8y-li\n *c8yFor=\"\n let protocol of availableProtocols;\n loadMore: 'hidden';\n pipe: filterProtocols\n \"\n class=\"p-l-8 p-r-8 c8y-list__item--link\"\n (click)=\"newProtocol = protocol; setPipe('')\"\n >\n <c8y-highlight [text]=\"protocol.name\" [pattern]=\"pattern\"></c8y-highlight>\n </c8y-li>\n </c8y-typeahead>\n <c8y-messages>\n <c8y-message\n name=\"notExisting\"\n [text]=\"'Select one of the protocols.' | translate\"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n </div>\n <set-lns-connections [device]=\"device\"></set-lns-connections>\n </div>\n </div>\n\n <div class=\"card-footer separator\">\n <button\n title=\"{{ 'Save' | translate }}\"\n type=\"submit\"\n class=\"btn btn-primary\"\n (click)=\"apply(newProtocol)\"\n [disabled]=\"!newProtocol\"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n </div>\n </div>\n </div>\n</form>\n\u200C\n", dependencies: [{ kind: "directive", type: i2.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.ForOfDirective, selector: "[c8yFor]", inputs: ["c8yForOf", "c8yForLoadMore", "c8yForPipe", "c8yForNotFound", "c8yForMaxIterations", "c8yForLoadingTemplate", "c8yForLoadNextLabel", "c8yForLoadingLabel", "c8yForRealtime", "c8yForRealtimeOptions", "c8yForComparator", "c8yForEnableVirtualScroll", "c8yForVirtualScrollElementSize", "c8yForVirtualScrollStrategy", "c8yForVirtualScrollContainerHeight"], outputs: ["c8yForCount", "c8yForLoadMoreComponent"] }, { kind: "component", type: i2.LoadingComponent, selector: "c8y-loading" }, { kind: "component", type: i2.HighlightComponent, selector: "c8y-highlight", inputs: ["pattern", "text", "elementClass", "shouldTrimPattern"] }, { kind: "component", type: i2.TypeaheadComponent, selector: "c8y-typeahead", inputs: ["required", "maxlength", "disabled", "allowFreeEntries", "placeholder", "displayProperty", "icon", "name", "autoClose", "hideNew", "container", "selected"], outputs: ["onSearch", "onIconClick"] }, { kind: "directive", type: i6.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i6.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i2.FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "directive", type: i2.MessageDirective, selector: "c8y-message", inputs: ["name", "text"] }, { kind: "component", type: i2.MessagesComponent, selector: "c8y-messages", inputs: ["show", "defaults"] }, { kind: "component", type: i2.ListItemComponent, selector: "c8y-list-item, c8y-li", inputs: ["active", "emptyActions", "collapsed", "selectable"], outputs: ["collapsedChange"] }, { kind: "component", type: LpwanAssignLnsConnectionsComponent, selector: "set-lns-connections", inputs: ["device"] }, { kind: "pipe", type: i2.C8yTranslatePipe, name: "translate" }] }); }
|
|
969
969
|
}
|
|
970
970
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: LpwanAssignDeviceProtocolComponent, decorators: [{
|
|
971
971
|
type: Component,
|