@c8y/ngx-components 1021.7.0 → 1021.13.3

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 (139) hide show
  1. package/alarms/alarms-date-filter.component.d.ts +34 -0
  2. package/alarms/alarms-date-filter.component.d.ts.map +1 -0
  3. package/alarms/alarms-filter.component.d.ts +2 -1
  4. package/alarms/alarms-filter.component.d.ts.map +1 -1
  5. package/alarms/alarms-view.service.d.ts +4 -2
  6. package/alarms/alarms-view.service.d.ts.map +1 -1
  7. package/alarms/alarms.component.d.ts +3 -1
  8. package/alarms/alarms.component.d.ts.map +1 -1
  9. package/alarms/alarms.model.d.ts +17 -1
  10. package/alarms/alarms.model.d.ts.map +1 -1
  11. package/alarms/alarms.module.d.ts +15 -13
  12. package/alarms/alarms.module.d.ts.map +1 -1
  13. package/branding/shared/data/store-branding.service.d.ts +5 -0
  14. package/branding/shared/data/store-branding.service.d.ts.map +1 -1
  15. package/branding/shared/lazy/branding/branding.component.d.ts.map +1 -1
  16. package/cockpit-config/cockpit-config.model.d.ts +1 -0
  17. package/cockpit-config/cockpit-config.model.d.ts.map +1 -1
  18. package/context-dashboard/dashboard-manager/dashboard-manager.module.d.ts.map +1 -1
  19. package/core/common/options.service.d.ts +1 -1
  20. package/core/common/options.service.d.ts.map +1 -1
  21. package/core/dashboard/dashboard.module.d.ts +19 -19
  22. package/core/dashboard/widget-change-event.model.d.ts +1 -1
  23. package/core/dashboard/widget-change-event.model.d.ts.map +1 -1
  24. package/core/dashboard/wiget-time-context/widget-time-context-helper.service.d.ts +2 -1
  25. package/core/dashboard/wiget-time-context/widget-time-context-helper.service.d.ts.map +1 -1
  26. package/core/dashboard/wiget-time-context/widget-time-context-query.service.d.ts.map +1 -1
  27. package/core/dashboard/wiget-time-context/widget-time-context.component.d.ts +2 -1
  28. package/core/dashboard/wiget-time-context/widget-time-context.component.d.ts.map +1 -1
  29. package/core/dashboard/wiget-time-context/widget-time-context.model.d.ts +1 -14
  30. package/core/dashboard/wiget-time-context/widget-time-context.model.d.ts.map +1 -1
  31. package/core/date-time-picker/date-time-picker.component.d.ts.map +1 -1
  32. package/core/forms/validation-pattern.d.ts +4 -0
  33. package/core/forms/validation-pattern.d.ts.map +1 -1
  34. package/core/plugins/plugins.service.d.ts +1 -1
  35. package/core/plugins/plugins.service.d.ts.map +1 -1
  36. package/esm2022/alarm-event-selector/alarm-event-selection-list/alarm-event-selection-list.component.mjs +4 -4
  37. package/esm2022/alarm-event-selector/alarm-event-selector-list-item/alarm-event-selector-list-item.component.mjs +3 -3
  38. package/esm2022/alarms/alarms-date-filter.component.mjs +139 -0
  39. package/esm2022/alarms/alarms-filter.component.mjs +11 -5
  40. package/esm2022/alarms/alarms-type-filter.component.mjs +3 -3
  41. package/esm2022/alarms/alarms-view.service.mjs +15 -2
  42. package/esm2022/alarms/alarms.component.mjs +12 -6
  43. package/esm2022/alarms/alarms.model.mjs +17 -1
  44. package/esm2022/alarms/alarms.module.mjs +11 -4
  45. package/esm2022/assets-navigator/asset-selector/asset-selector-node.component.mjs +3 -3
  46. package/esm2022/branding/shared/data/store-branding.service.mjs +24 -1
  47. package/esm2022/branding/shared/lazy/branding/branding.component.mjs +3 -1
  48. package/esm2022/cockpit-config/cockpit-config.model.mjs +3 -2
  49. package/esm2022/cockpit-config/feature-config.component.mjs +3 -3
  50. package/esm2022/context-dashboard/dashboard-manager/dashboard-manager.module.mjs +5 -3
  51. package/esm2022/core/action-bar/action-bar.component.mjs +3 -3
  52. package/esm2022/core/common/options.service.mjs +3 -3
  53. package/esm2022/core/dashboard/dashboard.module.mjs +5 -4
  54. package/esm2022/core/dashboard/widget-change-event.model.mjs +1 -1
  55. package/esm2022/core/dashboard/wiget-time-context/widget-time-context-helper.service.mjs +3 -2
  56. package/esm2022/core/dashboard/wiget-time-context/widget-time-context-query.service.mjs +1 -1
  57. package/esm2022/core/dashboard/wiget-time-context/widget-time-context.component.mjs +6 -5
  58. package/esm2022/core/dashboard/wiget-time-context/widget-time-context.model.mjs +3 -47
  59. package/esm2022/core/date-time-picker/date-time-picker.component.mjs +7 -1
  60. package/esm2022/core/docs/defaults.items.mjs +2 -2
  61. package/esm2022/core/forms/validation-pattern.mjs +5 -1
  62. package/esm2022/core/list-display-switch/list-display-switch.component.mjs +3 -3
  63. package/esm2022/core/plugins/plugins.service.mjs +3 -3
  64. package/esm2022/core/router/context-route.guard.mjs +2 -2
  65. package/esm2022/core/search/search-input.component.mjs +3 -3
  66. package/esm2022/interval-picker/c8y-ngx-components-interval-picker.mjs +5 -0
  67. package/esm2022/interval-picker/index.mjs +3 -0
  68. package/esm2022/interval-picker/interval-picker.component.mjs +68 -0
  69. package/esm2022/interval-picker/interval-picker.model.mjs +47 -0
  70. package/esm2022/operations/bulk-operation-scheduler/operation-scheduler.component.mjs +7 -5
  71. package/esm2022/search/search-action.component.mjs +3 -3
  72. package/esm2022/tenants/custom-properties/custom-properties.component.mjs +90 -0
  73. package/esm2022/tenants/custom-properties/custom-properties.service.mjs +76 -0
  74. package/esm2022/tenants/custom-properties/custom-property-field/custom-property-field.component.mjs +29 -0
  75. package/esm2022/tenants/index.mjs +2 -1
  76. package/esm2022/tenants/tenant-limits/tenant-limits-definitions.mjs +92 -0
  77. package/esm2022/tenants/tenant-limits/tenant-limits.component.mjs +124 -0
  78. package/esm2022/tenants/tenants.module.mjs +42 -4
  79. package/esm2022/widgets/implementations/help-and-service-widget/help-and-service-view/help-and-service-view.component.mjs +2 -2
  80. package/fesm2022/c8y-ngx-components-alarm-event-selector.mjs +5 -5
  81. package/fesm2022/c8y-ngx-components-alarm-event-selector.mjs.map +1 -1
  82. package/fesm2022/c8y-ngx-components-alarms.mjs +184 -16
  83. package/fesm2022/c8y-ngx-components-alarms.mjs.map +1 -1
  84. package/fesm2022/c8y-ngx-components-assets-navigator.mjs +2 -2
  85. package/fesm2022/c8y-ngx-components-assets-navigator.mjs.map +1 -1
  86. package/fesm2022/c8y-ngx-components-branding-shared-data.mjs +23 -0
  87. package/fesm2022/c8y-ngx-components-branding-shared-data.mjs.map +1 -1
  88. package/fesm2022/c8y-ngx-components-branding-shared-lazy.mjs +2 -0
  89. package/fesm2022/c8y-ngx-components-branding-shared-lazy.mjs.map +1 -1
  90. package/fesm2022/c8y-ngx-components-cockpit-config.mjs +4 -3
  91. package/fesm2022/c8y-ngx-components-cockpit-config.mjs.map +1 -1
  92. package/fesm2022/c8y-ngx-components-context-dashboard.mjs +4 -2
  93. package/fesm2022/c8y-ngx-components-context-dashboard.mjs.map +1 -1
  94. package/fesm2022/c8y-ngx-components-interval-picker.mjs +120 -0
  95. package/fesm2022/c8y-ngx-components-interval-picker.mjs.map +1 -0
  96. package/fesm2022/c8y-ngx-components-operations-bulk-operation-scheduler.mjs +6 -4
  97. package/fesm2022/c8y-ngx-components-operations-bulk-operation-scheduler.mjs.map +1 -1
  98. package/fesm2022/c8y-ngx-components-search.mjs +2 -2
  99. package/fesm2022/c8y-ngx-components-search.mjs.map +1 -1
  100. package/fesm2022/c8y-ngx-components-tenants.mjs +416 -11
  101. package/fesm2022/c8y-ngx-components-tenants.mjs.map +1 -1
  102. package/fesm2022/c8y-ngx-components-widgets-implementations-help-and-service-widget.mjs +1 -1
  103. package/fesm2022/c8y-ngx-components-widgets-implementations-help-and-service-widget.mjs.map +1 -1
  104. package/fesm2022/c8y-ngx-components.mjs +292 -372
  105. package/fesm2022/c8y-ngx-components.mjs.map +1 -1
  106. package/interval-picker/c8y-ngx-components-interval-picker.d.ts.map +1 -0
  107. package/interval-picker/index.d.ts +3 -0
  108. package/interval-picker/index.d.ts.map +1 -0
  109. package/{core/dashboard/wiget-time-context/interval-picker → interval-picker}/interval-picker.component.d.ts +10 -2
  110. package/interval-picker/interval-picker.component.d.ts.map +1 -0
  111. package/interval-picker/interval-picker.model.d.ts +15 -0
  112. package/interval-picker/interval-picker.model.d.ts.map +1 -0
  113. package/locales/de.po +4 -1
  114. package/locales/en.po +3 -0
  115. package/locales/en_US.po +3 -0
  116. package/locales/es.po +3 -0
  117. package/locales/fr.po +3 -0
  118. package/locales/ja_JP.po +3 -0
  119. package/locales/locales.pot +47 -3
  120. package/locales/nl.po +3 -0
  121. package/locales/pl.po +3 -0
  122. package/locales/pt_BR.po +3 -0
  123. package/operations/bulk-operation-scheduler/operation-scheduler.component.d.ts.map +1 -1
  124. package/package.json +1 -1
  125. package/tenants/custom-properties/custom-properties.component.d.ts +26 -0
  126. package/tenants/custom-properties/custom-properties.component.d.ts.map +1 -0
  127. package/tenants/custom-properties/custom-properties.service.d.ts +26 -0
  128. package/tenants/custom-properties/custom-properties.service.d.ts.map +1 -0
  129. package/tenants/custom-properties/custom-property-field/custom-property-field.component.d.ts +10 -0
  130. package/tenants/custom-properties/custom-property-field/custom-property-field.component.d.ts.map +1 -0
  131. package/tenants/index.d.ts +1 -0
  132. package/tenants/index.d.ts.map +1 -1
  133. package/tenants/tenant-limits/tenant-limits-definitions.d.ts +117 -0
  134. package/tenants/tenant-limits/tenant-limits-definitions.d.ts.map +1 -0
  135. package/tenants/tenant-limits/tenant-limits.component.d.ts +39 -0
  136. package/tenants/tenant-limits/tenant-limits.component.d.ts.map +1 -0
  137. package/tenants/tenants.module.d.ts.map +1 -1
  138. package/core/dashboard/wiget-time-context/interval-picker/interval-picker.component.d.ts.map +0 -1
  139. package/esm2022/core/dashboard/wiget-time-context/interval-picker/interval-picker.component.mjs +0 -55
@@ -40,15 +40,15 @@ export class SearchActionComponent {
40
40
  .then(() => this.router.navigate(commands, extras));
41
41
  }
42
42
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: SearchActionComponent, deps: [{ token: i1.RouterService }, { token: i2.Router }, { token: SEARCH_CONFIG, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
43
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: SearchActionComponent, selector: "c8y-search-action", ngImport: i0, template: "<c8y-search-input\n (filter)=\"onFilter($event)\"\n (search)=\"onSearch($event)\"\n (onClick)=\"onClick($event)\"\n [enableCustomTemplatePlaceholder]=\"true\"\n [customPlaceholder]=\"customPlaceholder\"\n [customDataQuery]=\"customQuery\"\n [externalTerm]=\"typeaheadReload\"\n>\n <c8y-search-custom-filters\n *ngIf=\"showAdvancedFilters\"\n class=\"d-flex gap-16 p-l-4\"\n (refresh)=\"triggerDataLoad()\"\n (customDataQuery)=\"customQuery = $event\"\n ></c8y-search-custom-filters>\n</c8y-search-input>\n", dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i1.SearchInputComponent, selector: "c8y-search-input", inputs: ["mode", "enableCustomTemplatePlaceholder", "customPlaceholder", "externalTerm", "customDataQuery", "container", "groupsOnly"], outputs: ["filter", "search", "reset", "onClick"] }, { kind: "component", type: i4.SearchCustomFiltersComponent, selector: "c8y-search-custom-filters", outputs: ["customDataQuery", "refresh"] }] }); }
43
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: SearchActionComponent, selector: "c8y-search-action", ngImport: i0, template: "<c8y-search-input\n (filter)=\"onFilter($event)\"\n (search)=\"onSearch($event)\"\n (onClick)=\"onClick($event)\"\n [enableCustomTemplatePlaceholder]=\"true\"\n [customPlaceholder]=\"customPlaceholder\"\n [customDataQuery]=\"customQuery\"\n [externalTerm]=\"typeaheadReload\"\n>\n <c8y-search-custom-filters\n *ngIf=\"showAdvancedFilters\"\n class=\"d-flex gap-16 p-l-4 p-l-24 p-r-24\"\n (refresh)=\"triggerDataLoad()\"\n (customDataQuery)=\"customQuery = $event\"\n ></c8y-search-custom-filters>\n</c8y-search-input>\n", dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i1.SearchInputComponent, selector: "c8y-search-input", inputs: ["mode", "enableCustomTemplatePlaceholder", "customPlaceholder", "externalTerm", "customDataQuery", "container", "groupsOnly"], outputs: ["filter", "search", "reset", "onClick"] }, { kind: "component", type: i4.SearchCustomFiltersComponent, selector: "c8y-search-custom-filters", outputs: ["customDataQuery", "refresh"] }] }); }
44
44
  }
