import { useMemo } from 'react'; import type * as PageTree from 'fumadocs-core/page-tree'; import browserCollections from 'fumadocs-mdx:collections/browser'; import { isRouteErrorResponse, useLoaderData, useRouteError } from 'react-router'; import { DocsLayout } from 'fumadocs-ui/layouts/docs'; import { DocsBody, DocsDescription, DocsPage, DocsTitle } from 'fumadocs-ui/layouts/docs/page'; import { HomeLayout } from 'fumadocs-ui/layouts/home'; import { NotFound } from '@/components/not-found'; import { baseOptions } from '@/lib/layout.shared'; const clientLoader = browserCollections.docs.createClientLoader({ component({ toc, frontmatter, default: MDX }) { return ( {frontmatter.title} {frontmatter.description} ); } }); export async function loader({ params }: { params: Record }) { const slug = params['*']; const slugs = slug ? slug.split('/') : ['home']; const { getDocsRouteData } = await import('@/lib/source.server'); const routeData = await getDocsRouteData(slugs); if (!routeData) { throw new Response('Not Found', { status: 404 }); } if (routeData.pageType === 'docs') { await clientLoader.preload(routeData.path); } return routeData; } export default function DocsRoute() { const data = useLoaderData(); const tree = useMemo(() => transformPageTree(data.tree as PageTree.Root), [data.tree]); return ( ); } export function ErrorBoundary() { const error = useRouteError(); if (isRouteErrorResponse(error) && error.status === 404) { return ; } return (

Docs Error

The docs page could not be rendered.

); } function MdxContent({ path }: { path: string }) { const Content = clientLoader.getComponent(path); return ; } function transformPageTree(root: PageTree.Root): PageTree.Root { function mapNode(item: T): T { if (typeof item.icon === 'string') { item = { ...item, icon: ( ) }; } if (item.type === 'folder') { return { ...item, index: item.index ? mapNode(item.index) : undefined, children: item.children.map(mapNode) }; } return item; } return { ...root, children: root.children.map(mapNode), fallback: root.fallback ? transformPageTree(root.fallback) : undefined }; }