@c8y/ngx-components 1021.31.4 → 1021.34.1

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 (72) hide show
  1. package/alarms/alarms-date-filter.component.d.ts +1 -0
  2. package/alarms/alarms-date-filter.component.d.ts.map +1 -1
  3. package/core/dynamic-component/dynamic-component.component.d.ts +5 -0
  4. package/core/dynamic-component/dynamic-component.component.d.ts.map +1 -1
  5. package/core/plugins/plugins.service.d.ts +3 -0
  6. package/core/plugins/plugins.service.d.ts.map +1 -1
  7. package/core/router/router-tabs.resolver.d.ts +2 -2
  8. package/core/router/router-tabs.resolver.d.ts.map +1 -1
  9. package/esm2022/alarms/alarms-date-filter.component.mjs +5 -3
  10. package/esm2022/alarms/alarms-type-filter.component.mjs +3 -3
  11. package/esm2022/core/dynamic-component/dynamic-component.component.mjs +23 -3
  12. package/esm2022/core/plugins/plugins.service.mjs +7 -1
  13. package/esm2022/core/router/router-tabs.resolver.mjs +22 -8
  14. package/esm2022/ecosystem/application-plugins/application-plugins.component.mjs +2 -2
  15. package/esm2022/protocol-lwm2m/ng1/plugin-checker.service.mjs +5 -1
  16. package/esm2022/services/services-device-tab/service-command.service.mjs +113 -0
  17. package/esm2022/services/services-device-tab/service-device-tab.model.mjs +1 -1
  18. package/esm2022/services/services-device-tab/services-device-tab.component.mjs +13 -7
  19. package/esm2022/widgets/definitions/asset-notes/c8y-ngx-components-widgets-definitions-asset-notes.mjs +5 -0
  20. package/esm2022/widgets/definitions/asset-notes/index.mjs +29 -0
  21. package/esm2022/widgets/definitions/index.mjs +2 -1
  22. package/esm2022/widgets/implementations/asset-notes/asset-notes-widget.component.mjs +67 -0
  23. package/esm2022/widgets/implementations/asset-notes/c8y-ngx-components-widgets-implementations-asset-notes.mjs +5 -0
  24. package/esm2022/widgets/implementations/asset-notes/index.mjs +2 -0
  25. package/fesm2022/c8y-ngx-components-alarms.mjs +5 -4
  26. package/fesm2022/c8y-ngx-components-alarms.mjs.map +1 -1
  27. package/fesm2022/c8y-ngx-components-ecosystem-application-plugins.mjs +1 -1
  28. package/fesm2022/c8y-ngx-components-ecosystem-application-plugins.mjs.map +1 -1
  29. package/fesm2022/c8y-ngx-components-ecosystem.mjs +1 -1
  30. package/fesm2022/c8y-ngx-components-ecosystem.mjs.map +1 -1
  31. package/fesm2022/c8y-ngx-components-protocol-lwm2m.mjs +4 -0
  32. package/fesm2022/c8y-ngx-components-protocol-lwm2m.mjs.map +1 -1
  33. package/fesm2022/c8y-ngx-components-services.mjs +116 -5
  34. package/fesm2022/c8y-ngx-components-services.mjs.map +1 -1
  35. package/fesm2022/c8y-ngx-components-widgets-definitions-asset-notes.mjs +36 -0
  36. package/fesm2022/c8y-ngx-components-widgets-definitions-asset-notes.mjs.map +1 -0
  37. package/fesm2022/c8y-ngx-components-widgets-definitions.mjs +1 -0
  38. package/fesm2022/c8y-ngx-components-widgets-definitions.mjs.map +1 -1
  39. package/fesm2022/c8y-ngx-components-widgets-implementations-asset-notes.mjs +74 -0
  40. package/fesm2022/c8y-ngx-components-widgets-implementations-asset-notes.mjs.map +1 -0
  41. package/fesm2022/c8y-ngx-components.mjs +48 -8
  42. package/fesm2022/c8y-ngx-components.mjs.map +1 -1
  43. package/locales/de.po +20 -11
  44. package/locales/es.po +18 -9
  45. package/locales/fr.po +18 -9
  46. package/locales/ja_JP.po +18 -9
  47. package/locales/ko.po +18 -9
  48. package/locales/locales.pot +19 -7
  49. package/locales/nl.po +18 -9
  50. package/locales/pl.po +21 -12
  51. package/locales/pt_BR.po +18 -9
  52. package/locales/zh_CN.po +18 -9
  53. package/locales/zh_TW.po +18 -9
  54. package/package.json +1 -1
  55. package/protocol-lwm2m/ng1/plugin-checker.service.d.ts +4 -0
  56. package/protocol-lwm2m/ng1/plugin-checker.service.d.ts.map +1 -1
  57. package/services/services-device-tab/service-command.service.d.ts +59 -0
  58. package/services/services-device-tab/service-command.service.d.ts.map +1 -0
  59. package/services/services-device-tab/service-device-tab.model.d.ts +9 -0
  60. package/services/services-device-tab/service-device-tab.model.d.ts.map +1 -1
  61. package/services/services-device-tab/services-device-tab.component.d.ts +5 -2
  62. package/services/services-device-tab/services-device-tab.component.d.ts.map +1 -1
  63. package/widgets/definitions/asset-notes/c8y-ngx-components-widgets-definitions-asset-notes.d.ts.map +1 -0
  64. package/widgets/definitions/asset-notes/index.d.ts +16 -0
  65. package/widgets/definitions/asset-notes/index.d.ts.map +1 -0
  66. package/widgets/definitions/index.d.ts +1 -0
  67. package/widgets/definitions/index.d.ts.map +1 -1
  68. package/widgets/implementations/asset-notes/asset-notes-widget.component.d.ts +33 -0
  69. package/widgets/implementations/asset-notes/asset-notes-widget.component.d.ts.map +1 -0
  70. package/widgets/implementations/asset-notes/c8y-ngx-components-widgets-implementations-asset-notes.d.ts.map +1 -0
  71. package/widgets/implementations/asset-notes/index.d.ts +2 -0
  72. package/widgets/implementations/asset-notes/index.d.ts.map +1 -0
@@ -361,6 +361,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
361
361
  }]
362
362
  }] });
363
363
 
