Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | 13x 13x 13x 46x 9x 37x 37x 37x 37x 11x 13x | import type {
CustomValidatorMap,
FieldErrors,
FormValues,
NormalizedFormSchema
} from "../schema/types";
import { validateField } from "./validateField";
/** Internal validation result used by the runtime before rendering errors. */
export interface FormValidationResult {
valid: boolean;
errors: FieldErrors;
}
export function validateForm(
schema: NormalizedFormSchema,
values: FormValues,
validators: CustomValidatorMap = {},
visibleFields: string[] = schema.fieldOrder
): FormValidationResult {
const visibleFieldSet = new Set(visibleFields);
const errors: FieldErrors = {};
// Hidden conditional fields are skipped so stale required errors do not block submission.
schema.fieldOrder.forEach((fieldName) => {
if (!visibleFieldSet.has(fieldName)) {
return;
}
const field = schema.fieldMap.get(fieldName);
Iif (!field) {
return;
}
const fieldErrors = validateField(field, values[fieldName], values, schema, validators);
if (fieldErrors.length > 0) {
errors[fieldName] = fieldErrors;
}
});
return {
valid: Object.keys(errors).length === 0,
errors
};
}
|