@@ -7,18 +7,27 @@ import {
7
7
import classNames from "classnames" ;
8
8
import { current , versions } from "consts" ;
9
9
import Script from "next/script" ;
10
- import { Metadata , ResolvingMetadata } from "next" ;
10
+ import { Metadata } from "next" ;
11
11
import BreadCrumbs from "components/docs/BreadCrumbs" ;
12
+ import { notFound } from "next/navigation" ;
13
+ import { getVersionAndSlugFromSlugs } from "utils" ;
12
14
13
15
export async function generateStaticParams ( ) {
14
16
const slugs : { slug : string [ ] } [ ] = [ ] ;
15
17
const navs = await loadV2DocumentationNav ( current ) ;
16
18
for ( const nav of navs ) {
17
19
for ( const link of nav . links ) {
18
- slugs . push ( { slug : link . link . replace ( "/docs/" , "" ) . split ( "/" ) } ) ;
20
+ slugs . push ( {
21
+ slug : link . link
22
+ . replace ( "/docs/" , "" )
23
+ . split ( "/" )
24
+ . filter ( ( p ) => p !== "" ) ,
25
+ } ) ;
19
26
}
20
27
}
21
-
28
+ for ( const version of versions ) {
29
+ slugs . push ( { slug : [ version ] } ) ;
30
+ }
22
31
return slugs ;
23
32
}
24
33
@@ -41,44 +50,38 @@ export default async function Page({
41
50
} ) ;
42
51
}
43
52
}
53
+ try {
54
+ const { version, slugs } = getVersionAndSlugFromSlugs ( slug ) ;
55
+ const { data, path } = await getDocContentFromSlug ( version , slugs ) ;
44
56
45
- const version = versions . includes ( slug [ 0 ] ) ? slug [ 0 ] : current ;
46
- const contentSlug = versions . includes ( slug [ 0 ] )
47
- ? slug . slice ( 1 , slug . length )
48
- : slug ;
49
- const { data, path } = await getDocContentFromSlug (
50
- version ,
51
- contentSlug . length ? contentSlug : [ "distribution" ]
52
- ) ;
53
-
54
- const html = await getHtmlFromGithubContent ( { data, path } ) ;
55
- const title = await getDocTitle ( version , slug ) ;
57
+ const html = await getHtmlFromGithubContent ( { data, path } ) ;
58
+ const title = await getDocTitle ( version , slugs ) ;
56
59
57
- const breadCrumbs = [
58
- {
59
- title : version ,
60
- link : version === current ? `/docs/${ version } ` : "/docs" ,
61
- } ,
62
- { title } ,
63
- ] ;
60
+ const breadCrumbs = [
61
+ {
62
+ title : version ,
63
+ link : version === current ? `/docs/${ version } ` : "/docs" ,
64
+ } ,
65
+ { title } ,
66
+ ] ;
64
67
65
- if ( slug . length > 2 || ( slug . length === 2 && ! versions . includes ( slug [ 0 ] ) ) ) {
66
- breadCrumbs . splice ( 1 , 0 , { title : "..." } ) ;
67
- }
68
+ if ( slug . length > 2 || ( slug . length === 2 && ! versions . includes ( slug [ 0 ] ) ) ) {
69
+ breadCrumbs . splice ( 1 , 0 , { title : "..." } ) ;
70
+ }
68
71
69
- return (
70
- < div
71
- className = { classNames (
72
- "px-6 md:px-10 py-6 leading-loose text-blue-black/80 " ,
73
- "dark:text-white/80"
74
- ) }
75
- >
76
- < BreadCrumbs breadCrumbs = { breadCrumbs } />
77
- < div className = "prose max-w-none dark:prose-invert prose-img:max-w-full prose-headings:font-title prose-h1:font-bold prose-code:after:hidden prose-code:before:hidden prose-code:py-1 prose-code:px-1.5 prose-code:bg-gray-100 prose-code:dark:bg-blue-darkest prose-h1:border-b-px prose-h1:border-b-gray-300 prose-h1:pb-2 max-md:prose-tr:flex max-md:prose-tr:flex-col max-md:prose-td:px-0 max-md:prose-td:py-1" >
78
- < div className = "doc" dangerouslySetInnerHTML = { { __html : html } } > </ div >
79
- </ div >
80
- < Script id = "codeselector-switch" >
81
- { `function switchCode(event) {
72
+ return (
73
+ < div
74
+ className = { classNames (
75
+ "px-6 md:px-10 py-6 leading-loose text-blue-black/80 " ,
76
+ "dark:text-white/80"
77
+ ) }
78
+ >
79
+ < BreadCrumbs breadCrumbs = { breadCrumbs } />
80
+ < div className = "prose max-w-none dark:prose-invert prose-img:max-w-full prose-headings:font-title prose-h1:font-bold prose-code:after:hidden prose-code:before:hidden prose-code:py-1 prose-code:px-1.5 prose-code:bg-gray-100 prose-code:dark:bg-blue-darkest prose-h1:border-b-px prose-h1:border-b-gray-300 prose-h1:pb-2 max-md:prose-tr:flex max-md:prose-tr:flex-col max-md:prose-td:px-0 max-md:prose-td:py-1" >
81
+ < div className = "doc" dangerouslySetInnerHTML = { { __html : html } } > </ div >
82
+ </ div >
83
+ < Script id = "codeselector-switch" >
84
+ { `function switchCode(event) {
82
85
const k = event.target.getAttribute('key')
83
86
const p = event.target.parentNode.parentNode.parentNode
84
87
;[].slice.call(p.querySelectorAll('div[key]')).forEach(e => e.classList.add('hidden'))
@@ -93,9 +96,13 @@ export default async function Page({
93
96
event.target.classList.add(...selectedClasses)
94
97
95
98
}` }
96
- </ Script >
97
- </ div >
98
- ) ;
99
+ </ Script >
100
+ </ div >
101
+ ) ;
102
+ } catch ( err ) {
103
+ console . error ( err ) ;
104
+ notFound ( ) ;
105
+ }
99
106
}
100
107
101
108
export async function generateMetadata ( {
@@ -105,10 +112,16 @@ export async function generateMetadata({
105
112
slug : string [ ] ;
106
113
} ;
107
114
} ) : Promise < Metadata > {
108
- const version = versions . includes ( slug [ 0 ] ) ? slug [ 0 ] : current ;
109
- const title = await getDocTitle ( version , slug ) ;
115
+ try {
116
+ const { version, slugs } = getVersionAndSlugFromSlugs ( slug ) ;
117
+ const title = await getDocTitle ( version , slugs ) ;
110
118
111
- return {
112
- title : `${ title } - API Platform` ,
113
- } ;
119
+ return {
120
+ title : `${ title } - API Platform` ,
121
+ } ;
122
+ } catch {
123
+ return {
124
+ title : "API Platform Documentation - API Platform" ,
125
+ } ;
126
+ }
114
127
}
0 commit comments