import { BooleanDecisionData } from '../DataField/BooleanDecisionData'; import { FreeTextData } from '../DataField/FreeTextData'; import { TextArea } from '../DataField/TextArea'; import { CheckBoxData } from '../DataField/CheckBoxData'; import { RadioBoxData } from '../DataField/RadioBoxData'; import { WordListData } from '../DataField/WordListData'; import { AutocompleteData } from '../DataField/AutocompleteData'; import { DataField } from '../DataField/DataField'; import { BaseModel } from '../BaseModel'; import { FormGroup, FormArray, FormControl } from '@angular/forms'; import { FormGenerator } from '../interfaces/FormGenerator'; import { JsonSerializer } from '../../utilities/JsonSerializer'; import { Serializable } from '../interfaces/Serializable'; import { Rule } from './Rule'; import { Multiplicity } from './Multiplicity'; import { DefaultValue } from './DefaultValue'; import { ViewStyle } from './ViewStyle'; import { Visibility } from './Visibility'; import { ValidationTypes } from '../../models/common/ValidationTypes'; export class Field extends BaseModel implements Serializable, FormGenerator{ public id: string; public title: string; public defaultValue: DefaultValue = new DefaultValue; public viewStyle: ViewStyle = new ViewStyle(); public page: number; //public multiplicity: Multiplicity = new Multiplicity(); public ordinal: number; public visible: Visibility = new Visibility(); public data: DataField; public validations: Array; fromJSONObject(item: any): Field { this.id = item.id; this.title = item.title; this.defaultValue = JsonSerializer.fromJSONObject(item.defaultValue, DefaultValue); this.page = item.page; // this.multiplicity = new JsonSerializer().fromJSONObject(item.multiplicity, Multiplicity); this.ordinal = item.ordinal; this.validations = item.validations; this.viewStyle = JsonSerializer.fromJSONObject(item.viewStyle, ViewStyle); this.visible = JsonSerializer.fromJSONObject(item.visible, Visibility); if (item.data) { if (this.viewStyle.renderStyle === "combobox") { if (item.data.type === "autocomplete") this.data = JsonSerializer.fromJSONObject(item.data, AutocompleteData); if (item.data.type === "wordlist") this.data = JsonSerializer.fromJSONObject(item.data, WordListData); } else { if (this.viewStyle.renderStyle === "radiobox") this.data = JsonSerializer.fromJSONObject(item.data, RadioBoxData); if (this.viewStyle.renderStyle === "checkBox") this.data = JsonSerializer.fromJSONObject(item.data, CheckBoxData); if (this.viewStyle.renderStyle === "textarea") this.data = JsonSerializer.fromJSONObject(item.data, TextArea); if (this.viewStyle.renderStyle === "freetext") this.data = JsonSerializer.fromJSONObject(item.data, FreeTextData); if (this.viewStyle.renderStyle === "booleanDecision") this.data = JsonSerializer.fromJSONObject(item.data, BooleanDecisionData); } } return this; } buildForm(): FormGroup { let formGroup = this.formBuilder.group({ id: [this.id], title: [this.title], page: [this.page], ordinal: [this.ordinal] }); let valid = ValidationTypes.None if (this.validations && this.validations[0] == 1) valid = ValidationTypes.Required const arr = new FormArray([ new FormControl(valid) ]); //formGroup.addControl("multiplicity", this.multiplicity.buildForm()); formGroup.addControl("validations", arr); 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; } }