36 lines
707 B
TypeScript
36 lines
707 B
TypeScript
import { useState } from 'react';
|
|
|
|
export function useForm<T>(initialValues: T) {
|
|
const [values, setValues] = useState<T>(initialValues);
|
|
const [errors, setErrors] = useState<Partial<Record<keyof T, string>>>({});
|
|
|
|
const handleChange = (name: keyof T, value: string) => {
|
|
setValues({
|
|
...values,
|
|
[name]: value,
|
|
});
|
|
// Clear error when user types
|
|
if (errors[name]) {
|
|
setErrors({
|
|
...errors,
|
|
[name]: undefined,
|
|
});
|
|
}
|
|
};
|
|
|
|
const setFieldError = (name: keyof T, error: string) => {
|
|
setErrors({
|
|
...errors,
|
|
[name]: error,
|
|
});
|
|
};
|
|
|
|
return {
|
|
values,
|
|
errors,
|
|
handleChange,
|
|
setFieldError,
|
|
setValues,
|
|
};
|
|
}
|