// Catálogo visual — hojear el PDF real del catálogo L'Bel C07, con chips de productos
// de la página para agregar al pedido directo desde la imagen.
function CatalogoViewerScreen({ draft, onAddProduct, onClose, onReviewOrder }) {
const T = window.T;
const { Icon, ProductTile } = window;
const TOTAL = 21;
const [idx, setIdx] = React.useState(() => {
try { return parseInt(localStorage.getItem('inova-cat-page') || '1'); } catch { return 1; }
});
const [added, setAdded] = React.useState({});
const scrollRef = React.useRef(null);
React.useEffect(() => {
try { localStorage.setItem('inova-cat-page', String(idx)); } catch {}
// scroll to top when page changes
if (scrollRef.current) scrollRef.current.scrollTop = 0;
}, [idx]);
// Products visible on THIS spread
const pageProducts = React.useMemo(() => {
const map = window.LBEL_C07_PAGE_MAP || {};
const codes = Object.keys(map).filter(c => map[c] === idx);
return codes
.map(c => window.CATALOGO_DATA.find(p => p.codigo === c))
.filter(Boolean);
}, [idx]);
const draftCount = draft.reduce((s, p) => s + p.cantidad, 0);
const draftTotal = draft.reduce((s, p) => s + p.precio * p.cantidad, 0);
const handlePedir = (p) => {
onAddProduct({
id: Date.now() + Math.random(), codigo: p.codigo, catalogo: p.catalogo,
nombre: p.nombre, descripcion: p.descripcion,
precio: p.precio, cantidad: 1, empaque: p.tipo, tono: p.tono,
imagen: p.imagen,
});
setAdded(prev => ({ ...prev, [p.codigo]: (prev[p.codigo] || 0) + 1 }));
};
const go = (delta) => setIdx(i => Math.max(1, Math.min(TOTAL, i + delta)));
// Soft paper background — less morgue, more boutique
const bg = '#1a1618';
return (
{/* Top bar */}
L'Bel · C07 / 2026
Página {idx} / {TOTAL}
{/* Scrollable content: image then chips, stacked naturally */}
0 ? 100 : 24,
}}>
{/* Full-width spread */}
.padStart(2,)
{/* Arrows overlaid on image */}
{idx > 1 && (
)}
{idx < TOTAL && (
)}
{/* Products section — directly below, visually linked to page */}
{pageProducts.length > 0 ? (
En esta página
{pageProducts.length} producto{pageProducts.length === 1 ? '' : 's'}
{pageProducts.map(p => {
const qty = added[p.codigo] || 0;
const priceStr = '$' + p.precio.toFixed(p.precio % 1 === 0 ? 0 : 1);
return (
{p.codigo}
{!p.precioReal && (
est.
)}
{p.nombre}
{priceStr}
);
})}
{/* Flip to next page affordance */}
{idx < TOTAL && (
)}
) : (
Portada — sin productos para pedir en esta página.
{idx < TOTAL && (
)}
)}
{/* Floating cart bar */}
{draftCount > 0 && (
{draftCount}
En el pedido
${draftTotal.toFixed(2)}
)}
);
}
function imgArrow(side) {
return {
position: 'absolute', top: '50%', transform: 'translateY(-50%)',
[side]: 8, width: 40, height: 40, borderRadius: 999,
background: 'rgba(0,0,0,0.45)', backdropFilter: 'blur(12px)',
border: '1px solid rgba(255,255,255,0.25)',
display: 'flex', alignItems: 'center', justifyContent: 'center',
cursor: 'pointer', zIndex: 2,
};
}
window.CatalogoViewerScreen = CatalogoViewerScreen;