From 8c934213eb9ba694aa153b37c8ac31244b7cb7eb Mon Sep 17 00:00:00 2001 From: Thuan Bui <9248622+10h30@users.noreply.github.com> Date: Sun, 22 Mar 2026 09:51:26 +0700 Subject: [PATCH] feat: add getDescendantSlugs function and update category/destination filtering logic --- src/pages/category/[...rest].astro | 6 +++++- src/pages/destination/[...rest].astro | 10 +++++++--- src/utils/taxonomy.ts | 23 +++++++++++++++++++++++ 3 files changed, 35 insertions(+), 4 deletions(-) diff --git a/src/pages/category/[...rest].astro b/src/pages/category/[...rest].astro index dbcd661..d1cb15c 100644 --- a/src/pages/category/[...rest].astro +++ b/src/pages/category/[...rest].astro @@ -8,6 +8,7 @@ import Pagination from "@/components/ui/Pagination.astro"; import { getTaxonomyMap, getTaxonomyPath, + getDescendantSlugs, type TaxonomyItem, } from "@/utils/taxonomy"; import { buildPaginatedPaths } from "@/utils/paginate"; @@ -32,8 +33,11 @@ export async function getStaticPaths() { ); return Array.from(catSlugs).flatMap((slug) => { + const descendants = getDescendantSlugs("category", slug); + const allSlugs = [slug, ...descendants]; + const catPosts = posts - .filter((post) => post.data.categories?.includes(slug)) + .filter((post) => post.data.categories?.some((d) => allSlugs.includes(d))) .sort((a, b) => b.data.pubDate.valueOf() - a.data.pubDate.valueOf()); const fullPath = getTaxonomyPath("category", slug); diff --git a/src/pages/destination/[...rest].astro b/src/pages/destination/[...rest].astro index 0fcfc27..4ec9600 100644 --- a/src/pages/destination/[...rest].astro +++ b/src/pages/destination/[...rest].astro @@ -8,6 +8,7 @@ import Pagination from "@/components/ui/Pagination.astro"; import { getTaxonomyMap, getTaxonomyPath, + getDescendantSlugs, type TaxonomyItem, } from "@/utils/taxonomy"; import { buildPaginatedPaths } from "@/utils/paginate"; @@ -32,8 +33,13 @@ export async function getStaticPaths() { ); return Array.from(destSlugs).flatMap((slug) => { + const descendants = getDescendantSlugs("destination", slug); + const allSlugs = [slug, ...descendants]; + const destPosts = posts - .filter((post) => post.data.destination?.includes(slug)) + .filter((post) => + post.data.destination?.some((d) => allSlugs.includes(d)), + ) .sort((a, b) => b.data.pubDate.valueOf() - a.data.pubDate.valueOf()); const fullPath = getTaxonomyPath("destination", slug); @@ -88,11 +94,9 @@ const metadata = { subtitle: "mx-auto max-w-3xl text-xl text-muted-foreground", }} /> -
-