diff --git a/dmp-frontend/src/app/ui/misc/dataset-description-form/components/form-section/form-section.component.ts b/dmp-frontend/src/app/ui/misc/dataset-description-form/components/form-section/form-section.component.ts index 18a75fe08..1b2260e2f 100644 --- a/dmp-frontend/src/app/ui/misc/dataset-description-form/components/form-section/form-section.component.ts +++ b/dmp-frontend/src/app/ui/misc/dataset-description-form/components/form-section/form-section.component.ts @@ -209,7 +209,8 @@ export class FormSectionComponent implements OnInit, OnChanges { requiredValue: x.sourceControlValue, type: '' } - this.visibilityRulesService.addNewRule(visRule); + const shouldBeVisibile = this.visibilityRulesService.checkTargetVisibilityProvidedBySource(x.sourceControlId, element.id); + this.visibilityRulesService.addNewRule(visRule, shouldBeVisibile); }); } } diff --git a/dmp-frontend/src/app/ui/misc/dataset-description-form/visibility-rules/visibility-rules.service.ts b/dmp-frontend/src/app/ui/misc/dataset-description-form/visibility-rules/visibility-rules.service.ts index 96859fffb..d902e51a3 100644 --- a/dmp-frontend/src/app/ui/misc/dataset-description-form/visibility-rules/visibility-rules.service.ts +++ b/dmp-frontend/src/app/ui/misc/dataset-description-form/visibility-rules/visibility-rules.service.ts @@ -333,18 +333,39 @@ export class VisibilityRulesService { } - public addNewRule(rule: Rule): void { + public addNewRule(rule: Rule, currentVisibility = this.DEFAULTVISIBILITY): void { const targetId = rule.targetField; const sourceId = rule.sourceField; this.visibilityRuleContext.addToVisibilityRulesContext(rule); - const visibilityMap = this.elementComputationalMap.get(targetId) ? this.elementComputationalMap.get(targetId) : new Map(); - visibilityMap.set(sourceId, this.DEFAULTVISIBILITY); + let visibilityMap = this.elementComputationalMap.get(targetId); + + if(!visibilityMap){ + visibilityMap = new Map(); + this.elementComputationalMap.set(targetId, visibilityMap); + } + + visibilityMap.set(sourceId, currentVisibility); const isVisible = this._computeVisibility(targetId); this._emitChangesIfNeeded(targetId, isVisible); this.elementVisibilityMap.set(targetId, isVisible); } + + + /** + * Check what sourceId hides or shows the target field + * return true if no rule found + */ + public checkTargetVisibilityProvidedBySource(sourceId: string, targetId: string): boolean{ + + const computationalMap = this.elementComputationalMap.get(targetId); + if(computationalMap){ + return !!computationalMap.get(sourceId); + } + + return true; + } }