From 3c3200f211156af13e0eb2c34bb4cf2fa076716a Mon Sep 17 00:00:00 2001 From: Michael Hawkins Date: Fri, 27 Mar 2026 15:10:38 +0000 Subject: [PATCH 1/8] Add item categories to home page --- src/components/ItemTypeCategories.vue | 174 ++++++++++++++++++++++++++ src/components/ItemTypeOverview.vue | 4 +- src/font-awesome.ts | 8 ++ src/models/item-info.ts | 4 +- src/utilities/item-type-format.ts | 1 + src/views/HomeView.vue | 6 + 6 files changed, 194 insertions(+), 3 deletions(-) create mode 100644 src/components/ItemTypeCategories.vue diff --git a/src/components/ItemTypeCategories.vue b/src/components/ItemTypeCategories.vue new file mode 100644 index 0000000..0856ff3 --- /dev/null +++ b/src/components/ItemTypeCategories.vue @@ -0,0 +1,174 @@ + + + + + diff --git a/src/components/ItemTypeOverview.vue b/src/components/ItemTypeOverview.vue index 419844d..a28e00b 100644 --- a/src/components/ItemTypeOverview.vue +++ b/src/components/ItemTypeOverview.vue @@ -241,7 +241,9 @@ function getWikiLink() { frags[i] = frags[i]!.charAt(0).toUpperCase() + frags[i]!.slice(1); } - return `https://minecraft.wiki/w/${frags.join("_")}`; + let itemName = frags.join("_").replace("Of", "of"); + + return `https://minecraft.wiki/w/${itemName}`; } diff --git a/src/font-awesome.ts b/src/font-awesome.ts index f00f9bc..18573e5 100644 --- a/src/font-awesome.ts +++ b/src/font-awesome.ts @@ -41,12 +41,16 @@ import { faPalette, faTrowel, faPhotoFilm, + faCubes, + faHammer, + faClockRotateLeft, // Don't forget to add it below too! } from "@fortawesome/free-solid-svg-icons"; // Regular icons import { faHeart as farHeart, + faGem as farGem, // Don't forget to add it below too! } from "@fortawesome/free-regular-svg-icons"; @@ -91,4 +95,8 @@ library.add( faPalette, faTrowel, faPhotoFilm, + farGem, + faCubes, + faHammer, + faClockRotateLeft, ); diff --git a/src/models/item-info.ts b/src/models/item-info.ts index 70edb8d..7b1a532 100644 --- a/src/models/item-info.ts +++ b/src/models/item-info.ts @@ -4,8 +4,8 @@ export interface ItemInfo { description?: string; moreInfoLink?: string; hideWikiLink?: boolean; - isSpecialItem?: boolean; - icon?: string; + isSpecialItem?: boolean; // TODO: get rid of + icon?: string; // TODO: get rid of shopCaveats?: string; } diff --git a/src/utilities/item-type-format.ts b/src/utilities/item-type-format.ts index 800437b..b7044dd 100644 --- a/src/utilities/item-type-format.ts +++ b/src/utilities/item-type-format.ts @@ -1,5 +1,6 @@ export function formatItemType(itemType: string | null | undefined, defaultValue?: string | null | undefined): string { if (!itemType) return defaultValue ?? ""; + // TODO: Lowercase & capitalise first letter. Some places that use this want it uppercase; make them upper case it return itemType.replace(/_/g, " "); } diff --git a/src/views/HomeView.vue b/src/views/HomeView.vue index 2eeeb08..8ff2a71 100644 --- a/src/views/HomeView.vue +++ b/src/views/HomeView.vue @@ -7,6 +7,7 @@ import ItemTypeSearch from "@/components/ItemTypeSearch.vue"; import { getSpecialItems } from "@/models/item-info"; import { serverStore } from "@/store/server-state"; import { formatNumber } from "@/utilities/number-format"; +import ItemTypeCategories from "@/components/ItemTypeCategories.vue"; const loading = ref(true); const recentSales = ref([] as SaleSummary[]); @@ -29,9 +30,14 @@ async function loadSales() { noMoreResults.value = newSales.length === 0; loading.value = false; } + +