364
+ /**
365
+ * @deprecated This service is deprecated and will be removed in a future version.
366
+ * Use the PluginsResolveService instead.
367
+ */
364
368
  class Lwm2mPluginCheckerService {
365
369
  constructor(applicationService) {
366
370
  this.applicationService = applicationService;
@@ -1 +1 @@
1
- {"version":3,"file":"c8y-ngx-components-protocol-lwm2m.mjs","sources":["../../protocol-lwm2m/formly/lwm2m-file-pick-and-replace.type.component.ts","../../protocol-lwm2m/formly/lwm2m-file-pick-and-replace.type.component.html","../../protocol-lwm2m/formly/lwm2m-input-group-addon.type.component.ts","../../protocol-lwm2m/formly/lwm2m-input-group-addon.type.component.html","../../protocol-lwm2m/formly/lwm2m-UI-theme.module.ts","../../protocol-lwm2m/lwm2m.module.ts","../../protocol-lwm2m/ng1/plugin-checker.service.ts","../../protocol-lwm2m/ng1/index.ts","../../protocol-lwm2m/c8y-ngx-components-protocol-lwm2m.ts"],"sourcesContent":["import { Component, ElementRef, ViewChild } from '@angular/core';\nimport { FieldType, FieldTypeConfig } from '@ngx-formly/core';\nimport { Lwm2mConfigurationService } from '@c8y/ngx-components/protocol-lwm2m/services';\nimport { AlertService, FilesService } from '@c8y/ngx-components';\n\n@Component({\n selector: 'c8y-lwm2m-file-pick-replace-type',\n templateUrl: './lwm2m-file-pick-and-replace.type.component.html'\n})\nexport class Lwm2mFilePickAndReplaceType extends FieldType<FieldTypeConfig> {\n @ViewChild('picker', { static: false }) picker: ElementRef<HTMLInputElement>;\n private fileReader = new FileReader();\n\n constructor(\n private service: Lwm2mConfigurationService<unknown>,\n private fileService: FilesService,\n private alertService: AlertService\n ) {\n super();\n }\n\n onFocus() {\n this.picker?.nativeElement.click();\n this.field.focus = true;\n }\n\n onPick(event) {\n this.formControl.setErrors(null);\n\n this.fileService.getFileExtension(event?.target?.files[0]) === 'pem'\n ? this.fileReader.readAsDataURL(event?.target?.files[0])\n : this.field?.formControl.setErrors({ invalidType: true });\n\n if (this.props?.onPick instanceof Function && !this.formControl?.errors) {\n this.fileReader.onload = () =>\n this.onLoad(this.props.onPick, (error: DOMException) =>\n this.alertService.danger(error.message)\n );\n }\n }\n\n remove() {\n if (this.props.remove instanceof Function) {\n this.props.remove();\n }\n }\n\n private onLoad(resolve, reject) {\n if (this.fileReader.readyState !== 2) {\n return;\n }\n\n if (this.fileReader.error) {\n reject(this.fileReader.error);\n }\n\n const result = this.service.cleanUpBase64Data(this.fileReader.result as string);\n if (!result) this.formControl.setErrors({ strReplaceError: true });\n\n resolve(result);\n }\n}\n","<div class=\"input-group\">\n <input\n class=\"form-control\"\n [class.is-invalid]=\"showError\"\n [type]=\"'text'\"\n [formControl]=\"formControl\"\n [formlyAttributes]=\"field\"\n [required]=\"props.required\"\n [disabled]=\"props.disabled\"\n readonly\n />\n <div class=\"input-group-btn a-i-end\">\n <button\n class=\"btn btn-primary btn-block\"\n title=\"{{ 'Replace' | translate }}\"\n type=\"button\"\n (click)=\"onFocus()\"\n [disabled]=\"props.disabled\"\n >\n <i c8yIcon=\"replace\"></i>\n <input\n class=\"hidden\"\n id=\"file\"\n type=\"file\"\n accept=\".pem\"\n #picker\n (change)=\"onPick($event)\"\n />\n </button>\n <button\n class=\"btn btn-danger btn-block\"\n title=\"{{ 'Remove' | translate }}\"\n type=\"button\"\n (click)=\"remove()\"\n [disabled]=\"props.disabled\"\n >\n <i c8yIcon=\"minus-circle\"></i>\n </button>\n </div>\n</div>\n","import { Component, OnInit } from '@angular/core';\nimport { FieldType, FieldTypeConfig } from '@ngx-formly/core';\nimport { gettext } from '@c8y/ngx-components';\n\n@Component({\n selector: 'c8y-lwm2m-input-group-addon',\n templateUrl: './lwm2m-input-group-addon.type.component.html'\n})\nexport class Lwm2mInputGroupAddonType extends FieldType<FieldTypeConfig> implements OnInit {\n ngOnInit() {\n this.props.addonLabel = this.props?.addonLabel || gettext('undefined');\n }\n}\n","<div class=\"input-group\">\n <span class=\"input-group-addon\">{{ props?.addonLabel }}</span>\n <input\n class=\"form-control\"\n [class.is-invalid]=\"showError\"\n [type]=\"'text'\"\n [formControl]=\"formControl\"\n [formlyAttributes]=\"field\"\n [required]=\"props.required\"\n [disabled]=\"props.disabled\"\n />\n</div>\n","import { NgModule } from '@angular/core';\nimport { FORMLY_CONFIG, FormlyFieldConfig } from '@ngx-formly/core';\nimport { FormlyPresetModule } from '@ngx-formly/core/preset';\nimport { Mode } from '@c8y/ngx-components/protocol-lwm2m/model';\nimport { Lwm2mFilePickAndReplaceType } from './lwm2m-file-pick-and-replace.type.component';\nimport { Lwm2mInputGroupAddonType } from './lwm2m-input-group-addon.type.component';\nimport {\n gettext,\n CommonModule as C8yCommonModule,\n FormsModule as C8yFormsModule,\n DynamicFormsModule,\n LegendFieldWrapper\n} from '@c8y/ngx-components';\n\n@NgModule({\n imports: [C8yCommonModule, C8yFormsModule, DynamicFormsModule, FormlyPresetModule],\n declarations: [Lwm2mFilePickAndReplaceType, Lwm2mInputGroupAddonType],\n providers: [\n {\n provide: FORMLY_CONFIG,\n multi: true,\n useValue: {\n wrappers: [\n {\n name: 'legend',\n component: LegendFieldWrapper\n }\n ],\n presets: [\n {\n name: 'securityMode',\n config: {\n key: 'mode',\n type: 'select',\n defaultValue: Mode.NO_SEC,\n props: {\n label: gettext('Mode')\n }\n }\n },\n {\n name: 'pskId',\n config: {\n key: 'pskId',\n type: 'string',\n props: {\n label: gettext('PSK ID'),\n required: true\n },\n expressions: {\n 'props.disabled': (field: FormlyFieldConfig) => field?.options?.formState?.disabled,\n hide: (field: FormlyFieldConfig) => {\n return field.model?.mode !== Mode.PSK;\n }\n }\n }\n },\n {\n name: 'pskKey',\n config: {\n key: 'pskKey',\n type: 'string',\n props: {\n label: gettext('Pre-shared key'),\n placeholder: '0123456789abcdef',\n pattern: '^([a-fA-F0-9]{2})+$',\n required: true\n },\n expressions: {\n 'props.disabled': (field: FormlyFieldConfig) => field?.options?.formState?.disabled,\n hide: (field: FormlyFieldConfig) => {\n return field.model?.mode !== Mode.PSK;\n }\n }\n }\n }\n ],\n types: [\n {\n name: 'switch',\n extends: 'checkbox',\n defaultOptions: {\n props: {\n switchMode: true,\n indeterminate: false\n }\n }\n },\n {\n name: 'file-pick-replace',\n component: Lwm2mFilePickAndReplaceType,\n wrappers: ['c8y-form-field']\n },\n {\n name: 'input-addon',\n component: Lwm2mInputGroupAddonType,\n wrappers: ['c8y-form-field']\n }\n ],\n validationMessages: [\n {\n name: 'invalidType',\n message: gettext('The selected file is not supported.')\n },\n {\n name: 'strReplaceError',\n message: gettext('The selected file is not processable.')\n }\n ]\n }\n }\n ]\n})\nexport class Lwm2mUIThemeModule {}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\nimport {\n gettext,\n hookDataGridActionControls,\n hookNavigator,\n hookPatternMessages,\n hookRoute,\n ViewContext\n} from '@c8y/ngx-components';\nimport {\n Lwm2mDeviceGridFactory,\n LWM2MPostOpertaionsNavigationFactory\n} from '@c8y/ngx-components/protocol-lwm2m/factories';\nimport {\n Lwm2mBootstrapParametersApiGuard,\n Lwm2mConfigurationApiGuard,\n Lwm2mDeviceTypeGuard,\n Lwm2mMicroserviceGuard\n} from '@c8y/ngx-components/protocol-lwm2m/guards';\nimport {\n LWM2MEndpoint,\n lwm2mRegisterDeviceStringsIncomingFromMS\n} from '@c8y/ngx-components/protocol-lwm2m/model';\nimport { Lwm2mUIThemeModule } from './formly';\n@NgModule({\n imports: [Lwm2mUIThemeModule]\n})\nexport class Lwm2mModule {\n static forRoot(): ModuleWithProviders<Lwm2mModule> {\n return {\n ngModule: Lwm2mModule,\n providers: [\n hookNavigator(LWM2MPostOpertaionsNavigationFactory),\n hookDataGridActionControls(Lwm2mDeviceGridFactory),\n hookRoute({\n path: 'post-operations',\n loadComponent: () =>\n import(\n '@c8y/ngx-components/protocol-lwm2m/components/post-registration-operations'\n ).then(m => m.LWM2MPostOperationsComponent),\n icon: 'terminal',\n priority: 2000,\n canActivate: [Lwm2mMicroserviceGuard]\n }),\n hookRoute({\n label: gettext('LWM2M Configuration'),\n icon: 'c8y-device-protocols',\n path: 'lwm2m-configuration',\n context: ViewContext.Device,\n loadComponent: () =>\n import('@c8y/ngx-components/protocol-lwm2m/components/configuration').then(\n m => m.Lwm2mConfigurationComponent\n ),\n canActivate: [Lwm2mMicroserviceGuard, Lwm2mDeviceTypeGuard, Lwm2mConfigurationApiGuard],\n children: [\n { path: '', redirectTo: 'basic', pathMatch: 'full' },\n {\n path: LWM2MEndpoint.deviceSettings,\n loadComponent: () =>\n import('@c8y/ngx-components/protocol-lwm2m/components/configuration').then(\n m => m.Lwm2mFormDeviceSettings\n )\n },\n {\n path: LWM2MEndpoint.connectivity,\n loadComponent: () =>\n import('@c8y/ngx-components/protocol-lwm2m/components/configuration').then(\n m => m.Lwm2mFormConnectivitySettings\n )\n },\n {\n path: LWM2MEndpoint.firmware,\n loadComponent: () =>\n import('@c8y/ngx-components/protocol-lwm2m/components/configuration').then(\n m => m.Lwm2mFormFirmwareSettings\n )\n },\n {\n path: LWM2MEndpoint.bootstrap,\n loadComponent: () =>\n import('@c8y/ngx-components/protocol-lwm2m/components/configuration').then(\n m => m.Lwm2mFormBootstrapSettings\n )\n },\n {\n path: LWM2MEndpoint.servers,\n loadComponent: () =>\n import('@c8y/ngx-components/protocol-lwm2m/components/configuration').then(\n m => m.Lwm2mFormServerSettings\n )\n }\n ]\n }),\n hookRoute({\n path: 'lwm2m-bootstrap-parameters',\n context: ViewContext.Device,\n loadComponent: () =>\n import('@c8y/ngx-components/protocol-lwm2m/components/bootstrap-parameters').then(\n m => m.Lwm2mBootstrapParametersComponent\n ),\n label: gettext('LWM2M bootstrap parameters'),\n icon: 'c8y-device-protocols',\n canActivate: [\n Lwm2mMicroserviceGuard,\n Lwm2mDeviceTypeGuard,\n Lwm2mBootstrapParametersApiGuard\n ]\n }),\n hookPatternMessages(lwm2mRegisterDeviceStringsIncomingFromMS)\n ]\n };\n }\n}\n\n@NgModule({\n imports: [Lwm2mModule.forRoot()]\n})\nexport class LWM2Module {}\n","import { Injectable } from '@angular/core';\nimport { downgradeInjectable } from '@angular/upgrade/static';\nimport { ApplicationService } from '@c8y/client';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class Lwm2mPluginCheckerService {\n constructor(private applicationService: ApplicationService) {}\n\n async isLwm2mPluginInstalled() {\n const { data } = await this.applicationService.listByName('lwm2m-ui-plugin');\n return data.some(({ manifest }) => manifest?.exports[0]?.module === 'Lwm2mModuleWrapper');\n }\n}\n\nexport const lwm2mPluginCheckerServiceDowngradedInjectable =\n downgradeInjectable(Lwm2mPluginCheckerService);\n","import * as angular from 'angular';\nimport { registerNgModule } from '@c8y/ng1-modules';\nimport { lwm2mPluginCheckerServiceDowngradedInjectable } from './plugin-checker.service';\n\nconst NAME_LWM2M = 'c8y.upgrade.lwm2m';\n\nangular\n .module(NAME_LWM2M, [])\n .factory('c8yLwm2mPluginCheckerService', lwm2mPluginCheckerServiceDowngradedInjectable);\n\nexport const ng1ModulesLWM2M = [NAME_LWM2M];\n\nregisterNgModule(ng1ModulesLWM2M);\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i3","C8yCommonModule","C8yFormsModule"],"mappings":"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"}
1
+ {"version":3,"file":"c8y-ngx-components-protocol-lwm2m.mjs","sources":["../../protocol-lwm2m/formly/lwm2m-file-pick-and-replace.type.component.ts","../../protocol-lwm2m/formly/lwm2m-file-pick-and-replace.type.component.html","../../protocol-lwm2m/formly/lwm2m-input-group-addon.type.component.ts","../../protocol-lwm2m/formly/lwm2m-input-group-addon.type.component.html","../../protocol-lwm2m/formly/lwm2m-UI-theme.module.ts","../../protocol-lwm2m/lwm2m.module.ts","../../protocol-lwm2m/ng1/plugin-checker.service.ts","../../protocol-lwm2m/ng1/index.ts","../../protocol-lwm2m/c8y-ngx-components-protocol-lwm2m.ts"],"sourcesContent":["import { Component, ElementRef, ViewChild } from '@angular/core';\nimport { FieldType, FieldTypeConfig } from '@ngx-formly/core';\nimport { Lwm2mConfigurationService } from '@c8y/ngx-components/protocol-lwm2m/services';\nimport { AlertService, FilesService } from '@c8y/ngx-components';\n\n@Component({\n selector: 'c8y-lwm2m-file-pick-replace-type',\n templateUrl: './lwm2m-file-pick-and-replace.type.component.html'\n})\nexport class Lwm2mFilePickAndReplaceType extends FieldType<FieldTypeConfig> {\n @ViewChild('picker', { static: false }) picker: ElementRef<HTMLInputElement>;\n private fileReader = new FileReader();\n\n constructor(\n private service: Lwm2mConfigurationService<unknown>,\n private fileService: FilesService,\n private alertService: AlertService\n ) {\n super();\n }\n\n onFocus() {\n this.picker?.nativeElement.click();\n this.field.focus = true;\n }\n\n onPick(event) {\n this.formControl.setErrors(null);\n\n this.fileService.getFileExtension(event?.target?.files[0]) === 'pem'\n ? this.fileReader.readAsDataURL(event?.target?.files[0])\n : this.field?.formControl.setErrors({ invalidType: true });\n\n if (this.props?.onPick instanceof Function && !this.formControl?.errors) {\n this.fileReader.onload = () =>\n this.onLoad(this.props.onPick, (error: DOMException) =>\n this.alertService.danger(error.message)\n );\n }\n }\n\n remove() {\n if (this.props.remove instanceof Function) {\n this.props.remove();\n }\n }\n\n private onLoad(resolve, reject) {\n if (this.fileReader.readyState !== 2) {\n return;\n }\n\n if (this.fileReader.error) {\n reject(this.fileReader.error);\n }\n\n const result = this.service.cleanUpBase64Data(this.fileReader.result as string);\n if (!result) this.formControl.setErrors({ strReplaceError: true });\n\n resolve(result);\n }\n}\n","<div class=\"input-group\">\n <input\n class=\"form-control\"\n [class.is-invalid]=\"showError\"\n [type]=\"'text'\"\n [formControl]=\"formControl\"\n [formlyAttributes]=\"field\"\n [required]=\"props.required\"\n [disabled]=\"props.disabled\"\n readonly\n />\n <div class=\"input-group-btn a-i-end\">\n <button\n class=\"btn btn-primary btn-block\"\n title=\"{{ 'Replace' | translate }}\"\n type=\"button\"\n (click)=\"onFocus()\"\n [disabled]=\"props.disabled\"\n >\n <i c8yIcon=\"replace\"></i>\n <input\n class=\"hidden\"\n id=\"file\"\n type=\"file\"\n accept=\".pem\"\n #picker\n (change)=\"onPick($event)\"\n />\n </button>\n <button\n class=\"btn btn-danger btn-block\"\n title=\"{{ 'Remove' | translate }}\"\n type=\"button\"\n (click)=\"remove()\"\n [disabled]=\"props.disabled\"\n >\n <i c8yIcon=\"minus-circle\"></i>\n </button>\n </div>\n</div>\n","import { Component, OnInit } from '@angular/core';\nimport { FieldType, FieldTypeConfig } from '@ngx-formly/core';\nimport { gettext } from '@c8y/ngx-components';\n\n@Component({\n selector: 'c8y-lwm2m-input-group-addon',\n templateUrl: './lwm2m-input-group-addon.type.component.html'\n})\nexport class Lwm2mInputGroupAddonType extends FieldType<FieldTypeConfig> implements OnInit {\n ngOnInit() {\n this.props.addonLabel = this.props?.addonLabel || gettext('undefined');\n }\n}\n","<div class=\"input-group\">\n <span class=\"input-group-addon\">{{ props?.addonLabel }}</span>\n <input\n class=\"form-control\"\n [class.is-invalid]=\"showError\"\n [type]=\"'text'\"\n [formControl]=\"formControl\"\n [formlyAttributes]=\"field\"\n [required]=\"props.required\"\n [disabled]=\"props.disabled\"\n />\n</div>\n","import { NgModule } from '@angular/core';\nimport { FORMLY_CONFIG, FormlyFieldConfig } from '@ngx-formly/core';\nimport { FormlyPresetModule } from '@ngx-formly/core/preset';\nimport { Mode } from '@c8y/ngx-components/protocol-lwm2m/model';\nimport { Lwm2mFilePickAndReplaceType } from './lwm2m-file-pick-and-replace.type.component';\nimport { Lwm2mInputGroupAddonType } from './lwm2m-input-group-addon.type.component';\nimport {\n gettext,\n CommonModule as C8yCommonModule,\n FormsModule as C8yFormsModule,\n DynamicFormsModule,\n LegendFieldWrapper\n} from '@c8y/ngx-components';\n\n@NgModule({\n imports: [C8yCommonModule, C8yFormsModule, DynamicFormsModule, FormlyPresetModule],\n declarations: [Lwm2mFilePickAndReplaceType, Lwm2mInputGroupAddonType],\n providers: [\n {\n provide: FORMLY_CONFIG,\n multi: true,\n useValue: {\n wrappers: [\n {\n name: 'legend',\n component: LegendFieldWrapper\n }\n ],\n presets: [\n {\n name: 'securityMode',\n config: {\n key: 'mode',\n type: 'select',\n defaultValue: Mode.NO_SEC,\n props: {\n label: gettext('Mode')\n }\n }\n },\n {\n name: 'pskId',\n config: {\n key: 'pskId',\n type: 'string',\n props: {\n label: gettext('PSK ID'),\n required: true\n },\n expressions: {\n 'props.disabled': (field: FormlyFieldConfig) => field?.options?.formState?.disabled,\n hide: (field: FormlyFieldConfig) => {\n return field.model?.mode !== Mode.PSK;\n }\n }\n }\n },\n {\n name: 'pskKey',\n config: {\n key: 'pskKey',\n type: 'string',\n props: {\n label: gettext('Pre-shared key'),\n placeholder: '0123456789abcdef',\n pattern: '^([a-fA-F0-9]{2})+$',\n required: true\n },\n expressions: {\n 'props.disabled': (field: FormlyFieldConfig) => field?.options?.formState?.disabled,\n hide: (field: FormlyFieldConfig) => {\n return field.model?.mode !== Mode.PSK;\n }\n }\n }\n }\n ],\n types: [\n {\n name: 'switch',\n extends: 'checkbox',\n defaultOptions: {\n props: {\n switchMode: true,\n indeterminate: false\n }\n }\n },\n {\n name: 'file-pick-replace',\n component: Lwm2mFilePickAndReplaceType,\n wrappers: ['c8y-form-field']\n },\n {\n name: 'input-addon',\n component: Lwm2mInputGroupAddonType,\n wrappers: ['c8y-form-field']\n }\n ],\n validationMessages: [\n {\n name: 'invalidType',\n message: gettext('The selected file is not supported.')\n },\n {\n name: 'strReplaceError',\n message: gettext('The selected file is not processable.')\n }\n ]\n }\n }\n ]\n})\nexport class Lwm2mUIThemeModule {}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\nimport {\n gettext,\n hookDataGridActionControls,\n hookNavigator,\n hookPatternMessages,\n hookRoute,\n ViewContext\n} from '@c8y/ngx-components';\nimport {\n Lwm2mDeviceGridFactory,\n LWM2MPostOpertaionsNavigationFactory\n} from '@c8y/ngx-components/protocol-lwm2m/factories';\nimport {\n Lwm2mBootstrapParametersApiGuard,\n Lwm2mConfigurationApiGuard,\n Lwm2mDeviceTypeGuard,\n Lwm2mMicroserviceGuard\n} from '@c8y/ngx-components/protocol-lwm2m/guards';\nimport {\n LWM2MEndpoint,\n lwm2mRegisterDeviceStringsIncomingFromMS\n} from '@c8y/ngx-components/protocol-lwm2m/model';\nimport { Lwm2mUIThemeModule } from './formly';\n@NgModule({\n imports: [Lwm2mUIThemeModule]\n})\nexport class Lwm2mModule {\n static forRoot(): ModuleWithProviders<Lwm2mModule> {\n return {\n ngModule: Lwm2mModule,\n providers: [\n hookNavigator(LWM2MPostOpertaionsNavigationFactory),\n hookDataGridActionControls(Lwm2mDeviceGridFactory),\n hookRoute({\n path: 'post-operations',\n loadComponent: () =>\n import(\n '@c8y/ngx-components/protocol-lwm2m/components/post-registration-operations'\n ).then(m => m.LWM2MPostOperationsComponent),\n icon: 'terminal',\n priority: 2000,\n canActivate: [Lwm2mMicroserviceGuard]\n }),\n hookRoute({\n label: gettext('LWM2M Configuration'),\n icon: 'c8y-device-protocols',\n path: 'lwm2m-configuration',\n context: ViewContext.Device,\n loadComponent: () =>\n import('@c8y/ngx-components/protocol-lwm2m/components/configuration').then(\n m => m.Lwm2mConfigurationComponent\n ),\n canActivate: [Lwm2mMicroserviceGuard, Lwm2mDeviceTypeGuard, Lwm2mConfigurationApiGuard],\n children: [\n { path: '', redirectTo: 'basic', pathMatch: 'full' },\n {\n path: LWM2MEndpoint.deviceSettings,\n loadComponent: () =>\n import('@c8y/ngx-components/protocol-lwm2m/components/configuration').then(\n m => m.Lwm2mFormDeviceSettings\n )\n },\n {\n path: LWM2MEndpoint.connectivity,\n loadComponent: () =>\n import('@c8y/ngx-components/protocol-lwm2m/components/configuration').then(\n m => m.Lwm2mFormConnectivitySettings\n )\n },\n {\n path: LWM2MEndpoint.firmware,\n loadComponent: () =>\n import('@c8y/ngx-components/protocol-lwm2m/components/configuration').then(\n m => m.Lwm2mFormFirmwareSettings\n )\n },\n {\n path: LWM2MEndpoint.bootstrap,\n loadComponent: () =>\n import('@c8y/ngx-components/protocol-lwm2m/components/configuration').then(\n m => m.Lwm2mFormBootstrapSettings\n )\n },\n {\n path: LWM2MEndpoint.servers,\n loadComponent: () =>\n import('@c8y/ngx-components/protocol-lwm2m/components/configuration').then(\n m => m.Lwm2mFormServerSettings\n )\n }\n ]\n }),\n hookRoute({\n path: 'lwm2m-bootstrap-parameters',\n context: ViewContext.Device,\n loadComponent: () =>\n import('@c8y/ngx-components/protocol-lwm2m/components/bootstrap-parameters').then(\n m => m.Lwm2mBootstrapParametersComponent\n ),\n label: gettext('LWM2M bootstrap parameters'),\n icon: 'c8y-device-protocols',\n canActivate: [\n Lwm2mMicroserviceGuard,\n Lwm2mDeviceTypeGuard,\n Lwm2mBootstrapParametersApiGuard\n ]\n }),\n hookPatternMessages(lwm2mRegisterDeviceStringsIncomingFromMS)\n ]\n };\n }\n}\n\n@NgModule({\n imports: [Lwm2mModule.forRoot()]\n})\nexport class LWM2Module {}\n","import { Injectable } from '@angular/core';\nimport { downgradeInjectable } from '@angular/upgrade/static';\nimport { ApplicationService } from '@c8y/client';\n\n/**\n * @deprecated This service is deprecated and will be removed in a future version.\n * Use the PluginsResolveService instead.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class Lwm2mPluginCheckerService {\n constructor(private applicationService: ApplicationService) {}\n\n async isLwm2mPluginInstalled() {\n const { data } = await this.applicationService.listByName('lwm2m-ui-plugin');\n return data.some(({ manifest }) => manifest?.exports[0]?.module === 'Lwm2mModuleWrapper');\n }\n}\n\nexport const lwm2mPluginCheckerServiceDowngradedInjectable =\n downgradeInjectable(Lwm2mPluginCheckerService);\n","import * as angular from 'angular';\nimport { registerNgModule } from '@c8y/ng1-modules';\nimport { lwm2mPluginCheckerServiceDowngradedInjectable } from './plugin-checker.service';\n\nconst NAME_LWM2M = 'c8y.upgrade.lwm2m';\n\nangular\n .module(NAME_LWM2M, [])\n .factory('c8yLwm2mPluginCheckerService', lwm2mPluginCheckerServiceDowngradedInjectable);\n\nexport const ng1ModulesLWM2M = [NAME_LWM2M];\n\nregisterNgModule(ng1ModulesLWM2M);\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i3","C8yCommonModule","C8yFormsModule"],"mappings":"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"}
@@ -11,6 +11,7 @@ import * as i4 from 'ngx-bootstrap/tooltip';
11
11
  import { TooltipModule } from 'ngx-bootstrap/tooltip';
12
12
  import * as i1$2 from '@c8y/client';
13
13
  import { QueriesUtil } from '@c8y/client';
14
+ import { from } from 'rxjs';
14
15
 
15
16
  class LastUpdatedDateCellRendererComponent {
16
17
  constructor(context) {
@@ -337,12 +338,119 @@ class StatusGridColumn extends BaseColumn {
337
338
 
338
339
  const SERVICE_FRAGMENT = 'c8y_Service';
339
340
 
341
+ class ServiceCommandService {
342
+ constructor(operationService, alertService) {
343
+ this.operationService = operationService;
344
+ this.alertService = alertService;
345
+ this.DEFAULT_COMMANDS = ['START', 'STOP', 'RESTART'];
346
+ this.commandIcons = {
347
+ START: 'play-circle',
348
+ STOP: 'stop-circle',
349
+ RESTART: 'refresh'
350
+ };
351
+ }
352
+ /**
353
+ * Check if the service supports service commands.
354
+ * @param service The service object containing supported operations.
355
+ * @returns boolean indicating if the service supports service commands.
356
+ */
357
+ isServiceCommandSupported(service) {
358
+ return service.c8y_SupportedOperations?.includes('c8y_ServiceCommand');
359
+ }
360
+ /**
361
+ * Get the list of supported service commands for the given service object.
362
+ * @param service The service object containing the c8y_SupportedServiceCommands fragment.
363
+ * @returns Array of supported commands.
364
+ */
365
+ getSupportedCommands(service) {
366
+ return service.c8y_SupportedServiceCommands || this.DEFAULT_COMMANDS;
367
+ }
368
+ /**
369
+ * Check if a specific command is supported for the given service.
370
+ * @param service The service object.
371
+ * @param command The command to check (e.g., START, STOP).
372
+ * @returns boolean indicating if the command is supported.
373
+ */
374
+ isCommandSupported(service, command) {
375
+ const supportedCommands = this.getSupportedCommands(service);
376
+ return supportedCommands.includes(command);
377
+ }
378
+ /**
379
+ * Get all supported commands for a list of services.
380
+ * @param services The list of service objects to evaluate.
381
+ * @returns Array of all unique supported commands.
382
+ */
383
+ getAllSupportedCommands(services) {
384
+ const allCommands = services
385
+ .filter(service => this.isServiceCommandSupported(service))
386
+ .flatMap(service => this.getSupportedCommands(service));
387
+ return Array.from(new Set(allCommands));
388
+ }
389
+ /**
390
+ * Create an operation for the selected service command.
391
+ * @param service The service object the operation should target.
392
+ * @param command The command to execute (e.g., START, STOP).
393
+ * @returns Observable of the created operation.
394
+ */
395
+ createOperation({ id, name, serviceType }, command) {
396
+ const operation = {
397
+ deviceId: id,
398
+ c8y_ServiceCommand: {
399
+ command,
400
+ serviceName: name,
401
+ serviceType: serviceType
402
+ }
403
+ };
404
+ return from(this.operationService.create(operation));
405
+ }
406
+ /**
407
+ * Generate a static list of action controls.
408
+ * The specific logic for each service is handled dynamically in showIf and callback.
409
+ * @returns Array of ActionControl objects.
410
+ */
411
+ generateActionControls(commands) {
412
+ return commands.map(command => ({
413
+ type: command.toLowerCase(),
414
+ icon: this.getCommandIcon(command),
415
+ text: command,
416
+ showIf: (service) => this.isServiceCommandSupported(service) && this.isCommandSupported(service, command),
417
+ callback: async (service) => {
418
+ try {
419
+ await this.createOperation(service, command).toPromise();
420
+ this.alertService.success(gettext('Operation created.'));
421
+ }
422
+ catch (error) {
423
+ const alertMessage = gettext('Could not create operaion.');
424
+ this.alertService.danger(alertMessage, error);
425
+ }
426
+ }
427
+ }));
428
+ }
429
+ /**
430
+ * Get the icon for a specific command.
431
+ * @param command The command name.
432
+ * @returns Icon string for the command.
433
+ */
434
+ getCommandIcon(command) {
435
+ return this.commandIcons[command] || 'console';
436
+ }
437
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: ServiceCommandService, deps: [{ token: i1$2.OperationService }, { token: i1.AlertService }], target: i0.ɵɵFactoryTarget.Injectable }); }
438
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: ServiceCommandService, providedIn: 'root' }); }
439
+ }
440
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: ServiceCommandService, decorators: [{
441
+ type: Injectable,
442
+ args: [{
443
+ providedIn: 'root'
444
+ }]
445
+ }], ctorParameters: () => [{ type: i1$2.OperationService }, { type: i1.AlertService }] });
446
+
340
447
  class ServicesDeviceTabComponent {
341
- constructor(route, inventoryService, gridService, statusOptionsService) {
448
+ constructor(route, inventoryService, gridService, statusOptionsService, serviceCommand) {
342
449
  this.route = route;
343
450
  this.inventoryService = inventoryService;
344
451
  this.gridService = gridService;
345
452
  this.statusOptionsService = statusOptionsService;
453
+ this.serviceCommand = serviceCommand;
346
454
  this.deviceId = this.route.snapshot.parent.data.contextData.id;
347
455
  this.sizeRequestDone = false;
348
456
  this.refresh$ = new EventEmitter();
@@ -350,6 +458,7 @@ class ServicesDeviceTabComponent {
350
458
  pageSize: 50,
351
459
  currentPage: 1
352
460
  };
461
+ this.actionControls = [];
353
462
  this.columns = [
354
463
  new StatusGridColumn(this.statusOptionsService),
355
464
  new ServiceNameGridColumn(),
@@ -395,6 +504,8 @@ class ServicesDeviceTabComponent {
395
504
  filtererdSizeRequest
396
505
  ]);
397
506
  const { res, data, paging } = dataResponse;
507
+ const commands = this.serviceCommand.getAllSupportedCommands(data);
508
+ this.actionControls = this.serviceCommand.generateActionControls(commands);
398
509
  const serverSideDataResult = {
399
510
  res,
400
511
  data,
@@ -407,13 +518,13 @@ class ServicesDeviceTabComponent {
407
518
  trackByName(_index, column) {
408
519
  return column.name;
409
520
  }
410
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: ServicesDeviceTabComponent, deps: [{ token: i1$1.ActivatedRoute }, { token: i1$2.InventoryService }, { token: i1.DataGridService }, { token: StatusOptionsService }], target: i0.ɵɵFactoryTarget.Component }); }
411
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: ServicesDeviceTabComponent, selector: "c8y-services-device-tab", ngImport: i0, template: "<div class=\"content-fullpage\">\n <c8y-data-grid\n [title]=\"'Services' | translate\"\n [refresh]=\"refresh$\"\n [actionControls]=\"[]\"\n [pagination]=\"pagination\"\n [columns]=\"columns\"\n [infiniteScroll]=\"'auto'\"\n [serverSideDataCallback]=\"serverSideDataCallback\"\n >\n <c8y-ui-empty-state\n [icon]=\"stats?.size > 0 ? 'search' : 'c8y-tools'\"\n [title]=\"stats?.size > 0 ? (noResultsMessage | translate) : (noDataMessage | translate)\"\n [subtitle]=\"stats?.size > 0 ? (noResultsSubtitle | translate) : null\"\n *emptyStateContext=\"let stats; isLoading as isLoading\"\n [horizontal]=\"stats?.size > 0\"\n ></c8y-ui-empty-state>\n <ng-container *ngFor=\"let column of columns; trackBy: trackByName\">\n <c8y-column [name]=\"column.name\"></c8y-column>\n </ng-container>\n </c8y-data-grid>\n</div>\n", dependencies: [{ kind: "component", type: i1.EmptyStateComponent, selector: "c8y-ui-empty-state", inputs: ["icon", "title", "subtitle", "horizontal"] }, { kind: "directive", type: i1.EmptyStateContextDirective, selector: "[emptyStateContext]" }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.ColumnDirective, selector: "c8y-column", inputs: ["name"] }, { kind: "component", type: i1.DataGridComponent, selector: "c8y-data-grid", inputs: ["title", "loadMoreItemsLabel", "loadingItemsLabel", "showSearch", "refresh", "columns", "rows", "pagination", "infiniteScroll", "serverSideDataCallback", "selectable", "singleSelection", "selectionPrimaryKey", "displayOptions", "actionControls", "bulkActionControls", "headerActionControls", "searchText", "configureColumnsEnabled", "showCounterWarning", "activeClassName", "expandableRows"], outputs: ["rowMouseOver", "rowMouseLeave", "rowClick", "onConfigChange", "onBeforeFilter", "onBeforeSearch", "onFilter", "itemsSelect", "onReload", "onAddCustomColumn", "onRemoveCustomColumn", "onColumnFilterReset", "onSort", "onPageSizeChange", "onColumnReordered", "onColumnVisibilityChange"] }, { kind: "pipe", type: i1.C8yTranslatePipe, name: "translate" }] }); }
521
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: ServicesDeviceTabComponent, deps: [{ token: i1$1.ActivatedRoute }, { token: i1$2.InventoryService }, { token: i1.DataGridService }, { token: StatusOptionsService }, { token: ServiceCommandService }], target: i0.ɵɵFactoryTarget.Component }); }
522
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: ServicesDeviceTabComponent, selector: "c8y-services-device-tab", ngImport: i0, template: "<div class=\"content-fullpage\">\n <c8y-data-grid\n [title]=\"'Services' | translate\"\n [refresh]=\"refresh$\"\n [actionControls]=\"actionControls\"\n [pagination]=\"pagination\"\n [columns]=\"columns\"\n [infiniteScroll]=\"'auto'\"\n [serverSideDataCallback]=\"serverSideDataCallback\"\n >\n <c8y-ui-empty-state\n [icon]=\"stats?.size > 0 ? 'search' : 'c8y-tools'\"\n [title]=\"stats?.size > 0 ? (noResultsMessage | translate) : (noDataMessage | translate)\"\n [subtitle]=\"stats?.size > 0 ? (noResultsSubtitle | translate) : null\"\n *emptyStateContext=\"let stats; isLoading as isLoading\"\n [horizontal]=\"stats?.size > 0\"\n ></c8y-ui-empty-state>\n <ng-container *ngFor=\"let column of columns; trackBy: trackByName\">\n <c8y-column [name]=\"column.name\"></c8y-column>\n </ng-container>\n </c8y-data-grid>\n</div>\n", dependencies: [{ kind: "component", type: i1.EmptyStateComponent, selector: "c8y-ui-empty-state", inputs: ["icon", "title", "subtitle", "horizontal"] }, { kind: "directive", type: i1.EmptyStateContextDirective, selector: "[emptyStateContext]" }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.ColumnDirective, selector: "c8y-column", inputs: ["name"] }, { kind: "component", type: i1.DataGridComponent, selector: "c8y-data-grid", inputs: ["title", "loadMoreItemsLabel", "loadingItemsLabel", "showSearch", "refresh", "columns", "rows", "pagination", "infiniteScroll", "serverSideDataCallback", "selectable", "singleSelection", "selectionPrimaryKey", "displayOptions", "actionControls", "bulkActionControls", "headerActionControls", "searchText", "configureColumnsEnabled", "showCounterWarning", "activeClassName", "expandableRows"], outputs: ["rowMouseOver", "rowMouseLeave", "rowClick", "onConfigChange", "onBeforeFilter", "onBeforeSearch", "onFilter", "itemsSelect", "onReload", "onAddCustomColumn", "onRemoveCustomColumn", "onColumnFilterReset", "onSort", "onPageSizeChange", "onColumnReordered", "onColumnVisibilityChange"] }, { kind: "pipe", type: i1.C8yTranslatePipe, name: "translate" }] }); }
412
523
  }
