Skip to content

Commit f615ec6

Browse files
authored
fix: fix error when pass disabled and press enter. (#81)
* fix: fix error when pass disabled and press enter. * Refactoring. * fix error when press enter after trigger blur & add tests. * Refactoring. * Refactoring.
1 parent e3b6dd6 commit f615ec6

File tree

2 files changed

+34
-0
lines changed

2 files changed

+34
-0
lines changed

src/Input.tsx

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,9 @@ const Input = forwardRef<InputRef, InputProps>((props, ref) => {
9494
}));
9595

9696
useEffect(() => {
97+
if (keyLockRef.current) {
98+
keyLockRef.current = false;
99+
}
97100
setFocused((prev) => (prev && disabled ? false : prev));
98101
}, [disabled]);
99102

@@ -176,6 +179,9 @@ const Input = forwardRef<InputRef, InputProps>((props, ref) => {
176179
};
177180

178181
const handleBlur: React.FocusEventHandler<HTMLInputElement> = (e) => {
182+
if (keyLockRef.current) {
183+
keyLockRef.current = false;
184+
}
179185
setFocused(false);
180186
onBlur?.(e);
181187
};

tests/index.test.tsx

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,34 @@ describe('Input', () => {
6060
expect(onKeyUp).toBeCalledTimes(1);
6161
});
6262

63+
it('should trigger onPressEnter after trigger onBlur', () => {
64+
const onPressEnter = jest.fn();
65+
const onBlur = jest.fn();
66+
const { container } = render(
67+
<Input onPressEnter={onPressEnter} onBlur={onBlur} />,
68+
);
69+
const inputEl = container.querySelector('input')!;
70+
fireEvent.keyDown(inputEl, { key: 'Enter' });
71+
fireEvent.blur(inputEl);
72+
fireEvent.keyDown(inputEl, { key: 'Enter' });
73+
expect(onBlur).toBeCalled();
74+
expect(onPressEnter).toBeCalledTimes(2);
75+
});
76+
77+
it('should trigger onPressEnter after disabled', () => {
78+
const onPressEnter = jest.fn();
79+
const { container, rerender } = render(
80+
<Input onPressEnter={onPressEnter} />,
81+
);
82+
const inputEl = container.querySelector('input')!;
83+
expect(inputEl.disabled).toBe(false);
84+
fireEvent.keyDown(inputEl, { key: 'Enter' });
85+
rerender(<Input onPressEnter={onPressEnter} disabled={true} />);
86+
expect(inputEl.disabled).toBe(true);
87+
fireEvent.keyDown(inputEl, { key: 'Enter' });
88+
expect(onPressEnter).toBeCalledTimes(2);
89+
});
90+
6391
it('should trigger onChange', () => {
6492
const onChange = jest.fn();
6593
const { container } = render(<Input onChange={onChange} />);

0 commit comments

Comments
 (0)