Skip to content

Commit e0e6375

Browse files
authored
fix: subMenu flicker (#497)
1 parent b296551 commit e0e6375

File tree

2 files changed

+57
-2
lines changed

2 files changed

+57
-2
lines changed

src/SubMenu/index.tsx

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -262,8 +262,10 @@ const InternalSubMenu = (props: SubMenuProps) => {
262262

263263
// Cache mode if it change to `inline` which do not have popup motion
264264
const triggerModeRef = React.useRef(mode);
265-
if (mode !== 'inline') {
266-
triggerModeRef.current = connectedPath.length > 1 ? 'vertical' : mode;
265+
if (mode !== 'inline' && connectedPath.length > 1) {
266+
triggerModeRef.current = 'vertical';
267+
} else {
268+
triggerModeRef.current = mode;
267269
}
268270

269271
if (!overflowDisabled) {

tests/Collapsed.spec.js

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,59 @@ describe('Menu.Collapsed', () => {
4646
);
4747
});
4848

49+
it('should always follow submenu popup hidden when mode is switched', () => {
50+
const genMenu = props => (
51+
<Menu mode="vertical" {...props}>
52+
<SubMenu key="1" title="submenu1">
53+
<SubMenu key="1-1" title="submenu1-1">
54+
<MenuItem key="Option-1">Option 1</MenuItem>
55+
</SubMenu>
56+
</SubMenu>
57+
</Menu>
58+
);
59+
60+
const { container, rerender } = render(genMenu());
61+
62+
// Hover submenu1
63+
fireEvent.mouseEnter(
64+
container.querySelectorAll('.rc-menu-submenu-title')[0],
65+
);
66+
67+
act(() => {
68+
jest.runAllTimers();
69+
});
70+
act(() => {
71+
jest.runAllTimers();
72+
});
73+
74+
// Hover submenu1-1
75+
fireEvent.mouseEnter(
76+
container.querySelectorAll('.rc-menu-submenu-title')[1],
77+
);
78+
79+
act(() => {
80+
jest.runAllTimers();
81+
});
82+
act(() => {
83+
jest.runAllTimers();
84+
});
85+
86+
rerender(genMenu({ mode: 'inline' }));
87+
88+
// Click submenu1
89+
fireEvent.click(container.querySelectorAll('.rc-menu-submenu-title')[0]);
90+
// Click submenu1-1
91+
fireEvent.click(container.querySelectorAll('.rc-menu-submenu-title')[2]);
92+
93+
act(() => {
94+
jest.runAllTimers();
95+
});
96+
97+
expect(container.querySelectorAll('.rc-menu-submenu')[3]).toHaveClass(
98+
'rc-menu-submenu-hidden',
99+
);
100+
});
101+
49102
it('should always follow openKeys when inlineCollapsed is switched', () => {
50103
const genMenu = props => (
51104
<Menu defaultOpenKeys={['1']} mode="inline" {...props}>

0 commit comments

Comments
 (0)