///
import { SubmitErrorHandler } from "react-hook-form";
import { ValidationResult } from "../validation";
import { FormGroup } from "./form-groups";
export interface FormHandlers {
handleBlur: (fieldName: keyof T, groupIndex: number) => Promise;
handleSubmit: (onValid: (data: {
groups: FormGroup[];
}) => Promise, onInvalid?: SubmitErrorHandler<{
groups: FormGroup[];
}>) => (e: React.FormEvent) => Promise;
handleChange: (fieldName: keyof T, groupIndex: number, callback?: (value: T[keyof T]) => void) => {
onChange: (e: any) => Promise;
};
handleFocus: (fieldName: keyof T, groupIndex: number, callback?: () => void) => {
onFocus: () => void;
};
resetField: (fieldName: keyof T, groupIndex: number) => void;
setFieldValue: (fieldName: keyof T, groupIndex: number, value: T[keyof T], options?: {
shouldValidate?: boolean;
shouldDirty?: boolean;
shouldTouch?: boolean;
}) => void;
touchField: (fieldName: keyof T, groupIndex: number) => void;
/**
* Resets the form to its initial state or to the provided default values.
*
* @param defaultValues - Optional new default values to reset the form to
* @param options - Reset options
* @param options.keepDirty - If true, the dirty state will be preserved (default: false)
* @param options.keepErrors - If true, errors will be preserved (default: false)
* @param options.keepValues - If true, values will be preserved (default: false)
* @param options.keepIsSubmitted - If true, isSubmitted state will be preserved (default: false)
* @param options.keepTouched - If true, touched state will be preserved (default: false)
*
* @example
* // Reset form to initial values
* resetForm();
*
* @example
* // Reset form with new default values
* resetForm({
* groups: [
* {
* id: "new-id-1",
* data: { name: "New Name", email: "new@example.com" }
* }
* ]
* });
*
* @example
* // Reset form but keep dirty state
* resetForm(undefined, { keepDirty: true });
*/
resetForm: (defaultValues?: {
groups: FormGroup[];
}, options?: {
keepDirty?: boolean;
keepErrors?: boolean;
keepValues?: boolean;
keepIsSubmitted?: boolean;
keepTouched?: boolean;
}) => void;
}