feat: refactor taxonomy data handling for categories, destinations, and tags

This commit is contained in:
Thuan Bui
2026-03-19 17:27:05 +07:00
parent beac1efd7f
commit 2c1d3b2f7f
9 changed files with 33 additions and 36 deletions
+7 -5
View File
@@ -7,8 +7,8 @@ import Pagination from "@/components/ui/Pagination.astro";
import type { Page } from "astro";
import type { CollectionEntry } from "astro:content";
import {
categoryMap,
getCategoryPath,
getTaxonomyMap,
getTaxonomyPath,
type TaxonomyItem,
} from "@/utils/taxonomy";
@@ -27,8 +27,10 @@ export async function getStaticPaths() {
.filter((post) => post.data.categories?.includes(slug))
.sort((a, b) => b.data.pubDate.valueOf() - a.data.pubDate.valueOf());
const fullPath = getCategoryPath(slug);
const cat = categoryMap.get(slug) ?? ({ slug, name: slug } as TaxonomyItem);
const fullPath = getTaxonomyPath("category", slug);
const cat =
getTaxonomyMap("category").get(slug) ??
({ slug, name: slug } as TaxonomyItem);
const totalPages = Math.max(1, Math.ceil(catPosts.length / PAGE_SIZE));
return Array.from({ length: totalPages }, (_, i) => {
@@ -65,7 +67,7 @@ const page = {
currentPage,
lastPage,
url: { prev: prevUrl, next: nextUrl },
} as unknown as Page<CollectionEntry<"blog">>;
};
const metadata = {
title: cat.name,
@@ -5,7 +5,7 @@ import Headline from "@/components/ui/Headline.astro";
import PostItem from "@/components/blog/PostItem.astro";
import Pagination from "@/components/ui/Pagination.astro";
import type { GetStaticPathsOptions } from "astro";
import { categoryMap } from "@/utils/taxonomy";
import { getTaxonomyMap } from "@/utils/taxonomy";
export async function getStaticPaths({ paginate }: GetStaticPathsOptions) {
const allPosts = await getCollection("blog");
@@ -31,7 +31,7 @@ export async function getStaticPaths({ paginate }: GetStaticPathsOptions) {
const { page } = Astro.props;
const { category } = Astro.params;
const categoryInfo = categoryMap.get(category!);
const categoryInfo = getTaxonomyMap("category").get(category!);
const displayName = categoryInfo?.name ?? category!;
const description = categoryInfo?.description;
+6 -5
View File
@@ -7,8 +7,8 @@ import Pagination from "@/components/ui/Pagination.astro";
import type { Page } from "astro";
import type { CollectionEntry } from "astro:content";
import {
destinationMap,
getDestinationPath,
getTaxonomyMap,
getTaxonomyPath,
type TaxonomyItem,
} from "@/utils/taxonomy";
@@ -27,9 +27,10 @@ export async function getStaticPaths() {
.filter((post) => post.data.destination?.includes(slug))
.sort((a, b) => b.data.pubDate.valueOf() - a.data.pubDate.valueOf());
const fullPath = getDestinationPath(slug);
const fullPath = getTaxonomyPath("destination", slug);
const dest =
destinationMap.get(slug) ?? ({ slug, name: slug } as TaxonomyItem);
getTaxonomyMap("destination").get(slug) ??
({ slug, name: slug } as TaxonomyItem);
const totalPages = Math.max(1, Math.ceil(destPosts.length / PAGE_SIZE));
return Array.from({ length: totalPages }, (_, i) => {
@@ -66,7 +67,7 @@ const page = {
currentPage,
lastPage,
url: { prev: prevUrl, next: nextUrl },
} as unknown as Page<CollectionEntry<"blog">>;
};
const metadata = {
title: dest.name,
+2 -2
View File
@@ -5,7 +5,7 @@ import Headline from "@/components/ui/Headline.astro";
import PostItem from "@/components/blog/PostItem.astro";
import Pagination from "@/components/ui/Pagination.astro";
import type { GetStaticPathsOptions } from "astro";
import { tagMap } from "@/utils/taxonomy";
import { getTaxonomyMap } from "@/utils/taxonomy";
export async function getStaticPaths({ paginate }: GetStaticPathsOptions) {
const allPosts = await getCollection("blog");
@@ -31,7 +31,7 @@ export async function getStaticPaths({ paginate }: GetStaticPathsOptions) {
const { page } = Astro.props;
const { tag } = Astro.params;
const tagInfo = tagMap.get(tag!);
const tagInfo = getTaxonomyMap("tag").get(tag!);
const displayName = tagInfo?.name ?? tag!;
const description = tagInfo?.description;