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

82 lines
4.1 KiB
TypeScript

import { BooleanDecisionData } from '../DataField/BooleanDecisionData';
import { FreeTextData } from '../DataField/FreeTextData';
import { TextArea } from '../DataField/TextArea';
import { CheckBoxData } from '../DataField/CheckBoxData';
import { RadioBoxData } from '../DataField/RadioBoxData';
import { WordListData } from '../DataField/WordListData';
import { AutocompleteData } from '../DataField/AutocompleteData';
import { DataField } from '../DataField/DataField';
import { BaseModel } from '../BaseModel';
import { FormGroup, FormArray, FormControl } from '@angular/forms';
import { FormGenerator } from '../interfaces/FormGenerator';
import { JsonSerializer } from '../../utilities/JsonSerializer';
import { Serializable } from '../interfaces/Serializable';
import { Rule } from './Rule';
import { Multiplicity } from './Multiplicity';
import { DefaultValue } from './DefaultValue';
import { ViewStyle } from './ViewStyle';
import { Visibility } from './Visibility';
import { ValidationTypes } from '../../models/common/ValidationTypes';
export class Field extends BaseModel implements Serializable<Field>, FormGenerator<FormGroup>{
public id: string;
public title: string;
public defaultValue: DefaultValue = new DefaultValue;
public viewStyle: ViewStyle = new ViewStyle();
public page: number;
//public multiplicity: Multiplicity = new Multiplicity();
public ordinal: number;
public visible: Visibility = new Visibility();
public data: DataField<any>;
public validations: Array<ValidationTypes>;
fromJSONObject(item: any): Field {
this.id = item.id;
this.title = item.title;
this.defaultValue = JsonSerializer.fromJSONObject(item.defaultValue, DefaultValue);
this.page = item.page;
// this.multiplicity = new JsonSerializer<Multiplicity>().fromJSONObject(item.multiplicity, Multiplicity);
this.ordinal = item.ordinal;
this.validations = item.validations;
this.viewStyle = JsonSerializer.fromJSONObject(item.viewStyle, ViewStyle);
this.visible = JsonSerializer.fromJSONObject(item.visible, Visibility);
if (item.data) {
if (this.viewStyle.renderStyle === "combobox") {
if (item.data.type === "autocomplete") this.data = JsonSerializer.fromJSONObject(item.data, AutocompleteData);
if (item.data.type === "wordlist") this.data = JsonSerializer.fromJSONObject(item.data, WordListData);
} else {
if (this.viewStyle.renderStyle === "radiobox") this.data = JsonSerializer.fromJSONObject(item.data, RadioBoxData);
if (this.viewStyle.renderStyle === "checkBox") this.data = JsonSerializer.fromJSONObject(item.data, CheckBoxData);
if (this.viewStyle.renderStyle === "textarea") this.data = JsonSerializer.fromJSONObject(item.data, TextArea);
if (this.viewStyle.renderStyle === "freetext") this.data = JsonSerializer.fromJSONObject(item.data, FreeTextData);
if (this.viewStyle.renderStyle === "booleanDecision") this.data = JsonSerializer.fromJSONObject(item.data, BooleanDecisionData);
}
}
return this;
}
buildForm(): FormGroup {
let formGroup = this.formBuilder.group({
id: [this.id],
title: [this.title],
page: [this.page],
ordinal: [this.ordinal]
});
let valid = ValidationTypes.None
if (this.validations && this.validations[0] == 1) valid = ValidationTypes.Required
const arr = new FormArray([
new FormControl(valid)
]);
//formGroup.addControl("multiplicity", this.multiplicity.buildForm());
formGroup.addControl("validations", arr);
formGroup.addControl("defaultValue", this.defaultValue.buildForm());
formGroup.addControl("viewStyle", this.viewStyle.buildForm());
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());
return formGroup;
}
}