Add some improvements to visibility service

This commit is contained in:
Vito Albano 2016-10-25 10:43:34 +01:00
parent d6669fd4f7
commit ae48e09471
2 changed files with 22 additions and 32 deletions

View File

@ -31,7 +31,7 @@ import { FormModel, FormFieldModel, TabModel, ContainerModel } from '../componen
declare let jasmine: any;
describe('WidgetVisibilityService (mockBackend)', () => {
describe('WidgetVisibilityService', () => {
let service: WidgetVisibilityService;
let booleanResult: boolean;
let stubFormWithFields = new FormModel(fakeFormJson);
@ -474,7 +474,7 @@ describe('WidgetVisibilityService (mockBackend)', () => {
visibilityObjTest.operator = '!=';
visibilityObjTest.rightFormFieldId = 'test_3';
let fakeFormField: FormFieldModel = new FormFieldModel(formTest, jsonFieldFake);
service.refreshFieldVisibility(fakeFormField);
service.refreshEntityVisibility(fakeFormField);
expect(fakeFormField.isVisible).toBeFalsy();
});
@ -488,13 +488,13 @@ describe('WidgetVisibilityService (mockBackend)', () => {
expect(isVisible).toBeTruthy();
});
it('should not change the isVisible if field does not have visibility condition', () => {
it('should return always true when field does not have a visibility condition', () => {
jsonFieldFake.visibilityCondition = null;
let fakeFormField: FormFieldModel = new FormFieldModel(fakeFormWithField, jsonFieldFake);
fakeFormField.isVisible = false;
service.refreshFieldVisibility(fakeFormField);
service.refreshEntityVisibility(fakeFormField);
expect(fakeFormField.isVisible).toBeFalsy();
expect(fakeFormField.isVisible).toBeTruthy();
});
it('should be able to retrieve the value of a form variable', () => {
@ -579,7 +579,7 @@ describe('WidgetVisibilityService (mockBackend)', () => {
visibilityObjTest.operator = '==';
visibilityObjTest.rightFormFieldId = 'dropdown_LABEL';
let fakeFormField: FormFieldModel = new FormFieldModel(formTest, jsonFieldFake);
service.refreshFieldVisibility(fakeFormField);
service.refreshEntityVisibility(fakeFormField);
expect(fakeFormField.isVisible).toBeTruthy();
});
@ -589,7 +589,7 @@ describe('WidgetVisibilityService (mockBackend)', () => {
visibilityObjTest.operator = '==';
visibilityObjTest.rightFormFieldId = 'dropdown';
let fakeFormField: FormFieldModel = new FormFieldModel(formTest, jsonFieldFake);
service.refreshFieldVisibility(fakeFormField);
service.refreshEntityVisibility(fakeFormField);
expect(fakeFormField.isVisible).toBeTruthy();
});
@ -633,7 +633,7 @@ describe('WidgetVisibilityService (mockBackend)', () => {
visibilityObjTest.rightFormFieldId = 'RIGHT_FORM_FIELD_ID';
let tab = new TabModel(fakeFormWithField, {id: 'fake-tab-id', title: 'fake-tab-title', isVisible: true});
tab.visibilityCondition = visibilityObjTest;
service.refreshTabVisibility(tab);
service.refreshEntityVisibility(tab);
expect(tab.isVisible).toBeFalsy();
});
@ -664,7 +664,7 @@ describe('WidgetVisibilityService (mockBackend)', () => {
isVisible: true
});
contModel.visibilityCondition = visibilityObjTest;
service.refreshContainerVisibility(contModel);
service.refreshEntityVisibility(contModel);
expect(contModel.isVisible).toBeFalsy();
});

View File

@ -35,37 +35,23 @@ export class WidgetVisibilityService {
public refreshVisibility(form: FormModel) {
if (form && form.tabs && form.tabs.length > 0) {
form.tabs.map(tabModel => this.refreshTabVisibility(tabModel));
form.tabs.map(tabModel => this.refreshEntityVisibility(tabModel));
}
if (form && form.fields.length > 0) {
form.fields.map(contModel => {
this.refreshContainerVisibility(contModel);
this.refreshEntityVisibility(contModel);
contModel.columns.map(contColModel =>
contColModel.fields.map(field => this.refreshFieldVisibility(field)));
contColModel.fields.map(field => this.refreshEntityVisibility(field)));
});
}
}
refreshFieldVisibility(field: FormFieldModel) {
if (field.visibilityCondition) {
field.isVisible = this.evaluateVisibility(field.form, field.visibilityCondition);
}
}
refreshContainerVisibility(content: ContainerModel) {
if (content.visibilityCondition) {
content.isVisible = this.evaluateVisibility(content.form, content.visibilityCondition);
}
}
refreshTabVisibility(tab: TabModel) {
if (tab.visibilityCondition) {
tab.isVisible = this.evaluateVisibility(tab.form, tab.visibilityCondition);
}
refreshEntityVisibility(element: FormFieldModel | ContainerModel | TabModel) {
element.isVisible = this.evaluateVisibility(element.form, element.visibilityCondition);
}
evaluateVisibility(form: FormModel, visibilityObj: WidgetVisibilityModel): boolean {
let isLeftFieldPresent = visibilityObj.leftFormFieldId || visibilityObj.leftRestResponseId;
let isLeftFieldPresent = visibilityObj && ( visibilityObj.leftFormFieldId || visibilityObj.leftRestResponseId );
if (!isLeftFieldPresent || isLeftFieldPresent === 'null') {
return true;
} else {
@ -96,14 +82,18 @@ export class WidgetVisibilityService {
}
getRightValue(form: FormModel, visibilityObj: WidgetVisibilityModel) {
let valueFound = null;
let valueFound = '';
if (visibilityObj.rightRestResponseId) {
valueFound = this.getVariableValue(form, visibilityObj.rightRestResponseId, this.processVarList);
} else if (visibilityObj.rightFormFieldId) {
valueFound = this.getFormValue(form, visibilityObj.rightFormFieldId);
} else {
if (moment(visibilityObj.rightValue, 'YYYY-MM-DD', true).isValid()) {
valueFound = visibilityObj.rightValue + 'T00:00:00.000Z';
} else {
valueFound = visibilityObj.rightValue;
}
}
return valueFound;
}
@ -119,7 +109,7 @@ export class WidgetVisibilityService {
}
getFieldValue(valueList: any, fieldName: string) {
return fieldName ? valueList[fieldName] : fieldName;
return valueList[fieldName];
}
getDropDownName(valueList: any, fieldName: string) {