From 5772c1482ebb689fe6db88049c37a9cc808dbed9 Mon Sep 17 00:00:00 2001 From: Silviu Popa Date: Fri, 2 Aug 2019 17:33:14 +0300 Subject: [PATCH] [ADF-4758] - reset form value when field is not visible (#4958) * [ADF-4758] - reset form value when field is not visible * [ADF-4758] - fix unit test * [ADF-4758] - fix unit tests --- .../widget-visibility-cloud.service.spec.ts | 16 ++++++++++++++-- .../services/widget-visibility.service.spec.ts | 18 +++++++++++++++--- .../form/services/widget-visibility.service.ts | 3 +++ 3 files changed, 32 insertions(+), 5 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 b274de09df..96cc554bc8 100644 --- a/lib/core/form/services/widget-visibility-cloud.service.spec.ts +++ b/lib/core/form/services/widget-visibility-cloud.service.spec.ts @@ -344,7 +344,7 @@ describe('WidgetVisibilityCloudService', () => { describe('should return the value of the field', () => { let visibilityObjTest: WidgetVisibilityModel; - const fakeFormWithField = new FormModel(fakeFormJson); + let fakeFormWithField = new FormModel(fakeFormJson); const jsonFieldFake = { id: 'FAKE_FORM_FIELD_ID', value: 'FAKE_FORM_FIELD_VALUE', @@ -362,6 +362,7 @@ describe('WidgetVisibilityCloudService', () => { beforeEach(() => { visibilityObjTest = new WidgetVisibilityModel({}); formTest.values = formValues; + fakeFormWithField = new FormModel(fakeFormJson); jsonFieldFake.visibilityCondition = visibilityObjTest; }); @@ -509,6 +510,18 @@ describe('WidgetVisibilityCloudService', () => { expect(fakeFormField.isVisible).toBeFalsy(); }); + it('should reset value when the field is not visibile', () => { + visibilityObjTest.leftValue = 'test_1'; + visibilityObjTest.operator = '=='; + visibilityObjTest.rightType = WidgetTypeEnum.field; + visibilityObjTest.rightValue = 'test_3'; + const fakeFormField: FormFieldModel = new FormFieldModel(formTest, jsonFieldFake); + + service.refreshEntityVisibility(fakeFormField); + expect(fakeFormField.isVisible).toBeFalsy(); + expect(fakeFormField.value).toEqual(null); + }); + it('should return true when the visibility condition is not valid', () => { visibilityObjTest = new WidgetVisibilityModel(); visibilityObjTest.leftType = ''; @@ -979,6 +992,5 @@ describe('WidgetVisibilityCloudService', () => { expect(isVisible).toBeTruthy(); }); - }); }); diff --git a/lib/core/form/services/widget-visibility.service.spec.ts b/lib/core/form/services/widget-visibility.service.spec.ts index 53c705a1f6..629da1eb31 100644 --- a/lib/core/form/services/widget-visibility.service.spec.ts +++ b/lib/core/form/services/widget-visibility.service.spec.ts @@ -190,12 +190,13 @@ describe('WidgetVisibilityService', () => { }); describe('should retrieve the process variables', () => { - const fakeFormWithField = new FormModel(fakeFormJson); + let fakeFormWithField = new FormModel(fakeFormJson); let visibilityObjTest: WidgetVisibilityModel; const chainedVisibilityObj = new WidgetVisibilityModel({}); beforeEach(() => { visibilityObjTest = new WidgetVisibilityModel({}); + fakeFormWithField = new FormModel(fakeFormJson); }); it('should return the process variables for task', (done) => { @@ -341,7 +342,7 @@ describe('WidgetVisibilityService', () => { describe('should return the value of the field', () => { let visibilityObjTest: WidgetVisibilityModel; - const fakeFormWithField = new FormModel(fakeFormJson); + let fakeFormWithField = new FormModel(fakeFormJson); const jsonFieldFake = { id: 'FAKE_FORM_FIELD_ID', value: 'FAKE_FORM_FIELD_VALUE', @@ -358,6 +359,7 @@ describe('WidgetVisibilityService', () => { beforeEach(() => { visibilityObjTest = new WidgetVisibilityModel(); + fakeFormWithField = new FormModel(fakeFormJson); formTest.values = formValues; jsonFieldFake.visibilityCondition = visibilityObjTest; }); @@ -659,7 +661,6 @@ describe('WidgetVisibilityService', () => { tab.visibilityCondition = visibilityObjTest; fakeFormWithField.tabs.push(tab); service.refreshVisibility(fakeFormWithField); - expect(fakeFormWithField.tabs[0].isVisible).toBeFalsy(); }); @@ -909,6 +910,17 @@ describe('WidgetVisibilityService', () => { service.refreshEntityVisibility(contModel.field); expect(contModel.isVisible).toBeFalsy(); }); + + it('should set null value when the field is not visibile', () => { + visibilityObjTest.leftFormFieldId = 'test_4'; + visibilityObjTest.operator = '!='; + visibilityObjTest.rightFormFieldId = 'dropdown'; + const fakeFormField: FormFieldModel = new FormFieldModel(formTest, jsonFieldFake); + + service.refreshEntityVisibility(fakeFormField); + expect(fakeFormField.isVisible).toBeFalsy(); + expect(fakeFormField.value).toEqual(null); + }); }); describe('Visibility based on form variables', () => { diff --git a/lib/core/form/services/widget-visibility.service.ts b/lib/core/form/services/widget-visibility.service.ts index 64282ced3a..63363e7c6a 100644 --- a/lib/core/form/services/widget-visibility.service.ts +++ b/lib/core/form/services/widget-visibility.service.ts @@ -48,6 +48,9 @@ export class WidgetVisibilityService { refreshEntityVisibility(element: FormFieldModel | TabModel) { const visible = this.evaluateVisibility(element.form, element.visibilityCondition); + if (!visible && element instanceof FormFieldModel) { + element.value = null; + } element.isVisible = visible; }