mirror of
https://github.com/Snigdha-OS/documentation.git
synced 2025-09-14 20:24:56 +02:00
86 lines
2.4 KiB
JavaScript
86 lines
2.4 KiB
JavaScript
/**
|
|
* 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 Link from '@docusaurus/Link';
|
|
import {translate} from '@docusaurus/Translate';
|
|
import {PageMetadata} from '@docusaurus/theme-common';
|
|
import Layout from '@theme/Layout';
|
|
import Heading from '@theme/Heading';
|
|
function Year({year, posts}) {
|
|
return (
|
|
<>
|
|
<Heading as="h3" id={year}>
|
|
{year}
|
|
</Heading>
|
|
<ul>
|
|
{posts.map((post) => (
|
|
<li key={post.metadata.date}>
|
|
<Link to={post.metadata.permalink}>
|
|
{post.metadata.formattedDate} - {post.metadata.title}
|
|
</Link>
|
|
</li>
|
|
))}
|
|
</ul>
|
|
</>
|
|
);
|
|
}
|
|
function YearsSection({years}) {
|
|
return (
|
|
<section className="margin-vert--lg">
|
|
<div className="container">
|
|
<div className="row">
|
|
{years.map((_props, idx) => (
|
|
<div key={idx} className="col col--4 margin-vert--lg">
|
|
<Year {..._props} />
|
|
</div>
|
|
))}
|
|
</div>
|
|
</div>
|
|
</section>
|
|
);
|
|
}
|
|
function listPostsByYears(blogPosts) {
|
|
const postsByYear = blogPosts.reduce((posts, post) => {
|
|
const year = post.metadata.date.split('-')[0];
|
|
const yearPosts = posts.get(year) ?? [];
|
|
return posts.set(year, [post, ...yearPosts]);
|
|
}, new Map());
|
|
return Array.from(postsByYear, ([year, posts]) => ({
|
|
year,
|
|
posts,
|
|
}));
|
|
}
|
|
export default function BlogArchive({archive}) {
|
|
const title = translate({
|
|
id: 'theme.blog.archive.title',
|
|
message: 'Archive',
|
|
description: 'The page & hero title of the blog archive page',
|
|
});
|
|
const description = translate({
|
|
id: 'theme.blog.archive.description',
|
|
message: 'Archive',
|
|
description: 'The page & hero description of the blog archive page',
|
|
});
|
|
const years = listPostsByYears(archive.blogPosts);
|
|
return (
|
|
<>
|
|
<PageMetadata title={title} description={description} />
|
|
<Layout>
|
|
<header className="hero hero--primary">
|
|
<div className="container">
|
|
<Heading as="h1" className="hero__title">
|
|
{title}
|
|
</Heading>
|
|
<p className="hero__subtitle">{description}</p>
|
|
</div>
|
|
</header>
|
|
<main>{years.length > 0 && <YearsSection years={years} />}</main>
|
|
</Layout>
|
|
</>
|
|
);
|
|
}
|