import React, {
FormEvent,
InputHTMLAttributes,
useEffect,
useState,
} from 'react'
import TextInput from './Input'
interface NumberInputProps extends InputHTMLAttributes {
value: string
allowFloat?: boolean
onValue?: (val: string) => void
}
const NumberInput = React.forwardRef(
(props: NumberInputProps, forwardedRef) => {
const { value, allowFloat, onValue, ...itemProps } = props
const [innerValue, setInnerValue] = useState(value)
useEffect(() => {
setInnerValue(value)
}, [value])
const handleOnInput = (evt: FormEvent) => {
const target = evt.target as HTMLInputElement
let val = target.value
if (allowFloat) {
val = val.replace(/[^0-9.]/g, '').replace(/(\..*?)\..*/g, '$1')
onValue?.(val)
} else {
val = val.replace(/\D/g, '')
onValue?.(val)
}
setInnerValue(val)
}
return (
)
}
)
NumberInput.defaultProps = {
allowFloat: false,
}
export default NumberInput