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

71 lines
2.8 KiB
TypeScript
Raw Normal View History

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';
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
public description: string
public extendedDescription: string
2018-01-05 18:02:26 +01:00
public hasCommentField: boolean;
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;
this.description = item.description;
this.extendedDescription = item.extendedDescription;
2018-01-05 18:02:26 +01:00
this.hasCommentField = item.hasCommentField;
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);
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,
title: this.title,
description: this.description,
2018-01-05 18:02:26 +01:00
extendedDescription: this.extendedDescription,
hasCommentField: this.hasCommentField
2017-12-06 11:41:11 +01:00
});
2017-12-11 14:47:52 +01:00
let fieldsFormArray = new Array<FormGroup>();
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));
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;
}
}