diff --git a/src/conditions.ts b/src/conditions.ts index 7af6b8c04d..e4c6aeb36c 100644 --- a/src/conditions.ts +++ b/src/conditions.ts @@ -68,11 +68,7 @@ export class ExpressionExecutor implements IExpresionExecutor { : false; } public getVariables(): Array { - if (!this.operand) return []; - - var variables: Array = []; - this.operand.setVariables(variables); - return variables; + return this.operand?.getVariables() ?? []; } public hasFunction(): boolean { diff --git a/src/expressions/expressions.ts b/src/expressions/expressions.ts index 2197e270c4..5181d9b045 100644 --- a/src/expressions/expressions.ts +++ b/src/expressions/expressions.ts @@ -9,7 +9,7 @@ export abstract class Operand { } public abstract getType(): string; public abstract evaluate(processValue?: ProcessValue): any; - public abstract setVariables(variables: Array): any; + public abstract getVariables(): Array; public hasFunction(): boolean { return false; } @@ -110,9 +110,11 @@ export class BinaryOperand extends Operand { ); } - public setVariables(variables: Array) { - if (this.left != null) this.left.setVariables(variables); - if (this.right != null) this.right.setVariables(variables); + public getVariables(): string[] { + return [ + ...this.left?.getVariables() ?? [], + ...this.right?.getVariables() ?? [] + ]; } public hasFunction(): boolean { @@ -179,8 +181,9 @@ export class UnaryOperand extends Operand { let value = this.expression.evaluate(processValue); return this.consumer.call(this, value); } - public setVariables(variables: Array) { - this.expression.setVariables(variables); + + public getVariables(): Array { + return this.expression.getVariables(); } } @@ -213,10 +216,8 @@ export class ArrayOperand extends Operand { }); } - public setVariables(variables: Array) { - this.values.forEach((el) => { - el.setVariables(variables); - }); + public getVariables(): string[] { + return this.values.flatMap(v => v.getVariables()); } public hasFunction(): boolean { @@ -260,6 +261,10 @@ export class Const extends Operand { return this.getCorrectValue(this.value); } + public getVariables(): string[] { + return []; + } + public setVariables(variables: Array) {} protected getCorrectValue(value: any): any { if (!value || typeof value != "string") return value; @@ -332,6 +337,10 @@ export class Variable extends Const { ? this.getCorrectValue(this.valueInfo.value) : null; } + + public getVariables(): string[] { + return [this.variableName]; + } public setVariables(variables: Array) { variables.push(this.variableName); } @@ -392,9 +401,10 @@ export class FunctionOperand extends Operand { return this.originalValue + "(" + this.parameters.toString(func) + ")"; } - public setVariables(variables: Array) { - this.parameters.setVariables(variables); + public getVariables(): string[] { + return this.parameters.getVariables(); } + public get isReady() { return this.isReadyValue; }