diff --git a/dmp-frontend/src/app/ui/dmp/editor/dataset-info/dataset-info.component.ts b/dmp-frontend/src/app/ui/dmp/editor/dataset-info/dataset-info.component.ts
index d8756f2fc..651d65560 100644
--- a/dmp-frontend/src/app/ui/dmp/editor/dataset-info/dataset-info.component.ts
+++ b/dmp-frontend/src/app/ui/dmp/editor/dataset-info/dataset-info.component.ts
@@ -249,7 +249,6 @@ export class DatasetInfoComponent extends BaseComponent implements OnInit {
});
}
onOptionSelected(){
- console.log('this option selected emited');
try{
const profiles = this.formGroup.get('profiles').value as {id:string, label:string}[];
profiles.sort((a,b)=> a.label.localeCompare(b.label));
diff --git a/dmp-frontend/src/app/ui/misc/dataset-description-form/components/form-section/form-section.component.html b/dmp-frontend/src/app/ui/misc/dataset-description-form/components/form-section/form-section.component.html
index 0290daa88..b9926dd1c 100644
--- a/dmp-frontend/src/app/ui/misc/dataset-description-form/components/form-section/form-section.component.html
+++ b/dmp-frontend/src/app/ui/misc/dataset-description-form/components/form-section/form-section.component.html
@@ -78,7 +78,7 @@
-
+
@@ -121,12 +121,15 @@
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 9862c2690..33eb6c076 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
@@ -22,6 +22,7 @@ export class FormSectionComponent implements OnInit, OnChanges {
@Input() pathName: string;
@Input() path: string;
@Input() linkToScroll: LinkToScroll;
+ @Input() hiddenEntriesIds: string[] = [];
//trackByFn = (index, item) => item ? item['id'] : null;
panelExpanded = true;
// sub = true;
diff --git a/dmp-frontend/src/app/ui/misc/dataset-description-form/dataset-description.component.html b/dmp-frontend/src/app/ui/misc/dataset-description-form/dataset-description.component.html
index 9b163a65f..20bf08d41 100644
--- a/dmp-frontend/src/app/ui/misc/dataset-description-form/dataset-description.component.html
+++ b/dmp-frontend/src/app/ui/misc/dataset-description-form/dataset-description.component.html
@@ -21,8 +21,8 @@
-
-
+
+
@@ -34,17 +34,18 @@
-
+
diff --git a/dmp-frontend/src/app/ui/misc/dataset-description-form/dataset-description.component.ts b/dmp-frontend/src/app/ui/misc/dataset-description-form/dataset-description.component.ts
index 2a826fda5..2bd31fc4d 100644
--- a/dmp-frontend/src/app/ui/misc/dataset-description-form/dataset-description.component.ts
+++ b/dmp-frontend/src/app/ui/misc/dataset-description-form/dataset-description.component.ts
@@ -7,7 +7,7 @@ import { DatasetProfileTableOfContentsInternalSection } from '@app/ui/admin/data
import { LinkToScroll } from '@app/ui/misc/dataset-description-form/tableOfContentsMaterial/table-of-contents';
import { VisibilityRulesService } from '@app/ui/misc/dataset-description-form/visibility-rules/visibility-rules.service';
import { BaseComponent } from '@common/base/base.component';
-import { takeUntil } from 'rxjs/operators';
+import { debounceTime, takeUntil } from 'rxjs/operators';
@Component({
selector: 'app-dataset-description',
@@ -29,8 +29,7 @@ export class DatasetDescriptionComponent extends BaseComponent implements OnInit
@Input() TOCENTRY_ID_PREFIX="";
-
- private _form: FormGroup;
+ public hiddenEntriesIds:string[] = [];
constructor(
private visibilityRulesService: VisibilityRulesService,
@@ -50,6 +49,16 @@ export class DatasetDescriptionComponent extends BaseComponent implements OnInit
// }
this.tocentries = this.getTocEntries();
+ this.hiddenEntriesIds = this._findHiddenEntries(this.tocentries);
+
+ this.visibilityRulesService.visibilityChange
+ .pipe(
+ takeUntil(this._destroyed),
+ debounceTime(100)
+ )
+ .subscribe(_=>{
+ this.hiddenEntriesIds = this._findHiddenEntries(this.tocentries);
+ })
}
ngOnChanges(changes: SimpleChanges) {
@@ -153,7 +162,7 @@ export class DatasetDescriptionComponent extends BaseComponent implements OnInit
getTocEntries(): ToCEntry[] {
- if (this.form == null) { return []; }
+ if (!this.form) { return []; }
const result: ToCEntry[] = [];
//build parent pages
@@ -189,6 +198,38 @@ export class DatasetDescriptionComponent extends BaseComponent implements OnInit
return result;
}
+ private _findHiddenEntries(tocentries:ToCEntry[]):string[]{
+ if(!tocentries) return [];
+
+ const invisibleEntries:string[] = []
+ tocentries.forEach(entry=>{
+ if(entry.type === ToCEntryType.FieldSet){
+ const isVisible = this.visibilityRulesService.checkElementVisibility(entry.id);
+ if(!isVisible){
+ invisibleEntries.push(entry.id);
+ }else{
+ //check field inputs
+ const fields = entry.form.get('fields') as FormArray;
+
+ const oneFieldAtLeastIsVisible = fields.controls.some(field=> this.visibilityRulesService.checkElementVisibility(field.get('id').value));
+ if(!oneFieldAtLeastIsVisible){
+ invisibleEntries.push(entry.id);
+ }
+ }
+ }else{
+ const hiddenEntries = this._findHiddenEntries(entry.subEntries);
+
+ if(entry.subEntries&& (entry.subEntries.every(e=> hiddenEntries.includes(e.id)))){
+ //all children all hidden then hide parent node;
+ invisibleEntries.push(entry.id);
+ }else{
+ invisibleEntries.push(...hiddenEntries);
+ }
+ }
+ })
+
+ return invisibleEntries;
+ }
}
export interface ToCEntry {
diff --git a/dmp-frontend/src/app/ui/misc/dataset-description-form/tableOfContentsMaterial/table-of-contents-internal/table-of-contents-internal.html b/dmp-frontend/src/app/ui/misc/dataset-description-form/tableOfContentsMaterial/table-of-contents-internal/table-of-contents-internal.html
index ea3a5c7ad..cb4d8ee58 100644
--- a/dmp-frontend/src/app/ui/misc/dataset-description-form/tableOfContentsMaterial/table-of-contents-internal/table-of-contents-internal.html
+++ b/dmp-frontend/src/app/ui/misc/dataset-description-form/tableOfContentsMaterial/table-of-contents-internal/table-of-contents-internal.html
@@ -1,6 +1,6 @@
-
+
@@ -33,7 +33,8 @@
(entrySelected)="onEntrySelected($event)"
[selected]="selected"
[TOCENTRY_ID_PREFIX]="TOCENTRY_ID_PREFIX"
- [showErrors]="showErrors">
+ [showErrors]="showErrors"
+ [hiddenEntries]="hiddenEntries">
diff --git a/dmp-frontend/src/app/ui/misc/dataset-description-form/tableOfContentsMaterial/table-of-contents-internal/table-of-contents-internal.ts b/dmp-frontend/src/app/ui/misc/dataset-description-form/tableOfContentsMaterial/table-of-contents-internal/table-of-contents-internal.ts
index 0e57e3849..f76b0728d 100644
--- a/dmp-frontend/src/app/ui/misc/dataset-description-form/tableOfContentsMaterial/table-of-contents-internal/table-of-contents-internal.ts
+++ b/dmp-frontend/src/app/ui/misc/dataset-description-form/tableOfContentsMaterial/table-of-contents-internal/table-of-contents-internal.ts
@@ -25,6 +25,7 @@ export class TableOfContentsInternal implements OnInit {
tocEntryTypeEnum = ToCEntryType;
@Input() TOCENTRY_ID_PREFIX="";
@Input() showErrors: boolean = false;
+ @Input() hiddenEntries: string[] =[];
constructor(public visibilityRulesService: VisibilityRulesService){
diff --git a/dmp-frontend/src/app/ui/misc/dataset-description-form/tableOfContentsMaterial/table-of-contents.html b/dmp-frontend/src/app/ui/misc/dataset-description-form/tableOfContentsMaterial/table-of-contents.html
index 75ae05935..a37d53947 100644
--- a/dmp-frontend/src/app/ui/misc/dataset-description-form/tableOfContentsMaterial/table-of-contents.html
+++ b/dmp-frontend/src/app/ui/misc/dataset-description-form/tableOfContentsMaterial/table-of-contents.html
@@ -31,6 +31,7 @@
[showErrors]="showErrors"
(entrySelected)="onToCentrySelected($event)"
[selected]="tocentrySelected"
+ [hiddenEntries]="hiddenEntries"
>
diff --git a/dmp-frontend/src/app/ui/misc/dataset-description-form/tableOfContentsMaterial/table-of-contents.ts b/dmp-frontend/src/app/ui/misc/dataset-description-form/tableOfContentsMaterial/table-of-contents.ts
index 156c622cf..7ba8318d4 100644
--- a/dmp-frontend/src/app/ui/misc/dataset-description-form/tableOfContentsMaterial/table-of-contents.ts
+++ b/dmp-frontend/src/app/ui/misc/dataset-description-form/tableOfContentsMaterial/table-of-contents.ts
@@ -54,8 +54,8 @@ export class TableOfContents extends BaseComponent implements OnInit, OnChanges
private _tocentrySelected:ToCEntry = null;
private _intersectionObserver: IntersectionObserver;
private _actOnObservation: boolean = true;
+ public hiddenEntries:string[] = [];
get tocentrySelected(){
-
return this.hasFocus?this._tocentrySelected: null;
}
set tocentrySelected(value){
@@ -80,9 +80,9 @@ export class TableOfContents extends BaseComponent implements OnInit, OnChanges
.pipe(takeUntil(this._destroyed))
.pipe(debounceTime(200))
.subscribe(_=>{
- // console.log('visibility was changed');
if(this.hasFocus){
this._resetObserver();
+ this.hiddenEntries = this._findHiddenEntries(this.tocentries);
}
})
@@ -90,6 +90,8 @@ export class TableOfContents extends BaseComponent implements OnInit, OnChanges
this.tocentries = this.getTocEntries(this.formGroup.get('datasetProfileDefinition'));
const fg = this.formGroup.get('datasetProfileDefinition');
this.visibilityRulesService.buildVisibilityRules(this.visibilityRules, fg);
+ this.hiddenEntries = this._findHiddenEntries(this.tocentries);
+
}else{
//emit value every 500ms
@@ -154,6 +156,39 @@ export class TableOfContents extends BaseComponent implements OnInit, OnChanges
}
+ private _findHiddenEntries(tocentries:ToCEntry[]):string[]{
+ if(!tocentries) return [];
+
+ const invisibleEntries:string[] = []
+ tocentries.forEach(entry=>{
+ if(entry.type === ToCEntryType.FieldSet){
+ const isVisible = this.visibilityRulesService.checkElementVisibility(entry.id);
+ if(!isVisible){
+ invisibleEntries.push(entry.id);
+ }else{
+ //check field inputs
+ const fields = entry.form.get('fields') as FormArray;
+
+ const oneFieldAtLeastIsVisible = fields.controls.some(field=> this.visibilityRulesService.checkElementVisibility(field.get('id').value));
+ if(!oneFieldAtLeastIsVisible){
+ invisibleEntries.push(entry.id);
+ }
+ }
+ }else{
+ const hiddenEntries = this._findHiddenEntries(entry.subEntries);
+
+ if(entry.subEntries&& (entry.subEntries.every(e=> hiddenEntries.includes(e.id)))){
+ //all children all hidden then hide parent node;
+ invisibleEntries.push(entry.id);
+ }else{
+ invisibleEntries.push(...hiddenEntries);
+ }
+ }
+ })
+
+ return invisibleEntries;
+ }
+
ngOnChanges(changes: SimpleChanges) {
if(this.selectedFieldsetId){
@@ -184,7 +219,6 @@ export class TableOfContents extends BaseComponent implements OnInit, OnChanges
if(this._intersectionObserver){//clean up
this._intersectionObserver.disconnect();
this._intersectionObserver = null;
- // console.log('Clean Up observer');
}
const options = {
@@ -197,8 +231,6 @@ export class TableOfContents extends BaseComponent implements OnInit, OnChanges
if(!this._actOnObservation){
return;
}
- // console.log('observer called for element', entries );
- // console.log('from observer', observer);
entries.forEach(ie=>{
if(ie.isIntersecting){
@@ -206,7 +238,6 @@ export class TableOfContents extends BaseComponent implements OnInit, OnChanges
const target_id = ie.target.id.replace(this.TOCENTRY_ID_PREFIX,'');
if(this.visibilityRulesService.checkElementVisibility(target_id)){
this.tocentrySelected = this._findTocEntryById(target_id,this.tocentries);
- // console.log('target id', target_id);
}
}catch{
@@ -215,7 +246,6 @@ export class TableOfContents extends BaseComponent implements OnInit, OnChanges
})
}, options);
- // console.log('Initializing Intersection Observer');
const fieldsetsEtries = this._getAllFieldSets(this.tocentries);
fieldsetsEtries.forEach(e=>{
@@ -385,7 +415,6 @@ export class TableOfContents extends BaseComponent implements OnInit, OnChanges
onToCentrySelected(entry: ToCEntry){
this.tocentrySelected = entry;
- // console.log('entry selected', entry);
}