From dc39cf9fdd51b1537c946788f5b41861c19dee75 Mon Sep 17 00:00:00 2001 From: Kristan Ntavidi Date: Fri, 2 Apr 2021 12:59:24 +0300 Subject: [PATCH 1/3] Dataset Profile Editor. CheckBox default value preview patch. --- .../dataset-profile-editor-composite-field.component.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/dmp-frontend/src/app/ui/admin/dataset-profile/editor/components/composite-field/dataset-profile-editor-composite-field.component.ts b/dmp-frontend/src/app/ui/admin/dataset-profile/editor/components/composite-field/dataset-profile-editor-composite-field.component.ts index 2b5a1f2fe..4acb1e839 100644 --- a/dmp-frontend/src/app/ui/admin/dataset-profile/editor/components/composite-field/dataset-profile-editor-composite-field.component.ts +++ b/dmp-frontend/src/app/ui/admin/dataset-profile/editor/components/composite-field/dataset-profile-editor-composite-field.component.ts @@ -209,7 +209,11 @@ export class DatasetProfileEditorCompositeFieldComponent implements OnInit, OnCh multiplicity: {max:formValue.multiplicity.max, min : formValue.multiplicity.min}, multiplicityItems:null, fields: fields.map(editorField=>{ - return new DatasetDescriptionFieldEditorModel().fromModel(editorField); + const model = new DatasetDescriptionFieldEditorModel().fromModel(editorField); + if(model.viewStyle.renderStyle === this.viewStyleEnum.CheckBox){ + model.value = model.value?"true":"false";//patch + } + return model; }) } From 9cab64b65e52ba167d7c0067dc781764fc2de617 Mon Sep 17 00:00:00 2001 From: Kristan Ntavidi Date: Mon, 5 Apr 2021 11:37:00 +0300 Subject: [PATCH 2/3] Dataset Profile Editor. Patch visibility rules for select multiList, Validator and DatasetIdentifier --- ...ataset-profile-editor-field.component.html | 8 +- .../dataset-profile-editor-field.component.ts | 156 +++++++++--------- .../dataset-profile-editor.component.ts | 52 +----- .../form-field/form-field.component.ts | 12 +- .../visibility-rules.service.ts | 25 ++- 5 files changed, 114 insertions(+), 139 deletions(-) diff --git a/dmp-frontend/src/app/ui/admin/dataset-profile/editor/components/field/dataset-profile-editor-field.component.html b/dmp-frontend/src/app/ui/admin/dataset-profile/editor/components/field/dataset-profile-editor-field.component.html index 2045e38f4..d4a599fc7 100644 --- a/dmp-frontend/src/app/ui/admin/dataset-profile/editor/components/field/dataset-profile-editor-field.component.html +++ b/dmp-frontend/src/app/ui/admin/dataset-profile/editor/components/field/dataset-profile-editor-field.component.html @@ -251,11 +251,11 @@ - + - + \ No newline at end of file diff --git a/dmp-frontend/src/app/ui/admin/dataset-profile/editor/components/field/dataset-profile-editor-field.component.ts b/dmp-frontend/src/app/ui/admin/dataset-profile/editor/components/field/dataset-profile-editor-field.component.ts index 4e5684788..7dda1af43 100644 --- a/dmp-frontend/src/app/ui/admin/dataset-profile/editor/components/field/dataset-profile-editor-field.component.ts +++ b/dmp-frontend/src/app/ui/admin/dataset-profile/editor/components/field/dataset-profile-editor-field.component.ts @@ -58,9 +58,8 @@ export class DatasetProfileEditorFieldComponent extends BaseComponent implements viewType: ViewStyleType; viewTypeEnum = ViewStyleType; - private subject$:Subject = new Subject(); + // private subject$:Subject = new Subject(); - private myCustomValidators = new EditorCustomValidators(); @Input() expandView: boolean = true; @@ -85,9 +84,9 @@ export class DatasetProfileEditorFieldComponent extends BaseComponent implements ngOnInit() { - this.subject$.pipe(takeUntil(this._destroyed)).pipe(debounceTime(600)).subscribe(model=>{ - this.previewForm = model.buildForm(); - }); + // this.subject$.pipe(takeUntil(this._destroyed)).pipe(debounceTime(600)).subscribe(model=>{ + // this.previewForm = model.buildForm(); + // }); @@ -168,7 +167,7 @@ export class DatasetProfileEditorFieldComponent extends BaseComponent implements } - this.showPreview = true; + // this.showPreview = true; @@ -297,88 +296,88 @@ export class DatasetProfileEditorFieldComponent extends BaseComponent implements private _formChangesSubscription:Subscription; private _showPreview: boolean = false;; - get showPreview(): boolean{ + // get showPreview(): boolean{ - return this._showPreview; - } + // return this._showPreview; + // } - set showPreview(value:boolean){ - if(value == false){//hide preview - //close subsciption - if(this._formChangesSubscription){ - this._formChangesSubscription.unsubscribe(); - this._formChangesSubscription = null; - } - } + // set showPreview(value:boolean){ + // if(value == false){//hide preview + // //close subsciption + // if(this._formChangesSubscription){ + // this._formChangesSubscription.unsubscribe(); + // this._formChangesSubscription = null; + // } + // } - if(value == true){ - //value is already true - if(this._showPreview){ - if(this._formChangesSubscription){ - this._formChangesSubscription.unsubscribe(); - this._formChangesSubscription = null; - } - } + // if(value == true){ + // //value is already true + // if(this._showPreview){ + // if(this._formChangesSubscription){ + // this._formChangesSubscription.unsubscribe(); + // this._formChangesSubscription = null; + // } + // } - //initialize - if(this.form.get('viewStyle').get('renderStyle').value){ - this._generatePreviewForm(); - } - this._formChangesSubscription = this.form.valueChanges.subscribe(()=>{ - this._generatePreviewForm(); - }); - } - this._showPreview = value; + // //initialize + // if(this.form.get('viewStyle').get('renderStyle').value){ + // this._generatePreviewForm(); + // } + // this._formChangesSubscription = this.form.valueChanges.subscribe(()=>{ + // this._generatePreviewForm(); + // }); + // } + // this._showPreview = value; - } + // } - previewForm: FormGroup; + // previewForm: FormGroup; - private _generatePreviewForm(){ + // private _generatePreviewForm(){ - if(!this.form.get('data')){ - return; - } - this.previewForm = null; - const fieldEditorModel = new DatasetDescriptionFieldEditorModel(); + // if(!this.form.get('data')){ + // return; + // } + // this.previewForm = null; + // const fieldEditorModel = new DatasetDescriptionFieldEditorModel(); - fieldEditorModel.viewStyle= { - renderStyle: this.form.get('viewStyle').get('renderStyle').value, - cssClass: null - }; + // fieldEditorModel.viewStyle= { + // renderStyle: this.form.get('viewStyle').get('renderStyle').value, + // cssClass: null + // }; - fieldEditorModel.data = (this.form.get('data') as FormGroup).getRawValue(); - fieldEditorModel.value = this.form.get('defaultValue').get('value').value; - fieldEditorModel.validationRequired = (this.form.get('validations').value as Array).includes(ValidationType.Required); + // fieldEditorModel.data = (this.form.get('data') as FormGroup).getRawValue(); + // fieldEditorModel.value = this.form.get('defaultValue').get('value').value; + // fieldEditorModel.validationRequired = (this.form.get('validations').value as Array).includes(ValidationType.Required); - if(this.form.get('viewStyle').get('renderStyle').value == DatasetProfileFieldViewStyle.CheckBox){ - fieldEditorModel.value = this.form.get('defaultValue').get('value').value === 'true'; - } - // if(this.form.get('viewStyle').get('renderStyle').value == DatasetProfileFieldViewStyle.Researchers){ - // fieldEditorModel.data = new ResearchersAutoCompleteFieldDataEditorModel().buildForm().getRawValue(); - // } - if(fieldEditorModel.viewStyle.renderStyle === DatasetProfileFieldViewStyle.Validation || (fieldEditorModel.viewStyle.renderStyle === DatasetProfileFieldViewStyle.DatasetIdentifier) - || (fieldEditorModel.viewStyle.renderStyle === DatasetProfileFieldViewStyle.Tags) - ){ - fieldEditorModel.value = null; - } + // if(this.form.get('viewStyle').get('renderStyle').value == DatasetProfileFieldViewStyle.CheckBox){ + // fieldEditorModel.value = this.form.get('defaultValue').get('value').value === 'true'; + // } + // // if(this.form.get('viewStyle').get('renderStyle').value == DatasetProfileFieldViewStyle.Researchers){ + // // fieldEditorModel.data = new ResearchersAutoCompleteFieldDataEditorModel().buildForm().getRawValue(); + // // } + // if(fieldEditorModel.viewStyle.renderStyle === DatasetProfileFieldViewStyle.Validation || (fieldEditorModel.viewStyle.renderStyle === DatasetProfileFieldViewStyle.DatasetIdentifier) + // || (fieldEditorModel.viewStyle.renderStyle === DatasetProfileFieldViewStyle.Tags) + // ){ + // fieldEditorModel.value = null; + // } - // const myTicket = Guid.create().toString(); - // this.validTicket = myTicket; - // setTimeout(() => { //TODO - // //user hasnt make any new change to inputs /show preview - // if(myTicket === this.validTicket){ - // this.previewForm = fieldEditorModel.buildForm(); - // } - // }, 600); + // // const myTicket = Guid.create().toString(); + // // this.validTicket = myTicket; + // // setTimeout(() => { //TODO + // // //user hasnt make any new change to inputs /show preview + // // if(myTicket === this.validTicket){ + // // this.previewForm = fieldEditorModel.buildForm(); + // // } + // // }, 600); - this.subject$.next(fieldEditorModel); + // this.subject$.next(fieldEditorModel); - // setTimeout(() => { - // this.previewForm = fieldEditorModel.buildForm(); - // }); - }; + // // setTimeout(() => { + // // this.previewForm = fieldEditorModel.buildForm(); + // // }); + // }; get canApplyVisibility():boolean{ @@ -429,12 +428,13 @@ export class DatasetProfileEditorFieldComponent extends BaseComponent implements const x = this.viewType; - this.showPreview = false; + // this.showPreview = false; const field: Field = this.form.getRawValue(); - field.defaultValue = {type:null, value: null}; + // field.defaultValue = {type:null, value: null}; + field.defaultValue = undefined; if(!this.canApplyVisibility){ field.visible.rules = []; } @@ -792,9 +792,9 @@ export class DatasetProfileEditorFieldComponent extends BaseComponent implements } - setTimeout(() => { //TODO - this.showPreview = true; - }); + // setTimeout(() => { //TODO + // this.showPreview = true; + // }); } diff --git a/dmp-frontend/src/app/ui/admin/dataset-profile/editor/dataset-profile-editor.component.ts b/dmp-frontend/src/app/ui/admin/dataset-profile/editor/dataset-profile-editor.component.ts index 6c8bc33dc..490568b9f 100644 --- a/dmp-frontend/src/app/ui/admin/dataset-profile/editor/dataset-profile-editor.component.ts +++ b/dmp-frontend/src/app/ui/admin/dataset-profile/editor/dataset-profile-editor.component.ts @@ -200,7 +200,7 @@ export class DatasetProfileEditorComponent extends BaseComponent implements OnIn } // this.addSection(); // this.addPage(); - this.visibilityRulesService.buildVisibilityRules([],this.form); + // this.visibilityRulesService.buildVisibilityRules([],this.form); setTimeout(() => { this.steps = this.stepper.steps; }); @@ -227,7 +227,7 @@ export class DatasetProfileEditorComponent extends BaseComponent implements OnIn prepareForm() { - this.visibilityRulesService.buildVisibilityRules([],this.form); + // this.visibilityRulesService.buildVisibilityRules([],this.form); // this.form.setValidators([EditorCustomValidators.atLeastOneElementListValidator('pages'),EditorCustomValidators.pagesHaveAtLeastOneSection('pages', 'sections')]); // this.form.updateValueAndValidity(); this.form.valueChanges @@ -879,54 +879,6 @@ export class DatasetProfileEditorComponent extends BaseComponent implements OnIn } - // private customFieldValidator(): ValidatorFn{ - // return (control):ValidationErrors | null=>{ - // DatasetProfileFieldViewStyle - // switch(control.get('viewStyle').get('renderStyle').value){ - - // case DatasetProfileFieldViewStyle.TextArea: - // return null; - // case DatasetProfileFieldViewStyle.BooleanDecision: - // return null; - // case DatasetProfileFieldViewStyle.ComboBox: - // return null; - // case DatasetProfileFieldViewStyle.CheckBox: - // return null; - // case DatasetProfileFieldViewStyle.FreeText: - // return null; - // case DatasetProfileFieldViewStyle.RadioBox: - // return null; - // case DatasetProfileFieldViewStyle.DatePicker: - // return null; - // case DatasetProfileFieldViewStyle.InternalDmpEntities: - // return null; - // case DatasetProfileFieldViewStyle.ExternalDatasets: - // return null; - // case DatasetProfileFieldViewStyle.DataRepositories: - // return null; - // case DatasetProfileFieldViewStyle.Registries: - // return null; - // case DatasetProfileFieldViewStyle.Services: - // return null; - // case DatasetProfileFieldViewStyle.Tags: - // return null; - // case DatasetProfileFieldViewStyle.Researchers: - // return null; - // case DatasetProfileFieldViewStyle.Organizations: - // return null; - // case DatasetProfileFieldViewStyle.DatasetIdentifier: - // return null; - // case DatasetProfileFieldViewStyle.Currency: - // return null; - // case DatasetProfileFieldViewStyle.Validation: - // return null; - // default: - // return {inputTypeNotValid: true}; - // } - // } - // } - - onRemoveEntry(tce: ToCEntry){ const dialogRef = this.dialog.open(ConfirmationDialogComponent, { 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 926e660cf..a76cfcae8 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 @@ -253,14 +253,14 @@ export class FormFieldComponent extends BaseComponent implements OnInit { this.form.get('value').valueChanges .pipe(takeUntil(this._destroyed)) .subscribe(item => { - if (this.form.get('viewStyle').value.renderStyle === DatasetProfileFieldViewStyle.ComboBox && this.form.get('data').value.type === DatasetProfileComboBoxType.WordList && this.form.get('data').value.multiList) { - item.forEach(element => { - this.visibilityRulesService.updateValueAndVisibility(this.form.get('id').value, element); - }); + // if (this.form.get('viewStyle').value.renderStyle === DatasetProfileFieldViewStyle.ComboBox && this.form.get('data').value.type === DatasetProfileComboBoxType.WordList && this.form.get('data').value.multiList) { + // item.forEach(element => { + // this.visibilityRulesService.updateValueAndVisibility(this.form.get('id').value, element); + // }); - } else { + // } else { this.visibilityRulesService.updateValueAndVisibility(this.form.get('id').value, item); - } + // } }); } 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 7c77b16af..9460af83d 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,5 +1,6 @@ import { ApplicationRef, Injectable, NgZone } from '@angular/core'; import { AbstractControl, FormArray, FormControl, FormGroup } from '@angular/forms'; +import { DatasetProfileFieldViewStyle } from '@app/core/common/enum/dataset-profile-field-view-style'; import { isNumeric } from 'rxjs/internal/util/isNumeric'; import { Rule } from '../../../../core/model/dataset-profile-definition/rule'; import { VisibilityRule } from './models/visibility-rule'; @@ -38,6 +39,22 @@ export class VisibilityRulesService { } private evaluateVisibility(visibilityRule: VisibilityRule, value: any) { + + if (value instanceof Array){ + + const parsedSourceControlValues = visibilityRule.sourceVisibilityRules.map(e=>this.parseValue(e.sourceControlValue)); + const parsedValues = value.map(e=>this.parseValue(e)); + + const isVisible = parsedValues.map(v=>parsedSourceControlValues.includes(v)).reduce((acc,current)=> acc|| current, false); + + + if(isVisible){ + this.elementVisibilityMap.set(visibilityRule.targetControlId, true); + return; + } + + } + for (let i = 0; i < visibilityRule.sourceVisibilityRules.length; i++) { if (value != null && (this.parseValue(value) !== this.parseValue(visibilityRule.sourceVisibilityRules[i].sourceControlValue))) { this.elementVisibilityMap.set(visibilityRule.targetControlId, false); @@ -123,7 +140,13 @@ export class VisibilityRulesService { } private resetFieldFormGroup(formGroup: FormGroup) { - formGroup.get('value').setValue(formGroup.get('defaultValue').value ? this.parseValue(formGroup.get('defaultValue').value.value) : undefined); + const renderStyle = formGroup.getRawValue().viewStyle.renderStyle; + if(renderStyle ===DatasetProfileFieldViewStyle.Validation || renderStyle === DatasetProfileFieldViewStyle.DatasetIdentifier){ + formGroup.get('value').setValue({identifier:'',type:'' }); + }else{ + formGroup.get('value').setValue(formGroup.get('defaultValue').value ? this.parseValue(formGroup.get('defaultValue').value.value) : undefined); + } + } private resetCompositeFieldFormGroup(formGroup: FormGroup) { From 450dbb519f3928d8227e95f8217b94a3f8c69201 Mon Sep 17 00:00:00 2001 From: Kristan Ntavidi Date: Mon, 5 Apr 2021 12:06:14 +0300 Subject: [PATCH 3/3] Dataset profile editor. Fix: final preview in step does not affect individual previews in step 2. --- .../dataset-profile/dataset-profile.module.ts | 7 +++-- .../final-preview.component.html | 3 ++ .../final-preview.component.scss | 0 .../final-preview/final-preview.component.ts | 28 +++++++++++++++++++ .../dataset-profile-editor.component.html | 9 +++++- .../dataset-profile-editor.component.ts | 7 +++-- 6 files changed, 47 insertions(+), 7 deletions(-) create mode 100644 dmp-frontend/src/app/ui/admin/dataset-profile/editor/components/final-preview/final-preview.component.html create mode 100644 dmp-frontend/src/app/ui/admin/dataset-profile/editor/components/final-preview/final-preview.component.scss create mode 100644 dmp-frontend/src/app/ui/admin/dataset-profile/editor/components/final-preview/final-preview.component.ts diff --git a/dmp-frontend/src/app/ui/admin/dataset-profile/dataset-profile.module.ts b/dmp-frontend/src/app/ui/admin/dataset-profile/dataset-profile.module.ts index 07218c7ce..6a20faad6 100644 --- a/dmp-frontend/src/app/ui/admin/dataset-profile/dataset-profile.module.ts +++ b/dmp-frontend/src/app/ui/admin/dataset-profile/dataset-profile.module.ts @@ -53,6 +53,7 @@ import {DragulaModule} from 'ng2-dragula'; //matrial import {MatBadgeModule} from '@angular/material/badge'; import { DatasetProfileEditorSectionFieldSetComponent } from './editor/components/section-fieldset/dataset-profile-editor-section-fieldset.component'; +import { FinalPreviewComponent } from './editor/components/final-preview/final-preview.component'; @NgModule({ imports: [ @@ -106,12 +107,12 @@ import { DatasetProfileEditorSectionFieldSetComponent } from './editor/component DatasetProfileEditorValidatorFieldComponent, DatasetProfileTableOfContents, DatasetProfileTableOfContentsInternalSection, - DatasetProfileEditorSectionFieldSetComponent + DatasetProfileEditorSectionFieldSetComponent, + FinalPreviewComponent ], entryComponents: [ DialogConfirmationUploadDatasetProfiles - ], - providers:[VisibilityRulesService] + ] }) export class DatasetProfileModule { } diff --git a/dmp-frontend/src/app/ui/admin/dataset-profile/editor/components/final-preview/final-preview.component.html b/dmp-frontend/src/app/ui/admin/dataset-profile/editor/components/final-preview/final-preview.component.html new file mode 100644 index 000000000..39882e08c --- /dev/null +++ b/dmp-frontend/src/app/ui/admin/dataset-profile/editor/components/final-preview/final-preview.component.html @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/dmp-frontend/src/app/ui/admin/dataset-profile/editor/components/final-preview/final-preview.component.scss b/dmp-frontend/src/app/ui/admin/dataset-profile/editor/components/final-preview/final-preview.component.scss new file mode 100644 index 000000000..e69de29bb diff --git a/dmp-frontend/src/app/ui/admin/dataset-profile/editor/components/final-preview/final-preview.component.ts b/dmp-frontend/src/app/ui/admin/dataset-profile/editor/components/final-preview/final-preview.component.ts new file mode 100644 index 000000000..25afc4373 --- /dev/null +++ b/dmp-frontend/src/app/ui/admin/dataset-profile/editor/components/final-preview/final-preview.component.ts @@ -0,0 +1,28 @@ +import { Component, Input, OnInit} from '@angular/core'; +import { Rule } from '@app/core/model/dataset-profile-definition/rule'; +import { VisibilityRulesService } from '@app/ui/misc/dataset-description-form/visibility-rules/visibility-rules.service'; + + +@Component({ + selector: 'app-final-preview-component', + templateUrl: './final-preview.component.html', + styleUrls: ['./final-preview.component.scss'], + providers:[VisibilityRulesService] +}) + +export class FinalPreviewComponent implements OnInit { + + + @Input() formGroup = null; + @Input() visibilityRules:Rule[] = []; + constructor(private visibilityRulesService: VisibilityRulesService){ + + } + + + + ngOnInit(): void { + this.visibilityRulesService.buildVisibilityRules(this.visibilityRules, this.formGroup); + } + +} 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 8484cfaf5..52eeb2322 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 @@ -395,9 +395,16 @@ + + + + + + diff --git a/dmp-frontend/src/app/ui/admin/dataset-profile/editor/dataset-profile-editor.component.ts b/dmp-frontend/src/app/ui/admin/dataset-profile/editor/dataset-profile-editor.component.ts index 490568b9f..29a0917c8 100644 --- a/dmp-frontend/src/app/ui/admin/dataset-profile/editor/dataset-profile-editor.component.ts +++ b/dmp-frontend/src/app/ui/admin/dataset-profile/editor/dataset-profile-editor.component.ts @@ -53,7 +53,8 @@ const skipDisable: any[] = require('../../../../../assets/resources/skipDisable. selector: 'app-dataset-profile-editor-component', templateUrl: './dataset-profile-editor.component.html', styleUrls: ['./dataset-profile-editor.component.scss'], - animations:[...STEPPER_ANIMATIONS] + animations:[...STEPPER_ANIMATIONS], + providers:[VisibilityRulesService] }) export class DatasetProfileEditorComponent extends BaseComponent implements OnInit { @@ -200,7 +201,7 @@ export class DatasetProfileEditorComponent extends BaseComponent implements OnIn } // this.addSection(); // this.addPage(); - // this.visibilityRulesService.buildVisibilityRules([],this.form); + this.visibilityRulesService.buildVisibilityRules([],this.form); setTimeout(() => { this.steps = this.stepper.steps; }); @@ -227,7 +228,7 @@ export class DatasetProfileEditorComponent extends BaseComponent implements OnIn prepareForm() { - // this.visibilityRulesService.buildVisibilityRules([],this.form); + this.visibilityRulesService.buildVisibilityRules([],this.form); // this.form.setValidators([EditorCustomValidators.atLeastOneElementListValidator('pages'),EditorCustomValidators.pagesHaveAtLeastOneSection('pages', 'sections')]); // this.form.updateValueAndValidity(); this.form.valueChanges