From a6a2b37c9a77b3b277c0f7636b82d1a61f0d096e Mon Sep 17 00:00:00 2001 From: Stefan Imhoff Date: Wed, 26 Apr 2023 18:30:56 +0200 Subject: [PATCH] feat: add pagination to Haiku detail pages and sort entries --- src/pages/haiku/[...slug].astro | 26 +++++++++++++++++++++----- src/utils/sort-by-date.ts | 3 +++ 2 files changed, 24 insertions(+), 5 deletions(-) create mode 100644 src/utils/sort-by-date.ts diff --git a/src/pages/haiku/[...slug].astro b/src/pages/haiku/[...slug].astro index e2890bf..d91546f 100644 --- a/src/pages/haiku/[...slug].astro +++ b/src/pages/haiku/[...slug].astro @@ -1,19 +1,29 @@ --- import { getCollection } from 'astro:content'; +import { sortByDate } from '../../utils/sort-by-date'; + import BaseLayout from '../../layouts/BaseLayout.astro'; import PageHeader from '../../components/PageHeader.astro'; -import { Verse } from '../../components'; +import { Pagination, Verse } from '../../components'; export async function getStaticPaths() { const haikuEntries = await getCollection('haiku'); - return haikuEntries.map((entry) => ({ + const numberOfPages = haikuEntries.length; + haikuEntries.sort(sortByDate).reverse(); + + return haikuEntries.map((entry, index) => ({ params: { slug: entry.slug }, - props: { entry }, + props: { + entry, + nextPost: + index + 1 === numberOfPages ? { slug: null, data: null } : haikuEntries[index + 1], + prevPost: index === 0 ? {} : haikuEntries[index - 1], + }, })); } -const { entry } = Astro.props; +const { entry, prevPost, nextPost } = Astro.props; --- @@ -24,7 +34,7 @@ const { entry } = Astro.props; backLink="/haiku/" />
+
diff --git a/src/utils/sort-by-date.ts b/src/utils/sort-by-date.ts new file mode 100644 index 0000000..8ace8d4 --- /dev/null +++ b/src/utils/sort-by-date.ts @@ -0,0 +1,3 @@ +export const sortByDate = (a: any, b: any) => { + return Date.parse(b.data.date.toISOString()) - Date.parse(a.data.date.toISOString()); +};