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
TypeScript
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 };