@c8y/ngx-components 1022.26.1 → 1022.27.0

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