import { cache } from 'react'; import { notFound } from 'next/navigation'; import { ContentRenderer, createCmsClient } from '@kit/cms'; import { If } from '@kit/ui/if'; import { Separator } from '@kit/ui/separator'; import { cn } from '@kit/ui/utils'; import { withI18n } from '~/lib/i18n/with-i18n'; // local imports import { DocsCards } from '../_components/docs-cards'; import { DocsTableOfContents } from '../_components/docs-table-of-contents'; import { extractHeadingsFromJSX } from '../_lib/utils'; const getPageBySlug = cache(pageLoader); interface DocumentationPageProps { params: Promise<{ slug: string[] }>; } async function pageLoader(slug: string) { const client = await createCmsClient(); return client.getContentItemBySlug({ slug, collection: 'documentation' }); } export const generateMetadata = async ({ params }: DocumentationPageProps) => { const slug = (await params).slug.join('/'); const page = await getPageBySlug(slug); if (!page) { notFound(); } const { title, description } = page; return { title, description, }; }; async function DocumentationPage({ params }: DocumentationPageProps) { const slug = (await params).slug.join('/'); const page = await getPageBySlug(slug); if (!page) { notFound(); } const description = page?.description ?? ''; const headings = extractHeadingsFromJSX( page.content as { props: { children: React.ReactElement[] }; }, ); return (

{page.title}

{description}

0}>
); } export default withI18n(DocumentationPage);