@@ -3,17 +3,66 @@ import { DocsLayout } from "fumadocs-ui/layouts/docs";
33import { baseOptions } from "@/lib/layout.shared" ;
44import type { ReactNode } from "react" ;
55import { DocsRouteFlag } from "@/app/components/RouteFlags" ;
6+ import type { PageTree } from "fumadocs-core/server" ;
7+
8+ function pruneEmptyFolders ( root : PageTree . Root ) : PageTree . Root {
9+ const transformNode = ( node : PageTree . Node ) : PageTree . Node | null => {
10+ if ( node . type === "folder" ) {
11+ const transformedChildren = node . children
12+ . map ( transformNode )
13+ . filter ( ( child ) : child is PageTree . Node => child !== null ) ;
14+
15+ const index = node . index ? { ...node . index } : undefined ;
16+
17+ if ( transformedChildren . length > 0 ) {
18+ return {
19+ ...node ,
20+ index,
21+ children : transformedChildren ,
22+ } ;
23+ }
24+
25+ if ( index ) {
26+ return { ...index } ;
27+ }
28+
29+ return null ;
30+ }
31+
32+ if ( node . type === "separator" ) {
33+ return { ...node } ;
34+ }
35+
36+ return { ...node } ;
37+ } ;
38+
39+ const transformRoot = ( node : PageTree . Root ) : PageTree . Root => {
40+ const children = node . children
41+ . map ( transformNode )
42+ . filter ( ( child ) : child is PageTree . Node => child !== null ) ;
43+
44+ return {
45+ ...node ,
46+ children,
47+ fallback : node . fallback ? transformRoot ( node . fallback ) : undefined ,
48+ } ;
49+ } ;
50+
51+ return transformRoot ( root ) ;
52+ }
653
754export default function Layout ( { children } : { children : ReactNode } ) {
55+ const tree = pruneEmptyFolders ( source . pageTree ) ;
56+
857 return (
958 < >
1059 { /* Add a class on <html> while in docs to adjust global backgrounds */ }
1160 < DocsRouteFlag />
1261 < DocsLayout
13- tree = { source . pageTree }
62+ tree = { tree }
1463 { ...baseOptions ( ) }
1564 sidebar = { {
16- // 第一屏仅显示目录,不展开子目录
65+ // Only show top-level items on first load
1766 defaultOpenLevel : 0 ,
1867 } }
1968 >
0 commit comments