index.js 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. import DocBreadcrumbs from '@theme/DocBreadcrumbs';
  2. import DocItemContent from '@theme/DocItem/Content';
  3. import DocItemFooter from '@theme/DocItem/Footer';
  4. import DocItemPaginator from '@theme/DocItem/Paginator';
  5. import DocItemTOCDesktop from '@theme/DocItem/TOC/Desktop';
  6. import DocItemTOCMobile from '@theme/DocItem/TOC/Mobile';
  7. import DocVersionBadge from '@theme/DocVersionBadge';
  8. import DocVersionBanner from '@theme/DocVersionBanner';
  9. import React from 'react';
  10. import clsx from 'clsx';
  11. import {useDoc} from '@docusaurus/theme-common/internal';
  12. import {useWindowSize} from '@docusaurus/theme-common';
  13. import styles from './styles.module.css';
  14. /**
  15. * Decide if the toc should be rendered, on mobile or desktop viewports
  16. */
  17. function useDocTOC() {
  18. const {frontMatter, toc} = useDoc();
  19. const windowSize = useWindowSize();
  20. const hidden = frontMatter.hide_table_of_contents;
  21. const canRender = !hidden && toc.length > 0;
  22. const mobile = canRender ? <DocItemTOCMobile /> : undefined;
  23. const desktop =
  24. canRender && (windowSize === 'desktop' || windowSize === 'ssr') ? (
  25. <DocItemTOCDesktop />
  26. ) : undefined;
  27. return {
  28. hidden,
  29. mobile,
  30. desktop,
  31. };
  32. }
  33. export default function DocItemLayout({children}) {
  34. const docTOC = useDocTOC();
  35. return (
  36. <div className="row docitem-content">
  37. <div className={clsx('col', !docTOC.hidden && styles.docItemCol)}>
  38. <DocVersionBanner />
  39. <div className={styles.docItemContainer}>
  40. <article>
  41. <div className='breadcrumb-row'>
  42. <div>
  43. <DocBreadcrumbs />
  44. </div>
  45. <div>
  46. <DocVersionBadge />
  47. </div>
  48. </div>
  49. {docTOC.mobile}
  50. <DocItemContent>{children}</DocItemContent>
  51. <DocItemFooter />
  52. </article>
  53. <DocItemPaginator />
  54. </div>
  55. </div>
  56. {docTOC.desktop && <div className="col col--3">{docTOC.desktop}</div>}
  57. </div>
  58. );
  59. }