@codeforges/ng-forms
Version:
Angular 4+ Dynamic form builder, decorate your models to generate forms or create them manually
55 lines • 2.63 kB
JavaScript
import * as _ from "lodash";
import { NgFormsMetadataKeys } from "../decorators/NgFormsMetadataKeys";
import { BaseInputFactory } from "../inputs/base/BaseInputFactory";
import { FormFieldType } from "./FormFieldType";
import { SelectOption } from "../inputs/SelectOption";
export class NgFormsModel {
getFormFields() {
const inputs = [];
_.forOwn(this, (value, propertyKey) => {
const formFieldOptions = this.getNgFormFieldMetadata(propertyKey);
const required = this.getNgFormRequiredMetadata(propertyKey);
if (formFieldOptions) {
this.setInputName(formFieldOptions, propertyKey);
const selectOptions = this.buildSelectOptions(formFieldOptions, value);
inputs.push(this.buildBaseInput(formFieldOptions, value.toString(), selectOptions, required));
}
});
return inputs;
}
buildBaseInput(formFieldOptions, value, selectOptions, required = false) {
const params = this.buildBaseInputParams(formFieldOptions, selectOptions, value, required);
return BaseInputFactory.build(formFieldOptions.fieldType, formFieldOptions.fieldName, params);
}
hasSelectOptions(formFieldOptions) {
return formFieldOptions.fieldType === FormFieldType.SELECT
|| formFieldOptions.fieldType === FormFieldType.RADIO;
}
buildSelectOptions(formFieldOptions, value) {
let selectOptions;
if (this.hasSelectOptions(formFieldOptions)) {
selectOptions = _.map(value, (element) => {
return new SelectOption(element[formFieldOptions.selectOptionKeys.labelKey], element[formFieldOptions.selectOptionKeys.valueKey]);
});
}
return selectOptions;
}
buildBaseInputParams(formFieldOptions, selectOptions, value, required) {
const params = this.hasSelectOptions(formFieldOptions) ?
{ selectOptions: selectOptions } : { value: value };
params.required = required;
params.disabled = formFieldOptions.disabled;
params.placeholder = formFieldOptions.placeholder;
return params;
}
setInputName(formFieldOptions, propertyKey) {
formFieldOptions.fieldName = formFieldOptions.fieldName || propertyKey;
}
getNgFormRequiredMetadata(propertyKey) {
return Reflect.getMetadata(NgFormsMetadataKeys.NG_FORM_FIELD_REQUIRED, this, propertyKey);
}
getNgFormFieldMetadata(propertyKey) {
return Reflect.getMetadata(NgFormsMetadataKeys.NG_FORM_FIELD, this, propertyKey);
}
}
//# sourceMappingURL=NgFormsModel.js.map