From cc75a431ba620dca86e988a5c38495d06bbd5b8e Mon Sep 17 00:00:00 2001 From: muxin Date: Tue, 28 Feb 2023 17:19:44 +0800 Subject: [PATCH 01/58] feat(select): force scroll bar visible when list is changed (#916) --- src/OptionList.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/OptionList.tsx b/src/OptionList.tsx index 6fc3a1d51..7208a88fc 100644 --- a/src/OptionList.tsx +++ b/src/OptionList.tsx @@ -145,7 +145,7 @@ const OptionList: React.ForwardRefRenderFunction = (_, r } return () => clearTimeout(timeoutId); - }, [open, searchValue]); + }, [open, searchValue, flattenOptions.length]); // ========================== Values ========================== const onSelectValue = (value: RawValueType) => { From 2df31313dc90e814e832809b2c14aeec9910746a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BA=8C=E8=B4=A7=E6=9C=BA=E5=99=A8=E4=BA=BA?= Date: Tue, 28 Feb 2023 17:20:28 +0800 Subject: [PATCH 02/58] 14.2.1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 5af5ea991..40b99d397 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "rc-select", - "version": "14.2.0", + "version": "14.2.1", "description": "React Select", "engines": { "node": ">=8.x" From b0ad83d8192dbefac6655e8708a577fb07cf29b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BA=8C=E8=B4=A7=E6=9C=BA=E5=99=A8=E4=BA=BA?= Date: Tue, 28 Feb 2023 17:22:45 +0800 Subject: [PATCH 03/58] 14.2.2 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 40b99d397..dee31e187 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "rc-select", - "version": "14.2.1", + "version": "14.2.2", "description": "React Select", "engines": { "node": ">=8.x" From 5f4259b5e8ff4c01f3a302aeccd7af3399f24e32 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BA=8C=E8=B4=A7=E7=88=B1=E5=90=83=E7=99=BD=E8=90=9D?= =?UTF-8?q?=E5=8D=9C?= Date: Wed, 1 Mar 2023 15:05:00 +0800 Subject: [PATCH 04/58] refactor: Use `@rc-component/trigger` (#928) * chore: init * test: update snapshot * test: update snapshot * test: update snapshot * chore: bump trigger support window scroll --- package.json | 2 +- src/BaseSelect.tsx | 2 +- src/SelectTrigger.tsx | 14 +- tests/Select.test.tsx | 22 +- tests/Tags.test.tsx | 6 +- tests/__mocks__/@rc-component/trigger.tsx | 3 + tests/__mocks__/rc-trigger.tsx | 3 - tests/__snapshots__/Select.test.tsx.snap | 818 ++++++---------------- tests/__snapshots__/Tags.test.tsx.snap | 257 ++++--- 9 files changed, 386 insertions(+), 741 deletions(-) create mode 100644 tests/__mocks__/@rc-component/trigger.tsx delete mode 100644 tests/__mocks__/rc-trigger.tsx diff --git a/package.json b/package.json index dee31e187..ca00eedbc 100644 --- a/package.json +++ b/package.json @@ -45,10 +45,10 @@ }, "dependencies": { "@babel/runtime": "^7.10.1", + "@rc-component/trigger": "^1.4.0", "classnames": "2.x", "rc-motion": "^2.0.1", "rc-overflow": "^1.0.0", - "rc-trigger": "^5.0.4", "rc-util": "^5.16.1", "rc-virtual-list": "^3.4.13" }, diff --git a/src/BaseSelect.tsx b/src/BaseSelect.tsx index 715530e7e..a8171c609 100644 --- a/src/BaseSelect.tsx +++ b/src/BaseSelect.tsx @@ -1,5 +1,5 @@ import classNames from 'classnames'; -import type { AlignType } from 'rc-trigger/lib/interface'; +import type { AlignType } from '@rc-component/trigger/lib/interface'; import useLayoutEffect from 'rc-util/lib/hooks/useLayoutEffect'; import useMergedState from 'rc-util/lib/hooks/useMergedState'; import isMobile from 'rc-util/lib/isMobile'; diff --git a/src/SelectTrigger.tsx b/src/SelectTrigger.tsx index 530be5ec0..67cd890d9 100644 --- a/src/SelectTrigger.tsx +++ b/src/SelectTrigger.tsx @@ -1,10 +1,12 @@ -import * as React from 'react'; -import Trigger from 'rc-trigger'; -import type { AlignType } from 'rc-trigger/lib/interface'; +import Trigger from '@rc-component/trigger'; +import type { AlignType } from '@rc-component/trigger/lib/interface'; import classNames from 'classnames'; +import * as React from 'react'; import type { Placement, RenderDOMFunc } from './BaseSelect'; -const getBuiltInPlacements = (dropdownMatchSelectWidth: number | boolean) => { +const getBuiltInPlacements = ( + dropdownMatchSelectWidth: number | boolean, +): Record => { // Enable horizontal overflow auto-adjustment when a custom dropdown width is provided const adjustX = dropdownMatchSelectWidth === true ? 0 : 1; return { @@ -15,6 +17,7 @@ const getBuiltInPlacements = (dropdownMatchSelectWidth: number | boolean) => { adjustX, adjustY: 1, }, + htmlRegion: 'scroll', }, bottomRight: { points: ['tr', 'br'], @@ -23,6 +26,7 @@ const getBuiltInPlacements = (dropdownMatchSelectWidth: number | boolean) => { adjustX, adjustY: 1, }, + htmlRegion: 'scroll', }, topLeft: { points: ['bl', 'tl'], @@ -31,6 +35,7 @@ const getBuiltInPlacements = (dropdownMatchSelectWidth: number | boolean) => { adjustX, adjustY: 1, }, + htmlRegion: 'scroll', }, topRight: { points: ['br', 'tr'], @@ -39,6 +44,7 @@ const getBuiltInPlacements = (dropdownMatchSelectWidth: number | boolean) => { adjustX, adjustY: 1, }, + htmlRegion: 'scroll', }, }; }; diff --git a/tests/Select.test.tsx b/tests/Select.test.tsx index 44f4f848e..3097787c5 100644 --- a/tests/Select.test.tsx +++ b/tests/Select.test.tsx @@ -1,5 +1,5 @@ +import { fireEvent, render as testingRender } from '@testing-library/react'; import { mount, render } from 'enzyme'; -import { render as testingRender, fireEvent } from '@testing-library/react'; import KeyCode from 'rc-util/lib/KeyCode'; import { spyElementPrototype } from 'rc-util/lib/test/domHook'; import { resetWarned } from 'rc-util/lib/warning'; @@ -66,8 +66,8 @@ describe('Select.Basic', () => { }); it('renders dropdown correctly', () => { - const wrapper = render(genSelect({ open: true })); - expect(wrapper).toMatchSnapshot(); + const { container } = testingRender(genSelect({ open: true })); + expect(container.querySelector('.rc-select-dropdown')).toMatchSnapshot(); }); it('renders disabled select correctly', () => { @@ -353,7 +353,7 @@ describe('Select.Basic', () => { }); it('should contain falsy children', () => { - const wrapper = render( + const { container } = testingRender( , ); - expect(wrapper).toMatchSnapshot(); + expect(container.querySelector('.rc-select-dropdown')).toMatchSnapshot(); }); it('open dropdown on down key press', () => { @@ -1038,25 +1038,25 @@ describe('Select.Basic', () => { }); it('filterOption could be true as described in default value', () => { - const wrapper = mount( + const { container } = testingRender( , ); - expect(wrapper.render()).toMatchSnapshot(); + expect(container.querySelector('.rc-select-dropdown')).toMatchSnapshot(); }); it('does not filter when filterOption value is false', () => { - const wrapper = render( + const { container } = testingRender( , ); - expect(wrapper).toMatchSnapshot(); + expect(container.querySelector('.rc-select-dropdown')).toMatchSnapshot(); }); it('backfill', () => { @@ -1130,7 +1130,7 @@ describe('Select.Basic', () => { }); it('should render custom dropdown correctly', () => { - const wrapper = mount( + const { container } = testingRender( , ); - expect(wrapper.render()).toMatchSnapshot(); + expect(container.querySelector('.rc-select-dropdown')).toMatchSnapshot(); }); it('should trigger click event in custom node', () => { diff --git a/tests/Tags.test.tsx b/tests/Tags.test.tsx index 8b5a4d26a..f8bb05df1 100644 --- a/tests/Tags.test.tsx +++ b/tests/Tags.test.tsx @@ -1,4 +1,5 @@ import { mount } from 'enzyme'; +import { render } from '@testing-library/react'; import KeyCode from 'rc-util/lib/KeyCode'; import classNames from 'classnames'; import * as React from 'react'; @@ -406,9 +407,8 @@ describe('Select.Tags', () => { ); it('renders correctly', () => { - const wrapper = mount(createSelect({ value: ['jack', 'foo'] })); - toggleOpen(wrapper); - expect(wrapper.render()).toMatchSnapshot(); + const { container } = render(createSelect({ value: ['jack', 'foo'], open: true })); + expect(container.firstChild).toMatchSnapshot(); }); it('renders inputValue correctly', () => { diff --git a/tests/__mocks__/@rc-component/trigger.tsx b/tests/__mocks__/@rc-component/trigger.tsx new file mode 100644 index 000000000..887c966db --- /dev/null +++ b/tests/__mocks__/@rc-component/trigger.tsx @@ -0,0 +1,3 @@ +import Trigger from '@rc-component/trigger/lib/mock'; + +export default Trigger; diff --git a/tests/__mocks__/rc-trigger.tsx b/tests/__mocks__/rc-trigger.tsx deleted file mode 100644 index 323030759..000000000 --- a/tests/__mocks__/rc-trigger.tsx +++ /dev/null @@ -1,3 +0,0 @@ -import Trigger from 'rc-trigger/lib/mock'; - -export default Trigger; diff --git a/tests/__snapshots__/Select.test.tsx.snap b/tests/__snapshots__/Select.test.tsx.snap index 5e585330f..963e7ca90 100644 --- a/tests/__snapshots__/Select.test.tsx.snap +++ b/tests/__snapshots__/Select.test.tsx.snap @@ -2,195 +2,109 @@ exports[`Select.Basic does not filter when filterOption value is false 1`] = `
-
- - - -
-
-
-
- 1 -
-
- 2 -
-
-
+
+ 1 +
+
+ 2 +
+
+
+
+
-
+
-
-
- 1 -
-
-
-
- 2 -
-
+ 1 +
+
+
+
+ 2
+
-
`; exports[`Select.Basic filterOption could be true as described in default value 1`] = ` `; @@ -456,191 +370,7 @@ exports[`Select.Basic render renders disabled select correctly 1`] = `
`; -exports[`Select.Basic render renders dropdown correctly 1`] = ` -