Skip to content

Commit 49badb7

Browse files
committed
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 cbbff0b commit 49badb7

File tree

4 files changed

+2780
-313
lines changed

4 files changed

+2780
-313
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
@@ -73,7 +73,10 @@ export default defineComponent({
7373
vnode: ctx.slots.default && ctx.slots.default(),
7474
});
7575
});
76-
76+
const activeValues = menu.activeValues.value;
77+
if (activeValues.includes(props.value) && !activeValues.includes(submenu?.value)) {
78+
activeValues.push(submenu?.value);
79+
}
7780
return {
7881
menu,
7982
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: {
@@ -367,6 +369,9 @@ export default defineComponent({
367369
render() {
368370
let child = null;
369371
let events = {};
372+
let virtualChild;
373+
// popup模式下且存在多层的特殊封装场景中,需要将子节点挂载进行计算高亮
374+
if (this.activeValues.length < 2) virtualChild = <div style="display:none">{renderContent(this, 'default', 'content')}</div>;
370375

371376
if (this.mode === 'popup') {
372377
events = {
@@ -380,6 +385,7 @@ export default defineComponent({
380385
return (
381386
<li class={this.classes} {...{ on: events }}>
382387
{child}
388+
{virtualChild}
383389
</li>
384390
);
385391
},

0 commit comments

Comments
 (0)