// 彤冠茶莊 website — Product detail const { Button: PButton, Tag: PTag, Price: PPrice, QtyStepper: PQty, ProductCard: PRelCard } = window.TongguanTeaDesignSystem_a1a7a1; function ProductPage({ t, lang, products, productId, go, addToCart }) { const p = products.find((x) => x.id === productId) || products[0]; const [active, setActive] = React.useState(0); const [qty, setQty] = React.useState(1); const [added, setAdded] = React.useState(false); React.useEffect(() => { setActive(0); setQty(1); setAdded(false); window.scrollTo(0, 0); }, [productId]); React.useEffect(() => { if (window.lucide) window.lucide.createIcons(); }); const related = products.filter((x) => x.id !== p.id).slice(0, 3); const doAdd = () => { addToCart(p.id, qty); setAdded(true); setTimeout(() => setAdded(false), 1600); }; return (
{/* gallery */}
{p.name[lang]}
{p.gallery.length > 1 && (
{p.gallery.map((g, i) => ( ))}
)}
{/* info */}
{p.eyebrow[lang]}

{p.name[lang]}

{p.tags.map((tg, i) => {tg[lang]})}

{p.desc[lang]}

{/* add row */}
{added ? t.product.added : t.product.add}
{t.product.origin} · {p.origin[lang]}
{/* specs */}
{t.product.specs}
{p.specs.map((s, i) => (
{s.k[lang]}
{s.v[lang]}
))}
{/* related */}

{t.product.related}

{related.map((r) => ( ({ label: tg[lang], tone: tg.tone }))} amount={r.price} addLabel={t.product.add} onAdd={() => addToCart(r.id)} onClick={() => go("product", r.id)} /> ))}
); } window.ProductPage = ProductPage;