diff --git a/packages/input-value/src/__tests__/index.test.js b/packages/input-value/src/__tests__/index.test.js index 8044fe1..f5f34ef 100644 --- a/packages/input-value/src/__tests__/index.test.js +++ b/packages/input-value/src/__tests__/index.test.js @@ -24,3 +24,9 @@ test('change value via onChange', () => { act(() => result.current.onChange({target: {value: newValue}})); expect(result.current.value).toBe(newValue); }); + +test('target not in change value', () => { + const {result} = renderHook(() => useInputValue()); + act(() => result.current.onChange('foo')); + expect(result.current.value).toBe('foo'); +}); diff --git a/packages/input-value/src/index.ts b/packages/input-value/src/index.ts index 6927a9e..b283b0f 100644 --- a/packages/input-value/src/index.ts +++ b/packages/input-value/src/index.ts @@ -1,18 +1,19 @@ import {useState, useCallback} from 'react'; -interface ChangeEvent { - target: {value: string}; -} - export interface InputValueState { value: string; - onChange(e: ChangeEvent): void; + onChange(e: any): void; } export function useInputValue(initialValue: string = ''): InputValueState { const [value, setValue] = useState(initialValue); const onChange = useCallback( - (e: ChangeEvent) => setValue(e.target.value), + (event: any) => { + const v = event && event.target && 'value' in event.target + ? (event.target as HTMLInputElement).value + : event; + setValue(v); + }, [] ); return {value, onChange};