visibility service is also using the form group to reset values for hidden fields

This commit is contained in:
Diamantis Tziotzios 2019-02-08 10:48:28 +02:00
parent 35b7c8190a
commit bceaad3247
4 changed files with 40 additions and 6 deletions

View File

@ -56,7 +56,7 @@ export class DatasetDescriptionFormComponent extends BaseComponent implements On
ngOnInit() {
// this.visibilityRulesService.formGroup = this.form;
this.visibilityRulesService.buildVisibilityRules(this.visibilityRules);
this.visibilityRulesService.buildVisibilityRules(this.visibilityRules, this.form);
// this.datasetProfileDefinitionModel = new DatasetDescriptionFormEditorModel().fromModel(this.dataModel);
// this.visibilityRulesService.setModel(this.datasetProfileDefinitionModel);

View File

@ -248,6 +248,7 @@ export class DatasetDescriptionFieldEditorModel extends BaseFormModel {
description: [{ value: this.description, disabled: true }],
extendedDescription: [{ value: this.extendedDescription, disabled: true }],
title: [{ value: this.title, disabled: true }],
defaultValue: [{ value: this.defaultValue, disabled: true }],
});
const multiplicityItemsFormArray = new Array<FormGroup>();

View File

@ -1,5 +1,5 @@
import { ApplicationRef, Injectable, NgZone } from '@angular/core';
import { FormArray, FormGroup } from '@angular/forms';
import { AbstractControl, FormArray, FormControl, FormGroup } from '@angular/forms';
import { isNumeric } from 'rxjs/internal/util/isNumeric';
import { Rule } from '../../../../core/model/dataset-profile-definition/rule';
import { VisibilityRule } from './models/visibility-rule';
@ -10,6 +10,7 @@ export class VisibilityRulesService {
private visibilityRuleContext: VisibilityRulesContext;
private form: AbstractControl;
private elementVisibilityMap = new Map<String, boolean>();
constructor(
@ -24,9 +25,10 @@ export class VisibilityRulesService {
return this.elementVisibilityMap.has(id) ? this.elementVisibilityMap.get(id) : false;
}
public buildVisibilityRules(item: Array<Rule>) {
public buildVisibilityRules(item: Array<Rule>, form: AbstractControl) {
this.visibilityRuleContext = new VisibilityRulesContext();
this.visibilityRuleContext.buildVisibilityRuleContext(item || []);
this.form = form;
}
public updateValueAndVisibility(id: string, value: any) {
@ -38,13 +40,14 @@ export class VisibilityRulesService {
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);
this.updateValueAndVisibility(visibilityRule.targetControlId, null);
this.resetControlWithId(this.form, visibilityRule.targetControlId);
//this.updateValueAndVisibility(visibilityRule.targetControlId, null);
// this.clearValues(targetPathKey);
return;
}
}
this.elementVisibilityMap.set(visibilityRule.targetControlId, true);
this.updateValueAndVisibility(visibilityRule.targetControlId, null);
//this.updateValueAndVisibility(visibilityRule.targetControlId, null);
}
parseValue(value: any) {
@ -93,4 +96,34 @@ export class VisibilityRulesService {
return item;
}
}
private resetControlWithId(formControl: AbstractControl, id: string) {
if (formControl instanceof FormGroup) {
if ((formControl as FormGroup).contains('id') && (formControl as FormGroup).contains('value') && (formControl as FormGroup).get('id').value === id) {
this.resetFieldFormGroup(formControl);
} if ((formControl as FormGroup).contains('id') && (formControl as FormGroup).contains('fields') && (formControl as FormGroup).get('id').value === id) {
this.resetCompositeFieldFormGroup(formControl);
} else {
Object.keys(formControl.controls).forEach(item => {
const control = formControl.get(item);
this.resetControlWithId(control, id);
});
}
} else if (formControl instanceof FormArray) {
formControl.controls.forEach(item => {
this.resetControlWithId(item, id);
});
}
}
private resetFieldFormGroup(formGroup: FormGroup) {
formGroup.get('value').setValue(formGroup.get('defaultValue').value ? formGroup.get('defaultValue').value.value : undefined);
}
private resetCompositeFieldFormGroup(formGroup: FormGroup) {
(formGroup.get('fields') as FormArray).controls.forEach((element: FormGroup) => {
this.resetFieldFormGroup(element);
});
(formGroup.get('multiplicityItems') as FormArray).controls.splice(0);
}
}

View File

@ -40,7 +40,7 @@ export class ProjectEditorComponent extends BaseComponent implements OnInit, IBr
public language: TranslateService,
private dialog: MatDialog,
private projectFileUploadService: ProjectFileUploadService,
private uiNotificationService:UiNotificationService
private uiNotificationService: UiNotificationService
) {
super();
}