Route categories to /products/category/{id}/{slug}, improve menu hover/layout, and hide stock/category clutter on product cards.
Co-authored-by: Cursor <cursoragent@cursor.com>
42 lines
1.2 KiB
TypeScript
42 lines
1.2 KiB
TypeScript
import type { Product } from "@/lib/data";
|
|
import {
|
|
catalogProductToCard,
|
|
fetchCatalogProducts,
|
|
fetchStoreItems,
|
|
variantToProduct,
|
|
} from "@/lib/store";
|
|
|
|
export async function loadCategoryProducts(params: {
|
|
page?: number;
|
|
pageSize?: number;
|
|
categoryId?: string;
|
|
name?: string;
|
|
}) {
|
|
const page = params.page ?? 1;
|
|
const pageSize = params.pageSize ?? 20;
|
|
const [storeResult, catalogResult] = await Promise.all([
|
|
fetchStoreItems({
|
|
page,
|
|
pageSize,
|
|
categoryId: params.categoryId,
|
|
name: params.name,
|
|
}),
|
|
fetchCatalogProducts({
|
|
page,
|
|
pageSize,
|
|
categoryId: params.categoryId,
|
|
name: params.name,
|
|
}),
|
|
]);
|
|
|
|
const fromStore = storeResult.items.map(variantToProduct);
|
|
const products: Product[] = fromStore.length
|
|
? fromStore
|
|
: catalogResult.items.map(catalogProductToCard);
|
|
const total = fromStore.length ? storeResult.total : catalogResult.total;
|
|
const resolvedPageSize = fromStore.length ? storeResult.pageSize : catalogResult.pageSize;
|
|
const pageCount = Math.max(1, Math.ceil((total || products.length) / (resolvedPageSize || pageSize)));
|
|
|
|
return { products, total, pageCount, pageSize: resolvedPageSize || pageSize };
|
|
}
|