|  | 
| 1 | 1 | import { DocsLayout } from 'fumadocs-ui/layouts/docs'; | 
| 2 | 2 | import { baseOptions } from '@/lib/layout.shared'; | 
| 3 | 3 | import { PageTree } from 'fumadocs-core/server'; | 
|  | 4 | +import { source } from '@/lib/source'; | 
| 4 | 5 | 
 | 
| 5 |  | -const tree: PageTree.Root = { | 
| 6 |  | -  name: 'docs', | 
| 7 |  | -  children: [ | 
| 8 |  | -    { name: 'Architecture', url: '/docs/architecture', type: 'page' }, | 
| 9 |  | -    { name: 'Deployment', url: '/docs/deployment', type: 'page' }, | 
| 10 |  | -    { name: 'Troubleshooting', url: '/docs/troubleshooting', type: 'page' }, | 
| 11 |  | -    { name: 'Contribute to Wiki', url: '/docs/contribute', type: 'page' }, | 
| 12 |  | -    { | 
| 13 |  | -      name: 'Frontend', | 
| 14 |  | -      type: 'folder', | 
| 15 |  | -      children: [ | 
| 16 |  | -        { name: 'Item Page', url: '/docs/frontend/item-page', type: 'page' }, | 
| 17 |  | -      ], | 
| 18 |  | -    }, | 
| 19 |  | -    { | 
| 20 |  | -      name: 'Services', | 
| 21 |  | -      type: 'folder', | 
| 22 |  | -      children: [ | 
| 23 |  | -        { name: 'Overview', url: '/docs/services', type: 'page' }, | 
| 24 |  | -        { | 
| 25 |  | -          name: 'Filesystem (VFS)', | 
| 26 |  | -          type: 'folder', | 
| 27 |  | -          children: [ | 
| 28 |  | -            { name: 'Overview', url: '/docs/services/filesystem', type: 'page' }, | 
| 29 |  | -            { name: 'Performance Tuning', url: '/docs/services/filesystem/performance', type: 'page' }, | 
| 30 |  | -          ], | 
| 31 |  | -        }, | 
| 32 |  | -        { name: 'Content Services', url: '/docs/services/content', type: 'page' }, | 
| 33 |  | -        { name: 'Scrapers', url: '/docs/services/scrapers', type: 'page' }, | 
| 34 |  | -        { name: 'Downloaders', url: '/docs/services/downloaders', type: 'page' }, | 
| 35 |  | -        { name: 'Updaters', url: '/docs/services/updaters', type: 'page' }, | 
| 36 |  | -        { name: 'Post-Processing', url: '/docs/services/post-processing', type: 'page' }, | 
| 37 |  | -        { name: 'Subtitles', url: '/docs/services/subtitles', type: 'page' }, | 
| 38 |  | -        { name: 'Notifications', url: '/docs/services/notifications', type: 'page' }, | 
| 39 |  | -        { name: 'Management Commands', url: '/docs/services/extras', type: 'page' }, | 
| 40 |  | -      ], | 
| 41 |  | -    }, | 
| 42 |  | -  ] | 
|  | 6 | +// eslint-disable-next-line @typescript-eslint/no-explicit-any | 
|  | 7 | +function getSubtree(tree: any): any { | 
|  | 8 | +  const subTree: any = { name: tree.name, children: [] }; | 
|  | 9 | + | 
|  | 10 | +  if (tree.url) { | 
|  | 11 | +    subTree.url = tree.url; | 
|  | 12 | +  } | 
|  | 13 | + | 
|  | 14 | +  if (!subTree.url && tree.index && tree.index.url) { | 
|  | 15 | +    if (tree.children?.length > 0) { | 
|  | 16 | +      subTree.children.push({ name: 'Overview', url: tree.index.url, type: 'page' }); | 
|  | 17 | +    } else { | 
|  | 18 | +      subTree.url = tree.index.url; | 
|  | 19 | +    } | 
|  | 20 | +  } | 
|  | 21 | + | 
|  | 22 | +  if (tree.children?.length > 0) { | 
|  | 23 | +    for (const child of tree.children) { | 
|  | 24 | +      const subTreeChildren = getSubtree(child); | 
|  | 25 | +      if (subTreeChildren) { | 
|  | 26 | +        subTree.children.push(subTreeChildren); | 
|  | 27 | +      } | 
|  | 28 | +    } | 
|  | 29 | +  } | 
|  | 30 | +   | 
|  | 31 | +  if (tree.type === 'page' || tree.type === "folder" && !(subTree.children?.length > 0)) { | 
|  | 32 | +    subTree.type = 'page'; | 
|  | 33 | +  } else { | 
|  | 34 | +    subTree.type = 'folder'; | 
|  | 35 | +  } | 
|  | 36 | + | 
|  | 37 | +  // if (!subTree.url && !(subTree.children?.length > 0)) { | 
|  | 38 | +  //   return null; | 
|  | 39 | +  // } | 
|  | 40 | + | 
|  | 41 | +  return subTree; | 
| 43 | 42 | } | 
| 44 | 43 | 
 | 
|  | 44 | +// const origTree: PageTree.Root = { | 
|  | 45 | +//   name: 'docs', | 
|  | 46 | +//   children: [ | 
|  | 47 | +//     { name: 'Architecture', url: '/docs/architecture', type: 'page' }, | 
|  | 48 | +//     { name: 'Deployment', url: '/docs/deployment', type: 'page' }, | 
|  | 49 | +//     { name: 'Troubleshooting', url: '/docs/troubleshooting', type: 'page' }, | 
|  | 50 | +//     { name: 'Contribute to Wiki', url: '/docs/contribute', type: 'page' }, | 
|  | 51 | +//     { | 
|  | 52 | +//       name: 'Frontend', | 
|  | 53 | +//       type: 'folder', | 
|  | 54 | +//       children: [ | 
|  | 55 | +//         { name: 'Item Page', url: '/docs/frontend/item-page', type: 'page' }, | 
|  | 56 | +//       ], | 
|  | 57 | +//     }, | 
|  | 58 | +//     { | 
|  | 59 | +//       name: 'Services', | 
|  | 60 | +//       type: 'folder', | 
|  | 61 | +//       children: [ | 
|  | 62 | +//         { name: 'Overview', url: '/docs/services', type: 'page' }, | 
|  | 63 | +//         { | 
|  | 64 | +//           name: 'Filesystem (VFS)', | 
|  | 65 | +//           type: 'folder', | 
|  | 66 | +//           children: [ | 
|  | 67 | +//             { name: 'Overview', url: '/docs/services/filesystem', type: 'page' }, | 
|  | 68 | +//             { name: 'Performance Tuning', url: '/docs/services/filesystem/performance', type: 'page' }, | 
|  | 69 | +//           ], | 
|  | 70 | +//         }, | 
|  | 71 | +//         { name: 'Content Services', url: '/docs/services/content', type: 'page' }, | 
|  | 72 | +//         { name: 'Scrapers', url: '/docs/services/scrapers', type: 'page' }, | 
|  | 73 | +//         { name: 'Downloaders', url: '/docs/services/downloaders', type: 'page' }, | 
|  | 74 | +//         { name: 'Updaters', url: '/docs/services/updaters', type: 'page' }, | 
|  | 75 | +//         { name: 'Post-Processing', url: '/docs/services/post-processing', type: 'page' }, | 
|  | 76 | +//         { name: 'Subtitles', url: '/docs/services/subtitles', type: 'page' }, | 
|  | 77 | +//         { name: 'Notifications', url: '/docs/services/notifications', type: 'page' }, | 
|  | 78 | +//         { name: 'Management Commands', url: '/docs/services/extras', type: 'page' }, | 
|  | 79 | +//       ], | 
|  | 80 | +//     }, | 
|  | 81 | +//   ] | 
|  | 82 | +// } | 
|  | 83 | + | 
| 45 | 84 | export default function Layout({ children }: LayoutProps<'/docs'>) { | 
|  | 85 | + | 
|  | 86 | +  const tree = source.getPageTree(); | 
|  | 87 | +  const subTree = getSubtree(tree); | 
|  | 88 | +  // console.log('Orig tree:', origTree); | 
|  | 89 | +  // console.log('Gen tree:', subTree); | 
|  | 90 | +  // console.log("Is subtree same as original tree?", JSON.stringify(subTree) === JSON.stringify(origTree)); | 
|  | 91 | + | 
| 46 | 92 |   return ( | 
| 47 |  | -    <DocsLayout tree={tree} {...baseOptions()}> | 
|  | 93 | +    <DocsLayout tree={subTree} {...baseOptions()}> | 
| 48 | 94 |       {children} | 
| 49 | 95 |     </DocsLayout> | 
| 50 | 96 |   ); | 
|  | 
0 commit comments