argos/dmp-frontend/src/app/services/field-control.service.ts

64 lines
2.6 KiB
TypeScript

import { Injectable } from '@angular/core';
import { FormControl, FormGroup, Validators } from '@angular/forms';
import { FieldBase } from '../../app/form/fields/field-base';
import { GroupBase } from '../form/dynamic-form-group/group-base';
@Injectable()
export class FieldControlService {
constructor(){ }
toFormGroup(fields: FieldBase<any>[], groups: GroupBase<any>[]){
let form: any = {};
groups.forEach(group => {
let subgroup: any = {};
let subgroupFieldset: any = {};
let fieldset: boolean = false;
group.groupFields.forEach(field => {
//if(field.attributes.validation != undefined)
// field.attributes.validation.forEach(val => {
// if (val.ruleStyle.toString()=="existence"){
// field.required = true;
// }
// if (val.ruleStyle.toString()=="regex"){
// field.regex = val.regex;
// }
// });
subgroup[field.key] = field.required ? new FormControl(field.value || '', Validators.required) : new FormControl(field.value || '')
if (group.compositeFields!=undefined){
fieldset = true;
group.compositeFields.groupFields.forEach(field => {
//subgroupFieldset[field.key] = field.required ? new FormControl(field.value || '', Validators.required) : new FormControl(field.value || '')
subgroup[field.key] = field.required ? new FormControl(field.value || '', Validators.required) : new FormControl(field.value || '');
});
}
});
//PLEASE CHANGE THE group.key TO BE SAME AS THE ONE ON THE DYNAMIC-FORM-GROUP-COMPONENT.html
if (fieldset){
//subgroup["FieldSet"+ group.key] = form[group.key] = new FormGroup(subgroupFieldset);
form[group.key] = new FormGroup(subgroup);
}
else
form[group.key] = new FormGroup(subgroup);
//console.log("FORM_GROUP_GROUP: ");
//console.log(form);
});
//add also the spare fields into the form
fields.forEach(field => {
form[field.key] = field.required ? new FormControl(field.value || '', Validators.required) : new FormControl(field.value || '')
});
//console.log("FORM_GROUP: ");
//console.log(form);
return new FormGroup(form);
}
}