/* ============================================================ GlowMerald — Account (profile, orders, wishlist, address, loyalty) ============================================================ */ const { useState:useStateAcc } = React; const ACC_NAV = [ { k:'profile', label:'Profil', icon:'user' }, { k:'orders', label:'Pesanan Saya', icon:'shop' }, { k:'wishlist', label:'Wishlist', icon:'heart' }, { k:'address', label:'Alamat', icon:'home' }, { k:'loyalty', label:'Loyalty Points', icon:'gem' }, { k:'settings', label:'Pengaturan', icon:'spark' }, ]; const STATUS_STYLE = { 'Diproses':'st-proc', 'Dikirim':'st-ship', 'Selesai':'st-done' }; function AccountPage(){ const { param, navigate } = useApp(); const [section,setSection] = useStateAcc(param || 'profile'); return (
Akun Saya

{USER.name}

{section==='profile' && } {section==='orders' && } {section==='wishlist' && } {section==='address' && } {section==='loyalty' && } {section==='settings' && }
); } function TierBadge({ tier }){ const cls = tier==='Inner Circle'||tier==='Ambassador' ? 'tier-emerald':'tier-gold'; return {tier}; } function ProfileSection(){ return (

Profil

{USER.name}
Nama
{USER.name}
Email
{USER.email}
Telepon
{USER.phone}
Tier
{USER.tier}
); } function OrdersSection(){ const { navigate } = useApp(); const [open,setOpen] = useStateAcc(null); return (

Pesanan Saya

{ORDERS.map(o=>(
setOpen(open===o.id?null:o.id)}>
{o.id}
{o.date} · {o.items.length} item
{o.status}
{open===o.id && (
{o.items.map((it,i)=>(
{it.name}
x{it.qty}
{formatRp(it.price)}
))}
Total {formatRp(o.total)}
{o.status==='Dikirim' && }
)}
))}
); } function WishlistSection(){ const { wishlist, navigate } = useApp(); const items = wishlist.map(findItem).filter(Boolean); return (

Wishlist

{items.length===0 ?

Wishlist masih kosong.

:
{items.map(p=>)}
}
); } function AddressSection(){ const [adding,setAdding] = useStateAcc(false); return (

Alamat

{ADDRESSES.map(a=>(
{a.label} {a.def && Utama}
{a.name} · {a.phone}

{a.detail}, {a.city}, {a.prov} {a.post}

Edit{!a.def && Jadikan Utama}
))} {adding && (

Alamat Baru

)}
); } function LoyaltySection(){ const idx = TIERS.findIndex(t=>t.name===USER.tier); const next = TIERS[idx+1]; const pct = next ? Math.min(100, Math.round((USER.points-TIERS[idx].min)/(next.min-TIERS[idx].min)*100)) : 100; const toNext = next ? next.min-USER.points : 0; return (

Loyalty Points

Saldo Poin
{USER.points.toLocaleString('id-ID')} poin
{next && (
{USER.tier}{next.name}

{toNext.toLocaleString('id-ID')} poin lagi menuju {next.name}.

)}

Tukar Poin

{[['Voucher Rp 50.000','500 poin'],['Free Sachet Mask','350 poin'],['Free Shipping','200 poin'],['Voucher Rp 150.000','1.400 poin']].map(([t,p],i)=>(
{t}
{p}
))}
); } function SettingsSection(){ const Toggle = ({ label, on })=>{ const [v,setV]=useStateAcc(on); return (
{label}
); }; return (

Pengaturan

); } window.AccountPage = AccountPage;