@c8y/ngx-components 1023.68.7 → 1023.71.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/ai/agent-chat/index.d.ts +235 -75
  2. package/ai/agent-chat/index.d.ts.map +1 -1
  3. package/ai/ai-chat/index.d.ts +176 -26
  4. package/ai/ai-chat/index.d.ts.map +1 -1
  5. package/ai/index.d.ts +309 -75
  6. package/ai/index.d.ts.map +1 -1
  7. package/asset-properties/index.d.ts.map +1 -1
  8. package/echart/index.d.ts +4 -0
  9. package/echart/index.d.ts.map +1 -1
  10. package/echart/models/index.d.ts +2 -0
  11. package/echart/models/index.d.ts.map +1 -1
  12. package/events/events-timeline/index.d.ts +3 -2
  13. package/events/events-timeline/index.d.ts.map +1 -1
  14. package/fesm2022/c8y-ngx-components-ai-agent-chat.mjs +680 -242
  15. package/fesm2022/c8y-ngx-components-ai-agent-chat.mjs.map +1 -1
  16. package/fesm2022/c8y-ngx-components-ai-ai-chat.mjs +343 -44
  17. package/fesm2022/c8y-ngx-components-ai-ai-chat.mjs.map +1 -1
  18. package/fesm2022/c8y-ngx-components-ai.mjs +187 -75
  19. package/fesm2022/c8y-ngx-components-ai.mjs.map +1 -1
  20. package/fesm2022/c8y-ngx-components-asset-properties.mjs +11 -5
  21. package/fesm2022/c8y-ngx-components-asset-properties.mjs.map +1 -1
  22. package/fesm2022/{c8y-ngx-components-computed-asset-properties-alarm-count-config.component-B2cy8gI7.mjs → c8y-ngx-components-computed-asset-properties-alarm-count-config.component-CPLDClTp.mjs} +3 -3
  23. package/fesm2022/{c8y-ngx-components-computed-asset-properties-alarm-count-config.component-B2cy8gI7.mjs.map → c8y-ngx-components-computed-asset-properties-alarm-count-config.component-CPLDClTp.mjs.map} +1 -1
  24. package/fesm2022/{c8y-ngx-components-computed-asset-properties-c8y-ngx-components-computed-asset-properties-BYHnA-5R.mjs → c8y-ngx-components-computed-asset-properties-c8y-ngx-components-computed-asset-properties-9be_iMQg.mjs} +30 -13
  25. package/fesm2022/c8y-ngx-components-computed-asset-properties-c8y-ngx-components-computed-asset-properties-9be_iMQg.mjs.map +1 -0
  26. package/fesm2022/{c8y-ngx-components-computed-asset-properties-configuration-snapshot-config.component-C4oL39m8.mjs → c8y-ngx-components-computed-asset-properties-configuration-snapshot-config.component-B2em01_W.mjs} +3 -3
  27. package/fesm2022/c8y-ngx-components-computed-asset-properties-configuration-snapshot-config.component-B2em01_W.mjs.map +1 -0
  28. package/fesm2022/{c8y-ngx-components-computed-asset-properties-event-count-config.component-DGwm6_C9.mjs → c8y-ngx-components-computed-asset-properties-event-count-config.component-CQuGa1RI.mjs} +3 -3
  29. package/fesm2022/c8y-ngx-components-computed-asset-properties-event-count-config.component-CQuGa1RI.mjs.map +1 -0
  30. package/fesm2022/{c8y-ngx-components-computed-asset-properties-fieldbus-item-status-config.component-BxfCjbYY.mjs → c8y-ngx-components-computed-asset-properties-fieldbus-item-status-config.component-CkmurxJv.mjs} +5 -5
  31. package/fesm2022/{c8y-ngx-components-computed-asset-properties-fieldbus-item-status-config.component-BxfCjbYY.mjs.map → c8y-ngx-components-computed-asset-properties-fieldbus-item-status-config.component-CkmurxJv.mjs.map} +1 -1
  32. package/fesm2022/c8y-ngx-components-computed-asset-properties-last-measurement-config.component-CTK9zNUh.mjs +86 -0
  33. package/fesm2022/c8y-ngx-components-computed-asset-properties-last-measurement-config.component-CTK9zNUh.mjs.map +1 -0
  34. package/fesm2022/c8y-ngx-components-computed-asset-properties.mjs +1 -1
  35. package/fesm2022/c8y-ngx-components-device-shell.mjs +1 -1
  36. package/fesm2022/c8y-ngx-components-device-shell.mjs.map +1 -1
  37. package/fesm2022/c8y-ngx-components-echart-models.mjs.map +1 -1
  38. package/fesm2022/c8y-ngx-components-echart.mjs +39 -18
  39. package/fesm2022/c8y-ngx-components-echart.mjs.map +1 -1
  40. package/fesm2022/c8y-ngx-components-events-events-timeline.mjs +5 -2
  41. package/fesm2022/c8y-ngx-components-events-events-timeline.mjs.map +1 -1
  42. package/fesm2022/c8y-ngx-components-operations-operations-timeline.mjs +5 -2
  43. package/fesm2022/c8y-ngx-components-operations-operations-timeline.mjs.map +1 -1
  44. package/fesm2022/c8y-ngx-components-widgets-definitions-html-widget-ai-config.mjs +106 -4
  45. package/fesm2022/c8y-ngx-components-widgets-definitions-html-widget-ai-config.mjs.map +1 -1
  46. package/fesm2022/c8y-ngx-components-widgets-implementations-html-widget.mjs +14 -122
  47. package/fesm2022/c8y-ngx-components-widgets-implementations-html-widget.mjs.map +1 -1
  48. package/fesm2022/c8y-ngx-components.mjs +9 -5
  49. package/fesm2022/c8y-ngx-components.mjs.map +1 -1
  50. package/index.d.ts +2 -1
  51. package/index.d.ts.map +1 -1
  52. package/locales/de.po +88 -35
  53. package/locales/es.po +87 -34
  54. package/locales/fr.po +87 -34
  55. package/locales/ja_JP.po +87 -35
  56. package/locales/ko.po +88 -35
  57. package/locales/locales.pot +83 -30
  58. package/locales/nl.po +88 -35
  59. package/locales/pl.po +88 -35
  60. package/locales/pt_BR.po +87 -34
  61. package/locales/zh_CN.po +88 -35
  62. package/locales/zh_TW.po +88 -35
  63. package/operations/operations-timeline/index.d.ts +3 -2
  64. package/operations/operations-timeline/index.d.ts.map +1 -1
  65. package/package.json +1 -1
  66. package/widgets/implementations/html-widget/index.d.ts +11 -50
  67. package/widgets/implementations/html-widget/index.d.ts.map +1 -1
  68. package/fesm2022/c8y-ngx-components-computed-asset-properties-c8y-ngx-components-computed-asset-properties-BYHnA-5R.mjs.map +0 -1
  69. package/fesm2022/c8y-ngx-components-computed-asset-properties-configuration-snapshot-config.component-C4oL39m8.mjs.map +0 -1
  70. package/fesm2022/c8y-ngx-components-computed-asset-properties-event-count-config.component-DGwm6_C9.mjs.map +0 -1
  71. package/fesm2022/c8y-ngx-components-computed-asset-properties-last-measurement-config.component-C1cuxN3L.mjs +0 -92
  72. package/fesm2022/c8y-ngx-components-computed-asset-properties-last-measurement-config.component-C1cuxN3L.mjs.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"c8y-ngx-components-computed-asset-properties-configuration-snapshot-config.component-C4oL39m8.mjs","sources":["../../computed-asset-properties/configuration-snapshot/configuration-snapshot-config.component.ts","../../computed-asset-properties/configuration-snapshot/configuration-snapshot-config.component.html"],"sourcesContent":["import { Component, DestroyRef, inject, Input, OnInit } from '@angular/core';\nimport {\n ControlContainer,\n FormBuilder,\n NgForm,\n ReactiveFormsModule,\n Validators\n} from '@angular/forms';\nimport { C8yTranslatePipe, CommonModule, CoreModule } from '@c8y/ngx-components';\nimport { Observable, startWith } from 'rxjs';\nimport { ConfigurationSnapshotConfig } from './configuration-snapshot.model';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n@Component({\n selector: 'c8y-configuration-snapshot-config',\n templateUrl: './configuration-snapshot-config.component.html',\n imports: [CoreModule, CommonModule, C8yTranslatePipe, ReactiveFormsModule],\n viewProviders: [{ provide: ControlContainer, useExisting: NgForm }]\n})\nexport class ConfigurationSnapshotConfigComponent implements OnInit {\n @Input() config?: ConfigurationSnapshotConfig;\n formGroup: ReturnType<ConfigurationSnapshotConfigComponent['createForm']>;\n\n private formBuilder = inject(FormBuilder);\n private form = inject(NgForm);\n private destroyRef = inject(DestroyRef);\n\n ngOnInit() {\n this.initForm();\n this.setupLegacyToggle();\n }\n\n onBeforeSave(\n config?: ConfigurationSnapshotConfig\n ): boolean | Promise<boolean> | Observable<boolean> {\n if (this.formGroup.valid) {\n Object.assign(config, this.formGroup.value);\n return true;\n }\n return false;\n }\n\n private initForm(): void {\n this.formGroup = this.createForm();\n this.form.form.addControl('config', this.formGroup);\n this.formGroup.patchValue(this.config);\n }\n\n private createForm() {\n return this.formBuilder.group({\n legacy: [true, [Validators.required]],\n type: ['', []]\n });\n }\n\n private setupLegacyToggle(): void {\n this.formGroup\n .get('legacy')\n ?.valueChanges.pipe(startWith(this.isLegacy), takeUntilDestroyed(this.destroyRef))\n .subscribe(isLegacy => {\n this.updateTypeControlBasedOnLegacy(isLegacy);\n });\n }\n\n private updateTypeControlBasedOnLegacy(isLegacy: boolean): void {\n const typeControl = this.formGroup.get('type');\n\n if (isLegacy) {\n typeControl?.setValue(null);\n typeControl?.clearValidators();\n typeControl?.setErrors(null);\n } else {\n typeControl?.setValidators([Validators.required]);\n }\n\n typeControl?.updateValueAndValidity();\n }\n\n get isLegacy(): boolean {\n return this.formGroup.get('legacy')?.value;\n }\n}\n","<form [formGroup]=\"formGroup\">\n <c8y-form-group class=\"m-b-8\">\n <label\n class=\"c8y-switch\"\n [title]=\"'Legacy configuration' | translate\"\n >\n <input\n type=\"checkbox\"\n formControlName=\"legacy\"\n />\n <span></span>\n <span>{{ 'Legacy configuration' | translate }}</span>\n <span class=\"sr-only\">{{ 'Legacy configuration' | translate }}</span>\n </label>\n </c8y-form-group>\n\n <c8y-form-group\n class=\"form-group-sm m-b-16\"\n *ngIf=\"!isLegacy\"\n >\n <label\n [title]=\"'Configuration type' | translate\"\n translate\n >\n Configuration type\n </label>\n <input\n class=\"form-control\"\n name=\"type\"\n type=\"text\"\n formControlName=\"type\"\n />\n <c8y-messages\n [show]=\"formGroup.controls?.type?.touched && formGroup?.controls?.type?.errors\"\n ></c8y-messages>\n </c8y-form-group>\n</form>\n"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"c8y-ngx-components-computed-asset-properties-event-count-config.component-DGwm6_C9.mjs","sources":["../../computed-asset-properties/event-count/event-count-config.component.ts","../../computed-asset-properties/event-count/event-count-config.component.html"],"sourcesContent":["import { Component, inject, Input, OnInit } from '@angular/core';\nimport {\n ControlContainer,\n FormBuilder,\n FormGroup,\n NgForm,\n ReactiveFormsModule,\n Validators\n} from '@angular/forms';\nimport { C8yTranslatePipe, CommonModule, CoreModule } from '@c8y/ngx-components';\n\nimport { EventCountConfig } from './event-count.model';\nimport { Observable } from 'rxjs';\n\n@Component({\n selector: 'c8y-event-count-config',\n templateUrl: './event-count-config.component.html',\n imports: [CoreModule, CommonModule, C8yTranslatePipe, ReactiveFormsModule],\n viewProviders: [{ provide: ControlContainer, useExisting: NgForm }]\n})\nexport class ComputedPropertyEventCountConfigComponent implements OnInit {\n @Input() config?: EventCountConfig;\n formGroup: FormGroup;\n\n private formBuilder = inject(FormBuilder);\n private form = inject(NgForm);\n\n ngOnInit(): void {\n this.initForm();\n }\n\n onBeforeSave(config?: EventCountConfig): boolean | Promise<boolean> | Observable<boolean> {\n if (this.formGroup.valid) {\n Object.assign(config, this.formGroup.value);\n return true;\n }\n return false;\n }\n\n private initForm(): void {\n this.formGroup = this.createForm();\n this.form.form.addControl('config', this.formGroup);\n this.formGroup.patchValue(this.config);\n }\n\n private createForm() {\n return this.formBuilder.group({\n type: ['', [Validators.required]]\n });\n }\n}\n","<form class=\"row d-flex-md\" [formGroup]=\"formGroup\">\n <div class=\"col-md-6\">\n <c8y-form-group class=\"m-b-16\">\n <label\n [title]=\"'Event type' | translate\"\n translate\n >\n Event type\n </label>\n <input\n class=\"form-control\"\n name=\"type\"\n type=\"string\"\n formControlName=\"type\"\n placeholder=\"{{ 'e.g. {{ example }}' | translate: { example: 'c8y_LocationUpdate' } }}\"\n />\n <c8y-messages\n [show]=\"formGroup.controls?.type?.touched && formGroup?.controls?.type?.errors\"\n ></c8y-messages>\n </c8y-form-group>\n </div>\n</form>\n"],"names":["i2"],"mappings":"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"}
