UNPKG

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