UNPKG

typed-reactive-form

Version:

Allows creation of a ReactiveForm based on a class with its properties properly decorated.

85 lines (77 loc) 2.6 kB
import 'reflect-metadata'; import { __extends } from 'tslib'; import { FormGroup as FormGroup$1, FormControl } from '@angular/forms'; var formMemberKey = 'formMember'; var formGroupKey = 'formGroup'; function FormMember(options) { return function (target, key) { var formMembers = Reflect.getMetadata(formMemberKey, target); if (formMembers) { formMembers.push({ property: key, options: getOptions(options) }); } else { formMembers = [{ property: key, options: getOptions(options) }]; Reflect.defineMetadata(formMemberKey, formMembers, target); } }; } function getOptions(options) { var defaultOptions = { defaultValue: null, validators: [], }; if (options) { Object.assign(defaultOptions, options); } return defaultOptions; } function FormGroup(constructor) { return function (target, key) { var formArrays = Reflect.getMetadata(formGroupKey, target); if (formArrays) { formArrays.push({ property: key, constructor: constructor }); } else { formArrays = [{ property: key, constructor: constructor }]; Reflect.defineMetadata(formGroupKey, formArrays, target); } }; } var TypedReactiveForm = /** @class */ (function (_super) { __extends(TypedReactiveForm, _super); function TypedReactiveForm(c, context) { return _super.call(this, createControls(new c(), context)) || this; } return TypedReactiveForm; }(FormGroup$1)); function createControls(instance, context) { var result = {}; var members = getFormMemberDetails(instance); members.forEach(function (member) { var options = member.options; if (!options.context || options.context.length === 0 || options.context.includes(context)) { result[member.property] = new FormControl(instance[member.property], options.validators); } }); var groups = getFormGroupDetails(instance); if (groups) { groups.forEach(function (group) { result[group.property] = new TypedReactiveForm(group.constructor); }); } return result; } function getFormMemberDetails(instance) { return Reflect.getMetadata(formMemberKey, instance); } function getFormGroupDetails(instance) { return Reflect.getMetadata(formGroupKey, instance); } /* * Public API Surface of typed-reactive-form */ /** * Generated bundle index. Do not edit. */ export { FormGroup, FormMember, TypedReactiveForm }; //# sourceMappingURL=typed-reactive-form.js.map