Skip to content

Commit 3f60f72

Browse files
authored
fix: should close when blur (#871)
* fix: should close when blur * chore: trigger ci
1 parent 973a4e7 commit 3f60f72

File tree

3 files changed

+45
-18
lines changed

3 files changed

+45
-18
lines changed

package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,8 @@
5353
"rc-virtual-list": "^3.2.0"
5454
},
5555
"devDependencies": {
56-
"@testing-library/react": "12",
56+
"@testing-library/jest-dom": "^5.16.5",
57+
"@testing-library/react": "^12.1.5",
5758
"@types/enzyme": "^3.10.9",
5859
"@types/jest": "^26.0.24",
5960
"@types/react": "^17.0.15",

src/BaseSelect.tsx

Lines changed: 17 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,22 @@
1-
import * as React from 'react';
21
import classNames from 'classnames';
32
import type { AlignType } from 'rc-trigger/lib/interface';
4-
import KeyCode from 'rc-util/lib/KeyCode';
3+
import useLayoutEffect from 'rc-util/lib/hooks/useLayoutEffect';
4+
import useMergedState from 'rc-util/lib/hooks/useMergedState';
55
import isMobile from 'rc-util/lib/isMobile';
6+
import KeyCode from 'rc-util/lib/KeyCode';
67
import { useComposeRef } from 'rc-util/lib/ref';
7-
import type { ScrollTo, ScrollConfig } from 'rc-virtual-list/lib/List';
8-
import useMergedState from 'rc-util/lib/hooks/useMergedState';
9-
import useLayoutEffect from 'rc-util/lib/hooks/useLayoutEffect';
10-
import { getSeparatedContent } from './utils/valueUtil';
11-
import type { RefTriggerProps } from './SelectTrigger';
12-
import SelectTrigger from './SelectTrigger';
8+
import type { ScrollConfig, ScrollTo } from 'rc-virtual-list/lib/List';
9+
import * as React from 'react';
10+
import { BaseSelectContext } from './hooks/useBaseProps';
11+
import useDelayReset from './hooks/useDelayReset';
12+
import useLock from './hooks/useLock';
13+
import useSelectTriggerControl from './hooks/useSelectTriggerControl';
1314
import type { RefSelectorProps } from './Selector';
1415
import Selector from './Selector';
15-
import useSelectTriggerControl from './hooks/useSelectTriggerControl';
16-
import useDelayReset from './hooks/useDelayReset';
16+
import type { RefTriggerProps } from './SelectTrigger';
17+
import SelectTrigger from './SelectTrigger';
1718
import TransBtn from './TransBtn';
18-
import useLock from './hooks/useLock';
19-
import { BaseSelectContext } from './hooks/useBaseProps';
19+
import { getSeparatedContent } from './utils/valueUtil';
2020

2121
const DEFAULT_OMIT_PROPS = [
2222
'value',
@@ -368,9 +368,12 @@ const BaseSelect = React.forwardRef((props: BaseSelectProps, ref: React.Ref<Base
368368
(newOpen?: boolean) => {
369369
const nextOpen = newOpen !== undefined ? newOpen : !mergedOpen;
370370

371-
if (mergedOpen !== nextOpen && !disabled) {
371+
if (!disabled) {
372372
setInnerOpen(nextOpen);
373-
onDropdownVisibleChange?.(nextOpen);
373+
374+
if (mergedOpen !== nextOpen) {
375+
onDropdownVisibleChange?.(nextOpen);
376+
}
374377
}
375378
},
376379
[disabled, mergedOpen, setInnerOpen, onDropdownVisibleChange],

tests/Combobox.test.tsx

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,19 @@
11
/* eslint-disable max-classes-per-file */
22

3+
import '@testing-library/jest-dom';
4+
import { act, fireEvent, render } from '@testing-library/react';
35
import { mount } from 'enzyme';
46
import KeyCode from 'rc-util/lib/KeyCode';
5-
import React from 'react';
67
import { resetWarned } from 'rc-util/lib/warning';
8+
import React from 'react';
79
import type { SelectProps } from '../src';
810
import Select, { Option } from '../src';
11+
import allowClearTest from './shared/allowClearTest';
912
import focusTest from './shared/focusTest';
1013
import keyDownTest from './shared/keyDownTest';
1114
import openControlledTest from './shared/openControlledTest';
12-
import { expectOpen, toggleOpen, selectItem, injectRunAllTimers } from './utils/common';
13-
import allowClearTest from './shared/allowClearTest';
1415
import throwOptionValue from './shared/throwOptionValue';
16+
import { expectOpen, injectRunAllTimers, selectItem, toggleOpen } from './utils/common';
1517

1618
async function delay(timeout = 0) {
1719
return new Promise((resolve) => {
@@ -577,4 +579,25 @@ describe('Select.Combobox', () => {
577579
selectItem(wrapper);
578580
expect(wrapper.find('.rc-select-item-option-selected').length).toBe(0);
579581
});
582+
583+
// https://github.com/ant-design/ant-design/issues/38844
584+
it('not show dropdown when options changed', () => {
585+
jest.useFakeTimers();
586+
const { container, rerender } = render(<Select mode="combobox" options={[]} />);
587+
588+
fireEvent.mouseDown(container.querySelector('input'));
589+
act(() => {
590+
jest.runAllTimers();
591+
});
592+
593+
fireEvent.blur(container.querySelector('input'));
594+
act(() => {
595+
jest.runAllTimers();
596+
});
597+
598+
rerender(<Select mode="combobox" options={[{ value: 'shouldHide' }]} />);
599+
expect(document.body.querySelector('.rc-select-dropdown-hidden')).toBeTruthy();
600+
601+
jest.useRealTimers();
602+
});
580603
});

0 commit comments

Comments
 (0)