45
45
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: SearchActionComponent, decorators: [{
46
46
  type: Component,
47
- args: [{ selector: 'c8y-search-action', template: "<c8y-search-input\n (filter)=\"onFilter($event)\"\n (search)=\"onSearch($event)\"\n (onClick)=\"onClick($event)\"\n [enableCustomTemplatePlaceholder]=\"true\"\n [customPlaceholder]=\"customPlaceholder\"\n [customDataQuery]=\"customQuery\"\n [externalTerm]=\"typeaheadReload\"\n>\n <c8y-search-custom-filters\n *ngIf=\"showAdvancedFilters\"\n class=\"d-flex gap-16 p-l-4\"\n (refresh)=\"triggerDataLoad()\"\n (customDataQuery)=\"customQuery = $event\"\n ></c8y-search-custom-filters>\n</c8y-search-input>\n" }]
47
+ args: [{ selector: 'c8y-search-action', template: "<c8y-search-input\n (filter)=\"onFilter($event)\"\n (search)=\"onSearch($event)\"\n (onClick)=\"onClick($event)\"\n [enableCustomTemplatePlaceholder]=\"true\"\n [customPlaceholder]=\"customPlaceholder\"\n [customDataQuery]=\"customQuery\"\n [externalTerm]=\"typeaheadReload\"\n>\n <c8y-search-custom-filters\n *ngIf=\"showAdvancedFilters\"\n class=\"d-flex gap-16 p-l-4 p-l-24 p-r-24\"\n (refresh)=\"triggerDataLoad()\"\n (customDataQuery)=\"customQuery = $event\"\n ></c8y-search-custom-filters>\n</c8y-search-input>\n" }]
48
48
  }], ctorParameters: () => [{ type: i1.RouterService }, { type: i2.Router }, { type: undefined, decorators: [{
49
49
  type: Optional
50
50
  }, {
51
51
  type: Inject,
52
52
  args: [SEARCH_CONFIG]
53
53
  }] }] });
