@andydowell/use-form-state
Version:
A React hook for managing form state and validation
52 lines (51 loc) • 1.64 kB
TypeScript
declare type ValidationParams<Value, Data> = {
[key: string]: {
validator: (value: Value, formState: FormState<Data>) => boolean;
message?: string;
};
};
declare type FormFieldParams<Data> = {
[Key in keyof Data]: {
defaultValue: Data[Key];
required?: {
message: string;
};
validation?: ValidationParams<Data[Key], Data>;
label?: string;
helperText?: string;
};
};
declare type FormStateOptions = {
errorUpdateDelayInSeconds?: number;
};
declare type FormState<Data> = {
[Key in keyof Data]: FormFieldState<Data[Key]>;
};
declare type FormFieldState<Value = any> = {
label: string;
value: Value;
isValid: boolean;
isInteracted: boolean;
isRequired: boolean;
helperText?: string;
error?: {
type?: string;
message?: string;
};
};
declare const useFormState: <Data>(formFieldParams: FormFieldParams<Data>, options?: FormStateOptions) => {
state: FormState<Data>;
set: <Key extends keyof Data>(key: Key, value: Data[Key], setInteracted?: boolean) => void;
update: <Key_1 extends keyof Data>(data: Partial<Data>, setInteracted?: boolean) => void;
checkIfAllValid: (options?: {
updateErrorType?: boolean | undefined;
} | undefined) => boolean;
extractStateValue: <F extends "object" | "formdata">({ format }: {
format: F;
}) => {
object: Data;
formdata: FormData;
}[F];
reset: () => void;
};
export { useFormState, FormFieldParams, FormState, FormFieldState, FormStateOptions };