diff --git a/dmp-frontend/src/app/ui/dataset/dataset-wizard/dataset-wizard.component.html b/dmp-frontend/src/app/ui/dataset/dataset-wizard/dataset-wizard.component.html index 0fd3866d0..88d809b46 100644 --- a/dmp-frontend/src/app/ui/dataset/dataset-wizard/dataset-wizard.component.html +++ b/dmp-frontend/src/app/ui/dataset/dataset-wizard/dataset-wizard.component.html @@ -2,9 +2,8 @@

{{ 'DATASET-WIZARD.TITLE.NEW' | translate }}

-

{{datasetWizardModel?.label}} {{ 'GENERAL.NAMES.DATASET' | translate }}

-

- {{ 'GENERAL.STATUSES.EDIT' | translate }}

-

- {{'GENERAL.STATUSES.FINALISED' | translate }}

+

{{datasetWizardModel?.label}} {{ 'GENERAL.NAMES.DATASET' | translate }} - {{ 'GENERAL.STATUSES.EDIT' | translate }}

+

{{'GENERAL.STATUSES.FINALISED' | translate }}

diff --git a/dmp-frontend/src/app/ui/dataset/dataset-wizard/dataset-wizard.component.ts b/dmp-frontend/src/app/ui/dataset/dataset-wizard/dataset-wizard.component.ts index 2f9771b16..f51f72ea8 100644 --- a/dmp-frontend/src/app/ui/dataset/dataset-wizard/dataset-wizard.component.ts +++ b/dmp-frontend/src/app/ui/dataset/dataset-wizard/dataset-wizard.component.ts @@ -31,7 +31,7 @@ import { SnackBarNotificationLevel, UiNotificationService } from '../../../core/ templateUrl: 'dataset-wizard.component.html', styleUrls: ['./dataset-wizard.component.scss'] }) -export class DatasetWizardComponent extends BaseComponent implements OnInit, AfterViewInit, IBreadCrumbComponent { +export class DatasetWizardComponent extends BaseComponent implements OnInit, IBreadCrumbComponent { breadCrumbs: Observable; viewOnly = false; @@ -194,21 +194,19 @@ export class DatasetWizardComponent extends BaseComponent implements OnInit, Aft .pipe(takeUntil(this._destroyed)) .subscribe(x => { if (x) { this.loadDatasetProfiles(); } - else{ - this.availableProfiles=[]; + else { + this.availableProfiles = []; this.formGroup.get('profile').reset(); } - + }); } - } - ngAfterViewInit() { this.route.params .pipe(takeUntil(this._destroyed)) .subscribe((params: Params) => { const itemId = params['id']; - if (itemId != null) { this.stepper.selectedIndex = 2; } + if (itemId != null) { setTimeout(()=> this.stepper.selectedIndex = 2); } }); } @@ -237,7 +235,7 @@ export class DatasetWizardComponent extends BaseComponent implements OnInit, Aft } getDefinition() { - if (this.formGroup.invalid) { this.stepper.selectedIndex = 0; return; } + if (this.formGroup.invalid) { setTimeout(()=> this.stepper.selectedIndex = 0); return; } if (this.isNew) { this.datasetWizardService.getDefinition(this.formGroup.get('profile').value) .pipe(takeUntil(this._destroyed)) diff --git a/dmp-frontend/src/app/ui/misc/dataset-description-form/components/form-composite-field/form-composite-field.component.html b/dmp-frontend/src/app/ui/misc/dataset-description-form/components/form-composite-field/form-composite-field.component.html index 4f52c1b06..67b973e45 100644 --- a/dmp-frontend/src/app/ui/misc/dataset-description-form/components/form-composite-field/form-composite-field.component.html +++ b/dmp-frontend/src/app/ui/misc/dataset-description-form/components/form-composite-field/form-composite-field.component.html @@ -1,29 +1,29 @@ -
+
-
+
-
{{compositeField.numbering}} {{compositeField.title}} +
{{form.get('numbering').value}} {{form.get('title').value}}
-
{{compositeField.description}}
-
- {{compositeField.extendedDescription}} +
{{form.get('description').value}}
+
+ {{form.get('extendedDescription').value}}
- +
-
+
-
{{compositeField.numbering}} {{compositeField.title}}
-
{{compositeField.description}}
-
- {{compositeField.extendedDescription}} +
{{form.get('numbering').value}} {{form.get('title').value}}
+
{{form.get('description').value}}
+
+ {{form.get('extendedDescription').value}}
-
+
-
+
Add one more field + @@ -31,10 +31,10 @@
- -
-
- + +
+
+
diff --git a/dmp-frontend/src/app/ui/misc/dataset-description-form/components/form-composite-field/form-composite-field.component.ts b/dmp-frontend/src/app/ui/misc/dataset-description-form/components/form-composite-field/form-composite-field.component.ts index bd04a60f5..54106ac10 100644 --- a/dmp-frontend/src/app/ui/misc/dataset-description-form/components/form-composite-field/form-composite-field.component.ts +++ b/dmp-frontend/src/app/ui/misc/dataset-description-form/components/form-composite-field/form-composite-field.component.ts @@ -8,27 +8,27 @@ import { VisibilityRulesService } from '../../visibility-rules/visibility-rules. templateUrl: './form-composite-field.component.html', styleUrls: ['./form-composite-field.component.scss'] }) -export class FormCompositeFieldComponent implements OnInit { +export class FormCompositeFieldComponent { - @Input() compositeField: DatasetDescriptionCompositeFieldEditorModel; - form: FormGroup; - trackByFn = (index, item) => item ? item['id'] : null; + // @Input() compositeField: DatasetDescriptionCompositeFieldEditorModel; + @Input() form: FormGroup; + //trackByFn = (index, item) => item ? item['id'] : null; constructor( - private visibilityRulesService: VisibilityRulesService, + public visibilityRulesService: VisibilityRulesService, //private markForConsiderationService: MarkForConsiderationService, ) { } - ngOnInit() { - if (this.compositeField) { - this.form = this.visibilityRulesService.getFormGroup(this.compositeField.id); - } - } + // ngOnInit() { + // if (this.compositeField) { + // this.form = this.visibilityRulesService.getFormGroup(this.compositeField.id); + // } + // } addMultipleField(fieldIndex: number) { - const field: DatasetDescriptionFieldEditorModel = this.compositeField.fields[fieldIndex].cloneForMultiplicity(fieldIndex, ''); - this.compositeField.fields[fieldIndex].multiplicityItems.push(field); + // const field: DatasetDescriptionFieldEditorModel = this.compositeField.fields[fieldIndex].cloneForMultiplicity(fieldIndex, ''); + // this.compositeField.fields[fieldIndex].multiplicityItems.push(field); ((this.form.get('fields').get('' + fieldIndex).get('multiplicityItems'))).push(field.buildForm()); } diff --git a/dmp-frontend/src/app/ui/misc/dataset-description-form/components/form-field/form-field.component.html b/dmp-frontend/src/app/ui/misc/dataset-description-form/components/form-field/form-field.component.html index a4943b0af..625a35701 100644 --- a/dmp-frontend/src/app/ui/misc/dataset-description-form/components/form-field/form-field.component.html +++ b/dmp-frontend/src/app/ui/misc/dataset-description-form/components/form-field/form-field.component.html @@ -1,27 +1,26 @@ -
+
- -
{{field.description}}
-
{{field.extendedDescription}}
+
{{this.form.get('description').value}}
+
{{this.form.get('extendedDescription').value}}
- + {{'GENERAL.VALIDATION.REQUIRED' | translate}}
- + {{'GENERAL.VALIDATION.REQUIRED' | translate}} - - - {{opt.label}} + + + {{opt.label}} {{'GENERAL.VALIDATION.REQUIRED' | translate}} @@ -29,11 +28,11 @@
- {{field.data.label}} + {{form.get('data').value.label}}
- + @@ -41,16 +40,16 @@
- - Yes + + Yes - No + No
- - {{option.label}} + + {{option.label}}
diff --git a/dmp-frontend/src/app/ui/misc/dataset-description-form/components/form-field/form-field.component.ts b/dmp-frontend/src/app/ui/misc/dataset-description-form/components/form-field/form-field.component.ts index b85f5982c..51dc3a48b 100644 --- a/dmp-frontend/src/app/ui/misc/dataset-description-form/components/form-field/form-field.component.ts +++ b/dmp-frontend/src/app/ui/misc/dataset-description-form/components/form-field/form-field.component.ts @@ -1,11 +1,9 @@ import { Component, Input, OnInit } from '@angular/core'; import { FormGroup } from '@angular/forms'; -import { Subscription } from 'rxjs'; import { takeUntil } from 'rxjs/operators'; import { BaseComponent } from '../../../../../core/common/base/base.component'; import { DatasetProfileComboBoxType } from '../../../../../core/common/enum/dataset-profile-combo-box-type'; import { DatasetProfileFieldViewStyle } from '../../../../../core/common/enum/dataset-profile-field-view-style'; -import { Field } from '../../../../../core/model/dataset-profile-definition/field'; import { DatasetExternalAutocompleteCriteria } from '../../../../../core/query/dataset/daatset-external-autocomplete-criteria'; import { RequestItem } from '../../../../../core/query/request-item'; import { DatasetExternalAutocompleteService } from '../../../../../core/services/dataset/dataset-external-autocomplete.service'; @@ -18,11 +16,11 @@ import { VisibilityRulesService } from '../../visibility-rules/visibility-rules. styleUrls: ['./form-field.component.scss'] }) export class FormFieldComponent extends BaseComponent implements OnInit { - @Input() field: Field; - form: FormGroup; + // @Input() field: Field; + @Input() form: FormGroup; - change: Subscription; - trackByFn = (index, item) => item ? item['id'] : null; + // change: Subscription; + // trackByFn = (index, item) => item ? item['id'] : null; public singleAutoCompleteConfiguration: SingleAutoCompleteConfiguration; datasetProfileFieldViewStyleEnum = DatasetProfileFieldViewStyle; @@ -34,31 +32,31 @@ export class FormFieldComponent extends BaseComponent implements OnInit { ) { super(); } ngOnInit() { - if (this.field) { + //if (this.field) { - // Setup autocomplete configuration if needed - if (this.field.viewStyle.renderStyle === DatasetProfileFieldViewStyle.ComboBox && this.field.data.type === DatasetProfileComboBoxType.Autocomplete) { - this.singleAutoCompleteConfiguration = { - filterFn: this.searchFromAutocomplete.bind(this), - initialItems: (extraData) => this.searchFromAutocomplete(''), - displayFn: (item) => item['label'], - titleFn: (item) => item['label'] - }; - } - - this.form = this.visibilityRulesService.getFormGroup(this.field.id); - this.change = this.form.get('value').valueChanges - .pipe(takeUntil(this._destroyed)) - .subscribe(item => { - this.visibilityRulesService.updateValueAndVisibility(this.field.id); - }); + // Setup autocomplete configuration if needed + if (this.form.get('viewStyle').value.renderStyle === DatasetProfileFieldViewStyle.ComboBox && this.form.get('data').value.type === DatasetProfileComboBoxType.Autocomplete) { + this.singleAutoCompleteConfiguration = { + filterFn: this.searchFromAutocomplete.bind(this), + initialItems: (extraData) => this.searchFromAutocomplete(''), + displayFn: (item) => item['label'], + titleFn: (item) => item['label'] + }; } + + // this.form = this.visibilityRulesService.getFormGroup(this.field.id); + this.form.get('value').valueChanges + .pipe(takeUntil(this._destroyed)) + .subscribe(item => { + this.visibilityRulesService.updateValueAndVisibility(this.form.get('id').value, item); + }); } + // } searchFromAutocomplete(query: string) { const autocompleteRequestItem: RequestItem = new RequestItem(); autocompleteRequestItem.criteria = new DatasetExternalAutocompleteCriteria(); - autocompleteRequestItem.criteria.fieldID = this.field.id; + autocompleteRequestItem.criteria.fieldID = this.form.get('id').value; //TODO: why do we need dataset id? //autocompleteRequestItem.criteria.profileID = this.datasetId; return this.datasetExternalAutocompleteService.queryAutocomplete(autocompleteRequestItem); 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 65f26c7e2..f13b8bc13 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 @@ -1,41 +1,42 @@ -
+
-
{{section.numbering}} {{section.title}}
+
{{form.get('numbering').value}} {{form.get('title').value}}
-

