28 lines
842 B
TypeScript
28 lines
842 B
TypeScript
import { FormFieldContext } from '@contexts/FormField/FormFieldContext';
|
|
import { FormItemContext } from '@contexts/FormItem/FormItemContext';
|
|
import * as React from 'react';
|
|
import { useFormContext } from 'react-hook-form';
|
|
|
|
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 <FormField>');
|
|
}
|
|
|
|
const { id } = itemContext;
|
|
|
|
return {
|
|
id,
|
|
name: fieldContext.name,
|
|
formItemId: `${id}-form-item`,
|
|
formDescriptionId: `${id}-form-item-description`,
|
|
formMessageId: `${id}-form-item-message`,
|
|
...fieldState
|
|
};
|
|
};
|