/* ============================================================ FLORÍADE — Carrinho (contexto + gaveta) ============================================================ */ const { createContext, useContext, useState, useEffect, useCallback } = React; const CartCtx = createContext(null); const useCart = () => useContext(CartCtx); function CartProvider({ children }){ const [items, setItems] = useState(()=>{ try{ return JSON.parse(localStorage.getItem("fl-cart")||"[]"); }catch{ return []; } }); const [open, setOpen] = useState(false); const [pulse, setPulse] = useState(0); useEffect(()=>{ localStorage.setItem("fl-cart", JSON.stringify(items)); }, [items]); const add = useCallback((id, qty=1)=>{ setItems(prev=>{ const f = prev.find(i=>i.id===id); if(f) return prev.map(i=>i.id===id?{...i,qty:i.qty+qty}:i); return [...prev,{id,qty}]; }); setPulse(p=>p+1); },[]); const setQty = useCallback((id,qty)=>{ setItems(prev=> qty<=0 ? prev.filter(i=>i.id!==id) : prev.map(i=>i.id===id?{...i,qty}:i)); },[]); const remove = useCallback((id)=> setItems(prev=>prev.filter(i=>i.id!==id)),[]); const clear = useCallback(()=> setItems([]),[]); const count = items.reduce((s,i)=>s+i.qty,0); const detailed = items.map(i=>({ ...i, p: PRODUCTS.find(p=>p.id===i.id) })).filter(i=>i.p); const total = detailed.reduce((s,i)=>s+i.p.price*i.qty,0); const value = { items, detailed, add, setQty, remove, clear, count, total, open, setOpen, pulse }; return {children}; } function CartDrawer({ onGoProduct }){ const { open, setOpen, detailed, setQty, remove, total, count, clear } = useCart(); useEffect(()=>{ const onKey = e => { if(e.key==="Escape") setOpen(false); }; window.addEventListener("keydown", onKey); return ()=> window.removeEventListener("keydown", onKey); },[setOpen]); return (
setOpen(false)}>
); } Object.assign(window, { CartProvider, useCart, CartDrawer });