1
0
Fork 0
freesewing/sites/shared/components/wrappers/mdx.js

54 lines
1.3 KiB
JavaScript
Raw Normal View History

2021-12-18 09:54:53 +01:00
/*
* This is used to wrap MDX as returned from the mdxLoader
* method (see shared/mdx/loader.js)
* It is NOT for wrapping plain markdown/mdx
*/
import { useState, useEffect, Fragment } from 'react'
// See: https://mdxjs.com/guides/mdx-on-demand/
import { run } from '@mdx-js/mdx'
import * as runtime from 'react/jsx-runtime.js'
// Components that are available in all MDX
2021-12-19 19:08:54 +01:00
import customComponents from 'shared/components/mdx'
2021-12-25 13:43:41 +01:00
// Previous-Next navigation
import PrevNext from '../mdx/prev-next'
2022-05-30 16:40:51 +02:00
const Null = (props) => null
const MdxWrapper = ({mdx, app, t, components={}}) => {
2021-12-18 09:54:53 +01:00
const [mdxModule, setMdxModule] = useState()
useEffect(() => {
;(async () => {
setMdxModule(await run(mdx, runtime))
})()
}, [mdx])
/*
* We use some default components that are available
* everywhere in MDX, but we also accept passing in
* extra components via props
*/
const allComponents = {
...customComponents(app, t),
2021-12-18 09:54:53 +01:00
...components
}
// React component for MDX content
2022-05-30 16:40:51 +02:00
const MdxContent = mdxModule ? mdxModule.default : Null
2021-12-18 09:54:53 +01:00
2022-05-30 15:36:39 +02:00
return app
? (
<div className="text-primary mdx max-w-prose text-base-content max-w-prose text-lg lg:text-xl">
{mdxModule && <MdxContent components={allComponents}/>}
<PrevNext app={app} />
</div>
) : <MdxContent components={allComponents}/>
2021-12-18 09:54:53 +01:00
}
export default MdxWrapper