diff --git a/src/Input.tsx b/src/Input.tsx index c152f0d..4ce793f 100644 --- a/src/Input.tsx +++ b/src/Input.tsx @@ -94,6 +94,9 @@ const Input = forwardRef((props, ref) => { })); useEffect(() => { + if (keyLockRef.current) { + keyLockRef.current = false; + } setFocused((prev) => (prev && disabled ? false : prev)); }, [disabled]); @@ -176,6 +179,9 @@ const Input = forwardRef((props, ref) => { }; const handleBlur: React.FocusEventHandler = (e) => { + if (keyLockRef.current) { + keyLockRef.current = false; + } setFocused(false); onBlur?.(e); }; diff --git a/tests/index.test.tsx b/tests/index.test.tsx index ea76fbe..6daf791 100644 --- a/tests/index.test.tsx +++ b/tests/index.test.tsx @@ -60,6 +60,34 @@ describe('Input', () => { expect(onKeyUp).toBeCalledTimes(1); }); + it('should trigger onPressEnter after trigger onBlur', () => { + const onPressEnter = jest.fn(); + const onBlur = jest.fn(); + const { container } = render( + , + ); + const inputEl = container.querySelector('input')!; + fireEvent.keyDown(inputEl, { key: 'Enter' }); + fireEvent.blur(inputEl); + fireEvent.keyDown(inputEl, { key: 'Enter' }); + expect(onBlur).toBeCalled(); + expect(onPressEnter).toBeCalledTimes(2); + }); + + it('should trigger onPressEnter after disabled', () => { + const onPressEnter = jest.fn(); + const { container, rerender } = render( + , + ); + const inputEl = container.querySelector('input')!; + expect(inputEl.disabled).toBe(false); + fireEvent.keyDown(inputEl, { key: 'Enter' }); + rerender(); + expect(inputEl.disabled).toBe(true); + fireEvent.keyDown(inputEl, { key: 'Enter' }); + expect(onPressEnter).toBeCalledTimes(2); + }); + it('should trigger onChange', () => { const onChange = jest.fn(); const { container } = render();