import Layout from "@/layouts/main"; import Main from "@/components/pages/blog/slug"; import { GetStaticPaths, GetStaticProps } from "next"; import datasquirel from "@moduletrace/datasquirel"; import { DSQL_TBENME_BLOG_POSTS, PagePropsType } from "@/types"; import { APIResponseObject } from "@moduletrace/datasquirel/dist/package-shared/types"; import { serialize } from "next-mdx-remote/serialize"; import remarkGfm from "remark-gfm"; import rehypePrismPlus from "rehype-prism-plus"; import matter from "gray-matter"; export default function SingleBlogPost() { return (
); } export const getStaticProps: GetStaticProps = async (ctx) => { const blogPostRes: APIResponseObject = await datasquirel.crud({ action: "get", table: "blog_posts", query: { query: { slug: { value: ctx.params?.slug, }, published: { value: "1", }, }, }, }); const singleBlogPost = blogPostRes.payload?.[0] || null; if (!singleBlogPost?.body) { return { props: {}, }; } const pageMdString = singleBlogPost.body; const pageGrayMatter = matter(pageMdString); const data = pageGrayMatter.data; const content = pageGrayMatter.content; const mdxSource = await serialize(content, { mdxOptions: { remarkPlugins: [remarkGfm], rehypePlugins: [rehypePrismPlus], }, scope: data, }); return { props: { blogPost: singleBlogPost, mdxSource, }, revalidate: 3600, }; }; export const getStaticPaths: GetStaticPaths = async (ctx) => { const blogPostRes: APIResponseObject = await datasquirel.crud({ action: "get", table: "blog_posts", query: { query: { published: { value: "1", }, }, }, }); const blogPosts = blogPostRes.payload; if (!blogPosts?.[0]) { return { paths: [], fallback: "blocking", }; } return { paths: blogPosts.map((post) => { return { params: { slug: post.slug, }, }; }), fallback: "blocking", }; };