413
524
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: ServicesDeviceTabComponent, decorators: [{
414
525
  type: Component,
415
- args: [{ selector: 'c8y-services-device-tab', template: "<div class=\"content-fullpage\">\n <c8y-data-grid\n [title]=\"'Services' | translate\"\n [refresh]=\"refresh$\"\n [actionControls]=\"[]\"\n [pagination]=\"pagination\"\n [columns]=\"columns\"\n [infiniteScroll]=\"'auto'\"\n [serverSideDataCallback]=\"serverSideDataCallback\"\n >\n <c8y-ui-empty-state\n [icon]=\"stats?.size > 0 ? 'search' : 'c8y-tools'\"\n [title]=\"stats?.size > 0 ? (noResultsMessage | translate) : (noDataMessage | translate)\"\n [subtitle]=\"stats?.size > 0 ? (noResultsSubtitle | translate) : null\"\n *emptyStateContext=\"let stats; isLoading as isLoading\"\n [horizontal]=\"stats?.size > 0\"\n ></c8y-ui-empty-state>\n <ng-container *ngFor=\"let column of columns; trackBy: trackByName\">\n <c8y-column [name]=\"column.name\"></c8y-column>\n </ng-container>\n </c8y-data-grid>\n</div>\n" }]
416
- }], ctorParameters: () => [{ type: i1$1.ActivatedRoute }, { type: i1$2.InventoryService }, { type: i1.DataGridService }, { type: StatusOptionsService }] });
526
+ args: [{ selector: 'c8y-services-device-tab', template: "<div class=\"content-fullpage\">\n <c8y-data-grid\n [title]=\"'Services' | translate\"\n [refresh]=\"refresh$\"\n [actionControls]=\"actionControls\"\n [pagination]=\"pagination\"\n [columns]=\"columns\"\n [infiniteScroll]=\"'auto'\"\n [serverSideDataCallback]=\"serverSideDataCallback\"\n >\n <c8y-ui-empty-state\n [icon]=\"stats?.size > 0 ? 'search' : 'c8y-tools'\"\n [title]=\"stats?.size > 0 ? (noResultsMessage | translate) : (noDataMessage | translate)\"\n [subtitle]=\"stats?.size > 0 ? (noResultsSubtitle | translate) : null\"\n *emptyStateContext=\"let stats; isLoading as isLoading\"\n [horizontal]=\"stats?.size > 0\"\n ></c8y-ui-empty-state>\n <ng-container *ngFor=\"let column of columns; trackBy: trackByName\">\n <c8y-column [name]=\"column.name\"></c8y-column>\n </ng-container>\n </c8y-data-grid>\n</div>\n" }]
527
+ }], ctorParameters: () => [{ type: i1$1.ActivatedRoute }, { type: i1$2.InventoryService }, { type: i1.DataGridService }, { type: StatusOptionsService }, { type: ServiceCommandService }] });
417
528
 
