/*
 * This is used to wrap a Table of Contents (toc) 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
import customComponents from 'shared/components/mdx'

const TocWrapper = ({toc, app}) => {

  const [mdxModule, setMdxModule] = useState()

  useEffect(() => {
    ;(async () => {
      setMdxModule(await run(toc, runtime))
    })()
  }, [toc])

  // React component for MDX content
  const MdxContent = mdxModule ? mdxModule.default : Fragment

  return (
    <div className={`
      mdx mdx-toc text-base-content text-lg lg:text-xl
      sticky top-8 max-h-screen overflow-y-auto
      max-w-prose
      md:border-l-4 md:pl-4 md:mb-8 md:border-base-200
    `}
    >
      {mdxModule && <MdxContent components={customComponents(app)}/>}
    </div>
  )
}

export default TocWrapper