mirror of
https://github.com/yangshun/tech-interview-handbook.git
synced 2025-07-28 12:43:12 +08:00
106 lines
3.5 KiB
JavaScript
106 lines
3.5 KiB
JavaScript
import React from 'react';
|
|
import clsx from 'clsx';
|
|
import DocPaginator from '@theme/DocPaginator';
|
|
import DocVersionBanner from '@theme/DocVersionBanner';
|
|
import DocVersionBadge from '@theme/DocVersionBadge';
|
|
import Seo from '@theme/Seo';
|
|
import DocItemFooter from '@theme/DocItemFooter';
|
|
import TOC from '@theme/TOC';
|
|
import TOCCollapsible from '@theme/TOCCollapsible';
|
|
import Heading from '@theme/Heading';
|
|
import styles from './styles.module.css';
|
|
import {ThemeClassNames, useWindowSize} from '@docusaurus/theme-common';
|
|
import SidebarAd from '../../components/SidebarAd';
|
|
|
|
export default function DocItem(props) {
|
|
const {content: DocContent} = props;
|
|
const {metadata, frontMatter} = DocContent;
|
|
const {
|
|
image,
|
|
keywords,
|
|
hide_title: hideTitle,
|
|
hide_table_of_contents: hideTableOfContents,
|
|
toc_min_heading_level: tocMinHeadingLevel,
|
|
toc_max_heading_level: tocMaxHeadingLevel,
|
|
} = frontMatter;
|
|
const {description, title} = metadata; // We only add a title if:
|
|
// - user asks to hide it with front matter
|
|
// - the markdown content does not already contain a top-level h1 heading
|
|
|
|
const shouldAddTitle =
|
|
!hideTitle && typeof DocContent.contentTitle === 'undefined';
|
|
const windowSize = useWindowSize();
|
|
const canRenderTOC =
|
|
!hideTableOfContents && DocContent.toc && DocContent.toc.length > 0;
|
|
// const renderTocDesktop =
|
|
// canRenderTOC && (windowSize === 'desktop' || windowSize === 'ssr');
|
|
return (
|
|
<>
|
|
<Seo
|
|
{...{
|
|
title,
|
|
description,
|
|
keywords,
|
|
image,
|
|
}}
|
|
/>
|
|
|
|
<div className="row">
|
|
<div
|
|
className={clsx('col', {
|
|
[styles.docItemCol]: !hideTableOfContents,
|
|
})}>
|
|
<DocVersionBanner />
|
|
<div className={styles.docItemContainer}>
|
|
<article>
|
|
<DocVersionBadge />
|
|
|
|
{canRenderTOC && (
|
|
<TOCCollapsible
|
|
toc={DocContent.toc}
|
|
minHeadingLevel={tocMinHeadingLevel}
|
|
maxHeadingLevel={tocMaxHeadingLevel}
|
|
className={clsx(
|
|
ThemeClassNames.docs.docTocMobile,
|
|
styles.tocMobile,
|
|
)}
|
|
/>
|
|
)}
|
|
<div
|
|
className={clsx(ThemeClassNames.docs.docMarkdown, 'markdown')}>
|
|
{/*
|
|
Title can be declared inside md content or declared through front matter and added manually
|
|
To make both cases consistent, the added title is added under the same div.markdown block
|
|
See https://github.com/facebook/docusaurus/pull/4882#issuecomment-853021120
|
|
*/}
|
|
{shouldAddTitle && (
|
|
<header>
|
|
<Heading as="h1">{title}</Heading>
|
|
</header>
|
|
)}
|
|
|
|
<DocItemFooter {...props} />
|
|
<br />
|
|
<DocContent />
|
|
</div>
|
|
</article>
|
|
<DocPaginator previous={metadata.previous} next={metadata.next} />
|
|
<div className="margin-top--md">
|
|
<SidebarAd />
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div className="col col--3">
|
|
{/* Change it such that sidebar ad is shown regardless whether there's a TOC */}
|
|
<TOC
|
|
toc={DocContent.toc}
|
|
minHeadingLevel={tocMinHeadingLevel}
|
|
maxHeadingLevel={tocMaxHeadingLevel}
|
|
className={ThemeClassNames.docs.docTocDesktop}
|
|
/>
|
|
</div>
|
|
</div>
|
|
</>
|
|
);
|
|
}
|