function CartDrawer({ items, isOpen, onClose, onRemove, onUpdateQty, onClearCart }) { const total = items.reduce((s, i) => s + i.coffee.prices[i.gram] * i.qty, 0); const count = items.reduce((s, i) => s + i.qty, 0); const [checkoutState, setCheckoutState] = React.useState(null); // null | 'form' | 'confirmed' const [coForm, setCoForm] = React.useState({ name: '', email: '' }); const [coErr, setCoErr] = React.useState({}); const [placing, setPlacing] = React.useState(false); const [confirmedOrder, setConfirmedOrder] = React.useState(null); const session = window.UmbraDB?.getSession?.() || null; // Reset checkout state when drawer closes React.useEffect(() => { if (!isOpen) { setCheckoutState(null); setCoForm({ name:'', email:'' }); setCoErr({}); } }, [isOpen]); function placeOrder() { const errs = {}; if (!session) { if (!coForm.name.trim()) errs.name = 'Required'; if (!coForm.email.includes('@')) errs.email = 'Valid email required'; } if (Object.keys(errs).length) { setCoErr(errs); return; } setPlacing(true); setTimeout(() => { const customer = session ? { name: `${session.firstName} ${session.lastName}`, email: session.email } : { name: coForm.name, email: coForm.email }; const address = session?.address || {}; const order = window.UmbraDB?.saveOrder?.(items, customer, address); setConfirmedOrder(order); setCheckoutState('confirmed'); setPlacing(false); }, 900); } return ( <> {/* Backdrop */} {isOpen && (
)} {/* Drawer */}