2017-11-23 11:40:02 +01:00
|
|
|
import { FormGroup } from '@angular/forms';
|
|
|
|
import { JsonSerializer } from '../utilities/JsonSerializer';
|
|
|
|
import { Serializable } from './interfaces/Serializable';
|
|
|
|
import { BaseModel } from './BaseModel';
|
2017-12-11 14:47:52 +01:00
|
|
|
import { Field } from './Field'
|
|
|
|
import { Multiplicity } from './Multiplicity';
|
2017-11-23 11:40:02 +01:00
|
|
|
export class CompositeField extends BaseModel implements Serializable<CompositeField> {
|
2017-12-11 14:47:52 +01:00
|
|
|
public fields: Array<Field> = new Array<Field>();
|
|
|
|
public ordinal: number
|
2017-12-11 16:35:51 +01:00
|
|
|
public id: string
|
2017-12-11 14:47:52 +01:00
|
|
|
public multiplicity: Multiplicity;
|
|
|
|
public multiplicityItems: Array<CompositeField> = new Array<CompositeField>();
|
2018-01-03 12:36:28 +01:00
|
|
|
public title: string
|
2018-01-05 08:49:12 +01:00
|
|
|
public description: string
|
|
|
|
public extendedDescription: string
|
2018-01-05 18:02:26 +01:00
|
|
|
public hasCommentField: boolean;
|
2018-01-11 17:14:23 +01:00
|
|
|
public commentFieldValue: string;
|
2017-12-11 14:47:52 +01:00
|
|
|
|
|
|
|
fromJSONObject(item: any): CompositeField {
|
|
|
|
|
2018-01-03 17:36:31 +01:00
|
|
|
this.fields = JsonSerializer.fromJSONArray(item.fields, Field);
|
2017-12-06 11:41:11 +01:00
|
|
|
this.ordinal = item.ordinal;
|
2017-12-08 11:03:41 +01:00
|
|
|
this.id = item.id;
|
2018-01-03 12:36:28 +01:00
|
|
|
this.title = item.title;
|
2018-01-05 08:49:12 +01:00
|
|
|
this.description = item.description;
|
|
|
|
this.extendedDescription = item.extendedDescription;
|
2018-01-05 18:02:26 +01:00
|
|
|
this.hasCommentField = item.hasCommentField;
|
2018-01-11 17:14:23 +01:00
|
|
|
this.commentFieldValue = item.commentFieldValue;
|
2018-01-03 17:36:31 +01:00
|
|
|
this.multiplicity = JsonSerializer.fromJSONObject(item.multiplicity, Multiplicity);
|
2017-12-13 10:26:02 +01:00
|
|
|
//this.multiplicity = new Multiplicity();
|
2017-12-12 16:23:58 +01:00
|
|
|
//this.multiplicity.max = 2;
|
2018-01-03 17:36:31 +01:00
|
|
|
if(item.multiplicityItems)this.multiplicityItems = JsonSerializer.fromJSONArray(item.multiplicityItems, CompositeField);
|
2017-11-23 11:40:02 +01:00
|
|
|
return this;
|
|
|
|
}
|
|
|
|
|
2017-12-11 14:47:52 +01:00
|
|
|
buildForm(): FormGroup {
|
2017-12-06 11:41:11 +01:00
|
|
|
let formGroup = this.formBuilder.group({
|
2017-12-12 13:08:51 +01:00
|
|
|
id: this.id,
|
2018-01-03 12:36:28 +01:00
|
|
|
ordinal: this.ordinal,
|
2018-01-05 08:49:12 +01:00
|
|
|
title: this.title,
|
|
|
|
description: this.description,
|
2018-01-05 18:02:26 +01:00
|
|
|
extendedDescription: this.extendedDescription,
|
2018-01-11 17:14:23 +01:00
|
|
|
hasCommentField: this.hasCommentField,
|
|
|
|
commentFieldValue: this.commentFieldValue
|
2017-12-06 11:41:11 +01:00
|
|
|
});
|
2017-11-23 11:40:02 +01:00
|
|
|
|
2017-12-11 14:47:52 +01:00
|
|
|
let fieldsFormArray = new Array<FormGroup>();
|
2017-11-23 11:40:02 +01:00
|
|
|
this.fields.forEach(item => {
|
|
|
|
let form: FormGroup = item.buildForm();
|
|
|
|
fieldsFormArray.push(form)
|
|
|
|
})
|
|
|
|
formGroup.addControl('fields', this.formBuilder.array(fieldsFormArray));
|
2017-12-11 14:47:52 +01:00
|
|
|
|
|
|
|
let multiplicityItemsFormArray = new Array<FormGroup>();
|
|
|
|
this.multiplicityItems.forEach(item => {
|
|
|
|
let form: FormGroup = item.buildForm();
|
|
|
|
multiplicityItemsFormArray.push(form)
|
|
|
|
})
|
|
|
|
formGroup.addControl('multiplicityItems', this.formBuilder.array(multiplicityItemsFormArray));
|
|
|
|
|
2017-11-23 11:40:02 +01:00
|
|
|
return formGroup;
|
|
|
|
}
|
2017-12-11 14:47:52 +01:00
|
|
|
|
2017-12-11 16:35:51 +01:00
|
|
|
cloneForMultiplicity(index: number): CompositeField {
|
2017-12-11 14:47:52 +01:00
|
|
|
let newItem: CompositeField = new CompositeField();
|
2017-12-11 16:35:51 +01:00
|
|
|
newItem.id = 'multiple_' + this.id + '_' + index;
|
2017-12-11 14:47:52 +01:00
|
|
|
this.fields.forEach(field => {
|
2017-12-12 13:08:51 +01:00
|
|
|
newItem.fields.push(field.cloneForMultiplicity(this.fields.indexOf(field), newItem.id + "_"));
|
2017-12-11 14:47:52 +01:00
|
|
|
});
|
|
|
|
newItem.ordinal = this.ordinal;
|
|
|
|
|
|
|
|
return newItem;
|
|
|
|
}
|
2017-11-23 11:40:02 +01:00
|
|
|
}
|