{{section.description}}

+

{{form.get('description').value}}

-
-
-
-
-
-
- +
+
+
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 a55e30d8c..82c1c5275 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 @@ -12,43 +12,37 @@ import { VisibilityRulesService } from '../../visibility-rules/visibility-rules. }) export class FormSectionComponent implements OnInit, AfterViewInit { - @Input() section: DatasetDescriptionSectionEditorModel; - form: FormGroup; + // @Input() section: DatasetDescriptionSectionEditorModel; + @Input() form: FormGroup; @Input() pathName: string; @Input() path: string; - trackByFn = (index, item) => item ? item['id'] : null; + //trackByFn = (index, item) => item ? item['id'] : null; constructor( private visibilityRulesService: VisibilityRulesService, private formFocusService: FormFocusService ) { } ngOnInit() { - if (this.section) { - this.form = this.visibilityRulesService.getFormGroup(this.section.id); - } + // if (this.section) { + // this.form = this.visibilityRulesService.getFormGroup(this.section.id); + // } } - ngAfterViewInit() { - this.visibilityRulesService.triggerVisibilityEvaluation(); - } + // ngAfterViewInit() { + // this.visibilityRulesService.triggerVisibilityEvaluation(); + // } - addMultipleField(fieldsetIndex: number) { - const compositeField: DatasetDescriptionCompositeFieldEditorModel = this.section.compositeFields[fieldsetIndex].cloneForMultiplicity(fieldsetIndex); - this.section.compositeFields[fieldsetIndex].multiplicityItems.push(compositeField); - ((this.form.get('compositeFields').get('' + fieldsetIndex).get('multiplicityItems'))).push(compositeField.buildForm()); - } + // addMultipleField(fieldsetIndex: number) { + // const compositeField: DatasetDescriptionCompositeFieldEditorModel = this.section.compositeFields[fieldsetIndex].cloneForMultiplicity(fieldsetIndex); + // this.section.compositeFields[fieldsetIndex].multiplicityItems.push(compositeField); + // ((this.form.get('compositeFields').get('' + fieldsetIndex).get('multiplicityItems'))).push(compositeField.buildForm()); + // } - isElementVisible(fieldSet: CompositeField): boolean { - if (!fieldSet) { return false; } - for (let i = 0; i < fieldSet.fields.length; i++) { - if (fieldSet.fields[i]) { - return true; - } - } - return false; - } + // isElementVisible(fieldSet: CompositeField): boolean { + // return fieldSet && fieldSet.fields && fieldSet.fields.length > 0 + // } - next(compositeField: CompositeField) { - this.formFocusService.focusNext(compositeField); - } + // next(compositeField: CompositeField) { + // this.formFocusService.focusNext(compositeField); + // } } diff --git a/dmp-frontend/src/app/ui/misc/dataset-description-form/dataset-description-form.component.html b/dmp-frontend/src/app/ui/misc/dataset-description-form/dataset-description-form.component.html index ec6c4e87d..346328818 100644 --- a/dmp-frontend/src/app/ui/misc/dataset-description-form/dataset-description-form.component.html +++ b/dmp-frontend/src/app/ui/misc/dataset-description-form/dataset-description-form.component.html @@ -2,14 +2,14 @@
-
+
-
-
- - {{page.title}} +
+
+ + {{pageFormGroup.get('title').value}}
- +
diff --git a/dmp-frontend/src/app/ui/misc/dataset-description-form/dataset-description-form.component.ts b/dmp-frontend/src/app/ui/misc/dataset-description-form/dataset-description-form.component.ts index e062af7a5..e23bdf4b9 100644 --- a/dmp-frontend/src/app/ui/misc/dataset-description-form/dataset-description-form.component.ts +++ b/dmp-frontend/src/app/ui/misc/dataset-description-form/dataset-description-form.component.ts @@ -21,22 +21,21 @@ import { VisibilityRulesService } from './visibility-rules/visibility-rules.serv }) export class DatasetDescriptionFormComponent extends BaseComponent implements OnInit, AfterViewInit { - pathName: string; - pages: Array; - activeStepperIndex = 1; - visibleSidebar = false; - datasetProfileDefinitionModel: DatasetDescriptionFormEditorModel; - private currentPageIndex = 0; - @ViewChild('stepper') stepper: MatStepper; + // pathName: string; + // pages: Array; + // activeStepperIndex = 1; + // visibleSidebar = false; + // datasetProfileDefinitionModel: DatasetDescriptionFormEditorModel; + // private currentPageIndex = 0; + // @ViewChild('stepper') stepper: MatStepper; - @Input() dataModel: DatasetProfileDefinitionModel; + // //@Input() dataModel: DatasetProfileDefinitionModel; @Input() path: string; @Input() form: FormGroup; - id: string; - trackByFn = (index, item) => item ? item['id'] : null; - pageTrackByFn = (index, item) => item['id']; - - // @Input() datasetId: string; + @Input() visibilityRules: Rule[] = []; + // id: string; + // trackByFn = (index, item) => item ? item['id'] : null; + // pageTrackByFn = (index, item) => item['id']; constructor( private router: Router, @@ -48,78 +47,77 @@ export class DatasetDescriptionFormComponent extends BaseComponent implements On //this.datasetId = route.snapshot.params['id']; } - getSubForm(subformName) { - return this.form.controls[subformName]; - } + // getSubForm(subformName) { + // return this.form.controls[subformName]; + // } ngOnInit() { - const rules: Rule[] = this.dataModel.rules; this.visibilityRulesService.formGroup = this.form; - this.visibilityRulesService.buildVisibilityRules(rules); - this.datasetProfileDefinitionModel = new DatasetDescriptionFormEditorModel().fromModel(this.dataModel); - this.visibilityRulesService.setModel(this.datasetProfileDefinitionModel); + this.visibilityRulesService.buildVisibilityRules(this.visibilityRules); + // this.datasetProfileDefinitionModel = new DatasetDescriptionFormEditorModel().fromModel(this.dataModel); + // this.visibilityRulesService.setModel(this.datasetProfileDefinitionModel); - this.createPagination(); + // this.createPagination(); - const sections: Pair[] = this.datasetProfileDefinitionModel.pages.map(page => new Pair(page.sections, page.ordinal)).filter(x => x); - const compositeFields: Pair[] = sections.map(section => new Pair(section.left.flatMap(sec => sec.compositeFields), section.right)).filter(x => x); - const nestedSections: Pair[] = sections.map(section => new Pair(section.left.flatMap(x => x.sections), section.right)).filter(x => x); - const nestedCompositeFields: Pair[] = nestedSections.map(section => new Pair(section.left.flatMap(x => x.compositeFields), section.right)).filter(x => x); - const compositeFieldsUnion: Pair[] = compositeFields.concat(nestedCompositeFields); + // const sections: Pair[] = this.datasetProfileDefinitionModel.pages.map(page => new Pair(page.sections, page.ordinal)).filter(x => x); + // const compositeFields: Pair[] = sections.map(section => new Pair(section.left.flatMap(sec => sec.compositeFields), section.right)).filter(x => x); + // const nestedSections: Pair[] = sections.map(section => new Pair(section.left.flatMap(x => x.sections), section.right)).filter(x => x); + // const nestedCompositeFields: Pair[] = nestedSections.map(section => new Pair(section.left.flatMap(x => x.compositeFields), section.right)).filter(x => x); + // const compositeFieldsUnion: Pair[] = compositeFields.concat(nestedCompositeFields); //const fields = compositeFieldsUnion.flatJoinOn(x => x.right); - this.formFocusService.setFields(compositeFieldsUnion); - this.route.fragment - .pipe(takeUntil(this._destroyed)) - .subscribe((fragment: string) => { - const self = this; - setTimeout(function () { self.scrollTo(fragment); }); - }); + //this.formFocusService.setFields(compositeFieldsUnion); + // this.route.fragment + // .pipe(takeUntil(this._destroyed)) + // .subscribe((fragment: string) => { + // const self = this; + // setTimeout(function () { self.scrollTo(fragment); }); + // }); } ngAfterViewInit() { - this.visibilityRulesService.triggerVisibilityEvaluation(); - this.route.queryParams - .pipe(takeUntil(this._destroyed)) - .subscribe((params) => { - if (params && 'page' in params) { - this.changeCurrentPage(params['page']); - } - }); + //this.visibilityRulesService.triggerVisibilityEvaluation(); + // this.route.queryParams + // .pipe(takeUntil(this._destroyed)) + // .subscribe((params) => { + // if (params && 'page' in params) { + // this.changeCurrentPage(params['page']); + // } + // }); } - toggleSidebar() { - this.visibleSidebar = !this.visibleSidebar; - } + // toggleSidebar() { + // this.visibleSidebar = !this.visibleSidebar; + // } - shouldDisplaySection(section: Section): Boolean { - return (section.page) === this.currentPageIndex; - } + // shouldDisplaySection(section: Section): Boolean { + // return (section.page) === this.currentPageIndex; + // } - createPagination() { + // createPagination() { - } + // } - changePageIndex(index: any) { - this.router.navigate([this.route.snapshot.url[0] + '/' + this.route.snapshot.url[1]], { queryParams: { page: this.pages[index - 1] } }); - } + // changePageIndex(index: any) { + // this.router.navigate([this.route.snapshot.url[0] + '/' + this.route.snapshot.url[1]], { queryParams: { page: this.pages[index - 1] } }); + // } - scrollTo(sectionID: string) { - if (!sectionID) { return; } - const element = document.querySelector('#' + sectionID); - if (!element) { return; } - element.scrollIntoView(); - this.visibleSidebar = true; - } + // scrollTo(sectionID: string) { + // if (!sectionID) { return; } + // const element = document.querySelector('#' + sectionID); + // if (!element) { return; } + // element.scrollIntoView(); + // this.visibleSidebar = true; + // } - changeCurrentPage(pageString: string) { - //if (!pageString) { return; } - const page = parseInt(pageString); - /*if (isNaN(page)) { return; } - const pageIndex = this.pages.indexOf(page); - if (pageIndex === -1) { return; }*/ - this.stepper.selectedIndex = page; - } + // changeCurrentPage(pageString: string) { + // //if (!pageString) { return; } + // const page = parseInt(pageString); + // /*if (isNaN(page)) { return; } + // const pageIndex = this.pages.indexOf(page); + // if (pageIndex === -1) { return; }*/ + // this.stepper.selectedIndex = page; + // } } diff --git a/dmp-frontend/src/app/ui/misc/dataset-description-form/dataset-description-form.model.ts b/dmp-frontend/src/app/ui/misc/dataset-description-form/dataset-description-form.model.ts index 446d63a58..cb2517f49 100644 --- a/dmp-frontend/src/app/ui/misc/dataset-description-form/dataset-description-form.model.ts +++ b/dmp-frontend/src/app/ui/misc/dataset-description-form/dataset-description-form.model.ts @@ -1,5 +1,6 @@ -import { FormBuilder, FormGroup, Validators } from "@angular/forms"; +import { FormBuilder, FormControl, FormGroup, Validators } from "@angular/forms"; import { ValidationType } from "../../../core/common/enum/validation-type"; +import { BaseFormModel } from "../../../core/model/base-form-model"; import { CompositeField } from "../../../core/model/dataset-profile-definition/composite-field"; import { DatasetProfileDefinitionModel } from "../../../core/model/dataset-profile-definition/dataset-profile-definition"; import { DefaultValue } from "../../../core/model/dataset-profile-definition/default-value"; @@ -9,7 +10,6 @@ import { Page } from "../../../core/model/dataset-profile-definition/page"; import { Rule } from "../../../core/model/dataset-profile-definition/rule"; import { Section } from "../../../core/model/dataset-profile-definition/section"; import { ViewStyle } from "../../../core/model/dataset-profile-definition/view-style"; -import { BaseFormModel } from "../../../core/model/base-form-model"; export class DatasetDescriptionFormEditorModel extends BaseFormModel { @@ -57,6 +57,7 @@ export class DatasetDescriptionPageEditorModel extends BaseFormModel { sectionsFormArray.push(form); }); formGroup.addControl('sections', this.formBuilder.array(sectionsFormArray)); + formGroup.addControl('title', new FormControl({ value: this.title, disabled: true })); return formGroup; } } @@ -104,6 +105,10 @@ export class DatasetDescriptionSectionEditorModel extends BaseFormModel { } formGroup.addControl('compositeFields', this.formBuilder.array(compositeFieldsFormArray)); formGroup.addControl('sections', this.formBuilder.array(sectionsFormArray)); + formGroup.addControl('description', new FormControl({ value: this.description, disabled: true })); + formGroup.addControl('numbering', new FormControl({ value: this.numbering, disabled: true })); + formGroup.addControl('title', new FormControl({ value: this.title, disabled: true })); + formGroup.addControl('id', new FormControl({ value: this.title, disabled: true })); return formGroup; } } @@ -142,11 +147,13 @@ export class DatasetDescriptionCompositeFieldEditorModel extends BaseFormModel { const formGroup = this.formBuilder.group({ id: this.id, ordinal: this.ordinal, - title: this.title, - description: this.description, extendedDescription: this.extendedDescription, hasCommentField: this.hasCommentField, - commentFieldValue: this.commentFieldValue + commentFieldValue: this.commentFieldValue, + multiplicity: [{ value: this.multiplicity, disabled: true }], + title: [{ value: this.title, disabled: true }], + description: [{ value: this.description, disabled: true }], + numbering: [{ value: this.numbering, disabled: true }], }); const fieldsFormArray = new Array(); @@ -223,9 +230,13 @@ export class DatasetDescriptionFieldEditorModel extends BaseFormModel { } const formGroup = this.formBuilder.group({ - id: [this.id], - data: [this.data], - value: [this.value, this.validationRequired === true ? Validators.required : null] + value: [this.value, this.validationRequired === true ? Validators.required : null], + id: [{ value: this.id, disabled: true }], + viewStyle: [{ value: this.viewStyle, disabled: true }], + data: [{ value: this.data, disabled: true }], + validationRequired: [{ value: this.validationRequired, disabled: true }], + description: [{ value: this.description, disabled: true }], + extendedDescription: [{ value: this.extendedDescription, disabled: true }], }); const multiplicityItemsFormArray = new Array(); 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 08949891c..617883b00 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 @@ -1,6 +1,4 @@ import { ApplicationRef, Injectable, NgZone } from '@angular/core'; -import { FormGroup } from '@angular/forms'; -import { DatasetProfileDefinitionModel } from '../../../../core/model/dataset-profile-definition/dataset-profile-definition'; import { Rule } from '../../../../core/model/dataset-profile-definition/rule'; import { VisibilityRule } from './models/visibility-rule'; import { VisibilityRulesContext } from './models/visibility-rules-context'; @@ -8,12 +6,12 @@ import { VisibilityRulesContext } from './models/visibility-rules-context'; @Injectable() export class VisibilityRulesService { - public formGroup: FormGroup; + // public formGroup: FormGroup; private visibilityRuleContext: VisibilityRulesContext; - private fieldsPathMemory: any = {}; + // private fieldsPathMemory: any = {}; private elementVisibilityMap = new Map(); - private initialModel: DatasetProfileDefinitionModel; - private currentModel: DatasetProfileDefinitionModel; + // private initialModel: DatasetProfileDefinitionModel; + // private currentModel: DatasetProfileDefinitionModel; constructor( public applicationReference: ApplicationRef, @@ -22,27 +20,28 @@ export class VisibilityRulesService { } - public setModel(model: DatasetProfileDefinitionModel) { - this.initialModel = model; - this.currentModel = model; - //this.visibilityRuleContext.rules.forEach(item => this.evaluateVisibility(item)) - } + // public setModel(model: DatasetProfileDefinitionModel) { + // this.initialModel = model; + // this.currentModel = model; + // //this.visibilityRuleContext.rules.forEach(item => this.evaluateVisibility(item)) + // } - public triggerVisibilityEvaluation() { - this.visibilityRuleContext.rules.forEach(item => this.evaluateVisibility(item)); - } + // public triggerVisibilityEvaluation() { + // this.visibilityRuleContext.rules.forEach(item => this.evaluateVisibility(item)); + // } - public getFormGroup(id: string): FormGroup { - const pathKeyArray = this.search('pages', this.initialModel.pages, id).split('.'); + // public getFormGroup(id: string): FormGroup { + // const pathKeyArray = this.search('pages', this.initialModel.pages, id).split('.'); - pathKeyArray.pop(); - const pathKey = pathKeyArray.join('.'); - if (!this.fieldsPathMemory[id] && pathKey) { this.fieldsPathMemory[id] = pathKey; } - return (this.formGroup.get(pathKey)); - } + // pathKeyArray.pop(); + // const pathKey = pathKeyArray.join('.'); + // if (!this.fieldsPathMemory[id] && pathKey) { this.fieldsPathMemory[id] = pathKey; } + // return (this.formGroup.get(pathKey)); + // } public checkElementVisibility(id: string): boolean { - return !this.elementVisibilityMap.has(id) || this.elementVisibilityMap.get(id); + if (this.visibilityRuleContext.rules.filter(item => item.targetControlId === id).length === 0) { return true; } + return this.elementVisibilityMap.has(id) && this.elementVisibilityMap.get(id); } public buildVisibilityRules(item: Array) { @@ -50,46 +49,47 @@ export class VisibilityRulesService { this.visibilityRuleContext.buildVisibilityRuleContext(item || []); } - public updateValueAndVisibility(id: string) { + public updateValueAndVisibility(id: string, value: any) { const visibilityRules = this.visibilityRuleContext.rules.filter(item => item.sourceVisibilityRules.filter(source => source.sourceControlId === id).length > 0); - visibilityRules.forEach(item => this.evaluateVisibility(item)); + visibilityRules.forEach(item => this.evaluateVisibility(item, value)); } - private evaluateVisibility(visibilityRule: VisibilityRule) { + private evaluateVisibility(visibilityRule: VisibilityRule, value: any) { for (let i = 0; i < visibilityRule.sourceVisibilityRules.length; i++) { - const pathKey = this.fieldsPathMemory[visibilityRule.sourceVisibilityRules[i].sourceControlId]; - if (this.formGroup.get(pathKey + '.value') && (this.parseValue(this.formGroup.get(pathKey + '.value').value) !== this.parseValue(visibilityRule.sourceVisibilityRules[i].sourceControlValue))) { - if (this.formGroup.get(pathKey).parent.get('id')) { - if (!this.checkElementVisibility(this.formGroup.get(pathKey).parent.get('id').value)) { - const targetPathKey = this.fieldsPathMemory[visibilityRule.targetControlId]; - this.getObject(this.currentModel, 'id', visibilityRule.targetControlId, this.currentModel, true); - this.elementVisibilityMap.set(visibilityRule.targetControlId, false); - this.clearValues(targetPathKey); - return; - } - } else { - const targetPathKey = this.fieldsPathMemory[visibilityRule.targetControlId]; - this.getObject(this.currentModel, 'id', visibilityRule.targetControlId, this.currentModel, true); - this.elementVisibilityMap.set(visibilityRule.targetControlId, false); - this.clearValues(targetPathKey); - return; - } + //const pathKey = this.fieldsPathMemory[visibilityRule.sourceVisibilityRules[i].sourceControlId]; + // if (this.formGroup.get(pathKey + '.value') && (this.parseValue(this.formGroup.get(pathKey + '.value').value) !== this.parseValue(visibilityRule.sourceVisibilityRules[i].sourceControlValue))) { + if (value && (this.parseValue(value) !== this.parseValue(visibilityRule.sourceVisibilityRules[i].sourceControlValue))) { + // if (this.formGroup.get(pathKey).parent.get('id')) { + // if (!this.checkElementVisibility(this.formGroup.get(pathKey).parent.get('id').value)) { + // const targetPathKey = this.fieldsPathMemory[visibilityRule.targetControlId]; + // this.getObject(this.currentModel, 'id', visibilityRule.targetControlId, this.currentModel, true); + this.elementVisibilityMap.set(visibilityRule.targetControlId, false); + // this.clearValues(targetPathKey); + return; } + // } else { + // const targetPathKey = this.fieldsPathMemory[visibilityRule.targetControlId]; + // this.getObject(this.currentModel, 'id', visibilityRule.targetControlId, this.currentModel, true); + // this.elementVisibilityMap.set(visibilityRule.targetControlId, false); + // this.clearValues(targetPathKey); + // return; + // } + // } } - const obj = this.getObject(this.initialModel, 'id', visibilityRule.targetControlId, this.initialModel); - const targetObjPathKey = this.fieldsPathMemory[visibilityRule.targetControlId] ? this.fieldsPathMemory[visibilityRule.targetControlId] : this.search('pages', this.initialModel.pages, obj); - this.updateValue(this.currentModel, obj, targetObjPathKey); + // const obj = this.getObject(this.initialModel, 'id', visibilityRule.targetControlId, this.initialModel); + // const targetObjPathKey = this.fieldsPathMemory[visibilityRule.targetControlId] ? this.fieldsPathMemory[visibilityRule.targetControlId] : this.search('pages', this.initialModel.pages, obj); + // this.updateValue(this.currentModel, obj, targetObjPathKey); this.elementVisibilityMap.set(visibilityRule.targetControlId, true); } - private clearValues(pathKey) { - if (pathKey && this.formGroup.get(pathKey + '.value')) { this.formGroup.get(pathKey + '.value').patchValue(null); } - if (pathKey && this.formGroup.get(pathKey)['controls'].fields) { - for (let i = 0; i < this.formGroup.get(pathKey)['controls'].fields.length; i++) { - this.clearValues(pathKey + '.fields.' + i); - } - } - } + // private clearValues(pathKey) { + // if (pathKey && this.formGroup.get(pathKey + '.value')) { this.formGroup.get(pathKey + '.value').patchValue(null); } + // if (pathKey && this.formGroup.get(pathKey)['controls'].fields) { + // for (let i = 0; i < this.formGroup.get(pathKey)['controls'].fields.length; i++) { + // this.clearValues(pathKey + '.fields.' + i); + // } + // } + // } parseValue(value: any) { if (typeof value === 'string') { @@ -97,49 +97,49 @@ export class VisibilityRulesService { } else { return value; } } - updateValue(obj, value, path) { - let i; - path = path.split('.'); + // updateValue(obj, value, path) { + // let i; + // path = path.split('.'); - for (i = 0; i < path.length - 1; i++) { - obj = obj[path[i]]; - } + // for (i = 0; i < path.length - 1; i++) { + // obj = obj[path[i]]; + // } - for (let propIndex = 0; propIndex < obj.length; propIndex++) { - if (obj[propIndex] && obj[propIndex]['id'] === value['id']) { return; } - } - obj[path[i]] = value; - } + // for (let propIndex = 0; propIndex < obj.length; propIndex++) { + // if (obj[propIndex] && obj[propIndex]['id'] === value['id']) { return; } + // } + // obj[path[i]] = value; + // } - search(path, obj, target) { - for (const k in obj) { - if (obj.hasOwnProperty(k)) { - if (obj[k] === target) { - return path + '.' + k; - } else if (typeof obj[k] === 'object') { - const result = this.search(path + '.' + k, obj[k], target); - if (result) { - return result; - } - } - } - } - return false; - } + // search(path, obj, target) { + // for (const k in obj) { + // if (obj.hasOwnProperty(k)) { + // if (obj[k] === target) { + // return path + '.' + k; + // } else if (typeof obj[k] === 'object') { + // const result = this.search(path + '.' + k, obj[k], target); + // if (result) { + // return result; + // } + // } + // } + // } + // return false; + // } - private getObject(obj, key, val, parent, deleteObj = false) { - for (const i in obj) { - if (!obj.hasOwnProperty(i)) { continue; } - if (typeof obj[i] === 'object') { - const returnObj = this.getObject(obj[i], key, val, obj, deleteObj); - if (returnObj) { return returnObj; } - } else if (i === key && obj[key] === val) { - //console.log(obj[key]) - if (deleteObj) { parent[parent.indexOf(obj)] = null; } - return obj; - } - } - } + // private getObject(obj, key, val, parent, deleteObj = false) { + // for (const i in obj) { + // if (!obj.hasOwnProperty(i)) { continue; } + // if (typeof obj[i] === 'object') { + // const returnObj = this.getObject(obj[i], key, val, obj, deleteObj); + // if (returnObj) { return returnObj; } + // } else if (i === key && obj[key] === val) { + // //console.log(obj[key]) + // if (deleteObj) { parent[parent.indexOf(obj)] = null; } + // return obj; + // } + // } + // } private translate(item: any) { try {