import * as React from "react" import { FieldPath, FieldValues, useFormContext, } from "react-hook-form" type FormFieldContextValue< TFieldValues extends FieldValues = FieldValues, TName extends FieldPath = FieldPath > = { name: TName } export const FormFieldContext = React.createContext( {} as FormFieldContextValue ) type FormItemContextValue = { id: string } export const FormItemContext = React.createContext( {} as FormItemContextValue ) export const useFormField = () => { const fieldContext = React.useContext(FormFieldContext) const itemContext = React.useContext(FormItemContext) const { getFieldState, formState } = useFormContext() const fieldState = getFieldState(fieldContext.name, formState) if (!fieldContext) { throw new Error("useFormField should be used within ") } const { id } = itemContext return { id, name: fieldContext.name, formItemId: `${id}-form-item`, formDescriptionId: `${id}-form-item-description`, formMessageId: `${id}-form-item-message`, ...fieldState, } }