From 78e60a4da4c2a4d378a1af2fe71ef5728dcf0685 Mon Sep 17 00:00:00 2001 From: Silviu Popa Date: Fri, 2 Aug 2019 17:35:09 +0300 Subject: [PATCH] [ADF-4774] - fix visibility condition between checkbox fields (#4964) * [ADF-4774] - fix visibility condition between checkbox fields * [ADF-4774] - PR changes --- .../widget-visibility-cloud.service.spec.ts | 72 ++++++++++++++++++- .../widget-visibility.service.spec.ts | 6 +- .../services/widget-visibility.service.ts | 8 ++- 3 files changed, 79 insertions(+), 7 deletions(-) diff --git a/lib/core/form/services/widget-visibility-cloud.service.spec.ts b/lib/core/form/services/widget-visibility-cloud.service.spec.ts index 96cc554bc8..330d1fa909 100644 --- a/lib/core/form/services/widget-visibility-cloud.service.spec.ts +++ b/lib/core/form/services/widget-visibility-cloud.service.spec.ts @@ -271,10 +271,10 @@ describe('WidgetVisibilityCloudService', () => { (res: TaskProcessVariableModel[]) => { visibilityObjTest.leftValue = 'TEST_VAR_2'; visibilityObjTest.leftType = WidgetTypeEnum.field; - const rightValue = service.getLeftValue(formTest, visibilityObjTest); + const leftValue = service.getLeftValue(formTest, visibilityObjTest); - expect(rightValue).not.toBeNull(); - expect(rightValue).toBe('test_value_2'); + expect(leftValue).not.toBeNull(); + expect(leftValue).toBe('test_value_2'); done(); } ); @@ -897,6 +897,72 @@ describe('WidgetVisibilityCloudService', () => { service.refreshEntityVisibility(contModel.field); expect(contModel.isVisible).toBeFalsy(); }); + + it('should evaluate checkbox condition', (done) => { + visibilityObjTest.leftType = WidgetTypeEnum.field; + visibilityObjTest.leftValue = 'CheckboxOne'; + visibilityObjTest.operator = '=='; + visibilityObjTest.rightType = WidgetTypeEnum.field; + visibilityObjTest.rightValue = 'CheckboxTwo'; + + const checkboxForm = new FormModel({ + id: '9999', + name: 'CHECKBOX_VISIBILITY', + processDefinitionId: 'PROCESS_TEST:9:9999', + processDefinitionName: 'PROCESS_TEST', + processDefinitionKey: 'PROCESS_TEST', + taskId: '999', + taskName: 'TEST', + fields: [ + { + fieldType: 'ContainerRepresentation', + id: '000000000000000000', + name: 'Label', + type: 'container', + value: null, + numberOfColumns: 2, + fields: { + 1: [ + { + id: 'CheckboxOne', + name: 'CheckboxOne', + type: 'boolean', + required: false, + value: false, + colspan: 1, + visibilityCondition: null + }, + { + id: 'CheckboxTwo', + name: 'CheckboxTwo', + type: 'boolean', + required: false, + value: false, + colspan: 1, + visibilityCondition: null + } + ], + 2: [ + { + id: 'CheckboxNotReq', + name: 'CheckboxNotReq', + type: 'boolean', + required: false, + colspan: 1, + visibilityCondition: visibilityObjTest + } + ] + } + } + ] + }); + + service.refreshVisibility(checkboxForm); + + const fieldWithVisibilityAttached = checkboxForm.getFieldById('CheckboxNotReq'); + expect(fieldWithVisibilityAttached.isVisible).toBeTruthy(); + done(); + }); }); describe('Visibility based on form variables', () => { diff --git a/lib/core/form/services/widget-visibility.service.spec.ts b/lib/core/form/services/widget-visibility.service.spec.ts index 629da1eb31..1e0a5fa4d8 100644 --- a/lib/core/form/services/widget-visibility.service.spec.ts +++ b/lib/core/form/services/widget-visibility.service.spec.ts @@ -271,10 +271,10 @@ describe('WidgetVisibilityService', () => { service.getTaskProcessVariable('9999').subscribe( (res: TaskProcessVariableModel[]) => { visibilityObjTest.leftRestResponseId = 'TEST_VAR_2'; - const rightValue = service.getLeftValue(formTest, visibilityObjTest); + const leftValue = service.getLeftValue(formTest, visibilityObjTest); - expect(rightValue).not.toBeNull(); - expect(rightValue).toBe('test_value_2'); + expect(leftValue).not.toBeNull(); + expect(leftValue).toBe('test_value_2'); done(); } ); diff --git a/lib/core/form/services/widget-visibility.service.ts b/lib/core/form/services/widget-visibility.service.ts index 63363e7c6a..cc2f9c2c13 100644 --- a/lib/core/form/services/widget-visibility.service.ts +++ b/lib/core/form/services/widget-visibility.service.ts @@ -93,7 +93,9 @@ export class WidgetVisibilityService { leftValue = this.getVariableValue(form, visibilityObj.leftValue, this.processVarList); } else if (visibilityObj.leftType && visibilityObj.leftType === WidgetTypeEnum.field) { leftValue = this.getFormValue(form, visibilityObj.leftValue); - leftValue = leftValue ? leftValue : this.getVariableValue(form, visibilityObj.leftValue, this.processVarList); + if (this.isInvalidValue(leftValue)) { + leftValue = this.getVariableValue(form, visibilityObj.leftValue, this.processVarList); + } } return leftValue; } @@ -138,6 +140,10 @@ export class WidgetVisibilityService { return valueFound; } + private isInvalidValue(value: any): boolean { + return value === undefined || value === ''; + } + searchValueInForm(form: FormModel, fieldId: string): string { let fieldValue = ''; form.getFormFields().forEach((formField: FormFieldModel) => {