/* ============================================================
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 (
{/* 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)=>(- {i+1}{s}
))}
)}
{tab==='ing' && item.ingredients && (
{item.ingredients.map(n=>(
))}
)}
{tab==='reviews' &&
}
{/* What to expect */}
{item.expect && (
{item.expect.map((e,i)=>(
))}
)}
{/* Cross-sell */}
{cross && (
)}
);
}
function ReviewsBlock({ item }){
return (
{item.rating}
{item.reviews} ulasan
{REVIEWS.map((r,i)=>(
))}
);
}
window.ProductPage = ProductPage;