kwikid-forms
Version:
KwikID's JSON Configuration based Forms Renderer and Builder
116 lines • 15.8 kB
JavaScript
import { __decorate } from "tslib";
import { FormArray, FormGroup, Validators } from "@angular/forms";
import { PATTERNS, checkObjectKeyExists, hasWhitespacesOnly, isNotEmptyValue, logMethod } from "kwikid-toolkit";
export function NoWhitespacesValidator() {
return (control) => {
const { value } = control;
if (!value || typeof value !== "string") {
return null;
}
return hasWhitespacesOnly(value) ? { onlyWhitespaces: true } : null;
};
}
export class FormValidation {
getFormFieldValidators(field) {
const validators = [];
if (checkObjectKeyExists(field, "validators") &&
checkObjectKeyExists(field.validators, "min") &&
isNotEmptyValue(field.validators.min)) {
validators.push(Validators.min(field.validators.min));
}
if (checkObjectKeyExists(field, "validators") &&
checkObjectKeyExists(field.validators, "max") &&
isNotEmptyValue(field.validators.max)) {
validators.push(Validators.max(field.validators.max));
}
if ((checkObjectKeyExists(field, "required") && field.required) ||
(checkObjectKeyExists(field, "validators") &&
checkObjectKeyExists(field.validators, "required") &&
field.validators.required)) {
validators.push(NoWhitespacesValidator());
validators.push(Validators.required);
}
if (checkObjectKeyExists(field, "validators") &&
checkObjectKeyExists(field.validators, "minLength") &&
isNotEmptyValue(field.validators.minLength)) {
validators.push(Validators.minLength(field.validators.minLength));
}
if (checkObjectKeyExists(field, "validators") &&
checkObjectKeyExists(field.validators, "maxLength") &&
isNotEmptyValue(field.validators.maxLength)) {
validators.push(Validators.maxLength(field.validators.maxLength));
}
if (checkObjectKeyExists(field, "validators") &&
checkObjectKeyExists(field.validators, "pattern") &&
isNotEmptyValue(field.validators.pattern)) {
if (checkObjectKeyExists(field.validators.pattern, "key")) {
if (field.validators.pattern.key === "CUSTOM") {
validators.push(Validators.pattern(field.validators.pattern.pattern));
}
else {
validators.push(Validators.pattern(PATTERNS[field.validators.pattern.key]));
}
}
}
if (checkObjectKeyExists(field, "validators") &&
checkObjectKeyExists(field.validators, "whitespace")) {
validators.push(NoWhitespacesValidator());
}
return validators;
}
getFormFieldsValidationErrors(formGroup) {
const errors = [];
for (const key in formGroup.controls) {
if (isNotEmptyValue(key)) {
const controlErrors = formGroup.controls[key].errors;
if (controlErrors !== null && controlErrors !== undefined) {
Object.keys(controlErrors).forEach((keyError) => {
errors.push({
name: keyError,
value: controlErrors[keyError]
});
});
}
}
}
return errors;
}
getFormFieldsInvalidControls(formToInvestigate) {
const controls = [];
const recursiveFunc = (form) => {
Object.keys(form.controls).forEach((field) => {
const control = form.get(field);
if (control.invalid) {
controls.push({
key: field,
invalid: true
});
}
else {
controls.push({
key: field,
invalid: false
});
}
if (control instanceof FormGroup) {
recursiveFunc(control);
}
else if (control instanceof FormArray) {
recursiveFunc(control);
}
});
};
recursiveFunc(formToInvestigate);
return controls;
}
}
__decorate([
logMethod
], FormValidation.prototype, "getFormFieldValidators", null);
__decorate([
logMethod
], FormValidation.prototype, "getFormFieldsValidationErrors", null);
__decorate([
logMethod
], FormValidation.prototype, "getFormFieldsInvalidControls", null);
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS12aWV3LmZvcm0tdmFsaWRhdGlvbnMuaGVscGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva3dpa2lkLWZvcm1zL3NyYy9saWIvcmVuZGVyZXIvZm9ybS12aWV3L2hlbHBlcnMvZm9ybS12aWV3LmZvcm0tdmFsaWRhdGlvbnMuaGVscGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBRUwsU0FBUyxFQUNULFNBQVMsRUFHVCxVQUFVLEVBQ1gsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQ0wsUUFBUSxFQUNSLG9CQUFvQixFQUNwQixrQkFBa0IsRUFDbEIsZUFBZSxFQUNmLFNBQVMsRUFDVixNQUFNLGdCQUFnQixDQUFDO0FBRXhCLE1BQU0sVUFBVSxzQkFBc0I7SUFDcEMsT0FBTyxDQUFDLE9BQXdCLEVBQTJCLEVBQUU7UUFDM0QsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLE9BQU8sQ0FBQztRQUUxQixJQUFJLENBQUMsS0FBSyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRTtZQUN2QyxPQUFPLElBQUksQ0FBQztTQUNiO1FBRUQsT0FBTyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxlQUFlLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUN0RSxDQUFDLENBQUM7QUFDSixDQUFDO0FBRUQsTUFBTSxPQUFPLGNBQWM7SUFFekIsc0JBQXNCLENBQUMsS0FBVTtRQUMvQixNQUFNLFVBQVUsR0FBRyxFQUFFLENBQUM7UUFFdEIsSUFDRSxvQkFBb0IsQ0FBQyxLQUFLLEVBQUUsWUFBWSxDQUFDO1lBQ3pDLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDO1lBQzdDLGVBQWUsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUNyQztZQUNBLFVB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QUFPLEVBQUUsS0FBSztxQkFDZixDQUFDLENBQUM7aUJBQ0o7Z0JBQ0QsSUFBSSxPQUFPLFlBQVksU0FBUyxFQUFFO29CQUNoQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7aUJBQ3hCO3FCQUFNLElBQUksT0FBTyxZQUFZLFNBQVMsRUFBRTtvQkFDdkMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2lCQUN4QjtZQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDO1FBRUYsYUFBYSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFFakMsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztDQUNGO0FBdEhDO0lBREMsU0FBUzs0REFnRVQ7QUFHRDtJQURDLFNBQVM7bUVBcUJUO0FBR0Q7SUFEQyxTQUFTO2tFQTZCVCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFic3RyYWN0Q29udHJvbCxcbiAgRm9ybUFycmF5LFxuICBGb3JtR3JvdXAsXG4gIFZhbGlkYXRpb25FcnJvcnMsXG4gIFZhbGlkYXRvckZuLFxuICBWYWxpZGF0b3JzXG59IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xuaW1wb3J0IHtcbiAgUEFUVEVSTlMsXG4gIGNoZWNrT2JqZWN0S2V5RXhpc3RzLFxuICBoYXNXaGl0ZXNwYWNlc09ubHksXG4gIGlzTm90RW1wdHlWYWx1ZSxcbiAgbG9nTWV0aG9kXG59IGZyb20gXCJrd2lraWQtdG9vbGtpdFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gTm9XaGl0ZXNwYWNlc1ZhbGlkYXRvcigpOiBWYWxpZGF0b3JGbiB7XG4gIHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPT4ge1xuICAgIGNvbnN0IHsgdmFsdWUgfSA9IGNvbnRyb2w7XG5cbiAgICBpZiAoIXZhbHVlIHx8IHR5cGVvZiB2YWx1ZSAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGhhc1doaXRlc3BhY2VzT25seSh2YWx1ZSkgPyB7IG9ubHlXaGl0ZXNwYWNlczogdHJ1ZSB9IDogbnVsbDtcbiAgfTtcbn1cblxuZXhwb3J0IGNsYXNzIEZvcm1WYWxpZGF0aW9uIHtcbiAgQGxvZ01ldGhvZFxuICBnZXRGb3JtRmllbGRWYWxpZGF0b3JzKGZpZWxkOiBhbnkpIHtcbiAgICBjb25zdCB2YWxpZGF0b3JzID0gW107XG5cbiAgICBpZiAoXG4gICAgICBjaGVja09iamVjdEtleUV4aXN0cyhmaWVsZCwgXCJ2YWxpZGF0b3JzXCIpICYmXG4gICAgICBjaGVja09iamVjdEtleUV4aXN0cyhmaWVsZC52YWxpZGF0b3JzLCBcIm1pblwiKSAmJlxuICAgICAgaXNOb3RFbXB0eVZhbHVlKGZpZWxkLnZhbGlkYXRvcnMubWluKVxuICAgICkge1xuICAgICAgdmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMubWluKGZpZWxkLnZhbGlkYXRvcnMubWluKSk7XG4gICAgfVxuICAgIGlmIChcbiAgICAgIGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZpZWxkLCBcInZhbGlkYXRvcnNcIikgJiZcbiAgICAgIGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZpZWxkLnZhbGlkYXRvcnMsIFwibWF4XCIpICYmXG4gICAgICBpc05vdEVtcHR5VmFsdWUoZmllbGQudmFsaWRhdG9ycy5tYXgpXG4gICAgKSB7XG4gICAgICB2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5tYXgoZmllbGQudmFsaWRhdG9ycy5tYXgpKTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZpZWxkLCBcInJlcXVpcmVkXCIpICYmIGZpZWxkLnJlcXVpcmVkKSB8fFxuICAgICAgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZpZWxkLCBcInZhbGlkYXRvcnNcIikgJiZcbiAgICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHMoZmllbGQudmFsaWRhdG9ycywgXCJyZXF1aXJlZFwiKSAmJlxuICAgICAgICBmaWVsZC52YWxpZGF0b3JzLnJlcXVpcmVkKVxuICAgICkge1xuICAgICAgdmFsaWRhdG9ycy5wdXNoKE5vV2hpdGVzcGFjZXNWYWxpZGF0b3IoKSk7XG4gICAgICB2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5yZXF1aXJlZCk7XG4gICAgfVxuICAgIGlmIChcbiAgICAgIGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZpZWxkLCBcInZhbGlkYXRvcnNcIikgJiZcbiAgICAgIGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZpZWxkLnZhbGlkYXRvcnMsIFwibWluTGVuZ3RoXCIpICYmXG4gICAgICBpc05vdEVtcHR5VmFsdWUoZmllbGQudmFsaWRhdG9ycy5taW5MZW5ndGgpXG4gICAgKSB7XG4gICAgICB2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5taW5MZW5ndGgoZmllbGQudmFsaWRhdG9ycy5taW5MZW5ndGgpKTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHMoZmllbGQsIFwidmFsaWRhdG9yc1wiKSAmJlxuICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHMoZmllbGQudmFsaWRhdG9ycywgXCJtYXhMZW5ndGhcIikgJiZcbiAgICAgIGlzTm90RW1wdHlWYWx1ZShmaWVsZC52YWxpZGF0b3JzLm1heExlbmd0aClcbiAgICApIHtcbiAgICAgIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLm1heExlbmd0aChmaWVsZC52YWxpZGF0b3JzLm1heExlbmd0aCkpO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICBjaGVja09iamVjdEtleUV4aXN0cyhmaWVsZCwgXCJ2YWxpZGF0b3JzXCIpICYmXG4gICAgICBjaGVja09iamVjdEtleUV4aXN0cyhmaWVsZC52YWxpZGF0b3JzLCBcInBhdHRlcm5cIikgJiZcbiAgICAgIGlzTm90RW1wdHlWYWx1ZShmaWVsZC52YWxpZGF0b3JzLnBhdHRlcm4pXG4gICAgKSB7XG4gICAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHMoZmllbGQudmFsaWRhdG9ycy5wYXR0ZXJuLCBcImtleVwiKSkge1xuICAgICAgICBpZiAoZmllbGQudmFsaWRhdG9ycy5wYXR0ZXJuLmtleSA9PT0gXCJDVVNUT01cIikge1xuICAgICAgICAgIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLnBhdHRlcm4oZmllbGQudmFsaWRhdG9ycy5wYXR0ZXJuLnBhdHRlcm4pKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YWxpZGF0b3JzLnB1c2goXG4gICAgICAgICAgICBWYWxpZGF0b3JzLnBhdHRlcm4oUEFUVEVSTlNbZmllbGQudmFsaWRhdG9ycy5wYXR0ZXJuLmtleV0pXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoXG4gICAgICBjaGVja09iamVjdEtleUV4aXN0cyhmaWVsZCwgXCJ2YWxpZGF0b3JzXCIpICYmXG4gICAgICBjaGVja09iamVjdEtleUV4aXN0cyhmaWVsZC52YWxpZGF0b3JzLCBcIndoaXRlc3BhY2VcIilcbiAgICApIHtcbiAgICAgIHZhbGlkYXRvcnMucHVzaChOb1doaXRlc3BhY2VzVmFsaWRhdG9yKCkpO1xuICAgIH1cblxuICAgIHJldHVybiB2YWxpZGF0b3JzO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBnZXRGb3JtRmllbGRzVmFsaWRhdGlvbkVycm9ycyhcbiAgICBmb3JtR3JvdXA6IEZvcm1Hcm91cFxuICApOiB7IG5hbWU6IHN0cmluZzsgdmFsdWU6IHN0cmluZyB9W10ge1xuICAgIGNvbnN0IGVycm9yczogeyBuYW1lOiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfVtdID0gW107XG5cbiAgICBmb3IgKGNvbnN0IGtleSBpbiBmb3JtR3JvdXAuY29udHJvbHMpIHtcbiAgICAgIGlmIChpc05vdEVtcHR5VmFsdWUoa2V5KSkge1xuICAgICAgICBjb25zdCBjb250cm9sRXJyb3JzOiBWYWxpZGF0aW9uRXJyb3JzID0gZm9ybUdyb3VwLmNvbnRyb2xzW2tleV0uZXJyb3JzO1xuICAgICAgICBpZiAoY29udHJvbEVycm9ycyAhPT0gbnVsbCAmJiBjb250cm9sRXJyb3JzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBPYmplY3Qua2V5cyhjb250cm9sRXJyb3JzKS5mb3JFYWNoKChrZXlFcnJvcikgPT4ge1xuICAgICAgICAgICAgZXJyb3JzLnB1c2goe1xuICAgICAgICAgICAgICBuYW1lOiBrZXlFcnJvcixcbiAgICAgICAgICAgICAgdmFsdWU6IGNvbnRyb2xFcnJvcnNba2V5RXJyb3JdXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBlcnJvcnM7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGdldEZvcm1GaWVsZHNJbnZhbGlkQ29udHJvbHMoZm9ybVRvSW52ZXN0aWdhdGU6IEZvcm1Hcm91cCB8IEZvcm1BcnJheSkge1xuICAgIGNvbnN0IGNvbnRyb2xzOiBhbnlbXSA9IFtdO1xuXG4gICAgY29uc3QgcmVjdXJzaXZlRnVuYyA9IChmb3JtOiBGb3JtR3JvdXAgfCBGb3JtQXJyYXkpID0+IHtcbiAgICAgIE9iamVjdC5rZXlzKGZvcm0uY29udHJvbHMpLmZvckVhY2goKGZpZWxkOiBhbnkpID0+IHtcbiAgICAgICAgY29uc3QgY29udHJvbCA9IGZvcm0uZ2V0KGZpZWxkKTtcbiAgICAgICAgaWYgKGNvbnRyb2wuaW52YWxpZCkge1xuICAgICAgICAgIGNvbnRyb2xzLnB1c2goe1xuICAgICAgICAgICAga2V5OiBmaWVsZCxcbiAgICAgICAgICAgIGludmFsaWQ6IHRydWVcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb250cm9scy5wdXNoKHtcbiAgICAgICAgICAgIGtleTogZmllbGQsXG4gICAgICAgICAgICBpbnZhbGlkOiBmYWxzZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgRm9ybUdyb3VwKSB7XG4gICAgICAgICAgcmVjdXJzaXZlRnVuYyhjb250cm9sKTtcbiAgICAgICAgfSBlbHNlIGlmIChjb250cm9sIGluc3RhbmNlb2YgRm9ybUFycmF5KSB7XG4gICAgICAgICAgcmVjdXJzaXZlRnVuYyhjb250cm9sKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIHJlY3Vyc2l2ZUZ1bmMoZm9ybVRvSW52ZXN0aWdhdGUpO1xuXG4gICAgcmV0dXJuIGNvbnRyb2xzO1xuICB9XG59XG4iXX0=