{"version":3,"file":"c8y-ngx-components-operations-stepper-bulk-type-configuration.mjs","sources":["../../operations/stepper-bulk-type-configuration/stepper-bulk-type-configuration.component.ts","../../operations/stepper-bulk-type-configuration/stepper-bulk-type-configuration.component.html","../../operations/stepper-bulk-type-configuration/stepper-bulk-type-configuration.module.ts","../../operations/stepper-bulk-type-configuration/c8y-ngx-components-operations-stepper-bulk-type-configuration.ts"],"sourcesContent":["import { CdkStep } from '@angular/cdk/stepper';\nimport { Component } from '@angular/core';\nimport { IManagedObject, IOperation, IResultList } from '@c8y/client';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport {\n  C8yStepper,\n  IconDirective,\n  FormGroupComponent,\n  TypeaheadComponent,\n  ListItemComponent,\n  HighlightComponent,\n  ListItemIconComponent,\n  ListItemBodyComponent,\n  ListGroupComponent,\n  ForOfDirective,\n  ListItemRadioComponent,\n  C8yTranslateDirective,\n  EmptyStateComponent,\n  C8yTranslatePipe,\n  DatePipe\n} from '@c8y/ngx-components';\nimport {\n  BaseStepperComponent,\n  BulkOperationStepper,\n  CustomStep\n} 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 { RepositoryService, RepositoryType } from '@c8y/ngx-components/repository/shared';\nimport { TranslateService } from '@ngx-translate/core';\nimport { get, isEqual, uniqWith } from 'lodash-es';\nimport { BehaviorSubject, combineLatest, from, Observable, Subscription } from 'rxjs';\nimport { debounceTime, distinctUntilChanged, shareReplay, switchMap } from 'rxjs/operators';\nimport {\n  SelectStepFrameComponent,\n  PreviewSelectionFrameComponent,\n  PreviewBlockDirective\n} from '@c8y/ngx-components/operations/stepper-frames';\nimport { FormsModule } from '@angular/forms';\nimport { NgIf, NgFor, AsyncPipe } from '@angular/common';\n\n@Component({\n  selector: 'c8y-stepper-bulk-type-configuration',\n  templateUrl: 'stepper-bulk-type-configuration.component.html',\n  imports: [\n    BulkOperationStepper,\n    CustomStep,\n    SelectStepFrameComponent,\n    FormsModule,\n    NgIf,\n    IconDirective,\n    FormGroupComponent,\n    TypeaheadComponent,\n    ListItemComponent,\n    NgFor,\n    HighlightComponent,\n    ListItemIconComponent,\n    ListItemBodyComponent,\n    ListGroupComponent,\n    ForOfDirective,\n    ListItemRadioComponent,\n    C8yTranslateDirective,\n    PreviewSelectionFrameComponent,\n    PreviewBlockDirective,\n    EmptyStateComponent,\n    C8yTranslatePipe,\n    AsyncPipe,\n    DatePipe\n  ]\n})\nexport class StepperBulkTypeConfigurationComponent extends BaseStepperComponent {\n  readonly type: BulkOperationType = BulkOperationType.CONFIGURATION;\n  readonly NO_DEVICE_TYPE_AVAILABLE = gettext('Undefined`device type`');\n  selectedConfiguration: IManagedObject;\n  DD_LOW_COUNT = 10;\n  textFilter$: BehaviorSubject<string> = new BehaviorSubject('');\n  configType$: BehaviorSubject<string> = new BehaviorSubject('');\n  configTypes = [];\n  selectedConfigType = { name: '' };\n  configurations$: Observable<IResultList<IManagedObject>> = combineLatest(\n    this.textFilter$,\n    this.configType$\n  ).pipe(\n    switchMap(([name, configType]) => this.getConfiguration(name, configType)),\n    shareReplay(1)\n  );\n  private configTypeSubscription: Subscription;\n\n  constructor(\n    private bulkOperationService: BulkOperationsService,\n    private repositoryService: RepositoryService,\n    private translate: TranslateService\n  ) {\n    super();\n    this.DD_LOW_COUNT = this.bulkOperationService.DD_LOW_COUNT;\n    this.loadConfigurationTypes();\n  }\n\n  loadConfigurationTypes() {\n    this.configTypeSubscription = this.configType$\n      .pipe(\n        debounceTime(300),\n        distinctUntilChanged(),\n        switchMap(searchStr => {\n          const query = { configurationType: `*${searchStr}*` };\n          return from(\n            this.repositoryService.listRepositoryEntries(RepositoryType.CONFIGURATION, { query })\n          );\n        })\n      )\n      .subscribe(result => {\n        const { data } = result;\n        this.configTypes = uniqWith(\n          data.map(val => ({ name: val.configurationType })),\n          isEqual\n        );\n      });\n  }\n  ngOnDestroy(): void {\n    this.configTypeSubscription.unsubscribe();\n  }\n\n  selectConfiguration(configuration: IManagedObject) {\n    this.selectedConfiguration = configuration;\n  }\n\n  goToSecondStep($event: { stepper: C8yStepper; step: CdkStep }) {\n    $event.stepper.next();\n    this.getConfigBinary();\n    this.deviceTypes = this.selectedConfiguration.deviceType;\n  }\n\n  async getConfigBinary() {\n    if (this.selectedConfiguration.url) {\n      this.selectedConfiguration.binary = await this.repositoryService.getBinaryText(\n        this.selectedConfiguration.url,\n        { allowExternal: true, noAlerts: true }\n      );\n    }\n  }\n\n  getDeviceTypeTitle(configuration: IManagedObject): string {\n    return get(configuration, 'deviceType', this.translate.instant(this.NO_DEVICE_TYPE_AVAILABLE));\n  }\n\n  protected retrieveOperationPrototype(): OperationDetails {\n    const configuration = {\n      type: this.selectedConfiguration.configurationType,\n      url: this.selectedConfiguration.url\n    };\n\n    return {\n      name: gettext('Configuration update'),\n      description: get(this.selectedConfiguration, 'name'),\n      prototype: {\n        description: `Update configuration to: ${this.selectedConfiguration.name}.`,\n        c8y_DownloadConfigFile: configuration\n      } as unknown as IOperation\n    };\n  }\n\n  private getConfiguration(name?: string, configurationType?: string) {\n    const query: any = name ? { name: `*${name}*` } : {};\n    if (configurationType) {\n      query.__or = [{ configurationType }, { __not: { __has: `configurationType` } }];\n    }\n    return this.repositoryService.listRepositoryEntries(RepositoryType.CONFIGURATION, { query });\n  }\n}\n","<c8y-bulk-operation-stepper [type]=\"type\">\n  <ng-container\n    *customStep=\"\n      'Select configuration' | translate;\n      completed: !!selectedConfiguration;\n      buttonsDisabled: !selectedConfiguration;\n      onNext: goToSecondStep.bind(this)\n    \"\n  >\n    <c8y-select-step-frame\n      [header]=\"'Select configuration' | translate\"\n      [noResults]=\"\n        ((textFilter$ | async)?.length || (configType$ | async)?.length) &&\n        (configurations$ | async)?.data.length === 0\n      \"\n    >\n      <div\n        class=\"row\"\n        filters\n      >\n        <div class=\"col-md-6\">\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-xs-12 p-b-8 visible-xs visible-sm\"></div>\n        <div class=\"col-md-6\">\n          <c8y-form-group class=\"m-0\">\n            <c8y-typeahead\n              placeholder=\"{{ 'Type to filter configuration types…' | translate }}\"\n              name=\"configType\"\n              [(ngModel)]=\"selectedConfigType\"\n              (onSearch)=\"configType$.next($event)\"\n            >\n              <c8y-li\n                class=\"p-l-8 p-r-8 c8y-list__item--link\"\n                (click)=\"selectedConfigType = { name: '' }; configType$.next('')\"\n              >\n                <span>{{ 'All configuration types' | translate }}</span>\n              </c8y-li>\n              <c8y-li\n                class=\"p-l-8 p-r-8 c8y-list__item--link\"\n                *ngFor=\"let configType of configTypes\"\n                (click)=\"selectedConfigType = configType; configType$.next(configType.name)\"\n                [active]=\"selectedConfigType === configType\"\n              >\n                <c8y-highlight\n                  [text]=\"configType.name\"\n                  [pattern]=\"configType$ | async\"\n                ></c8y-highlight>\n              </c8y-li>\n            </c8y-typeahead>\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-32 p-r-40\"></i></c8y-li-icon>\n        <c8y-li-body class=\"content-flex-40\">\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-4\">\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=\"{{ 'Configuration type' | translate }}\"\n            >\n              {{ 'Configuration type' | translate }}\n            </span>\n          </div>\n        </c8y-li-body>\n      </c8y-li>\n      <c8y-list-group list>\n        <c8y-li\n          #listItem\n          *c8yFor=\"let configuration of configurations$ | async\"\n        >\n          <c8y-li-radio (onSelect)=\"selectConfiguration(configuration)\"></c8y-li-radio>\n          <c8y-li-icon icon=\"gears\"></c8y-li-icon>\n          <c8y-li-body class=\"content-flex-40\">\n            <div class=\"col-5 m-b-xs-8\">\n              <div\n                class=\"text-truncate\"\n                title=\"{{ configuration.name || '-' }}\"\n              >\n                <c8y-highlight\n                  [text]=\"configuration.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=\"{{ 'Device type' | translate }}: {{ getDeviceTypeTitle(configuration) }}\"\n              >\n                <span\n                  class=\"text-label-small m-r-8 visible-xs visible-sm\"\n                  translate\n                >\n                  Device type\n                </span>\n                {{ configuration.deviceType }}\n                <em\n                  class=\"text-muted\"\n                  *ngIf=\"!configuration.deviceType\"\n                >\n                  {{ 'Undefined`device type`' | translate }}\n                </em>\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                Configuration type\n              </span>\n              <span\n                class=\"label label-info\"\n                title=\"{{ 'Configuration type' | translate }}: {{\n                  configuration.configurationType\n                }}\"\n                *ngIf=\"configuration.configurationType\"\n              >\n                <c8y-highlight\n                  [text]=\"configuration.configurationType\"\n                  elementClass=\"text-gray-lighter\"\n                  [pattern]=\"configType$ | async\"\n                ></c8y-highlight>\n              </span>\n              <span\n                class=\"label label-default\"\n                title=\"{{ 'Configuration type' | translate }}: {{ 'Undefined' | translate }}\"\n                *ngIf=\"!configuration.configurationType\"\n              >\n                {{ 'Undefined' | translate }}\n              </span>\n            </div>\n          </c8y-li-body>\n        </c8y-li>\n      </c8y-list-group>\n    </c8y-select-step-frame>\n  </ng-container>\n  <ng-container *customStep=\"'Preview configuration' | translate\">\n    <c8y-preview-selection-frame\n      [header]=\"'Preview configuration' | translate\"\n      [name]=\"selectedConfiguration?.name\"\n      [type]=\"selectedConfiguration?.configurationType\"\n    >\n      <ng-container *previewBlock=\"'Device type' | translate\">\n        <ng-container *ngIf=\"selectedConfiguration?.deviceType; else noType\">\n          <span>{{ selectedConfiguration?.deviceType }}</span>\n        </ng-container>\n        <ng-template #noType>\n          <em\n            class=\"text-muted\"\n            translate\n          >\n            Undefined`device type`\n          </em>\n        </ng-template>\n      </ng-container>\n      <ng-container *previewBlock=\"'Updated' | translate\">\n        <span>{{ selectedConfiguration?.lastUpdated | c8yDate }}</span>\n      </ng-container>\n      <ng-container *previewBlock=\"'Preview' | translate\">\n        <c8y-ui-empty-state\n          [icon]=\"'file-code-o'\"\n          [title]=\"'No preview available.' | translate\"\n          [subtitle]=\"'Could not fetch the file.' | translate\"\n          *ngIf=\"!this.selectedConfiguration?.binary; else binaryPreview\"\n        ></c8y-ui-empty-state>\n        <ng-template #binaryPreview>\n          <pre style=\"min-height: 98px\"><code>{{ this.selectedConfiguration?.binary }}</code></pre>\n        </ng-template>\n      </ng-container>\n    </c8y-preview-selection-frame>\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 { StepperBulkTypeConfigurationComponent } from './stepper-bulk-type-configuration.component';\n\n/** Module for the 'Configuration update' operation type stepper */\n@NgModule({\n  imports: [StepperBulkTypeConfigurationComponent],\n  providers: [\n    hookListBulkType({\n      type: BulkOperationType.CONFIGURATION,\n      c8yIcon: 'cogs',\n      name: gettext('Configuration update'),\n      path: `${baseUrl}configuration`,\n      component: StepperBulkTypeConfigurationComponent,\n      fragments: ['c8y_DownloadConfigFile', 'c8y_Configuration'],\n      selected: false\n    })\n  ],\n  exports: [StepperBulkTypeConfigurationComponent]\n})\nexport class StepperBulkTypeConfigurationModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}