1
1
import { useSiteData , usePageData , useRoute } from 'vitepress'
2
2
import { computed , h , FunctionalComponent , VNode } from 'vue'
3
3
import { Header } from '../../../../types/shared'
4
- import { isActive } from '../utils'
4
+ import { isActive , getPathDirName } from '../utils'
5
5
import { DefaultTheme } from '../config'
6
6
import { useActiveSidebarLinks } from '../composables/activeSidebarLink'
7
7
@@ -62,7 +62,12 @@ export default {
62
62
} else if ( themeSidebar === false ) {
63
63
return [ ]
64
64
} else if ( typeof themeSidebar === 'object' ) {
65
- return resolveMultiSidebar ( themeSidebar , route . path , sidebarDepth )
65
+ return resolveMultiSidebar (
66
+ themeSidebar ,
67
+ route . path ,
68
+ headers ,
69
+ sidebarDepth
70
+ )
66
71
}
67
72
}
68
73
} )
@@ -86,6 +91,10 @@ interface ResolvedSidebarItem {
86
91
function resolveAutoSidebar ( headers : Header [ ] , depth : number ) : ResolvedSidebar {
87
92
const ret : ResolvedSidebar = [ ]
88
93
94
+ if ( headers === undefined ) {
95
+ return [ ]
96
+ }
97
+
89
98
let lastH2 : ResolvedSidebarItem | undefined = undefined
90
99
headers . forEach ( ( { level, title, slug } ) => {
91
100
if ( level - 1 > depth ) {
@@ -117,8 +126,19 @@ function resolveArraySidebar(
117
126
function resolveMultiSidebar (
118
127
config : DefaultTheme . MultiSideBarConfig ,
119
128
path : string ,
129
+ headers : Header [ ] ,
120
130
depth : number
121
131
) : ResolvedSidebar {
132
+ const item = config [ getPathDirName ( path ) ]
133
+
134
+ if ( Array . isArray ( item ) ) {
135
+ return resolveArraySidebar ( item , depth )
136
+ }
137
+
138
+ if ( item === 'auto' ) {
139
+ return resolveAutoSidebar ( headers , depth )
140
+ }
141
+
122
142
return [ ]
123
143
}
124
144
0 commit comments