fix(ecommerce): carrito muestra la foto real del producto
Reportado en produccion: el carrito mostraba el logo generico de ARI en vez de la foto del producto. Verificado en vivo: item.thumbnail viene null en la respuesta de Medusa para todo el catalogo real (confirmado tambien contra /store/products directamente -- el campo thumbnail del producto es null en la fuente, no solo omitido en la respuesta del carrito). El catalogo ya resuelve esto cayendo a images[0] (mapProduct() en medusa.ts); la linea del carrito necesita pedir esa relacion explicita via fields=*items.product.images (no viene por defecto) y aplicar el mismo fallback.
This commit is contained in:
1 parent
d28ee4a49d
commit
b8ce9ded87
1 file changed
+17
-8
@@ -61,6 +61,7 @@ type MedusaLineItem = {
|
||||
thumbnail?: string | null;
|
||||
quantity: number;
|
||||
unit_price?: number | null;
|
||||
product?: { images?: Array<{ url?: string | null }> | null } | null;
|
||||
};
|
||||
|
||||
type MedusaCart = {
|
||||
@@ -82,10 +83,13 @@ function mapCart(cart: MedusaCart): CartSummary {
|
||||
product: {
|
||||
id: item.product_id,
|
||||
name: item.product_title || item.title || "Producto",
|
||||
// La linea del carrito no trae el arreglo de imagenes del producto,
|
||||
// solo este campo (a veces null) -- mismo fallback final que ya usa
|
||||
// mapProduct() en medusa.ts.
|
||||
thumbnail: item.thumbnail || "/images/brand/logo-ari.png",
|
||||
// item.thumbnail viene null en la practica para todo el catalogo
|
||||
// real (confirmado contra /store/products: product.thumbnail
|
||||
// tambien es null ahi, incluso con fotos reales cargadas) -- el
|
||||
// catalogo ya resuelve esto cayendo a images[0] (mapProduct() en
|
||||
// medusa.ts), asi que la linea del carrito pide esa misma relacion
|
||||
// explicita (no viene por defecto) y aplica el mismo fallback.
|
||||
thumbnail: item.thumbnail || item.product?.images?.[0]?.url || "/images/brand/logo-ari.png",
|
||||
price: typeof item.unit_price === "number" ? item.unit_price : null,
|
||||
currency: cart.currency_code,
|
||||
},
|
||||
@@ -117,6 +121,11 @@ async function medusaCartFetch(
|
||||
return response.json();
|
||||
}
|
||||
|
||||
// *items.product.images no viene por defecto (verificado en vivo) y es
|
||||
// lo unico que necesitamos ademas del set por defecto -- *items ya trae
|
||||
// unit_price/product_title/variant_id/quantity sin pedirlos aparte.
|
||||
const ITEMS_FIELDS = "fields=*items,*items.product.images";
|
||||
|
||||
export async function createCart(): Promise<CartSummary> {
|
||||
const data = await medusaCartFetch("/store/carts", {
|
||||
method: "POST",
|
||||
@@ -126,7 +135,7 @@ export async function createCart(): Promise<CartSummary> {
|
||||
}
|
||||
|
||||
export async function getCart(cartId: string): Promise<CartSummary> {
|
||||
const data = await medusaCartFetch(`/store/carts/${cartId}`);
|
||||
const data = await medusaCartFetch(`/store/carts/${cartId}?${ITEMS_FIELDS}`);
|
||||
return mapCart(data.cart as MedusaCart);
|
||||
}
|
||||
|
||||
@@ -135,7 +144,7 @@ export async function addLineItem(
|
||||
variantId: string,
|
||||
quantity: number,
|
||||
): Promise<CartSummary> {
|
||||
const data = await medusaCartFetch(`/store/carts/${cartId}/line-items`, {
|
||||
const data = await medusaCartFetch(`/store/carts/${cartId}/line-items?${ITEMS_FIELDS}`, {
|
||||
method: "POST",
|
||||
body: { variant_id: variantId, quantity },
|
||||
});
|
||||
@@ -147,7 +156,7 @@ export async function updateLineItemQuantity(
|
||||
lineItemId: string,
|
||||
quantity: number,
|
||||
): Promise<CartSummary> {
|
||||
const data = await medusaCartFetch(`/store/carts/${cartId}/line-items/${lineItemId}`, {
|
||||
const data = await medusaCartFetch(`/store/carts/${cartId}/line-items/${lineItemId}?${ITEMS_FIELDS}`, {
|
||||
method: "POST",
|
||||
body: { quantity },
|
||||
});
|
||||
@@ -155,7 +164,7 @@ export async function updateLineItemQuantity(
|
||||
}
|
||||
|
||||
export async function removeLineItem(cartId: string, lineItemId: string): Promise<CartSummary> {
|
||||
const data = await medusaCartFetch(`/store/carts/${cartId}/line-items/${lineItemId}`, {
|
||||
const data = await medusaCartFetch(`/store/carts/${cartId}/line-items/${lineItemId}?${ITEMS_FIELDS}`, {
|
||||
method: "DELETE",
|
||||
});
|
||||
// Forma distinta a las demas: el carrito actualizado viene en
|
||||
|
||||
Reference in new issue
Block a user