/* ============================================================ GlowMerald — Shop (filter, sort, grid) ============================================================ */ const { useState:useStateS, useEffect:useEffectS } = React; function ShopPage(){ const [types,setTypes] = useStateS([]); const [concerns,setConcerns] = useStateS([]); const [maxPrice,setMaxPrice] = useStateS(1300000); const [sort,setSort] = useStateS('best'); const [loading,setLoading] = useStateS(true); const [filterOpen,setFilterOpen] = useStateS(false); useEffectS(()=>{ setLoading(true); const t=setTimeout(()=>setLoading(false),650); return ()=>clearTimeout(t); },[types,concerns,maxPrice,sort]); const toggle = (arr,set,v)=> set(arr.includes(v)?arr.filter(x=>x!==v):[...arr,v]); let items = ALL_ITEMS.filter(p=>{ if(types.length && !types.includes(p.type)) return false; if(p.price>maxPrice) return false; if(concerns.length && !concerns.some(c=>(p.concerns||[]).includes(c))) return false; return true; }); items = [...items].sort((a,b)=>{ if(sort==='low') return a.price-b.price; if(sort==='new') return ALL_ITEMS.indexOf(b)-ALL_ITEMS.indexOf(a); return (b.bestSeller?1:0)-(a.bestSeller?1:0) || b.rating-a.rating; }); const clearAll = ()=>{ setTypes([]); setConcerns([]); setMaxPrice(1300000); }; const activeCount = types.length+concerns.length+(maxPrice<1300000?1:0); const FilterPanel = (
Serum, masker, dan bundle — diformulasikan untuk ritual yang efisien dan terasa premium.
Tidak ada produk yang cocok dengan filter.