UNPKG

react-simple-form-hook

Version:

A lightweight, type-safe React form management hook with built-in Zod validation, field-level validation, touched state tracking, async submissions, and advanced form manipulation features

41 lines (37 loc) 1.88 kB
import { ZodSchema } from 'zod'; import { ChangeEvent } from 'react'; interface UseFormResult<TData extends object> { values: TData; errors: Record<keyof TData, string | undefined>; touched: Record<keyof TData, boolean>; isDirty: boolean; isSubmitting: boolean; isValid: boolean; handleChange: (event: ChangeEvent<HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement>) => void; handleBlur: (event: ChangeEvent<HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement>) => void; handleSubmit: (callback?: (data: TData) => void | Promise<void>) => (event: React.FormEvent) => Promise<void>; setFieldValue: <K extends keyof TData>(field: K, value: TData[K]) => void; setFieldError: <K extends keyof TData>(field: K, error: string | undefined) => void; setFieldTouched: <K extends keyof TData>(field: K, touched: boolean) => void; validateField: <K extends keyof TData>(field: K) => boolean; reset: (newValues?: TData) => void; clearErrors: () => void; setValues: (values: Partial<TData>) => void; getFieldProps: <K extends keyof TData>(field: K) => FieldProps<TData[K]>; } interface UseFormProps<TData extends object> { initialValues: TData; schema: ZodSchema<TData>; validateOnChange?: boolean; validateOnBlur?: boolean; onSubmit?: (data: TData) => void | Promise<void>; } interface FieldProps<T> { name: string; value: T; onChange: (event: ChangeEvent<HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement>) => void; onBlur: (event: ChangeEvent<HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement>) => void; } declare function useForm<TData extends object>({ initialValues, schema, validateOnChange, validateOnBlur, onSubmit, }: UseFormProps<TData>): UseFormResult<TData>; export { useForm }; export type { FieldProps, UseFormProps, UseFormResult };