0
mirror of https://github.com/valentineus/popov.link.git synced 2025-07-03 16:10:26 +03:00

feat: group blog posts by year in index page

- Implemented functionality to categorize blog posts by publication year.
- Updated the blog index page to display posts organized under their respective years for improved navigation.
This commit is contained in:
2025-06-11 16:05:50 +00:00
parent 6fe5df4e32
commit 3d6aedd272

View File

@ -1,4 +1,5 @@
--- ---
import type { CollectionEntry } from "astro:content";
import { getCollection } from "astro:content"; import { getCollection } from "astro:content";
import Layout from "../../layouts/BaseLayout.astro"; import Layout from "../../layouts/BaseLayout.astro";
import PostElement from "../../components/PostElement.astro"; import PostElement from "../../components/PostElement.astro";
@ -8,12 +9,32 @@ const posts = await getCollection("blog", ({ data }) => {
}); });
posts.sort((a, b) => b.data.pubDate.getTime() - a.data.pubDate.getTime()); posts.sort((a, b) => b.data.pubDate.getTime() - a.data.pubDate.getTime());
const postsByYear = posts.reduce<Record<string, CollectionEntry<"blog">[]>>((acc, post) => {
const year = post.data.pubDate.getFullYear().toString();
if (!acc[year]) {
acc[year] = [];
}
acc[year].push(post);
return acc;
}, {});
const years = Object.keys(postsByYear).sort((a, b) => Number(b) - Number(a));
--- ---
<Layout> <Layout>
<section style={{ "margin-top": "3rem" }}> <section style={{ "margin-top": "3rem" }}>
{
years.map((year) => (
<div>
<div style={{ "margin-bottom": "1rem" }}>{year}</div>
<ul> <ul>
{posts.map((post) => <PostElement post={post} />)} {postsByYear[year].map((post) => (
<PostElement post={post} />
))}
</ul> </ul>
</div>
))
}
</section> </section>
</Layout> </Layout>