Merge fix/carrito-thumbnail-real into main
Build and Push Frontend / Escaneo de Secretos (Gitleaks) (push) Successful in 21s
Build and Push Frontend / Construir y Subir Imagen (push) Successful in 11m47s

This commit is contained in:
devops committed 2026-08-29 03:24:11 +00:00
commit f124ae0bbd
1 file changed
+17 -8
@@ -61,6 +61,7 @@ type MedusaLineItem = {
thumbnail?: string | null; thumbnail?: string | null;
quantity: number; quantity: number;
unit_price?: number | null; unit_price?: number | null;
product?: { images?: Array<{ url?: string | null }> | null } | null;
}; };
type MedusaCart = { type MedusaCart = {
@@ -82,10 +83,13 @@ function mapCart(cart: MedusaCart): CartSummary {
product: { product: {
id: item.product_id, id: item.product_id,
name: item.product_title || item.title || "Producto", name: item.product_title || item.title || "Producto",
// La linea del carrito no trae el arreglo de imagenes del producto, // item.thumbnail viene null en la practica para todo el catalogo
// solo este campo (a veces null) -- mismo fallback final que ya usa // real (confirmado contra /store/products: product.thumbnail
// mapProduct() en medusa.ts. // tambien es null ahi, incluso con fotos reales cargadas) -- el
thumbnail: item.thumbnail || "/images/brand/logo-ari.png", // 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, price: typeof item.unit_price === "number" ? item.unit_price : null,
currency: cart.currency_code, currency: cart.currency_code,
}, },
@@ -117,6 +121,11 @@ async function medusaCartFetch(
return response.json(); 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> { export async function createCart(): Promise<CartSummary> {
const data = await medusaCartFetch("/store/carts", { const data = await medusaCartFetch("/store/carts", {
method: "POST", method: "POST",
@@ -126,7 +135,7 @@ export async function createCart(): Promise<CartSummary> {
} }
export async function getCart(cartId: string): 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); return mapCart(data.cart as MedusaCart);
} }
@@ -135,7 +144,7 @@ export async function addLineItem(
variantId: string, variantId: string,
quantity: number, quantity: number,
): Promise<CartSummary> { ): Promise<CartSummary> {
const data = await medusaCartFetch(`/store/carts/${cartId}/line-items`, { const data = await medusaCartFetch(`/store/carts/${cartId}/line-items?${ITEMS_FIELDS}`, {
method: "POST", method: "POST",
body: { variant_id: variantId, quantity }, body: { variant_id: variantId, quantity },
}); });
@@ -147,7 +156,7 @@ export async function updateLineItemQuantity(
lineItemId: string, lineItemId: string,
quantity: number, quantity: number,
): Promise<CartSummary> { ): 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", method: "POST",
body: { quantity }, body: { quantity },
}); });
@@ -155,7 +164,7 @@ export async function updateLineItemQuantity(
} }
export async function removeLineItem(cartId: string, lineItemId: string): Promise<CartSummary> { 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", method: "DELETE",
}); });
// Forma distinta a las demas: el carrito actualizado viene en // Forma distinta a las demas: el carrito actualizado viene en