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