@c8y/ngx-components 1018.0.190 → 1018.0.192

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (26) hide show
  1. package/core/common/global-config.service.d.ts +26 -0
  2. package/core/common/index.d.ts +1 -0
  3. package/esm2020/core/common/global-config.service.mjs +51 -0
  4. package/esm2020/core/common/index.mjs +2 -1
  5. package/esm2020/repository/configuration/device-tab/save-to-repository.component.mjs +4 -4
  6. package/esm2020/repository/configuration/list/configuration-detail.component.mjs +5 -5
  7. package/esm2020/repository/shared/repository.model.mjs +1 -1
  8. package/esm2020/repository/shared/repository.service.mjs +80 -85
  9. package/fesm2015/c8y-ngx-components-repository-configuration.mjs +2 -2
  10. package/fesm2015/c8y-ngx-components-repository-configuration.mjs.map +1 -1
  11. package/fesm2015/c8y-ngx-components-repository-shared.mjs +94 -98
  12. package/fesm2015/c8y-ngx-components-repository-shared.mjs.map +1 -1
  13. package/fesm2015/c8y-ngx-components.mjs +51 -1
  14. package/fesm2015/c8y-ngx-components.mjs.map +1 -1
  15. package/fesm2020/c8y-ngx-components-repository-configuration.mjs +2 -2
  16. package/fesm2020/c8y-ngx-components-repository-configuration.mjs.map +1 -1
  17. package/fesm2020/c8y-ngx-components-repository-shared.mjs +76 -81
  18. package/fesm2020/c8y-ngx-components-repository-shared.mjs.map +1 -1
  19. package/fesm2020/c8y-ngx-components.mjs +48 -1
  20. package/fesm2020/c8y-ngx-components.mjs.map +1 -1
  21. package/package.json +1 -1
  22. package/repository/configuration/device-tab/save-to-repository.component.d.ts +2 -2
  23. package/repository/configuration/list/configuration-detail.component.d.ts +3 -4
  24. package/repository/shared/repository.model.d.ts +2 -0
  25. package/repository/shared/repository.service.d.ts +11 -15
  26. package/repository/shared/select-modal/repository-select-modal.component.d.ts +4 -1
@@ -234,7 +234,7 @@ class SaveToRepositoryComponent {
234
234
  file: new File([this.configSnapshot.binary], this.configSnapshot.name)
235
235
  }
236
236
  };
237
- yield this.repositoryService.save(configSnapshotData, RepositoryType.CONFIGURATION);
237
+ yield this.repositoryService.create(configSnapshotData, RepositoryType.CONFIGURATION);
238
238
  this.alertService.success(gettext('Configuration saved.'));
239
239
  this._save();
240
240
  }
