Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | 6x 6x 6x 6x 6x 6x 11x 11x 11x 8x 11x 11x 19x 11x 41x 11x | import { DynamicFormElementExpression } from '../dynamic-form-element/dynamic-form-element-expression';
import { DynamicFormExpressionMemoization } from '../dynamic-form-expression/dynamic-form-expression-memoization';
import { DynamicFormErrorHandler } from '../dynamic-form-error/dynamic-form-error.handler';
import { DynamicFormField } from './../dynamic-form-field/dynamic-form-field';
import { DynamicFormFieldExpressionData } from './dynamic-form-field-expression-data';
import { DynamicFormFieldExpressionFunc } from './dynamic-form-field-expression-func';
export class DynamicFormFieldExpression<
Data extends DynamicFormFieldExpressionData = DynamicFormFieldExpressionData,
Func extends DynamicFormFieldExpressionFunc<Data> = DynamicFormFieldExpressionFunc<Data>
> extends DynamicFormElementExpression<Data, Func> {
protected _memo: DynamicFormExpressionMemoization;
constructor(
override readonly key: string,
readonly field: DynamicFormField,
override readonly func: Func,
protected override errorHandler: DynamicFormErrorHandler,
) {
super(key, field, func, errorHandler);
this._memo = { previousValue: undefined, currentValue: undefined };
}
override get value(): any {
this.previousValue = this.currentValue;
this.currentValue = this.tryEvaluate();
if (this.previousValue !== this.currentValue) {
this.field.expressionChangesSubject.next({
key: this.key,
previousValue: this.previousValue,
currentValue: this.currentValue,
});
}
return this.currentValue;
}
protected override evaluate(): any {
return this.func(this.field.expressionData as Data, this._memo);
}
private get previousValue(): any { return this._memo.previousValue; }
private set previousValue(value: any) { this._memo.previousValue = value; }
private get currentValue(): any { return this._memo.currentValue; }
private set currentValue(value: any) { this._memo.currentValue = value; }
}
|