@c8y/ngx-components 1023.6.3 → 1023.7.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 (117) hide show
  1. package/fesm2022/c8y-ngx-components-ai-agent-chat.mjs.map +1 -1
  2. package/fesm2022/c8y-ngx-components-ai-ai-chat.mjs +1 -1
  3. package/fesm2022/c8y-ngx-components-ai-ai-chat.mjs.map +1 -1
  4. package/fesm2022/c8y-ngx-components-alarm-event-selector.mjs.map +1 -1
  5. package/fesm2022/c8y-ngx-components-alarms.mjs.map +1 -1
  6. package/fesm2022/c8y-ngx-components-app-logs.mjs.map +1 -1
  7. package/fesm2022/c8y-ngx-components-asset-properties.mjs +2 -2
  8. package/fesm2022/c8y-ngx-components-asset-properties.mjs.map +1 -1
  9. package/fesm2022/c8y-ngx-components-asset-property-grid.component-B1q7kXRu.mjs.map +1 -1
  10. package/fesm2022/c8y-ngx-components-assets-navigator.mjs.map +1 -1
  11. package/fesm2022/c8y-ngx-components-auth-configuration.mjs.map +1 -1
  12. package/fesm2022/c8y-ngx-components-bookmarks.mjs.map +1 -1
  13. package/fesm2022/c8y-ngx-components-branding-shared-lazy-add-branding-modal.mjs.map +1 -1
  14. package/fesm2022/c8y-ngx-components-branding-shared-lazy.mjs.map +1 -1
  15. package/fesm2022/c8y-ngx-components-cockpit-config.mjs.map +1 -1
  16. package/fesm2022/c8y-ngx-components-computed-asset-properties-alarm-count-config.component-Bl18pHcM.mjs.map +1 -1
  17. package/fesm2022/c8y-ngx-components-computed-asset-properties-configuration-snapshot-config.component-C5QMFdX1.mjs.map +1 -1
  18. package/fesm2022/c8y-ngx-components-computed-asset-properties-event-count-config.component-C-Lc5Ble.mjs.map +1 -1
  19. package/fesm2022/c8y-ngx-components-computed-asset-properties-last-measurement-config.component-BXfM7hTQ.mjs.map +1 -1
  20. package/fesm2022/c8y-ngx-components-context-dashboard-cockpit-home-dashboard.mjs.map +1 -1
  21. package/fesm2022/c8y-ngx-components-context-dashboard-dashboard-general-settings.component-DN-f35bA.mjs.map +1 -1
  22. package/fesm2022/c8y-ngx-components-context-dashboard.mjs +1 -1
  23. package/fesm2022/c8y-ngx-components-context-dashboard.mjs.map +1 -1
  24. package/fesm2022/c8y-ngx-components-dashboard-details-advanced-tab-dashboard-details-advanced-tab.component-m7YeEj9R.mjs.map +1 -1
  25. package/fesm2022/c8y-ngx-components-dashboard-manager.mjs.map +1 -1
  26. package/fesm2022/c8y-ngx-components-datapoint-explorer-view.mjs.map +1 -1
  27. package/fesm2022/c8y-ngx-components-datapoint-selector.mjs.map +1 -1
  28. package/fesm2022/c8y-ngx-components-datapoints-export-selector.mjs.map +1 -1
  29. package/fesm2022/c8y-ngx-components-device-grid.mjs.map +1 -1
  30. package/fesm2022/c8y-ngx-components-device-profile.mjs.map +1 -1
  31. package/fesm2022/c8y-ngx-components-device-protocol-object-mappings.mjs.map +1 -1
  32. package/fesm2022/c8y-ngx-components-device-protocols.mjs.map +1 -1
  33. package/fesm2022/c8y-ngx-components-device-provisioned-certificates.mjs.map +1 -1
  34. package/fesm2022/c8y-ngx-components-device-shell.mjs.map +1 -1
  35. package/fesm2022/c8y-ngx-components-echart.mjs.map +1 -1
  36. package/fesm2022/c8y-ngx-components-ecosystem-application-plugins.mjs.map +1 -1
  37. package/fesm2022/c8y-ngx-components-ecosystem-license-confirm.mjs.map +1 -1
  38. package/fesm2022/c8y-ngx-components-ecosystem-shared.mjs.map +1 -1
  39. package/fesm2022/c8y-ngx-components-ecosystem.mjs.map +1 -1
  40. package/fesm2022/c8y-ngx-components-editor.mjs.map +1 -1
  41. package/fesm2022/c8y-ngx-components-events-events-timeline.mjs +1 -1
  42. package/fesm2022/c8y-ngx-components-events-events-timeline.mjs.map +1 -1
  43. package/fesm2022/c8y-ngx-components-file-preview.mjs.map +1 -1
  44. package/fesm2022/c8y-ngx-components-files-repository.mjs.map +1 -1
  45. package/fesm2022/c8y-ngx-components-global-context.mjs +12 -12
  46. package/fesm2022/c8y-ngx-components-global-context.mjs.map +1 -1
  47. package/fesm2022/c8y-ngx-components-icon-selector.mjs.map +1 -1
  48. package/fesm2022/c8y-ngx-components-interval-picker.mjs.map +1 -1
  49. package/fesm2022/c8y-ngx-components-location.mjs.map +1 -1
  50. package/fesm2022/c8y-ngx-components-map.mjs.map +1 -1
  51. package/fesm2022/c8y-ngx-components-messaging-management.mjs +1 -1
  52. package/fesm2022/c8y-ngx-components-messaging-management.mjs.map +1 -1
  53. package/fesm2022/c8y-ngx-components-operations-bulk-operation-list-item.mjs.map +1 -1
  54. package/fesm2022/c8y-ngx-components-operations-bulk-operation-scheduler.mjs.map +1 -1
  55. package/fesm2022/c8y-ngx-components-operations-bulk-operation-stepper.mjs.map +1 -1
  56. package/fesm2022/c8y-ngx-components-operations-bulk-operations-list.mjs.map +1 -1
  57. package/fesm2022/c8y-ngx-components-operations-bulk-operations-stepper-container.mjs.map +1 -1
  58. package/fesm2022/c8y-ngx-components-operations-bulk-single-operations-list.mjs.map +1 -1
  59. package/fesm2022/c8y-ngx-components-operations-create-bulk-operation-details.mjs.map +1 -1
  60. package/fesm2022/c8y-ngx-components-operations-device-selector.mjs.map +1 -1
  61. package/fesm2022/c8y-ngx-components-operations-operation-details.mjs.map +1 -1
  62. package/fesm2022/c8y-ngx-components-operations-operation-summary.mjs.map +1 -1
  63. package/fesm2022/c8y-ngx-components-operations-operations-list-item-details.mjs.map +1 -1
  64. package/fesm2022/c8y-ngx-components-operations-operations-list.mjs +1 -1
  65. package/fesm2022/c8y-ngx-components-operations-operations-list.mjs.map +1 -1
  66. package/fesm2022/c8y-ngx-components-operations-operations-timeline.mjs.map +1 -1
  67. package/fesm2022/c8y-ngx-components-operations-status-filter.mjs.map +1 -1
  68. package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-device-profile.mjs.map +1 -1
  69. package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-firmware.mjs.map +1 -1
  70. package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-software.mjs.map +1 -1
  71. package/fesm2022/c8y-ngx-components-operations-stepper-frames.mjs.map +1 -1
  72. package/fesm2022/c8y-ngx-components-platform-configuration.mjs.map +1 -1
  73. package/fesm2022/c8y-ngx-components-protocol-lpwan.mjs.map +1 -1
  74. package/fesm2022/c8y-ngx-components-protocol-opcua.mjs.map +1 -1
  75. package/fesm2022/c8y-ngx-components-register-device.mjs.map +1 -1
  76. package/fesm2022/c8y-ngx-components-remote-access-configurations.mjs +1 -1
  77. package/fesm2022/c8y-ngx-components-remote-access-shared.mjs.map +1 -1
  78. package/fesm2022/c8y-ngx-components-remote-access-vnc-vnc-viewer.mjs.map +1 -1
  79. package/fesm2022/c8y-ngx-components-replace-device-replace-device-wizard.mjs.map +1 -1
  80. package/fesm2022/c8y-ngx-components-report-dashboard.mjs.map +1 -1
  81. package/fesm2022/c8y-ngx-components-reports.mjs.map +1 -1
  82. package/fesm2022/c8y-ngx-components-repository-configuration.mjs.map +1 -1
  83. package/fesm2022/c8y-ngx-components-repository-firmware.mjs.map +1 -1
  84. package/fesm2022/c8y-ngx-components-repository-shared.mjs.map +1 -1
  85. package/fesm2022/c8y-ngx-components-repository-software.mjs.map +1 -1
  86. package/fesm2022/c8y-ngx-components-search.mjs.map +1 -1
  87. package/fesm2022/c8y-ngx-components-sensor-phone-sensor-phone-modal.mjs.map +1 -1
  88. package/fesm2022/c8y-ngx-components-static-assets-modal.mjs +1 -1
  89. package/fesm2022/c8y-ngx-components-static-assets-modal.mjs.map +1 -1
  90. package/fesm2022/c8y-ngx-components-static-assets.mjs.map +1 -1
  91. package/fesm2022/c8y-ngx-components-sub-assets.mjs.map +1 -1
  92. package/fesm2022/c8y-ngx-components-tenants.mjs.map +1 -1
  93. package/fesm2022/c8y-ngx-components-time-context.mjs +1 -1
  94. package/fesm2022/c8y-ngx-components-time-context.mjs.map +1 -1
  95. package/fesm2022/c8y-ngx-components-tracking.mjs.map +1 -1
  96. package/fesm2022/c8y-ngx-components-translation-editor-lazy.mjs.map +1 -1
  97. package/fesm2022/c8y-ngx-components-user-roles.mjs.map +1 -1
  98. package/fesm2022/c8y-ngx-components-widgets-implementations-alarms.mjs.map +1 -1
  99. package/fesm2022/c8y-ngx-components-widgets-implementations-asset-notes.mjs +1 -1
  100. package/fesm2022/c8y-ngx-components-widgets-implementations-cockpit-welcome.mjs.map +1 -1
  101. package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-graph.mjs.map +1 -1
  102. package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-table.mjs.map +1 -1
  103. package/fesm2022/c8y-ngx-components-widgets-implementations-device-control-message.mjs.map +1 -1
  104. package/fesm2022/c8y-ngx-components-widgets-implementations-html-widget.mjs +1 -1
  105. package/fesm2022/c8y-ngx-components-widgets-implementations-html-widget.mjs.map +1 -1
  106. package/fesm2022/c8y-ngx-components-widgets-implementations-image.mjs.map +1 -1
  107. package/fesm2022/c8y-ngx-components-widgets-implementations-info-gauge.mjs.map +1 -1
  108. package/fesm2022/c8y-ngx-components-widgets-implementations-kpi.mjs.map +1 -1
  109. package/fesm2022/c8y-ngx-components-widgets-implementations-linear-gauge.mjs.map +1 -1
  110. package/fesm2022/c8y-ngx-components-widgets-implementations-map.mjs.map +1 -1
  111. package/fesm2022/c8y-ngx-components-widgets-implementations-markdown.mjs.map +1 -1
  112. package/fesm2022/c8y-ngx-components-widgets-implementations-quick-links.mjs +4 -4
  113. package/fesm2022/c8y-ngx-components-widgets-implementations-quick-links.mjs.map +1 -1
  114. package/fesm2022/c8y-ngx-components-widgets-implementations-three-d-rotation.mjs.map +1 -1
  115. package/fesm2022/c8y-ngx-components.mjs +2 -2
  116. package/fesm2022/c8y-ngx-components.mjs.map +1 -1
  117. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"c8y-ngx-components-device-protocol-object-mappings.mjs","sources":["../../device-protocol-object-mappings/default-object-mapping-types/base-mapping.ts","../../device-protocol-object-mappings/default-object-mapping-types/measurement-mapping.ts","../../device-protocol-object-mappings/default-object-mapping-types/event-mapping.ts","../../device-protocol-object-mappings/default-object-mapping-types/alarm-mapping.ts","../../device-protocol-object-mappings/default-object-mapping-types/index.ts","../../device-protocol-object-mappings/object-mapping.component.ts","../../device-protocol-object-mappings/object-mapping.component.html","../../device-protocol-object-mappings/c8y-ngx-components-device-protocol-object-mappings.ts"],"sourcesContent":["import { gettext } from '@c8y/ngx-components/gettext';\nimport { FormlyFieldConfig } from '@ngx-formly/core';\nimport { filter, Subject, takeUntil, tap } from 'rxjs';\nimport { MappingConfig } from './index';\nimport { FormlyValueChangeEvent } from '@ngx-formly/core/lib/models';\n\nexport abstract class BaseObjectMapping {\n private formlyFieldCfg: FormlyFieldConfig;\n private destroy$: Subject<void> = new Subject();\n\n constructor(config: MappingConfig) {\n if (config.formlyFieldConfig) {\n config.formlyFieldConfig.expressions = {\n hide: field => {\n return !field.parent.get(`has${config.formlyFieldConfig.key}`).formControl.getRawValue();\n }\n };\n config.formlyFieldConfig.hooks = {\n onInit: field => {\n field.parent\n .get(`has${config.formlyFieldConfig.key}`)\n .formControl.patchValue(!!field.parent.model[`${config.formlyFieldConfig.key}`]);\n\n field.options.fieldChanges\n .pipe(\n filter((changes: FormlyValueChangeEvent) => {\n return (\n changes.type === 'valueChanges' && changes.field === field.parent.fieldGroup[0]\n );\n }),\n tap((changes: FormlyValueChangeEvent) => {\n if (changes.value === 'undefined') {\n field.parent\n .get(`has${config.formlyFieldConfig.key}`)\n .formControl.patchValue(\n !!field.parent.model[`${config.formlyFieldConfig.key}`]\n );\n\n const formField = field.parent.get(\n config.formlyFieldConfig.key as string\n ).formControl;\n if (formField) {\n formField.markAsPristine();\n formField.markAsUntouched();\n }\n }\n }),\n takeUntil(this.destroy$)\n )\n .subscribe();\n },\n onDestroy: () => {\n this.destroy$.next();\n this.destroy$.complete();\n }\n };\n }\n\n config.buttonType = config.buttonType || 'switch';\n\n const buttonConfig =\n config.buttonType !== 'none'\n ? {\n className: 'list-group-item',\n key: `has${config.formlyFieldConfig ? config.formlyFieldConfig.key : 'Switch'}`,\n type: config.buttonType,\n props: {\n label: gettext(config.label),\n icon: config.icon,\n description: config.tooltip,\n switchMode: config.buttonType === 'switch'\n },\n expressions: {\n 'props.disabled': config.disabled || (() => false)\n }\n }\n : undefined;\n\n if (config.formlyFieldConfig) {\n config.formlyFieldConfig.expressions = {\n hide: field => {\n return !field.parent.get(`has${config.formlyFieldConfig.key}`).formControl.getRawValue();\n }\n };\n config.formlyFieldConfig.hooks = {\n onInit: field => {\n field.parent\n .get(`has${config.formlyFieldConfig.key}`)\n .formControl.patchValue(!!field.parent.model[`${config.formlyFieldConfig.key}`]);\n\n field.options.fieldChanges\n .pipe(\n filter((changes, _index) => {\n return (\n changes.type === 'valueChanges' && changes.field === field.parent.fieldGroup[0]\n );\n }),\n tap(changes => {\n if (changes.value === 'undefined') {\n field.parent\n .get(`has${config.formlyFieldConfig.key}`)\n .formControl.patchValue(\n !!field.parent.model[`${config.formlyFieldConfig.key}`]\n );\n\n const formField = field.parent.get(\n config.formlyFieldConfig.key as string\n ).formControl;\n if (formField) {\n formField.markAsPristine();\n formField.markAsUntouched();\n }\n }\n }),\n takeUntil(this.destroy$)\n )\n .subscribe();\n },\n onDestroy: () => {\n this.destroy$.next();\n this.destroy$.complete();\n }\n };\n }\n\n this.formlyFieldCfg = {\n fieldGroup: [buttonConfig, config.formlyFieldConfig]\n };\n }\n\n getFormlyFieldConfig() {\n return this.formlyFieldCfg;\n }\n}\n","import { gettext } from '@c8y/ngx-components/gettext';\nimport { BaseObjectMapping } from '.';\nimport { FormlyFieldConfig } from '@ngx-formly/core';\nimport { Injector } from '@angular/core';\n\nexport class MeasurementObjectMapping extends BaseObjectMapping {\n constructor(\n _injector: Injector = null,\n measurementKey = 'measurementMapping',\n smallFormGroup = false,\n tooltip?: string,\n fieldGroup?: FormlyFieldConfig[]\n ) {\n super({\n icon: 'line-chart',\n label: gettext('Send measurement'),\n tooltip,\n formlyFieldConfig: {\n key: measurementKey,\n className: 'tight-grid p-t-16',\n fieldGroup: fieldGroup || [\n {\n key: 'type',\n type: 'string',\n props: {\n label: gettext('Type'),\n required: true,\n smallFormGroup\n },\n className: 'col-md-3 col-sm-6'\n },\n {\n key: 'series',\n type: 'string',\n props: {\n label: gettext('Series'),\n required: true,\n smallFormGroup\n },\n className: 'col-md-3 col-sm-6'\n },\n {\n key: 'unit',\n type: 'string',\n props: {\n label: gettext('Unit'),\n required: true,\n smallFormGroup\n },\n className: 'col-md-3 col-sm-6'\n }\n ]\n }\n });\n }\n}\n","import { gettext } from '@c8y/ngx-components/gettext';\nimport { BaseObjectMapping } from '.';\nimport { FormlyFieldConfig } from '@ngx-formly/core';\nimport { Injector } from '@angular/core';\n\nexport class EventObjectMapping extends BaseObjectMapping {\n constructor(\n _injector: Injector = null,\n eventKey = 'eventMapping',\n smallFormGroup = false,\n tooltip?: string,\n fieldGroup?: FormlyFieldConfig[]\n ) {\n super({\n icon: 'online1',\n label: gettext('Send event'),\n tooltip,\n formlyFieldConfig: {\n key: eventKey,\n className: 'tight-grid p-t-16',\n fieldGroup: fieldGroup || [\n {\n key: 'fragmentType',\n type: 'string',\n props: {\n label: gettext('Fragment type'),\n required: true,\n smallFormGroup\n },\n className: 'col-md-3 col-sm-6'\n },\n {\n key: 'innerType',\n type: 'string',\n props: {\n label: gettext('Inner type'),\n required: true,\n smallFormGroup\n },\n className: 'col-md-3 col-sm-6'\n },\n {\n key: 'text',\n type: 'string',\n props: {\n label: gettext('Text'),\n required: true,\n smallFormGroup\n },\n className: 'col-md-3 col-sm-6'\n },\n {\n key: 'type',\n type: 'string',\n props: {\n label: gettext('Type'),\n required: true,\n smallFormGroup\n },\n className: 'col-md-3 col-sm-6'\n }\n ]\n }\n });\n }\n}\n","import { gettext } from '@c8y/ngx-components/gettext';\nimport { BaseObjectMapping } from './base-mapping';\nimport { FormlyFieldConfig } from '@ngx-formly/core';\nimport { Injector } from '@angular/core';\nimport { ALARM_SEVERITY, ALARM_STATUS } from './index';\n\nexport class AlarmObjectMapping extends BaseObjectMapping {\n constructor(\n _injector: Injector = null,\n alarmKey = 'alarmMapping',\n smallFormGroup = false,\n tooltip?: string,\n fieldGroup?: FormlyFieldConfig[]\n ) {\n super({\n icon: 'bell',\n label: gettext('Raise alarm'),\n tooltip,\n formlyFieldConfig: {\n key: alarmKey,\n className: 'tight-grid p-t-16',\n fieldGroup: fieldGroup || [\n {\n key: 'severity',\n type: 'select',\n props: {\n label: gettext('Severity'),\n options: [...Object.values(ALARM_SEVERITY).map(value => ({ label: value, value }))],\n required: true,\n smallFormGroup\n },\n className: 'col-md-3 col-sm-6'\n },\n {\n key: 'status',\n type: 'select',\n props: {\n label: gettext('Status'),\n options: [...Object.values(ALARM_STATUS).map(value => ({ label: value, value }))],\n required: true\n },\n className: 'col-md-3 col-sm-6'\n },\n {\n key: 'text',\n type: 'string',\n props: {\n label: gettext('Text'),\n required: true\n },\n className: 'col-md-3 col-sm-6'\n },\n {\n key: 'type',\n type: 'string',\n props: {\n label: gettext('Type'),\n required: true\n },\n className: 'col-md-3 col-sm-6'\n }\n ]\n }\n });\n }\n}\n","import { gettext } from '@c8y/ngx-components/gettext';\nimport { FormlyFieldConfig } from '@ngx-formly/core';\n\n//Functionalities\nexport * from './base-mapping';\nexport * from './measurement-mapping';\nexport * from './event-mapping';\nexport * from './alarm-mapping';\n\nexport type MappingConfig = {\n icon: string;\n label: string;\n tooltip?: string;\n formlyFieldConfig?: FormlyFieldConfig;\n disabled?: (config?: FormlyFieldConfig) => boolean;\n buttonType?: 'checkbox' | 'switch' | 'none';\n};\n\nexport const ALARM_SEVERITY = {\n WARNING: gettext('WARNING'),\n MINOR: gettext('MINOR'),\n MAJOR: gettext('MAJOR'),\n CRITICAL: gettext('CRITICAL')\n};\n\nexport const ALARM_STATUS = {\n ACTIVE: gettext('ACTIVE'),\n ACKNOWLEDGED: gettext('ACKNOWLEDGED'),\n CLEARED: gettext('CLEARED')\n};\n","import {\n AfterViewInit,\n Component,\n EventEmitter,\n Injector,\n Input,\n OnInit,\n Output,\n Type\n} from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { FormlyFieldConfig, FormlyFormOptions, FormlyModule } from '@ngx-formly/core';\nimport {\n DynamicFormsModule,\n CommonModule as C8yCommonModule,\n FormsModule as C8yFormsModule,\n CoreModule\n} from '@c8y/ngx-components';\nimport { BaseObjectMapping } from './default-object-mapping-types';\nimport { ObjectMappingsValidationObject } from './index';\n\n@Component({\n selector: 'c8y-device-protocol-object-mappings',\n standalone: true,\n templateUrl: `./object-mapping.component.html`,\n imports: [C8yCommonModule, C8yFormsModule, DynamicFormsModule, FormlyModule, CoreModule]\n})\nexport class ObjectMappingComponent implements OnInit, AfterViewInit {\n @Input('data') model: unknown = {};\n @Input() objectMappingTypes: Type<BaseObjectMapping>[];\n @Output() onUpdate = new EventEmitter<ObjectMappingsValidationObject>();\n\n form = new FormGroup({});\n fields: FormlyFieldConfig[] = [];\n options: FormlyFormOptions = {\n formState: {\n disabled: false\n }\n };\n\n constructor(private injector: Injector) {}\n\n ngOnInit(): void {\n this.fillFormlyForm();\n }\n\n ngAfterViewInit() {\n if (this.fields?.length > 0) {\n this.options.detectChanges(this.fields[0]);\n }\n }\n\n onChange(_event) {\n const { dirty, valid, touched } = this.form;\n this.onUpdate.emit({ dirty, valid, touched } as ObjectMappingsValidationObject);\n }\n\n private fillFormlyForm() {\n if (this.objectMappingTypes && this.objectMappingTypes.length > 0) {\n this.objectMappingTypes.forEach(functionalityType => {\n const instance = new functionalityType(this.injector);\n\n if (instance instanceof BaseObjectMapping) {\n this.fields.push(instance.getFormlyFieldConfig());\n }\n });\n }\n }\n}\n","<div class=\"form m-b-16 object-mappings\">\n <div class=\"legend form-block\">{{ 'Functionalities' | translate }}</div>\n <formly-form\n [model]=\"model\"\n [form]=\"form\"\n [fields]=\"fields\"\n [options]=\"options\"\n (modelChange)=\"onChange($event)\"\n data-cy=\"device-protocol-object-mappings--formly-form\"\n ></formly-form>\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["C8yCommonModule","C8yFormsModule"],"mappings":"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"}
1
+ {"version":3,"file":"c8y-ngx-components-device-protocol-object-mappings.mjs","sources":["../../device-protocol-object-mappings/default-object-mapping-types/base-mapping.ts","../../device-protocol-object-mappings/default-object-mapping-types/measurement-mapping.ts","../../device-protocol-object-mappings/default-object-mapping-types/event-mapping.ts","../../device-protocol-object-mappings/default-object-mapping-types/alarm-mapping.ts","../../device-protocol-object-mappings/default-object-mapping-types/index.ts","../../device-protocol-object-mappings/object-mapping.component.ts","../../device-protocol-object-mappings/object-mapping.component.html","../../device-protocol-object-mappings/c8y-ngx-components-device-protocol-object-mappings.ts"],"sourcesContent":["import { gettext } from '@c8y/ngx-components/gettext';\nimport { FormlyFieldConfig } from '@ngx-formly/core';\nimport { filter, Subject, takeUntil, tap } from 'rxjs';\nimport { MappingConfig } from './index';\nimport { FormlyValueChangeEvent } from '@ngx-formly/core/lib/models';\n\nexport abstract class BaseObjectMapping {\n private formlyFieldCfg: FormlyFieldConfig;\n private destroy$: Subject<void> = new Subject();\n\n constructor(config: MappingConfig) {\n if (config.formlyFieldConfig) {\n config.formlyFieldConfig.expressions = {\n hide: field => {\n return !field.parent.get(`has${config.formlyFieldConfig.key}`).formControl.getRawValue();\n }\n };\n config.formlyFieldConfig.hooks = {\n onInit: field => {\n field.parent\n .get(`has${config.formlyFieldConfig.key}`)\n .formControl.patchValue(!!field.parent.model[`${config.formlyFieldConfig.key}`]);\n\n field.options.fieldChanges\n .pipe(\n filter((changes: FormlyValueChangeEvent) => {\n return (\n changes.type === 'valueChanges' && changes.field === field.parent.fieldGroup[0]\n );\n }),\n tap((changes: FormlyValueChangeEvent) => {\n if (changes.value === 'undefined') {\n field.parent\n .get(`has${config.formlyFieldConfig.key}`)\n .formControl.patchValue(\n !!field.parent.model[`${config.formlyFieldConfig.key}`]\n );\n\n const formField = field.parent.get(\n config.formlyFieldConfig.key as string\n ).formControl;\n if (formField) {\n formField.markAsPristine();\n formField.markAsUntouched();\n }\n }\n }),\n takeUntil(this.destroy$)\n )\n .subscribe();\n },\n onDestroy: () => {\n this.destroy$.next();\n this.destroy$.complete();\n }\n };\n }\n\n config.buttonType = config.buttonType || 'switch';\n\n const buttonConfig =\n config.buttonType !== 'none'\n ? {\n className: 'list-group-item',\n key: `has${config.formlyFieldConfig ? config.formlyFieldConfig.key : 'Switch'}`,\n type: config.buttonType,\n props: {\n label: gettext(config.label),\n icon: config.icon,\n description: config.tooltip,\n switchMode: config.buttonType === 'switch'\n },\n expressions: {\n 'props.disabled': config.disabled || (() => false)\n }\n }\n : undefined;\n\n if (config.formlyFieldConfig) {\n config.formlyFieldConfig.expressions = {\n hide: field => {\n return !field.parent.get(`has${config.formlyFieldConfig.key}`).formControl.getRawValue();\n }\n };\n config.formlyFieldConfig.hooks = {\n onInit: field => {\n field.parent\n .get(`has${config.formlyFieldConfig.key}`)\n .formControl.patchValue(!!field.parent.model[`${config.formlyFieldConfig.key}`]);\n\n field.options.fieldChanges\n .pipe(\n filter((changes, _index) => {\n return (\n changes.type === 'valueChanges' && changes.field === field.parent.fieldGroup[0]\n );\n }),\n tap(changes => {\n if (changes.value === 'undefined') {\n field.parent\n .get(`has${config.formlyFieldConfig.key}`)\n .formControl.patchValue(\n !!field.parent.model[`${config.formlyFieldConfig.key}`]\n );\n\n const formField = field.parent.get(\n config.formlyFieldConfig.key as string\n ).formControl;\n if (formField) {\n formField.markAsPristine();\n formField.markAsUntouched();\n }\n }\n }),\n takeUntil(this.destroy$)\n )\n .subscribe();\n },\n onDestroy: () => {\n this.destroy$.next();\n this.destroy$.complete();\n }\n };\n }\n\n this.formlyFieldCfg = {\n fieldGroup: [buttonConfig, config.formlyFieldConfig]\n };\n }\n\n getFormlyFieldConfig() {\n return this.formlyFieldCfg;\n }\n}\n","import { gettext } from '@c8y/ngx-components/gettext';\nimport { BaseObjectMapping } from '.';\nimport { FormlyFieldConfig } from '@ngx-formly/core';\nimport { Injector } from '@angular/core';\n\nexport class MeasurementObjectMapping extends BaseObjectMapping {\n constructor(\n _injector: Injector = null,\n measurementKey = 'measurementMapping',\n smallFormGroup = false,\n tooltip?: string,\n fieldGroup?: FormlyFieldConfig[]\n ) {\n super({\n icon: 'line-chart',\n label: gettext('Send measurement'),\n tooltip,\n formlyFieldConfig: {\n key: measurementKey,\n className: 'tight-grid p-t-16',\n fieldGroup: fieldGroup || [\n {\n key: 'type',\n type: 'string',\n props: {\n label: gettext('Type'),\n required: true,\n smallFormGroup\n },\n className: 'col-md-3 col-sm-6'\n },\n {\n key: 'series',\n type: 'string',\n props: {\n label: gettext('Series'),\n required: true,\n smallFormGroup\n },\n className: 'col-md-3 col-sm-6'\n },\n {\n key: 'unit',\n type: 'string',\n props: {\n label: gettext('Unit'),\n required: true,\n smallFormGroup\n },\n className: 'col-md-3 col-sm-6'\n }\n ]\n }\n });\n }\n}\n","import { gettext } from '@c8y/ngx-components/gettext';\nimport { BaseObjectMapping } from '.';\nimport { FormlyFieldConfig } from '@ngx-formly/core';\nimport { Injector } from '@angular/core';\n\nexport class EventObjectMapping extends BaseObjectMapping {\n constructor(\n _injector: Injector = null,\n eventKey = 'eventMapping',\n smallFormGroup = false,\n tooltip?: string,\n fieldGroup?: FormlyFieldConfig[]\n ) {\n super({\n icon: 'online1',\n label: gettext('Send event'),\n tooltip,\n formlyFieldConfig: {\n key: eventKey,\n className: 'tight-grid p-t-16',\n fieldGroup: fieldGroup || [\n {\n key: 'fragmentType',\n type: 'string',\n props: {\n label: gettext('Fragment type'),\n required: true,\n smallFormGroup\n },\n className: 'col-md-3 col-sm-6'\n },\n {\n key: 'innerType',\n type: 'string',\n props: {\n label: gettext('Inner type'),\n required: true,\n smallFormGroup\n },\n className: 'col-md-3 col-sm-6'\n },\n {\n key: 'text',\n type: 'string',\n props: {\n label: gettext('Text'),\n required: true,\n smallFormGroup\n },\n className: 'col-md-3 col-sm-6'\n },\n {\n key: 'type',\n type: 'string',\n props: {\n label: gettext('Type'),\n required: true,\n smallFormGroup\n },\n className: 'col-md-3 col-sm-6'\n }\n ]\n }\n });\n }\n}\n","import { gettext } from '@c8y/ngx-components/gettext';\nimport { BaseObjectMapping } from './base-mapping';\nimport { FormlyFieldConfig } from '@ngx-formly/core';\nimport { Injector } from '@angular/core';\nimport { ALARM_SEVERITY, ALARM_STATUS } from './index';\n\nexport class AlarmObjectMapping extends BaseObjectMapping {\n constructor(\n _injector: Injector = null,\n alarmKey = 'alarmMapping',\n smallFormGroup = false,\n tooltip?: string,\n fieldGroup?: FormlyFieldConfig[]\n ) {\n super({\n icon: 'bell',\n label: gettext('Raise alarm'),\n tooltip,\n formlyFieldConfig: {\n key: alarmKey,\n className: 'tight-grid p-t-16',\n fieldGroup: fieldGroup || [\n {\n key: 'severity',\n type: 'select',\n props: {\n label: gettext('Severity'),\n options: [...Object.values(ALARM_SEVERITY).map(value => ({ label: value, value }))],\n required: true,\n smallFormGroup\n },\n className: 'col-md-3 col-sm-6'\n },\n {\n key: 'status',\n type: 'select',\n props: {\n label: gettext('Status'),\n options: [...Object.values(ALARM_STATUS).map(value => ({ label: value, value }))],\n required: true\n },\n className: 'col-md-3 col-sm-6'\n },\n {\n key: 'text',\n type: 'string',\n props: {\n label: gettext('Text'),\n required: true\n },\n className: 'col-md-3 col-sm-6'\n },\n {\n key: 'type',\n type: 'string',\n props: {\n label: gettext('Type'),\n required: true\n },\n className: 'col-md-3 col-sm-6'\n }\n ]\n }\n });\n }\n}\n","import { gettext } from '@c8y/ngx-components/gettext';\nimport { FormlyFieldConfig } from '@ngx-formly/core';\n\n//Functionalities\nexport * from './base-mapping';\nexport * from './measurement-mapping';\nexport * from './event-mapping';\nexport * from './alarm-mapping';\n\nexport type MappingConfig = {\n icon: string;\n label: string;\n tooltip?: string;\n formlyFieldConfig?: FormlyFieldConfig;\n disabled?: (config?: FormlyFieldConfig) => boolean;\n buttonType?: 'checkbox' | 'switch' | 'none';\n};\n\nexport const ALARM_SEVERITY = {\n WARNING: gettext('WARNING'),\n MINOR: gettext('MINOR'),\n MAJOR: gettext('MAJOR'),\n CRITICAL: gettext('CRITICAL')\n};\n\nexport const ALARM_STATUS = {\n ACTIVE: gettext('ACTIVE'),\n ACKNOWLEDGED: gettext('ACKNOWLEDGED'),\n CLEARED: gettext('CLEARED')\n};\n","import {\n AfterViewInit,\n Component,\n EventEmitter,\n Injector,\n Input,\n OnInit,\n Output,\n Type\n} from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { FormlyFieldConfig, FormlyFormOptions, FormlyModule } from '@ngx-formly/core';\nimport {\n DynamicFormsModule,\n CommonModule as C8yCommonModule,\n FormsModule as C8yFormsModule,\n CoreModule\n} from '@c8y/ngx-components';\nimport { BaseObjectMapping } from './default-object-mapping-types';\nimport { ObjectMappingsValidationObject } from './index';\n\n@Component({\n selector: 'c8y-device-protocol-object-mappings',\n standalone: true,\n templateUrl: `./object-mapping.component.html`,\n imports: [C8yCommonModule, C8yFormsModule, DynamicFormsModule, FormlyModule, CoreModule]\n})\nexport class ObjectMappingComponent implements OnInit, AfterViewInit {\n @Input('data') model: unknown = {};\n @Input() objectMappingTypes: Type<BaseObjectMapping>[];\n @Output() onUpdate = new EventEmitter<ObjectMappingsValidationObject>();\n\n form = new FormGroup({});\n fields: FormlyFieldConfig[] = [];\n options: FormlyFormOptions = {\n formState: {\n disabled: false\n }\n };\n\n constructor(private injector: Injector) {}\n\n ngOnInit(): void {\n this.fillFormlyForm();\n }\n\n ngAfterViewInit() {\n if (this.fields?.length > 0) {\n this.options.detectChanges(this.fields[0]);\n }\n }\n\n onChange(_event) {\n const { dirty, valid, touched } = this.form;\n this.onUpdate.emit({ dirty, valid, touched } as ObjectMappingsValidationObject);\n }\n\n private fillFormlyForm() {\n if (this.objectMappingTypes && this.objectMappingTypes.length > 0) {\n this.objectMappingTypes.forEach(functionalityType => {\n const instance = new functionalityType(this.injector);\n\n if (instance instanceof BaseObjectMapping) {\n this.fields.push(instance.getFormlyFieldConfig());\n }\n });\n }\n }\n}\n","<div class=\"form m-b-16 object-mappings\">\n <div class=\"legend form-block\">{{ 'Functionalities' | translate }}</div>\n <formly-form\n [model]=\"model\"\n [form]=\"form\"\n [fields]=\"fields\"\n [options]=\"options\"\n (modelChange)=\"onChange($event)\"\n data-cy=\"device-protocol-object-mappings--formly-form\"\n ></formly-form>\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["C8yCommonModule","C8yFormsModule"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"c8y-ngx-components-device-protocols.mjs","sources":["../../device-protocols/device-type-detail-edited.service.ts","../../device-protocols/device-protocols.guard.ts","../../device-protocols/device-type-detail.directive.ts","../../device-protocols/device-type-detail.component.ts","../../device-protocols/device-protocols.module.ts","../../device-protocols/c8y-ngx-components-device-protocols.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\n\n@Injectable()\nexport class DeviceTypeDetailEditedService {\n isDetailEdited = false;\n\n getIsDetailEdited() {\n return this.isDetailEdited;\n }\n\n setIsDetailEdited(value) {\n this.isDetailEdited = value;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { AlertService, ModalService, Status } from '@c8y/ngx-components';\nimport { DeviceTypeDetailEditedService } from './device-type-detail-edited.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class DeviceProtocolsGuard {\n constructor(\n private modal: ModalService,\n private alert: AlertService,\n private deviceTypeDetailEditedService: DeviceTypeDetailEditedService\n ) {}\n\n async canDeactivate(): Promise<boolean> {\n if (this.deviceTypeDetailEditedService.getIsDetailEdited()) {\n try {\n await this.modal.confirm(\n gettext('Discard changes'),\n gettext(\n 'You are about to leave this page and discard the changes made. Do you want to proceed?'\n ),\n Status.WARNING,\n {\n ok: gettext('Discard')\n }\n );\n this.deviceTypeDetailEditedService.setIsDetailEdited(false);\n return true;\n } catch (e) {\n if (e) {\n this.alert.danger(e);\n }\n return false;\n }\n }\n return true;\n }\n}\n","import { Directive, ElementRef, Injector, Input } from '@angular/core';\nimport { UpgradeComponent } from '@angular/upgrade/static';\n\n@Directive({ selector: 'c8y-device-type-detail-directive' })\nexport class DeviceTypeDetail extends UpgradeComponent {\n @Input() id: string;\n\n constructor(elementRef: ElementRef, injector: Injector) {\n super('c8yDeviceTypeDetail', elementRef, injector);\n }\n}\n","import { ChangeDetectionStrategy, Component, Injector, OnInit } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { DeviceTypeDetail } from './device-type-detail.directive';\n\n/* https://stackoverflow.com/a/65290658 */\nexport function rootScopeTypeDetailFactory($injector: Injector) {\n return $injector.get('$rootScope').$new();\n}\n\n@Component({\n selector: 'c8y-device-type-detail',\n template: `<c8y-device-type-detail-directive\n [id]=\"deviceTypeId\"\n ></c8y-device-type-detail-directive>`,\n providers: [\n {\n deps: ['$injector'],\n provide: '$scope',\n useFactory: rootScopeTypeDetailFactory\n }\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [DeviceTypeDetail]\n})\nexport class DeviceTypeDetailComponent implements OnInit {\n deviceTypeId: string;\n\n constructor(private route: ActivatedRoute) {}\n\n ngOnInit() {\n this.deviceTypeId = this.route.snapshot.paramMap.get('id');\n }\n}\n","import { NgModule } from '@angular/core';\nimport { Route } from '@angular/router';\nimport { hookRoute } from '@c8y/ngx-components';\nimport { DeviceProtocolsGuard } from './device-protocols.guard';\nimport { DeviceTypeDetailEditedService } from './device-type-detail-edited.service';\nimport { DeviceTypeDetailComponent } from './device-type-detail.component';\nimport { DeviceTypeDetail } from './device-type-detail.directive';\n\nconst fieldbusTypes = [\n 'actility',\n 'canbus',\n 'canopen',\n 'lora',\n 'lpwan',\n 'modbus',\n 'opcua',\n 'profibus',\n 'sigfox'\n];\n\nconst protocolRoutes: Route[] = fieldbusTypes.map(protocol => ({\n path: `deviceprotocols/${protocol}/:id`,\n component: DeviceTypeDetailComponent,\n canDeactivate: [DeviceProtocolsGuard]\n}));\n\n@NgModule({\n imports: [DeviceTypeDetail, DeviceTypeDetailComponent],\n exports: [DeviceTypeDetailComponent],\n providers: [\n DeviceTypeDetailEditedService,\n DeviceProtocolsGuard,\n ...protocolRoutes.map(route => hookRoute(route))\n ]\n})\nexport class DeviceProtocolsModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i2.DeviceTypeDetailEditedService","i1"],"mappings":"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"}
1
+ {"version":3,"file":"c8y-ngx-components-device-protocols.mjs","sources":["../../device-protocols/device-type-detail-edited.service.ts","../../device-protocols/device-protocols.guard.ts","../../device-protocols/device-type-detail.directive.ts","../../device-protocols/device-type-detail.component.ts","../../device-protocols/device-protocols.module.ts","../../device-protocols/c8y-ngx-components-device-protocols.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\n\n@Injectable()\nexport class DeviceTypeDetailEditedService {\n isDetailEdited = false;\n\n getIsDetailEdited() {\n return this.isDetailEdited;\n }\n\n setIsDetailEdited(value) {\n this.isDetailEdited = value;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { AlertService, ModalService, Status } from '@c8y/ngx-components';\nimport { DeviceTypeDetailEditedService } from './device-type-detail-edited.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class DeviceProtocolsGuard {\n constructor(\n private modal: ModalService,\n private alert: AlertService,\n private deviceTypeDetailEditedService: DeviceTypeDetailEditedService\n ) {}\n\n async canDeactivate(): Promise<boolean> {\n if (this.deviceTypeDetailEditedService.getIsDetailEdited()) {\n try {\n await this.modal.confirm(\n gettext('Discard changes'),\n gettext(\n 'You are about to leave this page and discard the changes made. Do you want to proceed?'\n ),\n Status.WARNING,\n {\n ok: gettext('Discard')\n }\n );\n this.deviceTypeDetailEditedService.setIsDetailEdited(false);\n return true;\n } catch (e) {\n if (e) {\n this.alert.danger(e);\n }\n return false;\n }\n }\n return true;\n }\n}\n","import { Directive, ElementRef, Injector, Input } from '@angular/core';\nimport { UpgradeComponent } from '@angular/upgrade/static';\n\n@Directive({ selector: 'c8y-device-type-detail-directive' })\nexport class DeviceTypeDetail extends UpgradeComponent {\n @Input() id: string;\n\n constructor(elementRef: ElementRef, injector: Injector) {\n super('c8yDeviceTypeDetail', elementRef, injector);\n }\n}\n","import { ChangeDetectionStrategy, Component, Injector, OnInit } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { DeviceTypeDetail } from './device-type-detail.directive';\n\n/* https://stackoverflow.com/a/65290658 */\nexport function rootScopeTypeDetailFactory($injector: Injector) {\n return $injector.get('$rootScope').$new();\n}\n\n@Component({\n selector: 'c8y-device-type-detail',\n template: `<c8y-device-type-detail-directive\n [id]=\"deviceTypeId\"\n ></c8y-device-type-detail-directive>`,\n providers: [\n {\n deps: ['$injector'],\n provide: '$scope',\n useFactory: rootScopeTypeDetailFactory\n }\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [DeviceTypeDetail]\n})\nexport class DeviceTypeDetailComponent implements OnInit {\n deviceTypeId: string;\n\n constructor(private route: ActivatedRoute) {}\n\n ngOnInit() {\n this.deviceTypeId = this.route.snapshot.paramMap.get('id');\n }\n}\n","import { NgModule } from '@angular/core';\nimport { Route } from '@angular/router';\nimport { hookRoute } from '@c8y/ngx-components';\nimport { DeviceProtocolsGuard } from './device-protocols.guard';\nimport { DeviceTypeDetailEditedService } from './device-type-detail-edited.service';\nimport { DeviceTypeDetailComponent } from './device-type-detail.component';\nimport { DeviceTypeDetail } from './device-type-detail.directive';\n\nconst fieldbusTypes = [\n 'actility',\n 'canbus',\n 'canopen',\n 'lora',\n 'lpwan',\n 'modbus',\n 'opcua',\n 'profibus',\n 'sigfox'\n];\n\nconst protocolRoutes: Route[] = fieldbusTypes.map(protocol => ({\n path: `deviceprotocols/${protocol}/:id`,\n component: DeviceTypeDetailComponent,\n canDeactivate: [DeviceProtocolsGuard]\n}));\n\n@NgModule({\n imports: [DeviceTypeDetail, DeviceTypeDetailComponent],\n exports: [DeviceTypeDetailComponent],\n providers: [\n DeviceTypeDetailEditedService,\n DeviceProtocolsGuard,\n ...protocolRoutes.map(route => hookRoute(route))\n ]\n})\nexport class DeviceProtocolsModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i2.DeviceTypeDetailEditedService","i1"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"c8y-ngx-components-device-provisioned-certificates.mjs","sources":["../../device-provisioned-certificates/device-provisioned-certificates.service.ts","../../device-provisioned-certificates/device-provisioned-certificates.guard.ts","../../device-provisioned-certificates/device-tab-provisioned-certificates.component.ts","../../device-provisioned-certificates/device-tab-provisioned-certificates.component.html","../../device-provisioned-certificates/device-provisioned-certificates.module.ts","../../device-provisioned-certificates/c8y-ngx-components-device-provisioned-certificates.ts"],"sourcesContent":["import { FetchClient, IManagedObject, UserService } from '@c8y/client';\nimport { Injectable } from '@angular/core';\nimport { ProvisionedCertificate } from './device-tab-provisioned-certificates.component';\n\n@Injectable()\nexport class DeviceProvisionedCertificatesService {\n constructor(\n private userService: UserService,\n private client: FetchClient\n ) {}\n\n async getDeviceProvisionedCertificates(\n device: IManagedObject\n ): Promise<ProvisionedCertificate[] | undefined> {\n const deviceUserName = await this.getDeviceUserName(device);\n\n // Avoid additional requests if the device does not have a user.\n // This case does not really occur in real-life scenarios, but e.g. in cypress tests only\n if (!deviceUserName) {\n return undefined;\n }\n\n const { data } = await this.userService.detail(deviceUserName, { withCertificates: true });\n return data.provisionedCertificates;\n }\n\n private async getDeviceUserName(device): Promise<string> {\n const method = 'GET';\n const url = `/inventory/managedObjects/${device.id}/user`;\n const res = await this.client.fetch(url, { method });\n const data = await res.json();\n if (res.status >= 400) {\n throw new Error(data.message);\n }\n return data.userName;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { DeviceProvisionedCertificatesService } from './device-provisioned-certificates.service';\nimport { ActivatedRouteSnapshot } from '@angular/router';\n\n@Injectable()\nexport class DeviceProvisionedCertificatesGuard {\n constructor(private deviceProvisionedCertificatesService: DeviceProvisionedCertificatesService) {}\n\n async canActivate(route: ActivatedRouteSnapshot) {\n const contextData = route.data.contextData || route.parent.data.contextData;\n if (!contextData) {\n return false;\n }\n try {\n const provisionedCertificates =\n await this.deviceProvisionedCertificatesService.getDeviceProvisionedCertificates(\n contextData\n );\n return provisionedCertificates?.length > 0;\n } catch (error) {\n return false;\n }\n }\n}\n","import { Component, OnInit, ViewChild } from '@angular/core';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport {\n ActionControl,\n AlertService,\n BulkActionControl,\n Column,\n DataGridComponent,\n DisplayOptions,\n ModalService,\n Pagination,\n PX_ACTIONS,\n Row,\n Status,\n ActionBarItemComponent,\n IconDirective,\n EmptyStateComponent,\n ColumnDirective,\n CellRendererDefDirective,\n C8yTranslatePipe,\n DatePipe\n} from '@c8y/ngx-components';\nimport { DeviceProvisionedCertificatesService } from './device-provisioned-certificates.service';\nimport { ActivatedRoute } from '@angular/router';\nimport { CrlService, IManagedObject } from '@c8y/client';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { switchMap, map, tap, finalize, shareReplay } from 'rxjs/operators';\nimport { TranslateService } from '@ngx-translate/core';\nimport { NgClass, NgIf, AsyncPipe, NgTemplateOutlet } from '@angular/common';\n\nexport type ProvisionedCertificate = { serialNumber: string; notBefore: string; notAfter: string };\n\n@Component({\n selector: 'device-tab-serials-component',\n templateUrl: './device-tab-provisioned-certificates.component.html',\n imports: [\n ActionBarItemComponent,\n IconDirective,\n NgClass,\n DataGridComponent,\n NgIf,\n EmptyStateComponent,\n ColumnDirective,\n CellRendererDefDirective,\n C8yTranslatePipe,\n AsyncPipe,\n DatePipe,\n NgTemplateOutlet\n ]\n})\nexport class DeviceTabProvisionedCertificatesComponent implements OnInit {\n @ViewChild('dataGrid') dataGrid: DataGridComponent;\n\n reloading = false;\n reload$: BehaviorSubject<void> = new BehaviorSubject(null);\n\n tableTitle = gettext('Provisioned certificates');\n columns: Column[] = [\n {\n name: 'serialNumber',\n path: 'serialNumber',\n header: gettext('Serial number')\n },\n {\n name: 'notBefore',\n path: 'notBefore',\n header: gettext('Valid from')\n },\n {\n name: 'notAfter',\n path: 'notAfter',\n header: gettext('Expiration date')\n }\n ];\n rows$: Observable<Array<Row & ProvisionedCertificate>> = this.reload$.pipe(\n tap(() => {\n this.reloading = true;\n }),\n map(() => this.route.snapshot.parent.data.contextData as IManagedObject),\n switchMap(device => this.deviceSerialsService.getDeviceProvisionedCertificates(device)),\n map(provisionedCertificates =>\n provisionedCertificates.map(cert => ({\n ...cert,\n id: cert.serialNumber\n }))\n ),\n tap(() => {\n this.reloading = false;\n }),\n shareReplay(1),\n finalize(() => {\n this.reloading = false;\n })\n );\n pagination: Pagination = {\n pageSize: 20,\n currentPage: 1\n };\n actionControls: ActionControl[] = [\n {\n type: 'REVOKE',\n text: gettext('Revoke'),\n icon: 'trash',\n iconClasses: 'text-danger',\n showOnHover: false,\n callback: (item: Row & ProvisionedCertificate) =>\n this.revokeProvisionedCertificates([item.serialNumber])\n }\n ];\n bulkActionControls: BulkActionControl[] = [\n {\n type: 'REVOKE',\n text: gettext('Revoke'),\n icon: 'trash',\n callback: (selectedItemsIds: string[]) => this.revokeProvisionedCertificates(selectedItemsIds)\n }\n ];\n displayOptions: DisplayOptions = {\n filter: false,\n striped: true,\n hover: true,\n bordered: false,\n gridHeader: true\n };\n\n protected readonly PX_ACTIONS = PX_ACTIONS;\n\n constructor(\n private alertService: AlertService,\n private modalService: ModalService,\n private deviceSerialsService: DeviceProvisionedCertificatesService,\n private crlService: CrlService,\n private route: ActivatedRoute,\n private translateService: TranslateService\n ) {}\n\n ngOnInit(): void {\n this.reload();\n }\n\n reload() {\n this.reload$.next();\n }\n\n getExpirationHighlight(item: ProvisionedCertificate) {\n const now = Date.now();\n const notAfter = new Date(item.notAfter).getTime();\n const ninetyDays = 90 * 24 * 60 * 60 * 1000;\n\n const result = {\n expired: false,\n icon: 'calendar',\n textClass: '',\n tooltipText: ''\n };\n\n if (notAfter < now) {\n result.expired = true;\n result.icon = 'warning';\n result.textClass = 'text-muted';\n result.tooltipText = gettext('Certificate expired');\n } else if (notAfter < now + ninetyDays) {\n result.icon = 'warning';\n result.textClass = 'text-danger';\n result.tooltipText = gettext('Certificate expires in less than 90 days');\n }\n\n return result;\n }\n\n async revokeProvisionedCertificates(serialNumbersInHex: string[]) {\n if (serialNumbersInHex && serialNumbersInHex.length > 0) {\n try {\n await this.confirmRevocation(serialNumbersInHex);\n await this.crlService.uploadCrls(\n serialNumbersInHex.map(serialNumber => ({ serialNumberInHex: serialNumber }))\n );\n if (serialNumbersInHex.length === 1) {\n this.alertService.success(gettext('Selected provisioned certificate was revoked.'));\n } else {\n this.alertService.success(gettext('Selected provisioned certificates were revoked.'));\n }\n this.dataGrid.setAllItemsSelected(false);\n } catch (error) {\n this.alertService.addServerFailure(error);\n } finally {\n this.reload();\n }\n }\n }\n\n private async confirmRevocation(serialNumbers: string[]) {\n const hasMany = serialNumbers.length > 1;\n const serialsDisplay = serialNumbers.join(', ');\n\n const title = hasMany\n ? gettext('Revoke provisioned certificates?')\n : gettext('Revoke provisioned certificate?');\n const messageTpl = hasMany\n ? gettext(\n `You are about to revoke provisioned certificates: {{ serialNumbers }}. Do you want to proceed?`\n )\n : gettext(\n `You are about to revoke provisioned certificate {{ serialNumber }}. Do you want to proceed?`\n );\n const message = this.translateService.instant(messageTpl, {\n serialNumbers: serialsDisplay,\n serialNumber: serialsDisplay\n });\n\n return await this.modalService.confirm(title, message, Status.DANGER, {\n ok: gettext('Revoke'),\n cancel: gettext('Cancel')\n });\n }\n}\n","<c8y-action-bar-item [placement]=\"'right'\">\n <button\n class=\"btn btn-link\"\n title=\"{{ 'Reload' | translate }}\"\n type=\"button\"\n (click)=\"reload()\"\n >\n <i\n c8yIcon=\"refresh\"\n [ngClass]=\"{ 'icon-spin': reloading }\"\n ></i>\n {{ 'Reload' | translate }}\n </button>\n</c8y-action-bar-item>\n\n<c8y-data-grid\n [title]=\"tableTitle | translate\"\n #dataGrid\n [columns]=\"columns\"\n [rows]=\"rows$ | async\"\n [pagination]=\"pagination\"\n [actionControls]=\"actionControls\"\n [bulkActionControls]=\"bulkActionControls\"\n [displayOptions]=\"displayOptions\"\n [hideReload]=\"true\"\n [selectable]=\"true\"\n>\n <c8y-ui-empty-state\n [icon]=\"'certificate'\"\n [title]=\"'No provisioned certificates to display.' | translate\"\n *ngIf=\"(rows$ | async)?.length === 0\"\n ></c8y-ui-empty-state>\n\n <c8y-column name=\"serialNumber\">\n <ng-container *c8yCellRendererDef=\"let context\">\n <span\n class=\"text-truncate\"\n title=\"{{ context.property.header | translate }}: {{ context.value }}\"\n >\n {{ context.value }}\n </span>\n </ng-container>\n </c8y-column>\n\n <c8y-column name=\"notBefore\">\n <ng-container *c8yCellRendererDef=\"let context\">\n <span\n class=\"text-truncate\"\n title=\"{{ context.property.header | translate }}: {{ context.value | c8yDate }}\"\n >\n <span *ngIf=\"context.value\">\n <i\n class=\"m-r-4\"\n c8yIcon=\"calendar\"\n ></i>\n <span>{{ context.value | c8yDate }}</span>\n </span>\n </span>\n </ng-container>\n </c8y-column>\n\n <c8y-column name=\"notAfter\">\n <ng-container *c8yCellRendererDef=\"let context\">\n @let expirationHighlight = getExpirationHighlight(context.item);\n <span\n [title]=\"\n (context.property.header | translate) +\n ': ' +\n (context.value | c8yDate) +\n (expirationHighlight?.tooltipText\n ? ' - ' + (expirationHighlight?.tooltipText | translate)\n : '')\n \"\n [ngClass]=\"expirationHighlight?.textClass\"\n >\n <ng-container *ngIf=\"expirationHighlight?.expired; else notExpiredYet\">\n <del>\n <ng-container *ngTemplateOutlet=\"expirationDateTpl\"></ng-container>\n </del>\n </ng-container>\n <ng-template #notExpiredYet>\n <ng-container *ngTemplateOutlet=\"expirationDateTpl\"></ng-container>\n </ng-template>\n <ng-template #expirationDateTpl>\n <i\n class=\"m-r-4\"\n c8yIcon=\"{{ expirationHighlight?.icon }}\"\n *ngIf=\"expirationHighlight?.icon\"\n ></i>\n <span>{{ context.value | c8yDate }}</span>\n </ng-template>\n </span>\n </ng-container>\n </c8y-column>\n</c8y-data-grid>\n","import { NgModule } from '@angular/core';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { CoreModule, hookRoute, ViewContext } from '@c8y/ngx-components';\nimport { PopoverModule } from 'ngx-bootstrap/popover';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport { ButtonsModule } from 'ngx-bootstrap/buttons';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { DeviceProvisionedCertificatesGuard } from './device-provisioned-certificates.guard';\nimport { DeviceTabProvisionedCertificatesComponent } from './device-tab-provisioned-certificates.component';\nimport { DeviceProvisionedCertificatesService } from './device-provisioned-certificates.service';\n\n@NgModule({\n exports: [],\n imports: [\n CoreModule,\n TooltipModule,\n ReactiveFormsModule,\n ButtonsModule,\n PopoverModule,\n DeviceTabProvisionedCertificatesComponent\n ],\n providers: [\n hookRoute([\n {\n context: ViewContext.Device,\n path: 'device-provisioned-certificates',\n component: DeviceTabProvisionedCertificatesComponent,\n label: gettext('x509'),\n icon: 'c8y-device-profile',\n canActivate: [DeviceProvisionedCertificatesGuard]\n }\n ]),\n DeviceProvisionedCertificatesService,\n DeviceProvisionedCertificatesGuard\n ]\n})\nexport class DeviceProvisionedCertificatesModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.DeviceProvisionedCertificatesService","i1","i2.DeviceProvisionedCertificatesService","i3"],"mappings":";;;;;;;;;;;;;;;;MAKa,oCAAoC,CAAA;IAC/C,WAAA,CACU,WAAwB,EACxB,MAAmB,EAAA;QADnB,IAAA,CAAA,WAAW,GAAX,WAAW;QACX,IAAA,CAAA,MAAM,GAAN,MAAM;IACb;IAEH,MAAM,gCAAgC,CACpC,MAAsB,EAAA;QAEtB,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC;;;QAI3D,IAAI,CAAC,cAAc,EAAE;AACnB,YAAA,OAAO,SAAS;QAClB;AAEA,QAAA,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,cAAc,EAAE,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC;QAC1F,OAAO,IAAI,CAAC,uBAAuB;IACrC;IAEQ,MAAM,iBAAiB,CAAC,MAAM,EAAA;QACpC,MAAM,MAAM,GAAG,KAAK;AACpB,QAAA,MAAM,GAAG,GAAG,CAAA,0BAAA,EAA6B,MAAM,CAAC,EAAE,OAAO;AACzD,QAAA,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,CAAC;AACpD,QAAA,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE;AAC7B,QAAA,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,EAAE;AACrB,YAAA,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC;QAC/B;QACA,OAAO,IAAI,CAAC,QAAQ;IACtB;+GA9BW,oCAAoC,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,WAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAApC,oCAAoC,EAAA,CAAA,CAAA;;4FAApC,oCAAoC,EAAA,UAAA,EAAA,CAAA;kBADhD;;;MCCY,kCAAkC,CAAA;AAC7C,IAAA,WAAA,CAAoB,oCAA0E,EAAA;QAA1E,IAAA,CAAA,oCAAoC,GAApC,oCAAoC;IAAyC;IAEjG,MAAM,WAAW,CAAC,KAA6B,EAAA;AAC7C,QAAA,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,WAAW,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW;QAC3E,IAAI,CAAC,WAAW,EAAE;AAChB,YAAA,OAAO,KAAK;QACd;AACA,QAAA,IAAI;YACF,MAAM,uBAAuB,GAC3B,MAAM,IAAI,CAAC,oCAAoC,CAAC,gCAAgC,CAC9E,WAAW,CACZ;AACH,YAAA,OAAO,uBAAuB,EAAE,MAAM,GAAG,CAAC;QAC5C;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,KAAK;QACd;IACF;+GAjBW,kCAAkC,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,oCAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAAlC,kCAAkC,EAAA,CAAA,CAAA;;4FAAlC,kCAAkC,EAAA,UAAA,EAAA,CAAA;kBAD9C;;;MC8CY,yCAAyC,CAAA;IA6EpD,WAAA,CACU,YAA0B,EAC1B,YAA0B,EAC1B,oBAA0D,EAC1D,UAAsB,EACtB,KAAqB,EACrB,gBAAkC,EAAA;QALlC,IAAA,CAAA,YAAY,GAAZ,YAAY;QACZ,IAAA,CAAA,YAAY,GAAZ,YAAY;QACZ,IAAA,CAAA,oBAAoB,GAApB,oBAAoB;QACpB,IAAA,CAAA,UAAU,GAAV,UAAU;QACV,IAAA,CAAA,KAAK,GAAL,KAAK;QACL,IAAA,CAAA,gBAAgB,GAAhB,gBAAgB;QAhF1B,IAAA,CAAA,SAAS,GAAG,KAAK;AACjB,QAAA,IAAA,CAAA,OAAO,GAA0B,IAAI,eAAe,CAAC,IAAI,CAAC;AAE1D,QAAA,IAAA,CAAA,UAAU,GAAG,OAAO,CAAC,0BAA0B,CAAC;AAChD,QAAA,IAAA,CAAA,OAAO,GAAa;AAClB,YAAA;AACE,gBAAA,IAAI,EAAE,cAAc;AACpB,gBAAA,IAAI,EAAE,cAAc;AACpB,gBAAA,MAAM,EAAE,OAAO,CAAC,eAAe;AAChC,aAAA;AACD,YAAA;AACE,gBAAA,IAAI,EAAE,WAAW;AACjB,gBAAA,IAAI,EAAE,WAAW;AACjB,gBAAA,MAAM,EAAE,OAAO,CAAC,YAAY;AAC7B,aAAA;AACD,YAAA;AACE,gBAAA,IAAI,EAAE,UAAU;AAChB,gBAAA,IAAI,EAAE,UAAU;AAChB,gBAAA,MAAM,EAAE,OAAO,CAAC,iBAAiB;AAClC;SACF;QACD,IAAA,CAAA,KAAK,GAAoD,IAAI,CAAC,OAAO,CAAC,IAAI,CACxE,GAAG,CAAC,MAAK;AACP,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI;QACvB,CAAC,CAAC,EACF,GAAG,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,WAA6B,CAAC,EACxE,SAAS,CAAC,MAAM,IAAI,IAAI,CAAC,oBAAoB,CAAC,gCAAgC,CAAC,MAAM,CAAC,CAAC,EACvF,GAAG,CAAC,uBAAuB,IACzB,uBAAuB,CAAC,GAAG,CAAC,IAAI,KAAK;AACnC,YAAA,GAAG,IAAI;YACP,EAAE,EAAE,IAAI,CAAC;AACV,SAAA,CAAC,CAAC,CACJ,EACD,GAAG,CAAC,MAAK;AACP,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK;QACxB,CAAC,CAAC,EACF,WAAW,CAAC,CAAC,CAAC,EACd,QAAQ,CAAC,MAAK;AACZ,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK;QACxB,CAAC,CAAC,CACH;AACD,QAAA,IAAA,CAAA,UAAU,GAAe;AACvB,YAAA,QAAQ,EAAE,EAAE;AACZ,YAAA,WAAW,EAAE;SACd;AACD,QAAA,IAAA,CAAA,cAAc,GAAoB;AAChC,YAAA;AACE,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC;AACvB,gBAAA,IAAI,EAAE,OAAO;AACb,gBAAA,WAAW,EAAE,aAAa;AAC1B,gBAAA,WAAW,EAAE,KAAK;AAClB,gBAAA,QAAQ,EAAE,CAAC,IAAkC,KAC3C,IAAI,CAAC,6BAA6B,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC;AACzD;SACF;AACD,QAAA,IAAA,CAAA,kBAAkB,GAAwB;AACxC,YAAA;AACE,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC;AACvB,gBAAA,IAAI,EAAE,OAAO;gBACb,QAAQ,EAAE,CAAC,gBAA0B,KAAK,IAAI,CAAC,6BAA6B,CAAC,gBAAgB;AAC9F;SACF;AACD,QAAA,IAAA,CAAA,cAAc,GAAmB;AAC/B,YAAA,MAAM,EAAE,KAAK;AACb,YAAA,OAAO,EAAE,IAAI;AACb,YAAA,KAAK,EAAE,IAAI;AACX,YAAA,QAAQ,EAAE,KAAK;AACf,YAAA,UAAU,EAAE;SACb;QAEkB,IAAA,CAAA,UAAU,GAAG,UAAU;IASvC;IAEH,QAAQ,GAAA;QACN,IAAI,CAAC,MAAM,EAAE;IACf;IAEA,MAAM,GAAA;AACJ,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;IACrB;AAEA,IAAA,sBAAsB,CAAC,IAA4B,EAAA;AACjD,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;AACtB,QAAA,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,EAAE;QAClD,MAAM,UAAU,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI;AAE3C,QAAA,MAAM,MAAM,GAAG;AACb,YAAA,OAAO,EAAE,KAAK;AACd,YAAA,IAAI,EAAE,UAAU;AAChB,YAAA,SAAS,EAAE,EAAE;AACb,YAAA,WAAW,EAAE;SACd;AAED,QAAA,IAAI,QAAQ,GAAG,GAAG,EAAE;AAClB,YAAA,MAAM,CAAC,OAAO,GAAG,IAAI;AACrB,YAAA,MAAM,CAAC,IAAI,GAAG,SAAS;AACvB,YAAA,MAAM,CAAC,SAAS,GAAG,YAAY;AAC/B,YAAA,MAAM,CAAC,WAAW,GAAG,OAAO,CAAC,qBAAqB,CAAC;QACrD;AAAO,aAAA,IAAI,QAAQ,GAAG,GAAG,GAAG,UAAU,EAAE;AACtC,YAAA,MAAM,CAAC,IAAI,GAAG,SAAS;AACvB,YAAA,MAAM,CAAC,SAAS,GAAG,aAAa;AAChC,YAAA,MAAM,CAAC,WAAW,GAAG,OAAO,CAAC,0CAA0C,CAAC;QAC1E;AAEA,QAAA,OAAO,MAAM;IACf;IAEA,MAAM,6BAA6B,CAAC,kBAA4B,EAAA;QAC9D,IAAI,kBAAkB,IAAI,kBAAkB,CAAC,MAAM,GAAG,CAAC,EAAE;AACvD,YAAA,IAAI;AACF,gBAAA,MAAM,IAAI,CAAC,iBAAiB,CAAC,kBAAkB,CAAC;gBAChD,MAAM,IAAI,CAAC,UAAU,CAAC,UAAU,CAC9B,kBAAkB,CAAC,GAAG,CAAC,YAAY,KAAK,EAAE,iBAAiB,EAAE,YAAY,EAAE,CAAC,CAAC,CAC9E;AACD,gBAAA,IAAI,kBAAkB,CAAC,MAAM,KAAK,CAAC,EAAE;oBACnC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,+CAA+C,CAAC,CAAC;gBACrF;qBAAO;oBACL,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,iDAAiD,CAAC,CAAC;gBACvF;AACA,gBAAA,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,KAAK,CAAC;YAC1C;YAAE,OAAO,KAAK,EAAE;AACd,gBAAA,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,KAAK,CAAC;YAC3C;oBAAU;gBACR,IAAI,CAAC,MAAM,EAAE;YACf;QACF;IACF;IAEQ,MAAM,iBAAiB,CAAC,aAAuB,EAAA;AACrD,QAAA,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,GAAG,CAAC;QACxC,MAAM,cAAc,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;QAE/C,MAAM,KAAK,GAAG;AACZ,cAAE,OAAO,CAAC,kCAAkC;AAC5C,cAAE,OAAO,CAAC,iCAAiC,CAAC;QAC9C,MAAM,UAAU,GAAG;AACjB,cAAE,OAAO,CACL,CAAA,8FAAA,CAAgG;AAEpG,cAAE,OAAO,CACL,CAAA,2FAAA,CAA6F,CAC9F;QACL,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,UAAU,EAAE;AACxD,YAAA,aAAa,EAAE,cAAc;AAC7B,YAAA,YAAY,EAAE;AACf,SAAA,CAAC;AAEF,QAAA,OAAO,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE;AACpE,YAAA,EAAE,EAAE,OAAO,CAAC,QAAQ,CAAC;AACrB,YAAA,MAAM,EAAE,OAAO,CAAC,QAAQ;AACzB,SAAA,CAAC;IACJ;+GApKW,yCAAyC,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,IAAA,CAAA,YAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,IAAA,CAAA,YAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,oCAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,cAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAAzC,yCAAyC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,8BAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,UAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,UAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EClDtD,42FA+FA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,ED3DI,sBAAsB,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,UAAA,EAAA,SAAA,EAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACtB,aAAa,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACb,OAAO,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACP,iBAAiB,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,oBAAA,EAAA,mBAAA,EAAA,YAAA,EAAA,SAAA,EAAA,SAAA,EAAA,MAAA,EAAA,YAAA,EAAA,qBAAA,EAAA,gBAAA,EAAA,wBAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,qBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,oBAAA,EAAA,sBAAA,EAAA,YAAA,EAAA,yBAAA,EAAA,oBAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,YAAA,EAAA,oBAAA,EAAA,yBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,EAAA,eAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,aAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,sBAAA,EAAA,qBAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,mBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACjB,IAAI,6FACJ,mBAAmB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,eAAe,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACf,wBAAwB,EAAA,QAAA,EAAA,sBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAIxB,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAHhB,gBAAgB,EAAA,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAChB,SAAS,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EACT,QAAQ,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAIC,yCAAyC,EAAA,UAAA,EAAA,CAAA;kBAlBrD,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,8BAA8B,EAAA,OAAA,EAE/B;wBACP,sBAAsB;wBACtB,aAAa;wBACb,OAAO;wBACP,iBAAiB;wBACjB,IAAI;wBACJ,mBAAmB;wBACnB,eAAe;wBACf,wBAAwB;wBACxB,gBAAgB;wBAChB,SAAS;wBACT,QAAQ;wBACR;AACD,qBAAA,EAAA,QAAA,EAAA,42FAAA,EAAA;qPAGsB,QAAQ,EAAA,CAAA;sBAA9B,SAAS;uBAAC,UAAU;;;MEfV,mCAAmC,CAAA;+GAAnC,mCAAmC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAnC,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mCAAmC,YAtB5C,UAAU;YACV,aAAa;YACb,mBAAmB;YACnB,aAAa;YACb,aAAa;YACb,yCAAyC,CAAA,EAAA,CAAA,CAAA;AAiBhC,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mCAAmC,EAAA,SAAA,EAfnC;AACT,YAAA,SAAS,CAAC;AACR,gBAAA;oBACE,OAAO,EAAE,WAAW,CAAC,MAAM;AAC3B,oBAAA,IAAI,EAAE,iCAAiC;AACvC,oBAAA,SAAS,EAAE,yCAAyC;AACpD,oBAAA,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC;AACtB,oBAAA,IAAI,EAAE,oBAAoB;oBAC1B,WAAW,EAAE,CAAC,kCAAkC;AACjD;aACF,CAAC;YACF,oCAAoC;YACpC;AACD,SAAA,EAAA,OAAA,EAAA,CApBC,UAAU;YACV,aAAa;YACb,mBAAmB;YACnB,aAAa;YACb,aAAa;YACb,yCAAyC,CAAA,EAAA,CAAA,CAAA;;4FAiBhC,mCAAmC,EAAA,UAAA,EAAA,CAAA;kBAzB/C,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE,EAAE;AACX,oBAAA,OAAO,EAAE;wBACP,UAAU;wBACV,aAAa;wBACb,mBAAmB;wBACnB,aAAa;wBACb,aAAa;wBACb;AACD,qBAAA;AACD,oBAAA,SAAS,EAAE;AACT,wBAAA,SAAS,CAAC;AACR,4BAAA;gCACE,OAAO,EAAE,WAAW,CAAC,MAAM;AAC3B,gCAAA,IAAI,EAAE,iCAAiC;AACvC,gCAAA,SAAS,EAAE,yCAAyC;AACpD,gCAAA,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC;AACtB,gCAAA,IAAI,EAAE,oBAAoB;gCAC1B,WAAW,EAAE,CAAC,kCAAkC;AACjD;yBACF,CAAC;wBACF,oCAAoC;wBACpC;AACD;AACF,iBAAA;;;ACnCD;;AAEG;;;;"}
1
+ {"version":3,"file":"c8y-ngx-components-device-provisioned-certificates.mjs","sources":["../../device-provisioned-certificates/device-provisioned-certificates.service.ts","../../device-provisioned-certificates/device-provisioned-certificates.guard.ts","../../device-provisioned-certificates/device-tab-provisioned-certificates.component.ts","../../device-provisioned-certificates/device-tab-provisioned-certificates.component.html","../../device-provisioned-certificates/device-provisioned-certificates.module.ts","../../device-provisioned-certificates/c8y-ngx-components-device-provisioned-certificates.ts"],"sourcesContent":["import { FetchClient, IManagedObject, UserService } from '@c8y/client';\nimport { Injectable } from '@angular/core';\nimport { ProvisionedCertificate } from './device-tab-provisioned-certificates.component';\n\n@Injectable()\nexport class DeviceProvisionedCertificatesService {\n constructor(\n private userService: UserService,\n private client: FetchClient\n ) {}\n\n async getDeviceProvisionedCertificates(\n device: IManagedObject\n ): Promise<ProvisionedCertificate[] | undefined> {\n const deviceUserName = await this.getDeviceUserName(device);\n\n // Avoid additional requests if the device does not have a user.\n // This case does not really occur in real-life scenarios, but e.g. in cypress tests only\n if (!deviceUserName) {\n return undefined;\n }\n\n const { data } = await this.userService.detail(deviceUserName, { withCertificates: true });\n return data.provisionedCertificates;\n }\n\n private async getDeviceUserName(device): Promise<string> {\n const method = 'GET';\n const url = `/inventory/managedObjects/${device.id}/user`;\n const res = await this.client.fetch(url, { method });\n const data = await res.json();\n if (res.status >= 400) {\n throw new Error(data.message);\n }\n return data.userName;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { DeviceProvisionedCertificatesService } from './device-provisioned-certificates.service';\nimport { ActivatedRouteSnapshot } from '@angular/router';\n\n@Injectable()\nexport class DeviceProvisionedCertificatesGuard {\n constructor(private deviceProvisionedCertificatesService: DeviceProvisionedCertificatesService) {}\n\n async canActivate(route: ActivatedRouteSnapshot) {\n const contextData = route.data.contextData || route.parent.data.contextData;\n if (!contextData) {\n return false;\n }\n try {\n const provisionedCertificates =\n await this.deviceProvisionedCertificatesService.getDeviceProvisionedCertificates(\n contextData\n );\n return provisionedCertificates?.length > 0;\n } catch (error) {\n return false;\n }\n }\n}\n","import { Component, OnInit, ViewChild } from '@angular/core';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport {\n ActionControl,\n AlertService,\n BulkActionControl,\n Column,\n DataGridComponent,\n DisplayOptions,\n ModalService,\n Pagination,\n PX_ACTIONS,\n Row,\n Status,\n ActionBarItemComponent,\n IconDirective,\n EmptyStateComponent,\n ColumnDirective,\n CellRendererDefDirective,\n C8yTranslatePipe,\n DatePipe\n} from '@c8y/ngx-components';\nimport { DeviceProvisionedCertificatesService } from './device-provisioned-certificates.service';\nimport { ActivatedRoute } from '@angular/router';\nimport { CrlService, IManagedObject } from '@c8y/client';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { switchMap, map, tap, finalize, shareReplay } from 'rxjs/operators';\nimport { TranslateService } from '@ngx-translate/core';\nimport { NgClass, NgIf, AsyncPipe, NgTemplateOutlet } from '@angular/common';\n\nexport type ProvisionedCertificate = { serialNumber: string; notBefore: string; notAfter: string };\n\n@Component({\n selector: 'device-tab-serials-component',\n templateUrl: './device-tab-provisioned-certificates.component.html',\n imports: [\n ActionBarItemComponent,\n IconDirective,\n NgClass,\n DataGridComponent,\n NgIf,\n EmptyStateComponent,\n ColumnDirective,\n CellRendererDefDirective,\n C8yTranslatePipe,\n AsyncPipe,\n DatePipe,\n NgTemplateOutlet\n ]\n})\nexport class DeviceTabProvisionedCertificatesComponent implements OnInit {\n @ViewChild('dataGrid') dataGrid: DataGridComponent;\n\n reloading = false;\n reload$: BehaviorSubject<void> = new BehaviorSubject(null);\n\n tableTitle = gettext('Provisioned certificates');\n columns: Column[] = [\n {\n name: 'serialNumber',\n path: 'serialNumber',\n header: gettext('Serial number')\n },\n {\n name: 'notBefore',\n path: 'notBefore',\n header: gettext('Valid from')\n },\n {\n name: 'notAfter',\n path: 'notAfter',\n header: gettext('Expiration date')\n }\n ];\n rows$: Observable<Array<Row & ProvisionedCertificate>> = this.reload$.pipe(\n tap(() => {\n this.reloading = true;\n }),\n map(() => this.route.snapshot.parent.data.contextData as IManagedObject),\n switchMap(device => this.deviceSerialsService.getDeviceProvisionedCertificates(device)),\n map(provisionedCertificates =>\n provisionedCertificates.map(cert => ({\n ...cert,\n id: cert.serialNumber\n }))\n ),\n tap(() => {\n this.reloading = false;\n }),\n shareReplay(1),\n finalize(() => {\n this.reloading = false;\n })\n );\n pagination: Pagination = {\n pageSize: 20,\n currentPage: 1\n };\n actionControls: ActionControl[] = [\n {\n type: 'REVOKE',\n text: gettext('Revoke'),\n icon: 'trash',\n iconClasses: 'text-danger',\n showOnHover: false,\n callback: (item: Row & ProvisionedCertificate) =>\n this.revokeProvisionedCertificates([item.serialNumber])\n }\n ];\n bulkActionControls: BulkActionControl[] = [\n {\n type: 'REVOKE',\n text: gettext('Revoke'),\n icon: 'trash',\n callback: (selectedItemsIds: string[]) => this.revokeProvisionedCertificates(selectedItemsIds)\n }\n ];\n displayOptions: DisplayOptions = {\n filter: false,\n striped: true,\n hover: true,\n bordered: false,\n gridHeader: true\n };\n\n protected readonly PX_ACTIONS = PX_ACTIONS;\n\n constructor(\n private alertService: AlertService,\n private modalService: ModalService,\n private deviceSerialsService: DeviceProvisionedCertificatesService,\n private crlService: CrlService,\n private route: ActivatedRoute,\n private translateService: TranslateService\n ) {}\n\n ngOnInit(): void {\n this.reload();\n }\n\n reload() {\n this.reload$.next();\n }\n\n getExpirationHighlight(item: ProvisionedCertificate) {\n const now = Date.now();\n const notAfter = new Date(item.notAfter).getTime();\n const ninetyDays = 90 * 24 * 60 * 60 * 1000;\n\n const result = {\n expired: false,\n icon: 'calendar',\n textClass: '',\n tooltipText: ''\n };\n\n if (notAfter < now) {\n result.expired = true;\n result.icon = 'warning';\n result.textClass = 'text-muted';\n result.tooltipText = gettext('Certificate expired');\n } else if (notAfter < now + ninetyDays) {\n result.icon = 'warning';\n result.textClass = 'text-danger';\n result.tooltipText = gettext('Certificate expires in less than 90 days');\n }\n\n return result;\n }\n\n async revokeProvisionedCertificates(serialNumbersInHex: string[]) {\n if (serialNumbersInHex && serialNumbersInHex.length > 0) {\n try {\n await this.confirmRevocation(serialNumbersInHex);\n await this.crlService.uploadCrls(\n serialNumbersInHex.map(serialNumber => ({ serialNumberInHex: serialNumber }))\n );\n if (serialNumbersInHex.length === 1) {\n this.alertService.success(gettext('Selected provisioned certificate was revoked.'));\n } else {\n this.alertService.success(gettext('Selected provisioned certificates were revoked.'));\n }\n this.dataGrid.setAllItemsSelected(false);\n } catch (error) {\n this.alertService.addServerFailure(error);\n } finally {\n this.reload();\n }\n }\n }\n\n private async confirmRevocation(serialNumbers: string[]) {\n const hasMany = serialNumbers.length > 1;\n const serialsDisplay = serialNumbers.join(', ');\n\n const title = hasMany\n ? gettext('Revoke provisioned certificates?')\n : gettext('Revoke provisioned certificate?');\n const messageTpl = hasMany\n ? gettext(\n `You are about to revoke provisioned certificates: {{ serialNumbers }}. Do you want to proceed?`\n )\n : gettext(\n `You are about to revoke provisioned certificate {{ serialNumber }}. Do you want to proceed?`\n );\n const message = this.translateService.instant(messageTpl, {\n serialNumbers: serialsDisplay,\n serialNumber: serialsDisplay\n });\n\n return await this.modalService.confirm(title, message, Status.DANGER, {\n ok: gettext('Revoke'),\n cancel: gettext('Cancel')\n });\n }\n}\n","<c8y-action-bar-item [placement]=\"'right'\">\n <button\n class=\"btn btn-link\"\n title=\"{{ 'Reload' | translate }}\"\n type=\"button\"\n (click)=\"reload()\"\n >\n <i\n c8yIcon=\"refresh\"\n [ngClass]=\"{ 'icon-spin': reloading }\"\n ></i>\n {{ 'Reload' | translate }}\n </button>\n</c8y-action-bar-item>\n\n<c8y-data-grid\n [title]=\"tableTitle | translate\"\n #dataGrid\n [columns]=\"columns\"\n [rows]=\"rows$ | async\"\n [pagination]=\"pagination\"\n [actionControls]=\"actionControls\"\n [bulkActionControls]=\"bulkActionControls\"\n [displayOptions]=\"displayOptions\"\n [hideReload]=\"true\"\n [selectable]=\"true\"\n>\n <c8y-ui-empty-state\n [icon]=\"'certificate'\"\n [title]=\"'No provisioned certificates to display.' | translate\"\n *ngIf=\"(rows$ | async)?.length === 0\"\n ></c8y-ui-empty-state>\n\n <c8y-column name=\"serialNumber\">\n <ng-container *c8yCellRendererDef=\"let context\">\n <span\n class=\"text-truncate\"\n title=\"{{ context.property.header | translate }}: {{ context.value }}\"\n >\n {{ context.value }}\n </span>\n </ng-container>\n </c8y-column>\n\n <c8y-column name=\"notBefore\">\n <ng-container *c8yCellRendererDef=\"let context\">\n <span\n class=\"text-truncate\"\n title=\"{{ context.property.header | translate }}: {{ context.value | c8yDate }}\"\n >\n <span *ngIf=\"context.value\">\n <i\n class=\"m-r-4\"\n c8yIcon=\"calendar\"\n ></i>\n <span>{{ context.value | c8yDate }}</span>\n </span>\n </span>\n </ng-container>\n </c8y-column>\n\n <c8y-column name=\"notAfter\">\n <ng-container *c8yCellRendererDef=\"let context\">\n @let expirationHighlight = getExpirationHighlight(context.item);\n <span\n [title]=\"\n (context.property.header | translate) +\n ': ' +\n (context.value | c8yDate) +\n (expirationHighlight?.tooltipText\n ? ' - ' + (expirationHighlight?.tooltipText | translate)\n : '')\n \"\n [ngClass]=\"expirationHighlight?.textClass\"\n >\n <ng-container *ngIf=\"expirationHighlight?.expired; else notExpiredYet\">\n <del>\n <ng-container *ngTemplateOutlet=\"expirationDateTpl\"></ng-container>\n </del>\n </ng-container>\n <ng-template #notExpiredYet>\n <ng-container *ngTemplateOutlet=\"expirationDateTpl\"></ng-container>\n </ng-template>\n <ng-template #expirationDateTpl>\n <i\n class=\"m-r-4\"\n c8yIcon=\"{{ expirationHighlight?.icon }}\"\n *ngIf=\"expirationHighlight?.icon\"\n ></i>\n <span>{{ context.value | c8yDate }}</span>\n </ng-template>\n </span>\n </ng-container>\n </c8y-column>\n</c8y-data-grid>\n","import { NgModule } from '@angular/core';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { CoreModule, hookRoute, ViewContext } from '@c8y/ngx-components';\nimport { PopoverModule } from 'ngx-bootstrap/popover';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport { ButtonsModule } from 'ngx-bootstrap/buttons';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { DeviceProvisionedCertificatesGuard } from './device-provisioned-certificates.guard';\nimport { DeviceTabProvisionedCertificatesComponent } from './device-tab-provisioned-certificates.component';\nimport { DeviceProvisionedCertificatesService } from './device-provisioned-certificates.service';\n\n@NgModule({\n exports: [],\n imports: [\n CoreModule,\n TooltipModule,\n ReactiveFormsModule,\n ButtonsModule,\n PopoverModule,\n DeviceTabProvisionedCertificatesComponent\n ],\n providers: [\n hookRoute([\n {\n context: ViewContext.Device,\n path: 'device-provisioned-certificates',\n component: DeviceTabProvisionedCertificatesComponent,\n label: gettext('x509'),\n icon: 'c8y-device-profile',\n canActivate: [DeviceProvisionedCertificatesGuard]\n }\n ]),\n DeviceProvisionedCertificatesService,\n DeviceProvisionedCertificatesGuard\n ]\n})\nexport class DeviceProvisionedCertificatesModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.DeviceProvisionedCertificatesService","i1","i2.DeviceProvisionedCertificatesService","i3"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"c8y-ngx-components-device-shell.mjs","sources":["../../device-shell/command-templates/command-templates.directive.ts","../../device-shell/command-templates/command-templates.component.ts","../../device-shell/command-templates/command-templates.module.ts","../../device-shell/device-shell.guard.ts","../../device-shell/shared/device-shell.model.ts","../../device-shell/shared/device-shell.service.ts","../../device-shell/shared/device-shell-shared.module.ts","../../device-shell/shell/shell.component.ts","../../device-shell/shell/shell.component.html","../../device-shell/shell/shell.module.ts","../../device-shell/device-shell.module.ts","../../device-shell/c8y-ngx-components-device-shell.ts"],"sourcesContent":["import { Directive, ElementRef, EventEmitter, Injector, Output } from '@angular/core';\nimport { UpgradeComponent } from '@angular/upgrade/static';\n\n@Directive({ selector: 'c8y-command-templates-directive' })\nexport class CommandTemplates extends UpgradeComponent {\n @Output()\n close: EventEmitter<void>;\n\n @Output()\n dismiss: EventEmitter<void>;\n\n constructor(elementRef: ElementRef, injector: Injector) {\n super('c8yCommandTemplates', elementRef, injector);\n }\n}\n","import { Component, EventEmitter, Injector } from '@angular/core';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { CommandTemplates } from './command-templates.directive';\n\n/* https://stackoverflow.com/a/65290658 */\nexport function rootScopeCommandTemplateFactory($injector: Injector) {\n return $injector.get('$rootScope').$new();\n}\n\n@Component({\n selector: 'c8y-command-templates',\n template: `<c8y-command-templates-directive\n (close)=\"modalRef.hide(); onTemplateSelected.next($event)\"\n (dismiss)=\"modalRef.hide()\"\n ></c8y-command-templates-directive>`,\n providers: [\n {\n deps: ['$injector'],\n provide: '$scope',\n useFactory: rootScopeCommandTemplateFactory\n }\n ],\n imports: [CommandTemplates]\n})\nexport class CommandTemplatesComponent {\n onTemplateSelected: EventEmitter<object> = new EventEmitter();\n\n constructor(public modalRef: BsModalRef) {}\n}\n","import { NgModule } from '@angular/core';\nimport { CommandTemplatesComponent } from './command-templates.component';\nimport { CommandTemplates } from './command-templates.directive';\n\n@NgModule({\n imports: [CommandTemplates, CommandTemplatesComponent],\n exports: [CommandTemplatesComponent]\n})\nexport class CommandTemplatesModule {}\n","import { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot } from '@angular/router';\n\n@Injectable()\nexport class DeviceShellGuard {\n private readonly operation = 'c8y_Command';\n\n canActivate(route: ActivatedRouteSnapshot) {\n const device = route.data.contextData || route.parent.data.contextData;\n const supportedOperations = (device && device.c8y_SupportedOperations) || [];\n return supportedOperations.indexOf(this.operation) >= 0;\n }\n}\n","export enum CommandDeliveryType {\n DEFAULT = 'Default',\n SMS = 'SMS'\n}\n\nexport interface DeliveryType {\n name: string;\n default?: boolean;\n}\n\nexport interface Command {\n id: string;\n name: string;\n text: string;\n deliveryTypes: string[];\n command: string;\n category: string;\n}\n","import { Injectable } from '@angular/core';\nimport { IOperation, IResult, OperationService } from '@c8y/client';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { OptionsService } from '@c8y/ngx-components';\nimport { Command, CommandDeliveryType, DeliveryType } from './device-shell.model';\n\n@Injectable()\nexport class DeviceShellService {\n constructor(\n private optionsService: OptionsService,\n private operationService: OperationService\n ) {}\n\n getDeliveryTypes(): DeliveryType[] {\n return [\n {\n name: gettext(CommandDeliveryType.DEFAULT),\n default: true\n },\n {\n name: gettext(CommandDeliveryType.SMS)\n }\n ];\n }\n\n async canSendCommandsViaSMS(): Promise<boolean> {\n return !!(await this.optionsService.getSystemOption('messaging', 'provider', false));\n }\n\n createCommandOperation(\n deviceId: string,\n command: Command,\n deliveryType: CommandDeliveryType\n ): Promise<IResult<IOperation>> {\n const operation: IOperation = {\n deviceId,\n description: gettext('Execute shell command') + (command.name ? `: ${command.name}` : ''),\n deliveryType: deliveryType === CommandDeliveryType.SMS ? CommandDeliveryType.SMS : undefined,\n c8y_Command: {\n text: command.text\n }\n };\n return this.operationService.create(operation);\n }\n}\n","import { NgModule } from '@angular/core';\nimport { DeviceShellService } from './device-shell.service';\n\n@NgModule({\n providers: [DeviceShellService]\n})\nexport class DeviceShellSharedModule {}\n","import { Component, OnDestroy, OnInit } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { IManagedObject, IOperation, IResultList, OperationService } from '@c8y/client';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport {\n AlertService,\n ManagedObjectRealtimeService,\n OperationRealtimeService,\n ActionBarItemComponent,\n RealtimeButtonComponent,\n DeviceStatusComponent,\n C8yTranslateDirective,\n C8yTranslatePipe\n} from '@c8y/ngx-components';\nimport { includes, isEmpty } from 'lodash-es';\nimport { BsModalRef, BsModalService } from 'ngx-bootstrap/modal';\nimport { BehaviorSubject, Observable, of, pipe, Subject } from 'rxjs';\nimport { filter, map, startWith, takeUntil } from 'rxjs/operators';\nimport { CommandTemplatesComponent } from '../command-templates';\nimport { Command, CommandDeliveryType, DeliveryType, DeviceShellService } from '../shared';\nimport { FormsModule } from '@angular/forms';\nimport { NgFor, NgIf, AsyncPipe } from '@angular/common';\nimport { OperationsTimelineComponent } from '@c8y/ngx-components/operations/operations-timeline';\n\n@Component({\n selector: 'c8y-device-shell',\n templateUrl: 'shell.component.html',\n providers: [OperationRealtimeService, ManagedObjectRealtimeService],\n imports: [\n ActionBarItemComponent,\n RealtimeButtonComponent,\n DeviceStatusComponent,\n FormsModule,\n NgFor,\n NgIf,\n OperationsTimelineComponent,\n C8yTranslateDirective,\n AsyncPipe,\n C8yTranslatePipe\n ]\n})\nexport class DeviceShellComponent implements OnInit, OnDestroy {\n device: IManagedObject = this.route.snapshot.parent.data.contextData;\n device$: Observable<IManagedObject> = of({} as any);\n deliveryTypes: Array<DeliveryType & { isSupportedByCommand?: boolean }> = (\n this.service.getDeliveryTypes() || []\n ).map(deliveryType => ({ ...deliveryType, isSupportedByCommand: true }));\n command: Command = {} as Command;\n smsEnabled = false;\n sendingCommand$: BehaviorSubject<boolean> = new BehaviorSubject(false);\n operations: IResultList<IOperation>;\n filterPipe = pipe(\n map((operations: IOperation[]) =>\n (operations || []).filter((operation: IOperation) => !!operation.c8y_Command)\n )\n );\n\n executeViaLabel = gettext('Execute via ({{deliveryType}})');\n\n private destroyed$: Subject<void> = new Subject();\n\n constructor(\n public service: DeviceShellService,\n public operationRealtime: OperationRealtimeService,\n private moRealtime: ManagedObjectRealtimeService,\n private operationService: OperationService,\n private route: ActivatedRoute,\n private modalService: BsModalService,\n private alertService: AlertService\n ) {}\n\n async ngOnInit(): Promise<void> {\n this.smsEnabled = await this.service.canSendCommandsViaSMS();\n\n this.device$ = this.moRealtime.onUpdate$(this.device.id).pipe(startWith(this.device));\n\n this.operations = await this.operationService.list({\n deviceId: this.device.id,\n fragmentType: 'c8y_Command',\n dateFrom: new Date(0).toISOString(),\n dateTo: new Date().toISOString(),\n pageSize: 50,\n withTotalPages: true,\n revert: true\n });\n\n this.operationRealtime\n .onCreate$(this.device.id)\n .pipe(takeUntil(this.destroyed$))\n .subscribe(() => this.alertService.success(gettext('Command sent.')));\n\n this.operationRealtime\n .onUpdate$(this.device.id)\n .pipe(\n filter(op => op.failureReason !== 'Operation cancelled by user.'), // avoid duplicate alerts\n takeUntil(this.destroyed$)\n )\n .subscribe(() => this.alertService.success(gettext('Command status updated.')));\n }\n\n getPredefinedCommand() {\n const modal: BsModalRef<CommandTemplatesComponent> = this.modalService.show(\n CommandTemplatesComponent,\n {\n ariaDescribedby: 'modal-body',\n ariaLabelledBy: 'modal-title'\n }\n );\n modal.content.onTemplateSelected.pipe(takeUntil(this.destroyed$)).subscribe(result => {\n this.command = { ...(result as any).commandTemplate } as Command;\n this.deliveryTypes = this.deliveryTypes.map(deliveryType => ({\n ...deliveryType,\n isSupportedByCommand:\n isEmpty(this.command.deliveryTypes) ||\n includes(this.command.deliveryTypes, deliveryType.name)\n }));\n });\n }\n\n resetSupportedDeliveryTypes(): void {\n this.deliveryTypes = (this.service.getDeliveryTypes() || []).map(deliveryType => ({\n ...deliveryType,\n isSupportedByCommand: true\n }));\n }\n\n async execute(commandDeliveryType): Promise<void> {\n const useSMS = commandDeliveryType === CommandDeliveryType.SMS;\n if (useSMS && !this.smsEnabled) {\n this.alertService.warning(gettext('SMS transport is not configured.'));\n return;\n }\n this.sendingCommand$.next(true);\n\n await this.service.createCommandOperation(this.device.id, this.command, commandDeliveryType);\n\n this.command.text = '';\n this.command.name = '';\n this.resetSupportedDeliveryTypes();\n this.sendingCommand$.next(false);\n }\n\n ngOnDestroy(): void {\n this.destroyed$.next();\n this.destroyed$.complete();\n }\n}\n","<c8y-action-bar-item [placement]=\"'right'\">\n <c8y-realtime-btn [service]=\"operationRealtime\"></c8y-realtime-btn>\n</c8y-action-bar-item>\n\n<div class=\"card content-fullpage d-grid grid__col--6-6--md\">\n <div class=\"inner-scroll d-flex d-col bg-level-0\">\n <div class=\"card-header large-padding separator sticky-top\">\n <div class=\"card-title\">\n {{ 'Command' | translate }}\n </div>\n </div>\n\n <div class=\"card-block d-flex d-col flex-grow large-padding\">\n <div class=\"d-flex p-b-16\">\n <button\n class=\"btn btn-default btn-sm\"\n type=\"button\"\n (click)=\"getPredefinedCommand()\"\n [title]=\"'Display a list of predefined commands' | translate\"\n data-cy=\"shell--predefined-commands\"\n >\n {{ 'Predefined commands' | translate }}\n </button>\n\n <div class=\"m-l-auto\">\n <device-status [mo]=\"device$ | async\"></device-status>\n </div>\n </div>\n <textarea\n [attr.aria-label]=\"'Commands' | translate\"\n class=\"form-control inner-scroll flex-grow bg-level-2 text-monospace\"\n [(ngModel)]=\"command.text\"\n data-cy=\"shell-component--commands\"\n (ngModelChange)=\"$event || resetSupportedDeliveryTypes()\"\n placeholder=\"{{ 'Add commands or use predefined commands above.' | translate }}\"\n ></textarea>\n </div>\n\n <div class=\"card-footer large-padding separator\">\n <ng-container *ngFor=\"let deliveryType of deliveryTypes\">\n <button\n class=\"btn btn-primary\"\n type=\"button\"\n *ngIf=\"deliveryType.isSupportedByCommand\"\n [disabled]=\"!command?.text || (sendingCommand$ | async)\"\n (click)=\"execute(deliveryType.name)\"\n >\n <span\n [title]=\"\n deliveryType.default\n ? ('Execute' | translate)\n : (executeViaLabel | translate: { deliveryType: deliveryType.name })\n \"\n >\n {{\n deliveryType.default\n ? ('Execute' | translate)\n : (executeViaLabel | translate: { deliveryType: deliveryType.name })\n }}\n </span>\n </button>\n </ng-container>\n </div>\n </div>\n <div class=\"inner-scroll bg-level-1\">\n <div class=\"card-header large-padding separator sticky-top\">\n <div class=\"card-title\">\n {{ 'Operations' | translate }}\n </div>\n </div>\n <div class=\"card-block large-padding\">\n <c8y-operations-timeline\n [operations]=\"operations\"\n [sourceId]=\"device.id\"\n [filterPipe]=\"filterPipe\"\n [bodyTemplate]=\"timelineItemBody\"\n [footerTemplates]=\"[timelineItemFooter]\"\n [propertiesToHide]=\"['c8y_Command']\"\n ></c8y-operations-timeline>\n <ng-template #timelineItemBody let-operation>\n <small>{{ operation.c8y_Command?.text || operation.description }}</small>\n </ng-template>\n <ng-template #timelineItemFooter let-operation>\n <div *ngIf=\"operation.c8y_Command?.text\">\n <div class=\"legend form-block\" translate>Command</div>\n <!-- Keep this in a single line since `pre-text` will preserve all whitespaces in the `pre` tag.-->\n <pre class=\"p-8 text-pre\"><code>{{operation.c8y_Command.text}}</code></pre>\n </div>\n <div *ngIf=\"operation.c8y_Command?.result\">\n <div class=\"legend form-block\" translate>Response</div>\n <!-- Keep this in a single line since `pre-text` will preserve all whitespaces in the `pre` tag.-->\n <pre class=\"p-8 text-pre\"><code>{{operation.c8y_Command.result}}</code></pre>\n </div>\n </ng-template>\n </div>\n </div>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { CoreModule } from '@c8y/ngx-components';\nimport { OperationsTimelineModule } from '@c8y/ngx-components/operations/operations-timeline';\nimport { CommandTemplatesModule } from '../command-templates';\nimport { DeviceShellSharedModule } from '../shared';\nimport { DeviceShellComponent } from './shell.component';\n\n@NgModule({\n imports: [\n CommonModule,\n CoreModule,\n OperationsTimelineModule,\n CommandTemplatesModule,\n DeviceShellSharedModule,\n DeviceShellComponent\n ],\n exports: [DeviceShellComponent]\n})\nexport class ShellModule {}\n","import { NgModule } from '@angular/core';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { hookRoute, Route, ViewContext } from '@c8y/ngx-components';\nimport { DeviceShellGuard } from './device-shell.guard';\nimport { DeviceShellComponent, ShellModule } from './shell';\n\nconst DEVICE_SHELL_ROUTE: Route = {\n path: 'shell',\n context: ViewContext.Device,\n component: DeviceShellComponent,\n label: gettext('Shell'),\n icon: 'terminal',\n canActivate: [DeviceShellGuard]\n};\n\n@NgModule({\n imports: [ShellModule],\n providers: [DeviceShellGuard, hookRoute(DEVICE_SHELL_ROUTE)]\n})\nexport class DeviceShellModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2","i1.DeviceShellService","i3","i5"],"mappings":"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"}
1
+ {"version":3,"file":"c8y-ngx-components-device-shell.mjs","sources":["../../device-shell/command-templates/command-templates.directive.ts","../../device-shell/command-templates/command-templates.component.ts","../../device-shell/command-templates/command-templates.module.ts","../../device-shell/device-shell.guard.ts","../../device-shell/shared/device-shell.model.ts","../../device-shell/shared/device-shell.service.ts","../../device-shell/shared/device-shell-shared.module.ts","../../device-shell/shell/shell.component.ts","../../device-shell/shell/shell.component.html","../../device-shell/shell/shell.module.ts","../../device-shell/device-shell.module.ts","../../device-shell/c8y-ngx-components-device-shell.ts"],"sourcesContent":["import { Directive, ElementRef, EventEmitter, Injector, Output } from '@angular/core';\nimport { UpgradeComponent } from '@angular/upgrade/static';\n\n@Directive({ selector: 'c8y-command-templates-directive' })\nexport class CommandTemplates extends UpgradeComponent {\n @Output()\n close: EventEmitter<void>;\n\n @Output()\n dismiss: EventEmitter<void>;\n\n constructor(elementRef: ElementRef, injector: Injector) {\n super('c8yCommandTemplates', elementRef, injector);\n }\n}\n","import { Component, EventEmitter, Injector } from '@angular/core';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { CommandTemplates } from './command-templates.directive';\n\n/* https://stackoverflow.com/a/65290658 */\nexport function rootScopeCommandTemplateFactory($injector: Injector) {\n return $injector.get('$rootScope').$new();\n}\n\n@Component({\n selector: 'c8y-command-templates',\n template: `<c8y-command-templates-directive\n (close)=\"modalRef.hide(); onTemplateSelected.next($event)\"\n (dismiss)=\"modalRef.hide()\"\n ></c8y-command-templates-directive>`,\n providers: [\n {\n deps: ['$injector'],\n provide: '$scope',\n useFactory: rootScopeCommandTemplateFactory\n }\n ],\n imports: [CommandTemplates]\n})\nexport class CommandTemplatesComponent {\n onTemplateSelected: EventEmitter<object> = new EventEmitter();\n\n constructor(public modalRef: BsModalRef) {}\n}\n","import { NgModule } from '@angular/core';\nimport { CommandTemplatesComponent } from './command-templates.component';\nimport { CommandTemplates } from './command-templates.directive';\n\n@NgModule({\n imports: [CommandTemplates, CommandTemplatesComponent],\n exports: [CommandTemplatesComponent]\n})\nexport class CommandTemplatesModule {}\n","import { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot } from '@angular/router';\n\n@Injectable()\nexport class DeviceShellGuard {\n private readonly operation = 'c8y_Command';\n\n canActivate(route: ActivatedRouteSnapshot) {\n const device = route.data.contextData || route.parent.data.contextData;\n const supportedOperations = (device && device.c8y_SupportedOperations) || [];\n return supportedOperations.indexOf(this.operation) >= 0;\n }\n}\n","export enum CommandDeliveryType {\n DEFAULT = 'Default',\n SMS = 'SMS'\n}\n\nexport interface DeliveryType {\n name: string;\n default?: boolean;\n}\n\nexport interface Command {\n id: string;\n name: string;\n text: string;\n deliveryTypes: string[];\n command: string;\n category: string;\n}\n","import { Injectable } from '@angular/core';\nimport { IOperation, IResult, OperationService } from '@c8y/client';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { OptionsService } from '@c8y/ngx-components';\nimport { Command, CommandDeliveryType, DeliveryType } from './device-shell.model';\n\n@Injectable()\nexport class DeviceShellService {\n constructor(\n private optionsService: OptionsService,\n private operationService: OperationService\n ) {}\n\n getDeliveryTypes(): DeliveryType[] {\n return [\n {\n name: gettext(CommandDeliveryType.DEFAULT),\n default: true\n },\n {\n name: gettext(CommandDeliveryType.SMS)\n }\n ];\n }\n\n async canSendCommandsViaSMS(): Promise<boolean> {\n return !!(await this.optionsService.getSystemOption('messaging', 'provider', false));\n }\n\n createCommandOperation(\n deviceId: string,\n command: Command,\n deliveryType: CommandDeliveryType\n ): Promise<IResult<IOperation>> {\n const operation: IOperation = {\n deviceId,\n description: gettext('Execute shell command') + (command.name ? `: ${command.name}` : ''),\n deliveryType: deliveryType === CommandDeliveryType.SMS ? CommandDeliveryType.SMS : undefined,\n c8y_Command: {\n text: command.text\n }\n };\n return this.operationService.create(operation);\n }\n}\n","import { NgModule } from '@angular/core';\nimport { DeviceShellService } from './device-shell.service';\n\n@NgModule({\n providers: [DeviceShellService]\n})\nexport class DeviceShellSharedModule {}\n","import { Component, OnDestroy, OnInit } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { IManagedObject, IOperation, IResultList, OperationService } from '@c8y/client';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport {\n AlertService,\n ManagedObjectRealtimeService,\n OperationRealtimeService,\n ActionBarItemComponent,\n RealtimeButtonComponent,\n DeviceStatusComponent,\n C8yTranslateDirective,\n C8yTranslatePipe\n} from '@c8y/ngx-components';\nimport { includes, isEmpty } from 'lodash-es';\nimport { BsModalRef, BsModalService } from 'ngx-bootstrap/modal';\nimport { BehaviorSubject, Observable, of, pipe, Subject } from 'rxjs';\nimport { filter, map, startWith, takeUntil } from 'rxjs/operators';\nimport { CommandTemplatesComponent } from '../command-templates';\nimport { Command, CommandDeliveryType, DeliveryType, DeviceShellService } from '../shared';\nimport { FormsModule } from '@angular/forms';\nimport { NgFor, NgIf, AsyncPipe } from '@angular/common';\nimport { OperationsTimelineComponent } from '@c8y/ngx-components/operations/operations-timeline';\n\n@Component({\n selector: 'c8y-device-shell',\n templateUrl: 'shell.component.html',\n providers: [OperationRealtimeService, ManagedObjectRealtimeService],\n imports: [\n ActionBarItemComponent,\n RealtimeButtonComponent,\n DeviceStatusComponent,\n FormsModule,\n NgFor,\n NgIf,\n OperationsTimelineComponent,\n C8yTranslateDirective,\n AsyncPipe,\n C8yTranslatePipe\n ]\n})\nexport class DeviceShellComponent implements OnInit, OnDestroy {\n device: IManagedObject = this.route.snapshot.parent.data.contextData;\n device$: Observable<IManagedObject> = of({} as any);\n deliveryTypes: Array<DeliveryType & { isSupportedByCommand?: boolean }> = (\n this.service.getDeliveryTypes() || []\n ).map(deliveryType => ({ ...deliveryType, isSupportedByCommand: true }));\n command: Command = {} as Command;\n smsEnabled = false;\n sendingCommand$: BehaviorSubject<boolean> = new BehaviorSubject(false);\n operations: IResultList<IOperation>;\n filterPipe = pipe(\n map((operations: IOperation[]) =>\n (operations || []).filter((operation: IOperation) => !!operation.c8y_Command)\n )\n );\n\n executeViaLabel = gettext('Execute via ({{deliveryType}})');\n\n private destroyed$: Subject<void> = new Subject();\n\n constructor(\n public service: DeviceShellService,\n public operationRealtime: OperationRealtimeService,\n private moRealtime: ManagedObjectRealtimeService,\n private operationService: OperationService,\n private route: ActivatedRoute,\n private modalService: BsModalService,\n private alertService: AlertService\n ) {}\n\n async ngOnInit(): Promise<void> {\n this.smsEnabled = await this.service.canSendCommandsViaSMS();\n\n this.device$ = this.moRealtime.onUpdate$(this.device.id).pipe(startWith(this.device));\n\n this.operations = await this.operationService.list({\n deviceId: this.device.id,\n fragmentType: 'c8y_Command',\n dateFrom: new Date(0).toISOString(),\n dateTo: new Date().toISOString(),\n pageSize: 50,\n withTotalPages: true,\n revert: true\n });\n\n this.operationRealtime\n .onCreate$(this.device.id)\n .pipe(takeUntil(this.destroyed$))\n .subscribe(() => this.alertService.success(gettext('Command sent.')));\n\n this.operationRealtime\n .onUpdate$(this.device.id)\n .pipe(\n filter(op => op.failureReason !== 'Operation cancelled by user.'), // avoid duplicate alerts\n takeUntil(this.destroyed$)\n )\n .subscribe(() => this.alertService.success(gettext('Command status updated.')));\n }\n\n getPredefinedCommand() {\n const modal: BsModalRef<CommandTemplatesComponent> = this.modalService.show(\n CommandTemplatesComponent,\n {\n ariaDescribedby: 'modal-body',\n ariaLabelledBy: 'modal-title'\n }\n );\n modal.content.onTemplateSelected.pipe(takeUntil(this.destroyed$)).subscribe(result => {\n this.command = { ...(result as any).commandTemplate } as Command;\n this.deliveryTypes = this.deliveryTypes.map(deliveryType => ({\n ...deliveryType,\n isSupportedByCommand:\n isEmpty(this.command.deliveryTypes) ||\n includes(this.command.deliveryTypes, deliveryType.name)\n }));\n });\n }\n\n resetSupportedDeliveryTypes(): void {\n this.deliveryTypes = (this.service.getDeliveryTypes() || []).map(deliveryType => ({\n ...deliveryType,\n isSupportedByCommand: true\n }));\n }\n\n async execute(commandDeliveryType): Promise<void> {\n const useSMS = commandDeliveryType === CommandDeliveryType.SMS;\n if (useSMS && !this.smsEnabled) {\n this.alertService.warning(gettext('SMS transport is not configured.'));\n return;\n }\n this.sendingCommand$.next(true);\n\n await this.service.createCommandOperation(this.device.id, this.command, commandDeliveryType);\n\n this.command.text = '';\n this.command.name = '';\n this.resetSupportedDeliveryTypes();\n this.sendingCommand$.next(false);\n }\n\n ngOnDestroy(): void {\n this.destroyed$.next();\n this.destroyed$.complete();\n }\n}\n","<c8y-action-bar-item [placement]=\"'right'\">\n <c8y-realtime-btn [service]=\"operationRealtime\"></c8y-realtime-btn>\n</c8y-action-bar-item>\n\n<div class=\"card content-fullpage d-grid grid__col--6-6--md\">\n <div class=\"inner-scroll d-flex d-col bg-level-0\">\n <div class=\"card-header large-padding separator sticky-top\">\n <div class=\"card-title\">\n {{ 'Command' | translate }}\n </div>\n </div>\n\n <div class=\"card-block d-flex d-col flex-grow large-padding\">\n <div class=\"d-flex p-b-16\">\n <button\n class=\"btn btn-default btn-sm\"\n type=\"button\"\n (click)=\"getPredefinedCommand()\"\n [title]=\"'Display a list of predefined commands' | translate\"\n data-cy=\"shell--predefined-commands\"\n >\n {{ 'Predefined commands' | translate }}\n </button>\n\n <div class=\"m-l-auto\">\n <device-status [mo]=\"device$ | async\"></device-status>\n </div>\n </div>\n <textarea\n [attr.aria-label]=\"'Commands' | translate\"\n class=\"form-control inner-scroll flex-grow bg-level-2 text-monospace\"\n [(ngModel)]=\"command.text\"\n data-cy=\"shell-component--commands\"\n (ngModelChange)=\"$event || resetSupportedDeliveryTypes()\"\n placeholder=\"{{ 'Add commands or use predefined commands above.' | translate }}\"\n ></textarea>\n </div>\n\n <div class=\"card-footer large-padding separator\">\n <ng-container *ngFor=\"let deliveryType of deliveryTypes\">\n <button\n class=\"btn btn-primary\"\n type=\"button\"\n *ngIf=\"deliveryType.isSupportedByCommand\"\n [disabled]=\"!command?.text || (sendingCommand$ | async)\"\n (click)=\"execute(deliveryType.name)\"\n >\n <span\n [title]=\"\n deliveryType.default\n ? ('Execute' | translate)\n : (executeViaLabel | translate: { deliveryType: deliveryType.name })\n \"\n >\n {{\n deliveryType.default\n ? ('Execute' | translate)\n : (executeViaLabel | translate: { deliveryType: deliveryType.name })\n }}\n </span>\n </button>\n </ng-container>\n </div>\n </div>\n <div class=\"inner-scroll bg-level-1\">\n <div class=\"card-header large-padding separator sticky-top\">\n <div class=\"card-title\">\n {{ 'Operations' | translate }}\n </div>\n </div>\n <div class=\"card-block large-padding\">\n <c8y-operations-timeline\n [operations]=\"operations\"\n [sourceId]=\"device.id\"\n [filterPipe]=\"filterPipe\"\n [bodyTemplate]=\"timelineItemBody\"\n [footerTemplates]=\"[timelineItemFooter]\"\n [propertiesToHide]=\"['c8y_Command']\"\n ></c8y-operations-timeline>\n <ng-template #timelineItemBody let-operation>\n <small>{{ operation.c8y_Command?.text || operation.description }}</small>\n </ng-template>\n <ng-template #timelineItemFooter let-operation>\n <div *ngIf=\"operation.c8y_Command?.text\">\n <div class=\"legend form-block\" translate>Command</div>\n <!-- Keep this in a single line since `pre-text` will preserve all whitespaces in the `pre` tag.-->\n <pre class=\"p-8 text-pre\"><code>{{operation.c8y_Command.text}}</code></pre>\n </div>\n <div *ngIf=\"operation.c8y_Command?.result\">\n <div class=\"legend form-block\" translate>Response</div>\n <!-- Keep this in a single line since `pre-text` will preserve all whitespaces in the `pre` tag.-->\n <pre class=\"p-8 text-pre\"><code>{{operation.c8y_Command.result}}</code></pre>\n </div>\n </ng-template>\n </div>\n </div>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { CoreModule } from '@c8y/ngx-components';\nimport { OperationsTimelineModule } from '@c8y/ngx-components/operations/operations-timeline';\nimport { CommandTemplatesModule } from '../command-templates';\nimport { DeviceShellSharedModule } from '../shared';\nimport { DeviceShellComponent } from './shell.component';\n\n@NgModule({\n imports: [\n CommonModule,\n CoreModule,\n OperationsTimelineModule,\n CommandTemplatesModule,\n DeviceShellSharedModule,\n DeviceShellComponent\n ],\n exports: [DeviceShellComponent]\n})\nexport class ShellModule {}\n","import { NgModule } from '@angular/core';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { hookRoute, Route, ViewContext } from '@c8y/ngx-components';\nimport { DeviceShellGuard } from './device-shell.guard';\nimport { DeviceShellComponent, ShellModule } from './shell';\n\nconst DEVICE_SHELL_ROUTE: Route = {\n path: 'shell',\n context: ViewContext.Device,\n component: DeviceShellComponent,\n label: gettext('Shell'),\n icon: 'terminal',\n canActivate: [DeviceShellGuard]\n};\n\n@NgModule({\n imports: [ShellModule],\n providers: [DeviceShellGuard, hookRoute(DEVICE_SHELL_ROUTE)]\n})\nexport class DeviceShellModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2","i1.DeviceShellService","i3","i5"],"mappings":"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"}