diff --git a/demo-shell/src/app/components/app-layout/cloud/form-demo/cloud-form-demo.component.ts b/demo-shell/src/app/components/app-layout/cloud/form-demo/cloud-form-demo.component.ts index e68a054b2e..d9a1c0b778 100644 --- a/demo-shell/src/app/components/app-layout/cloud/form-demo/cloud-form-demo.component.ts +++ b/demo-shell/src/app/components/app-layout/cloud/form-demo/cloud-form-demo.component.ts @@ -54,7 +54,8 @@ export class FormCloudDemoComponent implements OnInit, OnDestroy { } ngOnInit() { - this.formConfig = this.automationService.forms.getFormCloudDefinition(); + const formDefinitionJSON = this.automationService.forms.getFormCloudDefinition(); + this.formConfig = JSON.stringify(formDefinitionJSON); this.parseForm(); } diff --git a/lib/core/form/services/widget-visibility.service.spec.ts b/lib/core/form/services/widget-visibility.service.spec.ts index 73449a2135..03dad8d494 100644 --- a/lib/core/form/services/widget-visibility.service.spec.ts +++ b/lib/core/form/services/widget-visibility.service.spec.ts @@ -898,4 +898,78 @@ describe('WidgetVisibilityService', () => { expect(contModel.isVisible).toBeFalsy(); }); }); + + describe('Visibility based on form variables', () => { + + const fakeFormWithVariables = new FormModel(fakeFormJson); + let visibilityObjTest: WidgetVisibilityModel; + + beforeEach(() => { + visibilityObjTest = new WidgetVisibilityModel(); + }); + + it('should set visibility to true when validation for string variables succeeds', () => { + visibilityObjTest.leftRestResponseId = 'name'; + visibilityObjTest.operator = '=='; + visibilityObjTest.rightValue = 'abc'; + const isVisible = service.isFieldVisible(fakeFormWithVariables, visibilityObjTest); + + expect(isVisible).toBeTruthy(); + }); + + it('should set visibility to false when validation for string variables fails', () => { + visibilityObjTest.leftRestResponseId = 'name'; + visibilityObjTest.operator = '=='; + visibilityObjTest.rightValue = 'abc1'; + const isVisible = service.isFieldVisible(fakeFormWithVariables, visibilityObjTest); + + expect(isVisible).toBeFalsy(); + }); + + it('should set visibility to true when validation for integer variables succeeds', () => { + visibilityObjTest.leftRestResponseId = 'age'; + visibilityObjTest.operator = '=='; + visibilityObjTest.rightValue = '11'; + const isVisible = service.isFieldVisible(fakeFormWithVariables, visibilityObjTest); + + expect(isVisible).toBeTruthy(); + }); + + it('should set visibility to false when validation for integer variables fails', () => { + visibilityObjTest.leftRestResponseId = 'age'; + visibilityObjTest.operator = '=='; + visibilityObjTest.rightValue = '13'; + const isVisible = service.isFieldVisible(fakeFormWithVariables, visibilityObjTest); + + expect(isVisible).toBeFalsy(); + }); + + it('should set visibility to true when validation for date variables succeeds', () => { + visibilityObjTest.leftRestResponseId = 'dob'; + visibilityObjTest.operator = '=='; + visibilityObjTest.rightValue = '2019-05-13'; + const isVisible = service.isFieldVisible(fakeFormWithVariables, visibilityObjTest); + + expect(isVisible).toBeTruthy(); + }); + + it('should set visibility to false when validation for date variables fails', () => { + visibilityObjTest.leftRestResponseId = 'dob'; + visibilityObjTest.operator = '=='; + visibilityObjTest.rightValue = '2019-05-15'; + const isVisible = service.isFieldVisible(fakeFormWithVariables, visibilityObjTest); + + expect(isVisible).toBeFalsy(); + }); + + it('should validate visiblity for form fields by finding the field with id', () => { + visibilityObjTest.leftRestResponseId = '0207b649-ff07-4f3a-a589-d10afa507b9b'; + visibilityObjTest.operator = '=='; + visibilityObjTest.rightValue = '2019-05-13'; + const isVisible = service.isFieldVisible(fakeFormWithVariables, visibilityObjTest); + + expect(isVisible).toBeTruthy(); + }); + + }); }); diff --git a/lib/core/form/services/widget-visibility.service.ts b/lib/core/form/services/widget-visibility.service.ts index 3abacaaf14..45a015030f 100644 --- a/lib/core/form/services/widget-visibility.service.ts +++ b/lib/core/form/services/widget-visibility.service.ts @@ -75,7 +75,7 @@ export class WidgetVisibilityService { } } - getLeftValue(form: FormModel, visibilityObj: WidgetVisibilityModel) { + getLeftValue(form: FormModel, visibilityObj: WidgetVisibilityModel): string { let leftValue = ''; if (visibilityObj.leftRestResponseId && visibilityObj.leftRestResponseId !== 'null') { leftValue = this.getVariableValue(form, visibilityObj.leftRestResponseId, this.processVarList); @@ -86,7 +86,7 @@ export class WidgetVisibilityService { return leftValue; } - getRightValue(form: FormModel, visibilityObj: WidgetVisibilityModel) { + getRightValue(form: FormModel, visibilityObj: WidgetVisibilityModel): string { let valueFound = ''; if (visibilityObj.rightRestResponseId) { valueFound = this.getVariableValue(form, visibilityObj.rightRestResponseId, this.processVarList); @@ -102,7 +102,7 @@ export class WidgetVisibilityService { return valueFound; } - getFormValue(form: FormModel, fieldId: string) { + getFormValue(form: FormModel, fieldId: string): any { let value = this.getFieldValue(form.values, fieldId); if (!value) { @@ -112,7 +112,7 @@ export class WidgetVisibilityService { return value; } - getFieldValue(valueList: any, fieldId: string) { + getFieldValue(valueList: any, fieldId: string): any { let dropDownFilterByName, valueFound; if (fieldId && fieldId.indexOf('_LABEL') > 0) { dropDownFilterByName = fieldId.substring(0, fieldId.length - 6); @@ -127,7 +127,7 @@ export class WidgetVisibilityService { return valueFound; } - searchValueInForm(form: FormModel, fieldId: string) { + searchValueInForm(form: FormModel, fieldId: string): string { let fieldValue = ''; form.getFormFields().forEach((formField: FormFieldModel) => { if (this.isSearchedField(formField, fieldId)) { @@ -145,7 +145,7 @@ export class WidgetVisibilityService { return fieldValue; } - private getObjectValue(field: FormFieldModel, fieldId: string) { + private getObjectValue(field: FormFieldModel, fieldId: string): string { let value = ''; if (field.value && field.value.name) { value = field.value.name; @@ -181,22 +181,47 @@ export class WidgetVisibilityService { return formattedFieldName; } - getVariableValue(form: FormModel, name: string, processVarList: TaskProcessVariableModel[]) { + getVariableValue(form: FormModel, name: string, processVarList: TaskProcessVariableModel[]): string { return this.getFormVariableValue(form, name) || this.getProcessVariableValue(name, processVarList); } - private getFormVariableValue(form: FormModel, name: string) { - if (form.json.variables) { - const formVariable = form.json.variables.find((formVar) => formVar.name === name); - return formVariable ? formVariable.value : formVariable; + private getFormVariableValue(form: FormModel, identifier: string): string { + const variables = this.getFormVariables(form); + if (variables) { + const formVariable = variables.find((formVar) => { + return formVar.name === identifier || formVar.id === identifier; + }); + + let value; + if (formVariable) { + value = formVariable.value; + if (formVariable.type === 'date') { + value += 'T00:00:00.000Z'; + } + } + + return value; } } - private getProcessVariableValue(name: string, processVarList: TaskProcessVariableModel[]) { - if (this.processVarList) { - const processVariable = this.processVarList.find((variable) => variable.id === name); - return processVariable ? processVariable.value : processVariable; + private getFormVariables(form: FormModel): any[] { + let variables; + if (form.json.formRepresentation) { + variables = form.json.formRepresentation.formDefinition.variables; + } else { + variables = form.json.variables; + } + + return variables; + } + + private getProcessVariableValue(name: string, processVarList: TaskProcessVariableModel[]): string { + if (processVarList) { + const processVariable = processVarList.find((variable) => variable.id === name); + if (processVariable) { + return processVariable.value; + } } } @@ -257,7 +282,7 @@ export class WidgetVisibilityService { ); } - toJson(res: any) { + toJson(res: any): any { return res || {}; } diff --git a/lib/core/mock/form/widget-visibility.service.mock.ts b/lib/core/mock/form/widget-visibility.service.mock.ts index 1ee732cf13..4a4844193c 100644 --- a/lib/core/mock/form/widget-visibility.service.mock.ts +++ b/lib/core/mock/form/widget-visibility.service.mock.ts @@ -93,5 +93,25 @@ export let fakeFormJson = { ] } } + ], + variables: [ + { + 'id': 'e621e8ff-42a6-499c-8121-33c7c35d8641', + 'name': 'age', + 'type': 'integer', + 'value': 11 + }, + { + 'id': '4f8aa99e-8526-429c-9d99-809978489d96', + 'name': 'name', + 'type': 'string', + 'value': 'abc' + }, + { + 'id': '0207b649-ff07-4f3a-a589-d10afa507b9b', + 'name': 'dob', + 'type': 'date', + 'value': '2019-05-13' + } ] };