react-tiniest-form
Version:
the tiniest form
34 lines (33 loc) • 2.07 kB
TypeScript
import { ChangeEvent, FormEvent, RefCallback } from 'react';
import { ValueOf } from '../../types/@common/utility';
import type { FormFields, Store, Validation, InputValue, Errors } from '../../utils/formStore/createFormStore';
interface UseFormOptions<DefaultValues extends FormFields> {
defaultValues?: DefaultValues;
}
type UseFormReturn<DefaultValues extends FormFields = FormFields> = ReturnType<typeof useForm<DefaultValues>>;
declare const useForm: <DefaultValues extends FormFields>(options?: UseFormOptions<DefaultValues> | undefined) => {
store: Store<DefaultValues>;
errors: Errors<DefaultValues>;
setError: (name: keyof DefaultValues, info?: ValueOf<Errors<DefaultValues>> | undefined) => void;
register: (name: keyof DefaultValues, options?: {
value?: InputValue;
validations?: Validation[] | undefined;
onChange?(e: ChangeEvent<HTMLInputElement | HTMLSelectElement>): void;
onBlur?(e: ChangeEvent<HTMLInputElement | HTMLSelectElement>): void;
} | undefined) => {
value?: string | undefined;
name: keyof DefaultValues;
onChange: (e: ChangeEvent<HTMLInputElement | HTMLSelectElement>) => void;
onBlur: (e: ChangeEvent<HTMLInputElement | HTMLSelectElement>) => void;
ref: RefCallback<HTMLInputElement | HTMLSelectElement>;
};
watch: <FieldNames extends (keyof DefaultValues)[]>(fieldsNames: FieldNames) => { [Name in FieldNames[number]]: string; };
handleSubmit: (onValid?: ((value: keyof DefaultValues extends infer T extends keyof DefaultValues ? { [Name_1 in T]: string; } : never, e: FormEvent<HTMLFormElement>) => void) | undefined, onInvalid?: ((errors: Errors<DefaultValues>, e: FormEvent<HTMLFormElement>) => void) | undefined) => (e: FormEvent<HTMLFormElement>) => void;
getFieldValue: (name: keyof DefaultValues) => string;
getFieldState: (name: keyof DefaultValues) => {
isValid: boolean;
ref: HTMLInputElement | HTMLSelectElement | null;
} | undefined;
};
export { useForm };
export type { UseFormReturn };