// aerOS Guest v2 — Product detail sheet + Filter sheet + Waiter call sheet. const { useState: _pr2S, useEffect: _pr2E } = React; function G2ProductSheet({ product, C, t, lang, tw, onClose, onAdd, animate }) { const [qty, setQty] = _pr2S(1); const [portion, setPortion] = _pr2S(null); const [mods, setMods] = _pr2S([]); const [note, setNote] = _pr2S(''); const [allInfo, setAllInfo] = _pr2S(false); _pr2E(() => { if (product) { setQty(1); setPortion(product.portions[0]?.id || null); setMods([]); setNote(''); setAllInfo(false); } }, [product]); if (!product) return null; const D = window.G2DATA; const name = lang === 'en' ? product.en : product.name; const desc = lang === 'en' ? product.en_desc : product.desc; const portObj = product.portions.find(p => p.id === portion); const modSum = product.mods.filter(m => mods.includes(m.id)).reduce((s, m) => s + (m.price || 0), 0); const unit = product.price + (portObj?.price || 0) + modSum; const toggleMod = id => setMods(m => m.includes(id) ? m.filter(x => x !== id) : [...m, id]); const lbl = o => lang === 'en' ? (o.en || o.label) : o.label; const optRow = (selected, isRadio, label, price, onClick) => ( ); return (
{tw.showBadge && product.badge &&
}

{name}

{tw.showPrice && {G2THEME.money(product.price, tw.currency)}}

{desc}

{/* meta row: diet + cal + prep */}
{tw.showDiet && } {product.cal != null && {Icon.flame({ size: 15, style: { color: C.muted } })}{product.cal} {t.cal}} {product.prep != null && {Icon.clock({ size: 15, style: { color: C.muted } })}{product.prep} {t.prepTime}}
{product.allergens.length > 0 && (
{t.allergens}
{product.allergens.map(a => )}
)} {product.portions.length > 0 && (
{t.size}
{product.portions.map(p => optRow(portion === p.id, true, lbl(p), p.price, () => setPortion(p.id)))}
)} {product.mods.length > 0 && (
{t.extras}
{product.mods.map(m => optRow(mods.includes(m.id), false, lbl(m), m.price, () => toggleMod(m.id)))}
)}
{t.note}