Skip to content

Commit dedcfda

Browse files
authored
feat!: migrate more dropdown to open API (#1023)
1 parent 9289b16 commit dedcfda

5 files changed

Lines changed: 35 additions & 5 deletions

File tree

‎README.md‎

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,9 @@ Then open `http://localhost:8000`.
108108
| --- | --- | --- | --- |
109109
| `icon` | ReactNode | - | The icon shown in the more trigger. |
110110
| `popupRender` | `(menu: ReactElement, info: { restTabs: Tab[], onClose: () => void }) => ReactElement` | - | Customize the dropdown popup content. The `info` object provides `restTabs` (all overflowed tabs) and `onClose` (function to close the dropdown). |
111-
| Other dropdown props | from DropdownProps | - | All other [rc-dropdown](https://github.com/react-component/dropdown) props such as `trigger`, `overlayClassName`, `visible`, etc. are also supported. |
111+
| Other dropdown props | from DropdownProps | - | All other [rc-dropdown](https://github.com/react-component/dropdown) props such as `trigger`, `overlayClassName`, `open`, etc. are also supported. |
112+
113+
Dropdown 2 uses `more.open` and `more.onOpenChange`. The previous `more.visible` and `more.onVisibleChange` props are no longer supported and must be migrated when upgrading.
112114

113115
## Development
114116

‎README.zh-CN.md‎

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,9 @@ npm start
108108
| --- | --- | --- | --- |
109109
| `icon` | ReactNode | - | 更多按钮的图标。 |
110110
| `popupRender` | `(menu: ReactElement, info: { restTabs: Tab[], onClose: () => void }) => ReactElement` | - | 自定义下拉弹层内容。`info` 对象提供 `restTabs`(所有溢出标签)和 `onClose`(关闭下拉菜单的函数)。 |
111-
| 其他下拉属性 | 来自 DropdownProps | - | 其他 [rc-dropdown](https://github.com/react-component/dropdown) 属性如 `trigger`、`overlayClassName`、`visible` 等也都支持。 |
111+
| 其他下拉属性 | 来自 DropdownProps | - | 其他 [rc-dropdown](https://github.com/react-component/dropdown) 属性如 `trigger`、`overlayClassName`、`open` 等也都支持。 |
112+
113+
Dropdown 2 使用 `more.open` 和 `more.onOpenChange`。旧的 `more.visible` 和 `more.onVisibleChange` 已不再支持,升级时需要同步迁移。
112114

113115
## 本地开发
114116

‎package.json‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@
4141
"prepare": "husky"
4242
},
4343
"dependencies": {
44-
"@rc-component/dropdown": "~1.0.0",
44+
"@rc-component/dropdown": "~2.0.0",
4545
"@rc-component/menu": "~1.6.0",
4646
"@rc-component/motion": "^1.1.3",
4747
"@rc-component/resize-observer": "^1.0.0",

‎src/TabNavList/OperationNode.tsx‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -208,8 +208,8 @@ const OperationNode = React.forwardRef<HTMLDivElement, OperationNodeProps>((prop
208208
<Dropdown
209209
prefixCls={dropdownPrefix}
210210
overlay={overlay}
211-
visible={tabs.length ? open : false}
212-
onVisibleChange={setOpen}
211+
open={tabs.length ? open : false}
212+
onOpenChange={setOpen}
213213
overlayClassName={overlayClassName}
214214
overlayStyle={popupStyle}
215215
mouseEnterDelay={0.1}

‎tests/overflow.test.tsx‎

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,32 @@ describe('Tabs.Overflow', () => {
111111
unmount();
112112
});
113113

114+
it('supports more.open and more.onOpenChange', () => {
115+
jest.useFakeTimers();
116+
const onOpenChange = jest.fn();
117+
const dropdown = (open: boolean) => getTabs({ more: { open, onOpenChange, trigger: 'click' } });
118+
const { container, rerender, unmount } = render(dropdown(false));
119+
triggerResize(container);
120+
act(() => {
121+
jest.runAllTimers();
122+
});
123+
const button = container.querySelector('.rc-tabs-nav-more');
124+
fireEvent.click(button);
125+
expect(onOpenChange).toHaveBeenLastCalledWith(true);
126+
expect(button).not.toHaveClass('rc-tabs-dropdown-open');
127+
128+
rerender(dropdown(true));
129+
expect(button).toHaveClass('rc-tabs-dropdown-open');
130+
fireEvent.click(button);
131+
expect(onOpenChange).toHaveBeenLastCalledWith(false);
132+
expect(button).toHaveClass('rc-tabs-dropdown-open');
133+
134+
rerender(dropdown(false));
135+
expect(button).not.toHaveClass('rc-tabs-dropdown-open');
136+
unmount();
137+
jest.useRealTimers();
138+
});
139+
114140
[KeyCode.SPACE, KeyCode.ENTER].forEach(code => {
115141
it(`keyboard with select keycode: ${code}`, () => {
116142
jest.useFakeTimers();

0 commit comments

Comments
 (0)