UNPKG

@codeforges/ng-forms

Version:

Angular 4+ Dynamic form builder, decorate your models to generate forms or create them manually

55 lines 2.63 kB
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