You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
argos/dmp-frontend/src/app/models/Field.ts

98 lines
3.8 KiB
TypeScript

import { BaseModel } from './BaseModel';
import { FormGroup, Validators } from '@angular/forms';
import { FormGenerator } from './interfaces/FormGenerator';
import { JsonSerializer } from '../utilities/JsonSerializer';
import { Serializable } from './interfaces/Serializable';
import { Multiplicity } from './Multiplicity';
import { DefaultValue } from './DefaultValue';
import { ValidationTypes } from '@app/models/common/ValidationTypes';
import { ViewStyle } from './datasetProfileAdmin/ViewStyle';
export class Field extends BaseModel implements Serializable<Field>, FormGenerator<FormGroup>{
public id: string;
public title: string;
public value: any;
public defaultValue: DefaultValue;
public description: string;
public extendedDescription: string;
public viewStyle: ViewStyle;
public defaultVisibility: boolean;
public page: number;
public multiplicity: Multiplicity;
public multiplicityItems: Array<Field> = new Array<Field>();
public data: any;
public validations: Array<any>;//Array<ValidationTypes>
public validationRequired = false;
fromJSONObject(item: any): Field {
this.id = item.id;
this.title = item.title;
//this.value = item.value;
this.description = item.description;
this.extendedDescription = item.extendedDescription;
this.viewStyle = item.viewStyle;
this.defaultVisibility = item.defaultVisibility;
this.page = item.page;
this.validations = item.validations;
this.multiplicity = JsonSerializer.fromJSONObject(item.multiplicity, Multiplicity);
this.defaultValue = JsonSerializer.fromJSONObject(item.defaultValue, DefaultValue);
this.value = this.defaultValue.value && !item.value ? this.defaultValue.value : item.value;
//this.multiplicity = new Multiplicity();
if (this.viewStyle.renderStyle === "checkBox") {
this.value = this.value === 'true';
}
//this.multiplicity.max = 2;
if (item.multiplicityItems) this.multiplicityItems = JsonSerializer.fromJSONArray(item.multiplicityItems, Field);
this.data = item.data;
return this;
}
buildForm(): FormGroup {
if (this.validations)
this.validations.forEach(validation => {
if (validation == ValidationTypes.Required) this.validationRequired = true;
});
let formGroup = this.formBuilder.group({
id: [this.id],
data: [this.data],
/* title: [this.title], */
value: [this.value, this.validationRequired == true ? Validators.required : null]/* ,
description: [this.description],
extendedDescription:[this.extendedDescription],
viewStyle: [this.viewStyle],
defaultVisibility:[this.defaultVisibility],
page:[this.page],
data:[this.data] */
});
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, idPath: string): Field {
let newItem: Field = new Field();
newItem.id = idPath ? idPath + index : 'multiple_' + this.id + '_' + index;
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;
}
}