/* global React, Heading, WAIcon, waLink, OfficialSeal,
cartGet, cartRemove, cartSetQty, cartClear, orderCreate, newFolio,
priceNum, money, useStore, PAYMENT_HOLDER, PAYMENT_METHODS, BRAND */
const { useState: useStateCt } = React;
/* ---------- Resumen de importe ---------- */
function cartTotals(items) {
const subtotal = items.reduce((n, i) => n + priceNum(i.price) * (i.qty || 1), 0);
const count = items.reduce((n, i) => n + (i.qty || 1), 0);
return { subtotal, count };
}
/* ---------- Vista: carrito ---------- */
function CartList({ items, onContinue }) {
const { subtotal, count } = cartTotals(items);
return (
{items.map((i) => (
{i.code}
{i.line} · {i.cat}
{i.price} MXN c/u
{i.qty || 1}
{money(priceNum(i.price) * (i.qty || 1))}
))}
);
}
/* ---------- Vista: pago (datos + comprobante) ---------- */
function Checkout({ order, onClose }) {
const waMsg =
"Hola, generé el pedido " + order.folio + " en la página oficial de Rancho La Vega.\n\n" +
order.items.map((i) => "• " + (i.qty || 1) + "× " + i.code + " (" + i.line + ") — " + i.price).join("\n") +
"\n\nSubtotal: " + money(order.subtotal) + " MXN.\nYa realicé el pago / transferencia y adjunto mi comprobante.";
return (
Pedido generado
{order.folio}
{order.date}
Datos de pago oficiales
Titular: {PAYMENT_HOLDER}
{PAYMENT_METHODS.map((m) => (
{m.bank}
{m.kind}
{m.extra && (
)}
))}
Realiza el pago únicamente a estos datos oficiales. Rancho La Vega no se hace responsable por depósitos a cuentas no publicadas aquí.
¿Cómo continúo?
- Realiza el pago por transferencia o depósito a una de las cuentas.
- Guarda tu comprobante (captura o foto del recibo).
- Envíanos el comprobante por WhatsApp junto con tu folio.
- Confirmamos tu pago y coordinamos la entrega o envío.
Guarda tu folio {order.folio} para dar seguimiento a tu pedido.
);
}
function copyNum(v) {
const clean = v.replace(/\s/g, "");
if (navigator.clipboard) navigator.clipboard.writeText(clean);
}
function CopyIco() {
return (
);
}
/* ---------- Página de carrito ---------- */
function Cart() {
useStore();
const [order, setOrder] = useStateCt(null);
const items = cartGet();
const generate = () => {
const { subtotal } = cartTotals(items);
const o = {
folio: newFolio(),
date: new Date().toLocaleString("es-MX", { dateStyle: "long", timeStyle: "short" }),
items: items.map((i) => ({ ...i })),
subtotal,
status: "Pendiente de pago",
};
orderCreate(o);
setOrder(o);
cartClear();
window.scrollTo({ top: 0, behavior: "smooth" });
};
return (
{order ? (
{ setOrder(null); location.href = "ejemplares.html"; }} />
) : items.length === 0 ? (
Tu carrito está vacío
Explora el catálogo y añade los ejemplares disponibles que te interesen.
Ver ejemplares
) : (
)}
);
}
function CartBig() {
return (
);
}
Object.assign(window, { Cart });