{"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 { AsyncPipe, NgPlural, NgPluralCase } from '@angular/common';\nimport { Component, EventEmitter, Output, QueryList, ViewChildren } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { IManagedObject, IResultList } from '@c8y/client';\nimport {\n  C8yTranslateDirective,\n  C8yTranslatePipe,\n  FormGroupComponent,\n  ForOfDirective,\n  HighlightComponent,\n  IconDirective,\n  ListGroupComponent,\n  ListItemBodyComponent,\n  ListItemCollapseComponent,\n  ListItemComponent,\n  ListItemIconComponent,\n  ListItemRadioComponent,\n  memoize,\n  MessageDirective,\n  MessagesComponent,\n  TypeaheadComponent\n} from '@c8y/ngx-components';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { SelectStepFrameComponent } from '@c8y/ngx-components/operations/stepper-frames';\nimport {\n  RepositoryService,\n  RepositoryType,\n  SharedRepositoryModule\n} 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  imports: [\n    SelectStepFrameComponent,\n    FormsModule,\n    IconDirective,\n    FormGroupComponent,\n    TypeaheadComponent,\n    ListItemComponent,\n    HighlightComponent,\n    MessagesComponent,\n    MessageDirective,\n    SharedRepositoryModule,\n    ListItemIconComponent,\n    ListItemBodyComponent,\n    ListGroupComponent,\n    ForOfDirective,\n    C8yTranslateDirective,\n    NgPlural,\n    NgPluralCase,\n    ListItemCollapseComponent,\n    ListItemRadioComponent,\n    C8yTranslatePipe,\n    AsyncPipe\n  ]\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(\n    private repositoryService: RepositoryService,\n    private translate: TranslateService\n  ) {\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          @if ((textFilter$ | async).length === 0) {\n            <i c8yIcon=\"search\"></i>\n          }\n          @if ((textFilter$ | async).length > 0) {\n            <i\n              class=\"text-muted\"\n              c8yIcon=\"times\"\n              (click)=\"textFilter$.next('')\"\n            ></i>\n          }\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          @for (deviceType of deviceTypes; track deviceType) {\n            <c8y-li\n              class=\"p-l-8 p-r-8 c8y-list__item--link\"\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          }\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            @if (software.c8y_Filter?.type) {\n              <span>\n                {{ software.c8y_Filter?.type }}\n              </span>\n            } @else {\n              <small>\n                <em\n                  class=\"text-muted\"\n                  translate\n                >\n                  Undefined`device type`\n                </em>\n              </small>\n            }\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          @if (software.softwareType) {\n            <span class=\"label label-info\">\n              {{ software.softwareType }}\n            </span>\n          } @else {\n            <small class=\"text-muted\">\n              <em translate>Undefined`software type`</em>\n            </small>\n          }\n        </div>\n        <div class=\"col-2\">\n          @if (isLegacy(software)) {\n            <span class=\"label label-warning m-l-auto-sm\">\n              <span translate>Legacy</span>\n            </span>\n          }\n          @if (!isLegacy(software)) {\n            <span>\n              @if ((getBaseVersionsCount$(software) | async) === null) {\n                <span>\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              @if ((getBaseVersionsCount$(software) | async) !== null) {\n                <span>\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              }\n            </span>\n          }\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                <p class=\"text-truncate\">\n                  <span\n                    class=\"text-label-small m-r-8\"\n                    translate\n                  >\n                    File\n                  </span>\n                  @if (option.c8y_Software.url === '') {\n                    <span title=\"{{ 'Provided by device' | translate }}\">\n                      {{ 'Provided by device' | translate }}\n                    </span>\n                  } @else {\n                    <span title=\"{{ option.c8y_Software.url }}\">\n                      {{ option.c8y_Software.url }}\n                    </span>\n                  }\n                </p>\n              </div>\n              @if (option.id === software.selectedId) {\n                <div class=\"col-3 d-flex\">\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              }\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/gettext';\nimport {\n  C8yTranslateDirective,\n  ListGroupComponent,\n  ListItemComponent,\n  ListItemIconComponent,\n  IconDirective,\n  ListItemBodyComponent,\n  C8yTranslatePipe\n} from '@c8y/ngx-components';\nimport { has, uniq } from 'lodash-es';\nimport { ISelectedSoftware } from './select-software.model';\nimport {\n  PreviewSelectionFrameComponent,\n  PreviewBlockDirective\n} from '@c8y/ngx-components/operations/stepper-frames';\nimport { NgIf, NgFor } from '@angular/common';\n\n@Component({\n  selector: 'c8y-confirm-software-selection-step',\n  templateUrl: 'confirm-software-selection-step.component.html',\n  imports: [\n    PreviewSelectionFrameComponent,\n    PreviewBlockDirective,\n    NgIf,\n    NgFor,\n    C8yTranslateDirective,\n    ListGroupComponent,\n    ListItemComponent,\n    ListItemIconComponent,\n    IconDirective,\n    ListItemBodyComponent,\n    C8yTranslatePipe\n  ]\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 { gettext } from '@c8y/ngx-components/gettext';\nimport { C8yStepper, ModalService, Status, C8yTranslatePipe } from '@c8y/ngx-components';\nimport {\n  BaseStepperComponent,\n  BulkOperationStepper,\n  CustomStep\n} 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';\nimport { ConfirmSoftwareSelectionStepComponent } from './confirm-software-selection-step.component';\n\n@Component({\n  selector: 'c8y-stepper-bulk-type-software',\n  templateUrl: 'stepper-bulk-type-software.component.html',\n  imports: [\n    BulkOperationStepper,\n    CustomStep,\n    SelectSoftwareStepComponent,\n    ConfirmSoftwareSelectionStepComponent,\n    C8yTranslatePipe\n  ]\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(\n    private modal: ModalService,\n    private translate: TranslateService\n  ) {\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 { gettext } from '@c8y/ngx-components/gettext';\nimport {\n  baseUrl,\n  BulkOperationType,\n  hookListBulkType\n} from '@c8y/ngx-components/operations/bulk-operations-service';\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  imports: [\n    StepperBulkTypeSoftwareComponent,\n    ConfirmSoftwareSelectionStepComponent,\n    SelectSoftwareStepComponent\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":["i1"],"mappings":"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"}