mirror of
https://github.com/facebook/docusaurus.git
synced 2025-06-04 03:42:34 +02:00
69 lines
2 KiB
TypeScript
69 lines
2 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 useDocusaurusContext from '@docusaurus/useDocusaurusContext';
|
|
import BlogLayout from '@theme/BlogLayout';
|
|
import BlogPostItem from '@theme/BlogPostItem';
|
|
import BlogListPaginator from '@theme/BlogListPaginator';
|
|
import type {Props} from '@theme/BlogListPage';
|
|
import {
|
|
PageMetadata,
|
|
HtmlClassNameProvider,
|
|
ThemeClassNames,
|
|
} from '@docusaurus/theme-common';
|
|
import SearchMetadata from '@theme/SearchMetadata';
|
|
import clsx from 'clsx';
|
|
|
|
function BlogListPageMetadata(props: Props): JSX.Element {
|
|
const {metadata} = props;
|
|
const {
|
|
siteConfig: {title: siteTitle},
|
|
} = useDocusaurusContext();
|
|
const {blogDescription, blogTitle, permalink} = metadata;
|
|
const isBlogOnlyMode = permalink === '/';
|
|
const title = isBlogOnlyMode ? siteTitle : blogTitle;
|
|
return (
|
|
<>
|
|
<PageMetadata title={title} description={blogDescription} />
|
|
<SearchMetadata tag="blog_posts_list" />
|
|
</>
|
|
);
|
|
}
|
|
|
|
function BlogListPageContent(props: Props): JSX.Element {
|
|
const {metadata, items, sidebar} = props;
|
|
return (
|
|
<BlogLayout sidebar={sidebar}>
|
|
{items.map(({content: BlogPostContent}) => (
|
|
<BlogPostItem
|
|
key={BlogPostContent.metadata.permalink}
|
|
frontMatter={BlogPostContent.frontMatter}
|
|
assets={BlogPostContent.assets}
|
|
metadata={BlogPostContent.metadata}
|
|
truncated={BlogPostContent.metadata.truncated}>
|
|
<BlogPostContent />
|
|
</BlogPostItem>
|
|
))}
|
|
<BlogListPaginator metadata={metadata} />
|
|
</BlogLayout>
|
|
);
|
|
}
|
|
|
|
export default function BlogListPage(props: Props): JSX.Element {
|
|
return (
|
|
<HtmlClassNameProvider
|
|
className={clsx(
|
|
ThemeClassNames.wrapper.blogPages,
|
|
ThemeClassNames.page.blogListPage,
|
|
)}>
|
|
<BlogListPageMetadata {...props} />
|
|
<BlogListPageContent {...props} />
|
|
</HtmlClassNameProvider>
|
|
);
|
|
}
|