argos/dmp-admin/src/app/models/DataSetProfile/FieldGroup.ts

60 lines
2.3 KiB
TypeScript

import { FieldSet } from './FieldSet';
import { BaseModel } from '../BaseModel';
import { FormGroup } from '@angular/forms';
import { FormGenerator } from '../interfaces/FormGenerator';
import { Validation } from '../Validation';
import { Rule } from './Rule';
import { JsonSerializer } from 'app/utilities/JsonSerializer';
import { Serializable } from '../interfaces/Serializable';
import { Field } from './Field';
export class FieldGroup extends BaseModel implements Serializable<FieldGroup>, FormGenerator<FormGroup>{
public id: string;
public title: string;
public section: string;
public value: string;
public description: string;
public extendedDescription: string;
public defaultVisibility: boolean;
public page: number;
public ordinal: number;
public compositeFields: Array<FieldSet> = new Array<FieldSet>();
fromJSONObject(item: any): FieldGroup {
this.id = item.id;
this.title = item.title;
this.value = item.value;
this.description = item.description;
this.extendedDescription = item.extendedDescription;
this.defaultVisibility = item.defaultVisibility;
this.page = item.page;
this.ordinal = item.ordinal;
this.compositeFields = JsonSerializer.fromJSONArray(item.compositeFields, FieldSet);
return this;
}
buildForm(): FormGroup {
let formGroup: FormGroup = this.formBuilder.group({
id: [this.id],
title: [this.title],
value: [this.value],
description: [this.description],
extendedDescription: [this.extendedDescription],
defaultVisibility: [this.defaultVisibility],
page: [this.page],
ordinal: [this.ordinal]
});
let compositeFieldsFormArray = new Array<FormGroup>();
if (this.compositeFields) {
this.compositeFields.forEach(item => {
let form: FormGroup = item.buildForm();
compositeFieldsFormArray.push(form)
})
}
formGroup.addControl('compositeFields', this.formBuilder.array(compositeFieldsFormArray));
if( !formGroup.controls["defaultVisibility"].value) formGroup.controls["defaultVisibility"].setValue(true);
return formGroup;
}
}