diff --git a/lib/medusa/index.ts b/lib/medusa/index.ts index 6293a181b..a093ebe1f 100644 --- a/lib/medusa/index.ts +++ b/lib/medusa/index.ts @@ -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 { } export async function getProducts({ - query + query = '', + reverse, + sortKey }: { query?: string; reverse?: boolean; sortKey?: string; }): Promise { - 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; } diff --git a/lib/medusa/types.ts b/lib/medusa/types.ts index b16b0ccfc..587c36a55 100644 --- a/lib/medusa/types.ts +++ b/lib/medusa/types.ts @@ -62,6 +62,7 @@ export type Product = Partial;