import { BaseModel } from './BaseModel'; import { FormGroup, Validators } from '@angular/forms'; import { FormGenerator } from './interfaces/FormGenerator'; import { JsonSerializer } from '../utilities/JsonSerializer'; import { Serializable } from './interfaces/Serializable'; import { Multiplicity } from './Multiplicity'; import { DefaultValue } from './DefaultValue'; import { ValidationTypes } from '../models/common/ValidationTypes'; import { ViewStyle } from './datasetProfileAdmin/ViewStyle'; export class Field extends BaseModel implements Serializable, FormGenerator{ public id: string; public title: string; public value: any; public defaultValue: DefaultValue; public description: string; public extendedDescription: string; public viewStyle: ViewStyle; public defaultVisibility: boolean; public page: number; public multiplicity: Multiplicity; public multiplicityItems: Array = new Array(); public data: any; public validations: Array;//Array public validationRequired = false; fromJSONObject(item: any): Field { this.id = item.id; this.title = item.title; //this.value = item.value; this.description = item.description; this.extendedDescription = item.extendedDescription; this.viewStyle = item.viewStyle; this.defaultVisibility = item.defaultVisibility; this.page = item.page; this.validations = item.validations; this.multiplicity = JsonSerializer.fromJSONObject(item.multiplicity, Multiplicity); this.defaultValue = JsonSerializer.fromJSONObject(item.defaultValue, DefaultValue); this.value = this.defaultValue.value && !item.value ? this.defaultValue.value : item.value; //this.multiplicity = new Multiplicity(); if (this.viewStyle.renderStyle === "checkBox") { this.value = this.value === 'true'; } //this.multiplicity.max = 2; if (item.multiplicityItems) this.multiplicityItems = JsonSerializer.fromJSONArray(item.multiplicityItems, Field); this.data = item.data; return this; } buildForm(): FormGroup { if (this.validations) this.validations.forEach(validation => { if (validation == ValidationTypes.Required) this.validationRequired = true; }); let formGroup = this.formBuilder.group({ id: [this.id], data: [this.data], /* title: [this.title], */ value: [this.value, this.validationRequired == true ? Validators.required : null]/* , description: [this.description], extendedDescription:[this.extendedDescription], viewStyle: [this.viewStyle], defaultVisibility:[this.defaultVisibility], page:[this.page], data:[this.data] */ }); 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, idPath: string): Field { let newItem: Field = new Field(); newItem.id = idPath ? idPath + index : 'multiple_' + this.id + '_' + index; newItem.title = this.title; newItem.description = this.description; newItem.extendedDescription = this.extendedDescription; newItem.viewStyle = this.viewStyle; newItem.defaultVisibility = this.defaultVisibility; newItem.page = this.page; newItem.multiplicity = null; newItem.data = this.data; return newItem; } }