visibly performance improvements

This commit is contained in:
Efstratios Giannopoulos 2024-03-27 18:43:52 +02:00
parent 09c428bd99
commit 308f1364af
1 changed files with 63 additions and 52 deletions

View File

@ -15,6 +15,9 @@ export class VisibilityRulesService {
public isVisibleMap: { [key: string]: boolean } = null; public isVisibleMap: { [key: string]: boolean } = null;
private _isVisibleMap: { [key: string]: boolean } = null; private _isVisibleMap: { [key: string]: boolean } = null;
private allDescriptionTemplateFields: DescriptionTemplateField[] = null;
private allDescriptionTemplateFieldSets: DescriptionTemplateFieldSet[] = null;
constructor( constructor(
protected formService: FormService protected formService: FormService
) { ) {
@ -23,6 +26,8 @@ export class VisibilityRulesService {
public setContext(definition: DescriptionTemplateDefinition, form: AbstractControl) { public setContext(definition: DescriptionTemplateDefinition, form: AbstractControl) {
this.definition = definition; this.definition = definition;
this.form = form; this.form = form;
this.allDescriptionTemplateFields = null;
this.allDescriptionTemplateFieldSets = null;
this.rulesBySources = null; this.rulesBySources = null;
this._isVisibleMap = null; this._isVisibleMap = null;
this.calculateVisibility(); this.calculateVisibility();
@ -62,11 +67,13 @@ export class VisibilityRulesService {
if (this.definition == null || this.form == null) return; if (this.definition == null || this.form == null) return;
this.initRules(); this.initRules();
this.buildTargetVisibility(); const propertyDefinition: DescriptionPropertyDefinitionPersist = this.formService.getValue(this.form.getRawValue()) as DescriptionPropertyDefinitionPersist;
this.expandVisibilityToChildren();
this.setDefaultVisibilityForNotCaclucted(); this.buildTargetVisibility(propertyDefinition);
this.hideParentIfAllChildrenAreHidden(); this.expandVisibilityToChildren(propertyDefinition);
this.ensureFieldSetVisibility(); this.setDefaultVisibilityForNotCaclucted(propertyDefinition);
this.hideParentIfAllChildrenAreHidden(propertyDefinition);
this.ensureFieldSetVisibility(propertyDefinition);
this.isVisibleMap = this._isVisibleMap; this.isVisibleMap = this._isVisibleMap;
} }
@ -95,13 +102,16 @@ export class VisibilityRulesService {
} }
private getAllDescriptionTemplateDefinitionFields(definition: DescriptionTemplateDefinition): DescriptionTemplateField[] { private getAllDescriptionTemplateDefinitionFields(definition: DescriptionTemplateDefinition): DescriptionTemplateField[] {
if (this.allDescriptionTemplateFields != null) return this.allDescriptionTemplateFields;
let fields: DescriptionTemplateField[] = []; let fields: DescriptionTemplateField[] = [];
if (definition.pages == null) return fields; if (definition.pages == null) return fields;
for (let i = 0; i < definition.pages.length; i++) { for (let i = 0; i < definition.pages.length; i++) {
const item = definition.pages[i]; const item = definition.pages[i];
fields = [...fields, ...this.getAllDescriptionTemplatePageFields(item)]; fields = [...fields, ...this.getAllDescriptionTemplatePageFields(item)];
} }
return fields; this.allDescriptionTemplateFields = fields;
return this.allDescriptionTemplateFields;
} }
private getAllDescriptionTemplatePageFields(definition: DescriptionTemplatePage): DescriptionTemplateField[] { private getAllDescriptionTemplatePageFields(definition: DescriptionTemplatePage): DescriptionTemplateField[] {
@ -141,13 +151,15 @@ export class VisibilityRulesService {
} }
private getAllDescriptionTemplateDefinitionFieldSets(definition: DescriptionTemplateDefinition): DescriptionTemplateFieldSet[] { private getAllDescriptionTemplateDefinitionFieldSets(definition: DescriptionTemplateDefinition): DescriptionTemplateFieldSet[] {
if (this.allDescriptionTemplateFieldSets != null) return this.allDescriptionTemplateFieldSets;
let fieldSets: DescriptionTemplateFieldSet[] = []; let fieldSets: DescriptionTemplateFieldSet[] = [];
if (definition.pages == null) return fieldSets; if (definition.pages == null) return fieldSets;
for (let i = 0; i < definition.pages.length; i++) { for (let i = 0; i < definition.pages.length; i++) {
const item = definition.pages[i]; const item = definition.pages[i];
fieldSets = [...fieldSets, ...this.getAllDescriptionTemplatePageFieldSets(item)]; fieldSets = [...fieldSets, ...this.getAllDescriptionTemplatePageFieldSets(item)];
} }
return fieldSets; this.allDescriptionTemplateFieldSets = fieldSets;
return this.allDescriptionTemplateFieldSets;
} }
private getAllDescriptionTemplatePageFieldSets(definition: DescriptionTemplatePage): DescriptionTemplateFieldSet[] { private getAllDescriptionTemplatePageFieldSets(definition: DescriptionTemplatePage): DescriptionTemplateFieldSet[] {
@ -177,9 +189,8 @@ export class VisibilityRulesService {
return fieldSets; return fieldSets;
} }
private buildTargetVisibility(){ private buildTargetVisibility(propertyDefinition: DescriptionPropertyDefinitionPersist){
this._isVisibleMap = {}; this._isVisibleMap = {};
const propertyDefinition: DescriptionPropertyDefinitionPersist = this.formService.getValue(this.form.getRawValue()) as DescriptionPropertyDefinitionPersist;
this.rulesBySources.forEach((ruleForSource: RuleWithTarget[], ruleForSourceKey: string) => { this.rulesBySources.forEach((ruleForSource: RuleWithTarget[], ruleForSourceKey: string) => {
for (let i = 0; i < ruleForSource.length; i++) { for (let i = 0; i < ruleForSource.length; i++) {
const rule = ruleForSource[i]; const rule = ruleForSource[i];
@ -189,10 +200,11 @@ export class VisibilityRulesService {
for (let j = 0; j < propertyDefinitionFieldSet.items.length; j++) { for (let j = 0; j < propertyDefinitionFieldSet.items.length; j++) {
const definitionFieldSetItem = propertyDefinitionFieldSet.items[j]; const definitionFieldSetItem = propertyDefinitionFieldSet.items[j];
if (definitionFieldSetItem?.fields != null) { if (definitionFieldSetItem?.fields != null) {
new Map(Object.entries(definitionFieldSetItem.fields)).forEach((field: DescriptionFieldPersist, key: string) => { const fieldsMap = new Map(Object.entries(definitionFieldSetItem.fields));
fieldsMap.forEach((field: DescriptionFieldPersist, key: string) => {
if (rule.source == key){ if (rule.source == key){
if (new Map(Object.entries(definitionFieldSetItem.fields)).has(rule.target)){ //Rule applies only for current multiple item if (fieldsMap.has(rule.target)){ //Rule applies only for current multiple item
const fieldKey = this.buildVisibilityKey(rule.target, definitionFieldSetItem.ordinal); const fieldKey = this.buildVisibilityKey(rule.target, definitionFieldSetItem.ordinal);
const currentState = this._isVisibleMap[fieldKey] ?? false; const currentState = this._isVisibleMap[fieldKey] ?? false;
this._isVisibleMap[fieldKey] = currentState || this.ruleIsTrue(rule, field); this._isVisibleMap[fieldKey] = currentState || this.ruleIsTrue(rule, field);
@ -274,17 +286,17 @@ export class VisibilityRulesService {
return false; return false;
} }
private expandVisibilityToChildren(){ private expandVisibilityToChildren(propertyDefinition: DescriptionPropertyDefinitionPersist){
if (this.definition?.pages == null) return; if (this.definition?.pages == null) return;
for (let i = 0; i < this.definition?.pages.length; i++) { for (let i = 0; i < this.definition?.pages.length; i++) {
const pageEntity = this.definition?.pages[i]; const pageEntity = this.definition?.pages[i];
const fieldKey = this.buildVisibilityKey(pageEntity.id, null); const fieldKey = this.buildVisibilityKey(pageEntity.id, null);
const currentValue: boolean | null = this._isVisibleMap[fieldKey] ?? null; const currentValue: boolean | null = this._isVisibleMap[fieldKey] ?? null;
this.expandPageVisibility(pageEntity, currentValue); this.expandPageVisibility(pageEntity, propertyDefinition, currentValue);
} }
} }
private expandPageVisibility(pageEntity : DescriptionTemplatePage, parentVisibility : boolean | null){ private expandPageVisibility(pageEntity : DescriptionTemplatePage, propertyDefinition: DescriptionPropertyDefinitionPersist, parentVisibility : boolean | null){
if (pageEntity.sections == null) return; if (pageEntity.sections == null) return;
for (let i = 0; i < pageEntity.sections.length; i++) { for (let i = 0; i < pageEntity.sections.length; i++) {
const sectionEntity = pageEntity.sections[i]; const sectionEntity = pageEntity.sections[i];
@ -293,17 +305,17 @@ export class VisibilityRulesService {
if (currentValue != null){ if (currentValue != null){
if (parentVisibility != null && !parentVisibility) { //Parent is hidden so all childs should be hidden if (parentVisibility != null && !parentVisibility) { //Parent is hidden so all childs should be hidden
this._isVisibleMap[fieldKey] = false; this._isVisibleMap[fieldKey] = false;
this.expandSectionVisibility(sectionEntity, currentValue); this.expandSectionVisibility(sectionEntity, propertyDefinition, currentValue);
} else { } else {
this.expandSectionVisibility(sectionEntity, currentValue); this.expandSectionVisibility(sectionEntity, propertyDefinition, currentValue);
} }
} else { } else {
if (parentVisibility != null) this._isVisibleMap[fieldKey] = parentVisibility; if (parentVisibility != null) this._isVisibleMap[fieldKey] = parentVisibility;
this.expandSectionVisibility(sectionEntity, parentVisibility); this.expandSectionVisibility(sectionEntity, propertyDefinition, parentVisibility);
} }
} }
} }
private expandSectionVisibility(sectionEntity: DescriptionTemplateSection, parentVisibility : boolean | null){ private expandSectionVisibility(sectionEntity: DescriptionTemplateSection, propertyDefinition: DescriptionPropertyDefinitionPersist, parentVisibility : boolean | null){
if (sectionEntity.sections != null) { if (sectionEntity.sections != null) {
for (let i = 0; i < sectionEntity.sections.length; i++) { for (let i = 0; i < sectionEntity.sections.length; i++) {
const subSectionEntity = sectionEntity.sections[i]; const subSectionEntity = sectionEntity.sections[i];
@ -312,23 +324,23 @@ export class VisibilityRulesService {
if (currentValue != null){ if (currentValue != null){
if (parentVisibility != null && !parentVisibility) { //Parent is hidden so all childs should be hidden if (parentVisibility != null && !parentVisibility) { //Parent is hidden so all childs should be hidden
this._isVisibleMap[fieldKey] = false; this._isVisibleMap[fieldKey] = false;
this.expandSectionVisibility(subSectionEntity, currentValue); this.expandSectionVisibility(subSectionEntity, propertyDefinition, currentValue);
} else { } else {
this.expandSectionVisibility(subSectionEntity, currentValue); this.expandSectionVisibility(subSectionEntity, propertyDefinition, currentValue);
} }
} else { } else {
if (parentVisibility != null) this._isVisibleMap[fieldKey] = parentVisibility; if (parentVisibility != null) this._isVisibleMap[fieldKey] = parentVisibility;
this.expandSectionVisibility(subSectionEntity, parentVisibility); this.expandSectionVisibility(subSectionEntity, propertyDefinition, parentVisibility);
} }
} }
} }
if (sectionEntity.fieldSets != null) { if (sectionEntity.fieldSets != null) {
const propertyDefinition = this.formService.getValue(this.form.getRawValue()) as DescriptionPropertyDefinitionPersist;
for (let i = 0; i < sectionEntity.fieldSets.length; i++) { for (let i = 0; i < sectionEntity.fieldSets.length; i++) {
const fieldSetEntity = sectionEntity.fieldSets[i]; const fieldSetEntity = sectionEntity.fieldSets[i];
if (propertyDefinition.fieldSets != null && new Map(Object.entries(propertyDefinition.fieldSets)).has(fieldSetEntity.id)) { const fieldSetsMap = propertyDefinition.fieldSets != null ? new Map(Object.entries(propertyDefinition.fieldSets)) : null;
const propertyDefinitionFieldSet = new Map(Object.entries(propertyDefinition.fieldSets)).get(fieldSetEntity.id) if (fieldSetsMap != null && fieldSetsMap.has(fieldSetEntity.id)) {
const propertyDefinitionFieldSet = fieldSetsMap.get(fieldSetEntity.id)
if (propertyDefinitionFieldSet.items != null && propertyDefinitionFieldSet.items.length > 0) { if (propertyDefinitionFieldSet.items != null && propertyDefinitionFieldSet.items.length > 0) {
for (let j = 0; j < propertyDefinitionFieldSet.items.length; j++) { for (let j = 0; j < propertyDefinitionFieldSet.items.length; j++) {
const definitionFieldSetItem = propertyDefinitionFieldSet.items[j]; const definitionFieldSetItem = propertyDefinitionFieldSet.items[j];
@ -369,18 +381,18 @@ export class VisibilityRulesService {
} }
} }
private setDefaultVisibilityForNotCaclucted() { private setDefaultVisibilityForNotCaclucted(propertyDefinition: DescriptionPropertyDefinitionPersist) {
if (this.definition?.pages == null) return; if (this.definition?.pages == null) return;
for (let i = 0; i < this.definition?.pages.length; i++) { for (let i = 0; i < this.definition?.pages.length; i++) {
const pageEntity = this.definition?.pages[i]; const pageEntity = this.definition?.pages[i];
const fieldKey = this.buildVisibilityKey(pageEntity.id, null); const fieldKey = this.buildVisibilityKey(pageEntity.id, null);
const currentValue: boolean | null = this._isVisibleMap[fieldKey] ?? null; const currentValue: boolean | null = this._isVisibleMap[fieldKey] ?? null;
if (currentValue == null) this._isVisibleMap[fieldKey] = true; if (currentValue == null) this._isVisibleMap[fieldKey] = true;
this.setDefaultPageVisibility(pageEntity); this.setDefaultPageVisibility(pageEntity, propertyDefinition);
} }
} }
private setDefaultPageVisibility(pageEntity: DescriptionTemplatePage) { private setDefaultPageVisibility(pageEntity: DescriptionTemplatePage, propertyDefinition: DescriptionPropertyDefinitionPersist) {
if (pageEntity.sections == null) return; if (pageEntity.sections == null) return;
for (let i = 0; i < pageEntity.sections.length; i++) { for (let i = 0; i < pageEntity.sections.length; i++) {
const sectionEntity = pageEntity.sections[i]; const sectionEntity = pageEntity.sections[i];
@ -388,12 +400,12 @@ export class VisibilityRulesService {
const currentValue: boolean | null = this._isVisibleMap[fieldKey] ?? null; const currentValue: boolean | null = this._isVisibleMap[fieldKey] ?? null;
if (currentValue == null){ if (currentValue == null){
this._isVisibleMap[fieldKey] = true; this._isVisibleMap[fieldKey] = true;
this.setDefaultSectionVisibility(sectionEntity); this.setDefaultSectionVisibility(sectionEntity, propertyDefinition);
} }
} }
} }
private setDefaultSectionVisibility(sectionEntity: DescriptionTemplateSection) { private setDefaultSectionVisibility(sectionEntity: DescriptionTemplateSection, propertyDefinition: DescriptionPropertyDefinitionPersist) {
if (sectionEntity.sections != null) { if (sectionEntity.sections != null) {
for (let i = 0; i < sectionEntity.sections.length; i++) { for (let i = 0; i < sectionEntity.sections.length; i++) {
const subSectionEntity = sectionEntity.sections[i]; const subSectionEntity = sectionEntity.sections[i];
@ -401,17 +413,16 @@ export class VisibilityRulesService {
const currentValue: boolean | null = this._isVisibleMap[fieldKey] ?? null; const currentValue: boolean | null = this._isVisibleMap[fieldKey] ?? null;
if (currentValue == null){ if (currentValue == null){
this._isVisibleMap[fieldKey] = true; this._isVisibleMap[fieldKey] = true;
this.setDefaultSectionVisibility(subSectionEntity); this.setDefaultSectionVisibility(subSectionEntity, propertyDefinition);
} }
} }
} }
if (sectionEntity.fieldSets != null) { if (sectionEntity.fieldSets != null) {
const propertyDefinition = this.formService.getValue(this.form.getRawValue()) as DescriptionPropertyDefinitionPersist;
for (let i = 0; i < sectionEntity.fieldSets.length; i++) { for (let i = 0; i < sectionEntity.fieldSets.length; i++) {
const fieldSetEntity = sectionEntity.fieldSets[i]; const fieldSetEntity = sectionEntity.fieldSets[i];
const fieldSetsMap = propertyDefinition.fieldSets != null ? new Map(Object.entries(propertyDefinition.fieldSets)) : null;
if (propertyDefinition.fieldSets != null && new Map(Object.entries(propertyDefinition.fieldSets)).has(fieldSetEntity.id)) { if (fieldSetsMap != null && fieldSetsMap.has(fieldSetEntity.id)) {
const propertyDefinitionFieldSet = new Map(Object.entries(propertyDefinition.fieldSets)).get(fieldSetEntity.id) const propertyDefinitionFieldSet = fieldSetsMap.get(fieldSetEntity.id)
if (propertyDefinitionFieldSet.items != null && propertyDefinitionFieldSet.items.length > 0) { if (propertyDefinitionFieldSet.items != null && propertyDefinitionFieldSet.items.length > 0) {
for (let j = 0; j < propertyDefinitionFieldSet.items.length; j++) { for (let j = 0; j < propertyDefinitionFieldSet.items.length; j++) {
const definitionFieldSetItem = propertyDefinitionFieldSet.items[j]; const definitionFieldSetItem = propertyDefinitionFieldSet.items[j];
@ -441,12 +452,12 @@ export class VisibilityRulesService {
} }
} }
private hideParentIfAllChildrenAreHidden() { private hideParentIfAllChildrenAreHidden(propertyDefinition: DescriptionPropertyDefinitionPersist) {
if (this.definition?.pages == null) return; if (this.definition?.pages == null) return;
for (let i = 0; i < this.definition?.pages.length; i++) { for (let i = 0; i < this.definition?.pages.length; i++) {
const pageEntity = this.definition?.pages[i]; const pageEntity = this.definition?.pages[i];
const fieldKey = this.buildVisibilityKey(pageEntity.id, null); const fieldKey = this.buildVisibilityKey(pageEntity.id, null);
const isCurrentHidden = this.isHiddenPageVisibilityIfAllChildrenIsHidden(pageEntity); const isCurrentHidden = this.isHiddenPageVisibilityIfAllChildrenIsHidden(pageEntity, propertyDefinition);
if (isCurrentHidden && (this._isVisibleMap[fieldKey] ?? true)) { if (isCurrentHidden && (this._isVisibleMap[fieldKey] ?? true)) {
this._isVisibleMap[fieldKey] = false; this._isVisibleMap[fieldKey] = false;
@ -454,13 +465,13 @@ export class VisibilityRulesService {
} }
} }
private isHiddenPageVisibilityIfAllChildrenIsHidden(pageEntity: DescriptionTemplatePage): boolean{ private isHiddenPageVisibilityIfAllChildrenIsHidden(pageEntity: DescriptionTemplatePage, propertyDefinition: DescriptionPropertyDefinitionPersist): boolean{
let isHidden = true; let isHidden = true;
if (pageEntity?.sections == null) return; if (pageEntity?.sections == null) return;
for (let i = 0; i < pageEntity.sections.length; i++) { for (let i = 0; i < pageEntity.sections.length; i++) {
const sectionEntity = pageEntity.sections[i]; const sectionEntity = pageEntity.sections[i];
const fieldKey = this.buildVisibilityKey(sectionEntity.id, null); const fieldKey = this.buildVisibilityKey(sectionEntity.id, null);
const isCurrentHidden = this.isHiddenSectionIfAllChildrenIsHidden(sectionEntity); const isCurrentHidden = this.isHiddenSectionIfAllChildrenIsHidden(sectionEntity, propertyDefinition);
if (isCurrentHidden && (this._isVisibleMap[fieldKey] ?? true)) { if (isCurrentHidden && (this._isVisibleMap[fieldKey] ?? true)) {
this._isVisibleMap[fieldKey] = false; this._isVisibleMap[fieldKey] = false;
} }
@ -469,13 +480,13 @@ export class VisibilityRulesService {
return isHidden; return isHidden;
} }
private isHiddenSectionIfAllChildrenIsHidden(sectionEntity: DescriptionTemplateSection): boolean{ private isHiddenSectionIfAllChildrenIsHidden(sectionEntity: DescriptionTemplateSection, propertyDefinition: DescriptionPropertyDefinitionPersist): boolean{
let isHidden = true; let isHidden = true;
if (sectionEntity.sections != null) { if (sectionEntity.sections != null) {
for (let i = 0; i < sectionEntity.sections.length; i++) { for (let i = 0; i < sectionEntity.sections.length; i++) {
const subSectionEntity = sectionEntity.sections[i]; const subSectionEntity = sectionEntity.sections[i];
const fieldKey = this.buildVisibilityKey(subSectionEntity.id, null); const fieldKey = this.buildVisibilityKey(subSectionEntity.id, null);
const isCurrentHidden = this.isHiddenSectionIfAllChildrenIsHidden(subSectionEntity); const isCurrentHidden = this.isHiddenSectionIfAllChildrenIsHidden(subSectionEntity, propertyDefinition);
if (isCurrentHidden && (this._isVisibleMap[fieldKey] ?? true)) { if (isCurrentHidden && (this._isVisibleMap[fieldKey] ?? true)) {
this._isVisibleMap[fieldKey] = false; this._isVisibleMap[fieldKey] = false;
} }
@ -483,11 +494,11 @@ export class VisibilityRulesService {
} }
} }
if (sectionEntity.fieldSets != null) { if (sectionEntity.fieldSets != null) {
const propertyDefinition = this.formService.getValue(this.form.getRawValue()) as DescriptionPropertyDefinitionPersist;
for (let i = 0; i < sectionEntity.fieldSets.length; i++) { for (let i = 0; i < sectionEntity.fieldSets.length; i++) {
const fieldSetEntity = sectionEntity.fieldSets[i]; const fieldSetEntity = sectionEntity.fieldSets[i];
if (propertyDefinition.fieldSets != null && new Map(Object.entries(propertyDefinition.fieldSets)).has(fieldSetEntity.id)) { const fieldSetsMap = propertyDefinition.fieldSets != null ? new Map(Object.entries(propertyDefinition.fieldSets)) : null;
const propertyDefinitionFieldSet = new Map(Object.entries(propertyDefinition.fieldSets)).get(fieldSetEntity.id) if (fieldSetsMap != null && fieldSetsMap.has(fieldSetEntity.id)) {
const propertyDefinitionFieldSet = fieldSetsMap.get(fieldSetEntity.id)
if (propertyDefinitionFieldSet.items != null && propertyDefinitionFieldSet.items.length > 0) { if (propertyDefinitionFieldSet.items != null && propertyDefinitionFieldSet.items.length > 0) {
for (let j = 0; j < propertyDefinitionFieldSet.items.length; j++) { for (let j = 0; j < propertyDefinitionFieldSet.items.length; j++) {
const definitionFieldSetItem = propertyDefinitionFieldSet.items[j]; const definitionFieldSetItem = propertyDefinitionFieldSet.items[j];
@ -519,36 +530,36 @@ export class VisibilityRulesService {
return true; return true;
} }
private ensureFieldSetVisibility() { private ensureFieldSetVisibility(propertyDefinition: DescriptionPropertyDefinitionPersist) {
if (this.definition?.pages == null) return; if (this.definition?.pages == null) return;
for (let i = 0; i < this.definition?.pages.length; i++) { for (let i = 0; i < this.definition?.pages.length; i++) {
const pageEntity = this.definition?.pages[i]; const pageEntity = this.definition?.pages[i];
this.ensurePageFieldSetVisibility(pageEntity); this.ensurePageFieldSetVisibility(pageEntity, propertyDefinition);
} }
} }
private ensurePageFieldSetVisibility(pageEntity: DescriptionTemplatePage){ private ensurePageFieldSetVisibility(pageEntity: DescriptionTemplatePage, propertyDefinition: DescriptionPropertyDefinitionPersist){
if (pageEntity?.sections == null) return; if (pageEntity?.sections == null) return;
for (let i = 0; i < pageEntity.sections.length; i++) { for (let i = 0; i < pageEntity.sections.length; i++) {
const sectionEntity = pageEntity.sections[i]; const sectionEntity = pageEntity.sections[i];
this.ensureSectionFieldSetVisibility(sectionEntity); this.ensureSectionFieldSetVisibility(sectionEntity, propertyDefinition);
} }
} }
private ensureSectionFieldSetVisibility(sectionEntity: DescriptionTemplateSection){ private ensureSectionFieldSetVisibility(sectionEntity: DescriptionTemplateSection, propertyDefinition: DescriptionPropertyDefinitionPersist){
if (sectionEntity.sections != null) { if (sectionEntity.sections != null) {
for (let i = 0; i < sectionEntity.sections.length; i++) { for (let i = 0; i < sectionEntity.sections.length; i++) {
const subSectionEntity = sectionEntity.sections[i]; const subSectionEntity = sectionEntity.sections[i];
this.ensureSectionFieldSetVisibility(subSectionEntity); this.ensureSectionFieldSetVisibility(subSectionEntity, propertyDefinition);
} }
} }
if (sectionEntity.fieldSets != null) { if (sectionEntity.fieldSets != null) {
const propertyDefinition = this.formService.getValue(this.form.getRawValue()) as DescriptionPropertyDefinitionPersist;
for (let i = 0; i < sectionEntity.fieldSets.length; i++) { for (let i = 0; i < sectionEntity.fieldSets.length; i++) {
const fieldSetEntity = sectionEntity.fieldSets[i]; const fieldSetEntity = sectionEntity.fieldSets[i];
let isHidden = true; let isHidden = true;
if (propertyDefinition.fieldSets != null && new Map(Object.entries(propertyDefinition.fieldSets)).has(fieldSetEntity.id)) { const fieldSetsMap = propertyDefinition.fieldSets != null ? new Map(Object.entries(propertyDefinition.fieldSets)) : null;
const propertyDefinitionFieldSet = new Map(Object.entries(propertyDefinition.fieldSets)).get(fieldSetEntity.id) if (fieldSetsMap != null && fieldSetsMap.has(fieldSetEntity.id)) {
const propertyDefinitionFieldSet = fieldSetsMap.get(fieldSetEntity.id)
if (propertyDefinitionFieldSet.items != null && propertyDefinitionFieldSet.items.length > 0) { if (propertyDefinitionFieldSet.items != null && propertyDefinitionFieldSet.items.length > 0) {
for (let j = 0; j < propertyDefinitionFieldSet.items.length; j++) { for (let j = 0; j < propertyDefinitionFieldSet.items.length; j++) {
const definitionFieldSetItem = propertyDefinitionFieldSet.items[j]; const definitionFieldSetItem = propertyDefinitionFieldSet.items[j];