| import React, { type ReactNode } from 'react'; |
| import clsx from 'clsx'; |
| import { HtmlClassNameProvider, ThemeClassNames } from '@docusaurus/theme-common'; |
| import { BlogPostProvider, useBlogPost } from '@docusaurus/plugin-content-blog/client'; |
| import BlogLayout from '@theme/BlogLayout'; |
| import BlogPostItem from '@theme/BlogPostItem'; |
| import BlogPostPaginator from '@theme/BlogPostPaginator'; |
| import BlogPostPageMetadata from '@theme/BlogPostPage/Metadata'; |
| import BlogPostPageStructuredData from '@theme/BlogPostPage/StructuredData'; |
| import TOC from '@theme/TOC'; |
| import ContentVisibility from '@theme/ContentVisibility'; |
| import type { Props } from '@theme/BlogPostPage'; |
| import type { BlogSidebar } from '@docusaurus/plugin-content-blog'; |
| import RecentBlogs from '@site/src/components/recent-blogs'; |
| |
| function BlogPostPageContent({ sidebar, children }: { sidebar: BlogSidebar; children: ReactNode }): JSX.Element { |
| const { metadata, toc } = useBlogPost(); |
| const { nextItem, prevItem, frontMatter } = metadata; |
| const { |
| hide_table_of_contents: hideTableOfContents, |
| toc_min_heading_level: tocMinHeadingLevel, |
| toc_max_heading_level: tocMaxHeadingLevel, |
| } = frontMatter; |
| return ( |
| <BlogLayout |
| sidebar={sidebar} |
| toc={ |
| !hideTableOfContents && toc.length > 0 ? ( |
| <TOC toc={toc} minHeadingLevel={tocMinHeadingLevel} maxHeadingLevel={tocMaxHeadingLevel} /> |
| ) : undefined |
| } |
| > |
| <ContentVisibility metadata={metadata} /> |
| |
| <BlogPostItem>{children}</BlogPostItem> |
| <RecentBlogs /> |
| {/* {(nextItem || prevItem) && ( |
| <BlogPostPaginator nextItem={nextItem} prevItem={prevItem} /> |
| )} */} |
| </BlogLayout> |
| ); |
| } |
| |
| export default function BlogPostPage(props: Props): JSX.Element { |
| const BlogPostContent = props.content; |
| return ( |
| <BlogPostProvider content={props.content} isBlogPostPage> |
| <HtmlClassNameProvider |
| className={clsx(ThemeClassNames.wrapper.blogPages, ThemeClassNames.page.blogPostPage)} |
| > |
| <BlogPostPageMetadata /> |
| <BlogPostPageStructuredData /> |
| <BlogPostPageContent sidebar={props.sidebar}> |
| <BlogPostContent /> |
| </BlogPostPageContent> |
| </HtmlClassNameProvider> |
| </BlogPostProvider> |
| ); |
| } |