import { createFileRoute, notFound } from '@tanstack/react-router'
import { DocsLayout } from 'fumadocs-ui/layouts/docs'
import { createServerFn } from '@tanstack/react-start'
import { source } from '@/lib/source'
import browserCollections from 'collections/browser'
import { DocsBody, DocsDescription, DocsPage, DocsTitle } from 'fumadocs-ui/layouts/docs/page'
import { baseOptions } from '@/lib/layout.shared'
import { useFumadocsLoader } from 'fumadocs-core/source/client'
import { Suspense } from 'react'
import { useMDXComponents } from '@/components/mdx'
export const Route = createFileRoute('/docs/$')({
component: Page,
loader: async ({ params }) => {
const slugs = params._splat?.split('/') ?? []
const data = await serverLoader({ data: slugs })
await clientLoader.preload(data.path)
return data
},
})
const serverLoader = createServerFn({
method: 'GET',
})
.validator((slugs: string[]) => slugs)
.handler(async ({ data: slugs }) => {
const page = source.getPage(slugs)
if (!page) throw notFound()
return {
path: page.path,
pageTree: await source.serializePageTree(source.getPageTree()),
}
})
const clientLoader = browserCollections.docs.createClientLoader({
component({ toc, frontmatter, default: MDX }, _props: undefined) {
return (
{frontmatter.title}
{frontmatter.description}
)
},
})
function Page() {
const data = useFumadocsLoader(Route.useLoaderData())
return (
{clientLoader.useContent(data.path)}
)
}