From 5a30daff5f08c04cc0c552fc3098cfd45e4b22f7 Mon Sep 17 00:00:00 2001 From: lixuepeng <18365206692@163.com> Date: Mon, 6 May 2024 14:42:26 +0800 Subject: [PATCH] fix: combobox onMouseDown event default behavior --- src/Selector/index.tsx | 6 ++++-- tests/Combobox.test.tsx | 40 +++++++++++++++++++++++++++++++++++++++- 2 files changed, 43 insertions(+), 3 deletions(-) diff --git a/src/Selector/index.tsx b/src/Selector/index.tsx index e0ca1726..a24ca7c2 100644 --- a/src/Selector/index.tsx +++ b/src/Selector/index.tsx @@ -109,6 +109,7 @@ const Selector: React.ForwardRefRenderFunction mode, showSearch, tokenWithEnter, + disabled, autoClearSearchValue, @@ -228,9 +229,10 @@ const Selector: React.ForwardRefRenderFunction const onMouseDown: React.MouseEventHandler = (event) => { const inputMouseDown = getInputMouseDown(); - // when mode is combobox, don't prevent default behavior + // when mode is combobox and it is disabled, don't prevent default behavior // https://github.com/ant-design/ant-design/issues/37320 - if (event.target !== inputRef.current && !inputMouseDown && mode !== 'combobox') { + // https://github.com/ant-design/ant-design/issues/48281 + if (event.target !== inputRef.current && !inputMouseDown && !(mode === 'combobox' && disabled)) { event.preventDefault(); } diff --git a/tests/Combobox.test.tsx b/tests/Combobox.test.tsx index 336927c2..150128c8 100644 --- a/tests/Combobox.test.tsx +++ b/tests/Combobox.test.tsx @@ -1,7 +1,7 @@ /* eslint-disable max-classes-per-file */ import '@testing-library/jest-dom'; -import { fireEvent, render } from '@testing-library/react'; +import { createEvent, fireEvent, render } from '@testing-library/react'; import KeyCode from 'rc-util/lib/KeyCode'; import { resetWarned } from 'rc-util/lib/warning'; import React, { act } from 'react'; @@ -604,4 +604,42 @@ describe('Select.Combobox', () => { const { container } = render( + + + , + ); + + const selectorEle = container.querySelector('.rc-select-selector'); + + const mouseDownEvent = createEvent.mouseDown(selectorEle); + mouseDownEvent.preventDefault = preventDefault; + fireEvent(selectorEle, mouseDownEvent); + expect(preventDefault).toHaveBeenCalled(); + }) + + it('should not prevent default behavior when mode is combobox and it is disabled', () => { + const preventDefault = jest.fn(); + const { container } = render( + , + ); + + const selectorEle = container.querySelector('.rc-select-selector'); + + const mouseDownEvent = createEvent.mouseDown(selectorEle); + mouseDownEvent.preventDefault = preventDefault; + fireEvent(selectorEle, mouseDownEvent); + expect(preventDefault).not.toHaveBeenCalled(); + }) + }); + });