jonbio/pages/blog/[...slug].js
Helder Burato Berto 5e36f320df
feat: upgrade next-mdx-remote
* chore: upgrade packages

Updating packages:
- "@mapbox/rehype-prism": "^0.6.0"
- "image-size": "1.0.0"
- "next-seo": "4.24.0"
- "remark-code-titles": "0.1.2"
- "remark-footnotes": "^3.0.0"
- "eslint-config-prettier": "^8.3.0"
- "globby": "11.0.3"
- "lint-staged": "^11.0.0"
- "remark-stringify": "9.0.1"

* feat: upgrade next-mdx-remote

It adds MDXRemote and serialize breaking changes

Read more at https://github.com/hashicorp/next-mdx-remote/releases/tag/3.0.0

* fix: downgrade remark-math and rehype-katex
2021-05-11 22:05:33 +08:00

57 lines
1.6 KiB
JavaScript

import fs from 'fs'
import { MDXRemote } from 'next-mdx-remote'
import MDXComponents from '@/components/MDXComponents'
import PageTitle from '@/components/PageTitle'
import PostLayout from '@/layouts/PostLayout'
import generateRss from '@/lib/generate-rss'
import { formatSlug, getAllFilesFrontMatter, getFileBySlug, getFiles } from '@/lib/mdx'
export async function getStaticPaths() {
const posts = getFiles('blog')
return {
paths: posts.map((p) => ({
params: {
slug: formatSlug(p).split('/'),
},
})),
fallback: false,
}
}
export async function getStaticProps({ params }) {
const allPosts = await getAllFilesFrontMatter('blog')
const postIndex = allPosts.findIndex((post) => formatSlug(post.slug) === params.slug.join('/'))
const prev = allPosts[postIndex + 1] || null
const next = allPosts[postIndex - 1] || null
const post = await getFileBySlug('blog', params.slug)
// rss
const rss = generateRss(allPosts)
fs.writeFileSync('./public/index.xml', rss)
return { props: { post, prev, next } }
}
export default function Blog({ post, prev, next }) {
const { mdxSource, frontMatter } = post
return (
<>
{frontMatter.draft !== true ? (
<PostLayout frontMatter={frontMatter} prev={prev} next={next}>
<MDXRemote {...mdxSource} components={MDXComponents} />
</PostLayout>
) : (
<div className="mt-24 text-center">
<PageTitle>
Under Construction{' '}
<span role="img" aria-label="roadwork sign">
🚧
</span>
</PageTitle>
</div>
)}
</>
)
}