import React, { createContext, PropsWithChildren, ReactElement, useContext, useMemo } from 'react'; import type { Control, // FieldErrors, FieldValues, UseFormReset, UseFormRegister, UseFormGetValues, UseFormHandleSubmit, UseFormSetValue, } from 'react-hook-form'; interface FormContextValue { register: UseFormRegister; control: Control; // errors: FieldErrors; getValues: UseFormGetValues; setValue: UseFormSetValue; handleSubmit: UseFormHandleSubmit; reset: UseFormReset; } function createFormContext() { const context = createContext | undefined>(undefined); const useCustomFormContext = (): FormContextValue => { const value = useContext(context); if (!value) { throw new Error('useCustomFormContext must be used within a CustomFormProvider'); } return value; }; const CustomFormProvider = ({ register, control, setValue, // errors, getValues, handleSubmit, reset, children, }: PropsWithChildren>): ReactElement => { const value = useMemo( () => ({ register, control, getValues, setValue, handleSubmit, reset }), [register, control, setValue, getValues, handleSubmit, reset], ); return {children}; }; return { CustomFormProvider, useCustomFormContext }; } export type { FormContextValue }; export { createFormContext };