|
import { ReactNode, TextareaHTMLAttributes } from 'react'; |
|
import { Controller, FieldValues, RegisterOptions, useFormContext } from 'react-hook-form'; |
|
import { classNames } from '@/shared/lib/classNames/classNames'; |
|
import { Cell } from '@/shared/ui/FormComponents/fieldsUI/Cell/Cell'; |
|
import { Textarea } from '../../fieldsUI/Textarea/Textarea'; |
|
import cls from './HTextarea.module.scss'; |
|
|
|
interface HTextareaProps extends Omit<TextareaHTMLAttributes<HTMLTextAreaElement>, 'value' | 'onChange' | 'name'> { |
|
className?: string; |
|
name: string; |
|
label?: string; |
|
noteText?: ReactNode; |
|
registerOptions?: Omit<RegisterOptions<FieldValues, string>, 'valueAsNumber' | 'valueAsDate' | 'setValueAs' | 'disabled'>; |
|
} |
|
|
|
export const HTextarea = (props: HTextareaProps) => { |
|
const { className, name, label, noteText, registerOptions, ...otherProps } = props; |
|
const { control } = useFormContext(); |
|
|
|
return ( |
|
<Controller |
|
name={name} |
|
control={control} |
|
rules={registerOptions} |
|
render={({ field, fieldState }) => ( |
|
<Cell // |
|
className={classNames(cls.HTextarea, {}, [className])} |
|
label={label} |
|
noteText={noteText} |
|
fieldError={fieldState.error} |
|
> |
|
<Textarea |
|
name={field.name} |
|
inputRef={field.ref} |
|
onBlur={field.onBlur} |
|
onChange={field.onChange} |
|
value={field.value ?? ''} |
|
{...otherProps} |
|
/> |
|
</Cell> |
|
)} |
|
/> |
|
); |
|
}; |
|
|