El carrito de GMV Burger es un panel lateral (Documentation Index
Fetch the complete documentation index at: https://mintlify.com/giovanymevi/pedidoHAM/llms.txt
Use this file to discover all available pages before exploring further.
cart-sidebar) que convive con el menú en escritorio y se convierte en un drawer deslizante en móvil. Refleja en tiempo real los productos seleccionados, sus cantidades, el total acumulado y un botón para enviar el pedido por WhatsApp. El contenido sobrevive recargas de página gracias a localStorage.
Estado del carrito
El estadocart se inicializa con una función lazy de useState. Antes de crear un array vacío, intenta leer la clave chamosCart de localStorage para restaurar la sesión anterior del usuario:
isCartOpen controla la visibilidad del panel en pantallas móviles:
Funciones del carrito
addToCart(burger) — Añade o incrementa
Si el producto ya existe en el carrito, incrementa su cantidad. De lo contrario lo inserta con quantity: 1:
updateQuantity(id, delta) — Incrementa o decrementa con auto-eliminación
Modifica la cantidad de un ítem por id. Si la nueva cantidad llega a 0 o menos, el ítem se elimina automáticamente mediante .filter(Boolean):
removeItem(id) — Elimina por id
Elimina directamente un ítem del carrito sin importar su cantidad, usando .filter():
getTotal() — Suma de precio × cantidad
Calcula el total acumulado del carrito con .reduce(), multiplicando price × quantity por cada ítem:
getCartCount() — Suma de unidades
Retorna el número total de unidades en el carrito (no el número de productos distintos). Es el valor que se muestra en el botón flotante móvil:
Persistencia con LocalStorage
UnuseEffect escucha cada cambio en el estado cart y serializa su valor bajo la clave chamosCart:
cart — es decir, cada vez que se añade, elimina o modifica la cantidad de un producto. Gracias a la inicialización lazy del estado, el carrito se recupera automáticamente en la próxima visita sin necesidad de volver a añadir los productos.
Comportamiento en móvil
En resoluciones menores a768px el cart-sidebar se posiciona como fixed fuera de pantalla (right: -100%). Al activar isCartOpen, recibe la clase mobile-open que lo desliza hacia adentro (right: 0):
| Elemento | Comportamiento |
|---|---|
cart-overlay | Fondo oscuro semitransparente. Un clic en él llama setIsCartOpen(false) y cierra el panel. |
mobile-open | Clase CSS que transiciona right de -100% a 0 en 0.3s ease. |
mobile-cart-btn | Botón circular fijo en bottom: 20px / right: 20px. Solo se renderiza cuando getCartCount() > 0. Muestra el total de unidades como badge naranja. |
mobile-close (X) | Botón dentro del header del carrito, solo visible en móvil, cierra el panel. |