export type FieldErrors = Record; export type TouchedFields = Record; export type GenericObject = { [key: string]: any; }; export type ValidatorError = { subaction?: string; formId?: string; fieldErrors: FieldErrors; }; export type ValidationErrorResponseData = { subaction?: string; formId?: string; fieldErrors: FieldErrors; repopulateFields?: unknown; }; export type BaseResult = { submittedData: GenericObject; formId?: string; }; export type ErrorResult = BaseResult & { error: ValidatorError; data: undefined; }; export type SuccessResult = BaseResult & { data: DataType; error: undefined; }; /** * The result when validating a form. */ export type ValidationResult = SuccessResult | ErrorResult; /** * The result when validating an individual field in a form. */ export type ValidateFieldResult = { error?: string; }; /** * A `Validator` can be passed to the `validator` prop of a `ValidatedForm`. */ export type Validator = { validate: (unvalidatedData: GenericObject) => Promise>; validateField: (unvalidatedData: GenericObject, field: string) => Promise; }; export type Valid = { data: DataType; error: undefined; }; export type Invalid = { error: FieldErrors; data: undefined; }; export type CreateValidatorArg = { validate: (unvalidatedData: GenericObject) => Promise | Invalid>; validateField: (unvalidatedData: GenericObject, field: string) => Promise; }; export type ValidatorData> = T extends Validator ? U : never;