UNPKG

@matthew.ngo/reform

Version:

A flexible and powerful React form management library with advanced validation, state observation, and multi-group support

84 lines (75 loc) 2.42 kB
import { SubmitErrorHandler } from "react-hook-form"; import { ValidationResult } from "../validation"; import { FormGroup } from "./form-groups"; export interface FormHandlers<T> { handleBlur: ( fieldName: keyof T, groupIndex: number ) => Promise<ValidationResult>; handleSubmit: ( onValid: (data: { groups: FormGroup<T>[] }) => Promise<void>, onInvalid?: SubmitErrorHandler<{ groups: FormGroup<T>[] }> ) => (e: React.FormEvent) => Promise<void>; handleChange: ( fieldName: keyof T, groupIndex: number, callback?: (value: T[keyof T]) => void ) => { onChange: (e: any) => Promise<void> }; 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<T>[] }, options?: { keepDirty?: boolean; keepErrors?: boolean; keepValues?: boolean; keepIsSubmitted?: boolean; keepTouched?: boolean; } ) => void; }