47 lines
1.6 KiB
TypeScript
Raw Normal View History

2023-07-07 11:17:22 +08:00
import PageTitle from '@/components/PageTitle'
2023-07-08 15:23:25 +08:00
import { Mdx } from '@/components/MDXComponents'
2023-07-07 11:17:22 +08:00
import { sortedBlogPost, coreContent } from 'pliny/utils/contentlayer'
import { allBlogs, allAuthors } from 'contentlayer/generated'
import type { Authors, Blog } from 'contentlayer/generated'
2023-07-08 15:23:25 +08:00
import PostLayout from '@/layouts/PostLayout'
2023-07-07 11:17:22 +08:00
export const generateStaticParams = async () => {
const paths = allBlogs.map((p) => ({ slug: p.slug.split('/') }))
return paths
}
2023-07-08 15:23:25 +08:00
export default async function Page({ params }: { params: { slug: string[] } }) {
2023-07-07 11:17:22 +08:00
const slug = params.slug.join('/')
const sortedPosts = sortedBlogPost(allBlogs) as Blog[]
const postIndex = sortedPosts.findIndex((p) => p.slug === slug)
2023-07-08 15:23:25 +08:00
const prev = coreContent(sortedPosts[postIndex + 1])
const next = coreContent(sortedPosts[postIndex - 1])
const post = sortedPosts.find((p) => p.slug === slug) as Blog
2023-07-07 11:17:22 +08:00
const authorList = post?.authors || ['default']
const authorDetails = authorList.map((author) => {
const authorResults = allAuthors.find((p) => p.slug === author)
return coreContent(authorResults as Authors)
})
2023-07-08 15:23:25 +08:00
const mainContent = coreContent(post)
2023-07-07 11:17:22 +08:00
return (
<>
{post && 'draft' in post && post.draft === true ? (
<div className="mt-24 text-center">
<PageTitle>
Under Construction{' '}
<span role="img" aria-label="roadwork sign">
🚧
</span>
</PageTitle>
</div>
) : (
2023-07-08 15:23:25 +08:00
<PostLayout content={mainContent} authorDetails={authorDetails} next={next} prev={prev}>
<Mdx code={post.body.code} toc={post.toc} />
</PostLayout>
2023-07-07 11:17:22 +08:00
)}
</>
)
}