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

77 lines
3.6 KiB
TypeScript
Raw Normal View History

2017-12-01 17:31:47 +01:00
import { RadioBoxData } from './DataField/RadioBoxData';
import { WordListData } from './DataField/WordListData';
import { AutocompleteData } from './DataField/AutocompleteData';
import { DataField } from './DataField/DataField';
2017-11-27 14:35:00 +01:00
import { BaseModel } from './BaseModel';
import { FormGroup } from '@angular/forms';
import { FormGenerator } from './interfaces/FormGenerator';
import { JsonSerializer } from '../utilities/JsonSerializer';
import { Serializable } from './interfaces/Serializable';
2017-12-01 15:00:37 +01:00
import {Rule} from './Rule';
import {Multiplicity} from './Multiplicity';
import {DefaultValue} from './DefaultValue';
import {ViewStyle} from './ViewStyle';
import {Visibility} from './Visibility';
2017-11-27 14:35:00 +01:00
export class Field extends BaseModel implements Serializable<Field>,FormGenerator<FormGroup>{
public id:string;
public title:string;
2017-12-01 15:00:37 +01:00
public defaultValue:DefaultValue = new DefaultValue;
2017-11-27 14:35:00 +01:00
public description:string;
public extendedDescription:string;
2017-12-01 15:00:37 +01:00
public viewStyle:ViewStyle = new ViewStyle();
2017-11-27 14:35:00 +01:00
public defaultVisibility:boolean;
public page:number;
public multiplicity: Multiplicity = new Multiplicity();
public ordinal: number;
2017-12-01 15:00:37 +01:00
public visible: Visibility = new Visibility();
2017-12-01 17:31:47 +01:00
public data:DataField<any>;
2017-11-27 14:35:00 +01:00
fromJSONObject(item:any):Field{
this.id = item.id;
this.title = item.title;
2017-12-01 15:00:37 +01:00
this.defaultValue = new JsonSerializer<DefaultValue>().fromJSONObject(item.defaultValue, DefaultValue);
2017-11-27 14:35:00 +01:00
this.description = item.description;
2017-12-01 15:00:37 +01:00
this.extendedDescription = item.extendedDescription;
2017-12-11 09:50:34 +01:00
this.defaultVisibility = item.defaultVisibility !==null ? item.defaultVisibility : true;
2017-11-27 14:35:00 +01:00
this.page = item.page;
this.multiplicity = new JsonSerializer<Multiplicity>().fromJSONObject(item.multiplicity, Multiplicity);
this.ordinal = item.ordinal;
2017-12-01 15:00:37 +01:00
this.viewStyle = new JsonSerializer<ViewStyle>().fromJSONObject(item.viewStyle, ViewStyle);
this.visible = new JsonSerializer<Visibility>().fromJSONObject(item.visible, Visibility);
2017-12-01 17:31:47 +01:00
if(item.data) {
if(this.viewStyle.renderStyle === "combobox"){
if(item.data.type === "autocomplete") this.data = new JsonSerializer<AutocompleteData>().fromJSONObject(item.data,AutocompleteData);
if(item.data.type === "wordlist")this.data = new JsonSerializer<WordListData>().fromJSONObject(item.data,WordListData);
}else{
if(this.viewStyle.renderStyle === "radiobox") this.data = new JsonSerializer<RadioBoxData>().fromJSONObject(item.data,RadioBoxData);
}
}
2017-11-27 14:35:00 +01:00
return this;
}
buildForm():FormGroup{
let formGroup = this.formBuilder.group({
id: [this.id],
title: [this.title],
description: [this.description],
extendedDescription:[this.extendedDescription],
defaultVisibility:[this.defaultVisibility],
page:[this.page] ,
ordinal:[this.ordinal]
2017-12-01 15:00:37 +01:00
});
2017-11-27 14:35:00 +01:00
2017-12-01 15:00:37 +01:00
formGroup.addControl("multiplicity", this.multiplicity.buildForm());
formGroup.addControl("defaultValue", this.defaultValue.buildForm());
formGroup.addControl("viewStyle", this.viewStyle.buildForm());
2017-12-01 17:31:47 +01:00
formGroup.addControl("visible", this.visible.buildForm());
//formGroup.addControl("data",this.data? this.data.buildForm():this.formBuilder.group({}));
if(this.data)formGroup.addControl("data",this.data.buildForm());
2017-12-01 17:31:47 +01:00
2017-12-11 09:50:34 +01:00
if( formGroup.controls["defaultVisibility"].value == null) formGroup.controls["defaultVisibility"].setValue(true);
2017-12-07 14:44:17 +01:00
2017-11-27 14:35:00 +01:00
return formGroup;
}
}