Skip to content

Commit 9c7062c

Browse files
authored
fix: combobox onMouseDown event default behavior (#1042)
1 parent 74969b0 commit 9c7062c

File tree

2 files changed

+43
-3
lines changed

2 files changed

+43
-3
lines changed

src/Selector/index.tsx

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,7 @@ const Selector: React.ForwardRefRenderFunction<RefSelectorProps, SelectorProps>
109109
mode,
110110
showSearch,
111111
tokenWithEnter,
112+
disabled,
112113

113114
autoClearSearchValue,
114115

@@ -228,9 +229,10 @@ const Selector: React.ForwardRefRenderFunction<RefSelectorProps, SelectorProps>
228229
const onMouseDown: React.MouseEventHandler<HTMLElement> = (event) => {
229230
const inputMouseDown = getInputMouseDown();
230231

231-
// when mode is combobox, don't prevent default behavior
232+
// when mode is combobox and it is disabled, don't prevent default behavior
232233
// https://github.com/ant-design/ant-design/issues/37320
233-
if (event.target !== inputRef.current && !inputMouseDown && mode !== 'combobox') {
234+
// https://github.com/ant-design/ant-design/issues/48281
235+
if (event.target !== inputRef.current && !inputMouseDown && !(mode === 'combobox' && disabled)) {
234236
event.preventDefault();
235237
}
236238

tests/Combobox.test.tsx

Lines changed: 39 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
/* eslint-disable max-classes-per-file */
22

33
import '@testing-library/jest-dom';
4-
import { fireEvent, render } from '@testing-library/react';
4+
import { createEvent, fireEvent, render } from '@testing-library/react';
55
import KeyCode from 'rc-util/lib/KeyCode';
66
import { resetWarned } from 'rc-util/lib/warning';
77
import React, { act } from 'react';
@@ -604,4 +604,42 @@ describe('Select.Combobox', () => {
604604
const { container } = render(<Select mode="combobox" value={0} />);
605605
expect(container.querySelector('input')!.value).toBe('0');
606606
});
607+
608+
// https://github.com/ant-design/ant-design/issues/48281
609+
describe('combobox mode onMouseDown event default behavior', () => {
610+
it('should prevent default behavior when mode is combobox', () => {
611+
const preventDefault = jest.fn();
612+
const { container } = render(
613+
<Select mode="combobox" value="1">
614+
<Option value="1">1</Option>
615+
<Option value="2">2</Option>
616+
</Select>,
617+
);
618+
619+
const selectorEle = container.querySelector('.rc-select-selector');
620+
621+
const mouseDownEvent = createEvent.mouseDown(selectorEle);
622+
mouseDownEvent.preventDefault = preventDefault;
623+
fireEvent(selectorEle, mouseDownEvent);
624+
expect(preventDefault).toHaveBeenCalled();
625+
})
626+
627+
it('should not prevent default behavior when mode is combobox and it is disabled', () => {
628+
const preventDefault = jest.fn();
629+
const { container } = render(
630+
<Select mode="combobox" value="1" disabled>
631+
<Option value="1">1</Option>
632+
<Option value="2">2</Option>
633+
</Select>,
634+
);
635+
636+
const selectorEle = container.querySelector('.rc-select-selector');
637+
638+
const mouseDownEvent = createEvent.mouseDown(selectorEle);
639+
mouseDownEvent.preventDefault = preventDefault;
640+
fireEvent(selectorEle, mouseDownEvent);
641+
expect(preventDefault).not.toHaveBeenCalled();
642+
})
643+
});
644+
607645
});

0 commit comments

Comments
 (0)