Spaces:
Configuration error
Configuration error
| import React, { | |
| FormEvent, | |
| InputHTMLAttributes, | |
| useEffect, | |
| useState, | |
| } from 'react' | |
| import TextInput from './Input' | |
| interface NumberInputProps extends InputHTMLAttributes<HTMLInputElement> { | |
| value: string | |
| allowFloat?: boolean | |
| onValue?: (val: string) => void | |
| } | |
| const NumberInput = React.forwardRef<HTMLInputElement, NumberInputProps>( | |
| (props: NumberInputProps, forwardedRef) => { | |
| const { value, allowFloat, onValue, ...itemProps } = props | |
| const [innerValue, setInnerValue] = useState(value) | |
| useEffect(() => { | |
| setInnerValue(value) | |
| }, [value]) | |
| const handleOnInput = (evt: FormEvent<HTMLInputElement>) => { | |
| 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 ( | |
| <TextInput | |
| value={innerValue} | |
| onInput={handleOnInput} | |
| className="number-input" | |
| {...itemProps} | |
| ref={forwardedRef} | |
| /> | |
| ) | |
| } | |
| ) | |
| NumberInput.defaultProps = { | |
| allowFloat: false, | |
| } | |
| export default NumberInput | |