ngx-forms-builder
Version:
A small library that adds validation with decorators and build angular forms.
221 lines (211 loc) • 6.55 kB
JavaScript
import 'reflect-metadata';
import { Injectable, NgModule } from '@angular/core';
import { FormGroup, FormControl, Validators } from '@angular/forms';
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
/**
* @template T
*/
class ModelFormBuilder {
/**
* @param {?} target
* @param {?=} options
* @return {?}
*/
build(target, options) {
/** @type {?} */
const fg = new FormGroup({}, options);
for (const propertyKey of Object.keys(target)) {
/** @type {?} */
const decorators = Reflect.getMetadataKeys(target, propertyKey);
if (decorators.indexOf('exclude') > 0) {
continue;
}
fg.addControl(propertyKey, new FormControl(target[propertyKey]));
/** @type {?} */
const validators = [];
decorators
.filter((/**
* @param {?} x
* @return {?}
*/
x => x !== 'design:type'))
.forEach((/**
* @param {?} decorator
* @return {?}
*/
(decorator) => {
/** @type {?} */
const validator = this.getValidatorByType(decorator, target, propertyKey);
if (validator !== null) {
validators.push(validator);
}
}));
fg.get(propertyKey).setValidators(validators);
}
return fg;
}
/**
* @param {?} metadataKey
* @param {?} target
* @param {?} propertyKey
* @return {?}
*/
getValidatorByType(metadataKey, target, propertyKey) {
/** @type {?} */
const validatorsType = {
required: (/**
* @param {?} _
* @return {?}
*/
_ => Validators.required),
email: (/**
* @param {?} _
* @return {?}
*/
_ => Validators.email),
min: (/**
* @param {?} min
* @return {?}
*/
(min) => Validators.min(min)),
max: (/**
* @param {?} max
* @return {?}
*/
(max) => Validators.max(max)),
pattern: (/**
* @param {?} pattern
* @return {?}
*/
(pattern) => Validators.pattern(pattern)),
customValidator: (/**
* @param {?} custom
* @return {?}
*/
(custom) => custom)
};
/** @type {?} */
const metadataValue = Reflect.getMetadata(metadataKey, target, propertyKey);
return validatorsType[metadataKey](metadataValue);
}
}
ModelFormBuilder.decorators = [
{ type: Injectable }
];
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
class NgxFormsBuilderModule {
/**
* @return {?}
*/
static forRoot() {
return {
ngModule: NgxFormsBuilderModule,
providers: [ModelFormBuilder]
};
}
}
NgxFormsBuilderModule.decorators = [
{ type: NgModule, args: [{
declarations: [],
imports: [],
exports: []
},] }
];
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
/** @enum {string} */
const Validations = {
REQUIRED: 'required',
EMAIL: 'email',
MIN: 'min',
MAX: 'max',
PATTERN: 'pattern',
CUSTOMVALIDATOR: 'customValidator',
EXCLUDE: 'exclude',
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
/** @type {?} */
const createValidationDecorator = (/**
* @param {?} validation
* @return {?}
*/
(validation) => {
return (/**
* @return {?}
*/
() => {
return (/**
* @param {?} target
* @param {?} propertyKey
* @return {?}
*/
(target, propertyKey) => {
Reflect.defineMetadata(String(validation), true, target, propertyKey);
});
});
});
/** @type {?} */
const createValidationDecoratorWithValue = (/**
* @template T
* @param {?} validation
* @return {?}
*/
(validation) => {
return (/**
* @param {?=} value
* @return {?}
*/
(value) => {
return (/**
* @param {?} target
* @param {?} propertyKey
* @return {?}
*/
(target, propertyKey) => {
Reflect.defineMetadata(String(validation), value, target, propertyKey);
});
});
});
/** @type {?} */
const Required = createValidationDecorator(Validations.REQUIRED);
/** @type {?} */
const Email = createValidationDecorator(Validations.EMAIL);
/** @type {?} */
const Exclude = createValidationDecorator(Validations.EXCLUDE);
/** @type {?} */
const Min = createValidationDecoratorWithValue(Validations.MIN);
/** @type {?} */
const Max = createValidationDecoratorWithValue(Validations.MAX);
/** @type {?} */
const Pattern = createValidationDecoratorWithValue(Validations.PATTERN);
/** @type {?} */
const CustomValidator = createValidationDecoratorWithValue(Validations.CUSTOMVALIDATOR);
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
export { NgxFormsBuilderModule, ModelFormBuilder, createValidationDecorator, createValidationDecoratorWithValue, Required, Email, Exclude, Min, Max, Pattern, CustomValidator, ModelFormBuilder as ɵa };
//# sourceMappingURL=ngx-forms-builder.js.map