import React, { Dispatch, MutableRefObject, SetStateAction } from 'react' import useCurrentState from '../utils/use-current-state' export type BindingsChangeTarget = | React.ChangeEvent | string const useInput = ( initialValue: string, ): { state: string setState: Dispatch> currentRef: MutableRefObject reset: () => void bindings: { value: string onChange: (event: BindingsChangeTarget) => void } } => { const [state, setState, currentRef] = useCurrentState(initialValue) return { state, setState, currentRef, reset: () => setState(initialValue), bindings: { value: state, onChange: (event: BindingsChangeTarget) => { if (typeof event === 'object' && event.target) { setState(event.target.value) } else { setState(event as string) } }, }, } } export default useInput