diff --git a/dmp-admin/src/app/rule-component/rule.component.html b/dmp-admin/src/app/rule-component/rule.component.html index cd6928e4b..7ddb10c84 100644 --- a/dmp-admin/src/app/rule-component/rule.component.html +++ b/dmp-admin/src/app/rule-component/rule.component.html @@ -1,17 +1,17 @@
-
+
-
+
-
+ + +
diff --git a/dmp-frontend/src/app/form/dynamic-form.component.html b/dmp-frontend/src/app/form/dynamic-form.component.html index 56c5ca811..8b1c3b3f1 100644 --- a/dmp-frontend/src/app/form/dynamic-form.component.html +++ b/dmp-frontend/src/app/form/dynamic-form.component.html @@ -1,5 +1,5 @@ 
- + @@ -7,9 +7,8 @@
-
- +
diff --git a/dmp-frontend/src/app/form/dynamic-form.component.ts b/dmp-frontend/src/app/form/dynamic-form.component.ts index 2ef455627..ee7086f98 100644 --- a/dmp-frontend/src/app/form/dynamic-form.component.ts +++ b/dmp-frontend/src/app/form/dynamic-form.component.ts @@ -61,13 +61,13 @@ export class DynamicFormComponent implements OnInit { id: string; datasetId: string; pathName: string; - pages: Set; + pages: Array; stepperItems: MenuItem[] = new Array(); activeStepperIndex: number = 1; visibleSidebar: boolean = false; private progressbar: boolean = false; - private currentPage: number = 0; + private currentPageIndex: number = 0; private fragment: string; constructor(private serverService: ServerService, private router: Router, private pdfService: PDFService, @@ -86,8 +86,8 @@ export class DynamicFormComponent implements OnInit { this.serverService.getSingleDataset(this.datasetId).subscribe( response => { - this.dataModel = new JsonSerializer().fromJSONObject(response, DatasetModel); - this.pages = this.getPages(this.dataModel); + this.dataModel = new JsonSerializer().fromJSONObject(response, DatasetModel); + this.pages = this.getPages(this.dataModel); this.createPagination(); this.form = this.dataModel.buildForm(); this.visibilityRulesService.formGroup = this.form; @@ -96,16 +96,13 @@ export class DynamicFormComponent implements OnInit { this.progressbar = true; this.route.fragment.subscribe((fragment: string) => { - if (fragment && document.querySelector('#' + fragment)) { - document.querySelector('#' + fragment).scrollIntoView(); - this.visibleSidebar = true; - } + //if (fragment) + this.scrollTo(fragment); }); - + this.route.queryParams.subscribe((params) => { - if (params && "page" in params && !isNaN(params["page"])) - this.currentPage = Number.parseInt(params["page"]); - //this.visibleSidebar = true; + if (params && "page" in params) + this.changeCurrentPage(params["page"]); }); }, error => { @@ -132,16 +129,18 @@ export class DynamicFormComponent implements OnInit { this.visibleSidebar = !this.visibleSidebar; } - getPages(model: DatasetModel): Set { - let pageSet = new Set(); - model.sections.forEach(section => { - pageSet.add(section.page); - }) - return pageSet; + getPages(model: DatasetModel): Array { + let pageSet = new Set(); + + model.sections.forEach(section => { + pageSet.add(section.page); + }); + + return Array.from(pageSet).sort((a, b) => a - b); } shouldDisplaySection(section: Section): Boolean { - return (section.page - 1) == this.currentPage; + return (section.page) == this.pages[this.currentPageIndex]; } createPagination() { @@ -151,6 +150,29 @@ export class DynamicFormComponent implements OnInit { }) }); } + + changePageIndex(index: any) { + this.router.navigate([this.route.snapshot.url[0] + "/" + this.route.snapshot.url[1]], { queryParams: { page: this.pages[index] } }); + } + + scrollTo(sectionID: string) { + if (!sectionID) return; + var element = document.querySelector('#' + sectionID); + if (!element) return; + element.scrollIntoView(); + // this.visibleSidebar = true; + //var scrollElement = document.querySelector('.scrollableContent'); + //scrollElement.scrollTop = topElement.offsetTop; + } + + changeCurrentPage(pageString: string) { + if (!pageString) return; + var page = parseInt(pageString); + if (isNaN(page)) return; + var pageIndex = this.pages.indexOf(page); + if (pageIndex === -1) return; + this.currentPageIndex = pageIndex; + } /* scrollToElemID(elemID) { scroll("#" + elemID); } diff --git a/dmp-frontend/src/app/form/pprogress-bar/progress-bar.component.html b/dmp-frontend/src/app/form/pprogress-bar/progress-bar.component.html index d5a44901a..4a2877387 100644 --- a/dmp-frontend/src/app/form/pprogress-bar/progress-bar.component.html +++ b/dmp-frontend/src/app/form/pprogress-bar/progress-bar.component.html @@ -1 +1 @@ - + \ No newline at end of file diff --git a/dmp-frontend/src/app/models/DefaultValue.ts b/dmp-frontend/src/app/models/DefaultValue.ts new file mode 100644 index 000000000..470622aed --- /dev/null +++ b/dmp-frontend/src/app/models/DefaultValue.ts @@ -0,0 +1,24 @@ +import { BaseModel } from './BaseModel'; +import { FormGroup } from '@angular/forms'; +import { FormGenerator } from './interfaces/FormGenerator'; +import { Serializable } from './interfaces/Serializable'; + +export class DefaultValue extends BaseModel implements Serializable, FormGenerator{ + public type: string; + public value: string; + + fromJSONObject(item: any): DefaultValue { + this.type = item.type; + this.value = item.value; + return this; + } + + buildForm(): FormGroup { + let formGroup = this.formBuilder.group({ + type: [this.type], + value: [this.value] + + }); + return formGroup; + } +} \ No newline at end of file diff --git a/dmp-frontend/src/app/models/Field.ts b/dmp-frontend/src/app/models/Field.ts index 12f41af5c..0b11ebea1 100644 --- a/dmp-frontend/src/app/models/Field.ts +++ b/dmp-frontend/src/app/models/Field.ts @@ -4,11 +4,13 @@ import { FormGenerator } from './interfaces/FormGenerator'; import { JsonSerializer } from '../utilities/JsonSerializer'; import { Serializable } from './interfaces/Serializable'; import { Multiplicity } from './Multiplicity'; +import { DefaultValue } from './DefaultValue'; export class Field extends BaseModel implements Serializable, FormGenerator{ public id: string; public title: string; public value: string; + public defaultValue: DefaultValue; public description: string; public extendedDescription: string; public viewStyle: string; @@ -17,16 +19,19 @@ export class Field extends BaseModel implements Serializable, FormGenerat public multiplicity: Multiplicity; public multiplicityItems: Array = new Array(); public data: any; + fromJSONObject(item: any): Field { this.id = item.id; this.title = item.title; - this.value = item.value; + //this.value = item.value; this.description = item.description; this.extendedDescription = item.extendedDescription; this.viewStyle = item.viewStyle; this.defaultVisibility = item.defaultVisibility; this.page = item.page; //this.multiplicity = new JsonSerializer().fromJSONObject(item.multiplicity, Multiplicity); + this.defaultValue = new JsonSerializer().fromJSONObject(item.defaultValue, DefaultValue); + this.value = this.defaultValue.value && !item.value? this.defaultValue.value: item.value; this.multiplicity = new Multiplicity(); this.multiplicity.max = 2; this.multiplicityItems = new JsonSerializer().fromJSONArray(item.multiplicityItems, Field);