Skip to content

Commit 0170d44

Browse files
committed
Fix missing routes
1 parent 6d8fdd3 commit 0170d44

10 files changed

Lines changed: 1141 additions & 287 deletions

File tree

app/docs/[[...slug]]/page.tsx

Lines changed: 0 additions & 238 deletions
This file was deleted.
Lines changed: 135 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,135 @@
1+
import { generatePageMeta } from "@/lib/meta";
2+
import {
3+
DocsPage,
4+
DocsBody,
5+
} from "fumadocs-ui/page";
6+
import {
7+
getRepositoryBySlug,
8+
getRepositoryDisplayName,
9+
repositories,
10+
getVersionBySlug,
11+
} from "@/lib/repo-config";
12+
import { notFound } from "next/navigation";
13+
import { DocPageHeading } from "../../../components";
14+
import { source } from "@/lib/source";
15+
import { createMdxComponents, createRelativeLink } from "@/components/mdx";
16+
17+
type Props = {
18+
params: Promise<{ plugin: string; version: string, slug: string[] }>;
19+
};
20+
21+
export default async function Page(props: Props) {
22+
const resolvedParams = await props.params;
23+
const repoSlug = resolvedParams.plugin;
24+
const versionSlug = resolvedParams.version;
25+
const slugs = resolvedParams.slug || [];
26+
27+
const repository = getRepositoryBySlug(repoSlug);
28+
if (!repository) {
29+
notFound();
30+
}
31+
32+
const version = getVersionBySlug(repository, versionSlug);
33+
if (!version) {
34+
notFound();
35+
}
36+
37+
const fullSlug = [repoSlug, versionSlug, ...slugs];
38+
const page = source.getPage(fullSlug);
39+
if (! page) {
40+
notFound();
41+
}
42+
43+
44+
let content = await page.data.load();
45+
46+
if (content.source) {
47+
const sourcePage = source.getPage(content.source.split("/"));
48+
49+
if (!sourcePage)
50+
throw new Error(
51+
`unresolved source in frontmatter of ${page.file.path}: ${content.source}`,
52+
);
53+
content = await sourcePage.data.load();
54+
}
55+
56+
const MdxContent = content.body;
57+
58+
return (
59+
<DocsPage toc={content.toc} full={content.full}>
60+
<DocPageHeading repository={repository} />
61+
<DocsBody>
62+
<MdxContent
63+
components={createMdxComponents({
64+
a: ({ href, ...props}: { href: string }) => {
65+
return <a href={createRelativeLink(repository, version, href)} {...props} />;
66+
},
67+
})}
68+
/>
69+
{/* {page.file.name === "index" && (
70+
<DocsCategory page={page} from={source} />
71+
)} */}
72+
</DocsBody>
73+
</DocsPage>
74+
);
75+
}
76+
77+
export async function generateMetadata({ params }: Props) {
78+
const resolvedParams = await params;
79+
const repoSlug = resolvedParams.plugin;
80+
const versionSlug = resolvedParams.version;
81+
const slugs = resolvedParams.slug || [];
82+
83+
const repository = getRepositoryBySlug(repoSlug);
84+
if (!repository) {
85+
return generatePageMeta(
86+
"Repository Not Found",
87+
);
88+
}
89+
90+
const version = getVersionBySlug(repository, versionSlug);
91+
if (!version) {
92+
return generatePageMeta(
93+
"Version Not Found",
94+
);
95+
}
96+
97+
const fullSlug = [repoSlug, versionSlug, ...slugs];
98+
const page = source.getPage(fullSlug);
99+
if (! page) {
100+
return generatePageMeta(
101+
`${getRepositoryDisplayName(repository)} v${version.version}`,
102+
`Documentation for ${repository.owner}/${repository.repo}`
103+
);
104+
}
105+
106+
return generatePageMeta(
107+
`${page.data.title} - ${getRepositoryDisplayName(repository)} v${version.version}`,
108+
`Documentation for ${repository.owner}/${repository.repo}`
109+
);
110+
}
111+
112+
export async function generateStaticParams() {
113+
114+
// Generate params for all repository and version combinations
115+
const params: { plugin: string, version: string, slug: string[] }[] = [];
116+
117+
for (const repository of repositories) {
118+
const repoSlug = repository.repo;
119+
120+
for (const version of repository.versions) {
121+
const versionSlug = version.version;
122+
123+
params.push({ plugin: repoSlug, version: versionSlug, slug: [] });
124+
125+
// Add limited files for this version
126+
if (version.limited_files) {
127+
for (const file of version.limited_files) {
128+
params.push({ plugin: repoSlug, version: versionSlug, slug: [file.slug] });
129+
}
130+
}
131+
}
132+
}
133+
134+
return params;
135+
}

0 commit comments

Comments
 (0)