From 9a350af2692356e5cc66bf0c68a9965a6d84c162 Mon Sep 17 00:00:00 2001 From: prototypa Date: Sat, 12 Aug 2023 02:22:19 -0400 Subject: [PATCH] Better getStaticPaths structure for blog endpoints --- src/pages/[...blog]/[...page].astro | 4 +- .../[...blog]/[category]/[...page].astro | 4 +- src/pages/[...blog]/[tag]/[...page].astro | 4 +- src/pages/[...blog]/index.astro | 4 +- src/utils/blog.ts | 94 +++++++++---------- 5 files changed, 56 insertions(+), 54 deletions(-) diff --git a/src/pages/[...blog]/[...page].astro b/src/pages/[...blog]/[...page].astro index 1810178..8260889 100644 --- a/src/pages/[...blog]/[...page].astro +++ b/src/pages/[...blog]/[...page].astro @@ -7,7 +7,9 @@ import Pagination from '~/components/blog/Pagination.astro'; import { blogListRobots, getStaticPathsBlogList } from '~/utils/blog'; -export const getStaticPaths = getStaticPathsBlogList(); +export async function getStaticPaths ({ paginate }) { + return await getStaticPathsBlogList({ paginate }); +} const { page } = Astro.props; const currentPage = page.currentPage ?? 1; diff --git a/src/pages/[...blog]/[category]/[...page].astro b/src/pages/[...blog]/[category]/[...page].astro index a15be82..1ff5cd6 100644 --- a/src/pages/[...blog]/[category]/[...page].astro +++ b/src/pages/[...blog]/[category]/[...page].astro @@ -6,7 +6,9 @@ import BlogList from '~/components/blog/List.astro'; import Headline from '~/components/blog/Headline.astro'; import Pagination from '~/components/blog/Pagination.astro'; -export const getStaticPaths = getStaticPathsBlogCategory(); +export async function getStaticPaths ({ paginate }) { + return await getStaticPathsBlogCategory({ paginate }); +} const { page, category } = Astro.props; diff --git a/src/pages/[...blog]/[tag]/[...page].astro b/src/pages/[...blog]/[tag]/[...page].astro index 8c4adc1..20f21db 100644 --- a/src/pages/[...blog]/[tag]/[...page].astro +++ b/src/pages/[...blog]/[tag]/[...page].astro @@ -6,7 +6,9 @@ import BlogList from '~/components/blog/List.astro'; import Headline from '~/components/blog/Headline.astro'; import Pagination from '~/components/blog/Pagination.astro'; -export const getStaticPaths = getStaticPathsBlogTag(); +export async function getStaticPaths ({ paginate }) { + return await getStaticPathsBlogTag({ paginate }); +} const { page, tag } = Astro.props; diff --git a/src/pages/[...blog]/index.astro b/src/pages/[...blog]/index.astro index a8a86da..3d8c01f 100644 --- a/src/pages/[...blog]/index.astro +++ b/src/pages/[...blog]/index.astro @@ -9,7 +9,9 @@ import { getCanonical, getPermalink } from '~/utils/permalinks'; import { getStaticPathsBlogPost, blogPostRobots } from '~/utils/blog'; import { findImage } from '~/utils/images'; -export const getStaticPaths = getStaticPathsBlogPost(); +export async function getStaticPaths () { + return await getStaticPathsBlogPost(); +} const { post } = Astro.props; diff --git a/src/utils/blog.ts b/src/utils/blog.ts index 5be45da..24ab7dd 100644 --- a/src/utils/blog.ts +++ b/src/utils/blog.ts @@ -162,18 +162,16 @@ export const findLatestPosts = async ({ count }: { count?: number }): Promise - async ({ paginate }) => { - if (!isBlogEnabled || !isBlogListRouteEnabled) return []; - return paginate(await fetchPosts(), { - params: { blog: BLOG_BASE || undefined }, - pageSize: blogPostsPerPage, - }); - }; +export const getStaticPathsBlogList = async ({ paginate }) => { + if (!isBlogEnabled || !isBlogListRouteEnabled) return []; + return paginate(await fetchPosts(), { + params: { blog: BLOG_BASE || undefined }, + pageSize: blogPostsPerPage, + }); +}; /** */ -export const getStaticPathsBlogPost = () => async () => { +export const getStaticPathsBlogPost = async () => { if (!isBlogEnabled || !isBlogPostRouteEnabled) return []; return (await fetchPosts()).map((post) => ({ params: { @@ -184,49 +182,45 @@ export const getStaticPathsBlogPost = () => async () => { }; /** */ -export const getStaticPathsBlogCategory = - () => - async ({ paginate }) => { - if (!isBlogEnabled || !isBlogCategoryRouteEnabled) return []; +export const getStaticPathsBlogCategory = async ({ paginate }) => { + if (!isBlogEnabled || !isBlogCategoryRouteEnabled) return []; - const posts = await fetchPosts(); - const categories = new Set(); - posts.map((post) => { - typeof post.category === 'string' && categories.add(post.category.toLowerCase()); - }); + const posts = await fetchPosts(); + const categories = new Set(); + posts.map((post) => { + typeof post.category === 'string' && categories.add(post.category.toLowerCase()); + }); - return Array.from(categories).map((category: string) => - paginate( - posts.filter((post) => typeof post.category === 'string' && category === post.category.toLowerCase()), - { - params: { category: category, blog: CATEGORY_BASE || undefined }, - pageSize: blogPostsPerPage, - props: { category }, - } - ) - ); - }; + return Array.from(categories).map((category: string) => + paginate( + posts.filter((post) => typeof post.category === 'string' && category === post.category.toLowerCase()), + { + params: { category: category, blog: CATEGORY_BASE || undefined }, + pageSize: blogPostsPerPage, + props: { category }, + } + ) + ); +}; /** */ -export const getStaticPathsBlogTag = - () => - async ({ paginate }) => { - if (!isBlogEnabled || !isBlogTagRouteEnabled) return []; +export const getStaticPathsBlogTag = async ({ paginate }) => { + if (!isBlogEnabled || !isBlogTagRouteEnabled) return []; - const posts = await fetchPosts(); - const tags = new Set(); - posts.map((post) => { - Array.isArray(post.tags) && post.tags.map((tag) => tags.add(tag.toLowerCase())); - }); + const posts = await fetchPosts(); + const tags = new Set(); + posts.map((post) => { + Array.isArray(post.tags) && post.tags.map((tag) => tags.add(tag.toLowerCase())); + }); - return Array.from(tags).map((tag: string) => - paginate( - posts.filter((post) => Array.isArray(post.tags) && post.tags.find((elem) => elem.toLowerCase() === tag)), - { - params: { tag: tag, blog: TAG_BASE || undefined }, - pageSize: blogPostsPerPage, - props: { tag }, - } - ) - ); - }; + return Array.from(tags).map((tag: string) => + paginate( + posts.filter((post) => Array.isArray(post.tags) && post.tags.find((elem) => elem.toLowerCase() === tag)), + { + params: { tag: tag, blog: TAG_BASE || undefined }, + pageSize: blogPostsPerPage, + props: { tag }, + } + ) + ); +};