This commit is contained in:
mpetrov 2025-02-17 19:42:27 +02:00
parent 0c71adce91
commit 6e0871299b
3 changed files with 29 additions and 25 deletions

View File

@ -14,7 +14,7 @@
/// limitations under the License.
///
import { Component, forwardRef } from '@angular/core';
import { AfterViewInit, Component, forwardRef } from '@angular/core';
import {
ControlValueAccessor,
NG_VALIDATORS,
@ -60,7 +60,7 @@ import { MatDialog } from '@angular/material/dialog';
}
]
})
export class CalculatedFieldTestArgumentsComponent extends PageComponent implements ControlValueAccessor, Validator {
export class CalculatedFieldTestArgumentsComponent extends PageComponent implements ControlValueAccessor, Validator, AfterViewInit {
argumentsFormArray = this.fb.array<FormGroup>([]);
@ -78,6 +78,10 @@ export class CalculatedFieldTestArgumentsComponent extends PageComponent impleme
.subscribe(() => this.propagateChange(this.getValue()));
}
ngAfterViewInit(): void {
this.argumentsFormArray.updateValueAndValidity();
}
registerOnChange(propagateChange: (value: CalculatedFieldEventArguments) => void): void {
this.propagateChange = propagateChange;
}
@ -91,8 +95,8 @@ export class CalculatedFieldTestArgumentsComponent extends PageComponent impleme
const value = { ...argumentsObj[key], argumentName: key } as CalculatedFieldArgumentEventValue;
this.argumentsFormArray.push((value).type === ArgumentType.Rolling
? this.getRollingArgumentFormGroup(value as CalculatedFieldRollingTelemetryArgumentValue)
: this.getSimpleArgumentFormGroup(value as CalculatedFieldSingleArgumentValue),
{emitEvent: false});
: this.getSimpleArgumentFormGroup(value as CalculatedFieldSingleArgumentValue)
);
});
}
@ -100,24 +104,6 @@ export class CalculatedFieldTestArgumentsComponent extends PageComponent impleme
return this.argumentsFormArray.valid ? null : { arguments: { valid: false } };
}
private getSimpleArgumentFormGroup({ argumentName, type, ts, value }: CalculatedFieldSingleArgumentValue): FormGroup {
return this.fb.group({
argumentName: [{ value: argumentName, disabled: true}],
type: [{ value: type , disabled: true }],
ts: [ts],
value: [value]
}) as FormGroup;
}
private getRollingArgumentFormGroup({ argumentName, type, timewindow, values }: CalculatedFieldRollingTelemetryArgumentValue): FormGroup {
return this.fb.group({
...timewindow ?? {},
argumentName: [{ value: argumentName, disabled: true }],
type: [{ value: type , disabled: true }],
values: [values]
}) as FormGroup;
}
openEditJSONDialog(group: FormGroup): void {
this.dialog.open<JsonObjectEditDialogComponent, JsonObjectEditDialogData, CalculatedFieldArgumentEventValue>(JsonObjectEditDialogComponent, {
disableClose: true,
@ -136,10 +122,28 @@ export class CalculatedFieldTestArgumentsComponent extends PageComponent impleme
: group.patchValue({ ts: (result as CalculatedFieldSingleArgumentValue).ts, value: (result as CalculatedFieldSingleArgumentValue).value }) );
}
private getSimpleArgumentFormGroup({ argumentName, type, ts, value }: CalculatedFieldSingleArgumentValue): FormGroup {
return this.fb.group({
argumentName: [{ value: argumentName, disabled: true}],
type: [{ value: type , disabled: true }],
ts: [ts],
value: [value]
}) as FormGroup;
}
private getRollingArgumentFormGroup({ argumentName, type, timewindow, values }: CalculatedFieldRollingTelemetryArgumentValue): FormGroup {
return this.fb.group({
...timewindow ?? {},
argumentName: [{ value: argumentName, disabled: true }],
type: [{ value: type , disabled: true }],
values: [values]
}) as FormGroup;
}
private getValue(): CalculatedFieldEventArguments {
return this.argumentsFormArray.getRawValue().reduce((acc, rowItem) => {
const { argumentName, type, ...value } = rowItem;
acc[argumentName] = { ...value };
acc[argumentName] = value;
return acc;
}, {});
}

View File

@ -81,7 +81,7 @@ export class CalculatedFieldScriptTestDialogComponent extends DialogComponent<Ca
beautifyJs(this.data.expression, {indent_size: 4}).pipe(filter(Boolean), takeUntilDestroyed()).subscribe(
(res) => this.calculatedFieldScriptTestFormGroup.get('expression').patchValue(res, {emitEvent: false})
);
this.calculatedFieldScriptTestFormGroup.get('arguments').patchValue(this.data.arguments, {emitEvent: false});
this.calculatedFieldScriptTestFormGroup.get('arguments').patchValue(this.data.arguments);
}
ngAfterViewInit(): void {

View File

@ -149,7 +149,7 @@ export interface CalculatedFieldDebugDialogData {
}
export interface CalculatedFieldTestScriptInputParams {
arguments: Record<string, unknown>,
arguments: CalculatedFieldEventArguments,
expression: string;
}