🛠️ Refactor load function in +page.ts to use getSvgsByCategory for improved category filtering and sorting logic

This commit is contained in:
pheralb
2025-09-01 11:27:53 +01:00
parent bc34bdc904
commit e6d441e9f2
+19 -17
View File
@@ -1,48 +1,50 @@
import type { PageLoad } from "./$types"; import type { PageLoad } from "./$types";
import type { iSVG } from "@/types/svg"; import type { iSVG } from "@/types/svg";
import { svgs } from "@/data/svgs";
import { error } from "@sveltejs/kit"; import { error } from "@sveltejs/kit";
import { getSvgsByCategory } from "@/data";
import { searchWithFuse } from "@/utils/searchWithFuse"; import { searchWithFuse } from "@/utils/searchWithFuse";
export const load: PageLoad = (async ({ params, url }) => { export const load: PageLoad = (async ({ params, url }) => {
const { category } = params; const { category } = params;
const searchParam = url.searchParams.get("search") || ""; const searchParam = url.searchParams.get("search") || "";
const sortParam = url.searchParams.get("sort") === "alphabetical";
const svgsByCategory = svgs.filter((svg: iSVG) => { const svgsByCategory = getSvgsByCategory(category);
if (Array.isArray(svg.category)) {
return svg.category.some(
(categoryItem) => categoryItem.toLowerCase() === category.toLowerCase(),
);
} else {
return svg.category.toLowerCase() === category.toLowerCase();
}
});
if (svgsByCategory.length === 0) { if (!svgsByCategory.length) {
throw error(404, "Category not found"); throw error(404, "Category not found");
} }
let filteredSvgs: iSVG[] = []; let filteredSvgs: iSVG[] = [];
const latestSorted = [...svgsByCategory].sort((a, b) => b.id! - a.id!);
const alphabeticallySorted = [...svgsByCategory].sort((a, b) =>
a.title.localeCompare(b.title),
);
const formatCategory = category.charAt(0).toUpperCase() + category.slice(1);
if (!searchParam) { if (!searchParam) {
filteredSvgs = svgsByCategory; filteredSvgs = sortParam ? alphabeticallySorted : latestSorted;
} else { } else {
if (searchParam.length < 3) { if (searchParam.length < 3) {
filteredSvgs = svgsByCategory.filter((svg: iSVG) => const baseData = sortParam ? alphabeticallySorted : latestSorted;
filteredSvgs = baseData.filter((svg: iSVG) =>
svg.title.toLowerCase().includes(searchParam.toLowerCase()), svg.title.toLowerCase().includes(searchParam.toLowerCase()),
); );
} else { } else {
filteredSvgs = searchWithFuse(svgsByCategory) const baseData = sortParam ? alphabeticallySorted : latestSorted;
filteredSvgs = searchWithFuse(baseData)
.search(searchParam) .search(searchParam)
.map((result) => result.item); .map((result) => result.item);
} }
} }
return { return {
category: category, category: formatCategory,
searchTerm: searchParam, searchTerm: searchParam,
svgs: svgsByCategory, sorted: sortParam,
filteredSvgs: filteredSvgs, initialSvgs: filteredSvgs,
latestSorted,
alphabeticallySorted,
}; };
}) satisfies PageLoad; }) satisfies PageLoad;