{"version":3,"file":"c8y-ngx-components-repository-configuration.mjs","sources":["../../repository/configuration/device-tab/device-configuration.service.ts","../../repository/configuration/device-tab/text-based-configuration.component.ts","../../repository/configuration/device-tab/text-based-configuration.component.html","../../repository/configuration/device-tab/device-configuration.guard.ts","../../repository/configuration/device-tab/configuration-filter.pipe.ts","../../repository/configuration/device-tab/save-to-repository.component.ts","../../repository/configuration/device-tab/save-to-repository.component.html","../../repository/configuration/device-tab/source-code-preview.component.ts","../../repository/configuration/device-tab/source-code-preview.component.html","../../repository/configuration/device-tab/configuration-preview.component.ts","../../repository/configuration/device-tab/configuration-preview.component.html","../../repository/configuration/device-tab/device-configuration-list.component.ts","../../repository/configuration/device-tab/device-configuration-list.component.html","../../repository/configuration/device-tab/device-configuration.component.ts","../../repository/configuration/device-tab/device-configuration.component.html","../../repository/configuration/device-tab/configuration-repository-device-tab.module.ts","../../repository/configuration/list/configuration-detail.component.ts","../../repository/configuration/list/configuration-detail.component.html","../../repository/configuration/list/configuration-list.component.ts","../../repository/configuration/list/configuration-list.component.html","../../repository/configuration/list/configuration-repository-navigation-factory.ts","../../repository/configuration/list/configuration-repository-list.module.ts","../../repository/configuration/configuration-repository.module.ts","../../repository/configuration/c8y-ngx-components-repository-configuration.ts"],"sourcesContent":["import { EventEmitter, Injectable } from '@angular/core';\nimport { DeviceConfigurationOperation } from '@c8y/ngx-components/repository/shared';\nimport { IManagedObject } from '@c8y/client';\n\n@Injectable()\nexport class DeviceConfigurationService {\n  configurationsUpdated = new EventEmitter<any>();\n\n  updateConfigurations(repositorySnapsOnly?: boolean) {\n    this.configurationsUpdated.emit(repositorySnapsOnly);\n  }\n\n  hasAnySupportedOperation(\n    mo: IManagedObject,\n    operation: DeviceConfigurationOperation | DeviceConfigurationOperation[]\n  ) {\n    const supported = mo.c8y_SupportedOperations as [];\n    if (!supported) {\n      return false;\n    }\n    if (!Array.isArray(operation)) {\n      operation = [operation];\n    }\n    return supported.some(supportedOperation => operation.includes(supportedOperation));\n  }\n}\n","import { Component, OnInit } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { IManagedObject, IOperation, InventoryService, OperationStatus } from '@c8y/client';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { AlertService, IconDirective, C8yTranslatePipe } from '@c8y/ngx-components';\nimport {\n  DeviceConfigurationOperation,\n  RepositoryService\n} from '@c8y/ngx-components/repository/shared';\nimport { DeviceConfigurationService } from './device-configuration.service';\nimport { NgIf, NgClass } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { OperationDetailsComponent } from '@c8y/ngx-components/operations/operation-details';\n\n@Component({\n  selector: 'c8y-text-based-configuration',\n  templateUrl: './text-based-configuration.component.html',\n  imports: [NgIf, IconDirective, NgClass, FormsModule, OperationDetailsComponent, C8yTranslatePipe]\n})\nexport class TextBasedConfigurationComponent implements OnInit {\n  device: IManagedObject;\n  latestOperation: IOperation;\n  showTextBasedConfigReload: boolean;\n  showTextBasedConfigSave: boolean;\n  reloadingConfig = false;\n  config: string;\n\n  constructor(\n    private route: ActivatedRoute,\n    private alertService: AlertService,\n    private repositoryService: RepositoryService,\n    private deviceConfigurationService: DeviceConfigurationService,\n    private inventoryService: InventoryService\n  ) {}\n\n  async ngOnInit() {\n    await this.load();\n  }\n\n  async load() {\n    this.device = this.route.snapshot.parent.data.contextData;\n    await this.loadDevice();\n    await this.loadOperation();\n    this.showTextBasedConfigReload = this.deviceConfigurationService.hasAnySupportedOperation(\n      this.device,\n      [DeviceConfigurationOperation.SEND_CONFIG]\n    );\n    this.showTextBasedConfigSave = this.deviceConfigurationService.hasAnySupportedOperation(\n      this.device,\n      [DeviceConfigurationOperation.CONFIG]\n    );\n    if (this.device.c8y_Configuration && this.device.c8y_Configuration.config) {\n      this.config = this.device.c8y_Configuration.config;\n    }\n  }\n\n  async loadOperation() {\n    const operation = await this.repositoryService.getLastConfigUpdateOperation(this.device.id);\n    if (operation !== null) {\n      this.reloadingConfig =\n        !!operation.c8y_SendConfiguration &&\n        (operation.status === OperationStatus.PENDING ||\n          operation.status === OperationStatus.EXECUTING);\n      this.repositoryService.observeOperation(operation).subscribe(operationUpdate => {\n        if (\n          operationUpdate.status === OperationStatus.PENDING ||\n          operationUpdate.status === OperationStatus.EXECUTING\n        ) {\n          this.latestOperation = operationUpdate;\n        } else this.latestOperation = null;\n      });\n    }\n  }\n\n  get savingConfig() {\n    return this.latestOperation\n      ? !!this.latestOperation.c8y_Configuration &&\n          (this.latestOperation.status === OperationStatus.PENDING ||\n            this.latestOperation.status === OperationStatus.EXECUTING)\n      : false;\n  }\n\n  async reloadConfiguration() {\n    this.reloadingConfig = true;\n    const operationCfg = await this.repositoryService.createTextBasedConfigurationReloadOperation(\n      this.device\n    );\n    try {\n      this.repositoryService.createObservedOperation(operationCfg).subscribe(\n        operationUpdate => this.onOperationReloadSuccess(operationUpdate),\n        operationUpdate => this.onOperationReloadError(operationUpdate),\n        () => this.onOperationReloadComplete()\n      );\n    } catch (ex) {\n      this.alertService.addServerFailure(ex);\n    }\n  }\n\n  async updateConfiguration(config) {\n    const operationCfg = await this.repositoryService.createTextBasedConfigurationUpdateOperation(\n      this.device,\n      config\n    );\n    try {\n      this.repositoryService.createObservedOperation(operationCfg).subscribe(\n        operationUpdate => this.onOperationUpdateSuccess(operationUpdate),\n        operationUpdate => this.onOperationUpdateError(operationUpdate),\n        () => this.onOperationUpdateComplete()\n      );\n    } catch (ex) {\n      this.alertService.addServerFailure(ex);\n    }\n  }\n\n  private onOperationReloadSuccess(operationUpdate) {\n    this.latestOperation = operationUpdate;\n    if (operationUpdate.status === OperationStatus.PENDING) {\n      this.alertService.success(gettext('Configuration will be reloaded.'));\n    }\n  }\n\n  private onOperationReloadError(operationUpdate) {\n    this.latestOperation = operationUpdate;\n    this.reloadingConfig = false;\n  }\n\n  private async onOperationReloadComplete() {\n    await this.loadDevice();\n    this.config = this.device.c8y_Configuration.config;\n    this.reloadingConfig = false;\n  }\n\n  private onOperationUpdateSuccess(operationUpdate) {\n    this.latestOperation = operationUpdate;\n    if (operationUpdate.status === OperationStatus.PENDING) {\n      this.alertService.success(gettext('Configuration will be updated.'));\n    }\n  }\n\n  private onOperationUpdateError(operationUpdate) {\n    this.latestOperation = operationUpdate;\n  }\n\n  private onOperationUpdateComplete() {\n    this.device.c8y_Configuration.config = this.config;\n  }\n\n  private async loadDevice() {\n    this.device = (\n      await this.inventoryService.detail(this.device.id, {\n        withChildren: false\n      })\n    ).data;\n  }\n}\n","<div class=\"d-flex d-col fit-h\">\n  <fieldset class=\"card-block bg-level-1 fit-w\">\n    <div class=\"content-flex-50\">\n      <div class=\"m-l-auto d-flex\">\n        <button\n          class=\"btn btn-default btn-sm a-s-center m-t-8 m-b-8\"\n          title=\"{{ 'Get configuration from device' | translate }}\"\n          type=\"button\"\n          *ngIf=\"showTextBasedConfigReload\"\n          (click)=\"reloadConfiguration()\"\n          [disabled]=\"reloadingConfig || savingConfig\"\n        >\n          <i\n            class=\"m-r-4\"\n            c8yIcon=\"refresh\"\n            *ngIf=\"reloadingConfig\"\n            [ngClass]=\"{ 'icon-spin': reloadingConfig }\"\n          ></i>\n          <i\n            class=\"m-r-4\"\n            c8yIcon=\"download\"\n            *ngIf=\"!reloadingConfig\"\n          ></i>\n\n          {{ 'Get configuration from device' | translate }}\n        </button>\n      </div>\n    </div>\n  </fieldset>\n  <div class=\"flex-grow\">\n    <textarea\n      class=\"form-control fit-h p-r-16 p-l-16\"\n      [attr.aria-label]=\"'Operations' | translate\"\n      [(ngModel)]=\"config\"\n      [disabled]=\"reloadingConfig || savingConfig\"\n      c8y-spellcheck=\"false\"\n    ></textarea>\n  </div>\n  <c8y-operation-details\n    class=\"bg-level-2 p-0\"\n    *ngIf=\"latestOperation !== undefined\"\n    [operation]=\"latestOperation\"\n  ></c8y-operation-details>\n  <div\n    class=\"card-footer fit-w separator\"\n    *ngIf=\"showTextBasedConfigSave\"\n  >\n    <button\n      class=\"btn btn-primary\"\n      id=\"send-config-btn\"\n      type=\"button\"\n      (click)=\"updateConfiguration(config)\"\n      [disabled]=\"reloadingConfig || savingConfig || !config\"\n      [ngClass]=\"{ 'btn-pending': savingConfig }\"\n    >\n      <span\n        title=\"{{ 'Send' | translate }}\"\n        *ngIf=\"!savingConfig\"\n      >\n        {{ 'Send configuration to device' | translate }}\n      </span>\n      <span\n        title=\"{{ 'Sending…' | translate }}\"\n        *ngIf=\"savingConfig\"\n      >\n        {{ 'Sending…' | translate }}\n      </span>\n    </button>\n  </div>\n</div>\n","import { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot } from '@angular/router';\nimport { DeviceConfigurationOperation } from '@c8y/ngx-components/repository/shared';\nimport { has } from 'lodash-es';\nimport { DeviceConfigurationService } from './device-configuration.service';\n\n@Injectable()\nexport class DeviceConfigurationGuard {\n  constructor(private deviceConfigurationService: DeviceConfigurationService) {}\n\n  canActivate(route: ActivatedRouteSnapshot) {\n    const contextData = route.data.contextData || route.parent.data.contextData;\n    if (!contextData) {\n      return false;\n    }\n    return (\n      (contextData.c8y_SupportedConfigurations &&\n        contextData.c8y_SupportedConfigurations.length > 0) ||\n      this.deviceConfigurationService.hasAnySupportedOperation(contextData, [\n        DeviceConfigurationOperation.DOWNLOAD_CONFIG,\n        DeviceConfigurationOperation.UPLOAD_CONFIG,\n        DeviceConfigurationOperation.CONFIG,\n        DeviceConfigurationOperation.SEND_CONFIG\n      ]) ||\n      has(contextData, 'c8y_Configuration')\n    );\n  }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { SupportedConfigurationItem } from '@c8y/ngx-components/repository/shared';\n\n@Pipe({ name: 'configurationFilterPipe' })\nexport class ConfigurationFilterPipe implements PipeTransform {\n  transform(items: any[], filterTerm: string): any {\n    return filterTerm.trim().length === 0\n      ? items\n      : items.filter(\n          (item: SupportedConfigurationItem) =>\n            this.filterContainString(item.name, filterTerm) ||\n            this.filterContainString(item.deviceType, filterTerm)\n        );\n  }\n\n  private filterContainString(name: string, filterTerm: string) {\n    const term = filterTerm.toLowerCase().trim();\n    return name && name.toLowerCase().indexOf(term) > -1;\n  }\n}\n","import { Component } from '@angular/core';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport {\n  AlertService,\n  IconDirective,\n  C8yTranslateDirective,\n  FormGroupComponent,\n  RequiredInputPlaceholderDirective,\n  C8yTranslatePipe\n} from '@c8y/ngx-components';\nimport {\n  ConfigurationSnapshot,\n  RepositoryService,\n  RepositoryType\n} from '@c8y/ngx-components/repository/shared';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { FormsModule } from '@angular/forms';\n\n@Component({\n  selector: 'c8y-save-config-to-configuration-repository',\n  templateUrl: 'save-to-repository.component.html',\n  imports: [\n    IconDirective,\n    C8yTranslateDirective,\n    FormsModule,\n    FormGroupComponent,\n    RequiredInputPlaceholderDirective,\n    C8yTranslatePipe\n  ]\n})\nexport class SaveToRepositoryComponent {\n  configSnapshot: ConfigurationSnapshot;\n  result: Promise<any> = new Promise((resolve, reject) => {\n    this._save = resolve;\n    this._cancel = reject;\n  });\n  private _save;\n  private _cancel;\n\n  constructor(\n    private modal: BsModalRef,\n    private alertService: AlertService,\n    private repositoryService: RepositoryService\n  ) {}\n\n  async save() {\n    {\n      try {\n        const configSnapshotData = {\n          selected: {\n            configurationType: this.configSnapshot.configurationType\n          },\n          version: this.configSnapshot.name,\n          deviceType: this.configSnapshot.deviceType,\n          description: this.configSnapshot.description,\n          binary: {\n            file: new File([this.configSnapshot.binary], this.configSnapshot.name)\n          }\n        };\n        await this.repositoryService.create(configSnapshotData, RepositoryType.CONFIGURATION);\n        this.alertService.success(gettext('Configuration saved.'));\n        this._save();\n      } catch (ex) {\n        this.alertService.addServerFailure(ex);\n      }\n    }\n  }\n\n  close() {\n    this._cancel();\n    this.modal.hide();\n  }\n}\n","<div class=\"modal-header dialog-header\">\n  <i c8yIcon=\"gears\"></i>\n  <h4 id=\"modal-title\" translate>\n    Save configuration\n  </h4>\n</div>\n<div class=\"modal-body\" id=\"modal-body\">\n  <form #saveConfigurationSnapshot=\"ngForm\" class=\"p-t-24\">\n    <c8y-form-group>\n      <label translate for=\"name\">Name</label>\n      <input\n        id=\"name\"\n        type=\"text\"\n        class=\"form-control\"\n        autocomplete=\"off\"\n        name=\"name\"\n        [(ngModel)]=\"configSnapshot.name\"\n        required\n      />\n    </c8y-form-group>\n    <c8y-form-group>\n      <label translate for=\"deviceType\">Device type</label>\n      <input\n        id=\"deviceType\"\n        class=\"form-control\"\n        rows=\"6\"\n        name=\"deviceType\"\n        [(ngModel)]=\"configSnapshot.deviceType\"\n      />\n    </c8y-form-group>\n    <c8y-form-group>\n      <label translate for=\"description\">Description</label>\n      <input\n        type=\"text\"\n        id=\"description\"\n        class=\"form-control\"\n        maxlength=\"254\"\n        autocomplete=\"off\"\n        name=\"description\"\n        [(ngModel)]=\"configSnapshot.description\"\n      />\n    </c8y-form-group>\n    <c8y-form-group>\n      <label translate for=\"configurationType\">Configuration type</label>\n      <input\n        id=\"configurationType\"\n        class=\"form-control\"\n        rows=\"6\"\n        name=\"configurationType\"\n        [(ngModel)]=\"configSnapshot.configurationType\"\n      />\n    </c8y-form-group>\n  </form>\n</div>\n<div class=\"modal-footer\">\n  <button title=\"{{ 'Cancel' | translate }}\" class=\"btn btn-default\" (click)=\"close()\" translate>\n    Cancel\n  </button>\n\n  <button\n    title=\"{{ 'Save configuration to repository' | translate }}\"\n    class=\"btn btn-primary\"\n    (click)=\"save()\"\n    [disabled]=\"saveConfigurationSnapshot.form.invalid\"\n    translate\n  >\n    Save\n  </button>\n</div>\n","import { Component, Input } from '@angular/core';\n\n@Component({\n  selector: 'c8y-source-code-preview',\n  templateUrl: './source-code-preview.component.html'\n})\nexport class SourceCodePreviewComponent {\n  @Input() isDisabled: boolean;\n  @Input() text: string;\n}\n","<textarea\n  [disabled]=\"isDisabled\"\n  class=\"text-monospace form-control no-resize flex-grow\"\n  rows=\"4\"\n  >{{ text }}</textarea\n>\n","import { Component, Input, OnDestroy, OnInit } from '@angular/core';\nimport {\n  IManagedObject,\n  IOperation,\n  OperationService,\n  OperationStatus,\n  UserService\n} from '@c8y/client';\nimport {\n  AlertService,\n  AppStateService,\n  OperationRealtimeService,\n  Permissions,\n  C8yTranslateDirective,\n  IconDirective,\n  C8yTranslatePipe,\n  DatePipe\n} from '@c8y/ngx-components';\nimport {\n  ConfigurationSnapshot,\n  DeviceConfigurationOperation,\n  RepositoryService\n} from '@c8y/ngx-components/repository/shared';\nimport { saveAs } from 'file-saver';\nimport { cloneDeep } from 'lodash-es';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { Subscription } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { DeviceConfigurationService } from './device-configuration.service';\nimport { SaveToRepositoryComponent } from './save-to-repository.component';\nimport { NgIf } from '@angular/common';\nimport { SourceCodePreviewComponent } from './source-code-preview.component';\nimport { OperationDetailsComponent } from '@c8y/ngx-components/operations/operation-details';\n\n@Component({\n  selector: 'c8y-device-configuration-preview',\n  templateUrl: './configuration-preview.component.html',\n  imports: [\n    C8yTranslateDirective,\n    NgIf,\n    IconDirective,\n    SourceCodePreviewComponent,\n    OperationDetailsComponent,\n    C8yTranslatePipe,\n    DatePipe\n  ]\n})\nexport class ConfigurationPreviewComponent implements OnInit, OnDestroy {\n  @Input() device: IManagedObject;\n\n  @Input() set configurationType(type: string) {\n    this._configurationType = type;\n    this.setOperation(type);\n  }\n\n  get configurationType(): string {\n    return this._configurationType;\n  }\n\n  @Input() configSnapshot: ConfigurationSnapshot;\n  @Input() canSaveSnapshot: boolean;\n  @Input() actionButtonText: string;\n  @Input() actionButtonIcon: string;\n  @Input() isLegacy = false;\n  @Input() operationToTrigger:\n    | DeviceConfigurationOperation.UPLOAD_CONFIG\n    | DeviceConfigurationOperation.DOWNLOAD_CONFIG;\n\n  operation: IOperation;\n  canCallAction = true;\n  deviceConfigurationOperation = DeviceConfigurationOperation;\n  private _configurationType: string;\n  private operationsSubscription: Subscription;\n\n  constructor(\n    private deviceConfigurationService: DeviceConfigurationService,\n    private operationRealtime: OperationRealtimeService,\n    private bsModal: BsModalService,\n    private user: UserService,\n    private appState: AppStateService,\n    private repositoryService: RepositoryService,\n    private operationService: OperationService,\n    private alertService: AlertService\n  ) {}\n\n  async ngOnInit() {\n    this.setCanCallAction();\n    this.setOperation(this._configurationType);\n    this.operationsSubscription = this.operationRealtime\n      .onAll$(this.device.id)\n      .pipe(map(({ data }) => data as IOperation))\n      .subscribe(operation => {\n        this.updatePreview(operation);\n      });\n  }\n\n  async setOperation(configType): Promise<void> {\n    const operationList = await this.repositoryService.getConfigFileOperationList(\n      this.device.id,\n      this.operationToTrigger\n    );\n\n    const operation = this.isLegacy\n      ? operationList.find(op => op[this.operationToTrigger] && !op[this.operationToTrigger].type)\n      : operationList.find(op => op[this.operationToTrigger].type === configType);\n\n    this.operation =\n      operation && operation.status !== OperationStatus.SUCCESSFUL ? operation : undefined;\n  }\n\n  setCanCallAction(): void {\n    this.canCallAction = this.deviceConfigurationService.hasAnySupportedOperation(\n      this.device,\n      this.operationToTrigger\n    );\n  }\n\n  async createDeviceOperation() {\n    let operationCfg;\n    if (this.operationToTrigger === DeviceConfigurationOperation.DOWNLOAD_CONFIG) {\n      operationCfg = this.repositoryService.getDownloadConfigurationFileOperation(\n        this.device,\n        this._configurationType,\n        this.configSnapshot,\n        this.isLegacy\n      );\n    }\n    if (this.operationToTrigger === DeviceConfigurationOperation.UPLOAD_CONFIG) {\n      operationCfg = this.repositoryService.getUploadConfigurationFileOperation(\n        this.device,\n        this._configurationType,\n        this.isLegacy\n      );\n    }\n    try {\n      this.operation = (await this.operationService.create(operationCfg)).data;\n    } catch (ex) {\n      this.alertService.addServerFailure(ex);\n    }\n  }\n\n  showOperation(): boolean {\n    if (this.operationToTrigger === DeviceConfigurationOperation.DOWNLOAD_CONFIG) {\n      return !!this.operation;\n    }\n    return (\n      this.operation &&\n      [OperationStatus.PENDING, OperationStatus.EXECUTING].includes(this.operation.status)\n    );\n  }\n\n  showBinary(): boolean {\n    if (this.operationToTrigger === DeviceConfigurationOperation.DOWNLOAD_CONFIG) {\n      return true;\n    }\n    return !this.showOperation();\n  }\n\n  isCreateOperationDisabled(): boolean {\n    return (\n      this.operation &&\n      [OperationStatus.PENDING, OperationStatus.EXECUTING].includes(this.operation.status)\n    );\n  }\n\n  updatePreview(operation: IOperation) {\n    if (\n      operation &&\n      operation[this.operationToTrigger] &&\n      (this.isLegacy ||\n        (operation[this.operationToTrigger].type &&\n          operation[this.operationToTrigger].type === this.configurationType))\n    ) {\n      this.operation = operation;\n      this.updateSnapshotsOnConfigUpload(operation);\n    }\n  }\n\n  download() {\n    const blob = new Blob([this.configSnapshot.binary], { type: this.configSnapshot.binaryType });\n    let fileName = this.configSnapshot.name;\n    switch (this.configSnapshot.binaryType) {\n      case 'text/csv':\n      case 'application/csv':\n        fileName = fileName.concat('.csv');\n        break;\n      case 'text/yaml':\n      case 'application/x-yaml':\n        fileName = fileName.concat('.yaml');\n        break;\n      case 'application/json':\n        fileName = fileName.concat('.json');\n        break;\n    }\n    saveAs(blob, fileName);\n  }\n\n  async saveToRepository() {\n    const initialState = {\n      configSnapshot: cloneDeep(this.configSnapshot)\n    };\n    const modal = this.bsModal.show(SaveToRepositoryComponent, {\n      class: 'modal-sm',\n      ariaDescribedby: 'modal-body',\n      ariaLabelledBy: 'modal-title',\n      initialState,\n      ignoreBackdropClick: true\n    }).content as SaveToRepositoryComponent;\n    try {\n      await modal.result;\n      this.deviceConfigurationService.updateConfigurations(true);\n      modal.close();\n    } catch (ex) {\n      // do nothing\n    }\n  }\n\n  hasPermission(): boolean {\n    return (\n      this.user.hasAnyRole(this.appState.currentUser.value, [\n        Permissions.ROLE_INVENTORY_ADMIN,\n        Permissions.ROLE_INVENTORY_CREATE\n      ]) ||\n      (this.user.hasAnyRole(this.appState.currentUser.value, [\n        Permissions.ROLE_MANAGED_OBJECT_ADMIN,\n        Permissions.ROLE_MANAGED_OBJECT_CREATE\n      ]) &&\n        this.user.hasAnyRole(this.appState.currentUser.value, [\n          Permissions.ROLE_BINARY_ADMIN,\n          Permissions.ROLE_BINARY_CREATE\n        ]))\n    );\n  }\n\n  ngOnDestroy() {\n    if (this.operationsSubscription) {\n      this.operationsSubscription.unsubscribe();\n    }\n  }\n\n  private async updateSnapshotsOnConfigUpload(operation) {\n    if (\n      operation[DeviceConfigurationOperation.UPLOAD_CONFIG] &&\n      operation.status === OperationStatus.SUCCESSFUL\n    ) {\n      this.deviceConfigurationService.updateConfigurations();\n    }\n  }\n}\n","<div class=\"content-flex-55 p-b-16\">\n  <div class=\"col-7 p-t-4\">\n    <p>\n      <span class=\"text-label-small text-uppercase m-r-4\" translate>Configuration</span>\n      <span *ngIf=\"configSnapshot?.name; else emptyText\">\n        <strong>{{ configSnapshot.name }}</strong>\n      </span>\n      <ng-template #emptyText>---</ng-template>\n    </p>\n    <p>\n      <span class=\"text-label-small text-uppercase m-r-4\" translate>Last updated</span>\n      <small *ngIf=\"configSnapshot?.time; else emptyDate\">\n        {{ configSnapshot.time | c8yDate }}\n      </small>\n      <ng-template #emptyDate>---</ng-template>\n    </p>\n  </div>\n  <div class=\"col-5\">\n    <button\n      id=\"action-btn\"\n      class=\"btn btn-default btn-sm pull-right\"\n      type=\"button\"\n      title=\"{{ actionButtonText | translate }}\"\n      (click)=\"createDeviceOperation()\"\n      [disabled]=\"isCreateOperationDisabled()\"\n      *ngIf=\"canCallAction\"\n    >\n      <i [c8yIcon]=\"actionButtonIcon\"></i>\n      {{ actionButtonText | translate }}\n    </button>\n  </div>\n</div>\n<div class=\"c8y-empty-state text-left\" *ngIf=\"!configSnapshot?.binary && showBinary()\">\n  <h1 [c8yIcon]=\"'file-image-o'\"></h1>\n  <p>\n    <strong translate>No preview available.</strong>\n    <br />\n    <small *ngIf=\"configSnapshot?.binary !== ''; else emptyFile\" translate>\n      The file is not available.\n    </small>\n    <ng-template #emptyFile>\n      <small translate>The file is empty.</small>\n    </ng-template>\n  </p>\n</div>\n<div *ngIf=\"configSnapshot?.binary && showBinary()\" class=\"flex-grow d-flex d-col\">\n  <c8y-source-code-preview\n    [text]=\"configSnapshot.binary\"\n    [isDisabled]=\"true\"\n    class=\"d-contents\"\n  ></c8y-source-code-preview>\n  <div *ngIf=\"canSaveSnapshot\" class=\"p-t-16\">\n    <button\n      title=\"{{ 'Download' | translate }}\"\n      type=\"button\"\n      class=\"btn btn-primary btn-sm pull-right m-l-8\"\n      (click)=\"download()\"\n    >\n      {{ 'Download' | translate }}\n    </button>\n    <button\n      title=\"{{ 'Save to repository' | translate }}\"\n      *ngIf=\"hasPermission()\"\n      type=\"button\"\n      class=\"btn btn-default btn-sm pull-right\"\n      (click)=\"saveToRepository()\"\n    >\n      {{ 'Save to repository' | translate }}\n    </button>\n  </div>\n</div>\n<div *ngIf=\"showOperation()\">\n  <c8y-operation-details [operation]=\"operation\"></c8y-operation-details>\n</div>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport {\n  DeviceConfigurationListEmptyState,\n  SupportedConfigurationItem\n} from '@c8y/ngx-components/repository/shared';\nimport { NgIf, NgFor } from '@angular/common';\nimport { FilterInputComponent, IconDirective, C8yTranslatePipe } from '@c8y/ngx-components';\nimport { ConfigurationFilterPipe } from './configuration-filter.pipe';\n\n@Component({\n  selector: 'c8y-device-configuration-list',\n  templateUrl: './device-configuration-list.component.html',\n  imports: [\n    NgIf,\n    FilterInputComponent,\n    IconDirective,\n    NgFor,\n    C8yTranslatePipe,\n    ConfigurationFilterPipe\n  ]\n})\nexport class DeviceConfigurationListComponent {\n  @Input() items: SupportedConfigurationItem[];\n  @Input() itemIcon: string;\n  @Input() emptyState: DeviceConfigurationListEmptyState;\n  @Input() isFilterEnabled: boolean;\n  @Output() configSelected = new EventEmitter<string>();\n  selectedConfig;\n  filterTerm = '';\n\n  showConfigurationTypePreview(config): void {\n    this.selectedConfig = config;\n    this.configSelected.emit(config);\n  }\n\n  updatePipe(filterTerm: string) {\n    this.filterTerm = filterTerm;\n  }\n}\n","<div class=\"p-l-16 m-b-8\" *ngIf=\"isFilterEnabled\">\n  <c8y-filter [icon]=\"'search'\" (onSearch)=\"updatePipe($event)\"></c8y-filter>\n</div>\n\n<!-- EMPTY STATE -->\n<div class=\"c8y-empty-state text-left\" *ngIf=\"items?.length === 0\">\n  <h1 [c8yIcon]=\"emptyState.icon\"></h1>\n  <p>\n    <strong>{{ emptyState.title | translate }}</strong>\n    <br />\n    <small>{{ emptyState.text | translate }}</small>\n  </p>\n</div>\n\n<!-- CONFIGURATIONS AVAILABLE -->\n<div class=\"c8y-nav-stacked\">\n  <button\n    type=\"button\"\n    class=\"c8y-stacked-item d-flex\"\n    [class.active]=\"config === selectedConfig\"\n    *ngFor=\"let config of items | configurationFilterPipe: filterTerm\"\n    (click)=\"showConfigurationTypePreview(config)\"\n  >\n    <div class=\"list-item-icon\">\n      <i [c8yIcon]=\"itemIcon\"></i>\n    </div>\n    <div class=\"list-item-body text-truncate\">\n      <div class=\"d-flex\">\n        <span class=\"text-truncate\" title=\"{{ config.name }}\">{{ config.name }}</span>\n        <span class=\"text-label-small m-l-auto m-t-auto m-b-auto\">{{ config.deviceType }}</span>\n      </div>\n    </div>\n  </button>\n</div>\n\n<!-- for Carlos: config.configurationType to differentiate whether a config matches configuration type. -->\n","import { Component, OnInit, ViewChild } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { IManagedObject, Realtime } from '@c8y/client';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport {\n  ActionBarItemComponent,\n  IconDirective,\n  TabsetAriaDirective,\n  C8yTranslateDirective,\n  EmptyStateComponent,\n  C8yTranslatePipe\n} from '@c8y/ngx-components';\nimport {\n  ConfigurationSnapshot,\n  DeviceConfigurationListEmptyState,\n  DeviceConfigurationOperation,\n  RepositoryService,\n  SupportedConfigurationItem\n} from '@c8y/ngx-components/repository/shared';\nimport { has } from 'lodash-es';\nimport { DeviceConfigurationService } from './device-configuration.service';\nimport { TextBasedConfigurationComponent } from './text-based-configuration.component';\nimport { NgClass, NgIf } from '@angular/common';\nimport { TabsetComponent, TabDirective } from 'ngx-bootstrap/tabs';\nimport { DeviceConfigurationListComponent } from './device-configuration-list.component';\nimport { ConfigurationPreviewComponent } from './configuration-preview.component';\n\n@Component({\n  selector: 'c8y-device-configuration',\n  templateUrl: './device-configuration.component.html',\n  imports: [\n    ActionBarItemComponent,\n    IconDirective,\n    NgClass,\n    TabsetAriaDirective,\n    TabsetComponent,\n    NgIf,\n    TabDirective,\n    C8yTranslateDirective,\n    DeviceConfigurationListComponent,\n    EmptyStateComponent,\n    ConfigurationPreviewComponent,\n    TextBasedConfigurationComponent,\n    C8yTranslatePipe\n  ]\n})\nexport class DeviceConfigurationComponent implements OnInit {\n  supportedConfigurations: SupportedConfigurationItem[] = [];\n  showBinaryBasedConfig = false;\n  configurationType: string;\n  configSnapshot: Partial<ConfigurationSnapshot> = {};\n  repositorySnapshots: IManagedObject[];\n  repositorySnapshot: ConfigurationSnapshot;\n  repositorySnapshotsEmptyState: DeviceConfigurationListEmptyState;\n  device: IManagedObject;\n  isLegacy: boolean;\n  showTextBasedConfig: boolean;\n  reloading = false;\n\n  @ViewChild(TextBasedConfigurationComponent)\n  textBasedConfigurationComponent: TextBasedConfigurationComponent;\n\n  constructor(\n    private route: ActivatedRoute,\n    private deviceConfigurationService: DeviceConfigurationService,\n    private realtime: Realtime,\n    private repositoryService: RepositoryService\n  ) {\n    this.deviceConfigurationService.configurationsUpdated.subscribe(repositorySnapsOnly => {\n      this.updateSnapshots(repositorySnapsOnly);\n    });\n  }\n\n  ngOnInit() {\n    this.device = this.route.snapshot.parent.data.contextData;\n    if (this.device.c8y_SupportedConfigurations) {\n      this.supportedConfigurations = this.device.c8y_SupportedConfigurations.map(item => ({\n        name: item\n      }));\n    }\n\n    if (\n      this.deviceConfigurationService.hasAnySupportedOperation(this.device, [\n        DeviceConfigurationOperation.DOWNLOAD_CONFIG,\n        DeviceConfigurationOperation.UPLOAD_CONFIG\n      ])\n    ) {\n      this.supportedConfigurations.push({\n        name: gettext('Legacy configuration snapshot'),\n        isLegacy: true\n      });\n    }\n    if (this.supportedConfigurations.length > 0) {\n      this.showBinaryBasedConfig = true;\n    }\n\n    this.repositorySnapshotsEmptyState = {\n      icon: 'gears',\n      title: gettext('No configurations available.'),\n      text: gettext('Add configuration to configuration repository')\n    };\n\n    this.showTextBasedConfig =\n      this.deviceConfigurationService.hasAnySupportedOperation(this.device, [\n        DeviceConfigurationOperation.CONFIG,\n        DeviceConfigurationOperation.SEND_CONFIG\n      ]) || has(this.device, 'c8y_Configuration');\n  }\n\n  async onConfigTypeSelected(config) {\n    this.configurationType = config.name;\n    this.isLegacy = config.isLegacy;\n    this.updateSnapshots();\n  }\n\n  async onRepositoryConfigSelected(config) {\n    this.repositorySnapshot = {\n      id: config.id,\n      time: config.creationTime,\n      name: config.name,\n      binaryUrl: config.url,\n      deviceType: config.deviceType,\n      configurationType: config.configurationType\n    };\n    if (config.url) {\n      try {\n        const binary = await this.repositoryService.getBinaryFile(config.url, {\n          allowExternal: false\n        });\n        if (binary) {\n          this.repositorySnapshot.binary = await (binary as any).text();\n        }\n      } catch (ex) {\n        // do nothing\n      }\n    }\n  }\n\n  async updateSnapshots(repositorySnapsOnly?: boolean) {\n    this.reloading = true;\n    this.repositorySnapshot = undefined;\n    this.repositorySnapshots = await this.repositoryService.getSnapshotsFromRepository(\n      this.device,\n      this.configurationType\n    );\n    if (!repositorySnapsOnly) {\n      this.configSnapshot = this.isLegacy\n        ? await this.repositoryService.getLegacyConfigSnapshot(this.device)\n        : await this.repositoryService.getConfigSnapshot(this.device, this.configurationType);\n    }\n    if (this.showTextBasedConfig) {\n      await this.textBasedConfigurationComponent.load();\n    }\n    this.reloading = false;\n  }\n}\n","<c8y-action-bar-item [placement]=\"'right'\">\n  <button class=\"btn btn-link\" title=\"{{ 'Reload' | translate }}\" (click)=\"updateSnapshots()\">\n    <i c8yIcon=\"refresh\" [ngClass]=\"{ 'icon-spin': reloading }\"></i>\n    {{ 'Reload' | translate }}\n  </button>\n</c8y-action-bar-item>\n\n<div class=\"card content-fullpage card-has-tabs\">\n  <tabset>\n    <div class=\"card-header separator\" *ngIf=\"showBinaryBasedConfig && !showTextBasedConfig\">\n      <div class=\"card-title\">{{ 'Configurations' | translate }}</div>\n    </div>\n    <div class=\"card-header separator\" *ngIf=\"!showBinaryBasedConfig && showTextBasedConfig\">\n      <div class=\"card-title\">{{ 'Text-based configuration' | translate }}</div>\n    </div>\n    <tab heading=\"{{ 'Configurations' | translate }}\" *ngIf=\"showBinaryBasedConfig\">\n      <div class=\"card--grid card grid__col--4-8--md grid__row--6-6--md m-b-0\">\n        <!-- DEVICE SUPPORTED CONFIGURATIONS -->\n        <div class=\"card--grid__inner-scroll bg-level-1\">\n          <div class=\"p-l-16 p-r-16\">\n            <h5 class=\"legend form-block\">\n              <span translate>Device-supported configurations</span>\n            </h5>\n          </div>\n          <c8y-device-configuration-list\n            [items]=\"supportedConfigurations\"\n            [itemIcon]=\"'gears'\"\n            (configSelected)=\"onConfigTypeSelected($event)\"\n          ></c8y-device-configuration-list>\n        </div>\n\n        <!-- CONFIGURATION PREVIEW -->\n        <div class=\"card--grid__inner-scroll d-flex d-col flex-grow\">\n          <div class=\"card-block d-flex d-col flex-grow\">\n            <h5 class=\"legend form-block\"><span translate>Preview</span></h5>\n\n            <!-- EMPTY STATE -->\n\n            <c8y-ui-empty-state\n              *ngIf=\"!configurationType\"\n              [icon]=\"'file-text'\"\n              [title]=\"'No configuration selected.' | translate\"\n              [subtitle]=\"'Select a configuration to preview.' | translate\"\n              [horizontal]=\"true\"\n            ></c8y-ui-empty-state>\n\n            <!-- PREVIEW AVAILABLE STATE -->\n            <c8y-device-configuration-preview\n              *ngIf=\"configurationType\"\n              [device]=\"device\"\n              [configurationType]=\"configurationType\"\n              [configSnapshot]=\"configSnapshot\"\n              [canSaveSnapshot]=\"true\"\n              [operationToTrigger]=\"'c8y_UploadConfigFile'\"\n              [actionButtonText]=\"'Get snapshot from device' | translate\"\n              [actionButtonIcon]=\"'download'\"\n              [isLegacy]=\"isLegacy\"\n              class=\"d-flex d-col flex-grow\"\n            ></c8y-device-configuration-preview>\n          </div>\n        </div>\n\n        <!-- AVAILABLE SUPPORTED CONFIGURATIONS -->\n        <div class=\"card--grid__inner-scroll bg-level-1\">\n          <div class=\"p-l-16 p-r-16\">\n            <h5 class=\"legend form-block\" translate>Available supported configurations</h5>\n          </div>\n\n          <!-- EMPTY STATE -->\n\n          <c8y-ui-empty-state\n            *ngIf=\"!configurationType\"\n            [icon]=\"'gears'\"\n            [title]=\"'No selection.' | translate\"\n            [subtitle]=\"\n              'Select a configuration from the device-supported configuration list.' | translate\n            \"\n            [horizontal]=\"true\"\n          ></c8y-ui-empty-state>\n\n          <div class=\"p-r-16\" *ngIf=\"configurationType\">\n            <c8y-device-configuration-list\n              [items]=\"repositorySnapshots\"\n              [itemIcon]=\"'file-text'\"\n              [emptyState]=\"repositorySnapshotsEmptyState\"\n              [isFilterEnabled]=\"true\"\n              (configSelected)=\"onRepositoryConfigSelected($event)\"\n            ></c8y-device-configuration-list>\n          </div>\n        </div>\n\n        <!-- CONFIGURATION PREVIEW -->\n        <div class=\"card--grid__inner-scroll d-flex d-col flex-grow\">\n          <div class=\"card-block flex-grow d-flex d-col\">\n            <h5 class=\"legend form-block\" translate>Preview</h5>\n\n            <!-- EMPTY STATE -->\n            <c8y-ui-empty-state\n              *ngIf=\"!repositorySnapshot\"\n              [icon]=\"'file-text'\"\n              [title]=\"'No configuration selected.' | translate\"\n              [subtitle]=\"'Select a configuration to preview.' | translate\"\n              [horizontal]=\"true\"\n            ></c8y-ui-empty-state>\n\n            <!-- CONFIGURATION SELECTED STATE -->\n            <c8y-device-configuration-preview\n              *ngIf=\"repositorySnapshot\"\n              [device]=\"device\"\n              [configurationType]=\"configurationType\"\n              [configSnapshot]=\"repositorySnapshot\"\n              [operationToTrigger]=\"'c8y_DownloadConfigFile'\"\n              [actionButtonText]=\"'Send configuration to device' | translate\"\n              [actionButtonIcon]=\"'upload'\"\n              [isLegacy]=\"isLegacy\"\n              class=\"d-flex d-col flex-grow\"\n            ></c8y-device-configuration-preview>\n          </div>\n        </div>\n      </div>\n    </tab>\n    <tab heading=\"{{ 'Text-based configuration' | translate }}\" *ngIf=\"showTextBasedConfig\">\n      <c8y-text-based-configuration></c8y-text-based-configuration>\n    </tab>\n  </tabset>\n</div>\n","import { ModuleWithProviders, NgModule } from '@angular/core';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { ViewContext, hookRoute } from '@c8y/ngx-components';\nimport { DeviceConfigurationGuard } from './device-configuration.guard';\nimport { DeviceConfigurationComponent } from './device-configuration.component';\nimport { ConfigurationPreviewComponent } from './configuration-preview.component';\nimport { ConfigurationFilterPipe } from './configuration-filter.pipe';\nimport { DeviceConfigurationService } from './device-configuration.service';\nimport { DeviceConfigurationListComponent } from './device-configuration-list.component';\nimport { TextBasedConfigurationComponent } from './text-based-configuration.component';\nimport { SaveToRepositoryComponent } from './save-to-repository.component';\nimport { SourceCodePreviewComponent } from './source-code-preview.component';\nimport { TabsModule } from 'ngx-bootstrap/tabs';\nimport { OperationDetailsModule } from '@c8y/ngx-components/operations/operation-details';\nimport { SharedRepositoryModule } from '@c8y/ngx-components/repository/shared';\n\n@NgModule({\n  imports: [\n    SharedRepositoryModule,\n    OperationDetailsModule,\n    TabsModule.forRoot(),\n    DeviceConfigurationComponent,\n    DeviceConfigurationListComponent,\n    ConfigurationPreviewComponent,\n    ConfigurationFilterPipe,\n    SaveToRepositoryComponent,\n    SourceCodePreviewComponent,\n    TextBasedConfigurationComponent\n  ],\n  providers: [DeviceConfigurationService]\n})\nexport class ConfigurationRepositoryDeviceTabModule {\n  static forRoot(): ModuleWithProviders<ConfigurationRepositoryDeviceTabModule> {\n    return {\n      ngModule: ConfigurationRepositoryDeviceTabModule,\n      providers: [\n        DeviceConfigurationGuard,\n        hookRoute({\n          context: ViewContext.Device,\n          path: 'device-configuration',\n          component: DeviceConfigurationComponent,\n          label: gettext('Configuration'),\n          icon: 'gears',\n          priority: 600,\n          canActivate: [DeviceConfigurationGuard]\n        })\n      ]\n    };\n  }\n}\n","import { Component, ViewChild } from '@angular/core';\nimport { NgForm, FormsModule } from '@angular/forms';\nimport { IManagedObject } from '@c8y/client';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport {\n  AlertService,\n  ForOfFilterPipe,\n  PickedFiles,\n  ValidationPattern,\n  IconDirective,\n  C8yTranslateDirective,\n  FormGroupComponent,\n  RequiredInputPlaceholderDirective,\n  TypeaheadComponent,\n  ForOfDirective,\n  ListItemComponent,\n  HighlightComponent,\n  FilePickerComponent,\n  C8yTranslatePipe\n} from '@c8y/ngx-components';\nimport {\n  ModalModel,\n  RepositoryService,\n  RepositoryType\n} from '@c8y/ngx-components/repository/shared';\nimport { isUndefined, uniqBy } from 'lodash-es';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { pipe } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { NgIf, NgClass } from '@angular/common';\n\n@Component({\n  selector: 'c8y-configuration-detail',\n  templateUrl: './configuration-detail.component.html',\n  imports: [\n    IconDirective,\n    NgIf,\n    C8yTranslateDirective,\n    FormsModule,\n    FormGroupComponent,\n    RequiredInputPlaceholderDirective,\n    TypeaheadComponent,\n    ForOfDirective,\n    ListItemComponent,\n    HighlightComponent,\n    FilePickerComponent,\n    NgClass,\n    C8yTranslatePipe\n  ]\n})\nexport class ConfigurationDetailComponent implements ModalModel {\n  @ViewChild('configurationForm', { static: true }) configurationForm: NgForm;\n  version: string;\n  description: string;\n  binary: { file?: File; url?: string } = {\n    file: undefined,\n    url: undefined\n  };\n  deviceType: string;\n  configurationTypeMO: Partial<IManagedObject>;\n\n  pattern = '';\n  filterPipe: ForOfFilterPipe;\n  configs;\n  mo: Partial<IManagedObject> = {};\n  saving = false;\n  uploadChoice: 'uploadBinary' | 'uploadUrl' = 'uploadBinary';\n  existingBinary: File;\n  submitButtonTitle: string;\n  textForConfigurationUrlPopover: string =\n    gettext(`Path for binaries can vary depending on device agent implementation, for example:\n    /configuration/binaries/configuration1.bin\n    https://configuration/binary/123\n    ftp://configuration/binary/123.tar.gz\n    Configurations with external URLs only work with the configuration typed devices (file-based configuration), not with devices with a legacy configuration.\n  `);\n\n  result: Promise<void> = new Promise((resolve, reject) => {\n    this._save = resolve;\n    this._cancel = reject;\n  });\n  ValidationPattern = ValidationPattern;\n\n  private _save;\n  private _cancel;\n\n  constructor(\n    private repositoryService: RepositoryService,\n    private bsModalRef: BsModalRef,\n    private alert: AlertService\n  ) {}\n\n  async ngOnInit() {\n    this.configs = await this.repositoryService.listRepositoryEntries(RepositoryType.CONFIGURATION);\n    if (this.mo) {\n      this.uploadChoice = this.binary.file ? 'uploadBinary' : 'uploadUrl';\n      this.existingBinary = this.binary.file;\n      this.configurationTypeMO = this.mo;\n    }\n    this.setPipe('');\n    this.submitButtonTitle = this.mo.id\n      ? gettext('Update configuration')\n      : gettext('Add configuration');\n  }\n\n  cancel() {\n    this.bsModalRef.hide();\n    this._cancel();\n  }\n\n  setPipe(filterStr: string) {\n    this.pattern = filterStr;\n    this.filterPipe = pipe(\n      map(data => uniqBy(data, 'configurationType')),\n      map(data => {\n        return data.filter(\n          mo =>\n            mo.configurationType &&\n            mo.configurationType.toLowerCase().indexOf(filterStr.toLowerCase()) > -1\n        );\n      })\n    );\n  }\n\n  onFile(dropped: PickedFiles) {\n    this.configurationForm.form.markAsDirty();\n    if (!isUndefined(dropped.url)) {\n      this.binary = {\n        url: dropped.url\n      };\n      return;\n    } else if (dropped.droppedFiles) {\n      this.binary = {\n        file: dropped.droppedFiles[0].file\n      };\n      return;\n    } else {\n      this.binary = {\n        file: undefined,\n        url: undefined\n      };\n    }\n  }\n\n  async save() {\n    try {\n      this.saving = true;\n      const { version, description, binary, deviceType } = this;\n      if (this.existingBinary === this.binary.file) {\n        binary.file = undefined;\n      }\n      await this.repositoryService.create(\n        {\n          version,\n          description,\n          binary,\n          deviceType,\n          configurationType: this.configurationTypeMO?.configurationType\n        },\n        RepositoryType.CONFIGURATION,\n        this.mo\n      );\n      this.alert.success(\n        this.mo.id ? gettext('Configuration updated.') : gettext('Configuration created.')\n      );\n      this.bsModalRef.hide();\n      this._save();\n    } catch (ex) {\n      this.alert.addServerFailure(ex);\n      this._cancel();\n    } finally {\n      this.saving = false;\n    }\n  }\n}\n","<div class=\"viewport-modal\">\n  <div\n    class=\"modal-header dialog-header\"\n    id=\"configurationModalTitle\"\n  >\n    <i [c8yIcon]=\"'cogs'\"></i>\n    <h4\n      id=\"modal-title\"\n      translate\n      *ngIf=\"mo.id\"\n    >\n      Update configuration\n    </h4>\n    <h4\n      id=\"modal-title\"\n      translate\n      *ngIf=\"!mo.id\"\n    >\n      Add configuration\n    </h4>\n  </div>\n\n  <form\n    class=\"d-contents\"\n    #configurationForm=\"ngForm\"\n    (ngSubmit)=\"configurationForm.form.valid && save()\"\n  >\n    <div\n      class=\"modal-inner-scroll\"\n      id=\"modal-body\"\n    >\n      <div\n        class=\"modal-body\"\n        id=\"configurationModalDescription\"\n      >\n        <c8y-form-group>\n          <label translate>Name</label>\n          <input\n            class=\"form-control\"\n            placeholder=\"{{ 'e.g.' | translate }} hosts\"\n            name=\"version\"\n            type=\"text\"\n            autocomplete=\"off\"\n            required\n            maxlength=\"254\"\n            [(ngModel)]=\"version\"\n            [pattern]=\"ValidationPattern.rules.noWhiteSpaceOnly.pattern\"\n          />\n        </c8y-form-group>\n\n        <c8y-form-group>\n          <label translate>Device type</label>\n          <input\n            class=\"form-control\"\n            placeholder=\"{{ 'e.g.' | translate }} c8y_Linux\"\n            name=\"deviceType\"\n            type=\"text\"\n            autocomplete=\"off\"\n            maxlength=\"254\"\n            [(ngModel)]=\"deviceType\"\n            [pattern]=\"ValidationPattern.rules.noWhiteSpaceOnly.pattern\"\n          />\n        </c8y-form-group>\n\n        <c8y-form-group>\n          <label translate>Description</label>\n          <input\n            class=\"form-control\"\n            placeholder=\"{{ 'e.g. Host configuration' | translate }} c8y_Linux\"\n            name=\"description\"\n            type=\"text\"\n            autocomplete=\"off\"\n            maxlength=\"254\"\n            [(ngModel)]=\"description\"\n            [pattern]=\"ValidationPattern.rules.noWhiteSpaceOnly.pattern\"\n          />\n        </c8y-form-group>\n\n        <c8y-form-group>\n          <label translate>Configuration type</label>\n          <c8y-typeahead\n            placeholder=\"{{ 'e.g.' | translate }} ssh\"\n            name=\"confType\"\n            [(ngModel)]=\"configurationTypeMO\"\n            maxlength=\"254\"\n            (onSearch)=\"setPipe($event)\"\n            displayProperty=\"configurationType\"\n          >\n            <c8y-li\n              class=\"p-l-8 p-r-8 c8y-list__item--link\"\n              *c8yFor=\"let config of configs; pipe: filterPipe; notFound: notFoundTemplate\"\n              (click)=\"configurationTypeMO = config; setPipe('')\"\n              [active]=\"configurationTypeMO === config\"\n            >\n              <c8y-highlight\n                [text]=\"config.configurationType || '--'\"\n                [pattern]=\"pattern\"\n              ></c8y-highlight>\n            </c8y-li>\n            <ng-template #notFoundTemplate>\n              <c8y-li\n                class=\"bg-level-2 p-8\"\n                *ngIf=\"pattern.length > 0\"\n              >\n                <span translate>No match found.</span>\n                <button\n                  class=\"btn btn-primary btn-xs m-l-8\"\n                  title=\"{{ 'Add new`configuration type`' | translate }}\"\n                  type=\"button\"\n                  translate\n                >\n                  Add new`configuration type`\n                </button>\n              </c8y-li>\n            </ng-template>\n          </c8y-typeahead>\n        </c8y-form-group>\n\n        <c8y-form-group>\n          <div\n            class=\"legend form-block m-t-40\"\n            translate\n          >\n            Configuration file\n          </div>\n          <c8y-file-picker\n            [maxAllowedFiles]=\"1\"\n            (onFilesPicked)=\"onFile($event)\"\n            [uploadChoice]=\"uploadChoice\"\n            [fileUrl]=\"binary.url\"\n            [fileBinary]=\"binary.file\"\n            [fileUrlPopover]=\"textForConfigurationUrlPopover\"\n          ></c8y-file-picker>\n        </c8y-form-group>\n      </div>\n    </div>\n\n    <div class=\"modal-footer\">\n      <button\n        class=\"btn btn-default\"\n        title=\"{{ 'Cancel' | translate }}\"\n        type=\"button\"\n        (click)=\"cancel()\"\n        [disabled]=\"saving\"\n      >\n        <span translate>Cancel</span>\n      </button>\n      <button\n        class=\"btn btn-primary\"\n        title=\"{{ submitButtonTitle | translate }}\"\n        type=\"submit\"\n        [ngClass]=\"{ 'btn-pending': saving }\"\n        [disabled]=\"\n          !configurationForm.valid ||\n          configurationForm.pristine ||\n          (!binary?.url?.trim() && !binary?.file) ||\n          saving\n        \"\n      >\n        {{ submitButtonTitle | translate }}\n      </button>\n    </div>\n  </form>\n</div>\n","import { Component, EventEmitter, OnInit, ViewChild } from '@angular/core';\nimport { IManagedObject, InventoryBinaryService, IResultList } from '@c8y/client';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport {\n  ActionControl,\n  AlertService,\n  BuiltInActionType,\n  Column,\n  DataGridService,\n  DataSourceModifier,\n  FilterInputComponent,\n  ModalService,\n  ServerSideDataCallback,\n  ServerSideDataResult,\n  Status,\n  TitleComponent,\n  C8yTranslateDirective,\n  BreadcrumbComponent,\n  BreadcrumbItemComponent,\n  ActionBarItemComponent,\n  IconDirective,\n  HelpComponent,\n  DataGridComponent,\n  EmptyStateContextDirective,\n  EmptyStateComponent,\n  GuideDocsComponent,\n  GuideHrefDirective,\n  C8yTranslatePipe\n} from '@c8y/ngx-components';\nimport {\n  DescriptionGridColumn,\n  DeviceTypeGridColumn,\n  FileGridColumn,\n  RepositoryItemNameGridColumn,\n  RepositoryService,\n  RepositoryType,\n  TypeGridColumn\n} from '@c8y/ngx-components/repository/shared';\nimport { TranslateService } from '@ngx-translate/core';\nimport { saveAs } from 'file-saver';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { ConfigurationDetailComponent } from './configuration-detail.component';\nimport { AsyncPipe } from '@angular/common';\n\n@Component({\n  selector: 'c8y-configuration-list',\n  templateUrl: './configuration-list.component.html',\n  imports: [\n    TitleComponent,\n    C8yTranslateDirective,\n    BreadcrumbComponent,\n    BreadcrumbItemComponent,\n    ActionBarItemComponent,\n    IconDirective,\n    HelpComponent,\n    DataGridComponent,\n    EmptyStateContextDirective,\n    EmptyStateComponent,\n    GuideDocsComponent,\n    GuideHrefDirective,\n    AsyncPipe,\n    C8yTranslatePipe\n  ]\n})\nexport class ConfigurationListComponent implements OnInit {\n  @ViewChild(FilterInputComponent, { static: false }) filter: FilterInputComponent;\n  refresh$: EventEmitter<void> = new EventEmitter();\n  pagination = {\n    pageSize: 50,\n    currentPage: 1\n  };\n  noResultsMessage = gettext('No results to display.');\n  noDataMessage = gettext('There are no configuration snapshots defined.');\n  noResultsSubtitle = gettext('Refine your search terms or check your spelling.');\n  noDataSubtitle = gettext('Add a configuration snapshot first.');\n  actionControls: ActionControl[] = [];\n  columns: Column[] = [\n    new RepositoryItemNameGridColumn({\n      filterLabel: gettext('Filter configurations by name'),\n      placeholder: gettext('SSH'),\n      callback: this.edit.bind(this)\n    }),\n    new DescriptionGridColumn({\n      filterLabel: gettext('Filter configurations by description'),\n      placeholder: gettext('SSH configuration')\n    }),\n    new FileGridColumn(),\n    new DeviceTypeGridColumn({\n      path: 'deviceType',\n      filterLabel: gettext('Filter configurations by device type')\n    }),\n    new TypeGridColumn({\n      header: gettext('Configuration type'),\n      filterLabel: gettext('Filter by configuration type'),\n      example: 'ssh',\n      path: 'configurationType',\n      repositoryType: RepositoryType.CONFIGURATION\n    })\n  ];\n  size$: Promise<number>;\n  sizeRequestDone = false;\n  serverSideDataCallback: ServerSideDataCallback;\n\n  private readonly DELETED_SUCCESS_MSG = gettext('Configuration deleted.');\n\n  constructor(\n    private alert: AlertService,\n    private gridService: DataGridService,\n    private repositoryService: RepositoryService,\n    private bsModalService: BsModalService,\n    private modalService: ModalService,\n    private translateService: TranslateService,\n    private inventoryBinaryService: InventoryBinaryService\n  ) {\n    this.serverSideDataCallback = this.onDataSourceModifier.bind(this);\n  }\n\n  ngOnInit() {\n    this.actionControls.push({\n      type: BuiltInActionType.Edit,\n      callback: this.edit.bind(this)\n    });\n    this.actionControls.push({\n      type: BuiltInActionType.Delete,\n      callback: this.delete.bind(this)\n    });\n    this.actionControls.push({\n      type: 'download',\n      icon: 'download',\n      text: gettext('Download'),\n      showIf: row => this.isBinaryFile(row as unknown as IManagedObject),\n      callback: this.download.bind(this)\n    });\n  }\n\n  async onDataSourceModifier(\n    dataSourceModifier: DataSourceModifier\n  ): Promise<ServerSideDataResult> {\n    const dataRequest: Promise<IResultList<IManagedObject>> =\n      this.repositoryService.listRepositoryEntries(RepositoryType.CONFIGURATION, {\n        query: this.gridService.getQueryObj(dataSourceModifier.columns),\n        skipDefaultOrder: true,\n        params: {\n          pageSize: dataSourceModifier.pagination.pageSize,\n          currentPage: dataSourceModifier.pagination.currentPage,\n          withTotalPages: true\n        }\n      });\n\n    const filtererdSizeRequest: Promise<number> = this.repositoryService\n      .listRepositoryEntries(RepositoryType.CONFIGURATION, {\n        query: this.gridService.getQueryObj(dataSourceModifier.columns),\n        skipDefaultOrder: true,\n        params: { pageSize: 1 }\n      })\n      .then(response => response?.paging?.totalPages);\n\n    this.size$ = this.repositoryService\n      .listRepositoryEntries(RepositoryType.CONFIGURATION, {\n        skipDefaultOrder: true,\n        params: { pageSize: 1 }\n      })\n      .then(response => {\n        this.sizeRequestDone = true;\n        return response?.paging?.totalPages;\n      });\n\n    const [dataResponse, size, filteredSize] = await Promise.all([\n      dataRequest,\n      this.size$,\n      filtererdSizeRequest\n    ]);\n\n    const { res, data, paging } = dataResponse;\n\n    const serverSideDataResult: ServerSideDataResult = {\n      res,\n      data,\n      paging,\n      filteredSize,\n      size\n    };\n\n    return serverSideDataResult;\n  }\n\n  async add() {\n    try {\n      await (\n        this.bsModalService.show(ConfigurationDetailComponent, {\n          class: 'modal-sm',\n          ariaDescribedby: 'configurationModalDescription',\n          ariaLabelledBy: 'configurationModalTitle',\n          ignoreBackdropClick: true,\n          keyboard: false\n        }).content as ConfigurationDetailComponent\n      ).result;\n      this.refresh$.next();\n    } catch (ex) {\n      // intended empty\n    }\n  }\n\n  async edit(configuration: IManagedObject) {\n    const fileBinary: File = await this.repositoryService.getBinaryFile(configuration.url, {\n      allowExternal: false\n    });\n    try {\n      const modal = this.bsModalService.show(ConfigurationDetailComponent, {\n        class: 'modal-sm',\n        ariaDescribedby: 'configurationModalDescription',\n        ariaLabelledBy: 'configurationModalTitle',\n        ignoreBackdropClick: true,\n        keyboard: false,\n\n        initialState: {\n          version: configuration.name,\n          deviceType: configuration.deviceType,\n          description: configuration.description,\n          binary: { file: fileBinary, url: configuration.url }\n        }\n      }).content as ConfigurationDetailComponent;\n      modal.mo = configuration;\n      await modal.result;\n      this.refresh$.next();\n    } catch (ex) {\n      // intended empty\n    }\n  }\n\n  isBinaryFile(configuration: IManagedObject) {\n    return configuration.url\n      ? !!this.inventoryBinaryService.getIdFromUrl(configuration.url)\n      : false;\n  }\n\n  async download(configuration: IManagedObject) {\n    const fileBinary: File = await this.repositoryService.getBinaryFile(configuration.url, {\n      allowExternal: false\n    });\n    saveAs(fileBinary);\n  }\n\n  async delete(configuration: IManagedObject) {\n    try {\n      const title = gettext('Delete configuration snapshot');\n      const confirmationText = gettext(\n        'You are about to delete the configuration snapshot {{ name }}.'\n      );\n      const hint = gettext('This operation is irreversible.');\n      const proceed = gettext('Do you want to proceed?');\n      const body = [\n        this.translateService.instant(confirmationText, {\n          name: configuration.name\n        }),\n        this.translateService.instant(hint),\n        this.translateService.instant(proceed)\n      ].join(' ');\n      const labels = {\n        ok: gettext('Delete')\n      };\n      await this.modalService.confirm(title, body, Status.DANGER, labels);\n      await this.repositoryService.delete(configuration);\n      this.alert.success(this.DELETED_SUCCESS_MSG);\n      this.refresh$.next();\n    } catch (ex) {\n      if (ex) {\n        this.alert.addServerFailure(ex);\n      }\n    }\n  }\n\n  trackByName(_index, column: Column): string {\n    return column.name;\n  }\n}\n","<c8y-title>\n  <span\n    class=\"m-r-4\"\n    translate\n  >\n    Configuration repository\n  </span>\n  <small>\n    {{ size$ | async }}\n    <span translate>snapshots</span>\n  </small>\n</c8y-title>\n\n<c8y-breadcrumb>\n  <c8y-breadcrumb-item\n    icon=\"c8y-management\"\n    label=\"{{ 'Management' | translate }}\"\n  ></c8y-breadcrumb-item>\n  <c8y-breadcrumb-item\n    icon=\"gears\"\n    label=\"{{ 'Configuration repository' | translate }}\"\n  ></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<c8y-action-bar-item [placement]=\"'right'\">\n  <button\n    class=\"btn btn-link\"\n    title=\"{{ 'Add configuration snapshot' | translate }}\"\n    type=\"button\"\n    (click)=\"add()\"\n  >\n    <i c8yIcon=\"plus-circle\"></i>\n    {{ 'Add configuration snapshot' | translate }}\n  </button>\n</c8y-action-bar-item>\n\n<c8y-help\n  src=\"/docs/device-management-application/managing-device-data/#managing-configurations\"\n></c8y-help>\n\n<div class=\"content-fullpage border-top border-bottom\">\n  <c8y-data-grid\n    [title]=\"'Configurations' | translate\"\n    [refresh]=\"refresh$\"\n    [pagination]=\"pagination\"\n    [columns]=\"columns\"\n    [actionControls]=\"actionControls\"\n    [infiniteScroll]=\"'auto'\"\n    [serverSideDataCallback]=\"serverSideDataCallback\"\n  >\n    <c8y-ui-empty-state\n      [icon]=\"stats?.size > 0 ? 'search' : 'gears'\"\n      [title]=\"stats?.size > 0 ? (noResultsMessage | translate) : (noDataMessage | translate)\"\n      [subtitle]=\"stats?.size > 0 ? (noResultsSubtitle | translate) : (noDataSubtitle | translate)\"\n      *emptyStateContext=\"let stats\"\n      [horizontal]=\"stats?.size > 0\"\n    >\n      @if (stats?.size === 0) {\n        <p>\n          <button\n            class=\"btn btn-primary\"\n            title=\"{{ 'Add configuration snapshot' | translate }}\"\n            type=\"button\"\n            (click)=\"add()\"\n          >\n            {{ 'Add configuration snapshot' | translate }}\n          </button>\n        </p>\n        <p c8y-guide-docs>\n          <small\n            translate\n            ngNonBindable\n          >\n            Find out more in the\n            <a\n              c8y-guide-href=\"/docs/device-management-application/managing-device-data/#managing-configurations\"\n            >\n              user documentation</a\n            >.\n          </small>\n        </p>\n      }\n    </c8y-ui-empty-state>\n  </c8y-data-grid>\n</div>\n","import { Injectable } from '@angular/core';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { NavigatorNode, NavigatorNodeFactory } from '@c8y/ngx-components';\n\n@Injectable()\nexport class ConfigurationRepositoryNavigationFactory implements NavigatorNodeFactory {\n  node: NavigatorNode;\n\n  constructor() {\n    this.node = new NavigatorNode({\n      label: gettext('Configuration repository'),\n      path: 'configuration',\n      icon: 'gears',\n      parent: gettext('Management'),\n      priority: 800\n    });\n  }\n\n  get(): NavigatorNode {\n    return this.node;\n  }\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\nimport { ConfigurationListComponent } from './configuration-list.component';\nimport { ConfigurationDetailComponent } from './configuration-detail.component';\nimport { hookNavigator, hookRoute } from '@c8y/ngx-components';\nimport { ConfigurationRepositoryNavigationFactory } from './configuration-repository-navigation-factory';\nimport { SharedRepositoryModule } from '@c8y/ngx-components/repository/shared';\n\n@NgModule({\n  imports: [SharedRepositoryModule, ConfigurationListComponent, ConfigurationDetailComponent]\n})\nexport class ConfigurationRepositoryListModule {\n  static forRoot(): ModuleWithProviders<ConfigurationRepositoryListModule> {\n    return {\n      ngModule: ConfigurationRepositoryListModule,\n      providers: [\n        hookNavigator(ConfigurationRepositoryNavigationFactory),\n        hookRoute({\n          path: 'configuration',\n          component: ConfigurationListComponent\n        })\n      ]\n    };\n  }\n}\n","import { NgModule } from '@angular/core';\nimport { CoreModule, FormsModule } from '@c8y/ngx-components';\nimport { ConfigurationRepositoryDeviceTabModule } from './device-tab/configuration-repository-device-tab.module';\nimport { ConfigurationRepositoryListModule } from './list/configuration-repository-list.module';\n\n@NgModule({\n  imports: [\n    CoreModule,\n    FormsModule,\n    ConfigurationRepositoryListModule.forRoot(),\n    ConfigurationRepositoryDeviceTabModule.forRoot()\n  ]\n})\nexport class ConfigurationRepositoryModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i4.DeviceConfigurationService","i5","i6","i1.DeviceConfigurationService","i1","i4","i3","i2.DeviceConfigurationService","i2","FormsModule","i1.ConfigurationRepositoryListModule","i2.ConfigurationRepositoryDeviceTabModule"],"mappings":"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"}