@@ -715,7 +715,7 @@ class ConfigurationDetailComponent {
715
715
  if (this.existingBinary === this.binary.file) {
716
716
  binary.file = undefined;
717
717
  }
718
- yield this.repositoryService.save({ selected, version, description, binary, deviceType }, RepositoryType.CONFIGURATION, this.mo);
718
+ yield this.repositoryService.create({ selected, version, description, binary, deviceType }, RepositoryType.CONFIGURATION, this.mo);
719
719
  this.alert.success(this.mo.id ? gettext('Configuration updated.') : gettext('Configuration created.'));
720
720
  this.bsModalRef.hide();
721
721
  this._save();
@@ -1 +1 @@
1
- {"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, InventoryService, IOperation, OperationStatus } from '@c8y/client';\nimport { AlertService, gettext } from '@c8y/ngx-components';\nimport {\n DeviceConfigurationOperation,\n RepositoryService\n} from '@c8y/ngx-components/repository/shared';\nimport { DeviceConfigurationService } from './device-configuration.service';\n\n@Component({\n selector: 'c8y-text-based-configuration',\n templateUrl: './text-based-configuration.component.html'\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 this.latestOperation = operationUpdate;\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 title=\"{{ 'Get configuration from device' | translate }}\"\n type=\"button\"\n class=\"btn btn-default btn-sm a-s-center m-t-8 m-b-8\"\n *ngIf=\"showTextBasedConfigReload\"\n (click)=\"reloadConfiguration()\"\n [disabled]=\"reloadingConfig || savingConfig\"\n >\n <i\n c8yIcon=\"refresh\"\n *ngIf=\"reloadingConfig\"\n class=\"m-r-4\"\n [ngClass]=\"{ 'icon-spin': reloadingConfig }\"\n ></i>\n <i c8yIcon=\"download\" *ngIf=\"!reloadingConfig\" class=\"m-r-4\"></i>\n\n {{ 'Get configuration from device' | translate }}\n </button>\n </div>\n <c8y-operation-details\n *ngIf=\"latestOperation !== undefined\"\n [operation]=\"latestOperation\"\n class=\"flex-grow\"\n ></c8y-operation-details>\n </div>\n </fieldset>\n <div class=\"flex-grow\">\n <textarea\n [attr.aria-label]=\"'Operations' | translate\"\n [(ngModel)]=\"config\"\n class=\"form-control fit-h p-r-16 p-l-16\"\n [disabled]=\"reloadingConfig || savingConfig\"\n c8y-spellcheck=\"false\"\n ></textarea>\n </div>\n <div class=\"card-footer fit-w separator\" *ngIf=\"showTextBasedConfigSave\">\n <button\n type=\"button\"\n id=\"send-config-btn\"\n (click)=\"updateConfiguration(config)\"\n [disabled]=\"reloadingConfig || savingConfig || !config\"\n class=\"btn btn-primary\"\n [ngClass]=\"{ 'btn-pending': savingConfig }\"\n >\n <span title=\"{{ 'Send' | translate }}\" *ngIf=\"!savingConfig\">\n {{ 'Send configuration to device' | translate }}\n </span>\n <span title=\"{{ 'Sending…' | translate }}\" *ngIf=\"savingConfig\">\n {{ 'Sending…' | translate }}\n </span>\n </button>\n </div>\n</div>\n","import { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot, CanActivate } 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 implements CanActivate {\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({\n name: 'configurationFilterPipe'\n})\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 { BsModalRef } from 'ngx-bootstrap/modal';\nimport {\n ConfigurationSnapshot,\n RepositoryType,\n RepositoryService\n} from '@c8y/ngx-components/repository/shared';\nimport { AlertService, gettext } from '@c8y/ngx-components';\n\n@Component({\n selector: 'c8y-save-config-to-configuration-repository',\n templateUrl: 'save-to-repository.component.html'\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.save(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 ConfigurationSnapshot,\n DeviceConfigurationOperation,\n RepositoryService\n} from '@c8y/ngx-components/repository/shared';\nimport {\n IManagedObject,\n IOperation,\n OperationService,\n OperationStatus,\n UserService\n} from '@c8y/client';\nimport { DeviceConfigurationService } from './device-configuration.service';\nimport { Subscription } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { saveAs } from 'file-saver';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { SaveToRepositoryComponent } from './save-to-repository.component';\nimport { cloneDeep } from 'lodash-es';\nimport { AlertService, AppStateService, OperationRealtimeService } from '@c8y/ngx-components';\n\n@Component({\n selector: 'c8y-device-configuration-preview',\n templateUrl: './configuration-preview.component.html'\n})\nexport class ConfigurationPreviewComponent implements OnInit, OnDestroy {\n @Input() device: IManagedObject;\n @Input() set configurationType(type: string) {\n this._configurationType = type;\n this.setOperation(type);\n }\n get configurationType(): string {\n return this._configurationType;\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, OperationStatus.FAILED].includes(\n this.operation.status\n )\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 this.user.hasAnyRole(this.appState.currentUser.value, [\n 'ROLE_INVENTORY_ADMIN',\n 'ROLE_INVENTORY_CREATE'\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';\n\n@Component({\n selector: 'c8y-device-configuration-list',\n templateUrl: './device-configuration-list.component.html'\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';\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';\n\n@Component({\n selector: 'c8y-device-configuration',\n templateUrl: './device-configuration.component.html'\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 { CommonModule } from '@angular/common';\nimport { CoreModule, ViewContext, gettext, hookRoute } from '@c8y/ngx-components';\nimport { SharedRepositoryModule } from '@c8y/ngx-components/repository/shared';\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';\n\nimport { OperationDetailsModule } from '@c8y/ngx-components/operations/operation-details';\n\n@NgModule({\n imports: [\n CommonModule,\n CoreModule,\n SharedRepositoryModule,\n OperationDetailsModule,\n TabsModule.forRoot()\n ],\n declarations: [\n DeviceConfigurationComponent,\n DeviceConfigurationListComponent,\n ConfigurationPreviewComponent,\n ConfigurationFilterPipe,\n SaveToRepositoryComponent,\n SourceCodePreviewComponent,\n TextBasedConfigurationComponent\n ],\n entryComponents: [\n DeviceConfigurationComponent,\n SaveToRepositoryComponent,\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 { IManagedObject } from '@c8y/client';\nimport { AlertService, gettext } from '@c8y/ngx-components';\nimport { uniqBy, isUndefined } from 'lodash-es';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { pipe } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport {\n ModalModel,\n RepositoryType,\n RepositoryService\n} from '@c8y/ngx-components/repository/shared';\nimport { PickedFiles } from '@c8y/ngx-components';\nimport { NgForm } from '@angular/forms';\n\n@Component({\n selector: 'c8y-configuration-detail',\n templateUrl: './configuration-detail.component.html'\n})\nexport class ConfigurationDetailComponent implements ModalModel {\n @ViewChild('configurationForm', { static: true }) configurationForm: NgForm;\n selected: { id?: string; name?: string; [key: string]: any };\n version: string;\n description: string;\n binary: { file?: File; url?: string } = {\n file: undefined,\n url: undefined\n };\n deviceType: string;\n\n pattern = '';\n filterPipe;\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\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.selected) {\n this.uploadChoice = this.binary.file ? 'uploadBinary' : 'uploadUrl';\n this.existingBinary = this.binary.file;\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: any) =>\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 { selected, version, description, binary, deviceType } = this;\n if (this.existingBinary === this.binary.file) {\n binary.file = undefined;\n }\n await this.repositoryService.save(\n { selected, version, description, binary, deviceType },\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 class=\"modal-header dialog-header\" id=\"configurationModalTitle\">\n <i [c8yIcon]=\"'cogs'\"></i>\n <h4 id=\"modal-title\" translate *ngIf=\"mo.id\">Update configuration</h4>\n <h4 id=\"modal-title\" translate *ngIf=\"!mo.id\">Add configuration</h4>\n </div>\n\n <form\n class=\"d-contents\"\n #configurationForm=\"ngForm\"\n (ngSubmit)=\"configurationForm.form.valid && save()\"\n >\n <div class=\"modal-inner-scroll\" id=\"modal-body\">\n <div class=\"modal-body\" id=\"configurationModalDescription\">\n <c8y-form-group>\n <label translate>Name</label>\n <input\n type=\"text\"\n class=\"form-control\"\n placeholder=\"{{ 'e.g.' | translate }} hosts\"\n autocomplete=\"off\"\n required\n maxlength=\"254\"\n [(ngModel)]=\"version\"\n name=\"version\"\n />\n </c8y-form-group>\n\n <c8y-form-group>\n <label translate>Device type</label>\n <input\n type=\"text\"\n class=\"form-control\"\n placeholder=\"{{ 'e.g.' | translate }} c8y_Linux\"\n maxlength=\"254\"\n autocomplete=\"off\"\n [(ngModel)]=\"deviceType\"\n name=\"deviceType\"\n />\n </c8y-form-group>\n\n <c8y-form-group>\n <label translate>Description</label>\n <input\n type=\"text\"\n class=\"form-control\"\n placeholder=\"{{ 'e.g. Host configuration' | translate }} c8y_Linux\"\n maxlength=\"254\"\n autocomplete=\"off\"\n [(ngModel)]=\"description\"\n name=\"description\"\n />\n </c8y-form-group>\n\n <c8y-form-group>\n <label translate>Configuration type</label>\n <c8y-typeahead\n [(ngModel)]=\"selected\"\n name=\"confType\"\n placeholder=\"{{ 'e.g.' | translate }} ssh\"\n maxlength=\"254\"\n (onSearch)=\"setPipe($event)\"\n displayProperty=\"configurationType\"\n >\n <c8y-li\n *c8yFor=\"let config of configs; pipe: filterPipe; notFound: notFoundTemplate\"\n class=\"p-l-8 p-r-8 c8y-list__item--link\"\n (click)=\"selected = config; setPipe('')\"\n [active]=\"selected === 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 class=\"bg-level-2 p-8\" *ngIf=\"pattern.length > 0\">\n <span translate>No match found.</span>\n <button\n title=\"{{ 'Add new`configuration type`' | translate }}\"\n type=\"button\"\n class=\"btn btn-primary btn-xs m-l-8\"\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 class=\"legend form-block m-t-40\" translate>Configuration file</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 >\n </c8y-file-picker>\n </c8y-form-group>\n </div>\n </div>\n\n <div class=\"modal-footer\">\n <button\n (click)=\"cancel()\"\n type=\"button\"\n class=\"btn btn-default\"\n title=\"{{ 'Cancel' | translate }}\"\n [disabled]=\"saving\"\n >\n <span translate>Cancel</span>\n </button>\n <button\n class=\"btn btn-primary\"\n type=\"submit\"\n title=\"{{ submitButtonTitle | translate }}\"\n [ngClass]=\"{ 'btn-pending': saving }\"\n [disabled]=\"\n !configurationForm.valid ||\n configurationForm.pristine ||\n (!binary?.url && !binary?.file) ||\n saving\n \"\n >\n {{ submitButtonTitle | translate }}\n </button>\n </div>\n </form>\n</div>\n","import { Component, OnInit, Pipe, ViewChild } from '@angular/core';\nimport { IManagedObject, InventoryBinaryService, InventoryService, IResultList } from '@c8y/client';\nimport {\n AlertService,\n FilterInputComponent,\n gettext,\n memoize,\n ModalService,\n Status\n} from '@c8y/ngx-components';\nimport { TranslateService } from '@ngx-translate/core';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { Observable, of, pipe } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { RepositoryService, RepositoryType } from '@c8y/ngx-components/repository/shared';\nimport { ConfigurationDetailComponent } from './configuration-detail.component';\nimport { property } from 'lodash-es';\nimport { saveAs } from 'file-saver';\n\n@Component({\n selector: 'c8y-configuration-list',\n templateUrl: './configuration-list.component.html'\n})\nexport class ConfigurationListComponent implements OnInit {\n @ViewChild(FilterInputComponent, { static: false }) filter: FilterInputComponent;\n configurations$: Observable<IResultList<IManagedObject>>;\n filterPipe: Pipe;\n filterTerm = '';\n reloading = false;\n data;\n private readonly DELETED_SUCCESS_MSG = gettext('Configuration deleted.');\n\n constructor(\n private alert: AlertService,\n private repositoryService: RepositoryService,\n private bsModalService: BsModalService,\n private modalService: ModalService,\n private translateService: TranslateService,\n private inventoryBinaryService: InventoryBinaryService,\n private inventoryService: InventoryService\n ) {}\n\n ngOnInit() {\n this.loadConfigurations();\n }\n\n async loadConfigurations() {\n this.reloading = true;\n this.configurations$ = of(\n await this.repositoryService.listRepositoryEntries(RepositoryType.CONFIGURATION)\n );\n this.reloading = false;\n this.reset();\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 }).content as ConfigurationDetailComponent\n ).result;\n await this.loadConfigurations();\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\n initialState: {\n selected: configuration,\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 await this.loadConfigurations();\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 @memoize(property('id'))\n getBinaryName(configuration: IManagedObject) {\n return this.repositoryService.getBinaryName$(configuration.url);\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 await this.loadConfigurations();\n } catch (ex) {\n if (ex) {\n this.alert.addServerFailure(ex);\n }\n }\n }\n\n setPipe(filterTerm: string) {\n this.filterTerm = filterTerm;\n this.filterPipe = pipe(\n map((data: []) => {\n this.data =\n filterTerm.trim().length === 0\n ? data\n : data.filter(\n (mo: IManagedObject) =>\n this.filterContainString(mo.name, filterTerm) ||\n this.filterContainString(mo.configurationType, filterTerm) ||\n this.filterContainString(mo.deviceType, filterTerm) ||\n this.filterContainString(mo.description, filterTerm)\n );\n\n return this.data;\n })\n );\n }\n\n shouldShowEmptyState() {\n return !(this.data && this.data.length > 0);\n }\n\n reset() {\n this.filter.filterTerm = '';\n this.setPipe('');\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","<c8y-title>\n <span class=\"m-r-4\" translate>Configuration repository</span>\n <small *ngIf=\"(configurations$ | async)?.paging.totalPages === 1 && !filterTerm\">\n {{ (configurations$ | async).data.length }}\n <span translate>snapshots</span>\n </small>\n <small\n *ngIf=\"(configurations$ | async)?.paging.totalPages > 1 && !filterTerm\"\n [tooltip]=\"'More data available. Scroll to the bottom of the list to load it.' | translate\"\n container=\"body\"\n >\n {{ (configurations$ | async).paging.pageSize }}+\n <span translate>snapshots</span>\n </small>\n</c8y-title>\n\n<c8y-breadcrumb>\n <c8y-breadcrumb-item\n label=\"{{ 'Management' | translate }}\"\n icon=\"c8y-management\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n label=\"{{ 'Configuration repository' | translate }}\"\n icon=\"gears\"\n ></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<c8y-action-bar-item itemClass=\"navbar-form\">\n <c8y-filter [icon]=\"'search'\" (onSearch)=\"setPipe($event)\"></c8y-filter>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item [placement]=\"'right'\">\n <button\n class=\"btn btn-link\"\n type=\"button\"\n title=\"{{ 'Add configuration snapshot' | translate }}\"\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-action-bar-item [placement]=\"'right'\">\n <button\n class=\"btn btn-link\"\n type=\"button\"\n title=\"{{ 'Reload' | translate }}\"\n (click)=\"loadConfigurations()\"\n >\n <i [ngClass]=\"{ 'icon-spin': reloading }\" c8yIcon=\"refresh\"></i>\n {{ 'Reload' | translate }}\n </button>\n</c8y-action-bar-item>\n\n<c8y-help src=\"/users-guide/device-management/#configuration-repository\"></c8y-help>\n\n<!-- empty state -->\n<c8y-ui-empty-state\n *ngIf=\"!filterTerm && (configurations$ | async)?.data.length === 0\"\n [icon]=\"'gears'\"\n [title]=\"'There are no configuration snapshots defined.' | translate\"\n [subtitle]=\"'Add a configuration snapshot first.' | translate\"\n>\n <div>\n <button\n class=\"btn btn-primary\"\n type=\"button\"\n title=\"{{ 'Add configuration snapshot' | translate }}\"\n (click)=\"add()\"\n >\n {{ 'Add configuration snapshot' | translate }}\n </button>\n </div>\n <p c8y-guide-docs>\n <small translate ngNonBindable>\n Find out more in the\n <a c8y-guide-href=\"users-guide/device-management/#configuration-repository\">\n User guide`KEEP_ORIGINAL`\n </a>\n .\n </small>\n </p>\n</c8y-ui-empty-state>\n\n<!-- no results empty state -->\n<c8y-ui-empty-state\n *ngIf=\"shouldShowEmptyState() && (configurations$ | async)?.data.length > 0\"\n [icon]=\"'search'\"\n [title]=\"'No results to display.' | translate\"\n [subtitle]=\"'Refine your search terms or check your spelling.' | translate\"\n></c8y-ui-empty-state>\n\n<c8y-list-group\n class=\"m-b-24\"\n *ngIf=\"(configurations$ | async)?.data.length > 0\"\n [ngClass]=\"{\n 'dd-low': data && data.length ? data.length < 10 : (configurations$ | async)?.data.length < 10\n }\"\n>\n <c8y-li\n [emptyActions]=\"true\"\n class=\"page-sticky-header hidden-xs\"\n *ngIf=\"!shouldShowEmptyState()\"\n >\n <c8y-li-icon>\n <i class=\"p-l-24\"></i>\n </c8y-li-icon>\n <c8y-li-body class=\"content-flex-60\">\n <div class=\"col-2\">\n {{ 'Configuration' | translate }}\n </div>\n <div class=\"col-3\">\n {{ 'Description' | translate }}\n </div>\n <div class=\"col-3\">\n {{ 'File' | translate }}\n </div>\n <div class=\"col-2\">\n {{ 'Device type' | translate }}\n </div>\n <div class=\"col-2\">\n {{ 'Configuration type' | translate }}\n </div>\n </c8y-li-body>\n </c8y-li>\n\n <c8y-li *c8yFor=\"let configuration of configurations$; pipe: filterPipe\">\n <c8y-li-icon icon=\"gears\"></c8y-li-icon>\n <div class=\"content-flex-60\">\n <button\n class=\"btn-clean col-2\"\n type=\"button\"\n title=\"{{ configuration.name || '-' }}\"\n (click)=\"edit(configuration)\"\n >\n <span class=\"text-truncate\">\n <c8y-highlight\n [text]=\"configuration.name || '-'\"\n elementClass=\"text-info\"\n [pattern]=\"filterTerm\"\n ></c8y-highlight>\n </span>\n </button>\n <div class=\"col-3\">\n <div class=\"text-label-small visible-xs-inline m-r-4\">\n {{ 'Description' | translate }}\n </div>\n <small\n class=\"text-truncate\"\n *ngIf=\"configuration.description; else emptyDescription\"\n title=\"configuration.description\"\n >\n <c8y-highlight\n [text]=\"configuration.description || '-'\"\n elementClass=\"text-info\"\n [pattern]=\"filterTerm\"\n ></c8y-highlight>\n </small>\n </div>\n <div class=\"col-3\">\n <span class=\"text-truncate\">\n <span class=\"text-label-small m-r-4 visible-xs-inline\" translate>File</span>\n <small\n *ngIf=\"isBinaryFile(configuration); else noFile\"\n title=\"{{ getBinaryName(configuration) | async }}\"\n >\n {{ getBinaryName(configuration) | async }}\n </small>\n <ng-template #noFile>\n <small title=\"{{ configuration.url }}\">\n {{ configuration.url }}\n </small>\n </ng-template>\n </span>\n </div>\n <div class=\"col-2\">\n <div\n class=\"text-truncate\"\n title=\"{{ 'Device type' | translate }}: {{ configuration.deviceType || '-' }}\"\n >\n <span class=\"text-label-small visible-xs-inline m-r-4\" translate>Device type</span>\n <span *ngIf=\"configuration.deviceType; else emptyText\">\n <c8y-highlight\n [text]=\"configuration.deviceType || '-'\"\n elementClass=\"text-info\"\n [pattern]=\"filterTerm\"\n ></c8y-highlight>\n </span>\n </div>\n </div>\n <div class=\"col-2\">\n <div class=\"text-truncate\" title=\"{{ configuration.configurationType }}\">\n <span class=\"label label-primary\" *ngIf=\"configuration.configurationType; else emptyText\">\n <c8y-highlight\n [text]=\"configuration.configurationType\"\n elementClass=\"text-info\"\n [pattern]=\"filterTerm\"\n ></c8y-highlight>\n </span>\n </div>\n </div>\n </div>\n <c8y-li-action\n (click)=\"edit(configuration)\"\n icon=\"pencil\"\n label=\"{{ 'Edit' | translate }}\"\n ></c8y-li-action>\n <c8y-li-action\n (click)=\"delete(configuration)\"\n icon=\"delete\"\n label=\"{{ 'Delete' | translate }}\"\n ></c8y-li-action>\n <c8y-li-action\n *ngIf=\"isBinaryFile(configuration)\"\n (click)=\"download(configuration)\"\n icon=\"download\"\n label=\"{{ 'Download' | translate }}\"\n ></c8y-li-action>\n <ng-template #emptyText>\n <small class=\"text-muted\">\n <em>{{ 'Undefined' | translate }}</em>\n </small>\n </ng-template>\n <ng-template #emptyDescription>\n <small class=\"text-muted\">\n <em>{{ 'No description' | translate }}</em>\n </small>\n </ng-template>\n </c8y-li>\n</c8y-list-group>\n","import { Injectable } from '@angular/core';\nimport { gettext, 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 { CommonModule } from '@angular/common';\nimport { ConfigurationListComponent } from './configuration-list.component';\nimport { ConfigurationDetailComponent } from './configuration-detail.component';\nimport { CoreModule, hookNavigator, hookRoute } from '@c8y/ngx-components';\nimport { ConfigurationRepositoryNavigationFactory } from './configuration-repository-navigation-factory';\nimport { SharedRepositoryModule } from '@c8y/ngx-components/repository/shared';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\n\n@NgModule({\n imports: [CommonModule, CoreModule, SharedRepositoryModule, TooltipModule],\n declarations: [ConfigurationListComponent, ConfigurationDetailComponent],\n entryComponents: [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","i7","i1.DeviceConfigurationService","i1","i3","i4","i5","i8.SourceCodePreviewComponent","i3.ConfigurationFilterPipe","i2.DeviceConfigurationService","i6","i8.DeviceConfigurationListComponent","i9.ConfigurationPreviewComponent","i10.TextBasedConfigurationComponent","i2","i1.ConfigurationRepositoryListModule","i2.ConfigurationRepositoryDeviceTabModule"],"mappings":"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"}
1
+ {"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, InventoryService, IOperation, OperationStatus } from '@c8y/client';\nimport { AlertService, gettext } from '@c8y/ngx-components';\nimport {\n DeviceConfigurationOperation,\n RepositoryService\n} from '@c8y/ngx-components/repository/shared';\nimport { DeviceConfigurationService } from './device-configuration.service';\n\n@Component({\n selector: 'c8y-text-based-configuration',\n templateUrl: './text-based-configuration.component.html'\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 this.latestOperation = operationUpdate;\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 title=\"{{ 'Get configuration from device' | translate }}\"\n type=\"button\"\n class=\"btn btn-default btn-sm a-s-center m-t-8 m-b-8\"\n *ngIf=\"showTextBasedConfigReload\"\n (click)=\"reloadConfiguration()\"\n [disabled]=\"reloadingConfig || savingConfig\"\n >\n <i\n c8yIcon=\"refresh\"\n *ngIf=\"reloadingConfig\"\n class=\"m-r-4\"\n [ngClass]=\"{ 'icon-spin': reloadingConfig }\"\n ></i>\n <i c8yIcon=\"download\" *ngIf=\"!reloadingConfig\" class=\"m-r-4\"></i>\n\n {{ 'Get configuration from device' | translate }}\n </button>\n </div>\n <c8y-operation-details\n *ngIf=\"latestOperation !== undefined\"\n [operation]=\"latestOperation\"\n class=\"flex-grow\"\n ></c8y-operation-details>\n </div>\n </fieldset>\n <div class=\"flex-grow\">\n <textarea\n [attr.aria-label]=\"'Operations' | translate\"\n [(ngModel)]=\"config\"\n class=\"form-control fit-h p-r-16 p-l-16\"\n [disabled]=\"reloadingConfig || savingConfig\"\n c8y-spellcheck=\"false\"\n ></textarea>\n </div>\n <div class=\"card-footer fit-w separator\" *ngIf=\"showTextBasedConfigSave\">\n <button\n type=\"button\"\n id=\"send-config-btn\"\n (click)=\"updateConfiguration(config)\"\n [disabled]=\"reloadingConfig || savingConfig || !config\"\n class=\"btn btn-primary\"\n [ngClass]=\"{ 'btn-pending': savingConfig }\"\n >\n <span title=\"{{ 'Send' | translate }}\" *ngIf=\"!savingConfig\">\n {{ 'Send configuration to device' | translate }}\n </span>\n <span title=\"{{ 'Sending…' | translate }}\" *ngIf=\"savingConfig\">\n {{ 'Sending…' | translate }}\n </span>\n </button>\n </div>\n</div>\n","import { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot, CanActivate } 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 implements CanActivate {\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({\n name: 'configurationFilterPipe'\n})\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 { AlertService, gettext } from '@c8y/ngx-components';\nimport {\n ConfigurationSnapshot,\n RepositoryService,\n RepositoryType\n} from '@c8y/ngx-components/repository/shared';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\n\n@Component({\n selector: 'c8y-save-config-to-configuration-repository',\n templateUrl: 'save-to-repository.component.html'\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 ConfigurationSnapshot,\n DeviceConfigurationOperation,\n RepositoryService\n} from '@c8y/ngx-components/repository/shared';\nimport {\n IManagedObject,\n IOperation,\n OperationService,\n OperationStatus,\n UserService\n} from '@c8y/client';\nimport { DeviceConfigurationService } from './device-configuration.service';\nimport { Subscription } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { saveAs } from 'file-saver';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { SaveToRepositoryComponent } from './save-to-repository.component';\nimport { cloneDeep } from 'lodash-es';\nimport { AlertService, AppStateService, OperationRealtimeService } from '@c8y/ngx-components';\n\n@Component({\n selector: 'c8y-device-configuration-preview',\n templateUrl: './configuration-preview.component.html'\n})\nexport class ConfigurationPreviewComponent implements OnInit, OnDestroy {\n @Input() device: IManagedObject;\n @Input() set configurationType(type: string) {\n this._configurationType = type;\n this.setOperation(type);\n }\n get configurationType(): string {\n return this._configurationType;\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, OperationStatus.FAILED].includes(\n this.operation.status\n )\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 this.user.hasAnyRole(this.appState.currentUser.value, [\n 'ROLE_INVENTORY_ADMIN',\n 'ROLE_INVENTORY_CREATE'\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';\n\n@Component({\n selector: 'c8y-device-configuration-list',\n templateUrl: './device-configuration-list.component.html'\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';\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';\n\n@Component({\n selector: 'c8y-device-configuration',\n templateUrl: './device-configuration.component.html'\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 { CommonModule } from '@angular/common';\nimport { CoreModule, ViewContext, gettext, hookRoute } from '@c8y/ngx-components';\nimport { SharedRepositoryModule } from '@c8y/ngx-components/repository/shared';\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';\n\nimport { OperationDetailsModule } from '@c8y/ngx-components/operations/operation-details';\n\n@NgModule({\n imports: [\n CommonModule,\n CoreModule,\n SharedRepositoryModule,\n OperationDetailsModule,\n TabsModule.forRoot()\n ],\n declarations: [\n DeviceConfigurationComponent,\n DeviceConfigurationListComponent,\n ConfigurationPreviewComponent,\n ConfigurationFilterPipe,\n SaveToRepositoryComponent,\n SourceCodePreviewComponent,\n TextBasedConfigurationComponent\n ],\n entryComponents: [\n DeviceConfigurationComponent,\n SaveToRepositoryComponent,\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 } from '@angular/forms';\nimport { IManagedObject } from '@c8y/client';\nimport { AlertService, PickedFiles, gettext } 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';\n\n@Component({\n selector: 'c8y-configuration-detail',\n templateUrl: './configuration-detail.component.html'\n})\nexport class ConfigurationDetailComponent implements ModalModel {\n @ViewChild('configurationForm', { static: true }) configurationForm: NgForm;\n selected: { id?: string; name?: string; [key: string]: any };\n version: string;\n description: string;\n binary: { file?: File; url?: string } = {\n file: undefined,\n url: undefined\n };\n deviceType: string;\n\n pattern = '';\n filterPipe;\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\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.selected) {\n this.uploadChoice = this.binary.file ? 'uploadBinary' : 'uploadUrl';\n this.existingBinary = this.binary.file;\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: any) =>\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 { selected, version, description, binary, deviceType } = this;\n if (this.existingBinary === this.binary.file) {\n binary.file = undefined;\n }\n await this.repositoryService.create(\n { selected, version, description, binary, deviceType },\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 class=\"modal-header dialog-header\" id=\"configurationModalTitle\">\n <i [c8yIcon]=\"'cogs'\"></i>\n <h4 id=\"modal-title\" translate *ngIf=\"mo.id\">Update configuration</h4>\n <h4 id=\"modal-title\" translate *ngIf=\"!mo.id\">Add configuration</h4>\n </div>\n\n <form\n class=\"d-contents\"\n #configurationForm=\"ngForm\"\n (ngSubmit)=\"configurationForm.form.valid && save()\"\n >\n <div class=\"modal-inner-scroll\" id=\"modal-body\">\n <div class=\"modal-body\" id=\"configurationModalDescription\">\n <c8y-form-group>\n <label translate>Name</label>\n <input\n type=\"text\"\n class=\"form-control\"\n placeholder=\"{{ 'e.g.' | translate }} hosts\"\n autocomplete=\"off\"\n required\n maxlength=\"254\"\n [(ngModel)]=\"version\"\n name=\"version\"\n />\n </c8y-form-group>\n\n <c8y-form-group>\n <label translate>Device type</label>\n <input\n type=\"text\"\n class=\"form-control\"\n placeholder=\"{{ 'e.g.' | translate }} c8y_Linux\"\n maxlength=\"254\"\n autocomplete=\"off\"\n [(ngModel)]=\"deviceType\"\n name=\"deviceType\"\n />\n </c8y-form-group>\n\n <c8y-form-group>\n <label translate>Description</label>\n <input\n type=\"text\"\n class=\"form-control\"\n placeholder=\"{{ 'e.g. Host configuration' | translate }} c8y_Linux\"\n maxlength=\"254\"\n autocomplete=\"off\"\n [(ngModel)]=\"description\"\n name=\"description\"\n />\n </c8y-form-group>\n\n <c8y-form-group>\n <label translate>Configuration type</label>\n <c8y-typeahead\n [(ngModel)]=\"selected\"\n name=\"confType\"\n placeholder=\"{{ 'e.g.' | translate }} ssh\"\n maxlength=\"254\"\n (onSearch)=\"setPipe($event)\"\n displayProperty=\"configurationType\"\n >\n <c8y-li\n *c8yFor=\"let config of configs; pipe: filterPipe; notFound: notFoundTemplate\"\n class=\"p-l-8 p-r-8 c8y-list__item--link\"\n (click)=\"selected = config; setPipe('')\"\n [active]=\"selected === 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 class=\"bg-level-2 p-8\" *ngIf=\"pattern.length > 0\">\n <span translate>No match found.</span>\n <button\n title=\"{{ 'Add new`configuration type`' | translate }}\"\n type=\"button\"\n class=\"btn btn-primary btn-xs m-l-8\"\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 class=\"legend form-block m-t-40\" translate>Configuration file</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 >\n </c8y-file-picker>\n </c8y-form-group>\n </div>\n </div>\n\n <div class=\"modal-footer\">\n <button\n (click)=\"cancel()\"\n type=\"button\"\n class=\"btn btn-default\"\n title=\"{{ 'Cancel' | translate }}\"\n [disabled]=\"saving\"\n >\n <span translate>Cancel</span>\n </button>\n <button\n class=\"btn btn-primary\"\n type=\"submit\"\n title=\"{{ submitButtonTitle | translate }}\"\n [ngClass]=\"{ 'btn-pending': saving }\"\n [disabled]=\"\n !configurationForm.valid ||\n configurationForm.pristine ||\n (!binary?.url && !binary?.file) ||\n saving\n \"\n >\n {{ submitButtonTitle | translate }}\n </button>\n </div>\n </form>\n</div>\n","import { Component, OnInit, Pipe, ViewChild } from '@angular/core';\nimport { IManagedObject, InventoryBinaryService, InventoryService, IResultList } from '@c8y/client';\nimport {\n AlertService,\n FilterInputComponent,\n gettext,\n memoize,\n ModalService,\n Status\n} from '@c8y/ngx-components';\nimport { TranslateService } from '@ngx-translate/core';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { Observable, of, pipe } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { RepositoryService, RepositoryType } from '@c8y/ngx-components/repository/shared';\nimport { ConfigurationDetailComponent } from './configuration-detail.component';\nimport { property } from 'lodash-es';\nimport { saveAs } from 'file-saver';\n\n@Component({\n selector: 'c8y-configuration-list',\n templateUrl: './configuration-list.component.html'\n})\nexport class ConfigurationListComponent implements OnInit {\n @ViewChild(FilterInputComponent, { static: false }) filter: FilterInputComponent;\n configurations$: Observable<IResultList<IManagedObject>>;\n filterPipe: Pipe;\n filterTerm = '';\n reloading = false;\n data;\n private readonly DELETED_SUCCESS_MSG = gettext('Configuration deleted.');\n\n constructor(\n private alert: AlertService,\n private repositoryService: RepositoryService,\n private bsModalService: BsModalService,\n private modalService: ModalService,\n private translateService: TranslateService,\n private inventoryBinaryService: InventoryBinaryService,\n private inventoryService: InventoryService\n ) {}\n\n ngOnInit() {\n this.loadConfigurations();\n }\n\n async loadConfigurations() {\n this.reloading = true;\n this.configurations$ = of(\n await this.repositoryService.listRepositoryEntries(RepositoryType.CONFIGURATION)\n );\n this.reloading = false;\n this.reset();\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 }).content as ConfigurationDetailComponent\n ).result;\n await this.loadConfigurations();\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\n initialState: {\n selected: configuration,\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 await this.loadConfigurations();\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 @memoize(property('id'))\n getBinaryName(configuration: IManagedObject) {\n return this.repositoryService.getBinaryName$(configuration.url);\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 await this.loadConfigurations();\n } catch (ex) {\n if (ex) {\n this.alert.addServerFailure(ex);\n }\n }\n }\n\n setPipe(filterTerm: string) {\n this.filterTerm = filterTerm;\n this.filterPipe = pipe(\n map((data: []) => {\n this.data =\n filterTerm.trim().length === 0\n ? data\n : data.filter(\n (mo: IManagedObject) =>\n this.filterContainString(mo.name, filterTerm) ||\n this.filterContainString(mo.configurationType, filterTerm) ||\n this.filterContainString(mo.deviceType, filterTerm) ||\n this.filterContainString(mo.description, filterTerm)\n );\n\n return this.data;\n })\n );\n }\n\n shouldShowEmptyState() {\n return !(this.data && this.data.length > 0);\n }\n\n reset() {\n this.filter.filterTerm = '';\n this.setPipe('');\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","<c8y-title>\n <span class=\"m-r-4\" translate>Configuration repository</span>\n <small *ngIf=\"(configurations$ | async)?.paging.totalPages === 1 && !filterTerm\">\n {{ (configurations$ | async).data.length }}\n <span translate>snapshots</span>\n </small>\n <small\n *ngIf=\"(configurations$ | async)?.paging.totalPages > 1 && !filterTerm\"\n [tooltip]=\"'More data available. Scroll to the bottom of the list to load it.' | translate\"\n container=\"body\"\n >\n {{ (configurations$ | async).paging.pageSize }}+\n <span translate>snapshots</span>\n </small>\n</c8y-title>\n\n<c8y-breadcrumb>\n <c8y-breadcrumb-item\n label=\"{{ 'Management' | translate }}\"\n icon=\"c8y-management\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n label=\"{{ 'Configuration repository' | translate }}\"\n icon=\"gears\"\n ></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<c8y-action-bar-item itemClass=\"navbar-form\">\n <c8y-filter [icon]=\"'search'\" (onSearch)=\"setPipe($event)\"></c8y-filter>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item [placement]=\"'right'\">\n <button\n class=\"btn btn-link\"\n type=\"button\"\n title=\"{{ 'Add configuration snapshot' | translate }}\"\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-action-bar-item [placement]=\"'right'\">\n <button\n class=\"btn btn-link\"\n type=\"button\"\n title=\"{{ 'Reload' | translate }}\"\n (click)=\"loadConfigurations()\"\n >\n <i [ngClass]=\"{ 'icon-spin': reloading }\" c8yIcon=\"refresh\"></i>\n {{ 'Reload' | translate }}\n </button>\n</c8y-action-bar-item>\n\n<c8y-help src=\"/users-guide/device-management/#configuration-repository\"></c8y-help>\n\n<!-- empty state -->\n<c8y-ui-empty-state\n *ngIf=\"!filterTerm && (configurations$ | async)?.data.length === 0\"\n [icon]=\"'gears'\"\n [title]=\"'There are no configuration snapshots defined.' | translate\"\n [subtitle]=\"'Add a configuration snapshot first.' | translate\"\n>\n <div>\n <button\n class=\"btn btn-primary\"\n type=\"button\"\n title=\"{{ 'Add configuration snapshot' | translate }}\"\n (click)=\"add()\"\n >\n {{ 'Add configuration snapshot' | translate }}\n </button>\n </div>\n <p c8y-guide-docs>\n <small translate ngNonBindable>\n Find out more in the\n <a c8y-guide-href=\"users-guide/device-management/#configuration-repository\">\n User guide`KEEP_ORIGINAL`\n </a>\n .\n </small>\n </p>\n</c8y-ui-empty-state>\n\n<!-- no results empty state -->\n<c8y-ui-empty-state\n *ngIf=\"shouldShowEmptyState() && (configurations$ | async)?.data.length > 0\"\n [icon]=\"'search'\"\n [title]=\"'No results to display.' | translate\"\n [subtitle]=\"'Refine your search terms or check your spelling.' | translate\"\n></c8y-ui-empty-state>\n\n<c8y-list-group\n class=\"m-b-24\"\n *ngIf=\"(configurations$ | async)?.data.length > 0\"\n [ngClass]=\"{\n 'dd-low': data && data.length ? data.length < 10 : (configurations$ | async)?.data.length < 10\n }\"\n>\n <c8y-li\n [emptyActions]=\"true\"\n class=\"page-sticky-header hidden-xs\"\n *ngIf=\"!shouldShowEmptyState()\"\n >\n <c8y-li-icon>\n <i class=\"p-l-24\"></i>\n </c8y-li-icon>\n <c8y-li-body class=\"content-flex-60\">\n <div class=\"col-2\">\n {{ 'Configuration' | translate }}\n </div>\n <div class=\"col-3\">\n {{ 'Description' | translate }}\n </div>\n <div class=\"col-3\">\n {{ 'File' | translate }}\n </div>\n <div class=\"col-2\">\n {{ 'Device type' | translate }}\n </div>\n <div class=\"col-2\">\n {{ 'Configuration type' | translate }}\n </div>\n </c8y-li-body>\n </c8y-li>\n\n <c8y-li *c8yFor=\"let configuration of configurations$; pipe: filterPipe\">\n <c8y-li-icon icon=\"gears\"></c8y-li-icon>\n <div class=\"content-flex-60\">\n <button\n class=\"btn-clean col-2\"\n type=\"button\"\n title=\"{{ configuration.name || '-' }}\"\n (click)=\"edit(configuration)\"\n >\n <span class=\"text-truncate\">\n <c8y-highlight\n [text]=\"configuration.name || '-'\"\n elementClass=\"text-info\"\n [pattern]=\"filterTerm\"\n ></c8y-highlight>\n </span>\n </button>\n <div class=\"col-3\">\n <div class=\"text-label-small visible-xs-inline m-r-4\">\n {{ 'Description' | translate }}\n </div>\n <small\n class=\"text-truncate\"\n *ngIf=\"configuration.description; else emptyDescription\"\n title=\"configuration.description\"\n >\n <c8y-highlight\n [text]=\"configuration.description || '-'\"\n elementClass=\"text-info\"\n [pattern]=\"filterTerm\"\n ></c8y-highlight>\n </small>\n </div>\n <div class=\"col-3\">\n <span class=\"text-truncate\">\n <span class=\"text-label-small m-r-4 visible-xs-inline\" translate>File</span>\n <small\n *ngIf=\"isBinaryFile(configuration); else noFile\"\n title=\"{{ getBinaryName(configuration) | async }}\"\n >\n {{ getBinaryName(configuration) | async }}\n </small>\n <ng-template #noFile>\n <small title=\"{{ configuration.url }}\">\n {{ configuration.url }}\n </small>\n </ng-template>\n </span>\n </div>\n <div class=\"col-2\">\n <div\n class=\"text-truncate\"\n title=\"{{ 'Device type' | translate }}: {{ configuration.deviceType || '-' }}\"\n >\n <span class=\"text-label-small visible-xs-inline m-r-4\" translate>Device type</span>\n <span *ngIf=\"configuration.deviceType; else emptyText\">\n <c8y-highlight\n [text]=\"configuration.deviceType || '-'\"\n elementClass=\"text-info\"\n [pattern]=\"filterTerm\"\n ></c8y-highlight>\n </span>\n </div>\n </div>\n <div class=\"col-2\">\n <div class=\"text-truncate\" title=\"{{ configuration.configurationType }}\">\n <span class=\"label label-primary\" *ngIf=\"configuration.configurationType; else emptyText\">\n <c8y-highlight\n [text]=\"configuration.configurationType\"\n elementClass=\"text-info\"\n [pattern]=\"filterTerm\"\n ></c8y-highlight>\n </span>\n </div>\n </div>\n </div>\n <c8y-li-action\n (click)=\"edit(configuration)\"\n icon=\"pencil\"\n label=\"{{ 'Edit' | translate }}\"\n ></c8y-li-action>\n <c8y-li-action\n (click)=\"delete(configuration)\"\n icon=\"delete\"\n label=\"{{ 'Delete' | translate }}\"\n ></c8y-li-action>\n <c8y-li-action\n *ngIf=\"isBinaryFile(configuration)\"\n (click)=\"download(configuration)\"\n icon=\"download\"\n label=\"{{ 'Download' | translate }}\"\n ></c8y-li-action>\n <ng-template #emptyText>\n <small class=\"text-muted\">\n <em>{{ 'Undefined' | translate }}</em>\n </small>\n </ng-template>\n <ng-template #emptyDescription>\n <small class=\"text-muted\">\n <em>{{ 'No description' | translate }}</em>\n </small>\n </ng-template>\n </c8y-li>\n</c8y-list-group>\n","import { Injectable } from '@angular/core';\nimport { gettext, 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 { CommonModule } from '@angular/common';\nimport { ConfigurationListComponent } from './configuration-list.component';\nimport { ConfigurationDetailComponent } from './configuration-detail.component';\nimport { CoreModule, hookNavigator, hookRoute } from '@c8y/ngx-components';\nimport { ConfigurationRepositoryNavigationFactory } from './configuration-repository-navigation-factory';\nimport { SharedRepositoryModule } from '@c8y/ngx-components/repository/shared';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\n\n@NgModule({\n imports: [CommonModule, CoreModule, SharedRepositoryModule, TooltipModule],\n declarations: [ConfigurationListComponent, ConfigurationDetailComponent],\n entryComponents: [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","i7","i1.DeviceConfigurationService","i1","i3","i4","i5","i8.SourceCodePreviewComponent","i3.ConfigurationFilterPipe","i2.DeviceConfigurationService","i6","i8.DeviceConfigurationListComponent","i9.ConfigurationPreviewComponent","i10.TextBasedConfigurationComponent","i2","i1.ConfigurationRepositoryListModule","i2.ConfigurationRepositoryDeviceTabModule"],"mappings":"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"}