54
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLWFjdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zZWFyY2gvc2VhcmNoLWFjdGlvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi9zZWFyY2gvc2VhcmNoLWFjdGlvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTFFLE9BQU8sRUFBb0IsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGFBQWEsSUFBSSxTQUFTLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVqRSxPQUFPLEVBQWdCLGFBQWEsRUFBRSxNQUFNLHVCQUF1QixDQUFDOzs7Ozs7QUFNcEUsTUFBTSxPQUFPLHFCQUFxQjtJQU1oQyxZQUNVLFNBQW9CLEVBQ3BCLE1BQWMsRUFDb0IsWUFBMEI7UUFGNUQsY0FBUyxHQUFULFNBQVMsQ0FBVztRQUNwQixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ29CLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBTHRFLG9CQUFlLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQU9uQyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsWUFBWSxFQUFFLG1CQUFtQixJQUFJLElBQUksQ0FBQztRQUNyRSxJQUFJLENBQUMsaUJBQWlCLEdBQUcsWUFBWSxFQUFFLFdBQVcsQ0FBQztJQUNyRCxDQUFDO0lBRUQsZUFBZTtRQUNiLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRCxRQUFRLENBQUMsRUFBVTtRQUNqQixJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsY0FBYyxDQUFDLEVBQUU7WUFDOUIsV0FBVyxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRTtZQUMzQixVQUFVLEVBQUUsSUFBSTtTQUNqQixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsUUFBUSxDQUFDLEVBQVU7UUFDakIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxFQUFFO1lBQzlCLFdBQVcsRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUU7WUFDM0IsVUFBVSxFQUFFLElBQUk7U0FDakIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELE9BQU8sQ0FBQyxFQUFrQjtRQUN4QixJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBRU8sUUFBUSxDQUFDLFFBQWUsRUFBRSxNQUF5QjtRQUN6RCxJQUFJLENBQUMsTUFBTTthQUNSLGFBQWEsQ0FBQyxHQUFHLEVBQUUsRUFBRSxrQkFBa0IsRUFBRSxJQUFJLEVBQUUsQ0FBQzthQUNoRCxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDeEQsQ0FBQzs4R0F6Q1UscUJBQXFCLHFFQVNWLGFBQWE7a0dBVHhCLHFCQUFxQix5RENYbEMsZ2hCQWdCQTs7MkZETGEscUJBQXFCO2tCQUpqQyxTQUFTOytCQUNFLG1CQUFtQjs7MEJBWTFCLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsYUFBYSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbmplY3QsIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJTWFuYWdlZE9iamVjdCwgSVJlc3VsdExpc3QgfSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQgeyBOYXZpZ2F0aW9uRXh0cmFzLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgUm91dGVyU2VydmljZSBhcyBDOHlSb3V0ZXIgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IE9ic2VydmFibGUsIFVuYXJ5RnVuY3Rpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFNlYXJjaENvbmZpZywgU0VBUkNIX0NPTkZJRyB9IGZyb20gJy4vc2VhcmNoLWNvbmZpZy5tb2RlbCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS1zZWFyY2gtYWN0aW9uJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3NlYXJjaC1hY3Rpb24uY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIFNlYXJjaEFjdGlvbkNvbXBvbmVudCB7XG4gIHNob3dBZHZhbmNlZEZpbHRlcnM6IGJvb2xlYW47XG4gIGN1c3RvbVBsYWNlaG9sZGVyOiBzdHJpbmc7XG4gIGN1c3RvbVF1ZXJ5OiBVbmFyeUZ1bmN0aW9uPHN0cmluZywgT2JzZXJ2YWJsZTxJUmVzdWx0TGlzdDxJTWFuYWdlZE9iamVjdD4+PjtcbiAgdHlwZWFoZWFkUmVsb2FkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgYzh5Um91dGVyOiBDOHlSb3V0ZXIsXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KFNFQVJDSF9DT05GSUcpIHB1YmxpYyBtb2R1bGVDb25maWc6IFNlYXJjaENvbmZpZ1xuICApIHtcbiAgICB0aGlzLnNob3dBZHZhbmNlZEZpbHRlcnMgPSBtb2R1bGVDb25maWc/LnNob3dBZHZhbmNlZEZpbHRlcnMgPz8gdHJ1ZTtcbiAgICB0aGlzLmN1c3RvbVBsYWNlaG9sZGVyID0gbW9kdWxlQ29uZmlnPy5wbGFjZWhvbGRlcjtcbiAgfVxuXG4gIHRyaWdnZXJEYXRhTG9hZCgpIHtcbiAgICB0aGlzLnR5cGVhaGVhZFJlbG9hZC5uZXh0KG51bGwpO1xuICB9XG5cbiAgb25TZWFyY2gob246IHN0cmluZykge1xuICAgIHRoaXMubmF2aWdhdGUoWycvYXNzZXRzZWFyY2gnXSwge1xuICAgICAgcXVlcnlQYXJhbXM6IHsgc2VhcmNoOiBvbiB9LFxuICAgICAgcmVwbGFjZVVybDogdHJ1ZVxuICAgIH0pO1xuICB9XG5cbiAgb25GaWx0ZXIob246IHN0cmluZykge1xuICAgIHRoaXMubmF2aWdhdGUoWycvYXNzZXRzZWFyY2gnXSwge1xuICAgICAgcXVlcnlQYXJhbXM6IHsgZmlsdGVyOiBvbiB9LFxuICAgICAgcmVwbGFjZVVybDogdHJ1ZVxuICAgIH0pO1xuICB9XG5cbiAgb25DbGljayhtbzogSU1hbmFnZWRPYmplY3QpIHtcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKHRoaXMuYzh5Um91dGVyLmdldEhyZWYobW8sICcvJykpO1xuICB9XG5cbiAgcHJpdmF0ZSBuYXZpZ2F0ZShjb21tYW5kczogYW55W10sIGV4dHJhcz86IE5hdmlnYXRpb25FeHRyYXMpIHtcbiAgICB0aGlzLnJvdXRlclxuICAgICAgLm5hdmlnYXRlQnlVcmwoJy8nLCB7IHNraXBMb2NhdGlvbkNoYW5nZTogdHJ1ZSB9KVxuICAgICAgLnRoZW4oKCkgPT4gdGhpcy5yb3V0ZXIubmF2aWdhdGUoY29tbWFuZHMsIGV4dHJhcykpO1xuICB9XG59XG4iLCI8Yzh5LXNlYXJjaC1pbnB1dFxuICAoZmlsdGVyKT1cIm9uRmlsdGVyKCRldmVudClcIlxuICAoc2VhcmNoKT1cIm9uU2VhcmNoKCRldmVudClcIlxuICAob25DbGljayk9XCJvbkNsaWNrKCRldmVudClcIlxuICBbZW5hYmxlQ3VzdG9tVGVtcGxhdGVQbGFjZWhvbGRlcl09XCJ0cnVlXCJcbiAgW2N1c3RvbVBsYWNlaG9sZGVyXT1cImN1c3RvbVBsYWNlaG9sZGVyXCJcbiAgW2N1c3RvbURhdGFRdWVyeV09XCJjdXN0b21RdWVyeVwiXG4gIFtleHRlcm5hbFRlcm1dPVwidHlwZWFoZWFkUmVsb2FkXCJcbj5cbiAgPGM4eS1zZWFyY2gtY3VzdG9tLWZpbHRlcnNcbiAgICAqbmdJZj1cInNob3dBZHZhbmNlZEZpbHRlcnNcIlxuICAgIGNsYXNzPVwiZC1mbGV4IGdhcC0xNiBwLWwtNFwiXG4gICAgKHJlZnJlc2gpPVwidHJpZ2dlckRhdGFMb2FkKClcIlxuICAgIChjdXN0b21EYXRhUXVlcnkpPVwiY3VzdG9tUXVlcnkgPSAkZXZlbnRcIlxuICA+PC9jOHktc2VhcmNoLWN1c3RvbS1maWx0ZXJzPlxuPC9jOHktc2VhcmNoLWlucHV0PlxuIl19
54
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLWFjdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zZWFyY2gvc2VhcmNoLWFjdGlvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi9zZWFyY2gvc2VhcmNoLWFjdGlvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTFFLE9BQU8sRUFBb0IsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGFBQWEsSUFBSSxTQUFTLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVqRSxPQUFPLEVBQWdCLGFBQWEsRUFBRSxNQUFNLHVCQUF1QixDQUFDOzs7Ozs7QUFNcEUsTUFBTSxPQUFPLHFCQUFxQjtJQU1oQyxZQUNVLFNBQW9CLEVBQ3BCLE1BQWMsRUFDb0IsWUFBMEI7UUFGNUQsY0FBUyxHQUFULFNBQVMsQ0FBVztRQUNwQixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ29CLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBTHRFLG9CQUFlLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQU9uQyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsWUFBWSxFQUFFLG1CQUFtQixJQUFJLElBQUksQ0FBQztRQUNyRSxJQUFJLENBQUMsaUJBQWlCLEdBQUcsWUFBWSxFQUFFLFdBQVcsQ0FBQztJQUNyRCxDQUFDO0lBRUQsZUFBZTtRQUNiLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRCxRQUFRLENBQUMsRUFBVTtRQUNqQixJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsY0FBYyxDQUFDLEVBQUU7WUFDOUIsV0FBVyxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRTtZQUMzQixVQUFVLEVBQUUsSUFBSTtTQUNqQixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsUUFBUSxDQUFDLEVBQVU7UUFDakIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxFQUFFO1lBQzlCLFdBQVcsRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUU7WUFDM0IsVUFBVSxFQUFFLElBQUk7U0FDakIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELE9BQU8sQ0FBQyxFQUFrQjtRQUN4QixJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBRU8sUUFBUSxDQUFDLFFBQWUsRUFBRSxNQUF5QjtRQUN6RCxJQUFJLENBQUMsTUFBTTthQUNSLGFBQWEsQ0FBQyxHQUFHLEVBQUUsRUFBRSxrQkFBa0IsRUFBRSxJQUFJLEVBQUUsQ0FBQzthQUNoRCxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDeEQsQ0FBQzs4R0F6Q1UscUJBQXFCLHFFQVNWLGFBQWE7a0dBVHhCLHFCQUFxQix5RENYbEMsOGhCQWdCQTs7MkZETGEscUJBQXFCO2tCQUpqQyxTQUFTOytCQUNFLG1CQUFtQjs7MEJBWTFCLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsYUFBYSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbmplY3QsIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJTWFuYWdlZE9iamVjdCwgSVJlc3VsdExpc3QgfSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQgeyBOYXZpZ2F0aW9uRXh0cmFzLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgUm91dGVyU2VydmljZSBhcyBDOHlSb3V0ZXIgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IE9ic2VydmFibGUsIFVuYXJ5RnVuY3Rpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFNlYXJjaENvbmZpZywgU0VBUkNIX0NPTkZJRyB9IGZyb20gJy4vc2VhcmNoLWNvbmZpZy5tb2RlbCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS1zZWFyY2gtYWN0aW9uJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3NlYXJjaC1hY3Rpb24uY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIFNlYXJjaEFjdGlvbkNvbXBvbmVudCB7XG4gIHNob3dBZHZhbmNlZEZpbHRlcnM6IGJvb2xlYW47XG4gIGN1c3RvbVBsYWNlaG9sZGVyOiBzdHJpbmc7XG4gIGN1c3RvbVF1ZXJ5OiBVbmFyeUZ1bmN0aW9uPHN0cmluZywgT2JzZXJ2YWJsZTxJUmVzdWx0TGlzdDxJTWFuYWdlZE9iamVjdD4+PjtcbiAgdHlwZWFoZWFkUmVsb2FkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgYzh5Um91dGVyOiBDOHlSb3V0ZXIsXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KFNFQVJDSF9DT05GSUcpIHB1YmxpYyBtb2R1bGVDb25maWc6IFNlYXJjaENvbmZpZ1xuICApIHtcbiAgICB0aGlzLnNob3dBZHZhbmNlZEZpbHRlcnMgPSBtb2R1bGVDb25maWc/LnNob3dBZHZhbmNlZEZpbHRlcnMgPz8gdHJ1ZTtcbiAgICB0aGlzLmN1c3RvbVBsYWNlaG9sZGVyID0gbW9kdWxlQ29uZmlnPy5wbGFjZWhvbGRlcjtcbiAgfVxuXG4gIHRyaWdnZXJEYXRhTG9hZCgpIHtcbiAgICB0aGlzLnR5cGVhaGVhZFJlbG9hZC5uZXh0KG51bGwpO1xuICB9XG5cbiAgb25TZWFyY2gob246IHN0cmluZykge1xuICAgIHRoaXMubmF2aWdhdGUoWycvYXNzZXRzZWFyY2gnXSwge1xuICAgICAgcXVlcnlQYXJhbXM6IHsgc2VhcmNoOiBvbiB9LFxuICAgICAgcmVwbGFjZVVybDogdHJ1ZVxuICAgIH0pO1xuICB9XG5cbiAgb25GaWx0ZXIob246IHN0cmluZykge1xuICAgIHRoaXMubmF2aWdhdGUoWycvYXNzZXRzZWFyY2gnXSwge1xuICAgICAgcXVlcnlQYXJhbXM6IHsgZmlsdGVyOiBvbiB9LFxuICAgICAgcmVwbGFjZVVybDogdHJ1ZVxuICAgIH0pO1xuICB9XG5cbiAgb25DbGljayhtbzogSU1hbmFnZWRPYmplY3QpIHtcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKHRoaXMuYzh5Um91dGVyLmdldEhyZWYobW8sICcvJykpO1xuICB9XG5cbiAgcHJpdmF0ZSBuYXZpZ2F0ZShjb21tYW5kczogYW55W10sIGV4dHJhcz86IE5hdmlnYXRpb25FeHRyYXMpIHtcbiAgICB0aGlzLnJvdXRlclxuICAgICAgLm5hdmlnYXRlQnlVcmwoJy8nLCB7IHNraXBMb2NhdGlvbkNoYW5nZTogdHJ1ZSB9KVxuICAgICAgLnRoZW4oKCkgPT4gdGhpcy5yb3V0ZXIubmF2aWdhdGUoY29tbWFuZHMsIGV4dHJhcykpO1xuICB9XG59XG4iLCI8Yzh5LXNlYXJjaC1pbnB1dFxuICAoZmlsdGVyKT1cIm9uRmlsdGVyKCRldmVudClcIlxuICAoc2VhcmNoKT1cIm9uU2VhcmNoKCRldmVudClcIlxuICAob25DbGljayk9XCJvbkNsaWNrKCRldmVudClcIlxuICBbZW5hYmxlQ3VzdG9tVGVtcGxhdGVQbGFjZWhvbGRlcl09XCJ0cnVlXCJcbiAgW2N1c3RvbVBsYWNlaG9sZGVyXT1cImN1c3RvbVBsYWNlaG9sZGVyXCJcbiAgW2N1c3RvbURhdGFRdWVyeV09XCJjdXN0b21RdWVyeVwiXG4gIFtleHRlcm5hbFRlcm1dPVwidHlwZWFoZWFkUmVsb2FkXCJcbj5cbiAgPGM4eS1zZWFyY2gtY3VzdG9tLWZpbHRlcnNcbiAgICAqbmdJZj1cInNob3dBZHZhbmNlZEZpbHRlcnNcIlxuICAgIGNsYXNzPVwiZC1mbGV4IGdhcC0xNiBwLWwtNCBwLWwtMjQgcC1yLTI0XCJcbiAgICAocmVmcmVzaCk9XCJ0cmlnZ2VyRGF0YUxvYWQoKVwiXG4gICAgKGN1c3RvbURhdGFRdWVyeSk9XCJjdXN0b21RdWVyeSA9ICRldmVudFwiXG4gID48L2M4eS1zZWFyY2gtY3VzdG9tLWZpbHRlcnM+XG48L2M4eS1zZWFyY2gtaW5wdXQ+XG4iXX0=
@@ -0,0 +1,90 @@
1
+ import { Component } from '@angular/core';
2
+ import { FormGroup, ReactiveFormsModule } from '@angular/forms';
3
+ import { CommonModule } from '@angular/common';
4
+ import { TenantService } from '@c8y/client';
5
+ import { ActivatedRoute, RouterLink } from '@angular/router';
6
+ import { AlertService, CoreModule, FormsModule, gettext } from '@c8y/ngx-components';
7
+ import { CustomPropertiesService } from '../custom-properties/custom-properties.service';
8
+ import { CustomPropertyFieldComponent } from '../custom-properties/custom-property-field/custom-property-field.component';
9
+ import * as i0 from "@angular/core";
10
+ import * as i1 from "@c8y/client";
11
+ import * as i2 from "@c8y/ngx-components";
12
+ import * as i3 from "@angular/router";
13
+ import * as i4 from "../custom-properties/custom-properties.service";
14
+ import * as i5 from "@angular/common";
15
+ import * as i6 from "@angular/forms";
16
+ export class CustomPropertiesComponent {
17
+ constructor(tenantService, alertService, activatedRoute, customPropertiesService) {
18
+ this.tenantService = tenantService;
19
+ this.alertService = alertService;
20
+ this.activatedRoute = activatedRoute;
21
+ this.customPropertiesService = customPropertiesService;
22
+ this.customPropsForm = new FormGroup({});
23
+ this.tenant = null;
24
+ this.initialized = false;
25
+ }
26
+ async ngOnInit() {
27
+ await this.loadTenantDetails();
28
+ const { form, fields } = await this.customPropertiesService.getFormAndFieldList();
29
+ this.customPropsForm = form;
30
+ this.fieldDefinitions = fields;
31
+ this.applyValuesFromTenant();
32
+ this.initialized = true;
33
+ }
34
+ async onSubmit() {
35
+ if (this.customPropsForm.invalid || !this.tenant) {
36
+ return;
37
+ }
38
+ const updatedTenant = {
39
+ ...this.tenant,
40
+ customProperties: {
41
+ ...this.tenant.customProperties,
42
+ ...this.getDirtyValues()
43
+ }
44
+ };
45
+ try {
46
+ await this.tenantService.update(updatedTenant);
47
+ this.alertService.success(gettext('Custom properties values saved.'));
48
+ }
49
+ catch (error) {
50
+ this.alertService.addServerFailure(error);
51
+ }
52
+ }
53
+ async loadTenantDetails() {
54
+ try {
55
+ const result = await this.tenantService.detail(this.activatedRoute.snapshot.parent.data.contextData.id);
56
+ this.tenant = result.data;
57
+ }
58
+ catch (error) {
59
+ this.alertService.addServerFailure(error);
60
+ }
61
+ }
62
+ applyValuesFromTenant() {
63
+ const customProps = this.tenant?.customProperties || {};
64
+ this.customPropsForm.patchValue(customProps);
65
+ }
66
+ getDirtyValues() {
67
+ const dirtyValues = {};
68
+ Object.keys(this.customPropsForm.controls).forEach(key => {
69
+ const control = this.customPropsForm.controls[key];
70
+ if (control && control.dirty && control.value !== null) {
71
+ dirtyValues[key] = control.value;
72
+ }
73
+ });
74
+ return dirtyValues;
75
+ }
76
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: CustomPropertiesComponent, deps: [{ token: i1.TenantService }, { token: i2.AlertService }, { token: i3.ActivatedRoute }, { token: i4.CustomPropertiesService }], target: i0.ɵɵFactoryTarget.Component }); }
77
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: CustomPropertiesComponent, isStandalone: true, selector: "c8y-custom-properties", ngImport: i0, template: "<c8y-title *ngIf=\"tenant\">\n {{ tenant.company }}\n</c8y-title>\n\n<c8y-breadcrumb>\n <c8y-breadcrumb-item\n [icon]=\"'c8y-layers'\"\n [label]=\"'Tenants' | translate\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [icon]=\"'c8y-layers'\"\n [label]=\"'Subtenants' | translate\"\n [path]=\"'/tenants'\"\n ></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<ng-container>\n <form\n [formGroup]=\"customPropsForm\"\n (ngSubmit)=\"onSubmit()\"\n >\n <div class=\"card card--fullpage m-b-0\">\n <div class=\"card-header separator\">\n <div\n class=\"card-title\"\n translate\n >\n Custom properties\n </div>\n </div>\n\n <div class=\"inner-scroll\">\n <div\n class=\"card-block\"\n *ngIf=\"!initialized\"\n >\n <c8y-loading></c8y-loading>\n </div>\n\n <c8y-help src=\"/docs/enterprise-tenant/managing-tenants/#custom-properties\"></c8y-help>\n\n <!-- empty state -->\n <c8y-ui-empty-state\n [icon]=\"'property-script'\"\n [title]=\"'No custom properties to display.' | translate\"\n [subtitle]=\"'Add a new tenant property in Properties library.' | translate\"\n *ngIf=\"fieldDefinitions?.length === 0 && initialized\"\n >\n <p c8y-guide-docs>\n <small translate>\n Find out more in the\n <a c8y-guide-href=\"/docs/enterprise-tenant/managing-tenants/#custom-properties\">\n User guide\n </a>\n .\n </small>\n </p>\n </c8y-ui-empty-state>\n\n <div\n class=\"card-block\"\n *ngIf=\"initialized\"\n >\n <ng-container *ngFor=\"let field of fieldDefinitions\">\n <c8y-custom-property-field\n [fieldDefinition]=\"field\"\n [form]=\"customPropsForm\"\n ></c8y-custom-property-field>\n </ng-container>\n </div>\n </div>\n\n <div\n class=\"card-footer separator\"\n *ngIf=\"initialized\"\n >\n <button\n class=\"btn btn-default\"\n type=\"button\"\n [routerLink]=\"['/tenants']\"\n translate\n data-cy=\"custom-properties--cancel-button\"\n >\n Cancel\n </button>\n <button\n class=\"btn btn-primary\"\n type=\"submit\"\n [disabled]=\"!(!customPropsForm.invalid && customPropsForm.dirty)\"\n translate\n data-cy=\"custom-properties--save-button\"\n >\n Save\n </button>\n </div>\n </div>\n </form>\n</ng-container>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i6.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i6.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i6.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: CoreModule }, { kind: "component", type: i2.BreadcrumbComponent, selector: "c8y-breadcrumb" }, { kind: "component", type: i2.BreadcrumbItemComponent, selector: "c8y-breadcrumb-item", inputs: ["icon", "translate", "label", "path", "injector"] }, { kind: "component", type: i2.EmptyStateComponent, selector: "c8y-ui-empty-state", inputs: ["icon", "title", "subtitle", "horizontal"] }, { kind: "pipe", type: i2.C8yTranslatePipe, name: "translate" }, { kind: "directive", type: i2.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "component", type: i2.LoadingComponent, selector: "c8y-loading", inputs: ["layout", "progress", "message"] }, { kind: "component", type: i2.TitleComponent, selector: "c8y-title", inputs: ["pageTitleUpdate"] }, { kind: "directive", type: i2.GuideHrefDirective, selector: "[c8y-guide-href]", inputs: ["c8y-guide-href"] }, { kind: "component", type: i2.GuideDocsComponent, selector: "[c8y-guide-docs]" }, { kind: "component", type: i2.HelpComponent, selector: "c8y-help", inputs: ["src", "isCollapsed", "priority", "icon"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: CustomPropertyFieldComponent, selector: "c8y-custom-property-field", inputs: ["fieldDefinition", "form"] }] }); }
78
+ }
79
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: CustomPropertiesComponent, decorators: [{
80
+ type: Component,
81
+ args: [{ selector: 'c8y-custom-properties', standalone: true, imports: [
82
+ CommonModule,
83
+ ReactiveFormsModule,
84
+ FormsModule,
85
+ CoreModule,
86
+ RouterLink,
87
+ CustomPropertyFieldComponent
88
+ ], template: "<c8y-title *ngIf=\"tenant\">\n {{ tenant.company }}\n</c8y-title>\n\n<c8y-breadcrumb>\n <c8y-breadcrumb-item\n [icon]=\"'c8y-layers'\"\n [label]=\"'Tenants' | translate\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [icon]=\"'c8y-layers'\"\n [label]=\"'Subtenants' | translate\"\n [path]=\"'/tenants'\"\n ></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<ng-container>\n <form\n [formGroup]=\"customPropsForm\"\n (ngSubmit)=\"onSubmit()\"\n >\n <div class=\"card card--fullpage m-b-0\">\n <div class=\"card-header separator\">\n <div\n class=\"card-title\"\n translate\n >\n Custom properties\n </div>\n </div>\n\n <div class=\"inner-scroll\">\n <div\n class=\"card-block\"\n *ngIf=\"!initialized\"\n >\n <c8y-loading></c8y-loading>\n </div>\n\n <c8y-help src=\"/docs/enterprise-tenant/managing-tenants/#custom-properties\"></c8y-help>\n\n <!-- empty state -->\n <c8y-ui-empty-state\n [icon]=\"'property-script'\"\n [title]=\"'No custom properties to display.' | translate\"\n [subtitle]=\"'Add a new tenant property in Properties library.' | translate\"\n *ngIf=\"fieldDefinitions?.length === 0 && initialized\"\n >\n <p c8y-guide-docs>\n <small translate>\n Find out more in the\n <a c8y-guide-href=\"/docs/enterprise-tenant/managing-tenants/#custom-properties\">\n User guide\n </a>\n .\n </small>\n </p>\n </c8y-ui-empty-state>\n\n <div\n class=\"card-block\"\n *ngIf=\"initialized\"\n >\n <ng-container *ngFor=\"let field of fieldDefinitions\">\n <c8y-custom-property-field\n [fieldDefinition]=\"field\"\n [form]=\"customPropsForm\"\n ></c8y-custom-property-field>\n </ng-container>\n </div>\n </div>\n\n <div\n class=\"card-footer separator\"\n *ngIf=\"initialized\"\n >\n <button\n class=\"btn btn-default\"\n type=\"button\"\n [routerLink]=\"['/tenants']\"\n translate\n data-cy=\"custom-properties--cancel-button\"\n >\n Cancel\n </button>\n <button\n class=\"btn btn-primary\"\n type=\"submit\"\n [disabled]=\"!(!customPropsForm.invalid && customPropsForm.dirty)\"\n translate\n data-cy=\"custom-properties--save-button\"\n >\n Save\n </button>\n </div>\n </div>\n </form>\n</ng-container>\n" }]
89
+ }], ctorParameters: () => [{ type: i1.TenantService }, { type: i2.AlertService }, { type: i3.ActivatedRoute }, { type: i4.CustomPropertiesService }] });
90
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLXByb3BlcnRpZXMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGVuYW50cy9jdXN0b20tcHJvcGVydGllcy9jdXN0b20tcHJvcGVydGllcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi90ZW5hbnRzL2N1c3RvbS1wcm9wZXJ0aWVzL2N1c3RvbS1wcm9wZXJ0aWVzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDbEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQW9CLGFBQWEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM5RCxPQUFPLEVBQUUsY0FBYyxFQUFFLFVBQVUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzdELE9BQU8sRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNyRixPQUFPLEVBQ0wsdUJBQXVCLEVBRXhCLE1BQU0sZ0RBQWdELENBQUM7QUFDeEQsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sNEVBQTRFLENBQUM7Ozs7Ozs7O0FBZTFILE1BQU0sT0FBTyx5QkFBeUI7SUFNcEMsWUFDVSxhQUE0QixFQUM1QixZQUEwQixFQUMxQixjQUE4QixFQUM5Qix1QkFBZ0Q7UUFIaEQsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLDRCQUF1QixHQUF2Qix1QkFBdUIsQ0FBeUI7UUFSMUQsb0JBQWUsR0FBYyxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUMvQyxXQUFN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QUNWLFVBQVUsb09BQ1YsNEJBQTRCOzsyRkFJbkIseUJBQXlCO2tCQWJyQyxTQUFTOytCQUNFLHVCQUF1QixjQUNyQixJQUFJLFdBQ1A7d0JBQ1AsWUFBWTt3QkFDWixtQkFBbUI7d0JBQ25CLFdBQVc7d0JBQ1gsVUFBVTt3QkFDVixVQUFVO3dCQUNWLDRCQUE0QjtxQkFDN0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUdyb3VwLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IElSZXN1bHQsIElUZW5hbnQsIFRlbmFudFNlcnZpY2UgfSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyTGluayB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBBbGVydFNlcnZpY2UsIENvcmVNb2R1bGUsIEZvcm1zTW9kdWxlLCBnZXR0ZXh0IH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQge1xuICBDdXN0b21Qcm9wZXJ0aWVzU2VydmljZSxcbiAgVGVuYW50Q3VzdG9tUHJvcGVydHlGaWVsZFxufSBmcm9tICcuLi9jdXN0b20tcHJvcGVydGllcy9jdXN0b20tcHJvcGVydGllcy5zZXJ2aWNlJztcbmltcG9ydCB7IEN1c3RvbVByb3BlcnR5RmllbGRDb21wb25lbnQgfSBmcm9tICcuLi9jdXN0b20tcHJvcGVydGllcy9jdXN0b20tcHJvcGVydHktZmllbGQvY3VzdG9tLXByb3BlcnR5LWZpZWxkLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS1jdXN0b20tcHJvcGVydGllcycsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBDb3JlTW9kdWxlLFxuICAgIFJvdXRlckxpbmssXG4gICAgQ3VzdG9tUHJvcGVydHlGaWVsZENvbXBvbmVudFxuICBdLFxuICB0ZW1wbGF0ZVVybDogJy4vY3VzdG9tLXByb3BlcnRpZXMuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIEN1c3RvbVByb3BlcnRpZXNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBmaWVsZERlZmluaXRpb25zOiBUZW5hbnRDdXN0b21Qcm9wZXJ0eUZpZWxkW107XG4gIGN1c3RvbVByb3BzRm9ybTogRm9ybUdyb3VwID0gbmV3IEZvcm1Hcm91cCh7fSk7XG4gIHRlbmFudDogSVRlbmFudCB8IG51bGwgPSBudWxsO1xuICBpbml0aWFsaXplZCA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgdGVuYW50U2VydmljZTogVGVuYW50U2VydmljZSxcbiAgICBwcml2YXRlIGFsZXJ0U2VydmljZTogQWxlcnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgIHByaXZhdGUgY3VzdG9tUHJvcGVydGllc1NlcnZpY2U6IEN1c3RvbVByb3BlcnRpZXNTZXJ2aWNlXG4gICkge31cblxuICBhc3luYyBuZ09uSW5pdCgpIHtcbiAgICBhd2FpdCB0aGlzLmxvYWRUZW5hbnREZXRhaWxzKCk7XG4gICAgY29uc3QgeyBmb3JtLCBmaWVsZHMgfSA9IGF3YWl0IHRoaXMuY3VzdG9tUHJvcGVydGllc1NlcnZpY2UuZ2V0Rm9ybUFuZEZpZWxkTGlzdCgpO1xuICAgIHRoaXMuY3VzdG9tUHJvcHNGb3JtID0gZm9ybTtcbiAgICB0aGlzLmZpZWxkRGVmaW5pdGlvbnMgPSBmaWVsZHM7XG4gICAgdGhpcy5hcHBseVZhbHVlc0Zyb21UZW5hbnQoKTtcbiAgICB0aGlzLmluaXRpYWxpemVkID0gdHJ1ZTtcbiAgfVxuXG4gIGFzeW5jIG9uU3VibWl0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLmN1c3RvbVByb3BzRm9ybS5pbnZhbGlkIHx8ICF0aGlzLnRlbmFudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHVwZGF0ZWRUZW5hbnQ6IElUZW5hbnQgPSB7XG4gICAgICAuLi50aGlzLnRlbmFudCxcbiAgICAgIGN1c3RvbVByb3BlcnRpZXM6IHtcbiAgICAgICAgLi4udGhpcy50ZW5hbnQuY3VzdG9tUHJvcGVydGllcyxcbiAgICAgICAgLi4udGhpcy5nZXREaXJ0eVZhbHVlcygpXG4gICAgICB9XG4gICAgfTtcblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLnRlbmFudFNlcnZpY2UudXBkYXRlKHVwZGF0ZWRUZW5hbnQpO1xuICAgICAgdGhpcy5hbGVydFNlcnZpY2Uuc3VjY2VzcyhnZXR0ZXh0KCdDdXN0b20gcHJvcGVydGllcyB2YWx1ZXMgc2F2ZWQuJykpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLmFsZXJ0U2VydmljZS5hZGRTZXJ2ZXJGYWlsdXJlKGVycm9yKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGxvYWRUZW5hbnREZXRhaWxzKCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXN1bHQ6IElSZXN1bHQ8SVRlbmFudD4gPSBhd2FpdCB0aGlzLnRlbmFudFNlcnZpY2UuZGV0YWlsKFxuICAgICAgICB0aGlzLmFjdGl2YXRlZFJvdXRlLnNuYXBzaG90LnBhcmVudC5kYXRhLmNvbnRleHREYXRhLmlkXG4gICAgICApO1xuICAgICAgdGhpcy50ZW5hbnQgPSByZXN1bHQuZGF0YTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhpcy5hbGVydFNlcnZpY2UuYWRkU2VydmVyRmFpbHVyZShlcnJvcik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhcHBseVZhbHVlc0Zyb21UZW5hbnQoKTogdm9pZCB7XG4gICAgY29uc3QgY3VzdG9tUHJvcHMgPSB0aGlzLnRlbmFudD8uY3VzdG9tUHJvcGVydGllcyB8fCB7fTtcbiAgICB0aGlzLmN1c3RvbVByb3BzRm9ybS5wYXRjaFZhbHVlKGN1c3RvbVByb3BzKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RGlydHlWYWx1ZXMoKTogeyBba2V5OiBzdHJpbmddOiB1bmtub3duIH0ge1xuICAgIGNvbnN0IGRpcnR5VmFsdWVzOiB7IFtrZXk6IHN0cmluZ106IHVua25vd24gfSA9IHt9O1xuICAgIE9iamVjdC5rZXlzKHRoaXMuY3VzdG9tUHJvcHNGb3JtLmNvbnRyb2xzKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICBjb25zdCBjb250cm9sID0gdGhpcy5jdXN0b21Qcm9wc0Zvcm0uY29udHJvbHNba2V5XTtcbiAgICAgIGlmIChjb250cm9sICYmIGNvbnRyb2wuZGlydHkgJiYgY29udHJvbC52YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICBkaXJ0eVZhbHVlc1trZXldID0gY29udHJvbC52YWx1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBkaXJ0eVZhbHVlcztcbiAgfVxufVxuIiwiPGM4eS10aXRsZSAqbmdJZj1cInRlbmFudFwiPlxuICB7eyB0ZW5hbnQuY29tcGFueSB9fVxuPC9jOHktdGl0bGU+XG5cbjxjOHktYnJlYWRjcnVtYj5cbiAgPGM4eS1icmVhZGNydW1iLWl0ZW1cbiAgICBbaWNvbl09XCInYzh5LWxheWVycydcIlxuICAgIFtsYWJlbF09XCInVGVuYW50cycgfCB0cmFuc2xhdGVcIlxuICA+PC9jOHktYnJlYWRjcnVtYi1pdGVtPlxuICA8Yzh5LWJyZWFkY3J1bWItaXRlbVxuICAgIFtpY29uXT1cIidjOHktbGF5ZXJzJ1wiXG4gICAgW2xhYmVsXT1cIidTdWJ0ZW5hbnRzJyB8IHRyYW5zbGF0ZVwiXG4gICAgW3BhdGhdPVwiJy90ZW5hbnRzJ1wiXG4gID48L2M4eS1icmVhZGNydW1iLWl0ZW0+XG48L2M4eS1icmVhZGNydW1iPlxuXG48bmctY29udGFpbmVyPlxuICA8Zm9ybVxuICAgIFtmb3JtR3JvdXBdPVwiY3VzdG9tUHJvcHNGb3JtXCJcbiAgICAobmdTdWJtaXQpPVwib25TdWJtaXQoKVwiXG4gID5cbiAgICA8ZGl2IGNsYXNzPVwiY2FyZCBjYXJkLS1mdWxscGFnZSBtLWItMFwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyIHNlcGFyYXRvclwiPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJjYXJkLXRpdGxlXCJcbiAgICAgICAgICB0cmFuc2xhdGVcbiAgICAgICAgPlxuICAgICAgICAgIEN1c3RvbSBwcm9wZXJ0aWVzXG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJpbm5lci1zY3JvbGxcIj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwiY2FyZC1ibG9ja1wiXG4gICAgICAgICAgKm5nSWY9XCIhaW5pdGlhbGl6ZWRcIlxuICAgICAgICA+XG4gICAgICAgICAgPGM4eS1sb2FkaW5nPjwvYzh5LWxvYWRpbmc+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxjOHktaGVscCBzcmM9XCIvZG9jcy9lbnRlcnByaXNlLXRlbmFudC9tYW5hZ2luZy10ZW5hbnRzLyNjdXN0b20tcHJvcGVydGllc1wiPjwvYzh5LWhlbHA+XG5cbiAgICAgICAgPCEtLSBlbXB0eSBzdGF0ZSAtLT5cbiAgICAgICAgPGM4eS11aS1lbXB0eS1zdGF0ZVxuICAgICAgICAgIFtpY29uXT1cIidwcm9wZXJ0eS1zY3JpcHQnXCJcbiAgICAgICAgICBbdGl0bGVdPVwiJ05vIGN1c3RvbSBwcm9wZXJ0aWVzIHRvIGRpc3BsYXkuJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgW3N1YnRpdGxlXT1cIidBZGQgYSBuZXcgdGVuYW50IHByb3BlcnR5IGluIFByb3BlcnRpZXMgbGlicmFyeS4nIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAqbmdJZj1cImZpZWxkRGVmaW5pdGlvbnM/Lmxlbmd0aCA9PT0gMCAmJiBpbml0aWFsaXplZFwiXG4gICAgICAgID5cbiAgICAgICAgICA8cCBjOHktZ3VpZGUtZG9jcz5cbiAgICAgICAgICAgIDxzbWFsbCB0cmFuc2xhdGU+XG4gICAgICAgICAgICAgIEZpbmQgb3V0IG1vcmUgaW4gdGhlXG4gICAgICAgICAgICAgIDxhIGM4eS1ndWlkZS1ocmVmPVwiL2RvY3MvZW50ZXJwcmlzZS10ZW5hbnQvbWFuYWdpbmctdGVuYW50cy8jY3VzdG9tLXByb3BlcnRpZXNcIj5cbiAgICAgICAgICAgICAgICBVc2VyIGd1aWRlXG4gICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgLlxuICAgICAgICAgICAgPC9zbWFsbD5cbiAgICAgICAgICA8L3A+XG4gICAgICAgIDwvYzh5LXVpLWVtcHR5LXN0YXRlPlxuXG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cImNhcmQtYmxvY2tcIlxuICAgICAgICAgICpuZ0lmPVwiaW5pdGlhbGl6ZWRcIlxuICAgICAgICA+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZmllbGQgb2YgZmllbGREZWZpbml0aW9uc1wiPlxuICAgICAgICAgICAgPGM4eS1jdXN0b20tcHJvcGVydHktZmllbGRcbiAgICAgICAgICAgICAgW2ZpZWxkRGVmaW5pdGlvbl09XCJmaWVsZFwiXG4gICAgICAgICAgICAgIFtmb3JtXT1cImN1c3RvbVByb3BzRm9ybVwiXG4gICAgICAgICAgICA+PC9jOHktY3VzdG9tLXByb3BlcnR5LWZpZWxkPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiY2FyZC1mb290ZXIgc2VwYXJhdG9yXCJcbiAgICAgICAgKm5nSWY9XCJpbml0aWFsaXplZFwiXG4gICAgICA+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICBjbGFzcz1cImJ0biBidG4tZGVmYXVsdFwiXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgW3JvdXRlckxpbmtdPVwiWycvdGVuYW50cyddXCJcbiAgICAgICAgICB0cmFuc2xhdGVcbiAgICAgICAgICBkYXRhLWN5PVwiY3VzdG9tLXByb3BlcnRpZXMtLWNhbmNlbC1idXR0b25cIlxuICAgICAgICA+XG4gICAgICAgICAgQ2FuY2VsXG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIlxuICAgICAgICAgIHR5cGU9XCJzdWJtaXRcIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCIhKCFjdXN0b21Qcm9wc0Zvcm0uaW52YWxpZCAmJiBjdXN0b21Qcm9wc0Zvcm0uZGlydHkpXCJcbiAgICAgICAgICB0cmFuc2xhdGVcbiAgICAgICAgICBkYXRhLWN5PVwiY3VzdG9tLXByb3BlcnRpZXMtLXNhdmUtYnV0dG9uXCJcbiAgICAgICAgPlxuICAgICAgICAgIFNhdmVcbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9mb3JtPlxuPC9uZy1jb250YWluZXI+XG4iXX0=
@@ -0,0 +1,76 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { InventoryService } from '@c8y/client';
3
+ import { FormControl, FormGroup, Validators } from '@angular/forms';
4
+ import { ValidationPattern } from '@c8y/ngx-components';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "@c8y/client";
7
+ const defaultFilters = { pageSize: 1000, type: 'c8y_JsonSchema', withTotalPages: true };
8
+ export class CustomPropertiesService {
9
+ constructor(inventoryService) {
10
+ this.inventoryService = inventoryService;
11
+ }
12
+ async getFormAndFieldList() {
13
+ const schema = await this.getCustomProperties();
14
+ const formGroup = this.buildFormGroup(schema);
15
+ const fields = this.buildFieldList(formGroup, schema);
16
+ return { form: formGroup, fields };
17
+ }
18
+ async getCustomProperties() {
19
+ let customFieldsSchema = {};
20
+ const customProperties = await this.inventoryService.list(defaultFilters);
21
+ customProperties.data.forEach(item => {
22
+ const fieldSchema = item['c8y_JsonSchema'].properties;
23
+ customFieldsSchema = { ...customFieldsSchema, ...fieldSchema };
24
+ });
25
+ return customFieldsSchema;
26
+ }
27
+ buildFormGroup(schema) {
28
+ const fg = new FormGroup({});
29
+ for (const [key, value] of Object.entries(schema)) {
30
+ const control = new FormControl(value.default, []);
31
+ this.applyValidators(control, value);
32
+ fg.addControl(key, control);
33
+ }
34
+ return fg;
35
+ }
36
+ applyValidators(control, props) {
37
+ const validatorsMap = {
38
+ required: Validators.required,
39
+ minimum: Validators.min(props.minimum),
40
+ maximum: Validators.max(props.maximum),
41
+ minLength: Validators.minLength(props.minLength),
42
+ maxLength: Validators.maxLength(props.maxLength),
43
+ pattern: Validators.pattern(props.pattern)
44
+ };
45
+ Object.entries(validatorsMap).forEach(([key, validator]) => {
46
+ if (props[key] !== undefined) {
47
+ control.addValidators(validator);
48
+ }
49
+ });
50
+ if (props.type === 'integer') {
51
+ control.addValidators(Validators.pattern(ValidationPattern.rules.integer.pattern));
52
+ }
53
+ }
54
+ buildFieldList(form, schema) {
55
+ const fieldList = [];
56
+ Object.entries(schema).forEach(([key, value]) => {
57
+ fieldList.push({
58
+ id: key,
59
+ label: value.title,
60
+ type: value.type,
61
+ format: value.format,
62
+ formControlReference: form.get(key)
63
+ });
64
+ });
65
+ return fieldList;
66
+ }
67
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: CustomPropertiesService, deps: [{ token: i1.InventoryService }], target: i0.ɵɵFactoryTarget.Injectable }); }
68
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: CustomPropertiesService, providedIn: 'root' }); }
69
+ }
70
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: CustomPropertiesService, decorators: [{
71
+ type: Injectable,
72
+ args: [{
73
+ providedIn: 'root'
74
+ }]
75
+ }], ctorParameters: () => [{ type: i1.InventoryService }] });
76
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLXByb3BlcnRpZXMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3RlbmFudHMvY3VzdG9tLXByb3BlcnRpZXMvY3VzdG9tLXByb3BlcnRpZXMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUMvQyxPQUFPLEVBQW1CLFdBQVcsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFckYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0scUJBQXFCLENBQUM7OztBQWF4RCxNQUFNLGNBQWMsR0FBRyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFLGNBQWMsRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUt4RixNQUFNLE9BQU8sdUJBQXVCO0lBQ2xDLFlBQW9CLGdCQUFrQztRQUFsQyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO0lBQUcsQ0FBQztJQUUxRCxLQUFLLENBQUMsbUJBQW1CO1FBQ3ZCLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDaEQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM5QyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUN0RCxPQUFPLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsQ0FBQztJQUNyQyxDQUFDO0lBRU8sS0FBSyxDQUFDLG1CQUFtQjtRQUMvQixJQUFJLGtCQUFrQixHQUFtQixFQUFFLENBQUM7UUFDNUMsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLElBQUksQ0FBQyxnQkFB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R0FsRVUsdUJBQXVCO2tIQUF2Qix1QkFBdUIsY0FGdEIsTUFBTTs7MkZBRVAsdUJBQXVCO2tCQUhuQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEludmVudG9yeVNlcnZpY2UgfSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBKU09OU2NoZW1hNywgSlNPTlNjaGVtYTdUeXBlTmFtZSB9IGZyb20gJ2pzb24tc2NoZW1hJztcbmltcG9ydCB7IFZhbGlkYXRpb25QYXR0ZXJuIH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5cbnR5cGUgUHJvcGVydGllc1R5cGUgPSB7IFtrZXk6IHN0cmluZ106IEpTT05TY2hlbWE3IH07XG5cbi8vIE1vZGVsIGZvciBpbmRpdmlkdWFsIHRlbmFudCBjdXN0b20gcHJvcGVydHkgZmllbGRcbmV4cG9ydCBpbnRlcmZhY2UgVGVuYW50Q3VzdG9tUHJvcGVydHlGaWVsZCB7XG4gIGlkOiBzdHJpbmc7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIHR5cGU6IEpTT05TY2hlbWE3VHlwZU5hbWUgfCBKU09OU2NoZW1hN1R5cGVOYW1lW107XG4gIGZvcm1hdD86ICdkYXRldGltZScgfCBzdHJpbmc7XG4gIGZvcm1Db250cm9sUmVmZXJlbmNlOiBBYnN0cmFjdENvbnRyb2w7XG59XG5cbmNvbnN0IGRlZmF1bHRGaWx0ZXJzID0geyBwYWdlU2l6ZTogMTAwMCwgdHlwZTogJ2M4eV9Kc29uU2NoZW1hJywgd2l0aFRvdGFsUGFnZXM6IHRydWUgfTtcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgQ3VzdG9tUHJvcGVydGllc1NlcnZpY2Uge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGludmVudG9yeVNlcnZpY2U6IEludmVudG9yeVNlcnZpY2UpIHt9XG5cbiAgYXN5bmMgZ2V0Rm9ybUFuZEZpZWxkTGlzdCgpOiBQcm9taXNlPHsgZm9ybTogRm9ybUdyb3VwOyBmaWVsZHM6IFRlbmFudEN1c3RvbVByb3BlcnR5RmllbGRbXSB9PiB7XG4gICAgY29uc3Qgc2NoZW1hID0gYXdhaXQgdGhpcy5nZXRDdXN0b21Qcm9wZXJ0aWVzKCk7XG4gICAgY29uc3QgZm9ybUdyb3VwID0gdGhpcy5idWlsZEZvcm1Hcm91cChzY2hlbWEpO1xuICAgIGNvbnN0IGZpZWxkcyA9IHRoaXMuYnVpbGRGaWVsZExpc3QoZm9ybUdyb3VwLCBzY2hlbWEpO1xuICAgIHJldHVybiB7IGZvcm06IGZvcm1Hcm91cCwgZmllbGRzIH07XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdldEN1c3RvbVByb3BlcnRpZXMoKTogUHJvbWlzZTxQcm9wZXJ0aWVzVHlwZT4ge1xuICAgIGxldCBjdXN0b21GaWVsZHNTY2hlbWE6IFByb3BlcnRpZXNUeXBlID0ge307XG4gICAgY29uc3QgY3VzdG9tUHJvcGVydGllcyA9IGF3YWl0IHRoaXMuaW52ZW50b3J5U2VydmljZS5saXN0KGRlZmF1bHRGaWx0ZXJzKTtcblxuICAgIGN1c3RvbVByb3BlcnRpZXMuZGF0YS5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgY29uc3QgZmllbGRTY2hlbWE6IFByb3BlcnRpZXNUeXBlID0gaXRlbVsnYzh5X0pzb25TY2hlbWEnXS5wcm9wZXJ0aWVzO1xuICAgICAgY3VzdG9tRmllbGRzU2NoZW1hID0geyAuLi5jdXN0b21GaWVsZHNTY2hlbWEsIC4uLihmaWVsZFNjaGVtYSBhcyBvYmplY3QpIH07XG4gICAgfSk7XG4gICAgcmV0dXJuIGN1c3RvbUZpZWxkc1NjaGVtYTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRGb3JtR3JvdXAoc2NoZW1hOiBQcm9wZXJ0aWVzVHlwZSk6IEZvcm1Hcm91cCB7XG4gICAgY29uc3QgZmcgPSBuZXcgRm9ybUdyb3VwKHt9KTtcblxuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHNjaGVtYSkpIHtcbiAgICAgIGNvbnN0IGNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2wodmFsdWUuZGVmYXVsdCwgW10pO1xuICAgICAgdGhpcy5hcHBseVZhbGlkYXRvcnMoY29udHJvbCwgdmFsdWUpO1xuICAgICAgZmcuYWRkQ29udHJvbChrZXksIGNvbnRyb2wpO1xuICAgIH1cbiAgICByZXR1cm4gZmc7XG4gIH1cblxuICBwcml2YXRlIGFwcGx5VmFsaWRhdG9ycyhjb250cm9sOiBGb3JtQ29udHJvbCwgcHJvcHM6IEpTT05TY2hlbWE3KTogdm9pZCB7XG4gICAgY29uc3QgdmFsaWRhdG9yc01hcCA9IHtcbiAgICAgIHJlcXVpcmVkOiBWYWxpZGF0b3JzLnJlcXVpcmVkLFxuICAgICAgbWluaW11bTogVmFsaWRhdG9ycy5taW4ocHJvcHMubWluaW11bSksXG4gICAgICBtYXhpbXVtOiBWYWxpZGF0b3JzLm1heChwcm9wcy5tYXhpbXVtKSxcbiAgICAgIG1pbkxlbmd0aDogVmFsaWRhdG9ycy5taW5MZW5ndGgocHJvcHMubWluTGVuZ3RoKSxcbiAgICAgIG1heExlbmd0aDogVmFsaWRhdG9ycy5tYXhMZW5ndGgocHJvcHMubWF4TGVuZ3RoKSxcbiAgICAgIHBhdHRlcm46IFZhbGlkYXRvcnMucGF0dGVybihwcm9wcy5wYXR0ZXJuKVxuICAgIH07XG5cbiAgICBPYmplY3QuZW50cmllcyh2YWxpZGF0b3JzTWFwKS5mb3JFYWNoKChba2V5LCB2YWxpZGF0b3JdKSA9PiB7XG4gICAgICBpZiAocHJvcHNba2V5IGFzIGtleW9mIEpTT05TY2hlbWE3XSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnRyb2wuYWRkVmFsaWRhdG9ycyh2YWxpZGF0b3IpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKHByb3BzLnR5cGUgPT09ICdpbnRlZ2VyJykge1xuICAgICAgY29udHJvbC5hZGRWYWxpZGF0b3JzKFZhbGlkYXRvcnMucGF0dGVybihWYWxpZGF0aW9uUGF0dGVybi5ydWxlcy5pbnRlZ2VyLnBhdHRlcm4pKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkRmllbGRMaXN0KGZvcm06IEZvcm1Hcm91cCwgc2NoZW1hOiBQcm9wZXJ0aWVzVHlwZSk6IFRlbmFudEN1c3RvbVByb3BlcnR5RmllbGRbXSB7XG4gICAgY29uc3QgZmllbGRMaXN0OiBUZW5hbnRDdXN0b21Qcm9wZXJ0eUZpZWxkW10gPSBbXTtcbiAgICBPYmplY3QuZW50cmllcyhzY2hlbWEpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgZmllbGRMaXN0LnB1c2goe1xuICAgICAgICBpZDoga2V5LFxuICAgICAgICBsYWJlbDogdmFsdWUudGl0bGUsXG4gICAgICAgIHR5cGU6IHZhbHVlLnR5cGUsXG4gICAgICAgIGZvcm1hdDogdmFsdWUuZm9ybWF0LFxuICAgICAgICBmb3JtQ29udHJvbFJlZmVyZW5jZTogZm9ybS5nZXQoa2V5KSBhcyBGb3JtQ29udHJvbFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gZmllbGRMaXN0O1xuICB9XG59XG4iXX0=
@@ -0,0 +1,29 @@
1
+ import { Component, Input } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { C8yTranslatePipe, DateTimePickerModule, FormGroupComponent } from '@c8y/ngx-components';
4
+ import { FormsModule } from '@c8y/ngx-components';
5
+ import { FormGroup, ReactiveFormsModule } from '@angular/forms';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "@angular/common";
8
+ import * as i2 from "@angular/forms";
9
+ import * as i3 from "@c8y/ngx-components";
10
+ export class CustomPropertyFieldComponent {
11
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: CustomPropertyFieldComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
12
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: CustomPropertyFieldComponent, isStandalone: true, selector: "c8y-custom-property-field", inputs: { fieldDefinition: "fieldDefinition", form: "form" }, ngImport: i0, template: "<ng-container *ngIf=\"form && fieldDefinition\">\n <ng-container [ngSwitch]=\"fieldDefinition.type\">\n <ng-container *ngSwitchCase=\"'boolean'\">\n <c8y-form-group [formGroup]=\"form\">\n <label\n class=\"c8y-checkbox\"\n [title]=\"fieldDefinition.label | translate\"\n [for]=\"fieldDefinition.id\"\n >\n <input\n type=\"checkbox\"\n [id]=\"fieldDefinition.id\"\n [formControlName]=\"fieldDefinition.id\"\n />\n <span></span>\n <span>{{ fieldDefinition.label | translate }}</span>\n </label>\n </c8y-form-group>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'number'\">\n <c8y-form-group [formGroup]=\"form\">\n <label [for]=\"fieldDefinition.id\">\n {{ fieldDefinition.label | translate }}\n </label>\n <input\n class=\"form-control\"\n type=\"number\"\n [id]=\"fieldDefinition.id\"\n [formControlName]=\"fieldDefinition.id\"\n />\n </c8y-form-group>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'integer'\">\n <c8y-form-group [formGroup]=\"form\">\n <label [for]=\"fieldDefinition.id\">\n {{ fieldDefinition.label | translate }}\n </label>\n <input\n class=\"form-control\"\n type=\"number\"\n [id]=\"fieldDefinition.id\"\n [formControlName]=\"fieldDefinition.id\"\n />\n </c8y-form-group>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'string'\">\n <c8y-form-group\n *ngIf=\"!fieldDefinition.format\"\n [formGroup]=\"form\"\n >\n <label [for]=\"fieldDefinition.id\">\n {{ fieldDefinition.label | translate }}\n </label>\n <input\n class=\"form-control\"\n type=\"text\"\n [id]=\"fieldDefinition.id\"\n [formControlName]=\"fieldDefinition.id\"\n />\n </c8y-form-group>\n\n <c8y-form-group\n *ngIf=\"fieldDefinition.format === 'datetime'\"\n [formGroup]=\"form\"\n >\n <label [for]=\"fieldDefinition.id\">\n {{ fieldDefinition.label | translate }}\n </label>\n <c8y-date-time-picker\n [id]=\"fieldDefinition.id\"\n [formControlName]=\"fieldDefinition.id\"\n data-cy=\"c8y-custom-property-field--date-time-picker\"\n ></c8y-date-time-picker>\n </c8y-form-group>\n </ng-container>\n </ng-container>\n</ng-container>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }, { kind: "component", type: FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i2.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.RequiredInputPlaceholderDirective, selector: "input[required], input[formControlName]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: DateTimePickerModule }, { kind: "component", type: i3.DateTimePickerComponent, selector: "c8y-date-time-picker", inputs: ["minDate", "maxDate", "placeholder", "dateInputFormat", "adaptivePosition", "size", "dateType", "config"], outputs: ["onDateSelected"] }] }); }
13
+ }
14
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: CustomPropertyFieldComponent, decorators: [{
15
+ type: Component,
16
+ args: [{ selector: 'c8y-custom-property-field', standalone: true, imports: [
17
+ CommonModule,
18
+ C8yTranslatePipe,
19
+ FormGroupComponent,
20
+ FormsModule,
21
+ ReactiveFormsModule,
22
+ DateTimePickerModule
23
+ ], template: "<ng-container *ngIf=\"form && fieldDefinition\">\n <ng-container [ngSwitch]=\"fieldDefinition.type\">\n <ng-container *ngSwitchCase=\"'boolean'\">\n <c8y-form-group [formGroup]=\"form\">\n <label\n class=\"c8y-checkbox\"\n [title]=\"fieldDefinition.label | translate\"\n [for]=\"fieldDefinition.id\"\n >\n <input\n type=\"checkbox\"\n [id]=\"fieldDefinition.id\"\n [formControlName]=\"fieldDefinition.id\"\n />\n <span></span>\n <span>{{ fieldDefinition.label | translate }}</span>\n </label>\n </c8y-form-group>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'number'\">\n <c8y-form-group [formGroup]=\"form\">\n <label [for]=\"fieldDefinition.id\">\n {{ fieldDefinition.label | translate }}\n </label>\n <input\n class=\"form-control\"\n type=\"number\"\n [id]=\"fieldDefinition.id\"\n [formControlName]=\"fieldDefinition.id\"\n />\n </c8y-form-group>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'integer'\">\n <c8y-form-group [formGroup]=\"form\">\n <label [for]=\"fieldDefinition.id\">\n {{ fieldDefinition.label | translate }}\n </label>\n <input\n class=\"form-control\"\n type=\"number\"\n [id]=\"fieldDefinition.id\"\n [formControlName]=\"fieldDefinition.id\"\n />\n </c8y-form-group>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'string'\">\n <c8y-form-group\n *ngIf=\"!fieldDefinition.format\"\n [formGroup]=\"form\"\n >\n <label [for]=\"fieldDefinition.id\">\n {{ fieldDefinition.label | translate }}\n </label>\n <input\n class=\"form-control\"\n type=\"text\"\n [id]=\"fieldDefinition.id\"\n [formControlName]=\"fieldDefinition.id\"\n />\n </c8y-form-group>\n\n <c8y-form-group\n *ngIf=\"fieldDefinition.format === 'datetime'\"\n [formGroup]=\"form\"\n >\n <label [for]=\"fieldDefinition.id\">\n {{ fieldDefinition.label | translate }}\n </label>\n <c8y-date-time-picker\n [id]=\"fieldDefinition.id\"\n [formControlName]=\"fieldDefinition.id\"\n data-cy=\"c8y-custom-property-field--date-time-picker\"\n ></c8y-date-time-picker>\n </c8y-form-group>\n </ng-container>\n </ng-container>\n</ng-container>\n" }]
24
+ }], propDecorators: { fieldDefinition: [{
25
+ type: Input
26
+ }], form: [{
27
+ type: Input
28
+ }] } });
29
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLXByb3BlcnR5LWZpZWxkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3RlbmFudHMvY3VzdG9tLXByb3BlcnRpZXMvY3VzdG9tLXByb3BlcnR5LWZpZWxkL2N1c3RvbS1wcm9wZXJ0eS1maWVsZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi90ZW5hbnRzL2N1c3RvbS1wcm9wZXJ0aWVzL2N1c3RvbS1wcm9wZXJ0eS1maWVsZC9jdXN0b20tcHJvcGVydHktZmllbGQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFakQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxvQkFBb0IsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2pHLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsU0FBUyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7O0FBZWhFLE1BQU0sT0FBTyw0QkFBNEI7OEdBQTVCLDRCQUE0QjtrR0FBNUIsNEJBQTRCLG1KQ3BCekMsdy9FQWdGQSwyQ0RyRUksWUFBWSwwVEFDWixnQkFBZ0Isa0RBQ2hCLGtCQUFrQixzSUFDbEIsV0FBVyw2L0JBQ1gsbUJBQW1CLCtVQUNuQixvQkFBb0I7OzJGQUlYLDRCQUE0QjtrQkFieEMsU0FBUzsrQkFDRSwyQkFBMkIsY0FDekIsSUFBSSxXQUNQO3dCQUNQLFlBQVk7d0JBQ1osZ0JBQWdCO3dCQUNoQixrQkFBa0I7d0JBQ2xCLFdBQVc7d0JBQ1gsbUJBQW1CO3dCQUNuQixvQkFBb0I7cUJBQ3JCOzhCQUtELGVBQWU7c0JBRGQsS0FBSztnQkFJTixJQUFJO3NCQURILEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUZW5hbnRDdXN0b21Qcm9wZXJ0eUZpZWxkIH0gZnJvbSAnLi4vY3VzdG9tLXByb3BlcnRpZXMuc2VydmljZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQzh5VHJhbnNsYXRlUGlwZSwgRGF0ZVRpbWVQaWNrZXJNb2R1bGUsIEZvcm1Hcm91cENvbXBvbmVudCB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IEZvcm1Hcm91cCwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LWN1c3RvbS1wcm9wZXJ0eS1maWVsZCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgQzh5VHJhbnNsYXRlUGlwZSxcbiAgICBGb3JtR3JvdXBDb21wb25lbnQsXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICBEYXRlVGltZVBpY2tlck1vZHVsZVxuICBdLFxuICB0ZW1wbGF0ZVVybDogJy4vY3VzdG9tLXByb3BlcnR5LWZpZWxkLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBDdXN0b21Qcm9wZXJ0eUZpZWxkQ29tcG9uZW50IHtcbiAgQElucHV0KClcbiAgZmllbGREZWZpbml0aW9uOiBUZW5hbnRDdXN0b21Qcm9wZXJ0eUZpZWxkO1xuXG4gIEBJbnB1dCgpXG4gIGZvcm06IEZvcm1Hcm91cDtcbn1cbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCJmb3JtICYmIGZpZWxkRGVmaW5pdGlvblwiPlxuICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJmaWVsZERlZmluaXRpb24udHlwZVwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidib29sZWFuJ1wiPlxuICAgICAgPGM4eS1mb3JtLWdyb3VwIFtmb3JtR3JvdXBdPVwiZm9ybVwiPlxuICAgICAgICA8bGFiZWxcbiAgICAgICAgICBjbGFzcz1cImM4eS1jaGVja2JveFwiXG4gICAgICAgICAgW3RpdGxlXT1cImZpZWxkRGVmaW5pdGlvbi5sYWJlbCB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgW2Zvcl09XCJmaWVsZERlZmluaXRpb24uaWRcIlxuICAgICAgICA+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgW2lkXT1cImZpZWxkRGVmaW5pdGlvbi5pZFwiXG4gICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImZpZWxkRGVmaW5pdGlvbi5pZFwiXG4gICAgICAgICAgLz5cbiAgICAgICAgICA8c3Bhbj48L3NwYW4+XG4gICAgICAgICAgPHNwYW4+e3sgZmllbGREZWZpbml0aW9uLmxhYmVsIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICA8L2xhYmVsPlxuICAgICAgPC9jOHktZm9ybS1ncm91cD5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidudW1iZXInXCI+XG4gICAgICA8Yzh5LWZvcm0tZ3JvdXAgW2Zvcm1Hcm91cF09XCJmb3JtXCI+XG4gICAgICAgIDxsYWJlbCBbZm9yXT1cImZpZWxkRGVmaW5pdGlvbi5pZFwiPlxuICAgICAgICAgIHt7IGZpZWxkRGVmaW5pdGlvbi5sYWJlbCB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L2xhYmVsPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgW2lkXT1cImZpZWxkRGVmaW5pdGlvbi5pZFwiXG4gICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJmaWVsZERlZmluaXRpb24uaWRcIlxuICAgICAgICAvPlxuICAgICAgPC9jOHktZm9ybS1ncm91cD5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidpbnRlZ2VyJ1wiPlxuICAgICAgPGM4eS1mb3JtLWdyb3VwIFtmb3JtR3JvdXBdPVwiZm9ybVwiPlxuICAgICAgICA8bGFiZWwgW2Zvcl09XCJmaWVsZERlZmluaXRpb24uaWRcIj5cbiAgICAgICAgICB7eyBmaWVsZERlZmluaXRpb24ubGFiZWwgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgIFtpZF09XCJmaWVsZERlZmluaXRpb24uaWRcIlxuICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiZmllbGREZWZpbml0aW9uLmlkXCJcbiAgICAgICAgLz5cbiAgICAgIDwvYzh5LWZvcm0tZ3JvdXA+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInc3RyaW5nJ1wiPlxuICAgICAgPGM4eS1mb3JtLWdyb3VwXG4gICAgICAgICpuZ0lmPVwiIWZpZWxkRGVmaW5pdGlvbi5mb3JtYXRcIlxuICAgICAgICBbZm9ybUdyb3VwXT1cImZvcm1cIlxuICAgICAgPlxuICAgICAgICA8bGFiZWwgW2Zvcl09XCJmaWVsZERlZmluaXRpb24uaWRcIj5cbiAgICAgICAgICB7eyBmaWVsZERlZmluaXRpb24ubGFiZWwgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICBbaWRdPVwiZmllbGREZWZpbml0aW9uLmlkXCJcbiAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImZpZWxkRGVmaW5pdGlvbi5pZFwiXG4gICAgICAgIC8+XG4gICAgICA8L2M4eS1mb3JtLWdyb3VwPlxuXG4gICAgICA8Yzh5LWZvcm0tZ3JvdXBcbiAgICAgICAgKm5nSWY9XCJmaWVsZERlZmluaXRpb24uZm9ybWF0ID09PSAnZGF0ZXRpbWUnXCJcbiAgICAgICAgW2Zvcm1Hcm91cF09XCJmb3JtXCJcbiAgICAgID5cbiAgICAgICAgPGxhYmVsIFtmb3JdPVwiZmllbGREZWZpbml0aW9uLmlkXCI+XG4gICAgICAgICAge3sgZmllbGREZWZpbml0aW9uLmxhYmVsIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvbGFiZWw+XG4gICAgICAgIDxjOHktZGF0ZS10aW1lLXBpY2tlclxuICAgICAgICAgIFtpZF09XCJmaWVsZERlZmluaXRpb24uaWRcIlxuICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiZmllbGREZWZpbml0aW9uLmlkXCJcbiAgICAgICAgICBkYXRhLWN5PVwiYzh5LWN1c3RvbS1wcm9wZXJ0eS1maWVsZC0tZGF0ZS10aW1lLXBpY2tlclwiXG4gICAgICAgID48L2M4eS1kYXRlLXRpbWUtcGlja2VyPlxuICAgICAgPC9jOHktZm9ybS1ncm91cD5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9uZy1jb250YWluZXI+XG48L25nLWNvbnRhaW5lcj5cbiJdfQ==
@@ -5,4 +5,5 @@ export * from './tenant-list/tenant-list.guard';
5
5
  export * from './tenant-list/tenant-list.component';
