import React from 'react'; import type { FieldValues, Path } from 'react-hook-form'; import { useController, useFormContext } from 'react-hook-form'; import type { FormFieldPropsBase } from './types'; import { Field } from '../../../chakra/field'; import type { InputProps } from '../../../chakra/input'; import { Input } from '../../../chakra/input'; import { InputGroup } from '../../../chakra/input-group'; import type { TextareaProps } from '../../../chakra/textarea'; import { Textarea } from '../../../chakra/textarea'; import { getFormFieldErrorText } from '../utils/getFormFieldErrorText'; export interface FormFieldTextProps< FormFields extends FieldValues, Name extends Path = Path, > extends FormFieldPropsBase { asComponent?: 'Input' | 'Textarea'; } const FormFieldTextContent = < FormFields extends FieldValues, Name extends Path = Path, >({ name, placeholder, rules, onBlur, group, inputProps, asComponent, size: sizeProp, disabled, floating: floatingProp, controllerProps, ...restProps }: FormFieldTextProps) => { const defaultSize = asComponent === 'Textarea' ? '2xl' : 'lg'; const size = sizeProp || defaultSize; const floating = floatingProp !== undefined ? floatingProp : size === defaultSize; const { control } = useFormContext(); const { field, fieldState, formState } = useController({ control, name, rules: { ...rules, required: restProps.required }, ...controllerProps, }); const handleBlur = React.useCallback(() => { field.onBlur(); onBlur?.(); }, [ field, onBlur ]); const input = asComponent === 'Textarea' ? (