/* ============================================================ GlowMerald — Product Detail ============================================================ */ const { useState:useStateP } = React; const REVIEWS = [ { name:'Anindhita P.', rating:5, date:'Mei 2026', concern:'Brightening', ba:true, text:'Sudah 6 minggu pakai dan warna kulit tampak lebih merata. Teksturnya ringan, cocok untuk pagi sebelum makeup.' }, { name:'Rara S.', rating:5, date:'Apr 2026', concern:'Anti-Aging', ba:false, text:'Jadi bagian ritual malam saya. Kulit terasa lebih kenyal dan terawat. Packaging-nya juga terasa premium.' }, { name:'Maharani', rating:4, date:'Apr 2026', concern:'Barrier', ba:false, text:'Menenangkan untuk kulit sensitif saya. Tidak ada rasa perih sama sekali.' }, { name:'Gisela R.', rating:5, date:'Mar 2026', concern:'Hydration', ba:true, text:'Hidrasinya terasa sepanjang hari. Sekarang repeat order untuk kedua kalinya.' }, ]; function IngredientChip({ name }){ const [show,setShow] = useStateP(false); return ( setShow(true)} onMouseLeave={()=>setShow(false)} onClick={()=>setShow(s=>!s)}> {name} {show && INGREDIENTS[name] && ( {INGREDIENTS[name]} )} ); } function RatingBars({ rating, reviews }){ const dist = [0.72,0.2,0.05,0.02,0.01]; // 5→1 star share return (
{[5,4,3,2,1].map((s,i)=>(
{s}★ {Math.round(dist[i]*100)}%
))}
); } function ProductPage(){ const { param, addToCart, navigate, wishlist, toggleWishlist } = useApp(); const item = findItem(param) || PRODUCTS[0]; const [vi,setVi] = useStateP(0); const [qty,setQty] = useStateP(1); const [tab,setTab] = useStateP('desc'); const [activeImg,setActiveImg] = useStateP(0); const [added,setAdded] = useStateP(false); const wished = wishlist.includes(item.id); const isBundle = item.type==='Bundle'; const price = (item.variants&&item.variants[vi]) ? item.variants[vi].price : item.price; const thumbs = ['main','texture','ingredient','packaging']; const cross = item.id==='serum'?findItem('mask'):findItem('serum'); const doAdd=()=>{ addToCart(item.id, qty, vi); setAdded(true); setTimeout(()=>setAdded(false),1500); }; const tabs = isBundle ? [['desc','Deskripsi'],['howto','Cara Pakai'],['reviews','Ulasan']] : [['desc','Deskripsi'],['howto','Cara Pakai'],['ing','Ingredients'],['reviews','Ulasan']]; return (
navigate('home')}>Home navigate('shop')}>Shop {item.name}
{/* Gallery */}
{activeImg===0 ? : } {item.bestSeller && Best Seller}
{thumbs.map((t,i)=>( ))}
{/* Buy box */}
{item.type}

{item.name}

{item.tagline||item.sub}

{item.rating} · {item.reviews} ulasan{item.sold?` · ${item.sold} terjual`:''}
{formatRp(price*qty)} {isBundle && {formatRp(item.was*qty)}}
{!isBundle &&

{item.size}

} {/* variant selector */} {item.variants && item.variants.length>1 && (
Pilihan
{item.variants.map((v,i)=>( ))}
)} {/* qty + actions */}
{qty}
{/* ingredient chips */} {item.ingredients && (
Bahan Aktif Utama
{item.ingredients.map(n=>)}
)} {/* BPOM */} {item.bpom && (
Terdaftar BPOM
{item.bpom}
)}
{/* Tabs */}
{tabs.map(([k,l])=>( ))}
{tab==='desc' && (

{item.desc}

{item.benefits && (
{item.benefits.map((b,i)=>(
{b}
))}
)}
)} {tab==='howto' && (
    {item.howto.map((s,i)=>(
  1. {i+1}{s}
  2. ))}
)} {tab==='ing' && item.ingredients && (
{item.ingredients.map(n=>(
{n}

{INGREDIENTS[n]}

))}
)} {tab==='reviews' && }
{/* What to expect */} {item.expect && (
{item.expect.map((e,i)=>(
{i}
{e.range}

{e.text}

))}
)} {/* Cross-sell */} {cross && (
)}
); } function ReviewsBlock({ item }){ return (
{item.rating}
{item.reviews} ulasan
{REVIEWS.map((r,i)=>(
{r.name}
{r.date}
{r.concern}

{r.text}

{r.ba && (
)}
))}
); } window.ProductPage = ProductPage;