UNPKG

ngx-forms-builder

Version:

A small library that adds validation with decorators and build angular forms.

221 lines (211 loc) 6.55 kB
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