[ACTIVITI-3746] - fix form completion with tab fields (#5059)

* [ACTIVITI-3746] - fix form completion with tab fields

* fix lint

* fix unit test

* refractoring and PR changes

* fix unit tests
This commit is contained in:
Silviu Popa
2019-09-16 12:57:46 +03:00
committed by Popovics András
parent ae56d61ea3
commit d89b61cff0
4 changed files with 185 additions and 4 deletions

View File

@@ -20,7 +20,7 @@ import { LogService } from '../../services/log.service';
import { Injectable } from '@angular/core';
import moment from 'moment-es6';
import { Observable, from, throwError } from 'rxjs';
import { FormFieldModel, FormModel, TabModel } from '../components/widgets/core/index';
import { FormFieldModel, FormModel, TabModel, ContainerModel } from '../components/widgets/core/index';
import { TaskProcessVariableModel } from '../models/task-process-variable.model';
import { WidgetVisibilityModel, WidgetTypeEnum } from '../models/widget-visibility.model';
import { map, catchError } from 'rxjs/operators';
@@ -31,12 +31,14 @@ import { map, catchError } from 'rxjs/operators';
export class WidgetVisibilityService {
private processVarList: TaskProcessVariableModel[];
private form: FormModel;
constructor(private apiService: AlfrescoApiService,
private logService: LogService) {
}
public refreshVisibility(form: FormModel) {
this.form = form;
if (form && form.tabs && form.tabs.length > 0) {
form.tabs.map((tabModel) => this.refreshEntityVisibility(tabModel));
}
@@ -48,7 +50,7 @@ export class WidgetVisibilityService {
refreshEntityVisibility(element: FormFieldModel | TabModel) {
const visible = this.evaluateVisibility(element.form, element.visibilityCondition);
element.isVisible = visible;
element.isVisible = visible && this.isParentTabVisible(this.form, element);
}
evaluateVisibility(form: FormModel, visibilityObj: WidgetVisibilityModel): boolean {
@@ -164,6 +166,40 @@ export class WidgetVisibilityService {
return fieldValue;
}
isParentTabVisible(form: FormModel, currentFormField: FormFieldModel | TabModel): boolean {
const containers = this.getFormTabContainers(form);
let isVisible: boolean = true;
containers.map( (container: ContainerModel) => {
if ( !!this.getCurrentFieldFromTabById(container, currentFormField.id) ) {
const currentTab = form.tabs.find( (tab: TabModel) => tab.id === container.tab );
if (!!currentTab) {
isVisible = currentTab.isVisible;
}
}
});
return isVisible;
}
private getCurrentFieldFromTabById(container: ContainerModel, fieldId: string): FormFieldModel {
const tabFields: FormFieldModel[][] = Object.keys(container.field.fields).map( key => container.field.fields[key]);
let currentField: FormFieldModel;
for (const tabField of tabFields) {
currentField = tabField.find( (tab: FormFieldModel) => tab.id === fieldId );
if (currentField) {
return currentField;
}
}
return null;
}
private getFormTabContainers(form: FormModel): ContainerModel[] {
if (!!form) {
return <ContainerModel[]> form.fields.filter(field => field.type === 'container' && field.tab);
}
return [];
}
private getObjectValue(field: FormFieldModel, fieldId: string): string {
let value = '';
if (field.value && field.value.name) {