no longer price sort of frontend
This commit is contained in:
@@ -140,43 +140,58 @@ export default function PartsBrowseClient(props: {
|
||||
// ----------------------------
|
||||
useEffect(() => {
|
||||
if (!partRole) return;
|
||||
|
||||
|
||||
const controller = new AbortController();
|
||||
|
||||
|
||||
async function fetchParts() {
|
||||
try {
|
||||
setLoading(true);
|
||||
setError(null);
|
||||
|
||||
|
||||
const search = new URLSearchParams();
|
||||
search.set("platform", effectivePlatform);
|
||||
search.append("partRole", partRole);
|
||||
|
||||
|
||||
// server paging (0-based)
|
||||
search.set("page", String(currentPage - 1));
|
||||
search.set("size", String(PAGE_SIZE));
|
||||
|
||||
|
||||
// optional server search + sort (backend can ignore for now)
|
||||
if (searchQuery.trim()) search.set("q", searchQuery.trim());
|
||||
if (brandFilter.length) brandFilter.forEach((b) => search.append("brand", b));
|
||||
|
||||
if (brandFilter.length)
|
||||
brandFilter.forEach((b) => search.append("brand", b));
|
||||
|
||||
// sort mapping
|
||||
// sort mapping (Spring-style: sort=field,dir)
|
||||
switch (sortBy) {
|
||||
case "price-asc":
|
||||
search.set("sort", "price,asc");
|
||||
break;
|
||||
case "price-desc":
|
||||
search.set("sort", "price,desc");
|
||||
break;
|
||||
case "brand-asc":
|
||||
search.set("sort", "brand,asc");
|
||||
break;
|
||||
case "relevance":
|
||||
default:
|
||||
// fallback (or whatever you consider "relevance")
|
||||
search.set("sort", "updatedAt,desc");
|
||||
break;
|
||||
}
|
||||
|
||||
const res = await fetch(`${API_BASE_URL}/api/v1/catalog/options?${search.toString()}`, {
|
||||
signal: controller.signal,
|
||||
});
|
||||
|
||||
|
||||
const res = await fetch(
|
||||
`${API_BASE_URL}/api/v1/catalog/options?${search.toString()}`,
|
||||
{
|
||||
signal: controller.signal,
|
||||
}
|
||||
);
|
||||
|
||||
if (!res.ok) throw new Error(`Failed to load products (${res.status})`);
|
||||
|
||||
|
||||
const json = await res.json();
|
||||
const { items, page } = unwrapContent<GunbuilderProductFromApi>(json);
|
||||
|
||||
|
||||
setParts(
|
||||
items.map((p) => ({
|
||||
id: normalizeId(p.id),
|
||||
@@ -190,7 +205,7 @@ export default function PartsBrowseClient(props: {
|
||||
inStock: p.inStock ?? true,
|
||||
}))
|
||||
);
|
||||
|
||||
|
||||
if (page) {
|
||||
setServerTotalPages(page.totalPages ?? 1);
|
||||
setServerTotalElements(page.totalElements ?? items.length);
|
||||
@@ -206,10 +221,17 @@ export default function PartsBrowseClient(props: {
|
||||
setLoading(false);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
fetchParts();
|
||||
return () => controller.abort();
|
||||
}, [partRole, effectivePlatform, currentPage, searchQuery, sortBy, brandFilter]);
|
||||
}, [
|
||||
partRole,
|
||||
effectivePlatform,
|
||||
currentPage,
|
||||
searchQuery,
|
||||
sortBy,
|
||||
brandFilter,
|
||||
]);
|
||||
// Reset pagination on filters
|
||||
useEffect(() => {
|
||||
setCurrentPage(1);
|
||||
|
||||
Reference in New Issue
Block a user