Fix container/group rendering (visibility conditions)

This commit is contained in:
Denys Vuika 2016-10-27 12:10:30 +01:00
parent 3688f3fc14
commit be84bbb636
7 changed files with 31 additions and 25 deletions

View File

@ -11,7 +11,7 @@
<span (click)="onExpanderClicked()" id="container-header-label">{{content.name}}</span>
</h4>
</div>
<div class="mdl-grid" *ngIf="content?.isExpanded">
<div class="mdl-grid" *ngIf="content?.isVisible && content?.isExpanded">
<div *ngFor="let col of content.columns" class="mdl-cell mdl-cell--{{col.size}}-col">
<div class="mdl-grid" *ngIf="col.hasFields()">
<div *ngFor="let field of col.fields" class="mdl-cell mdl-cell--12-col">

View File

@ -145,8 +145,8 @@ describe('ContainerWidget', () => {
name: 'fake-cont-2-name',
type: FormFieldTypes.GROUP
});
fakeContainerVisible.isVisible = true;
fakeContainerInvisible.isVisible = false;
fakeContainerVisible.field.isVisible = true;
fakeContainerInvisible.field.isVisible = false;
});
afterEach(() => {
@ -180,7 +180,7 @@ describe('ContainerWidget', () => {
containerWidgetComponent.content = fakeContainerVisible;
fixture.detectChanges();
containerWidgetComponent.formValueChanged.subscribe((res) => {
containerWidgetComponent.content.isVisible = false;
containerWidgetComponent.content.field.isVisible = false;
fixture.detectChanges();
fixture.whenStable()
.then(() => {
@ -194,7 +194,7 @@ describe('ContainerWidget', () => {
it('should show header when it becomes visible', async(() => {
containerWidgetComponent.content = fakeContainerInvisible;
containerWidgetComponent.formValueChanged.subscribe((res) => {
containerWidgetComponent.content.isVisible = true;
containerWidgetComponent.content.field.isVisible = true;
fixture.detectChanges();
fixture.whenStable()
.then(() => {

View File

@ -51,8 +51,7 @@ describe('ContainerModel', () => {
type: '<type>',
tab: '<tab>',
numberOfColumns: 2,
params: {},
visibilityCondition: {}
params: {}
};
let container = new ContainerModel(null, json);
Object.keys(json).forEach(key => {

View File

@ -21,18 +21,20 @@ import { ContainerColumnModel } from './container-column.model';
import { FormFieldTypes } from './form-field-types';
import { FormModel } from './form.model';
import { FormFieldModel } from './form-field.model';
import { WidgetVisibilityModel } from '../../../models/widget-visibility.model';
export class ContainerModel extends FormWidgetModel {
field: FormFieldModel;
numberOfColumns: number = 1;
params: FormFieldMetadata = {};
isVisible: boolean = true;
visibilityCondition: WidgetVisibilityModel = null;
columns: ContainerColumnModel[] = [];
isExpanded: boolean = true;
get isVisible(): boolean {
return this.field.isVisible;
}
isGroup(): boolean {
return this.type === FormFieldTypes.GROUP;
}
@ -61,9 +63,9 @@ export class ContainerModel extends FormWidgetModel {
super(form, json);
if (json) {
this.field = new FormFieldModel(form, json);
this.numberOfColumns = <number> json.numberOfColumns;
this.params = <FormFieldMetadata> json.params || {};
this.visibilityCondition = <WidgetVisibilityModel> json.visibilityCondition;
let columnSize: number = 12;
if (this.numberOfColumns > 1) {
@ -91,6 +93,10 @@ export class ContainerModel extends FormWidgetModel {
getFormFields(): FormFieldModel[] {
let result: FormFieldModel[] = [];
if (this.field) {
result.push(this.field);
}
for (let j = 0; j < this.columns.length; j++) {
let column = this.columns[j];
for (let k = 0; k < column.fields.length; k++) {

View File

@ -121,7 +121,7 @@ export class FormModel {
for (let i = 0; i < this.fields.length; i++) {
let field = this.fields[i];
if (field.type === FormFieldTypes.CONTAINER) {
if (field.type === FormFieldTypes.CONTAINER || field.type === FormFieldTypes.GROUP) {
let container = <ContainerModel> field;
result.push(...container.getFormFields());
}

View File

@ -27,7 +27,7 @@ import { WidgetVisibilityService } from './widget-visibility.service';
import { AlfrescoSettingsService, AlfrescoAuthenticationService, AlfrescoApiService } from 'ng2-alfresco-core';
import { TaskProcessVariableModel } from '../models/task-process-variable.model';
import { WidgetVisibilityModel } from '../models/widget-visibility.model';
import { FormModel, FormFieldModel, TabModel, ContainerModel } from '../components/widgets/core/index';
import { FormModel, FormFieldModel, TabModel, ContainerModel, FormFieldTypes } from '../components/widgets/core/index';
declare let jasmine: any;
@ -657,20 +657,21 @@ describe('WidgetVisibilityService', () => {
expect(tab.isVisible).toBeFalsy();
});
it('should refresh the visibility for container in forms', () => {
xit('should refresh the visibility for container in forms', () => {
visibilityObjTest.leftFormFieldId = 'FIELD_TEST';
visibilityObjTest.operator = '!=';
visibilityObjTest.rightFormFieldId = 'LEFT_FORM_FIELD_ID';
let contModel = new ContainerModel(fakeFormWithField, {
id: 'fake-container-id',
type: FormFieldTypes.GROUP,
name: 'fake-container-name',
isVisible: true
isVisible: true,
visibilityCondition: visibilityObjTest
});
contModel.visibilityCondition = visibilityObjTest;
fakeFormWithField.fields[1] = contModel;
fakeFormWithField.fields.push(contModel);
service.refreshVisibility(fakeFormWithField);
let fakeCont = <ContainerModel> fakeFormWithField.fields[1];
expect(fakeCont.isVisible).toBeFalsy();
expect(contModel.isVisible).toBeFalsy();
});
it('should refresh the visibility for single container', () => {
@ -679,12 +680,12 @@ describe('WidgetVisibilityService', () => {
visibilityObjTest.rightFormFieldId = 'RIGHT_FORM_FIELD_ID';
let contModel = new ContainerModel(fakeFormWithField, {
id: 'fake-container-id',
type: FormFieldTypes.GROUP,
name: 'fake-container-name',
isVisible: true
isVisible: true,
visibilityCondition: visibilityObjTest
});
contModel.visibilityCondition = visibilityObjTest;
service.refreshEntityVisibility(contModel);
service.refreshEntityVisibility(contModel.field);
expect(contModel.isVisible).toBeFalsy();
});
});

View File

@ -19,7 +19,7 @@ import { Injectable } from '@angular/core';
import { Response, Http, Headers, RequestOptions } from '@angular/http';
import { Observable } from 'rxjs/Rx';
import { AlfrescoSettingsService, AlfrescoAuthenticationService } from 'ng2-alfresco-core';
import { FormModel, FormFieldModel, TabModel, ContainerModel } from '../components/widgets/core/index';
import { FormModel, FormFieldModel, TabModel } from '../components/widgets/core/index';
import { WidgetVisibilityModel } from '../models/widget-visibility.model';
import { TaskProcessVariableModel } from '../models/task-process-variable.model';
@ -43,7 +43,7 @@ export class WidgetVisibilityService {
}
}
refreshEntityVisibility(element: FormFieldModel | ContainerModel | TabModel) {
refreshEntityVisibility(element: FormFieldModel | TabModel) {
element.isVisible = this.evaluateVisibility(element.form, element.visibilityCondition);
}