feat: add search and sorting

This commit is contained in:
Victor Gerbrands 2023-05-09 14:08:35 +02:00
parent 4994c029fc
commit 3da9fddad7
2 changed files with 22 additions and 3 deletions

View File

@ -115,6 +115,7 @@ const reshapeLineItem = (lineItem: MedusaLineItem): CartItem => {
maxVariantPrice: calculateVariantAmount(lineItem.variant)
},
updatedAt: lineItem.updated_at,
createdAt: lineItem.created_at,
tags: [],
descriptionHtml: lineItem.description ?? '',
featuredImage: {
@ -175,6 +176,7 @@ const reshapeProduct = (product: MedusaProduct): Product => {
}
};
const updatedAt = product.updated_at;
const createdAt = product.created_at;
const tags = product.tags?.map((tag) => tag.value) || [];
const descriptionHtml = product.description ?? '';
const featuredImage = {
@ -194,6 +196,7 @@ const reshapeProduct = (product: MedusaProduct): Product => {
featuredImage,
priceRange,
updatedAt,
createdAt,
tags,
descriptionHtml,
availableForSale,
@ -342,15 +345,30 @@ export async function getProduct(handle: string): Promise<Product> {
}
export async function getProducts({
query
query = '',
reverse,
sortKey
}: {
query?: string;
reverse?: boolean;
sortKey?: string;
}): Promise<Product[]> {
const res = await medusaRequest('get', `/products?q=${query}&limit=20`);
const products: Product[] = res.body.products.map((product: MedusaProduct) =>
const res = await medusaRequest('GET', `/products?q=${query}&limit=20`);
let products: Product[] = res.body.products.map((product: MedusaProduct) =>
reshapeProduct(product)
);
sortKey === 'PRICE' &&
products.sort(
(a, b) =>
parseFloat(a.priceRange.maxVariantPrice.amount) -
parseFloat(b.priceRange.maxVariantPrice.amount)
);
sortKey === 'CREATED_AT' &&
products.sort((a, b) => new Date(a.createdAt).getTime() - new Date(b.createdAt).getTime());
reverse && products.reverse();
return products;
}

View File

@ -62,6 +62,7 @@ export type Product = Partial<Omit<MedusaProduct, 'tags' | 'options' | 'variants
priceRange: {
maxVariantPrice: Money;
};
createdAt: Date;
updatedAt: Date;
descriptionHtml: string;
tags: Array<string>;