import { FormArray, FormControl, FormGroup } from '@angular/forms'; import { ValidationType } from '../../../../core/common/enum/validation-type'; import { Field } from '../../../../core/model/admin/dataset-profile/dataset-profile'; import { BaseFormModel } from '../../../../core/model/base-form-model'; import { DefaultValueEditorModel } from './default-value-editor-model'; import { AutoCompleteFieldDataEditorModel } from './field-data/auto-complete-field-data-editor-model'; import { BooleanDecisionFieldDataEditorModel } from './field-data/boolean-decision-field-data-editor-model'; import { CheckBoxFieldDataEditorModel } from './field-data/check-box-field-data-editor-model'; import { FieldDataEditorModel } from './field-data/field-data-editor-model'; import { FreeTextFieldDataEditorModel } from './field-data/free-text-field-data-editor-model'; import { RadioBoxFieldDataEditorModel } from './field-data/radio-box-field-data-editor-model'; import { TextAreaFieldDataEditorModel } from './field-data/text-area-field-data-editor-model'; import { WordListFieldDataEditorModel } from './field-data/word-list-field-data-editor-model'; import { ViewStyleEditorModel } from './view-style-editor-model'; import { VisibilityEditorModel } from './visibility-editor-model'; export class FieldEditorModel extends BaseFormModel { public id: string; // public title: string; public defaultValue: DefaultValueEditorModel = new DefaultValueEditorModel(); public viewStyle: ViewStyleEditorModel = new ViewStyleEditorModel(); public page: number; public ordinal: number; public visible: VisibilityEditorModel = new VisibilityEditorModel(); public data: FieldDataEditorModel; public validations: ValidationType[]; fromModel(item: Field): FieldEditorModel { this.id = item.id; if (item.defaultValue) { this.defaultValue = new DefaultValueEditorModel().fromModel(item.defaultValue); } this.page = item.page; this.ordinal = item.ordinal; this.validations = item.validations; this.viewStyle = new ViewStyleEditorModel().fromModel(item.viewStyle); this.visible = new VisibilityEditorModel().fromModel(item.visible); if (item.data) { if (this.viewStyle.renderStyle === 'combobox') { if (item.data.type === 'autocomplete') { this.data = new AutoCompleteFieldDataEditorModel().fromModel(item.data); } if (item.data.type === 'wordlist') { this.data = new WordListFieldDataEditorModel().fromModel(item.data); } } else { if (this.viewStyle.renderStyle === 'radiobox') { this.data = new RadioBoxFieldDataEditorModel().fromModel(item.data); } if (this.viewStyle.renderStyle === 'checkBox') { this.data = new CheckBoxFieldDataEditorModel().fromModel(item.data); } if (this.viewStyle.renderStyle === 'textarea') { this.data = new TextAreaFieldDataEditorModel().fromModel(item.data); } if (this.viewStyle.renderStyle === 'freetext') { this.data = new FreeTextFieldDataEditorModel().fromModel(item.data); } if (this.viewStyle.renderStyle === 'booleanDecision') { this.data = new BooleanDecisionFieldDataEditorModel().fromModel(item.data); } } } return this; } buildForm(): FormGroup { const formGroup = this.formBuilder.group({ id: [this.id], // title: [this.title], page: [this.page], ordinal: [this.ordinal] }); let valid = ValidationType.None; if (this.validations && this.validations[0] === 1) { valid = ValidationType.Required; } const arr = new FormArray([ new FormControl(valid) ]); // formGroup.addControl("multiplicity", this.multiplicity.buildForm()); formGroup.addControl('validations', new FormControl(this.validations)); formGroup.addControl('defaultValue', this.defaultValue.buildForm()); formGroup.addControl('viewStyle', this.viewStyle.buildForm()); formGroup.addControl('visible', this.visible.buildForm()); //formGroup.addControl("data",this.data? this.data.buildForm():this.formBuilder.group({})); if (this.data) { formGroup.addControl('data', this.data.buildForm()); } return formGroup; } }