| import { InputHTMLAttributes, useEffect, useRef } from 'react'; | |
| import Inputmask from 'inputmask'; | |
| import { classNames } from '@/shared/lib/classNames/classNames'; | |
| import cls from './Input.module.scss'; | |
| type HTMLInputProps = Omit<InputHTMLAttributes<HTMLInputElement>, 'value' | 'onChange'>; | |
| interface InputProps extends HTMLInputProps { | |
| className?: string; | |
| value?: string; | |
| onChange?: (value: string) => void; | |
| inputRef?: (ref: any) => void; | |
| mask?: string; | |
| maskOptions?: any; | |
| } | |
| export const Input = (props: InputProps) => { | |
| const { className, value, onChange, inputRef, mask, maskOptions, ...otherProps } = props; | |
| const inputRefValue = useRef(null); | |
| if (inputRefValue.current && (mask || maskOptions)) new Inputmask(mask, maskOptions).mask(inputRefValue.current); | |
| useEffect(() => { | |
| if (inputRef) inputRef(inputRefValue.current); | |
| }, [inputRefValue.current]); | |
| return ( | |
| <input | |
| ref={inputRefValue} | |
| className={classNames(cls.Input, {}, [className])} | |
| value={value} | |
| onChange={(e) => onChange?.(e.target.value)} | |
| {...otherProps} | |
| /> | |
| ); | |
| }; | |