[ADF-4782] VisibilityConditions - fix chaining conditions (#4971)

* [ADF-4782] VisibilityConditions - fix chaining conditions

* add return types
This commit is contained in:
Silviu Popa
2019-08-07 01:39:45 +03:00
committed by Eugenio Romano
parent 0bca6607a9
commit bf828b6389
5 changed files with 155 additions and 48 deletions

View File

@@ -67,14 +67,17 @@ export class WidgetVisibilityService {
const leftValue = this.getLeftValue(form, visibilityObj);
const rightValue = this.getRightValue(form, visibilityObj);
const actualResult = this.evaluateCondition(leftValue, rightValue, visibilityObj.operator);
accumulator.push({ value: actualResult, operator: visibilityObj.nextConditionOperator });
if (visibilityObj.nextCondition) {
result = this.isFieldVisible(form, visibilityObj.nextCondition, accumulator);
} else {
result = accumulator[0].value ? accumulator[0].value : result;
if (this.isValidOperator(visibilityObj.nextConditionOperator)) {
accumulator.push({ value: actualResult, operator: visibilityObj.nextConditionOperator });
}
if (this.isValidCondition(visibilityObj.nextCondition)) {
result = this.isFieldVisible(form, visibilityObj.nextCondition, accumulator);
} else if (accumulator[0] !== undefined) {
result = accumulator[0].value;
for (let i = 1; i < accumulator.length; i++) {
if (accumulator[i - 1].operator && accumulator[i].value) {
if (accumulator[i] !== undefined) {
result = this.evaluateLogicalOperation(
accumulator[i - 1].operator,
result,
@@ -82,6 +85,8 @@ export class WidgetVisibilityService {
);
}
}
} else {
result = actualResult;
}
return !!result;
@@ -287,6 +292,14 @@ export class WidgetVisibilityService {
return res || {};
}
private isValidOperator(operator: string): boolean {
return operator !== undefined;
}
private isValidCondition(condition: WidgetVisibilityModel): boolean {
return !!(condition && condition.operator);
}
private handleError(err) {
this.logService.error('Error while performing a call');
return throwError('Error while performing a call - Server error');