| 17 | }; |
| 18 | |
| 19 | export function useInput(initial: string | number | boolean = ''): UseInput { |
| 20 | const stringified = initial.toString(); |
| 21 | const [value, setValue] = useState<string>(stringified); |
| 22 | const onChange = useCallback((e) => setValue(e.target.value), []); |
| 23 | |
| 24 | const clear = useCallback(() => setValue(''), []); |
| 25 | return useMemo( |
| 26 | () => ({ |
| 27 | value, |
| 28 | setValue, |
| 29 | hasValue: value !== undefined && value !== null && value.trim() !== '', |
| 30 | clear, |
| 31 | onChange, |
| 32 | eventBind: { |
| 33 | onChange, |
| 34 | value, |
| 35 | }, |
| 36 | valueBind: { |
| 37 | onChange: setValue, |
| 38 | value, |
| 39 | }, |
| 40 | }), |
| 41 | [clear, onChange, value], |
| 42 | ); |
| 43 | } |
| 44 | |
| 45 | export default useInput; |