70 lines
3.1 KiB
TypeScript
70 lines
3.1 KiB
TypeScript
import { JsonSerializer } from '../../utilities/JsonSerializer';
|
|
import { FieldSet } from './FieldSet';
|
|
import { BaseModel } from '../BaseModel';
|
|
import { FormGenerator } from '../interfaces/FormGenerator';
|
|
import { FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms';
|
|
import { Serializable } from '../interfaces/Serializable';
|
|
|
|
export class Section extends BaseModel implements Serializable<Section>, FormGenerator<FormGroup>{
|
|
public sections: Array<Section> = new Array<Section>();
|
|
//public fieldGroups: Array<FieldGroup> = new Array<FieldGroup>();
|
|
public defaultVisibility: boolean;
|
|
public page: number;
|
|
public id: string
|
|
public title: string
|
|
public description: string;
|
|
public ordinal: number;
|
|
public fieldSets: Array<FieldSet> = new Array<FieldSet>();
|
|
|
|
fromJSONObject(item: any): Section {
|
|
this.sections = JsonSerializer.fromJSONArray(item.sections, Section);
|
|
//this.fieldGroups = new JsonSerializer<FieldGroup>().fromJSONArray(item.fieldGroups, FieldGroup);
|
|
this.page = item.page;
|
|
this.defaultVisibility = item.defaultVisibility;
|
|
this.id = item.id;
|
|
this.title = item.title;
|
|
this.description = item.description;
|
|
this.ordinal = item.ordinal;
|
|
this.fieldSets = JsonSerializer.fromJSONArray(item.fieldSets, FieldSet);
|
|
return this;
|
|
}
|
|
|
|
buildForm(): FormGroup {
|
|
let formGroup: FormGroup = new FormBuilder().group({});
|
|
let sectionsFormArray = new Array<FormGroup>();
|
|
if (this.sections) {
|
|
this.sections.forEach(item => {
|
|
let form: FormGroup = item.buildForm();
|
|
sectionsFormArray.push(form)
|
|
})
|
|
}
|
|
// let fieldGroupsFormArray = new Array<FormGroup>();
|
|
// if (this.fieldGroups) {
|
|
// this.fieldGroups.forEach(item => {
|
|
// let form: FormGroup = item.buildForm();
|
|
// fieldGroupsFormArray.push(form)
|
|
// })
|
|
// }
|
|
let compositeFieldsFormArray = new Array<FormGroup>();
|
|
if (this.fieldSets) {
|
|
this.fieldSets.forEach(item => {
|
|
let form: FormGroup = item.buildForm();
|
|
compositeFieldsFormArray.push(form)
|
|
})
|
|
}
|
|
|
|
formGroup.addControl('sections', this.formBuilder.array(sectionsFormArray));
|
|
// formGroup.addControl('fieldGroups', this.formBuilder.array(fieldGroupsFormArray));
|
|
formGroup.addControl('fieldSets', this.formBuilder.array(compositeFieldsFormArray));
|
|
formGroup.addControl('defaultVisibility', new FormControl(this.defaultVisibility));
|
|
formGroup.addControl('page', new FormControl(this.page, [Validators.required]));
|
|
formGroup.addControl('id', new FormControl(this.id));
|
|
formGroup.addControl('title', new FormControl(this.title));
|
|
formGroup.addControl('description', new FormControl(this.description));
|
|
formGroup.addControl('ordinal', new FormControl(this.ordinal));
|
|
|
|
if( !formGroup.controls["defaultVisibility"].value) formGroup.controls["defaultVisibility"].setValue(true);
|
|
|
|
return formGroup;
|
|
}
|
|
} |