react-hook-formify
Version:
A smart wrapper around react-hook-form + zustand
68 lines (60 loc) • 2.83 kB
TypeScript
import React, { ReactNode, Ref, ComponentType } from 'react';
import { UseFormWatch, FieldValues, UseFormGetValues, UseFormGetFieldState, UseFormSetError, UseFormClearErrors, UseFormSetValue, UseFormTrigger, FormState, UseFormResetField, UseFormReset, UseFormHandleSubmit, UseFormUnregister, Control, UseFormRegister, UseFormSetFocus, UseFromSubscribe, FieldErrorsImpl, DeepRequired, GlobalError, UseFormReturn } from 'react-hook-form';
import * as react_jsx_runtime from 'react/jsx-runtime';
import * as zustand from 'zustand';
interface FormFieldConfigs {
name: string;
min?: number;
max?: number;
value?: any;
when?:any,
matches?:any,
required?: boolean;
type?: string | function;
onSubmitValue?: (value: any) => any;
}
interface FormProps {
name?: string;
children?:
| ReactNode
| ((props: {
watch: UseFormWatch<FieldValues>;
getValues: UseFormGetValues<FieldValues>;
getFieldState: UseFormGetFieldState<FieldValues>;
setError: UseFormSetError<FieldValues>;
clearErrors: UseFormClearErrors<FieldValues>;
setValue: UseFormSetValue<FieldValues>;
trigger: UseFormTrigger<FieldValues>;
formState: FormState<FieldValues>;
resetField: UseFormResetField<FieldValues>;
reset: UseFormReset<FieldValues>;
handleSubmit: UseFormHandleSubmit<FieldValues, FieldValues>;
unregister: UseFormUnregister<FieldValues>;
control: Control<FieldValues, any, FieldValues>;
register: UseFormRegister<FieldValues>;
setFocus: UseFormSetFocus<FieldValues>;
subscribe: UseFromSubscribe<FieldValues>;
isLoading: boolean;
values: FieldValues;
errors: Partial<FieldErrorsImpl<DeepRequired<FieldValues>>> & {
root?: Record<string, GlobalError> & GlobalError;
};
}) => React.ReactNode);
onSubmit?: (args: {
values: { [p: string]: any };
methods: UseFormReturn<FieldValues, any, FieldValues>;
}) => void;
isLoading?: boolean;
enableStore?: boolean;
fields?: FormFieldConfigs[];
ref?: Ref<HTMLFormElement>;
}
declare const FormComponent: React.ForwardRefExoticComponent<Omit<FormProps, "ref"> & React.RefAttributes<unknown>>;
interface FieldProps {
name: string;
component: ComponentType<any>;
[key: string]: any;
}
declare const FieldComponent: ({ name, component, ...rest }: FieldProps) => react_jsx_runtime.JSX.Element;
declare const useFormStore: zustand.UseBoundStore<zustand.StoreApi<unknown>>;
export { FieldComponent as Field, type FieldProps, FormComponent as Form, type FormFieldConfigs, type FormProps, useFormStore };