59 lines
2.4 KiB
TypeScript
59 lines
2.4 KiB
TypeScript
import { FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms';
|
|
import { Section } from '../../../../core/model/admin/dataset-profile/dataset-profile';
|
|
import { BaseFormModel } from '../../../../core/model/base-form-model';
|
|
import { FieldSetEditorModel } from './field-set-editor-model';
|
|
|
|
export class SectionEditorModel extends BaseFormModel {
|
|
public sections: Array<SectionEditorModel> = new Array<SectionEditorModel>();
|
|
public defaultVisibility: boolean;
|
|
public page: string;
|
|
public id: string;
|
|
public title: string;
|
|
public description: string;
|
|
public ordinal: number;
|
|
public fieldSets: Array<FieldSetEditorModel> = new Array<FieldSetEditorModel>();
|
|
|
|
fromModel(item: Section): SectionEditorModel {
|
|
if (item.sections) { this.sections = item.sections.map(x => new SectionEditorModel().fromModel(x)); }
|
|
this.page = item.page;
|
|
this.defaultVisibility = item.defaultVisibility;
|
|
this.id = item.id;
|
|
this.title = item.title;
|
|
this.description = item.description;
|
|
this.ordinal = item.ordinal;
|
|
if (item.fieldSets) { this.fieldSets = item.fieldSets.map(x => new FieldSetEditorModel().fromModel(x)); }
|
|
return this;
|
|
}
|
|
|
|
buildForm(): FormGroup {
|
|
const formGroup: FormGroup = new FormBuilder().group({});
|
|
const sectionsFormArray = new Array<FormGroup>();
|
|
if (this.sections) {
|
|
this.sections.forEach(item => {
|
|
const form: FormGroup = item.buildForm();
|
|
sectionsFormArray.push(form);
|
|
});
|
|
}
|
|
const compositeFieldsFormArray = new Array<FormGroup>();
|
|
if (this.fieldSets) {
|
|
this.fieldSets.forEach(item => {
|
|
const form: FormGroup = item.buildForm();
|
|
compositeFieldsFormArray.push(form);
|
|
});
|
|
}
|
|
|
|
formGroup.addControl('sections', this.formBuilder.array(sectionsFormArray));
|
|
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, [Validators.required,Validators.pattern('^[^<_>]+$')]));
|
|
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;
|
|
}
|
|
}
|