import { FormGroup } from '@angular/forms'; import { JsonSerializer } from '../utilities/JsonSerializer'; import { Serializable } from './interfaces/Serializable'; import { BaseModel } from './BaseModel'; import { Field } from './Field' import { Multiplicity } from './Multiplicity'; export class CompositeField extends BaseModel implements Serializable { public fields: Array = new Array(); public ordinal: number public id: string public multiplicity: Multiplicity; public multiplicityItems: Array = new Array(); public title: string public description: string public extendedDescription: string public hasCommentField: boolean; public commentFieldValue: string; fromJSONObject(item: any): CompositeField { this.fields = JsonSerializer.fromJSONArray(item.fields, Field); this.ordinal = item.ordinal; this.id = item.id; this.title = item.title; this.description = item.description; this.extendedDescription = item.extendedDescription; this.hasCommentField = item.hasCommentField; this.commentFieldValue = item.commentFieldValue; this.multiplicity = JsonSerializer.fromJSONObject(item.multiplicity, Multiplicity); //this.multiplicity = new Multiplicity(); //this.multiplicity.max = 2; if(item.multiplicityItems)this.multiplicityItems = JsonSerializer.fromJSONArray(item.multiplicityItems, CompositeField); return this; } buildForm(): FormGroup { let formGroup = this.formBuilder.group({ id: this.id, ordinal: this.ordinal, title: this.title, description: this.description, extendedDescription: this.extendedDescription, hasCommentField: this.hasCommentField, commentFieldValue: this.commentFieldValue }); let fieldsFormArray = new Array(); this.fields.forEach(item => { let form: FormGroup = item.buildForm(); fieldsFormArray.push(form) }) formGroup.addControl('fields', this.formBuilder.array(fieldsFormArray)); let multiplicityItemsFormArray = new Array(); this.multiplicityItems.forEach(item => { let form: FormGroup = item.buildForm(); multiplicityItemsFormArray.push(form) }) formGroup.addControl('multiplicityItems', this.formBuilder.array(multiplicityItemsFormArray)); return formGroup; } cloneForMultiplicity(index: number): CompositeField { let newItem: CompositeField = new CompositeField(); newItem.id = 'multiple_' + this.id + '_' + index; this.fields.forEach(field => { newItem.fields.push(field.cloneForMultiplicity(this.fields.indexOf(field), newItem.id + "_")); }); newItem.ordinal = this.ordinal; return newItem; } }