mirror of
https://github.com/facebook/docusaurus.git
synced 2025-04-28 17:57:48 +02:00
48 lines
1.5 KiB
TypeScript
48 lines
1.5 KiB
TypeScript
/**
|
|
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
*
|
|
* This source code is licensed under the MIT license found in the
|
|
* LICENSE file in the root directory of this source tree.
|
|
*/
|
|
|
|
import React from 'react';
|
|
import clsx from 'clsx';
|
|
import {ThemeClassNames} from '@docusaurus/theme-common';
|
|
import {useDoc} from '@docusaurus/plugin-content-docs/client';
|
|
import Heading from '@theme/Heading';
|
|
import MDXContent from '@theme/MDXContent';
|
|
import type {Props} from '@theme/DocItem/Content';
|
|
|
|
/**
|
|
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
|
|
|
|
We render a "synthetic title" if:
|
|
- user doesn't ask to hide it with front matter
|
|
- the markdown content does not already contain a top-level h1 heading
|
|
*/
|
|
function useSyntheticTitle(): string | null {
|
|
const {metadata, frontMatter, contentTitle} = useDoc();
|
|
const shouldRender =
|
|
!frontMatter.hide_title && typeof contentTitle === 'undefined';
|
|
if (!shouldRender) {
|
|
return null;
|
|
}
|
|
return metadata.title;
|
|
}
|
|
|
|
export default function DocItemContent({children}: Props): JSX.Element {
|
|
const syntheticTitle = useSyntheticTitle();
|
|
return (
|
|
<div className={clsx(ThemeClassNames.docs.docMarkdown, 'markdown')}>
|
|
{syntheticTitle && (
|
|
<header>
|
|
<Heading as="h1">{syntheticTitle}</Heading>
|
|
</header>
|
|
)}
|
|
<MDXContent>{children}</MDXContent>
|
|
</div>
|
|
);
|
|
}
|