Skip to content

Commit f38ce5e

Browse files
authored
fix(menu): fix submenu parent item active status on mounted (#3675)
* fix(menu): fix submenu parent item active status on mounted * chore: update snapshot
1 parent 1d40c0d commit f38ce5e

File tree

5 files changed

+2788
-321
lines changed

5 files changed

+2788
-321
lines changed

src/menu/__tests__/__snapshots__/submenu.test.jsx.snap

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,22 @@
33
exports[`Submenu > props > :disabled 1`] = `
44
<li
55
class="t-submenu t-is-disabled"
6-
/>
6+
>
7+
<div
8+
style="display: none;"
9+
/>
10+
</li>
711
`;
812

913
exports[`Submenu > props > :name 1`] = `
1014
<li
1115
class="t-submenu"
1216
name="1"
13-
/>
17+
>
18+
<div
19+
style="display: none;"
20+
/>
21+
</li>
1422
`;
1523

1624
exports[`Submenu > slot > <default> 1`] = `
@@ -50,6 +58,11 @@ exports[`Submenu > slot > <default> 1`] = `
5058
<div />
5159
</ul>
5260
</transition-stub>
61+
<div
62+
style="display: none;"
63+
>
64+
<div />
65+
</div>
5366
</li>
5467
`;
5568
@@ -73,6 +86,9 @@ exports[`Submenu > slot > <icon> 1`] = `
7386
style="--padding-left: 44px; display: none;"
7487
/>
7588
</transition-stub>
89+
<div
90+
style="display: none;"
91+
/>
7692
</li>
7793
`;
7894
@@ -97,5 +113,8 @@ exports[`Submenu > slot > <title> 1`] = `
97113
style="--padding-left: 44px; display: none;"
98114
/>
99115
</transition-stub>
116+
<div
117+
style="display: none;"
118+
/>
100119
</li>
101120
`;

src/menu/menu-item.tsx

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,10 @@ export default defineComponent({
7070
vnode: ctx.slots.default && ctx.slots.default(),
7171
});
7272
});
73-
73+
const activeValues = menu.activeValues.value;
74+
if (activeValues.includes(props.value) && !activeValues.includes(submenu?.value)) {
75+
activeValues.push(submenu?.value);
76+
}
7477
return {
7578
menu,
7679
active,

src/menu/submenu.tsx

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ export default defineComponent({
5151
const isActive = computed(() => activeValues.value.indexOf(props.value) > -1);
5252
const popupVisible = ref(false);
5353
const isCursorInPopup = ref(false);
54+
5455
const rippleColor = computed(() => (theme.value === 'light' ? '#E7E7E7' : '#383838'));
5556
const isOpen = computed(() => {
5657
if (mode.value === 'popup') {
@@ -244,6 +245,7 @@ export default defineComponent({
244245
handleMouseLeavePopup,
245246
handleSubmenuItemClick,
246247
classPrefix,
248+
activeValues,
247249
};
248250
},
249251
methods: {
@@ -366,6 +368,9 @@ export default defineComponent({
366368
render() {
367369
let child = null;
368370
let events = {};
371+
let virtualChild;
372+
// popup模式下且存在多层的特殊封装场景中,需要将子节点挂载进行计算高亮
373+
if (this.activeValues.length < 2) virtualChild = <div style="display:none">{renderContent(this, 'default', 'content')}</div>;
369374

370375
if (this.mode === 'popup') {
371376
events = {
@@ -379,6 +384,7 @@ export default defineComponent({
379384
return (
380385
<li class={this.classes} {...{ on: events }}>
381386
{child}
387+
{virtualChild}
382388
</li>
383389
);
384390
},

0 commit comments

Comments
 (0)