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

98 lines
3.8 KiB
TypeScript
Raw Normal View History

import { BaseModel } from './BaseModel';
2018-01-08 12:50:43 +01:00
import { FormGroup, Validators } from '@angular/forms';
import { FormGenerator } from './interfaces/FormGenerator';
import { JsonSerializer } from '../utilities/JsonSerializer';
import { Serializable } from './interfaces/Serializable';
2017-12-11 14:47:52 +01:00
import { Multiplicity } from './Multiplicity';
2017-12-11 17:57:35 +01:00
import { DefaultValue } from './DefaultValue';
2018-05-14 08:44:35 +02:00
import { ValidationTypes } from '../models/common/ValidationTypes';
2018-03-05 17:18:45 +01:00
import { ViewStyle } from './datasetProfileAdmin/ViewStyle';
2018-01-05 18:02:26 +01:00
2017-12-11 14:47:52 +01:00
export class Field extends BaseModel implements Serializable<Field>, FormGenerator<FormGroup>{
2017-12-11 14:47:52 +01:00
public id: string;
public title: string;
2018-03-05 17:18:45 +01:00
public value: any;
2017-12-11 17:57:35 +01:00
public defaultValue: DefaultValue;
2017-12-11 14:47:52 +01:00
public description: string;
public extendedDescription: string;
2018-03-05 17:18:45 +01:00
public viewStyle: ViewStyle;
2017-12-11 14:47:52 +01:00
public defaultVisibility: boolean;
public page: number;
public multiplicity: Multiplicity;
2017-12-11 16:35:51 +01:00
public multiplicityItems: Array<Field> = new Array<Field>();
2017-12-11 14:47:52 +01:00
public data: any;
2018-01-08 12:50:43 +01:00
public validations: Array<any>;//Array<ValidationTypes>
2018-01-08 17:25:08 +01:00
public validationRequired = false;
2017-12-12 13:08:51 +01:00
2017-12-11 14:47:52 +01:00
fromJSONObject(item: any): Field {
this.id = item.id;
this.title = item.title;
2017-12-11 17:57:35 +01:00
//this.value = item.value;
this.description = item.description;
2017-12-11 14:47:52 +01:00
this.extendedDescription = item.extendedDescription;
this.viewStyle = item.viewStyle;
this.defaultVisibility = item.defaultVisibility;
this.page = item.page;
2018-01-05 18:02:26 +01:00
this.validations = item.validations;
2018-01-03 17:36:31 +01:00
this.multiplicity = JsonSerializer.fromJSONObject(item.multiplicity, Multiplicity);
this.defaultValue = JsonSerializer.fromJSONObject(item.defaultValue, DefaultValue);
2017-12-12 13:08:51 +01:00
this.value = this.defaultValue.value && !item.value ? this.defaultValue.value : item.value;
2017-12-13 10:26:02 +01:00
//this.multiplicity = new Multiplicity();
2018-03-05 17:18:45 +01:00
if (this.viewStyle.renderStyle === "checkBox") {
this.value = this.value === 'true';
}
2017-12-12 16:23:58 +01:00
//this.multiplicity.max = 2;
2018-03-05 17:18:45 +01:00
if (item.multiplicityItems) this.multiplicityItems = JsonSerializer.fromJSONArray(item.multiplicityItems, Field);
2017-11-27 14:40:16 +01:00
this.data = item.data;
return this;
}
2018-01-08 12:50:43 +01:00
2018-03-05 17:18:45 +01:00
buildForm(): FormGroup {
if (this.validations)
2018-01-08 17:25:08 +01:00
this.validations.forEach(validation => {
2018-03-05 17:18:45 +01:00
if (validation == ValidationTypes.Required) this.validationRequired = true;
2018-01-08 17:25:08 +01:00
});
2018-01-08 12:50:43 +01:00
let formGroup = this.formBuilder.group({
2017-12-11 14:47:52 +01:00
id: [this.id],
2018-03-05 17:18:45 +01:00
data: [this.data],
2017-12-11 14:47:52 +01:00
/* title: [this.title], */
2018-03-05 17:18:45 +01:00
value: [this.value, this.validationRequired == true ? Validators.required : null]/* ,
description: [this.description],
extendedDescription:[this.extendedDescription],
viewStyle: [this.viewStyle],
defaultVisibility:[this.defaultVisibility],
2017-11-27 14:40:16 +01:00
page:[this.page],
2017-12-11 14:47:52 +01:00
data:[this.data] */
});
2017-12-11 16:35:51 +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-12 13:08:51 +01:00
cloneForMultiplicity(index: number, idPath: string): Field {
2017-12-11 14:47:52 +01:00
let newItem: Field = new Field();
2017-12-12 13:08:51 +01:00
newItem.id = idPath ? idPath + index : 'multiple_' + this.id + '_' + index;
2017-12-11 14:47:52 +01:00
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;
}
}