diff --git a/dmp-frontend/src/app/ui/admin/dataset-profile/editor/dataset-profile-editor.component.html b/dmp-frontend/src/app/ui/admin/dataset-profile/editor/dataset-profile-editor.component.html index 7e2d68881..2ec9eb3db 100644 --- a/dmp-frontend/src/app/ui/admin/dataset-profile/editor/dataset-profile-editor.component.html +++ b/dmp-frontend/src/app/ui/admin/dataset-profile/editor/dataset-profile-editor.component.html @@ -165,7 +165,6 @@
-
1.4 {{'DATASET-PROFILE-EDITOR.STEPS.GENERAL-INFO.DATASET-TEMPLATE-USERS'| translate}}
@@ -179,13 +178,11 @@ @@ -197,18 +194,11 @@
- - -
- - - -
- - +
+ + + +
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); }
{{user.name}} {{user.email}} -
- {{'DATASET-PROFILE-EDITOR.STEPS.GENERAL-INFO.DATASET-TEMPLATE-NO-USERS-YET' | translate}}