From 12cea5eefe22dd80089a3523febd2435bc297c18 Mon Sep 17 00:00:00 2001 From: Alexey Pyltsyn Date: Tue, 20 Jul 2021 15:11:08 +0300 Subject: [PATCH] refactor(v2): increase content area if blog sidebar is off (#5171) * refactor(v2): increase content area if blog sidebar is off * Replace render prop with children to simplicity sake * Revert to previous layout --- .../src/theme/BlogLayout/index.tsx | 48 +++++++++++++++ .../src/theme/BlogListPage/index.tsx | 40 +++++-------- .../src/theme/BlogPostPage/index.tsx | 48 ++++++--------- .../src/theme/BlogTagsListPage/index.tsx | 23 +++----- .../src/theme/BlogTagsPostsPage/index.tsx | 59 ++++++++----------- .../docusaurus-theme-classic/src/types.d.ts | 14 +++++ 6 files changed, 128 insertions(+), 104 deletions(-) create mode 100644 packages/docusaurus-theme-classic/src/theme/BlogLayout/index.tsx diff --git a/packages/docusaurus-theme-classic/src/theme/BlogLayout/index.tsx b/packages/docusaurus-theme-classic/src/theme/BlogLayout/index.tsx new file mode 100644 index 0000000000..f99aa4c5f2 --- /dev/null +++ b/packages/docusaurus-theme-classic/src/theme/BlogLayout/index.tsx @@ -0,0 +1,48 @@ +/** + * 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 Layout from '@theme/Layout'; +import BlogSidebar from '@theme/BlogSidebar'; +import TOC from '@theme/TOC'; + +import type {Props} from '@theme/BlogLayout'; + +function BlogLayout(props: Props): JSX.Element { + const {sidebar, toc, children, ...layoutProps} = props; + const hasSidebar = sidebar && sidebar.items.length > 0; + + return ( + +
+
+ {hasSidebar && ( + + )} +
+ {children} +
+ {toc && ( +
+ +
+ )} +
+
+
+ ); +} + +export default BlogLayout; diff --git a/packages/docusaurus-theme-classic/src/theme/BlogListPage/index.tsx b/packages/docusaurus-theme-classic/src/theme/BlogListPage/index.tsx index 5c6ac3b09c..282c5d4733 100644 --- a/packages/docusaurus-theme-classic/src/theme/BlogListPage/index.tsx +++ b/packages/docusaurus-theme-classic/src/theme/BlogListPage/index.tsx @@ -8,11 +8,10 @@ import React from 'react'; import useDocusaurusContext from '@docusaurus/useDocusaurusContext'; -import Layout from '@theme/Layout'; +import BlogLayout from '@theme/BlogLayout'; import BlogPostItem from '@theme/BlogPostItem'; import BlogListPaginator from '@theme/BlogListPaginator'; import type {Props} from '@theme/BlogListPage'; -import BlogSidebar from '@theme/BlogSidebar'; import {ThemeClassNames} from '@docusaurus/theme-common'; function BlogListPage(props: Props): JSX.Element { @@ -23,8 +22,9 @@ function BlogListPage(props: Props): JSX.Element { const {blogDescription, blogTitle, permalink} = metadata; const isBlogOnlyMode = permalink === '/'; const title = isBlogOnlyMode ? siteTitle : blogTitle; + return ( - -
-
- -
- {items.map(({content: BlogPostContent}) => ( - - - - ))} - -
-
-
-
+ }} + sidebar={sidebar}> + {items.map(({content: BlogPostContent}) => ( + + + + ))} + + ); } diff --git a/packages/docusaurus-theme-classic/src/theme/BlogPostPage/index.tsx b/packages/docusaurus-theme-classic/src/theme/BlogPostPage/index.tsx index c9558125ef..c2c311c611 100644 --- a/packages/docusaurus-theme-classic/src/theme/BlogPostPage/index.tsx +++ b/packages/docusaurus-theme-classic/src/theme/BlogPostPage/index.tsx @@ -6,12 +6,10 @@ */ import React from 'react'; -import Layout from '@theme/Layout'; +import BlogLayout from '@theme/BlogLayout'; import BlogPostItem from '@theme/BlogPostItem'; import BlogPostPaginator from '@theme/BlogPostPaginator'; import type {Props} from '@theme/BlogPostPage'; -import BlogSidebar from '@theme/BlogSidebar'; -import TOC from '@theme/TOC'; import {ThemeClassNames} from '@docusaurus/theme-common'; function BlogPostPage(props: Props): JSX.Element { @@ -21,37 +19,27 @@ function BlogPostPage(props: Props): JSX.Element { const {hide_table_of_contents: hideTableOfContents} = frontMatter; return ( - - {BlogPostContents && ( -
-
- -
- - - - {(nextItem || prevItem) && ( - - )} -
- {!hideTableOfContents && BlogPostContents.toc && ( -
- -
- )} -
-
+ pageClassName={ThemeClassNames.page.blogPostPage} + sidebar={sidebar} + toc={ + !hideTableOfContents && BlogPostContents.toc + ? BlogPostContents.toc + : undefined + }> + + + + {(nextItem || prevItem) && ( + )} -
+ ); } diff --git a/packages/docusaurus-theme-classic/src/theme/BlogTagsListPage/index.tsx b/packages/docusaurus-theme-classic/src/theme/BlogTagsListPage/index.tsx index 455d5f1f93..1df05c8feb 100644 --- a/packages/docusaurus-theme-classic/src/theme/BlogTagsListPage/index.tsx +++ b/packages/docusaurus-theme-classic/src/theme/BlogTagsListPage/index.tsx @@ -7,10 +7,9 @@ import React from 'react'; -import Layout from '@theme/Layout'; import Link from '@docusaurus/Link'; +import BlogLayout from '@theme/BlogLayout'; import type {Props} from '@theme/BlogTagsListPage'; -import BlogSidebar from '@theme/BlogSidebar'; import {translate} from '@docusaurus/Translate'; import {ThemeClassNames} from '@docusaurus/theme-common'; @@ -54,26 +53,18 @@ function BlogTagsListPage(props: Props): JSX.Element { .filter((item) => item != null); return ( - -
-
- -
-

{title}

-
{tagsSection}
-
-
-
-
+ }} + sidebar={sidebar}> +

{title}

+
{tagsSection}
+ ); } diff --git a/packages/docusaurus-theme-classic/src/theme/BlogTagsPostsPage/index.tsx b/packages/docusaurus-theme-classic/src/theme/BlogTagsPostsPage/index.tsx index 1eff02c0fb..4b2c9d66be 100644 --- a/packages/docusaurus-theme-classic/src/theme/BlogTagsPostsPage/index.tsx +++ b/packages/docusaurus-theme-classic/src/theme/BlogTagsPostsPage/index.tsx @@ -7,11 +7,10 @@ import React from 'react'; -import Layout from '@theme/Layout'; -import BlogPostItem from '@theme/BlogPostItem'; import Link from '@docusaurus/Link'; +import BlogLayout from '@theme/BlogLayout'; +import BlogPostItem from '@theme/BlogPostItem'; import type {Props} from '@theme/BlogTagsPostsPage'; -import BlogSidebar from '@theme/BlogSidebar'; import Translate, {translate} from '@docusaurus/Translate'; import {ThemeClassNames, usePluralForm} from '@docusaurus/theme-common'; @@ -47,45 +46,37 @@ function BlogTagsPostPage(props: Props): JSX.Element { ); return ( - -
-
- -
-
-

{title}

+ }} + sidebar={sidebar}> +
+

{title}

- - - View All Tags - - -
+ + + View All Tags + + +
- {items.map(({content: BlogPostContent}) => ( - - - - ))} -
-
-
-
+ {items.map(({content: BlogPostContent}) => ( + + + + ))} + ); } diff --git a/packages/docusaurus-theme-classic/src/types.d.ts b/packages/docusaurus-theme-classic/src/types.d.ts index 158d7b9d39..d568c22f9b 100644 --- a/packages/docusaurus-theme-classic/src/types.d.ts +++ b/packages/docusaurus-theme-classic/src/types.d.ts @@ -50,6 +50,20 @@ declare module '@theme/BlogPostPaginator' { export default BlogPostPaginator; } +declare module '@theme/BlogLayout' { + import type {Props as LayoutProps} from '@theme/Layout'; + import type {BlogSidebar} from '@theme/BlogSidebar'; + import type {TOCItem} from '@docusaurus/types'; + + export type Props = LayoutProps & { + readonly sidebar?: BlogSidebar; + readonly toc?: readonly TOCItem[]; + }; + + const BlogLayout: (props: Props) => JSX.Element; + export default BlogLayout; +} + declare module '@theme/CodeBlock' { export type Props = { readonly children: string;