import type { Route } from "./+types/page"; import { DocsLayout } from 'fumadocs-ui/layouts/docs'; import { DocsBody, DocsDescription, DocsPage, DocsTitle, MarkdownCopyButton, ViewOptionsPopover, } from 'fumadocs-ui/layouts/docs/page'; import { getPageMarkdownUrl, source } from '@/lib/source'; import browserCollections from 'collections/browser'; import { baseOptions } from '@/lib/layout.shared'; import { useFumadocsLoader } from 'fumadocs-core/source/client'; import { useMDXComponents } from '@/components/mdx'; export async function loader({ params }: Route.LoaderArgs) { const slugs = params['*'].split('/').filter((v) => v.length > 0); const page = source.getPage(slugs); if (!page) throw new Response('Not found', { status: 404 }); return { path: page.path, markdownUrl: getPageMarkdownUrl(page).url, pageTree: await source.serializePageTree(source.getPageTree()), }; } const clientLoader = browserCollections.docs.createClientLoader({ component( { toc, frontmatter, default: Mdx }, // you can define props for the component { markdownUrl, path, }: { markdownUrl: string; path: string; }, ) { return ( {frontmatter.title} {frontmatter.title} {frontmatter.description}
); }, }); export default function Page({ loaderData }: Route.ComponentProps) { const { pageTree, path, markdownUrl } = useFumadocsLoader(loaderData); return ( {clientLoader.useContent(loaderData.path, { markdownUrl, path, })} ); }