@@ -1,92 +0,0 @@
1
- import * as i0 from '@angular/core';
2
- import { inject, Input, Component } from '@angular/core';
3
- import * as i3 from '@angular/forms';
4
- import { FormBuilder, NgForm, Validators, ControlContainer, ReactiveFormsModule } from '@angular/forms';
5
- import * as i1 from '@c8y/ngx-components';
6
- import { CoreModule, CommonModule, C8yTranslatePipe } from '@c8y/ngx-components';
7
- import * as i3$1 from '@c8y/ngx-components/datapoint-selector';
8
- import { DatapointSelectorModule } from '@c8y/ngx-components/datapoint-selector';
9
- import { gettext } from '@c8y/ngx-components/gettext';
10
- import * as i2 from '@angular/common';
11
-
12
- const RESULT_TYPES = {
13
- VALUE: { name: 'VALUE', value: 1, label: gettext('Only value') },
14
- VALUE_UNIT: { name: 'VALUE_UNIT', value: 2, label: gettext('Value and unit') },
15
- VALUE_UNIT_TIME: { name: 'VALUE_UNIT_TIME', value: 3, label: gettext('Value, unit and time') },
16
- OBJECT: { name: 'OBJECT', value: 4, label: gettext('Complete object') }
17
- };
18
-
19
- function exactlyASingleDatapointActive() {
20
- return (control) => {
21
- const datapoints = control.value;
22
- if (!datapoints || !datapoints.length) {
23
- return null;
24
- }
25
- const activeDatapoints = datapoints.filter(datapoint => datapoint.__active);
26
- if (activeDatapoints.length === 1) {
27
- return null;
28
- }
29
- return { exactlyOneDatapointNeedsToBeActive: true };
30
- };
31
- }
32
- class ComputedPropertyLastMeasurementConfigComponent {
33
- constructor() {
34
- this.datapointSelectionConfig = {};
35
- this.formBuilder = inject(FormBuilder);
36
- this.form = inject(NgForm);
37
- this.selectedProperty = [];
38
- this.minSelectCount = 1;
39
- this.maxSelectCount = 1;
40
- this.resultTypes = RESULT_TYPES;
41
- }
42
- ngOnInit() {
43
- if (this.asset) {
44
- this.datapointSelectionConfig.contextAsset = this.asset;
45
- this.datapointSelectionConfig.allowChangingContext = false;
46
- }
47
- this.initForm();
48
- }
49
- onBeforeSave(config) {
50
- if (this.formGroup.valid) {
51
- Object.assign(config, this.formGroup.value);
52
- config.dp = config.dp.filter(d => d.__active);
53
- config.dp[0].__target = { id: config.dp[0].__target.id, name: config.dp[0].__target.name };
54
- return true;
55
- }
56
- return false;
57
- }
58
- initForm() {
59
- this.formGroup = this.createForm();
60
- this.form.form.addControl('config', this.formGroup);
61
- this.formGroup.patchValue(this.config);
62
- }
63
- createForm() {
64
- return this.formBuilder.group({
65
- resultType: [this.resultTypes.VALUE.value, [Validators.required]],
66
- dp: this.formBuilder.control(new Array(), [
67
- Validators.required,
68
- Validators.minLength(1),
69
- exactlyASingleDatapointActive()
70
- ])
71
- });
72
- }
73
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: ComputedPropertyLastMeasurementConfigComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
74
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.18", type: ComputedPropertyLastMeasurementConfigComponent, isStandalone: true, selector: "c8y-last-measurement-config", inputs: { config: "config", asset: "asset" }, ngImport: i0, template: "\n<form [formGroup]=\"formGroup\">\n <div class=\"d-flex-md row\">\n <div class=\"col-md-6\">\n <div class=\"form-group\" style=\"padding-top: var(--c8y-font-size-base)\">\n <label for=\"resultType\">{{ 'Result type' | translate }}</label>\n <div class=\"c8y-select-wrapper\">\n <select\n class=\"form-control\"\n id=\"resultType\"\n formControlName=\"resultType\"\n >\n <option\n *ngFor=\"let type of resultTypes | keyvalue\"\n [ngValue]=\"type.value.value\"\n >\n {{ type.value.label | translate }}\n </option>\n </select>\n </div>\n </div>\n </div>\n <div class=\"col-md-6 no-card-context\">\n <c8y-datapoint-selection-list\n class=\"bg-inherit\"\n name=\"dp\"\n [config]=\"datapointSelectionConfig\"\n [minActiveCount]=\"minSelectCount\"\n [maxActiveCount]=\"maxSelectCount\"\n formControlName=\"dp\"\n ></c8y-datapoint-selection-list>\n </div>\n </div>\n</form>\n", dependencies: [{ kind: "ngmodule", type: CoreModule }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i3.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i3.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: DatapointSelectorModule }, { kind: "component", type: i3$1.DatapointSelectionListComponent, selector: "c8y-datapoint-selection-list", inputs: ["actions", "allowDragAndDrop", "config", "defaultFormOptions", "maxActiveCount", "minActiveCount", "resolveContext", "listTitle", "removeTitle"], outputs: ["isValid", "change"] }, { kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "pipe", type: i1.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i2.KeyValuePipe, name: "keyvalue" }], viewProviders: [{ provide: ControlContainer, useExisting: NgForm }] }); }
75
- }
76
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: ComputedPropertyLastMeasurementConfigComponent, decorators: [{
77
- type: Component,
78
- args: [{ selector: 'c8y-last-measurement-config', imports: [
79
- CoreModule,
80
- DatapointSelectorModule,
81
- CommonModule,
82
- C8yTranslatePipe,
83
- ReactiveFormsModule
84
- ], viewProviders: [{ provide: ControlContainer, useExisting: NgForm }], template: "\n<form [formGroup]=\"formGroup\">\n <div class=\"d-flex-md row\">\n <div class=\"col-md-6\">\n <div class=\"form-group\" style=\"padding-top: var(--c8y-font-size-base)\">\n <label for=\"resultType\">{{ 'Result type' | translate }}</label>\n <div class=\"c8y-select-wrapper\">\n <select\n class=\"form-control\"\n id=\"resultType\"\n formControlName=\"resultType\"\n >\n <option\n *ngFor=\"let type of resultTypes | keyvalue\"\n [ngValue]=\"type.value.value\"\n >\n {{ type.value.label | translate }}\n </option>\n </select>\n </div>\n </div>\n </div>\n <div class=\"col-md-6 no-card-context\">\n <c8y-datapoint-selection-list\n class=\"bg-inherit\"\n name=\"dp\"\n [config]=\"datapointSelectionConfig\"\n [minActiveCount]=\"minSelectCount\"\n [maxActiveCount]=\"maxSelectCount\"\n formControlName=\"dp\"\n ></c8y-datapoint-selection-list>\n </div>\n </div>\n</form>\n" }]
85
- }], propDecorators: { config: [{
86
- type: Input
87
- }], asset: [{
88
- type: Input
89
- }] } });
90
-
91
- export { ComputedPropertyLastMeasurementConfigComponent, exactlyASingleDatapointActive };
92
- //# sourceMappingURL=c8y-ngx-components-computed-asset-properties-last-measurement-config.component-C1cuxN3L.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"c8y-ngx-components-computed-asset-properties-last-measurement-config.component-C1cuxN3L.mjs","sources":["../../computed-asset-properties/last-measurement/last-measurement.model.ts","../../computed-asset-properties/last-measurement/last-measurement-config.component.ts","../../computed-asset-properties/last-measurement/last-measurement-config.component.html"],"sourcesContent":["import { KPIDetails } from '@c8y/ngx-components/datapoint-selector';\nimport { gettext } from '@c8y/ngx-components/gettext';\n\nexport const RESULT_TYPES = {\n VALUE: { name: 'VALUE', value: 1, label: gettext('Only value') },\n VALUE_UNIT: { name: 'VALUE_UNIT', value: 2, label: gettext('Value and unit') },\n VALUE_UNIT_TIME: { name: 'VALUE_UNIT_TIME', value: 3, label: gettext('Value, unit and time') },\n OBJECT: { name: 'OBJECT', value: 4, label: gettext('Complete object') }\n};\n\nexport type LastMeasurementConfig = {\n dp: KPIDetails[];\n resultType: number;\n};\n","import { Component, inject, Input, OnInit } from '@angular/core';\nimport {\n AbstractControl,\n ControlContainer,\n FormBuilder,\n NgForm,\n ReactiveFormsModule,\n ValidationErrors,\n ValidatorFn,\n Validators\n} from '@angular/forms';\nimport { IManagedObject } from '@c8y/client';\nimport { C8yTranslatePipe, CommonModule, CoreModule } from '@c8y/ngx-components';\nimport {\n DatapointSelectorModalOptions,\n DatapointSelectorModule,\n KPIDetails\n} from '@c8y/ngx-components/datapoint-selector';\nimport { Observable } from 'rxjs';\nimport { LastMeasurementConfig, RESULT_TYPES } from './last-measurement.model';\n\nexport function exactlyASingleDatapointActive(): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n const datapoints: KPIDetails[] = control.value;\n\n if (!datapoints || !datapoints.length) {\n return null;\n }\n\n const activeDatapoints = datapoints.filter(datapoint => datapoint.__active);\n\n if (activeDatapoints.length === 1) {\n return null;\n }\n\n return { exactlyOneDatapointNeedsToBeActive: true };\n };\n}\n\n@Component({\n selector: 'c8y-last-measurement-config',\n templateUrl: './last-measurement-config.component.html',\n imports: [\n CoreModule,\n DatapointSelectorModule,\n CommonModule,\n C8yTranslatePipe,\n ReactiveFormsModule\n ],\n viewProviders: [{ provide: ControlContainer, useExisting: NgForm }]\n})\nexport class ComputedPropertyLastMeasurementConfigComponent implements OnInit {\n @Input() config?: LastMeasurementConfig;\n @Input() asset?: IManagedObject;\n formGroup: ReturnType<ComputedPropertyLastMeasurementConfigComponent['createForm']>;\n datapointSelectionConfig: Partial<DatapointSelectorModalOptions> = {};\n\n private formBuilder = inject(FormBuilder);\n private form = inject(NgForm);\n\n selectedProperty: IManagedObject[] = [];\n minSelectCount = 1;\n maxSelectCount = 1;\n resultTypes = RESULT_TYPES;\n\n ngOnInit() {\n if (this.asset) {\n this.datapointSelectionConfig.contextAsset = this.asset;\n this.datapointSelectionConfig.allowChangingContext = false;\n }\n this.initForm();\n }\n\n onBeforeSave(config?: LastMeasurementConfig): boolean | Promise<boolean> | Observable<boolean> {\n if (this.formGroup.valid) {\n Object.assign(config, this.formGroup.value);\n config.dp = config.dp.filter(d => d.__active);\n config.dp[0].__target = { id: config.dp[0].__target.id, name: config.dp[0].__target.name };\n return true;\n }\n return false;\n }\n\n private initForm(): void {\n this.formGroup = this.createForm();\n this.form.form.addControl('config', this.formGroup);\n this.formGroup.patchValue(this.config);\n }\n\n private createForm() {\n return this.formBuilder.group({\n resultType: [this.resultTypes.VALUE.value, [Validators.required]],\n dp: this.formBuilder.control(new Array<KPIDetails>(), [\n Validators.required,\n Validators.minLength(1),\n exactlyASingleDatapointActive()\n ])\n });\n }\n}\n","\n<form [formGroup]=\"formGroup\">\n <div class=\"d-flex-md row\">\n <div class=\"col-md-6\">\n <div class=\"form-group\" style=\"padding-top: var(--c8y-font-size-base)\">\n <label for=\"resultType\">{{ 'Result type' | translate }}</label>\n <div class=\"c8y-select-wrapper\">\n <select\n class=\"form-control\"\n id=\"resultType\"\n formControlName=\"resultType\"\n >\n <option\n *ngFor=\"let type of resultTypes | keyvalue\"\n [ngValue]=\"type.value.value\"\n >\n {{ type.value.label | translate }}\n </option>\n </select>\n </div>\n </div>\n </div>\n <div class=\"col-md-6 no-card-context\">\n <c8y-datapoint-selection-list\n class=\"bg-inherit\"\n name=\"dp\"\n [config]=\"datapointSelectionConfig\"\n [minActiveCount]=\"minSelectCount\"\n [maxActiveCount]=\"maxSelectCount\"\n formControlName=\"dp\"\n ></c8y-datapoint-selection-list>\n </div>\n </div>\n</form>\n"],"names":["i3"],"mappings":"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"}