@@ -3,24 +3,20 @@ import {getMDXComponent} from 'mdx-bundler/client';
33import { Metadata } from 'next' ;
44import { notFound } from 'next/navigation' ;
55
6- import { Breadcrumbs } from 'sentry-docs/components/breadcrumbs ' ;
7- import { CodeContextProvider } from 'sentry-docs/components/codeContext ' ;
8- import { GitHubCTA } from 'sentry-docs/components/githubCta ' ;
9- import { Header } from 'sentry-docs/components/header ' ;
6+ import { apiCategories } from 'sentry-docs/build/resolveOpenAPI ' ;
7+ import { ApiCategoryPage } from 'sentry-docs/components/apiCategoryPage ' ;
8+ import { ApiPage } from 'sentry-docs/components/apiPage ' ;
9+ import { DocPage } from 'sentry-docs/components/docPage ' ;
1010import { Home } from 'sentry-docs/components/home' ;
1111import { Include } from 'sentry-docs/components/include' ;
12- import { Navbar } from 'sentry-docs/components/navbar' ;
1312import { PlatformContent } from 'sentry-docs/components/platformContent' ;
14- import { PlatformSdkDetail } from 'sentry-docs/components/platformSdkDetail' ;
15- import { ServerSidebar } from 'sentry-docs/components/serverSidebar' ;
16- import { TableOfContents } from 'sentry-docs/components/tableOfContents' ;
17- import { docsRootNode , getCurrentPlatformOrGuide , nodeForPath } from 'sentry-docs/docTree' ;
18- import { allDocsFrontMatter , getFileBySlug } from 'sentry-docs/mdx' ;
13+ import { getDocsRootNode , nodeForPath } from 'sentry-docs/docTree' ;
14+ import { getDocsFrontMatter , getFileBySlug } from 'sentry-docs/mdx' ;
1915import { mdxComponents } from 'sentry-docs/mdxComponents' ;
20- import { serverContext , setServerContext } from 'sentry-docs/serverContext' ;
16+ import { setServerContext } from 'sentry-docs/serverContext' ;
2117
22- export function generateStaticParams ( ) {
23- const docs = allDocsFrontMatter ;
18+ export async function generateStaticParams ( ) {
19+ const docs = await getDocsFrontMatter ( ) ;
2420 const paths = docs . map ( doc => {
2521 let path = doc . slug . split ( '/' ) ;
2622 if ( path [ path . length - 1 ] === 'index' ) {
@@ -39,68 +35,12 @@ export const dynamic = 'force-static';
3935const mdxComponentsWithWrapper = mdxComponents (
4036 { Include, PlatformContent} ,
4137 ( { children, frontMatter, toc} ) => (
42- < Layout frontMatter = { frontMatter } toc = { toc } >
38+ < DocPage frontMatter = { frontMatter } toc = { toc } >
4339 { children }
44- </ Layout >
40+ </ DocPage >
4541 )
4642) ;
4743
48- function Layout ( { children, frontMatter, toc} ) {
49- const { rootNode, path} = serverContext ( ) ;
50- const platformOrGuide = rootNode && getCurrentPlatformOrGuide ( rootNode , path ) ;
51- const hasToc = ! frontMatter . notoc || ! ! platformOrGuide ;
52-
53- return (
54- < div className = "document-wrapper" >
55- < div className = "sidebar" >
56- < Header />
57-
58- < div
59- className = "d-md-flex flex-column align-items-stretch collapse navbar-collapse"
60- id = "sidebar"
61- >
62- < div className = "toc" >
63- < div className = "text-white p-3" >
64- < ServerSidebar />
65- </ div >
66- </ div >
67- </ div >
68- < div className = "d-sm-none d-block" id = "navbar-menu" />
69- </ div >
70- < main role = "main" className = "px-0" >
71- < div className = "flex-grow-1" >
72- < div className = "d-block navbar-right-half" >
73- < Navbar />
74- </ div >
75-
76- < section className = "pt-3 px-3 content-max prose" >
77- < div className = "pb-3" >
78- < Breadcrumbs />
79- </ div >
80- < div className = "row" >
81- < div className = { hasToc ? 'col-sm-8 col-md-12 col-lg-8 col-xl-9' : 'col-12' } >
82- < h1 className = "mb-3" > { frontMatter . title } </ h1 >
83- < div id = "main" >
84- < CodeContextProvider > { children } </ CodeContextProvider >
85- </ div >
86- < GitHubCTA />
87- </ div >
88- { hasToc && (
89- < div className = "col-sm-4 col-md-12 col-lg-4 col-xl-3" >
90- < div className = "page-nav" >
91- < PlatformSdkDetail />
92- < TableOfContents toc = { toc } />
93- </ div >
94- </ div >
95- ) }
96- </ div >
97- </ section >
98- </ div >
99- </ main >
100- </ div >
101- ) ;
102- }
103-
10444function MDXLayoutRenderer ( { mdxSource, ...rest } ) {
10545 const MDXLayout = useMemo ( ( ) => getMDXComponent ( mdxSource ) , [ mdxSource ] ) ;
10646 return < MDXLayout components = { mdxComponentsWithWrapper } { ...rest } /> ;
@@ -112,13 +52,35 @@ export default async function Page({params}) {
11252 }
11353
11454 // get frontmatter of all docs in tree
115- const docs = allDocsFrontMatter ;
116- const rootNode = docsRootNode ;
55+ const docs = await getDocsFrontMatter ( ) ;
56+ const rootNode = await getDocsRootNode ( ) ;
11757 if ( ! rootNode ) {
11858 console . warn ( 'no root node' ) ;
11959 return notFound ( ) ;
12060 }
12161
62+ // TODO(mjq): Remove this hacky second call to setServerContext.
63+ setServerContext ( {
64+ rootNode,
65+ path : params . path ,
66+ toc : [ ] ,
67+ frontmatter : { } ,
68+ } ) ;
69+
70+ if ( params . path [ 0 ] === 'api' && params . path . length > 1 ) {
71+ const categories = await apiCategories ( ) ;
72+ const category = categories . find ( c => c . slug === params . path [ 1 ] ) ;
73+ if ( category ) {
74+ if ( params . path . length === 2 ) {
75+ return < ApiCategoryPage category = { category } /> ;
76+ }
77+ const api = category . apis . find ( a => a . slug === params . path [ 2 ] ) ;
78+ if ( api ) {
79+ return < ApiPage api = { api } /> ;
80+ }
81+ }
82+ }
83+
12284 const pageNode = nodeForPath ( rootNode , params . path ) ;
12385 if ( ! pageNode ) {
12486 console . warn ( 'no page node' , params . path ) ;
@@ -162,10 +124,10 @@ type MetadataProps = {
162124 } ;
163125} ;
164126
165- export function generateMetadata ( { params} : MetadataProps ) : Metadata {
127+ export async function generateMetadata ( { params} : MetadataProps ) : Promise < Metadata > {
166128 let title = 'Home' ;
167129
168- const rootNode = docsRootNode ;
130+ const rootNode = await getDocsRootNode ( ) ;
169131 if ( rootNode && params . path ) {
170132 const pageNode = nodeForPath ( rootNode , params . path ) ;
171133 if ( pageNode ) {
0 commit comments