ngx-form-lib
Version:
Dynamic form library for Angular 18 with Material 3 support. Create complex reactive forms easily using JSON configuration with modern Angular 18 control flow syntax.
64 lines • 8.97 kB
JavaScript
import { Injectable } from '@angular/core';
import { UntypedFormArray, UntypedFormControl, UntypedFormGroup, Validators } from '@angular/forms';
import { ValidationTypeEnum } from '../../shared/models/validation-type.model';
import * as i0 from "@angular/core";
export class FormsService {
initForm(sections) {
const list = [];
sections.forEach((sectionItem) => {
const group = {};
sectionItem.fields.forEach((config) => {
group[config.name] = new UntypedFormControl({ value: config.value, disabled: config.facets?.disabled }, config.validators ? this.createValidations(config.validators) : null);
});
list.push(new UntypedFormGroup(group));
});
return new UntypedFormGroup({ sections: new UntypedFormArray(list) });
}
createValidations(validators) {
if (!validators) {
return null;
}
const validatorsList = [];
for (const validationItem of validators) {
switch (validationItem.type) {
case ValidationTypeEnum.Min: {
validatorsList.push(Validators.min(validationItem.value));
break;
}
case ValidationTypeEnum.Max: {
validatorsList.push(Validators.max(validationItem.value));
break;
}
case ValidationTypeEnum.MinLength: {
validatorsList.push(Validators.minLength(validationItem.value));
break;
}
case ValidationTypeEnum.MaxLength: {
validatorsList.push(Validators.maxLength(validationItem.value));
break;
}
case ValidationTypeEnum.Required: {
validatorsList.push(Validators.required);
break;
}
case ValidationTypeEnum.Email: {
validatorsList.push(Validators.email);
break;
}
default: {
return null;
}
}
}
return validatorsList;
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormsService, providedIn: 'root' }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormsService, decorators: [{
type: Injectable,
args: [{
providedIn: 'root',
}]
}] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybXMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1mb3JtLWxpYi9zcmMvbGliL2NvcmUvc2VydmljZXMvZm9ybXMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0IsRUFBZSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUdqSCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQzs7QUFNL0UsTUFBTSxPQUFPLFlBQVk7SUFDdkIsUUFBUSxDQUFDLFFBQW1CO1FBQzFCLE1BQU0sSUFBSSxHQUF1QixFQUFFLENBQUM7UUFDcEMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFdBQVcsRUFBRSxFQUFFO1lBQy9CLE1BQU0sS0FBSyxHQUEwQyxFQUFFLENBQUM7WUFDeEQsV0FBVyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtnQkFDcEMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLGtCQUFrQixDQUN6QyxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxFQUMxRCxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQ3JFLENBQUM7WUFDSixDQUFDLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFBO1FBQ3hDLENBQUMsQ0FBQyxDQUFBO1FBRUYsT0FBTyxJQUFJLGdCQUFnQixDQUFDLEVBQUMsUUFBUSxFQUFFLElBQUksZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEVBQUMsQ0FBQyxDQUFDO0lBQ3RFLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxVQUF3QjtRQUN4QyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDaEIsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBQ0QsTUFBTSxjQUFjLEdBQWtCLEVBQUUsQ0FBQztRQUV6QyxLQUFLLE1BQU0sY0FBYyxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQ3hDLFFBQVEsY0FBYyxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUM1QixLQUFLLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7b0JBQzVCLGNBQWMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztvQkFDMUQsTUFBTTtnQkFDUixDQUFDO2dCQUNELEtBQUssa0JBQWtCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztvQkFDNUIsY0FBYyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO29CQUMxRCxNQUFNO2dCQUNSLENBQUM7Z0JBQ0QsS0FBSyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO29CQUNsQyxjQUFjLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7b0JBQ2hFLE1BQU07Z0JBQ1IsQ0FBQztnQkFDRCxLQUFLLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7b0JBQ2xDLGNBQWMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztvQkFDaEUsTUFBTTtnQkFDUixDQUFDO2dCQUNELEtBQUssa0JBQWtCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztvQkFDakMsY0FBYyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQ3pDLE1BQU07Z0JBQ1IsQ0FBQztnQkFDRCxLQUFLLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7b0JBQzlCLGNBQWMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUN0QyxNQUFNO2dCQUNSLENBQUM7Z0JBQ0QsT0FBTyxDQUFDLENBQUMsQ0FBQztvQkFDUixPQUFPLElBQUksQ0FBQztnQkFDZCxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7UUFDRCxPQUFPLGNBQWMsQ0FBQztJQUN4QixDQUFDOytHQXZEVSxZQUFZO21IQUFaLFlBQVksY0FGWCxNQUFNOzs0RkFFUCxZQUFZO2tCQUh4QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgVW50eXBlZEZvcm1BcnJheSwgVW50eXBlZEZvcm1Db250cm9sLCBVbnR5cGVkRm9ybUdyb3VwLCBWYWxpZGF0b3JGbiwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuXHJcbmltcG9ydCB7IFZhbGlkYXRpb24gfSBmcm9tICcuLi8uLi9zaGFyZWQvbW9kZWxzL3ZhbGlkYXRpb24ubW9kZWwnO1xyXG5pbXBvcnQgeyBWYWxpZGF0aW9uVHlwZUVudW0gfSBmcm9tICcuLi8uLi9zaGFyZWQvbW9kZWxzL3ZhbGlkYXRpb24tdHlwZS5tb2RlbCc7XHJcbmltcG9ydCB7IFNlY3Rpb24gfSBmcm9tICcuLi8uLi9zaGFyZWQvbW9kZWxzL3NlY3Rpb24ubW9kZWwnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290JyxcclxufSlcclxuZXhwb3J0IGNsYXNzIEZvcm1zU2VydmljZSB7XHJcbiAgaW5pdEZvcm0oc2VjdGlvbnM6IFNlY3Rpb25bXSk6IFVudHlwZWRGb3JtR3JvdXAge1xyXG4gICAgY29uc3QgbGlzdDogVW50eXBlZEZvcm1Hcm91cFtdID0gW107XHJcbiAgICBzZWN0aW9ucy5mb3JFYWNoKChzZWN0aW9uSXRlbSkgPT4ge1xyXG4gICAgICBjb25zdCBncm91cDogeyBba2V5OiBzdHJpbmddOiBVbnR5cGVkRm9ybUNvbnRyb2wgfSA9IHt9O1xyXG4gICAgICBzZWN0aW9uSXRlbS5maWVsZHMuZm9yRWFjaCgoY29uZmlnKSA9PiB7XHJcbiAgICAgICAgZ3JvdXBbY29uZmlnLm5hbWVdID0gbmV3IFVudHlwZWRGb3JtQ29udHJvbChcclxuICAgICAgICAgIHsgdmFsdWU6IGNvbmZpZy52YWx1ZSwgZGlzYWJsZWQ6IGNvbmZpZy5mYWNldHM/LmRpc2FibGVkIH0sXHJcbiAgICAgICAgICBjb25maWcudmFsaWRhdG9ycyA/IHRoaXMuY3JlYXRlVmFsaWRhdGlvbnMoY29uZmlnLnZhbGlkYXRvcnMpIDogbnVsbFxyXG4gICAgICAgICk7XHJcbiAgICAgIH0pO1xyXG4gICAgICBsaXN0LnB1c2gobmV3IFVudHlwZWRGb3JtR3JvdXAoZ3JvdXApKVxyXG4gICAgfSlcclxuXHJcbiAgICByZXR1cm4gbmV3IFVudHlwZWRGb3JtR3JvdXAoe3NlY3Rpb25zOiBuZXcgVW50eXBlZEZvcm1BcnJheShsaXN0KX0pO1xyXG4gIH1cclxuXHJcbiAgY3JlYXRlVmFsaWRhdGlvbnModmFsaWRhdG9yczogVmFsaWRhdGlvbltdKTogVmFsaWRhdG9yRm5bXSB8IG51bGwge1xyXG4gICAgaWYgKCF2YWxpZGF0b3JzKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgY29uc3QgdmFsaWRhdG9yc0xpc3Q6IFZhbGlkYXRvckZuW10gPSBbXTtcclxuXHJcbiAgICBmb3IgKGNvbnN0IHZhbGlkYXRpb25JdGVtIG9mIHZhbGlkYXRvcnMpIHtcclxuICAgICAgc3dpdGNoICh2YWxpZGF0aW9uSXRlbS50eXBlKSB7XHJcbiAgICAgICAgY2FzZSBWYWxpZGF0aW9uVHlwZUVudW0uTWluOiB7XHJcbiAgICAgICAgICB2YWxpZGF0b3JzTGlzdC5wdXNoKFZhbGlkYXRvcnMubWluKHZhbGlkYXRpb25JdGVtLnZhbHVlKSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgY2FzZSBWYWxpZGF0aW9uVHlwZUVudW0uTWF4OiB7XHJcbiAgICAgICAgICB2YWxpZGF0b3JzTGlzdC5wdXNoKFZhbGlkYXRvcnMubWF4KHZhbGlkYXRpb25JdGVtLnZhbHVlKSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgY2FzZSBWYWxpZGF0aW9uVHlwZUVudW0uTWluTGVuZ3RoOiB7XHJcbiAgICAgICAgICB2YWxpZGF0b3JzTGlzdC5wdXNoKFZhbGlkYXRvcnMubWluTGVuZ3RoKHZhbGlkYXRpb25JdGVtLnZhbHVlKSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgY2FzZSBWYWxpZGF0aW9uVHlwZUVudW0uTWF4TGVuZ3RoOiB7XHJcbiAgICAgICAgICB2YWxpZGF0b3JzTGlzdC5wdXNoKFZhbGlkYXRvcnMubWF4TGVuZ3RoKHZhbGlkYXRpb25JdGVtLnZhbHVlKSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgY2FzZSBWYWxpZGF0aW9uVHlwZUVudW0uUmVxdWlyZWQ6IHtcclxuICAgICAgICAgIHZhbGlkYXRvcnNMaXN0LnB1c2goVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgY2FzZSBWYWxpZGF0aW9uVHlwZUVudW0uRW1haWw6IHtcclxuICAgICAgICAgIHZhbGlkYXRvcnNMaXN0LnB1c2goVmFsaWRhdG9ycy5lbWFpbCk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgZGVmYXVsdDoge1xyXG4gICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdmFsaWRhdG9yc0xpc3Q7XHJcbiAgfVxyXG59Il19