UNPKG

@codeforges/ng-forms

Version:

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

46 lines 2.07 kB
import * as _ from "lodash"; import { NgFormsMetadataKeys } from "../utils/decorators/NgFormsMetadataKeys"; import { BaseInputFactory } from "../inputs/base/BaseInputFactory"; import { FormFieldType } from "../utils/FormFieldType"; import { SelectOption } from "../inputs/SelectOption"; import 'reflect-metadata'; export class NgDynamicFormsModel { constructor() { this.inputs = []; } getFormFields() { if (_.isEmpty(this.inputs)) { _.forOwn(this, (value, propertyKey) => { const formFieldOptions = this.getNgFormFieldMetadata(propertyKey); if (formFieldOptions) { formFieldOptions.fieldName = formFieldOptions.fieldName || propertyKey; const selectOptions = this.buildSelectOptions(formFieldOptions, value); this.inputs.push(this.buildBaseInput(formFieldOptions, value.toString(), selectOptions)); } }); } return this.inputs; } buildBaseInput(formFieldOptions, value, selectOptions) { const params = this.hasSelectOptions(formFieldOptions) ? { selectOptions: selectOptions } : { value: value }; 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; } getNgFormFieldMetadata(propertyKey) { return Reflect.getMetadata(NgFormsMetadataKeys.NG_FORM_FIELD, this, propertyKey); } } //# sourceMappingURL=NgDynamicFormsModel.js.map