6
6
  export * from './tenant-list/creation-time.filtering-form-renderer.component';
7
7
  export * from './tenant-list/status.filtering-form-renderer.component';
8
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90ZW5hbnRzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsa0JBQWtCLENBQUM7QUFDakMsY0FBYyxpQkFBaUIsQ0FBQztBQUNoQyxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMsaUNBQWlDLENBQUM7QUFDaEQsY0FBYyxxQ0FBcUMsQ0FBQztBQUNwRCxjQUFjLCtEQUErRCxDQUFDO0FBQzlFLGNBQWMsd0RBQXdELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL3RlbmFudHMubW9kdWxlJztcbmV4cG9ydCAqIGZyb20gJy4vdGVuYW50cy5tb2RlbCc7XG5leHBvcnQgKiBmcm9tICcuL3RlbmFudHMtbmF2aWdhdGlvbi5mYWN0b3J5JztcbmV4cG9ydCAqIGZyb20gJy4vdGVuYW50LWxpc3QvdGVuYW50LWxpc3QuZ3VhcmQnO1xuZXhwb3J0ICogZnJvbSAnLi90ZW5hbnQtbGlzdC90ZW5hbnQtbGlzdC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi90ZW5hbnQtbGlzdC9jcmVhdGlvbi10aW1lLmZpbHRlcmluZy1mb3JtLXJlbmRlcmVyLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL3RlbmFudC1saXN0L3N0YXR1cy5maWx0ZXJpbmctZm9ybS1yZW5kZXJlci5jb21wb25lbnQnO1xuIl19
8
+ export * from './custom-properties/custom-properties.component';
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90ZW5hbnRzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsa0JBQWtCLENBQUM7QUFDakMsY0FBYyxpQkFBaUIsQ0FBQztBQUNoQyxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMsaUNBQWlDLENBQUM7QUFDaEQsY0FBYyxxQ0FBcUMsQ0FBQztBQUNwRCxjQUFjLCtEQUErRCxDQUFDO0FBQzlFLGNBQWMsd0RBQXdELENBQUM7QUFDdkUsY0FBYyxpREFBaUQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vdGVuYW50cy5tb2R1bGUnO1xuZXhwb3J0ICogZnJvbSAnLi90ZW5hbnRzLm1vZGVsJztcbmV4cG9ydCAqIGZyb20gJy4vdGVuYW50cy1uYXZpZ2F0aW9uLmZhY3RvcnknO1xuZXhwb3J0ICogZnJvbSAnLi90ZW5hbnQtbGlzdC90ZW5hbnQtbGlzdC5ndWFyZCc7XG5leHBvcnQgKiBmcm9tICcuL3RlbmFudC1saXN0L3RlbmFudC1saXN0LmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL3RlbmFudC1saXN0L2NyZWF0aW9uLXRpbWUuZmlsdGVyaW5nLWZvcm0tcmVuZGVyZXIuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vdGVuYW50LWxpc3Qvc3RhdHVzLmZpbHRlcmluZy1mb3JtLXJlbmRlcmVyLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2N1c3RvbS1wcm9wZXJ0aWVzL2N1c3RvbS1wcm9wZXJ0aWVzLmNvbXBvbmVudCc7XG4iXX0=
@@ -0,0 +1,92 @@
1
+ import { Validators } from '@angular/forms';
2
+ import { gettext } from '@c8y/ngx-components/gettext';
3
+ /**
4
+ * Define all hardTyped custom properties, and their configuration in one place.
5
+ *
6
+ * This exported const utilizes typescript inferring,
7
+ * while still benefiting from hard typing, thanks to "satisfies" keyword
8
+ */
9
+ const tenantLimitsCustomPropertiesDefinition = {
10
+ //TODO: External reference - going to be moved to the Properties tab.
11
+ externalReference: {
12
+ id: 'externalReference',
13
+ validators: [],
14
+ defaultValue: null,
15
+ type: 'text',
16
+ label: gettext('External reference'),
17
+ placeholder: gettext('e.g. REF12345`reference number`')
18
+ },
19
+ limitDevicesNumber: {
20
+ id: 'limit.devices.number',
21
+ validators: [Validators.min(0)],
22
+ defaultValue: null,
23
+ type: 'number',
24
+ label: gettext('Limit number of devices'),
25
+ placeholder: gettext('e.g. {{ example }}'),
26
+ placeholderArgs: { example: 1000 }
27
+ },
28
+ limitHttpRequests: {
29
+ id: 'limit.http.requests',
30
+ validators: [Validators.min(-1)],
31
+ defaultValue: null,
32
+ type: 'number',
33
+ label: gettext('Limit HTTP requests'),
34
+ placeholder: gettext('e.g. {{ example }}'),
35
+ placeholderArgs: { example: 10000 }
36
+ },
37
+ limitHttpQueue: {
38
+ id: 'limit.http.queue',
39
+ validators: [Validators.min(-1)],
40
+ defaultValue: null,
41
+ type: 'number',
42
+ label: gettext('Limit HTTP queue'),
43
+ placeholder: gettext('e.g. {{ example }}'),
44
+ placeholderArgs: { example: 100 }
45
+ },
46
+ limitStreamRequests: {
47
+ id: 'limit.stream.requests',
48
+ validators: [Validators.min(-1)],
49
+ defaultValue: null,
50
+ type: 'number',
51
+ label: gettext('Limit stream requests'),
52
+ placeholder: gettext('e.g. {{ example }}'),
53
+ placeholderArgs: { example: 100 }
54
+ },
55
+ limitStreamQueue: {
56
+ id: 'limit.stream.queue',
57
+ validators: [Validators.min(-1)],
58
+ defaultValue: null,
59
+ type: 'number',
60
+ label: gettext('Limit stream queue'),
61
+ placeholder: gettext('e.g. {{ example }}'),
62
+ placeholderArgs: { example: 100 }
63
+ },
64
+ cepServerQueueLimit: {
65
+ id: 'cepServer.queue.limit',
66
+ validators: [Validators.min(-1)],
67
+ defaultValue: null,
68
+ type: 'number',
69
+ label: gettext('Limit CEP server queue'),
70
+ placeholder: gettext('e.g. {{ example }}'),
71
+ placeholderArgs: { example: 100 }
72
+ },
73
+ dataBrokerQueueLimit: {
74
+ id: 'data-broker.queue.limit',
75
+ validators: [Validators.min(0)],
76
+ defaultValue: null,
77
+ type: 'number',
78
+ label: gettext('Limit data broker queue'),
79
+ placeholder: gettext('e.g. {{ example }}'),
80
+ placeholderArgs: { example: 100 }
81
+ },
82
+ // TODO: Gainsight checkbox - going to be moved to the Properties tab.
83
+ gainsightEnabled: {
84
+ id: 'gainsightEnabled',
85
+ validators: [],
86
+ defaultValue: false,
87
+ type: 'checkbox',
88
+ label: gettext('Enable Gainsight product experience tracking')
89
+ }
90
+ };
91
+ export const tenantLimitsCustomProperties = tenantLimitsCustomPropertiesDefinition;
92
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVuYW50LWxpbWl0cy1kZWZpbml0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3RlbmFudHMvdGVuYW50LWxpbWl0cy90ZW5hbnQtbGltaXRzLWRlZmluaXRpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBZSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFjdEQ7Ozs7O0dBS0c7QUFDSCxNQUFNLHNDQUFzQyxHQUFHO0lBQzdDLHFFQUFxRTtJQUNyRSxpQkFBaUIsRUFBRTtRQUNqQixFQUFFLEVBQUUsbUJBQW1CO1FBQ3ZCLFVBQVUsRUFBRSxFQUFFO1FBQ2QsWUFBWSxFQUFFLElBQUk7UUFDbEIsSUFBSSxFQUFFLE1BQU07UUFDWixLQUFLLEVBQUUsT0FBTyxDQUFDLG9CQUFvQixDQUFDO1FBQ3BDLFdBQVcsRUFBRSxPQUFPLENBQUMsaUNBQWlDLENBQUM7S0FDeEQ7SUFDRCxrQkFBa0IsRUFBRTtRQUNsQixFQUFFLEVBQUUsc0JBQXNCO1FBQzFCLFVBQVUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDL0IsWUFBWSxFQUFFLElBQUk7UUFDbEIsSUFBSSxFQUFFLFFBQVE7UUFDZCxLQUFLLEVBQUUsT0FBTyxDQUFDLHlCQUF5QixDQUFDO1FBQ3pDLFdBQVcsRUFBRSxPQUFPLENBQUMsb0JBQW9CLENBQUM7UUFDMUMsZUFBZSxFQUFFLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRTtLQUNuQztJQUNELGlCQUFpQixFQUFFO1FBQ2pCLEVBQUUsRUFBRSxxQkFBcUI7UUFDekIsVUFBVSxFQUFFLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2hDLFlBQVksRUFBRSxJQUFJO1FBQ2xCLElBQUksRUFBRSxRQUFRO1FBQ2QsS0FBSyxFQUFFLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQztRQUNyQyxXQUFXLEVBQUUsT0FBTyxDQUFDLG9CQUFvQixDQUFDO1FBQzFDLGVBQWUsRUFBRSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUU7S0FDcEM7SUFDRCxjQUFjLEVBQUU7UUFDZCxFQUFFLEVBQUUsa0JBQWtCO1FBQ3RCLFVBQVUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNoQyxZQUFZLEVBQUUsSUFBSTtRQUNsQixJQUFJLEVBQUUsUUFBUTtRQUNkLEtBQUssRUFBRSxPQUFPLENBQUMsa0JBQWtCLENBQUM7UUFDbEMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQztRQUMxQyxlQUFlLEVBQUUsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFO0tBQ2xDO0lBQ0QsbUJBQW1CLEVBQUU7UUFDbkIsRUFBRSxFQUFFLHVCQUF1QjtRQUMzQixVQUFVLEVBQUUsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDaEMsWUFBWSxFQUFFLElBQUk7UUFDbEIsSUFBSSxFQUFFLFFBQVE7UUFDZCxLQUFLLEVBQUUsT0FBTyxDQUFDLHVCQUF1QixDQUFDO1FBQ3ZDLFdBQVcsRUFBRSxPQUFPLENBQUMsb0JBQW9CLENBQUM7UUFDMUMsZUFBZSxFQUFFLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRTtLQUNsQztJQUNELGdCQUFnQixFQUFFO1FBQ2hCLEVBQUUsRUFBRSxvQkFBb0I7UUFDeEIsVUFBVSxFQUFFLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2hDLFlBQVksRUFBRSxJQUFJO1FBQ2xCLElBQUksRUFBRSxRQUFRO1FBQ2QsS0FBSyxFQUFFLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQztRQUNwQyxXQUFXLEVBQUUsT0FBTyxDQUFDLG9CQUFvQixDQUFDO1FBQzFDLGVBQWUsRUFBRSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUU7S0FDbEM7SUFDRCxtQkFBbUIsRUFBRTtRQUNuQixFQUFFLEVBQUUsdUJBQXVCO1FBQzNCLFVBQVUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNoQyxZQUFZLEVBQUUsSUFBSTtRQUNsQixJQUFJLEVBQUUsUUFBUTtRQUNkLEtBQUssRUFBRSxPQUFPLENBQUMsd0JBQXdCLENBQUM7UUFDeEMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQztRQUMxQyxlQUFlLEVBQUUsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFO0tBQ2xDO0lBQ0Qsb0JBQW9CLEVBQUU7UUFDcEIsRUFBRSxFQUFFLHlCQUF5QjtRQUM3QixVQUFVLEVBQUUsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQy9CLFlBQVksRUFBRSxJQUFJO1FBQ2xCLElBQUksRUFBRSxRQUFRO1FBQ2QsS0FBSyxFQUFFLE9BQU8sQ0FBQyx5QkFBeUIsQ0FBQztRQUN6QyxXQUFXLEVBQUUsT0FBTyxDQUFDLG9CQUFvQixDQUFDO1FBQzFDLGVBQWUsRUFBRSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUU7S0FDbEM7SUFDRCxzRUFBc0U7SUFDdEUsZ0JBQWdCLEVBQUU7UUFDaEIsRUFBRSxFQUFFLGtCQUFrQjtRQUN0QixVQUFVLEVBQUUsRUFBRTtRQUNkLFlBQVksRUFBRSxLQUFLO1FBQ25CLElBQUksRUFBRSxVQUFVO1FBQ2hCLEtBQUssRUFBRSxPQUFPLENBQUMsOENBQThDLENBQUM7S0FDL0Q7Q0FDb0MsQ0FBQztBQUl4QyxNQUFNLENBQUMsTUFBTSw0QkFBNEIsR0FDdkMsc0NBQXNDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBWYWxpZGF0b3JGbiwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IGdldHRleHQgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL2dldHRleHQnO1xuXG4vLyBNb2RlbCBmb3IgaW5kaXZpZHVhbCB0ZW5hbnQgbGltaXQgZmllbGRcbmV4cG9ydCBpbnRlcmZhY2UgVGVuYW50TGltaXQge1xuICBpZDogc3RyaW5nO1xuICB2YWxpZGF0b3JzOiBWYWxpZGF0b3JGbltdO1xuICBkZWZhdWx0VmFsdWU6IG51bWJlciB8IHN0cmluZyB8IGJvb2xlYW4gfCBudWxsO1xuICB0eXBlOiAndGV4dCcgfCAnY2hlY2tib3gnIHwgJ251bWJlcic7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIGxhYmVsQXJncz86IG9iamVjdDtcbiAgcGxhY2Vob2xkZXI/OiBzdHJpbmc7XG4gIHBsYWNlaG9sZGVyQXJncz86IG9iamVjdDtcbn1cblxuLyoqXG4gKiBEZWZpbmUgYWxsIGhhcmRUeXBlZCBjdXN0b20gcHJvcGVydGllcywgYW5kIHRoZWlyIGNvbmZpZ3VyYXRpb24gaW4gb25lIHBsYWNlLlxuICpcbiAqIFRoaXMgZXhwb3J0ZWQgY29uc3QgdXRpbGl6ZXMgdHlwZXNjcmlwdCBpbmZlcnJpbmcsXG4gKiB3aGlsZSBzdGlsbCBiZW5lZml0aW5nIGZyb20gaGFyZCB0eXBpbmcsIHRoYW5rcyB0byBcInNhdGlzZmllc1wiIGtleXdvcmRcbiAqL1xuY29uc3QgdGVuYW50TGltaXRzQ3VzdG9tUHJvcGVydGllc0RlZmluaXRpb24gPSB7XG4gIC8vVE9ETzogRXh0ZXJuYWwgcmVmZXJlbmNlIC0gZ29pbmcgdG8gYmUgbW92ZWQgdG8gdGhlIFByb3BlcnRpZXMgdGFiLlxuICBleHRlcm5hbFJlZmVyZW5jZToge1xuICAgIGlkOiAnZXh0ZXJuYWxSZWZlcmVuY2UnLFxuICAgIHZhbGlkYXRvcnM6IFtdLFxuICAgIGRlZmF1bHRWYWx1ZTogbnVsbCxcbiAgICB0eXBlOiAndGV4dCcsXG4gICAgbGFiZWw6IGdldHRleHQoJ0V4dGVybmFsIHJlZmVyZW5jZScpLFxuICAgIHBsYWNlaG9sZGVyOiBnZXR0ZXh0KCdlLmcuIFJFRjEyMzQ1YHJlZmVyZW5jZSBudW1iZXJgJylcbiAgfSxcbiAgbGltaXREZXZpY2VzTnVtYmVyOiB7XG4gICAgaWQ6ICdsaW1pdC5kZXZpY2VzLm51bWJlcicsXG4gICAgdmFsaWRhdG9yczogW1ZhbGlkYXRvcnMubWluKDApXSxcbiAgICBkZWZhdWx0VmFsdWU6IG51bGwsXG4gICAgdHlwZTogJ251bWJlcicsXG4gICAgbGFiZWw6IGdldHRleHQoJ0xpbWl0IG51bWJlciBvZiBkZXZpY2VzJyksXG4gICAgcGxhY2Vob2xkZXI6IGdldHRleHQoJ2UuZy4ge3sgZXhhbXBsZSB9fScpLFxuICAgIHBsYWNlaG9sZGVyQXJnczogeyBleGFtcGxlOiAxMDAwIH1cbiAgfSxcbiAgbGltaXRIdHRwUmVxdWVzdHM6IHtcbiAgICBpZDogJ2xpbWl0Lmh0dHAucmVxdWVzdHMnLFxuICAgIHZhbGlkYXRvcnM6IFtWYWxpZGF0b3JzLm1pbigtMSldLFxuICAgIGRlZmF1bHRWYWx1ZTogbnVsbCxcbiAgICB0eXBlOiAnbnVtYmVyJyxcbiAgICBsYWJlbDogZ2V0dGV4dCgnTGltaXQgSFRUUCByZXF1ZXN0cycpLFxuICAgIHBsYWNlaG9sZGVyOiBnZXR0ZXh0KCdlLmcuIHt7IGV4YW1wbGUgfX0nKSxcbiAgICBwbGFjZWhvbGRlckFyZ3M6IHsgZXhhbXBsZTogMTAwMDAgfVxuICB9LFxuICBsaW1pdEh0dHBRdWV1ZToge1xuICAgIGlkOiAnbGltaXQuaHR0cC5xdWV1ZScsXG4gICAgdmFsaWRhdG9yczogW1ZhbGlkYXRvcnMubWluKC0xKV0sXG4gICAgZGVmYXVsdFZhbHVlOiBudWxsLFxuICAgIHR5cGU6ICdudW1iZXInLFxuICAgIGxhYmVsOiBnZXR0ZXh0KCdMaW1pdCBIVFRQIHF1ZXVlJyksXG4gICAgcGxhY2Vob2xkZXI6IGdldHRleHQoJ2UuZy4ge3sgZXhhbXBsZSB9fScpLFxuICAgIHBsYWNlaG9sZGVyQXJnczogeyBleGFtcGxlOiAxMDAgfVxuICB9LFxuICBsaW1pdFN0cmVhbVJlcXVlc3RzOiB7XG4gICAgaWQ6ICdsaW1pdC5zdHJlYW0ucmVxdWVzdHMnLFxuICAgIHZhbGlkYXRvcnM6IFtWYWxpZGF0b3JzLm1pbigtMSldLFxuICAgIGRlZmF1bHRWYWx1ZTogbnVsbCxcbiAgICB0eXBlOiAnbnVtYmVyJyxcbiAgICBsYWJlbDogZ2V0dGV4dCgnTGltaXQgc3RyZWFtIHJlcXVlc3RzJyksXG4gICAgcGxhY2Vob2xkZXI6IGdldHRleHQoJ2UuZy4ge3sgZXhhbXBsZSB9fScpLFxuICAgIHBsYWNlaG9sZGVyQXJnczogeyBleGFtcGxlOiAxMDAgfVxuICB9LFxuICBsaW1pdFN0cmVhbVF1ZXVlOiB7XG4gICAgaWQ6ICdsaW1pdC5zdHJlYW0ucXVldWUnLFxuICAgIHZhbGlkYXRvcnM6IFtWYWxpZGF0b3JzLm1pbigtMSldLFxuICAgIGRlZmF1bHRWYWx1ZTogbnVsbCxcbiAgICB0eXBlOiAnbnVtYmVyJyxcbiAgICBsYWJlbDogZ2V0dGV4dCgnTGltaXQgc3RyZWFtIHF1ZXVlJyksXG4gICAgcGxhY2Vob2xkZXI6IGdldHRleHQoJ2UuZy4ge3sgZXhhbXBsZSB9fScpLFxuICAgIHBsYWNlaG9sZGVyQXJnczogeyBleGFtcGxlOiAxMDAgfVxuICB9LFxuICBjZXBTZXJ2ZXJRdWV1ZUxpbWl0OiB7XG4gICAgaWQ6ICdjZXBTZXJ2ZXIucXVldWUubGltaXQnLFxuICAgIHZhbGlkYXRvcnM6IFtWYWxpZGF0b3JzLm1pbigtMSldLFxuICAgIGRlZmF1bHRWYWx1ZTogbnVsbCxcbiAgICB0eXBlOiAnbnVtYmVyJyxcbiAgICBsYWJlbDogZ2V0dGV4dCgnTGltaXQgQ0VQIHNlcnZlciBxdWV1ZScpLFxuICAgIHBsYWNlaG9sZGVyOiBnZXR0ZXh0KCdlLmcuIHt7IGV4YW1wbGUgfX0nKSxcbiAgICBwbGFjZWhvbGRlckFyZ3M6IHsgZXhhbXBsZTogMTAwIH1cbiAgfSxcbiAgZGF0YUJyb2tlclF1ZXVlTGltaXQ6IHtcbiAgICBpZDogJ2RhdGEtYnJva2VyLnF1ZXVlLmxpbWl0JyxcbiAgICB2YWxpZGF0b3JzOiBbVmFsaWRhdG9ycy5taW4oMCldLFxuICAgIGRlZmF1bHRWYWx1ZTogbnVsbCxcbiAgICB0eXBlOiAnbnVtYmVyJyxcbiAgICBsYWJlbDogZ2V0dGV4dCgnTGltaXQgZGF0YSBicm9rZXIgcXVldWUnKSxcbiAgICBwbGFjZWhvbGRlcjogZ2V0dGV4dCgnZS5nLiB7eyBleGFtcGxlIH19JyksXG4gICAgcGxhY2Vob2xkZXJBcmdzOiB7IGV4YW1wbGU6IDEwMCB9XG4gIH0sXG4gIC8vIFRPRE86IEdhaW5zaWdodCBjaGVja2JveCAtIGdvaW5nIHRvIGJlIG1vdmVkIHRvIHRoZSBQcm9wZXJ0aWVzIHRhYi5cbiAgZ2FpbnNpZ2h0RW5hYmxlZDoge1xuICAgIGlkOiAnZ2FpbnNpZ2h0RW5hYmxlZCcsXG4gICAgdmFsaWRhdG9yczogW10sXG4gICAgZGVmYXVsdFZhbHVlOiBmYWxzZSxcbiAgICB0eXBlOiAnY2hlY2tib3gnLFxuICAgIGxhYmVsOiBnZXR0ZXh0KCdFbmFibGUgR2FpbnNpZ2h0IHByb2R1Y3QgZXhwZXJpZW5jZSB0cmFja2luZycpXG4gIH1cbn0gc2F0aXNmaWVzIFJlY29yZDxzdHJpbmcsIFRlbmFudExpbWl0PjtcblxudHlwZSBLZXlzID0ga2V5b2YgdHlwZW9mIHRlbmFudExpbWl0c0N1c3RvbVByb3BlcnRpZXNEZWZpbml0aW9uO1xuXG5leHBvcnQgY29uc3QgdGVuYW50TGltaXRzQ3VzdG9tUHJvcGVydGllczogeyBbSyBpbiBLZXlzXTogVGVuYW50TGltaXQgfSA9XG4gIHRlbmFudExpbWl0c0N1c3RvbVByb3BlcnRpZXNEZWZpbml0aW9uO1xuIl19