feat: add MDXLayoutRenderer component
This commit is contained in:
		@@ -1,11 +1,20 @@
 | 
				
			|||||||
 | 
					import { MDXRemote } from 'next-mdx-remote'
 | 
				
			||||||
import Image from 'next/image'
 | 
					import Image from 'next/image'
 | 
				
			||||||
import CustomLink from './Link'
 | 
					import CustomLink from './Link'
 | 
				
			||||||
import Pre from './Pre'
 | 
					import Pre from './Pre'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const MDXComponents = {
 | 
					export const MDXComponents = {
 | 
				
			||||||
  Image,
 | 
					  Image,
 | 
				
			||||||
  a: CustomLink,
 | 
					  a: CustomLink,
 | 
				
			||||||
  pre: Pre,
 | 
					  pre: Pre,
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export default MDXComponents
 | 
					export const MDXLayoutRenderer = ({ layout, mdxSource, ...rest }) => {
 | 
				
			||||||
 | 
					  const LayoutComponent = require(`../layouts/${layout}`).default
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  return (
 | 
				
			||||||
 | 
					    <LayoutComponent {...rest}>
 | 
				
			||||||
 | 
					      <MDXRemote {...mdxSource} components={MDXComponents} />
 | 
				
			||||||
 | 
					    </LayoutComponent>
 | 
				
			||||||
 | 
					  )
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,4 +1,4 @@
 | 
				
			|||||||
import MDXComponents from '@/components/MDXComponents'
 | 
					import { MDXComponents } from '@/components/MDXComponents'
 | 
				
			||||||
import fs from 'fs'
 | 
					import fs from 'fs'
 | 
				
			||||||
import matter from 'gray-matter'
 | 
					import matter from 'gray-matter'
 | 
				
			||||||
import { serialize } from 'next-mdx-remote/serialize'
 | 
					import { serialize } from 'next-mdx-remote/serialize'
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -7,7 +7,7 @@ import Head from 'next/head'
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import { SEO } from '@/components/SEO'
 | 
					import { SEO } from '@/components/SEO'
 | 
				
			||||||
import LayoutWrapper from '@/components/LayoutWrapper'
 | 
					import LayoutWrapper from '@/components/LayoutWrapper'
 | 
				
			||||||
import MDXComponents from '@/components/MDXComponents'
 | 
					import { MDXComponents } from '@/components/MDXComponents'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export default function App({ Component, pageProps }) {
 | 
					export default function App({ Component, pageProps }) {
 | 
				
			||||||
  return (
 | 
					  return (
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,5 +1,5 @@
 | 
				
			|||||||
import { MDXRemote } from 'next-mdx-remote'
 | 
					import { MDXRemote } from 'next-mdx-remote'
 | 
				
			||||||
import MDXComponents from '@/components/MDXComponents'
 | 
					import { MDXComponents } from '@/components/MDXComponents'
 | 
				
			||||||
import AuthorLayout from '@/layouts/AuthorLayout'
 | 
					import AuthorLayout from '@/layouts/AuthorLayout'
 | 
				
			||||||
import { getFileBySlug } from '@/lib/mdx'
 | 
					import { getFileBySlug } from '@/lib/mdx'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,9 +1,7 @@
 | 
				
			|||||||
import fs from 'fs'
 | 
					import fs from 'fs'
 | 
				
			||||||
import { MDXRemote } from 'next-mdx-remote'
 | 
					 | 
				
			||||||
import MDXComponents from '@/components/MDXComponents'
 | 
					 | 
				
			||||||
import PageTitle from '@/components/PageTitle'
 | 
					import PageTitle from '@/components/PageTitle'
 | 
				
			||||||
import PostLayout from '@/layouts/PostLayout'
 | 
					 | 
				
			||||||
import generateRss from '@/lib/generate-rss'
 | 
					import generateRss from '@/lib/generate-rss'
 | 
				
			||||||
 | 
					import { MDXLayoutRenderer } from '@/components/MDXComponents'
 | 
				
			||||||
import { formatSlug, getAllFilesFrontMatter, getFileBySlug, getFiles } from '@/lib/mdx'
 | 
					import { formatSlug, getAllFilesFrontMatter, getFileBySlug, getFiles } from '@/lib/mdx'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export async function getStaticPaths() {
 | 
					export async function getStaticPaths() {
 | 
				
			||||||
@@ -44,9 +42,14 @@ export default function Blog({ post, authorDetails, prev, next }) {
 | 
				
			|||||||
  return (
 | 
					  return (
 | 
				
			||||||
    <>
 | 
					    <>
 | 
				
			||||||
      {frontMatter.draft !== true ? (
 | 
					      {frontMatter.draft !== true ? (
 | 
				
			||||||
        <PostLayout frontMatter={frontMatter} authorDetails={authorDetails} prev={prev} next={next}>
 | 
					        <MDXLayoutRenderer
 | 
				
			||||||
          <MDXRemote {...mdxSource} components={MDXComponents} />
 | 
					          layout={frontMatter.layout || 'PostLayout'}
 | 
				
			||||||
        </PostLayout>
 | 
					          mdxSource={mdxSource}
 | 
				
			||||||
 | 
					          frontMatter={frontMatter}
 | 
				
			||||||
 | 
					          authorDetails={authorDetails}
 | 
				
			||||||
 | 
					          prev={prev}
 | 
				
			||||||
 | 
					          next={next}
 | 
				
			||||||
 | 
					        />
 | 
				
			||||||
      ) : (
 | 
					      ) : (
 | 
				
			||||||
        <div className="mt-24 text-center">
 | 
					        <div className="mt-24 text-center">
 | 
				
			||||||
          <PageTitle>
 | 
					          <PageTitle>
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user