|
1 | | -import fs from "fs/promises"; |
2 | | -import path from "path"; |
3 | | -import { notFound } from "next/navigation"; |
| 1 | +import { docMap } from "~/(docs)/docs/roam/docMap"; |
4 | 2 | import { Metadata } from "next"; |
5 | | -import { DocsHeader } from "~/components/DocsHeader"; |
6 | | -import { Prose } from "~/components/Prose"; |
7 | | -import { TableOfContents } from "~/components/TableOfContents"; |
8 | | -import { getProcessedMarkdownFile } from "~/utils/getProcessedMarkdownFile"; |
9 | | -import { collectSections } from "~/utils/getSections"; |
10 | | -import { PrevNextLinks } from "~/components/PrevNextLinks"; |
11 | | -import { getFileMetadata } from "~/utils/getFileMetadata"; |
| 3 | +import { |
| 4 | + generateDocsStaticParams, |
| 5 | + generateDocsMetadata, |
| 6 | + DocsPage, |
| 7 | +} from "~/components/DocsPage"; |
12 | 8 |
|
13 | 9 | type Params = { |
14 | 10 | params: Promise<{ |
15 | 11 | slug: string; |
16 | 12 | }>; |
17 | 13 | }; |
18 | 14 |
|
19 | | -const PATH = "app/(docs)/docs/roam/pages"; |
20 | | -const DIRECTORY = path.join(process.cwd(), PATH); |
21 | | - |
22 | 15 | const Page = async ({ params }: Params) => { |
23 | | - try { |
24 | | - const { slug } = await params; |
25 | | - const { data, contentHtml } = await getProcessedMarkdownFile({ |
26 | | - slug, |
27 | | - directory: DIRECTORY, |
28 | | - }); |
29 | | - const tableOfContents = await collectSections(contentHtml); |
| 16 | + const { slug } = await params; |
| 17 | + const directory = docMap[slug] ?? docMap.default; |
30 | 18 |
|
31 | | - return ( |
32 | | - <> |
33 | | - <div className="min-w-0 max-w-2xl flex-auto px-4 py-8 lg:max-w-none lg:pl-8 lg:pr-0 xl:px-16"> |
34 | | - <article className="[&::-webkit-scrollbar]:hidden"> |
35 | | - <DocsHeader title={data.title} /> |
36 | | - <Prose> |
37 | | - <div dangerouslySetInnerHTML={{ __html: contentHtml }} /> |
38 | | - </Prose> |
39 | | - </article> |
40 | | - <PrevNextLinks /> |
41 | | - </div> |
42 | | - <TableOfContents tableOfContents={tableOfContents} /> |
43 | | - </> |
44 | | - ); |
45 | | - } catch (error) { |
46 | | - console.error("Error rendering docs page:", error); |
47 | | - return notFound(); |
48 | | - } |
| 19 | + return <DocsPage params={Promise.resolve({ slug })} directory={directory} />; |
49 | 20 | }; |
50 | 21 |
|
51 | 22 | export default Page; |
52 | 23 |
|
53 | | -export const generateStaticParams = async () => { |
54 | | - try { |
55 | | - const directoryExists = await fs |
56 | | - .stat(DIRECTORY) |
57 | | - .then((stats) => stats.isDirectory()) |
58 | | - .catch(() => false); |
59 | | - |
60 | | - if (!directoryExists) { |
61 | | - console.log("No docs directory found"); |
62 | | - return []; |
63 | | - } |
64 | | - |
65 | | - const files = await fs.readdir(DIRECTORY); |
66 | | - |
67 | | - const mdFiles = files.filter((filename) => filename.endsWith(".md")); |
68 | | - |
69 | | - const publishedFiles = await Promise.all( |
70 | | - mdFiles.map(async (filename) => { |
71 | | - const { published } = await getFileMetadata({ |
72 | | - filename, |
73 | | - directory: DIRECTORY, |
74 | | - }); |
75 | | - return { filename, published }; |
76 | | - }), |
77 | | - ); |
| 24 | +export const generateStaticParams = () => |
| 25 | + generateDocsStaticParams(docMap.default); |
78 | 26 |
|
79 | | - return publishedFiles |
80 | | - .filter(({ published }) => published) |
81 | | - .map(({ filename }) => ({ |
82 | | - slug: filename.replace(/\.md$/, ""), |
83 | | - })); |
84 | | - } catch (error) { |
85 | | - console.error("Error generating static params:", error); |
86 | | - return []; |
87 | | - } |
88 | | -}; |
89 | | - |
90 | | -export const generateMetadata = async ({ |
91 | | - params, |
92 | | -}: Params): Promise<Metadata> => { |
93 | | - try { |
94 | | - const { slug } = await params; |
95 | | - const { data } = await getProcessedMarkdownFile({ |
96 | | - slug, |
97 | | - directory: DIRECTORY, |
98 | | - }); |
99 | | - |
100 | | - return { |
101 | | - title: data.title, |
102 | | - authors: [{ name: data.author }], |
103 | | - }; |
104 | | - } catch (error) { |
105 | | - console.error("Error generating metadata:", error); |
106 | | - return { |
107 | | - title: "Docs", |
108 | | - }; |
109 | | - } |
110 | | -}; |
| 27 | +export async function generateMetadata({ params }: Params): Promise<Metadata> { |
| 28 | + const { slug } = await params; |
| 29 | + const directory = docMap[slug] ?? docMap.default; |
| 30 | + return generateDocsMetadata({ params: Promise.resolve({ slug }), directory }); |
| 31 | +} |
0 commit comments