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
JavaScript
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