/* Admin → Marketplace Manager: approve vendors, run fundraisers.
Feeds the parent app's Marketplace screen. */
function MarketplaceManagerScreen() {
const [pending, setPending] = React.useState([
{ id:1, n:'Bright Minds Tutoring', cat:'Tutoring', sub:'1-on-1 reading & math · submitted 2d ago', icon:'graduation-cap', tint:'var(--blue-100)', ic:'var(--blue-500)' },
{ id:2, n:'Katy Dance Academy', cat:'Enrichment', sub:'Ballet & hip-hop · submitted 3d ago', icon:'music', tint:'var(--danger-100)', ic:'var(--danger-500)' },
{ id:3, n:'Junior Robotics Lab', cat:'After-School', sub:'STEM club · submitted 5d ago', icon:'cpu', tint:'var(--info-100)', ic:'var(--info-500)' },
]);
const [fundraisers, setFundraisers] = React.useState([
{ id:1, n:'New Library Books Drive', raised:3240, goal:5000, days:8 },
{ id:2, n:'8th Grade DC Trip', raised:11800, goal:18000, days:24 },
]);
const approved = [
{ n:'Mathnasium of Katy', cat:'Tutoring', price:'$35/session', rating:'4.9', enroll:42 },
{ n:'Katy Youth Soccer League', cat:'Sports', price:'$120/season', rating:'4.7', enroll:88 },
{ n:'Young Coders Club', cat:'After-School', price:'$80/month', rating:'4.8', enroll:31 },
{ n:'Reading Buddies', cat:'Tutoring', price:'Free', rating:'5.0', enroll:64 },
];
const decide = (v, ok) => {
setPending(ps => ps.filter(x => x.id !== v.id));
jlToast(v.n + (ok ? ' approved & published' : ' declined'), { icon: ok?'check-check':'x', color: ok?'#1F9D57':'#E5484D' });
};
const money = (n) => '$' + n.toLocaleString();
return (
{/* stat tiles */}
{/* pending approvals */}
{pending.length} waiting}>
{pending.length === 0 ? (
All caught up — no vendors awaiting review.
) : pending.map((v,i) => (
))}
{/* fundraisers */}
jlToast('New fundraiser form opened', { icon:'plus' })} style={{ display:'inline-flex', alignItems:'center', gap:5, fontSize:12.5, fontWeight:700, color:'var(--blue-500)', cursor:'pointer' }}>New}>
{fundraisers.map((f,i) => {
const pct = Math.round((f.raised/f.goal)*100);
return (
{f.n}
{f.days} days left
{money(f.raised)} / {money(f.goal)}
{pct}%
);
})}
{/* approved listings */}
jlToast('Add a new listing', { icon:'plus' })} style={{ fontSize:12.5, fontWeight:700, color:'var(--blue-500)', cursor:'pointer' }}>Add Listing} pad={false}>
ProgramCategoryPriceRatingEnrolled
{approved.map((a,i) => (
jlToast('Opening '+a.n, { icon:'store' })} style={{ display:'grid', gridTemplateColumns:'2fr 1fr 1fr .8fr 1fr', alignItems:'center', padding:'12px 18px', borderTop:'1px solid var(--gray-100)', fontSize:13.5, cursor:'pointer' }}>
{a.n}
{a.cat}
{a.price}
{a.rating}
{a.enroll}
))}
);
}
Object.assign(window, { MarketplaceManagerScreen });