Skip to content

Commit 2fa8db6

Browse files
fix(NavigationMenu): nested accordion context at every level (#4363)
Co-authored-by: Benjamin Canac <[email protected]>
1 parent 52f1963 commit 2fa8db6

File tree

1 file changed

+16
-16
lines changed

1 file changed

+16
-16
lines changed

src/runtime/components/NavigationMenu.vue

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -236,20 +236,13 @@ const lists = computed<NavigationMenuItem[][]>(() =>
236236
: []
237237
)
238238
239-
function getAccordionDefaultValue(list: NavigationMenuItem[]) {
240-
function findItemsWithDefaultOpen(items: NavigationMenuItem[], level = 0): string[] {
241-
return items.reduce((acc: string[], item, index) => {
242-
if (item.defaultOpen || item.open) {
243-
acc.push(item.value || (level > 0 ? `item-${level}-${index}` : `item-${index}`))
244-
}
245-
if (item.children?.length) {
246-
acc.push(...findItemsWithDefaultOpen(item.children, level + 1))
247-
}
248-
return acc
249-
}, [])
250-
}
251-
252-
const indexes = findItemsWithDefaultOpen(list)
239+
function getAccordionDefaultValue(list: NavigationMenuItem[], level = 0) {
240+
const indexes = list.reduce((acc: string[], item, index) => {
241+
if (item.defaultOpen || item.open) {
242+
acc.push(item.value || (level > 0 ? `item-${level}-${index}` : `item-${index}`))
243+
}
244+
return acc
245+
}, [])
253246
254247
return props.type === 'single' ? indexes[0] : indexes
255248
}
@@ -378,7 +371,14 @@ function getAccordionDefaultValue(list: NavigationMenuItem[]) {
378371
</ULink>
379372

380373
<AccordionContent v-if="orientation === 'vertical' && item.children?.length && !collapsed" :class="ui.content({ class: [props.ui?.content, item.ui?.content] })">
381-
<ul :class="ui.childList({ class: props.ui?.childList })">
374+
<AccordionRoot
375+
v-bind="({
376+
...accordionProps,
377+
defaultValue: getAccordionDefaultValue(item.children, level + 1)
378+
} as AccordionRootProps)"
379+
as="ul"
380+
:class="ui.childList({ class: props.ui?.childList })"
381+
>
382382
<ReuseItemTemplate
383383
v-for="(childItem, childIndex) in item.children"
384384
:key="childIndex"
@@ -387,7 +387,7 @@ function getAccordionDefaultValue(list: NavigationMenuItem[]) {
387387
:level="level + 1"
388388
:class="ui.childItem({ class: [props.ui?.childItem, childItem.ui?.childItem] })"
389389
/>
390-
</ul>
390+
</AccordionRoot>
391391
</AccordionContent>
392392
</component>
393393
</DefineItemTemplate>

0 commit comments

Comments
 (0)