418
529
  class ServicesDeviceTabGuard {
419
530
  constructor(inventoryService) {
@@ -1 +1 @@
1
- {"version":3,"file":"c8y-ngx-components-services.mjs","sources":["../../services/services-device-tab/columns/last-updated-date.cell-renderer.component.ts","../../services/services-device-tab/columns/last-updated-date.device-grid-column.ts","../../services/services-device-tab/columns/name.cell-renderer.component.ts","../../services/services-device-tab/columns/name.grid-column.ts","../../services/services-device-tab/columns/service-type.grid-column.ts","../../services/status-options/status-options.model.ts","../../services/status-options/status-options.service.ts","../../services/services-device-tab/columns/status.cell-renderer.component.ts","../../services/services-device-tab/columns/status.cell-renderer.component.html","../../services/services-device-tab/columns/status.grid-column.ts","../../services/services-device-tab/service-device-tab.model.ts","../../services/services-device-tab/services-device-tab.component.ts","../../services/services-device-tab/services-device-tab.component.html","../../services/services-device-tab/services-device-tab.guard.ts","../../services/services-device-tab/services.breadcrumb-factory.ts","../../services/services-device-tab/services-device-tab.module.ts","../../services/services.module.ts","../../services/c8y-ngx-components-services.ts"],"sourcesContent":["import { Component } from '@angular/core';\nimport { CellRendererContext } from '@c8y/ngx-components';\n\n@Component({\n template: `{{ context.value | c8yDate }}`,\n selector: 'c8y-last-updated-date-cell-renderer'\n})\nexport class LastUpdatedDateCellRendererComponent {\n constructor(public context: CellRendererContext) {}\n}\n","import { FormGroup } from '@angular/forms';\nimport { BaseColumn, ColumnConfig, gettext } from '@c8y/ngx-components';\nimport { LastUpdatedDateCellRendererComponent } from './last-updated-date.cell-renderer.component';\n\nexport class LastUpdatedDateGridColumn extends BaseColumn {\n constructor(initialColumnConfig?: ColumnConfig) {\n super(initialColumnConfig);\n\n this.path = 'lastUpdated';\n this.name = 'lastUpdatedDate';\n this.header = gettext('Last updated');\n this.cellRendererComponent = LastUpdatedDateCellRendererComponent;\n\n this.filterable = true;\n this.filteringConfig = {\n fields: [\n {\n type: 'object',\n key: 'lastUpdated',\n templateOptions: {\n label: gettext('Show services updated`between dates`')\n },\n fieldGroup: [\n {\n type: 'date-time',\n key: 'after',\n templateOptions: {\n label: gettext('from`date`')\n },\n expressionProperties: {\n 'templateOptions.maxDate': (model: any) => model?.before\n }\n },\n {\n type: 'date-time',\n key: 'before',\n templateOptions: {\n label: gettext('to`date`')\n },\n expressionProperties: {\n 'templateOptions.minDate': (model: any) => model?.after\n }\n }\n ]\n }\n ],\n formGroup: new FormGroup({}),\n getFilter: model => {\n const filter: any = {};\n const dates = model && model.lastUpdated;\n if (dates && (dates.after || dates.before)) {\n filter.__and = [];\n if (dates.after) {\n const after = this.formatDate(dates.after);\n filter.__and.push({\n 'lastUpdated.date': { __gt: after }\n });\n }\n if (dates.before) {\n const before = this.formatDate(dates.before);\n filter.__and.push({\n 'lastUpdated.date': { __lt: before }\n });\n }\n }\n return filter;\n }\n };\n\n this.sortable = true;\n this.sortingConfig = {\n pathSortingConfigs: [{ path: 'lastUpdated.date' }]\n };\n }\n\n protected formatDate(dateToFormat: string): string {\n return new Date(dateToFormat).toISOString();\n }\n}\n","import { Component } from '@angular/core';\nimport { CellRendererContext } from '@c8y/ngx-components';\n\n@Component({\n template: `\n <a class=\"interact\" [title]=\"context.item.name\" [routerLink]=\"['/service', context.item.id]\">\n {{ context.item.name }}\n </a>\n `,\n selector: 'c8y-services-name-cell-renderer'\n})\nexport class ServicesNameCellRendererComponent {\n constructor(public context: CellRendererContext) {}\n}\n","import {\n BaseColumn,\n ColumnConfig,\n getBasicInputArrayFormFieldConfig,\n gettext\n} from '@c8y/ngx-components';\nimport { ServicesNameCellRendererComponent } from './name.cell-renderer.component';\n\nexport class ServiceNameGridColumn extends BaseColumn {\n constructor(initialColumnConfig?: ColumnConfig) {\n super(initialColumnConfig);\n this.name = 'name';\n this.path = 'name';\n this.header = gettext('Name');\n this.cellRendererComponent = ServicesNameCellRendererComponent;\n\n this.filterable = true;\n this.filteringConfig = {\n fields: getBasicInputArrayFormFieldConfig({\n key: 'names',\n label: gettext('Filter services by name'),\n addText: gettext('Add next`name`'),\n tooltip: gettext('Use * as a wildcard character'),\n placeholder: gettext('daemon`SERVICE_NAME`')\n }),\n getFilter(model: any): any {\n const filter: any = {};\n if (model.names.length) {\n filter.name = { __in: model.names };\n }\n return filter;\n }\n };\n\n this.sortable = true;\n this.sortingConfig = {\n pathSortingConfigs: [{ path: this.path }]\n };\n }\n}\n","import {\n BaseColumn,\n ColumnConfig,\n getBasicInputArrayFormFieldConfig,\n gettext\n} from '@c8y/ngx-components';\n\nexport class ServiceTypeGridColumn extends BaseColumn {\n constructor(initialColumnConfig?: ColumnConfig) {\n super(initialColumnConfig);\n this.name = 'serviceType';\n this.path = 'serviceType';\n this.header = gettext('Type');\n\n this.filterable = true;\n\n this.filteringConfig = {\n fields: getBasicInputArrayFormFieldConfig({\n key: 'serviceTypes',\n label: gettext('Filter services by type'),\n addText: gettext('Add next`type`'),\n tooltip: gettext('Use * as a wildcard character'),\n placeholder: 'systemd'\n }),\n getFilter(model: any): any {\n const filter: any = {};\n if (model.serviceTypes.length) {\n filter.serviceType = { __in: model.serviceTypes };\n }\n return filter;\n }\n };\n\n this.sortable = true;\n this.sortingConfig = {\n pathSortingConfigs: [{ path: this.path }]\n };\n }\n}\n","import { InjectionToken } from '@angular/core';\nimport { gettext, hookGeneric, GenericHookType, GenericHookOptions } from '@c8y/ngx-components';\n\n/**\n * Extension hook allowing to register custom service statuses and configure their visual presentation.\n * @deprecated Consider using the `hookServiceStatus` function instead.\n */\nexport const HOOK_SERVICE_STATUS = new InjectionToken<StatusOption | StatusOption[]>(\n 'HOOK_SERVICE_STATUS'\n);\n\n/**\n * Extension hook allowing to register custom service statuses and configure their visual presentation.\n *\n * You can either provide a single `StatusOption` as parameter:\n * ```typescript\n * hookServiceStatus(...)\n * ```\n *\n * Or an array to directly register multiple:\n * ```typescript\n * hookServiceStatus([...])\n * ```\n *\n * Or you provide an Service that implements `ExtensionFactory<StatusOption>`\n * ```typescript\n * export class MyServiceStatusFactory implements ExtensionFactory<StatusOption> {...}\n * ...\n * hookServiceStatus(MyServiceStatusFactory)\n * ```\n * A typed alternative to `HOOK_SERVICE_STATUS`.\n * @param status The `StatusOption`'s or `ExtensionFactory` to be provided.\n * @returns An `Provider` to be provided in your module.\n */\nexport function hookServiceStatus(\n status: GenericHookType<StatusOption>,\n options?: Partial<GenericHookOptions>\n) {\n return hookGeneric<StatusOption>(status, HOOK_SERVICE_STATUS, options);\n}\n\n/**\n * Defines the visual presentation of a service status option.\n */\nexport interface StatusOption {\n /**\n * Key used for this status in the c8y_Service object.\n */\n key: string;\n /**\n * Human readable name of the status used to be translated.\n */\n label: string;\n /**\n * An icon to use to display the status.\n */\n icon: string;\n /**\n * CSS class(es) used to e.g. accent the status (contextual color, etc.)\n */\n class?: string;\n}\n\n/**\n * Standard status options supported by the platform.\n */\nexport const SERVICE_STATUS_OPTIONS: StatusOption[] = [\n {\n key: 'up',\n label: gettext('Up'),\n icon: 'check-circle',\n class: 'text-success'\n },\n {\n key: 'down',\n label: gettext('Down'),\n icon: 'exclamation-circle',\n class: 'text-danger'\n },\n {\n key: 'unknown',\n label: gettext('Unknown'),\n icon: 'inactive-state'\n }\n];\n","import { Inject, Injectable, Optional } from '@angular/core';\nimport { flatten } from 'lodash-es';\nimport { HOOK_SERVICE_STATUS, SERVICE_STATUS_OPTIONS, StatusOption } from './status-options.model';\n\n/**\n * The service for system wide registered service status options.\n * It provides the standard service statuses plus all custom status options\n * registered with the <code>HOOK_SERVICE_STATUS</code> extension hook.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class StatusOptionsService {\n get options(): StatusOption[] {\n return this._options;\n }\n\n private _options: StatusOption[];\n\n constructor(\n @Optional() @Inject(HOOK_SERVICE_STATUS) options: Array<StatusOption | StatusOption[]>\n ) {\n this._options = [...SERVICE_STATUS_OPTIONS, ...flatten(options)];\n }\n}\n","import { Component } from '@angular/core';\nimport { CellRendererContext } from '@c8y/ngx-components';\nimport { StatusOptionsService } from '../../status-options';\n\n@Component({\n templateUrl: 'status.cell-renderer.component.html',\n selector: 'c8y-services-status-cell-renderer'\n})\nexport class ServicesStatusCellRendererComponent {\n constructor(\n public context: CellRendererContext,\n public statusOptionsService: StatusOptionsService\n ) {}\n}\n","<span [ngSwitch]=\"context.item.status\">\n <ng-container *ngFor=\"let option of statusOptionsService.options\">\n <i\n *ngSwitchCase=\"option.key\"\n [c8yIcon]=\"option.icon\"\n class=\"{{ option.class }}\"\n [tooltip]=\"option.label | translate\"\n container=\"body\"\n placement=\"top\"\n ></i>\n </ng-container>\n <i\n *ngSwitchDefault\n c8yIcon=\"job\"\n class=\"text-primary\"\n [tooltip]=\"context.item.status\"\n container=\"body\"\n placement=\"top\"\n ></i>\n</span>\n","import {\n BaseColumn,\n ColumnConfig,\n ColumnDataType,\n getBasicInputArrayFormFieldConfig,\n gettext\n} from '@c8y/ngx-components';\nimport { entries } from 'lodash-es';\nimport { StatusOptionsService } from '../../status-options';\nimport { ServicesStatusCellRendererComponent } from './status.cell-renderer.component';\n\nexport class StatusGridColumn extends BaseColumn {\n constructor(statusOptionsService: StatusOptionsService, initialColumnConfig?: ColumnConfig) {\n super(initialColumnConfig);\n this.name = 'status';\n this.path = 'status';\n this.header = gettext('Status');\n this.dataType = ColumnDataType.Icon;\n this.cellRendererComponent = ServicesStatusCellRendererComponent;\n this.filterable = true;\n this.resizable = false;\n\n this.filteringConfig = {\n fields: [\n {\n key: 'statusOptions',\n type: 'object',\n props: {\n label: gettext('Show devices with status')\n },\n fieldGroup: [\n ...statusOptionsService.options.map(option => ({\n key: option.key,\n type: 'switch',\n props: {\n label: option.label,\n optionDataCy: option.key\n }\n }))\n ]\n },\n ...getBasicInputArrayFormFieldConfig({\n key: 'custom',\n label: gettext('or filter by custom status'),\n addText: gettext('Add next`custom status`'),\n tooltip: gettext('Use * as a wildcard character'),\n placeholder: gettext('restarting`SERVICE_STATUS`'),\n optional: true\n })\n ],\n getFilter(model) {\n const filter: any = {};\n filter.status = {\n __in: [\n ...entries(model?.statusOptions || {})\n .filter(([_, value]) => !!value)\n .map(([key, _]) => key),\n ...model.custom.filter(c => !!c)\n ]\n };\n return filter;\n }\n };\n\n this.sortable = true;\n this.sortingConfig = {\n pathSortingConfigs: [{ path: this.path }]\n };\n }\n}\n","export const SERVICE_FRAGMENT = 'c8y_Service';\n","import { Component, EventEmitter } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { IManagedObject, InventoryService, IResultList, QueriesUtil } from '@c8y/client';\nimport {\n Column,\n DataGridService,\n DataSourceModifier,\n gettext,\n ServerSideDataResult\n} from '@c8y/ngx-components';\nimport { StatusOptionsService } from '../status-options';\nimport {\n LastUpdatedDateGridColumn,\n ServiceNameGridColumn,\n ServiceTypeGridColumn,\n StatusGridColumn\n} from './columns';\nimport { SERVICE_FRAGMENT } from './service-device-tab.model';\n\n@Component({\n selector: 'c8y-services-device-tab',\n templateUrl: 'services-device-tab.component.html'\n})\nexport class ServicesDeviceTabComponent {\n deviceId: string | number = this.route.snapshot.parent.data.contextData.id;\n\n sizeRequest: Promise<number>;\n sizeRequestDone = false;\n\n refresh$: EventEmitter<void> = new EventEmitter();\n pagination = {\n pageSize: 50,\n currentPage: 1\n };\n\n columns: Column[] = [\n new StatusGridColumn(this.statusOptionsService),\n new ServiceNameGridColumn(),\n new ServiceTypeGridColumn(),\n new LastUpdatedDateGridColumn()\n ];\n\n serverSideDataCallback: any;\n\n noResultsMessage = gettext('No results to display.');\n noDataMessage = gettext('No services to display.');\n noResultsSubtitle = gettext('Refine your search terms or check your spelling.');\n\n private queriesUtil: QueriesUtil = new QueriesUtil();\n\n constructor(\n private route: ActivatedRoute,\n private inventoryService: InventoryService,\n private gridService: DataGridService,\n private statusOptionsService: StatusOptionsService\n ) {\n this.serverSideDataCallback = this.onDataSourceModifier.bind(this);\n this.sizeRequest = this.inventoryService\n .childAdditionsList(this.deviceId, {\n query: `type eq ${SERVICE_FRAGMENT}`,\n withTotalPages: true,\n pageSize: 1\n })\n .then(response => {\n this.sizeRequestDone = true;\n return response?.paging?.totalPages;\n });\n }\n\n async onDataSourceModifier(\n dataSourceModifier: DataSourceModifier\n ): Promise<ServerSideDataResult> {\n const query = this.queriesUtil.buildQuery(\n this.queriesUtil.addAndFilter(this.gridService.getQueryObj(dataSourceModifier.columns), {\n type: SERVICE_FRAGMENT\n })\n );\n\n const dataRequest: Promise<IResultList<IManagedObject>> =\n this.inventoryService.childAdditionsList(this.deviceId, {\n query,\n withTotalPages: true,\n pageSize: dataSourceModifier.pagination.pageSize,\n currentPage: dataSourceModifier.pagination.currentPage\n });\n\n const filtererdSizeRequest: Promise<number> = this.inventoryService\n .childAdditionsList(this.deviceId, {\n query,\n withTotalPages: true,\n pageSize: 1\n })\n .then(response => response?.paging?.totalPages);\n\n const [dataResponse, size, filteredSize] = await Promise.all([\n dataRequest,\n this.sizeRequest,\n filtererdSizeRequest\n ]);\n\n const { res, data, paging } = dataResponse;\n\n const serverSideDataResult: ServerSideDataResult = {\n res,\n data,\n paging,\n filteredSize,\n size\n };\n\n return serverSideDataResult;\n }\n\n trackByName(_index, column: Column): string {\n return column.name;\n }\n}\n","<div class=\"content-fullpage\">\n <c8y-data-grid\n [title]=\"'Services' | translate\"\n [refresh]=\"refresh$\"\n [actionControls]=\"[]\"\n [pagination]=\"pagination\"\n [columns]=\"columns\"\n [infiniteScroll]=\"'auto'\"\n [serverSideDataCallback]=\"serverSideDataCallback\"\n >\n <c8y-ui-empty-state\n [icon]=\"stats?.size > 0 ? 'search' : 'c8y-tools'\"\n [title]=\"stats?.size > 0 ? (noResultsMessage | translate) : (noDataMessage | translate)\"\n [subtitle]=\"stats?.size > 0 ? (noResultsSubtitle | translate) : null\"\n *emptyStateContext=\"let stats; isLoading as isLoading\"\n [horizontal]=\"stats?.size > 0\"\n ></c8y-ui-empty-state>\n <ng-container *ngFor=\"let column of columns; trackBy: trackByName\">\n <c8y-column [name]=\"column.name\"></c8y-column>\n </ng-container>\n </c8y-data-grid>\n</div>\n","import { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot } from '@angular/router';\nimport { InventoryService } from '@c8y/client';\nimport { get } from 'lodash-es';\nimport { SERVICE_FRAGMENT } from './service-device-tab.model';\n\n@Injectable({ providedIn: 'root' })\nexport class ServicesDeviceTabGuard {\n constructor(private inventoryService: InventoryService) {}\n\n canActivate(route: ActivatedRouteSnapshot): Promise<boolean> {\n const id = get(route, 'params.id') || get(route, 'parent.params.id');\n return this.inventoryService\n .childAdditionsList({ id }, { query: `type eq ${SERVICE_FRAGMENT}`, pageSize: 1 })\n .then(result => !!result?.data?.length);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { InventoryService, ISource } from '@c8y/client';\nimport {\n Breadcrumb,\n BreadcrumbFactory,\n BreadcrumbItem,\n gettext,\n ViewContext\n} from '@c8y/ngx-components';\n\n@Injectable()\nexport class ServicesBreadcrumbFactory implements BreadcrumbFactory {\n private contextData;\n\n constructor(private inventoryService: InventoryService) {}\n\n async get(route: ActivatedRoute) {\n const { context, contextData } = route.snapshot.data;\n const { routeConfig } = route.snapshot;\n\n this.contextData = contextData || this.contextData;\n\n if (\n (context === ViewContext.Service || (routeConfig as any)?.context === ViewContext.Service) &&\n !!this.contextData\n ) {\n const serviceMO = (\n await this.inventoryService.detail(this.contextData, { withParents: true })\n )?.data;\n const breadcrumb: Breadcrumb = { items: [] };\n const breadcrumbItems: BreadcrumbItem[] = [];\n const device: ISource = serviceMO?.additionParents?.references[0]?.managedObject;\n\n if (device) {\n breadcrumbItems.push({\n label: device.name,\n path: `/device/${device.id}`\n });\n breadcrumbItems.push({\n label: gettext('Services'),\n path: `/device/${device.id}/services`\n });\n breadcrumbItems.push({\n label: serviceMO.name\n } as BreadcrumbItem);\n }\n\n breadcrumb.items = breadcrumbItems;\n return breadcrumb;\n }\n }\n}\n","import { NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { CoreModule, gettext, hookBreadcrumb, hookRoute, ViewContext } from '@c8y/ngx-components';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport {\n LastUpdatedDateCellRendererComponent,\n ServicesNameCellRendererComponent,\n ServicesStatusCellRendererComponent\n} from './columns';\nimport { ServicesDeviceTabComponent } from './services-device-tab.component';\nimport { ServicesDeviceTabGuard } from './services-device-tab.guard';\nimport { ServicesBreadcrumbFactory } from './services.breadcrumb-factory';\n\n@NgModule({\n imports: [CoreModule, RouterModule, TooltipModule],\n declarations: [\n ServicesDeviceTabComponent,\n LastUpdatedDateCellRendererComponent,\n ServicesNameCellRendererComponent,\n ServicesStatusCellRendererComponent\n ],\n providers: [\n ServicesBreadcrumbFactory,\n hookRoute({\n context: ViewContext.Device,\n path: 'services',\n component: ServicesDeviceTabComponent,\n label: gettext('Services'),\n icon: 'statistics',\n priority: 500,\n canActivate: [ServicesDeviceTabGuard]\n }),\n hookBreadcrumb(ServicesBreadcrumbFactory)\n ]\n})\nexport class ServicesDeviceTabModule {}\n","import { NgModule } from '@angular/core';\nimport { CoreModule } from '@c8y/ngx-components';\nimport { ServicesDeviceTabModule } from './services-device-tab';\n\n@NgModule({\n imports: [CoreModule, ServicesDeviceTabModule]\n})\nexport class ServicesModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i2","i2.StatusOptionsService","i1","i3","i4.StatusOptionsService","i5"],"mappings":"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"}
1
+ {"version":3,"file":"c8y-ngx-components-services.mjs","sources":["../../services/services-device-tab/columns/last-updated-date.cell-renderer.component.ts","../../services/services-device-tab/columns/last-updated-date.device-grid-column.ts","../../services/services-device-tab/columns/name.cell-renderer.component.ts","../../services/services-device-tab/columns/name.grid-column.ts","../../services/services-device-tab/columns/service-type.grid-column.ts","../../services/status-options/status-options.model.ts","../../services/status-options/status-options.service.ts","../../services/services-device-tab/columns/status.cell-renderer.component.ts","../../services/services-device-tab/columns/status.cell-renderer.component.html","../../services/services-device-tab/columns/status.grid-column.ts","../../services/services-device-tab/service-device-tab.model.ts","../../services/services-device-tab/service-command.service.ts","../../services/services-device-tab/services-device-tab.component.ts","../../services/services-device-tab/services-device-tab.component.html","../../services/services-device-tab/services-device-tab.guard.ts","../../services/services-device-tab/services.breadcrumb-factory.ts","../../services/services-device-tab/services-device-tab.module.ts","../../services/services.module.ts","../../services/c8y-ngx-components-services.ts"],"sourcesContent":["import { Component } from '@angular/core';\nimport { CellRendererContext } from '@c8y/ngx-components';\n\n@Component({\n template: `{{ context.value | c8yDate }}`,\n selector: 'c8y-last-updated-date-cell-renderer'\n})\nexport class LastUpdatedDateCellRendererComponent {\n constructor(public context: CellRendererContext) {}\n}\n","import { FormGroup } from '@angular/forms';\nimport { BaseColumn, ColumnConfig, gettext } from '@c8y/ngx-components';\nimport { LastUpdatedDateCellRendererComponent } from './last-updated-date.cell-renderer.component';\n\nexport class LastUpdatedDateGridColumn extends BaseColumn {\n constructor(initialColumnConfig?: ColumnConfig) {\n super(initialColumnConfig);\n\n this.path = 'lastUpdated';\n this.name = 'lastUpdatedDate';\n this.header = gettext('Last updated');\n this.cellRendererComponent = LastUpdatedDateCellRendererComponent;\n\n this.filterable = true;\n this.filteringConfig = {\n fields: [\n {\n type: 'object',\n key: 'lastUpdated',\n templateOptions: {\n label: gettext('Show services updated`between dates`')\n },\n fieldGroup: [\n {\n type: 'date-time',\n key: 'after',\n templateOptions: {\n label: gettext('from`date`')\n },\n expressionProperties: {\n 'templateOptions.maxDate': (model: any) => model?.before\n }\n },\n {\n type: 'date-time',\n key: 'before',\n templateOptions: {\n label: gettext('to`date`')\n },\n expressionProperties: {\n 'templateOptions.minDate': (model: any) => model?.after\n }\n }\n ]\n }\n ],\n formGroup: new FormGroup({}),\n getFilter: model => {\n const filter: any = {};\n const dates = model && model.lastUpdated;\n if (dates && (dates.after || dates.before)) {\n filter.__and = [];\n if (dates.after) {\n const after = this.formatDate(dates.after);\n filter.__and.push({\n 'lastUpdated.date': { __gt: after }\n });\n }\n if (dates.before) {\n const before = this.formatDate(dates.before);\n filter.__and.push({\n 'lastUpdated.date': { __lt: before }\n });\n }\n }\n return filter;\n }\n };\n\n this.sortable = true;\n this.sortingConfig = {\n pathSortingConfigs: [{ path: 'lastUpdated.date' }]\n };\n }\n\n protected formatDate(dateToFormat: string): string {\n return new Date(dateToFormat).toISOString();\n }\n}\n","import { Component } from '@angular/core';\nimport { CellRendererContext } from '@c8y/ngx-components';\n\n@Component({\n template: `\n <a class=\"interact\" [title]=\"context.item.name\" [routerLink]=\"['/service', context.item.id]\">\n {{ context.item.name }}\n </a>\n `,\n selector: 'c8y-services-name-cell-renderer'\n})\nexport class ServicesNameCellRendererComponent {\n constructor(public context: CellRendererContext) {}\n}\n","import {\n BaseColumn,\n ColumnConfig,\n getBasicInputArrayFormFieldConfig,\n gettext\n} from '@c8y/ngx-components';\nimport { ServicesNameCellRendererComponent } from './name.cell-renderer.component';\n\nexport class ServiceNameGridColumn extends BaseColumn {\n constructor(initialColumnConfig?: ColumnConfig) {\n super(initialColumnConfig);\n this.name = 'name';\n this.path = 'name';\n this.header = gettext('Name');\n this.cellRendererComponent = ServicesNameCellRendererComponent;\n\n this.filterable = true;\n this.filteringConfig = {\n fields: getBasicInputArrayFormFieldConfig({\n key: 'names',\n label: gettext('Filter services by name'),\n addText: gettext('Add next`name`'),\n tooltip: gettext('Use * as a wildcard character'),\n placeholder: gettext('daemon`SERVICE_NAME`')\n }),\n getFilter(model: any): any {\n const filter: any = {};\n if (model.names.length) {\n filter.name = { __in: model.names };\n }\n return filter;\n }\n };\n\n this.sortable = true;\n this.sortingConfig = {\n pathSortingConfigs: [{ path: this.path }]\n };\n }\n}\n","import {\n BaseColumn,\n ColumnConfig,\n getBasicInputArrayFormFieldConfig,\n gettext\n} from '@c8y/ngx-components';\n\nexport class ServiceTypeGridColumn extends BaseColumn {\n constructor(initialColumnConfig?: ColumnConfig) {\n super(initialColumnConfig);\n this.name = 'serviceType';\n this.path = 'serviceType';\n this.header = gettext('Type');\n\n this.filterable = true;\n\n this.filteringConfig = {\n fields: getBasicInputArrayFormFieldConfig({\n key: 'serviceTypes',\n label: gettext('Filter services by type'),\n addText: gettext('Add next`type`'),\n tooltip: gettext('Use * as a wildcard character'),\n placeholder: 'systemd'\n }),\n getFilter(model: any): any {\n const filter: any = {};\n if (model.serviceTypes.length) {\n filter.serviceType = { __in: model.serviceTypes };\n }\n return filter;\n }\n };\n\n this.sortable = true;\n this.sortingConfig = {\n pathSortingConfigs: [{ path: this.path }]\n };\n }\n}\n","import { InjectionToken } from '@angular/core';\nimport { gettext, hookGeneric, GenericHookType, GenericHookOptions } from '@c8y/ngx-components';\n\n/**\n * Extension hook allowing to register custom service statuses and configure their visual presentation.\n * @deprecated Consider using the `hookServiceStatus` function instead.\n */\nexport const HOOK_SERVICE_STATUS = new InjectionToken<StatusOption | StatusOption[]>(\n 'HOOK_SERVICE_STATUS'\n);\n\n/**\n * Extension hook allowing to register custom service statuses and configure their visual presentation.\n *\n * You can either provide a single `StatusOption` as parameter:\n * ```typescript\n * hookServiceStatus(...)\n * ```\n *\n * Or an array to directly register multiple:\n * ```typescript\n * hookServiceStatus([...])\n * ```\n *\n * Or you provide an Service that implements `ExtensionFactory<StatusOption>`\n * ```typescript\n * export class MyServiceStatusFactory implements ExtensionFactory<StatusOption> {...}\n * ...\n * hookServiceStatus(MyServiceStatusFactory)\n * ```\n * A typed alternative to `HOOK_SERVICE_STATUS`.\n * @param status The `StatusOption`'s or `ExtensionFactory` to be provided.\n * @returns An `Provider` to be provided in your module.\n */\nexport function hookServiceStatus(\n status: GenericHookType<StatusOption>,\n options?: Partial<GenericHookOptions>\n) {\n return hookGeneric<StatusOption>(status, HOOK_SERVICE_STATUS, options);\n}\n\n/**\n * Defines the visual presentation of a service status option.\n */\nexport interface StatusOption {\n /**\n * Key used for this status in the c8y_Service object.\n */\n key: string;\n /**\n * Human readable name of the status used to be translated.\n */\n label: string;\n /**\n * An icon to use to display the status.\n */\n icon: string;\n /**\n * CSS class(es) used to e.g. accent the status (contextual color, etc.)\n */\n class?: string;\n}\n\n/**\n * Standard status options supported by the platform.\n */\nexport const SERVICE_STATUS_OPTIONS: StatusOption[] = [\n {\n key: 'up',\n label: gettext('Up'),\n icon: 'check-circle',\n class: 'text-success'\n },\n {\n key: 'down',\n label: gettext('Down'),\n icon: 'exclamation-circle',\n class: 'text-danger'\n },\n {\n key: 'unknown',\n label: gettext('Unknown'),\n icon: 'inactive-state'\n }\n];\n","import { Inject, Injectable, Optional } from '@angular/core';\nimport { flatten } from 'lodash-es';\nimport { HOOK_SERVICE_STATUS, SERVICE_STATUS_OPTIONS, StatusOption } from './status-options.model';\n\n/**\n * The service for system wide registered service status options.\n * It provides the standard service statuses plus all custom status options\n * registered with the <code>HOOK_SERVICE_STATUS</code> extension hook.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class StatusOptionsService {\n get options(): StatusOption[] {\n return this._options;\n }\n\n private _options: StatusOption[];\n\n constructor(\n @Optional() @Inject(HOOK_SERVICE_STATUS) options: Array<StatusOption | StatusOption[]>\n ) {\n this._options = [...SERVICE_STATUS_OPTIONS, ...flatten(options)];\n }\n}\n","import { Component } from '@angular/core';\nimport { CellRendererContext } from '@c8y/ngx-components';\nimport { StatusOptionsService } from '../../status-options';\n\n@Component({\n templateUrl: 'status.cell-renderer.component.html',\n selector: 'c8y-services-status-cell-renderer'\n})\nexport class ServicesStatusCellRendererComponent {\n constructor(\n public context: CellRendererContext,\n public statusOptionsService: StatusOptionsService\n ) {}\n}\n","<span [ngSwitch]=\"context.item.status\">\n <ng-container *ngFor=\"let option of statusOptionsService.options\">\n <i\n *ngSwitchCase=\"option.key\"\n [c8yIcon]=\"option.icon\"\n class=\"{{ option.class }}\"\n [tooltip]=\"option.label | translate\"\n container=\"body\"\n placement=\"top\"\n ></i>\n </ng-container>\n <i\n *ngSwitchDefault\n c8yIcon=\"job\"\n class=\"text-primary\"\n [tooltip]=\"context.item.status\"\n container=\"body\"\n placement=\"top\"\n ></i>\n</span>\n","import {\n BaseColumn,\n ColumnConfig,\n ColumnDataType,\n getBasicInputArrayFormFieldConfig,\n gettext\n} from '@c8y/ngx-components';\nimport { entries } from 'lodash-es';\nimport { StatusOptionsService } from '../../status-options';\nimport { ServicesStatusCellRendererComponent } from './status.cell-renderer.component';\n\nexport class StatusGridColumn extends BaseColumn {\n constructor(statusOptionsService: StatusOptionsService, initialColumnConfig?: ColumnConfig) {\n super(initialColumnConfig);\n this.name = 'status';\n this.path = 'status';\n this.header = gettext('Status');\n this.dataType = ColumnDataType.Icon;\n this.cellRendererComponent = ServicesStatusCellRendererComponent;\n this.filterable = true;\n this.resizable = false;\n\n this.filteringConfig = {\n fields: [\n {\n key: 'statusOptions',\n type: 'object',\n props: {\n label: gettext('Show devices with status')\n },\n fieldGroup: [\n ...statusOptionsService.options.map(option => ({\n key: option.key,\n type: 'switch',\n props: {\n label: option.label,\n optionDataCy: option.key\n }\n }))\n ]\n },\n ...getBasicInputArrayFormFieldConfig({\n key: 'custom',\n label: gettext('or filter by custom status'),\n addText: gettext('Add next`custom status`'),\n tooltip: gettext('Use * as a wildcard character'),\n placeholder: gettext('restarting`SERVICE_STATUS`'),\n optional: true\n })\n ],\n getFilter(model) {\n const filter: any = {};\n filter.status = {\n __in: [\n ...entries(model?.statusOptions || {})\n .filter(([_, value]) => !!value)\n .map(([key, _]) => key),\n ...model.custom.filter(c => !!c)\n ]\n };\n return filter;\n }\n };\n\n this.sortable = true;\n this.sortingConfig = {\n pathSortingConfigs: [{ path: this.path }]\n };\n }\n}\n","export const SERVICE_FRAGMENT = 'c8y_Service';\n\nexport interface Service {\n id: string;\n name: string;\n serviceType: string;\n status: string;\n c8y_SupportedOperations?: string[];\n c8y_SupportedServiceCommands?: string[];\n [key: string]: any;\n}\n","import { Injectable } from '@angular/core';\nimport { Observable, from } from 'rxjs';\nimport { OperationService, IOperation, IResult } from '@c8y/client';\nimport { ActionControl, AlertService, gettext } from '@c8y/ngx-components';\nimport { Service } from './service-device-tab.model';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ServiceCommandService {\n private readonly DEFAULT_COMMANDS = ['START', 'STOP', 'RESTART'];\n private commandIcons: { [key: string]: string } = {\n START: 'play-circle',\n STOP: 'stop-circle',\n RESTART: 'refresh'\n };\n\n constructor(\n private operationService: OperationService,\n private alertService: AlertService\n ) {}\n\n /**\n * Check if the service supports service commands.\n * @param service The service object containing supported operations.\n * @returns boolean indicating if the service supports service commands.\n */\n isServiceCommandSupported(service: Service): boolean {\n return service.c8y_SupportedOperations?.includes('c8y_ServiceCommand');\n }\n\n /**\n * Get the list of supported service commands for the given service object.\n * @param service The service object containing the c8y_SupportedServiceCommands fragment.\n * @returns Array of supported commands.\n */\n getSupportedCommands(service: Service): string[] {\n return service.c8y_SupportedServiceCommands || this.DEFAULT_COMMANDS;\n }\n\n /**\n * Check if a specific command is supported for the given service.\n * @param service The service object.\n * @param command The command to check (e.g., START, STOP).\n * @returns boolean indicating if the command is supported.\n */\n isCommandSupported(service: Service, command: string): boolean {\n const supportedCommands = this.getSupportedCommands(service);\n return supportedCommands.includes(command);\n }\n\n /**\n * Get all supported commands for a list of services.\n * @param services The list of service objects to evaluate.\n * @returns Array of all unique supported commands.\n */\n getAllSupportedCommands(services: Service[]): string[] {\n const allCommands = services\n .filter(service => this.isServiceCommandSupported(service))\n .flatMap(service => this.getSupportedCommands(service));\n\n return Array.from(new Set(allCommands));\n }\n\n /**\n * Create an operation for the selected service command.\n * @param service The service object the operation should target.\n * @param command The command to execute (e.g., START, STOP).\n * @returns Observable of the created operation.\n */\n createOperation(\n { id, name, serviceType }: Service,\n command: string\n ): Observable<IResult<IOperation>> {\n const operation: IOperation = {\n deviceId: id,\n c8y_ServiceCommand: {\n command,\n serviceName: name,\n serviceType: serviceType\n }\n };\n\n return from(this.operationService.create(operation));\n }\n\n /**\n * Generate a static list of action controls.\n * The specific logic for each service is handled dynamically in showIf and callback.\n * @returns Array of ActionControl objects.\n */\n generateActionControls(commands: string[]): ActionControl[] {\n return commands.map(command => ({\n type: command.toLowerCase(),\n icon: this.getCommandIcon(command),\n text: command,\n showIf: (service: Service) =>\n this.isServiceCommandSupported(service) && this.isCommandSupported(service, command),\n callback: async (service: Service) => {\n try {\n await this.createOperation(service, command).toPromise();\n this.alertService.success(gettext('Operation created.'));\n } catch (error) {\n const alertMessage = gettext('Could not create operaion.');\n this.alertService.danger(alertMessage, error);\n }\n }\n }));\n }\n\n /**\n * Get the icon for a specific command.\n * @param command The command name.\n * @returns Icon string for the command.\n */\n private getCommandIcon(command: string): string {\n return this.commandIcons[command] || 'console';\n }\n}\n","import { Component, EventEmitter } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { IManagedObject, InventoryService, IResultList, QueriesUtil } from '@c8y/client';\nimport {\n Column,\n DataGridService,\n DataSourceModifier,\n ActionControl,\n gettext,\n ServerSideDataResult\n} from '@c8y/ngx-components';\nimport { StatusOptionsService } from '../status-options';\nimport {\n LastUpdatedDateGridColumn,\n ServiceNameGridColumn,\n ServiceTypeGridColumn,\n StatusGridColumn\n} from './columns';\nimport { Service, SERVICE_FRAGMENT } from './service-device-tab.model';\nimport { ServiceCommandService } from './service-command.service';\n\n@Component({\n selector: 'c8y-services-device-tab',\n templateUrl: 'services-device-tab.component.html'\n})\nexport class ServicesDeviceTabComponent {\n deviceId: string | number = this.route.snapshot.parent.data.contextData.id;\n\n sizeRequest: Promise<number>;\n sizeRequestDone = false;\n\n refresh$: EventEmitter<void> = new EventEmitter();\n pagination = {\n pageSize: 50,\n currentPage: 1\n };\n\n actionControls: ActionControl[] = [];\n columns: Column[] = [\n new StatusGridColumn(this.statusOptionsService),\n new ServiceNameGridColumn(),\n new ServiceTypeGridColumn(),\n new LastUpdatedDateGridColumn()\n ];\n\n serverSideDataCallback: any;\n\n noResultsMessage = gettext('No results to display.');\n noDataMessage = gettext('No services to display.');\n noResultsSubtitle = gettext('Refine your search terms or check your spelling.');\n\n private queriesUtil: QueriesUtil = new QueriesUtil();\n\n constructor(\n private route: ActivatedRoute,\n private inventoryService: InventoryService,\n private gridService: DataGridService,\n private statusOptionsService: StatusOptionsService,\n private serviceCommand: ServiceCommandService\n ) {\n this.serverSideDataCallback = this.onDataSourceModifier.bind(this);\n this.sizeRequest = this.inventoryService\n .childAdditionsList(this.deviceId, {\n query: `type eq ${SERVICE_FRAGMENT}`,\n withTotalPages: true,\n pageSize: 1\n })\n .then(response => {\n this.sizeRequestDone = true;\n return response?.paging?.totalPages;\n });\n }\n\n async onDataSourceModifier(\n dataSourceModifier: DataSourceModifier\n ): Promise<ServerSideDataResult> {\n const query = this.queriesUtil.buildQuery(\n this.queriesUtil.addAndFilter(this.gridService.getQueryObj(dataSourceModifier.columns), {\n type: SERVICE_FRAGMENT\n })\n );\n\n const dataRequest: Promise<IResultList<IManagedObject>> =\n this.inventoryService.childAdditionsList(this.deviceId, {\n query,\n withTotalPages: true,\n pageSize: dataSourceModifier.pagination.pageSize,\n currentPage: dataSourceModifier.pagination.currentPage\n });\n\n const filtererdSizeRequest: Promise<number> = this.inventoryService\n .childAdditionsList(this.deviceId, {\n query,\n withTotalPages: true,\n pageSize: 1\n })\n .then(response => response?.paging?.totalPages);\n\n const [dataResponse, size, filteredSize] = await Promise.all([\n dataRequest,\n this.sizeRequest,\n filtererdSizeRequest\n ]);\n\n const { res, data, paging } = dataResponse;\n\n const commands = this.serviceCommand.getAllSupportedCommands(data as unknown as Service[]);\n this.actionControls = this.serviceCommand.generateActionControls(commands);\n\n const serverSideDataResult: ServerSideDataResult = {\n res,\n data,\n paging,\n filteredSize,\n size\n };\n\n return serverSideDataResult;\n }\n\n trackByName(_index, column: Column): string {\n return column.name;\n }\n}\n","<div class=\"content-fullpage\">\n <c8y-data-grid\n [title]=\"'Services' | translate\"\n [refresh]=\"refresh$\"\n [actionControls]=\"actionControls\"\n [pagination]=\"pagination\"\n [columns]=\"columns\"\n [infiniteScroll]=\"'auto'\"\n [serverSideDataCallback]=\"serverSideDataCallback\"\n >\n <c8y-ui-empty-state\n [icon]=\"stats?.size > 0 ? 'search' : 'c8y-tools'\"\n [title]=\"stats?.size > 0 ? (noResultsMessage | translate) : (noDataMessage | translate)\"\n [subtitle]=\"stats?.size > 0 ? (noResultsSubtitle | translate) : null\"\n *emptyStateContext=\"let stats; isLoading as isLoading\"\n [horizontal]=\"stats?.size > 0\"\n ></c8y-ui-empty-state>\n <ng-container *ngFor=\"let column of columns; trackBy: trackByName\">\n <c8y-column [name]=\"column.name\"></c8y-column>\n </ng-container>\n </c8y-data-grid>\n</div>\n","import { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot } from '@angular/router';\nimport { InventoryService } from '@c8y/client';\nimport { get } from 'lodash-es';\nimport { SERVICE_FRAGMENT } from './service-device-tab.model';\n\n@Injectable({ providedIn: 'root' })\nexport class ServicesDeviceTabGuard {\n constructor(private inventoryService: InventoryService) {}\n\n canActivate(route: ActivatedRouteSnapshot): Promise<boolean> {\n const id = get(route, 'params.id') || get(route, 'parent.params.id');\n return this.inventoryService\n .childAdditionsList({ id }, { query: `type eq ${SERVICE_FRAGMENT}`, pageSize: 1 })\n .then(result => !!result?.data?.length);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { InventoryService, ISource } from '@c8y/client';\nimport {\n Breadcrumb,\n BreadcrumbFactory,\n BreadcrumbItem,\n gettext,\n ViewContext\n} from '@c8y/ngx-components';\n\n@Injectable()\nexport class ServicesBreadcrumbFactory implements BreadcrumbFactory {\n private contextData;\n\n constructor(private inventoryService: InventoryService) {}\n\n async get(route: ActivatedRoute) {\n const { context, contextData } = route.snapshot.data;\n const { routeConfig } = route.snapshot;\n\n this.contextData = contextData || this.contextData;\n\n if (\n (context === ViewContext.Service || (routeConfig as any)?.context === ViewContext.Service) &&\n !!this.contextData\n ) {\n const serviceMO = (\n await this.inventoryService.detail(this.contextData, { withParents: true })\n )?.data;\n const breadcrumb: Breadcrumb = { items: [] };\n const breadcrumbItems: BreadcrumbItem[] = [];\n const device: ISource = serviceMO?.additionParents?.references[0]?.managedObject;\n\n if (device) {\n breadcrumbItems.push({\n label: device.name,\n path: `/device/${device.id}`\n });\n breadcrumbItems.push({\n label: gettext('Services'),\n path: `/device/${device.id}/services`\n });\n breadcrumbItems.push({\n label: serviceMO.name\n } as BreadcrumbItem);\n }\n\n breadcrumb.items = breadcrumbItems;\n return breadcrumb;\n }\n }\n}\n","import { NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { CoreModule, gettext, hookBreadcrumb, hookRoute, ViewContext } from '@c8y/ngx-components';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport {\n LastUpdatedDateCellRendererComponent,\n ServicesNameCellRendererComponent,\n ServicesStatusCellRendererComponent\n} from './columns';\nimport { ServicesDeviceTabComponent } from './services-device-tab.component';\nimport { ServicesDeviceTabGuard } from './services-device-tab.guard';\nimport { ServicesBreadcrumbFactory } from './services.breadcrumb-factory';\n\n@NgModule({\n imports: [CoreModule, RouterModule, TooltipModule],\n declarations: [\n ServicesDeviceTabComponent,\n LastUpdatedDateCellRendererComponent,\n ServicesNameCellRendererComponent,\n ServicesStatusCellRendererComponent\n ],\n providers: [\n ServicesBreadcrumbFactory,\n hookRoute({\n context: ViewContext.Device,\n path: 'services',\n component: ServicesDeviceTabComponent,\n label: gettext('Services'),\n icon: 'statistics',\n priority: 500,\n canActivate: [ServicesDeviceTabGuard]\n }),\n hookBreadcrumb(ServicesBreadcrumbFactory)\n ]\n})\nexport class ServicesDeviceTabModule {}\n","import { NgModule } from '@angular/core';\nimport { CoreModule } from '@c8y/ngx-components';\nimport { ServicesDeviceTabModule } from './services-device-tab';\n\n@NgModule({\n imports: [CoreModule, ServicesDeviceTabModule]\n})\nexport class ServicesModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i2","i2.StatusOptionsService","i1","i3","i4.StatusOptionsService","i5.ServiceCommandService","i6"],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ import { gettext, DynamicManagedObjectResolver, DynamicComponentErrorStrategy, hookWidget } from '@c8y/ngx-components';
2
+ import { defaultWidgetIds } from '@c8y/ngx-components/widgets/definitions';
3
+
4
+ const assetNotesWidgetDefinition = {
5
+ id: defaultWidgetIds.ASSET_NOTES,
6
+ label: gettext('Asset notes'),
7
+ description: gettext(`Displays editable asset notes.`),
8
+ loadComponent: () => import('@c8y/ngx-components/widgets/implementations/asset-notes').then(m => m.AssetNotesWidgetComponent),
9
+ previewImage: 'c8y-style-assets/dm-asset-notes-widget.png',
10
+ resolve: {
11
+ device: DynamicManagedObjectResolver
12
+ },
13
+ errorStrategy: DynamicComponentErrorStrategy.OVERLAY_ERROR,
14
+ data: {
15
+ settings: {
16
+ noNewWidgets: false,
17
+ widgetDefaults: {
18
+ _width: 8,
19
+ _height: 4
20
+ },
21
+ ng1: {
22
+ options: {
23
+ groupsSelectable: true
24
+ }
25
+ }
26
+ }
27
+ }
28
+ };
29
+ const assetNotesWidgetProviders = [hookWidget(assetNotesWidgetDefinition)];
30
+
31
+ /**
32
+ * Generated bundle index. Do not edit.
33
+ */
34
+
35
+ export { assetNotesWidgetDefinition, assetNotesWidgetProviders };
36
+ //# sourceMappingURL=c8y-ngx-components-widgets-definitions-asset-notes.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"c8y-ngx-components-widgets-definitions-asset-notes.mjs","sources":["../../widgets/definitions/asset-notes/index.ts","../../widgets/definitions/asset-notes/c8y-ngx-components-widgets-definitions-asset-notes.ts"],"sourcesContent":["import type { DynamicWidgetDefinition } from '@c8y/ngx-components';\nimport {\n DynamicComponentErrorStrategy,\n DynamicManagedObjectResolver,\n gettext,\n hookWidget\n} from '@c8y/ngx-components';\nimport type { ContextWidgetConfig } from '@c8y/ngx-components/context-dashboard';\nimport { defaultWidgetIds } from '@c8y/ngx-components/widgets/definitions';\n\nexport const assetNotesWidgetDefinition = {\n id: defaultWidgetIds.ASSET_NOTES,\n label: gettext('Asset notes'),\n description: gettext(`Displays editable asset notes.`),\n loadComponent: () =>\n import('@c8y/ngx-components/widgets/implementations/asset-notes').then(\n m => m.AssetNotesWidgetComponent\n ),\n previewImage: 'c8y-style-assets/dm-asset-notes-widget.png',\n resolve: {\n device: DynamicManagedObjectResolver\n },\n errorStrategy: DynamicComponentErrorStrategy.OVERLAY_ERROR,\n data: {\n settings: {\n noNewWidgets: false,\n widgetDefaults: {\n _width: 8,\n _height: 4\n },\n ng1: {\n options: {\n groupsSelectable: true\n }\n }\n }\n } as ContextWidgetConfig\n} satisfies DynamicWidgetDefinition;\n\nexport const assetNotesWidgetProviders = [hookWidget(assetNotesWidgetDefinition)];\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;AAUa,MAAA,0BAA0B,GAAG;IACxC,EAAE,EAAE,gBAAgB,CAAC,WAAW;AAChC,IAAA,KAAK,EAAE,OAAO,CAAC,aAAa,CAAC;AAC7B,IAAA,WAAW,EAAE,OAAO,CAAC,CAAA,8BAAA,CAAgC,CAAC;AACtD,IAAA,aAAa,EAAE,MACb,OAAO,yDAAyD,CAAC,CAAC,IAAI,CACpE,CAAC,IAAI,CAAC,CAAC,yBAAyB,CACjC;AACH,IAAA,YAAY,EAAE,4CAA4C;AAC1D,IAAA,OAAO,EAAE;AACP,QAAA,MAAM,EAAE,4BAA4B;AACrC,KAAA;IACD,aAAa,EAAE,6BAA6B,CAAC,aAAa;AAC1D,IAAA,IAAI,EAAE;AACJ,QAAA,QAAQ,EAAE;AACR,YAAA,YAAY,EAAE,KAAK;AACnB,YAAA,cAAc,EAAE;AACd,gBAAA,MAAM,EAAE,CAAC;AACT,gBAAA,OAAO,EAAE,CAAC;AACX,aAAA;AACD,YAAA,GAAG,EAAE;AACH,gBAAA,OAAO,EAAE;AACP,oBAAA,gBAAgB,EAAE,IAAI;AACvB,iBAAA;AACF,aAAA;AACF,SAAA;AACqB,KAAA;EACU;AAEvB,MAAA,yBAAyB,GAAG,CAAC,UAAU,CAAC,0BAA0B,CAAC;;ACvChF;;AAEG;;;;"}
@@ -1,5 +1,6 @@
1
1
  const defaultWidgetIds = {
2
2
  APPLICATIONS: 'Applications',
3
+ ASSET_NOTES: 'Asset Notes',
3
4
  LEGACY_COCKPIT_WELCOME: 'Cockpit Welcome',
4
5
  COCKPIT_WELCOME: 'cockpit.welcome.widget',
5
6
  DATA_POINTS_TABLE: 'Data points table',
@@ -1 +1 @@
1
- {"version":3,"file":"c8y-ngx-components-widgets-definitions.mjs","sources":["../../widgets/definitions/index.ts","../../widgets/definitions/c8y-ngx-components-widgets-definitions.ts"],"sourcesContent":["export const defaultWidgetIds = {\n APPLICATIONS: 'Applications',\n LEGACY_COCKPIT_WELCOME: 'Cockpit Welcome',\n COCKPIT_WELCOME: 'cockpit.welcome.widget',\n DATA_POINTS_TABLE: 'Data points table',\n DEVICE_MANAGEMENT_WELCOME: 'devicemanagement.welcome.widget',\n IMAGE: 'Image',\n KPI: 'kpi.widget',\n MARKDOWN: 'markdown',\n HELP_AND_SERVICE: 'HelpAndService',\n THREE_D_ROTATION: 'rotation3d',\n MAP: 'Map',\n DEVICE_CONTROL_MESSAGE_WIDGET: 'deviceControlMessageWidget',\n INFO_GAUGE: 'infoGauge',\n ALARM_LIST: 'Alarm list',\n ALL_CRITICAL_ALARMS: 'Asset Alarms',\n RECENT_ALARMS: 'Recent Alarms',\n LINEAR_GAUGE: 'KPI Linear Gauge',\n SILO: 'KPI Silo'\n} as const;\n\nexport type DefaultWidgetIdKeys = keyof typeof defaultWidgetIds;\nexport type DefaultWidgetIdValues = (typeof defaultWidgetIds)[DefaultWidgetIdKeys];\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"AAAa,MAAA,gBAAgB,GAAG;AAC9B,IAAA,YAAY,EAAE,cAAc;AAC5B,IAAA,sBAAsB,EAAE,iBAAiB;AACzC,IAAA,eAAe,EAAE,wBAAwB;AACzC,IAAA,iBAAiB,EAAE,mBAAmB;AACtC,IAAA,yBAAyB,EAAE,iCAAiC;AAC5D,IAAA,KAAK,EAAE,OAAO;AACd,IAAA,GAAG,EAAE,YAAY;AACjB,IAAA,QAAQ,EAAE,UAAU;AACpB,IAAA,gBAAgB,EAAE,gBAAgB;AAClC,IAAA,gBAAgB,EAAE,YAAY;AAC9B,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,6BAA6B,EAAE,4BAA4B;AAC3D,IAAA,UAAU,EAAE,WAAW;AACvB,IAAA,UAAU,EAAE,YAAY;AACxB,IAAA,mBAAmB,EAAE,cAAc;AACnC,IAAA,aAAa,EAAE,eAAe;AAC9B,IAAA,YAAY,EAAE,kBAAkB;AAChC,IAAA,IAAI,EAAE,UAAU;;;AClBlB;;AAEG;;;;"}
1
+ {"version":3,"file":"c8y-ngx-components-widgets-definitions.mjs","sources":["../../widgets/definitions/index.ts","../../widgets/definitions/c8y-ngx-components-widgets-definitions.ts"],"sourcesContent":["export const defaultWidgetIds = {\n APPLICATIONS: 'Applications',\n ASSET_NOTES: 'Asset Notes',\n LEGACY_COCKPIT_WELCOME: 'Cockpit Welcome',\n COCKPIT_WELCOME: 'cockpit.welcome.widget',\n DATA_POINTS_TABLE: 'Data points table',\n DEVICE_MANAGEMENT_WELCOME: 'devicemanagement.welcome.widget',\n IMAGE: 'Image',\n KPI: 'kpi.widget',\n MARKDOWN: 'markdown',\n HELP_AND_SERVICE: 'HelpAndService',\n THREE_D_ROTATION: 'rotation3d',\n MAP: 'Map',\n DEVICE_CONTROL_MESSAGE_WIDGET: 'deviceControlMessageWidget',\n INFO_GAUGE: 'infoGauge',\n ALARM_LIST: 'Alarm list',\n ALL_CRITICAL_ALARMS: 'Asset Alarms',\n RECENT_ALARMS: 'Recent Alarms',\n LINEAR_GAUGE: 'KPI Linear Gauge',\n SILO: 'KPI Silo'\n} as const;\n\nexport type DefaultWidgetIdKeys = keyof typeof defaultWidgetIds;\nexport type DefaultWidgetIdValues = (typeof defaultWidgetIds)[DefaultWidgetIdKeys];\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"AAAa,MAAA,gBAAgB,GAAG;AAC9B,IAAA,YAAY,EAAE,cAAc;AAC5B,IAAA,WAAW,EAAE,aAAa;AAC1B,IAAA,sBAAsB,EAAE,iBAAiB;AACzC,IAAA,eAAe,EAAE,wBAAwB;AACzC,IAAA,iBAAiB,EAAE,mBAAmB;AACtC,IAAA,yBAAyB,EAAE,iCAAiC;AAC5D,IAAA,KAAK,EAAE,OAAO;AACd,IAAA,GAAG,EAAE,YAAY;AACjB,IAAA,QAAQ,EAAE,UAAU;AACpB,IAAA,gBAAgB,EAAE,gBAAgB;AAClC,IAAA,gBAAgB,EAAE,YAAY;AAC9B,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,6BAA6B,EAAE,4BAA4B;AAC3D,IAAA,UAAU,EAAE,WAAW;AACvB,IAAA,UAAU,EAAE,YAAY;AACxB,IAAA,mBAAmB,EAAE,cAAc;AACnC,IAAA,aAAa,EAAE,eAAe;AAC9B,IAAA,YAAY,EAAE,kBAAkB;AAChC,IAAA,IAAI,EAAE,UAAU;;;ACnBlB;;AAEG;;;;"}