2017-11-23 11:40:02 +01:00
|
|
|
import { BaseModel } from './BaseModel';
|
2018-01-08 12:50:43 +01:00
|
|
|
import { FormGroup, Validators } from '@angular/forms';
|
2017-11-23 11:40:02 +01:00
|
|
|
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-11-23 11:40:02 +01:00
|
|
|
|
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 {
|
2017-11-23 11:40:02 +01:00
|
|
|
this.id = item.id;
|
|
|
|
this.title = item.title;
|
2017-12-11 17:57:35 +01:00
|
|
|
//this.value = item.value;
|
2017-11-23 11:40:02 +01:00
|
|
|
this.description = item.description;
|
2017-12-11 14:47:52 +01:00
|
|
|
this.extendedDescription = item.extendedDescription;
|
2017-11-23 11:40:02 +01:00
|
|
|
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;
|
2017-11-23 11:40:02 +01:00
|
|
|
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
|
|
|
|
2017-11-23 11:40:02 +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]/* ,
|
2017-11-23 11:40:02 +01:00
|
|
|
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));
|
|
|
|
|
2017-11-23 11:40:02 +01:00
|
|
|
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;
|
|
|
|
}
|
2017-11-23 11:40:02 +01:00
|
|
|
}
|