argos/dmp-frontend/src/app/models/CompositeField.ts

74 lines
2.9 KiB
TypeScript

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<CompositeField> {
public fields: Array<Field> = new Array<Field>();
public ordinal: number
public id: string
public multiplicity: Multiplicity;
public multiplicityItems: Array<CompositeField> = new Array<CompositeField>();
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<FormGroup>();
this.fields.forEach(item => {
let form: FormGroup = item.buildForm();
fieldsFormArray.push(form)
})
formGroup.addControl('fields', this.formBuilder.array(fieldsFormArray));
let multiplicityItemsFormArray = new Array<FormGroup>();
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;
}
}