Skip to content

Commit cbe4d95

Browse files
authored
fix: keyPath is inverse (#402)
* fix:keyPath is inverse * test: Update snapshot
1 parent 739d69e commit cbe4d95

File tree

7 files changed

+835
-752
lines changed

7 files changed

+835
-752
lines changed

src/Menu.tsx

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -535,12 +535,12 @@ const Menu: React.FC<MenuProps> = props => {
535535
{container}
536536
</PathUserContext.Provider>
537537

538-
{/* Measure menu keys */}
539-
{/* <div style={{ display: 'none' }} aria-hidden> */}
540-
<PathRegisterContext.Provider value={registerPathContext}>
541-
{childList}
542-
</PathRegisterContext.Provider>
543-
{/* </div> */}
538+
{/* Measure menu keys. Add `display: none` to avoid some developer miss use the Menu */}
539+
<div style={{ display: 'none' }} aria-hidden>
540+
<PathRegisterContext.Provider value={registerPathContext}>
541+
{childList}
542+
</PathRegisterContext.Provider>
543+
</div>
544544
</MenuContextProvider>
545545
</IdContext.Provider>
546546
);

src/MenuItem.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,8 @@ const InternalMenuItem = (props: MenuItemProps) => {
135135
): MenuInfo => {
136136
return {
137137
key: eventKey,
138-
keyPath: connectedKeys,
138+
// Note: For legacy code is reversed which not like other antd component
139+
keyPath: [...connectedKeys].reverse(),
139140
item: legacyMenuItemRef.current,
140141
domEvent: e,
141142
};

tests/Menu.spec.js

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -331,18 +331,29 @@ describe('Menu', () => {
331331
});
332332

333333
it('fires click event', () => {
334+
jest.useFakeTimers();
335+
334336
resetWarned();
335337

336338
const errorSpy = jest.spyOn(console, 'error');
337339

338340
const handleClick = jest.fn();
339341
const wrapper = mount(
340-
<Menu onClick={handleClick}>
342+
<Menu onClick={handleClick} openKeys={['parent']}>
341343
<MenuItem key="1">1</MenuItem>
342344
<MenuItem key="2">2</MenuItem>
345+
<Menu.SubMenu key="parent">
346+
<MenuItem key="3">3</MenuItem>
347+
</Menu.SubMenu>
343348
</Menu>,
344349
);
345-
wrapper.find('MenuItem').first().simulate('click');
350+
351+
act(() => {
352+
jest.runAllTimers();
353+
wrapper.update();
354+
});
355+
356+
wrapper.find('.rc-menu-item').first().simulate('click');
346357
const info = handleClick.mock.calls[0][0];
347358
expect(info.key).toBe('1');
348359
expect(info.item).toBeTruthy();
@@ -351,7 +362,13 @@ describe('Menu', () => {
351362
'Warning: `info.item` is deprecated since we will move to function component that not provides React Node instance in future.',
352363
);
353364

365+
handleClick.mockReset();
366+
wrapper.find('.rc-menu-item').last().simulate('click');
367+
expect(handleClick.mock.calls[0][0].keyPath).toEqual(['3', 'parent']);
368+
354369
errorSpy.mockRestore();
370+
371+
jest.useRealTimers();
355372
});
356373

357374
it('fires deselect event', () => {
Lines changed: 40 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,43 +1,49 @@
11
// Jest Snapshot v1, https://goo.gl/fbAQLP
22

33
exports[`Menu.Keyboard no data-menu-id by init 1`] = `
4-
<ul
5-
class="rc-menu rc-menu-root rc-menu-inline"
6-
data-menu-list="true"
7-
role="menu"
8-
tabindex="0"
9-
>
10-
<li
11-
class="rc-menu-submenu rc-menu-submenu-inline rc-menu-submenu-open"
12-
role="none"
4+
Array [
5+
<ul
6+
class="rc-menu rc-menu-root rc-menu-inline"
7+
data-menu-list="true"
8+
role="menu"
9+
tabindex="0"
1310
>
14-
<div
15-
aria-expanded="true"
16-
aria-haspopup="true"
17-
class="rc-menu-submenu-title"
18-
role="menuitem"
19-
style="padding-left:24px"
20-
tabindex="-1"
21-
title="Light"
11+
<li
12+
class="rc-menu-submenu rc-menu-submenu-inline rc-menu-submenu-open"
13+
role="none"
2214
>
23-
Light
24-
<i
25-
class="rc-menu-submenu-arrow"
26-
/>
27-
</div>
28-
<ul
29-
class="rc-menu rc-menu-sub rc-menu-inline"
30-
data-menu-list="true"
31-
>
32-
<li
33-
class="rc-menu-item"
15+
<div
16+
aria-expanded="true"
17+
aria-haspopup="true"
18+
class="rc-menu-submenu-title"
3419
role="menuitem"
35-
style="padding-left:48px"
20+
style="padding-left:24px"
3621
tabindex="-1"
22+
title="Light"
23+
>
24+
Light
25+
<i
26+
class="rc-menu-submenu-arrow"
27+
/>
28+
</div>
29+
<ul
30+
class="rc-menu rc-menu-sub rc-menu-inline"
31+
data-menu-list="true"
3732
>
38-
Bamboo
39-
</li>
40-
</ul>
41-
</li>
42-
</ul>
33+
<li
34+
class="rc-menu-item"
35+
role="menuitem"
36+
style="padding-left:48px"
37+
tabindex="-1"
38+
>
39+
Bamboo
40+
</li>
41+
</ul>
42+
</li>
43+
</ul>,
44+
<div
45+
aria-hidden="true"
46+
style="display:none"
47+
/>,
48+
]
4349
`;

0 commit comments

Comments
 (0)