// 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 */}
{`Página {/* 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;