ngx-forms-builder
Version:
A small library that adds validation with decorators and build angular forms.
133 lines • 9.06 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import * as tslib_1 from "tslib";
import 'reflect-metadata';
import { Injectable } from '@angular/core';
import { FormGroup, FormControl, Validators } from '@angular/forms';
/**
* @template T
*/
var ModelFormBuilder = /** @class */ (function () {
function ModelFormBuilder() {
}
/**
* @param {?} target
* @param {?=} options
* @return {?}
*/
ModelFormBuilder.prototype.build = /**
* @param {?} target
* @param {?=} options
* @return {?}
*/
function (target, options) {
var e_1, _a;
var _this = this;
/** @type {?} */
var fg = new FormGroup({}, options);
var _loop_1 = function (propertyKey) {
/** @type {?} */
var decorators = Reflect.getMetadataKeys(target, propertyKey);
if (decorators.indexOf('exclude') > 0) {
return "continue";
}
fg.addControl(propertyKey, new FormControl(target[propertyKey]));
/** @type {?} */
var validators = [];
decorators
.filter((/**
* @param {?} x
* @return {?}
*/
function (x) { return x !== 'design:type'; }))
.forEach((/**
* @param {?} decorator
* @return {?}
*/
function (decorator) {
/** @type {?} */
var validator = _this.getValidatorByType(decorator, target, propertyKey);
if (validator !== null) {
validators.push(validator);
}
}));
fg.get(propertyKey).setValidators(validators);
};
try {
for (var _b = tslib_1.__values(Object.keys(target)), _c = _b.next(); !_c.done; _c = _b.next()) {
var propertyKey = _c.value;
_loop_1(propertyKey);
}
}
catch (e_1_1) { e_1 = { error: e_1_1 }; }
finally {
try {
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
}
finally { if (e_1) throw e_1.error; }
}
return fg;
};
/**
* @param {?} metadataKey
* @param {?} target
* @param {?} propertyKey
* @return {?}
*/
ModelFormBuilder.prototype.getValidatorByType = /**
* @param {?} metadataKey
* @param {?} target
* @param {?} propertyKey
* @return {?}
*/
function (metadataKey, target, propertyKey) {
/** @type {?} */
var validatorsType = {
required: (/**
* @param {?} _
* @return {?}
*/
function (_) { return Validators.required; }),
email: (/**
* @param {?} _
* @return {?}
*/
function (_) { return Validators.email; }),
min: (/**
* @param {?} min
* @return {?}
*/
function (min) { return Validators.min(min); }),
max: (/**
* @param {?} max
* @return {?}
*/
function (max) { return Validators.max(max); }),
pattern: (/**
* @param {?} pattern
* @return {?}
*/
function (pattern) { return Validators.pattern(pattern); }),
customValidator: (/**
* @param {?} custom
* @return {?}
*/
function (custom) { return custom; })
};
/** @type {?} */
var metadataValue = Reflect.getMetadata(metadataKey, target, propertyKey);
return validatorsType[metadataKey](metadataValue);
};
ModelFormBuilder.decorators = [
{ type: Injectable }
];
return ModelFormBuilder;
}());
export { ModelFormBuilder };
/**
* @record
*/
function ValidatorsType() { }
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwtZm9ybS1idWlsZGVyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZ3gtZm9ybXMtYnVpbGRlci8iLCJzb3VyY2VzIjpbImxpYi9zZXJ2aWNlcy9tb2RlbC1mb3JtLWJ1aWxkZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQXVDLE1BQU0sZ0JBQWdCLENBQUM7Ozs7QUFFekc7SUFBQTtJQThDQSxDQUFDOzs7Ozs7SUEzQ1EsZ0NBQUs7Ozs7O0lBQVosVUFBYSxNQUFTLEVBQUUsT0FBdUM7O1FBQS9ELGlCQTBCQzs7WUF6Qk8sRUFBRSxHQUFHLElBQUksU0FBUyxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUM7Z0NBRTFCLFdBQVc7O2dCQUVkLFVBQVUsR0FBRyxPQUFPLENBQUMsZUFBZSxDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUM7WUFDL0QsSUFBSSxVQUFVLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRTs7YUFFdEM7WUFFRCxFQUFFLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFBRSxJQUFJLFdBQVcsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDOztnQkFDM0QsVUFBVSxHQUFrQixFQUFFO1lBRXBDLFVBQVU7aUJBQ1AsTUFBTTs7OztZQUFDLFVBQUEsQ0FBQyxJQUFJLE9BQUEsQ0FBQyxLQUFLLGFBQWEsRUFBbkIsQ0FBbUIsRUFBQztpQkFDaEMsT0FBTzs7OztZQUFDLFVBQUMsU0FBUzs7b0JBQ1gsU0FBUyxHQUFHLEtBQUksQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLEVBQUUsTUFBTSxFQUFFLFdBQVcsQ0FBQztnQkFDekUsSUFBSSxTQUFTLEtBQUssSUFBSSxFQUFFO29CQUN0QixVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2lCQUM1QjtZQUNILENBQUMsRUFBQyxDQUFDO1lBRUwsRUFBRSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUM7OztZQW5CaEQsS0FBMEIsSUFBQSxLQUFBLGlCQUFBLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUEsZ0JBQUE7Z0JBQXhDLElBQU0sV0FBVyxXQUFBO3dCQUFYLFdBQVc7YUFvQnJCOzs7Ozs7Ozs7UUFFRCxPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7Ozs7Ozs7SUFFRCw2Q0FBa0I7Ozs7OztJQUFsQixVQUFtQixXQUFtQixFQUFFLE1BQVMsRUFBRSxXQUE0Qjs7WUFFdkUsY0FBYyxHQUFtQjtZQUNyQyxRQUFROzs7O1lBQUUsVUFBQSxDQUFDLElBQUksT0FBQSxVQUFVLENBQUMsUUFBUSxFQUFuQixDQUFtQixDQUFBO1lBQ2xDLEtBQUs7Ozs7WUFBRSxVQUFBLENBQUMsSUFBSSxPQUFBLFVBQVUsQ0FBQyxLQUFLLEVBQWhCLENBQWdCLENBQUE7WUFDNUIsR0FBRzs7OztZQUFFLFVBQUMsR0FBVyxJQUFLLE9BQUEsVUFBVSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBbkIsQ0FBbUIsQ0FBQTtZQUN6QyxHQUFHOzs7O1lBQUUsVUFBQyxHQUFXLElBQUssT0FBQSxVQUFVLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFuQixDQUFtQixDQUFBO1lBQ3pDLE9BQU87Ozs7WUFBRSxVQUFDLE9BQXdCLElBQUssT0FBQSxVQUFVLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUEzQixDQUEyQixDQUFBO1lBQ2xFLGVBQWU7Ozs7WUFBRSxVQUFDLE1BQW1CLElBQUssT0FBQSxNQUFNLEVBQU4sQ0FBTSxDQUFBO1NBQ2pEOztZQUVLLGFBQWEsR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxNQUFNLEVBQUUsV0FBVyxDQUFDO1FBQzNFLE9BQU8sY0FBYyxDQUFDLFdBQVcsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ3BELENBQUM7O2dCQTVDRixVQUFVOztJQThDWCx1QkFBQztDQUFBLEFBOUNELElBOENDO1NBN0NZLGdCQUFnQjs7OztBQStDN0IsNkJBRUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgJ3JlZmxlY3QtbWV0YWRhdGEnO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUdyb3VwLCBGb3JtQ29udHJvbCwgVmFsaWRhdG9ycywgVmFsaWRhdG9yRm4sIEFic3RyYWN0Q29udHJvbE9wdGlvbnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBNb2RlbEZvcm1CdWlsZGVyPFQ+IHtcblxuICBwdWJsaWMgYnVpbGQodGFyZ2V0OiBULCBvcHRpb25zPzogQWJzdHJhY3RDb250cm9sT3B0aW9ucyB8IG51bGwpOiBGb3JtR3JvdXAge1xuICAgIGNvbnN0IGZnID0gbmV3IEZvcm1Hcm91cCh7fSwgb3B0aW9ucyk7XG5cbiAgICBmb3IgKGNvbnN0IHByb3BlcnR5S2V5IG9mIE9iamVjdC5rZXlzKHRhcmdldCkpIHtcblxuICAgICAgY29uc3QgZGVjb3JhdG9ycyA9IFJlZmxlY3QuZ2V0TWV0YWRhdGFLZXlzKHRhcmdldCwgcHJvcGVydHlLZXkpO1xuICAgICAgaWYgKGRlY29yYXRvcnMuaW5kZXhPZignZXhjbHVkZScpID4gMCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgZmcuYWRkQ29udHJvbChwcm9wZXJ0eUtleSwgbmV3IEZvcm1Db250cm9sKHRhcmdldFtwcm9wZXJ0eUtleV0pKTtcbiAgICAgIGNvbnN0IHZhbGlkYXRvcnM6IFZhbGlkYXRvckZuW10gPSBbXTtcblxuICAgICAgZGVjb3JhdG9yc1xuICAgICAgICAuZmlsdGVyKHggPT4geCAhPT0gJ2Rlc2lnbjp0eXBlJylcbiAgICAgICAgLmZvckVhY2goKGRlY29yYXRvcikgPT4ge1xuICAgICAgICAgIGNvbnN0IHZhbGlkYXRvciA9IHRoaXMuZ2V0VmFsaWRhdG9yQnlUeXBlKGRlY29yYXRvciwgdGFyZ2V0LCBwcm9wZXJ0eUtleSk7XG4gICAgICAgICAgaWYgKHZhbGlkYXRvciAhPT0gbnVsbCkge1xuICAgICAgICAgICAgdmFsaWRhdG9ycy5wdXNoKHZhbGlkYXRvcik7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgZmcuZ2V0KHByb3BlcnR5S2V5KS5zZXRWYWxpZGF0b3JzKHZhbGlkYXRvcnMpO1xuICAgIH1cblxuICAgIHJldHVybiBmZztcbiAgfVxuXG4gIGdldFZhbGlkYXRvckJ5VHlwZShtZXRhZGF0YUtleTogc3RyaW5nLCB0YXJnZXQ6IFQsIHByb3BlcnR5S2V5OiBzdHJpbmcgfCBzeW1ib2wpOiBWYWxpZGF0b3JGbiB7XG5cbiAgICBjb25zdCB2YWxpZGF0b3JzVHlwZTogVmFsaWRhdG9yc1R5cGUgPSB7XG4gICAgICByZXF1aXJlZDogXyA9PiBWYWxpZGF0b3JzLnJlcXVpcmVkLFxuICAgICAgZW1haWw6IF8gPT4gVmFsaWRhdG9ycy5lbWFpbCxcbiAgICAgIG1pbjogKG1pbjogbnVtYmVyKSA9PiBWYWxpZGF0b3JzLm1pbihtaW4pLFxuICAgICAgbWF4OiAobWF4OiBudW1iZXIpID0+IFZhbGlkYXRvcnMubWF4KG1heCksXG4gICAgICBwYXR0ZXJuOiAocGF0dGVybjogc3RyaW5nIHwgUmVnRXhwKSA9PiBWYWxpZGF0b3JzLnBhdHRlcm4ocGF0dGVybiksXG4gICAgICBjdXN0b21WYWxpZGF0b3I6IChjdXN0b206IFZhbGlkYXRvckZuKSA9PiBjdXN0b21cbiAgICB9O1xuXG4gICAgY29uc3QgbWV0YWRhdGFWYWx1ZSA9IFJlZmxlY3QuZ2V0TWV0YWRhdGEobWV0YWRhdGFLZXksIHRhcmdldCwgcHJvcGVydHlLZXkpO1xuICAgIHJldHVybiB2YWxpZGF0b3JzVHlwZVttZXRhZGF0YUtleV0obWV0YWRhdGFWYWx1ZSk7XG4gIH1cblxufVxuXG5pbnRlcmZhY2UgVmFsaWRhdG9yc1R5cGUge1xuICBba2V5OiBzdHJpbmddOiAoKC4uLmFyZ3M6IGFueSkgPT4gVmFsaWRhdG9yRm4pO1xufVxuIl19