Skip to content

Commit cde36a3

Browse files
committed
feat: Support menuTab
1 parent cda1a7f commit cde36a3

File tree

5 files changed

+42
-5
lines changed

5 files changed

+42
-5
lines changed

examples/mix.tsx

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,13 @@ function getTabPanes(count = 50) {
77
const tabs: React.ReactElement[] = [];
88
for (let i = 0; i < count; i += 1) {
99
tabs.push(
10-
<TabPane key={i} tab={`Tab ${i}`} disabled={i === 3} closable={i === 5 ? false : undefined}>
10+
<TabPane
11+
key={i}
12+
tab={`Tab ${i}`}
13+
menuTab={i === 0 ? 'FIRST ONE!' : null}
14+
disabled={i === 3}
15+
closable={i === 5 ? false : undefined}
16+
>
1117
Content of {i}
1218
</TabPane>,
1319
);

src/TabNavList/OperationNode.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ function OperationNode(
7373
aria-controls={id && `${id}-panel-${tab.key}`}
7474
disabled={tab.disabled}
7575
>
76-
{tab.tab}
76+
{tab.menuTab ?? tab.tab}
7777
</MenuItem>
7878
))}
7979
</Menu>
@@ -149,8 +149,8 @@ function OperationNode(
149149
}
150150

151151
const overlayClassName = classNames({
152-
[`${dropdownPrefix}-rtl`]: rtl
153-
})
152+
[`${dropdownPrefix}-rtl`]: rtl,
153+
});
154154

155155
const moreNode: React.ReactElement = mobile ? null : (
156156
<Dropdown

src/TabPanelList/TabPane.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import classNames from 'classnames';
33

44
export interface TabPaneProps {
55
tab?: React.ReactNode;
6+
menuTab?: React.ReactNode;
67
className?: string;
78
style?: React.CSSProperties;
89
disabled?: boolean;

tests/common/util.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ export function getTransformY(wrapper: ReactWrapper) {
6262
return Number(match[1]);
6363
}
6464

65-
export function getTabs(props: TabsProps = null) {
65+
export function getTabs(props: TabsProps = null, moreTabs?: React.ReactNode) {
6666
return (
6767
<Tabs {...props}>
6868
<TabPane tab="light" key="light">
@@ -80,6 +80,7 @@ export function getTabs(props: TabsProps = null) {
8080
<TabPane tab="miu" key="miu">
8181
Miu
8282
</TabPane>
83+
{moreTabs}
8384
</Tabs>
8485
);
8586
}

tests/overflow.test.tsx

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,35 @@ describe('Tabs.Overflow', () => {
8888
jest.useRealTimers();
8989
});
9090

91+
it('menuTab', () => {
92+
jest.useFakeTimers();
93+
const wrapper = mount(
94+
getTabs(
95+
null,
96+
<TabPane key="menu" tab="Menu" menuTab="Tab In Menu">
97+
Test
98+
</TabPane>,
99+
),
100+
);
101+
102+
triggerResize(wrapper);
103+
act(() => {
104+
jest.runAllTimers();
105+
wrapper.update();
106+
});
107+
108+
// Click to open
109+
wrapper.find('.rc-tabs-nav-more').simulate('mouseenter');
110+
jest.runAllTimers();
111+
wrapper.update();
112+
expect(
113+
wrapper
114+
.find('.rc-tabs-dropdown li')
115+
.last()
116+
.text(),
117+
).toEqual('Tab In Menu');
118+
});
119+
91120
[KeyCode.SPACE, KeyCode.ENTER].forEach(code => {
92121
it(`keyboard with select keycode: ${code}`, () => {
93122
jest.useFakeTimers();

0 commit comments

Comments
 (0)