/* ── Beranda: fokus pada ARTIKEL (ramping, foto asli) ── */ function HomePage({ navigate, openArticle }) { const M = window.MQA || {}; const [articles, setArticles] = useState(M.articles || []); const [cat, setCat] = useState('Semua'); const [campaigns, setCampaigns] = useState([]); const [donStats, setDonStats] = useState(null); const [banners, setBanners] = useState([]); const [programs, setPrograms] = useState(M.programs || []); const [kegiatan, setKegiatan] = useState(M.kegiatan || []); const [buku, setBuku] = useState((M.buku || [])); useEffect(() => { api.get('articles.php?action=list').then(r => { if (r.ok && Array.isArray(r.articles) && r.articles.length) setArticles(r.articles); }); api.get('donations.php?action=list_campaigns').then(r => { if (r.ok && r.campaigns) setCampaigns(r.campaigns); }); api.get('donations.php?action=public_stats').then(r => { if (r.ok) setDonStats(r); }); api.get('content.php?action=get_section§ion=banners').then(r => { if (r.ok && r.data && Array.isArray(r.data.items)) setBanners(r.data.items); }); api.get('content.php?action=get_section§ion=programs').then(r => { if (r.ok && r.data && Array.isArray(r.data.items) && r.data.items.length) setPrograms(r.data.items); }); api.get('content.php?action=get_section§ion=kegiatan').then(r => { if (r.ok && r.data && Array.isArray(r.data.items) && r.data.items.length) setKegiatan(r.data.items); }); api.get('content.php?action=get_section§ion=buku').then(r => { if (r.ok && r.data && Array.isArray(r.data.items) && r.data.items.length) setBuku(r.data.items); }); }, []); const cats = ['Semua', ...new Set([...Object.keys(window.CATS), ...articles.map(a => a.category).filter(Boolean)])]; const featured = articles[0]; const recent = articles.slice(0, 4); const filtered = cat === 'Semua' ? articles : articles.filter(a => a.category === cat); // Paling banyak dibaca (berdasar jumlah views, fallback urutan asli) const popular = [...articles].sort((a, b) => (b.views || 0) - (a.views || 0)).slice(0, 5); // Program donasi aktif untuk ditonjolkan di beranda (mini-dashboard) const activeCampaigns = campaigns .filter(c => !(c.urgensi === 'selesai' || c.status === 'arsip' || c.status === 'selesai')) .slice(0, 3); // ── Slide banner: pakai banner dari dashboard bila ada, jika tidak auto dari konten ── const featuredPrograms = programs.filter(p => p.featured).slice(0, 3); const featuredKegiatan = kegiatan.filter(k => k.featured).slice(0, 3); const prog = (M.programs || [])[0]; const keg = (M.kegiatan || [])[0]; const SCRIM = { '#1F6B47': ['rgba(15,61,39,.86)', 'rgba(15,61,39,.35)'], '#1B2F6E': ['rgba(14,26,69,.86)', 'rgba(14,26,69,.4)'], '#C26F12': ['rgba(150,90,15,.85)', 'rgba(150,90,15,.4)'], '#8B5A2B': ['rgba(90,56,24,.84)', 'rgba(90,56,24,.38)'] }; let slides = []; // 1) Banner kustom dari menu "Banner Beranda" banners.forEach(b => { const sc = SCRIM[b.accent] || SCRIM['#1B2F6E']; slides.push({ tag: b.tag || '', image: b.image_url, overlay: sc[0], overlay2: sc[1], accent: b.accent || '#1B2F6E', title: b.title, subtitle: b.subtitle, cta: b.cta_label || 'Selengkapnya', onClick: () => navigate(b.cta_target || 'articles') }); }); // 2) Item yang ditandai "Jadikan Banner" (banner_home) dari konten articles.filter(a => a.banner_home).forEach(a => { const na = normArticle(a); slides.push({ tag: 'Artikel', image: a.cover_url, overlay: SCRIM['#1F6B47'][0], overlay2: SCRIM['#1F6B47'][1], accent: '#1F6B47', title: a.title, subtitle: a.excerpt, cta: 'Baca Selengkapnya', onClick: () => openArticle(a) }); }); programs.filter(p => p.banner_home).forEach(p => slides.push({ tag: 'Program', image: p.banner_url || 'img/grup-besar.jpg', overlay: SCRIM['#1B2F6E'][0], overlay2: SCRIM['#1B2F6E'][1], accent: '#1B2F6E', title: p.name, subtitle: p.desc, cta: 'Daftar Sekarang', onClick: () => navigate('register') })); kegiatan.filter(k => k.banner_home).forEach(k => slides.push({ tag: 'Kegiatan', image: k.img_url || 'img/grup-santri.jpg', overlay: SCRIM['#8B5A2B'][0], overlay2: SCRIM['#8B5A2B'][1], accent: '#8B5A2B', title: k.title, subtitle: k.desc, cta: 'Lihat Kegiatan', onClick: () => navigate('kegiatan') })); campaigns.filter(c => c.banner_home).forEach(c => slides.push({ tag: 'Donasi', image: c.cover_url || c.image_url || 'img/gedung.jpg', overlay: SCRIM['#C26F12'][0], overlay2: SCRIM['#C26F12'][1], accent: '#C26F12', title: c.title, subtitle: c.deskripsi || c.description, cta: 'Donasi Sekarang', onClick: () => { window.__openDonasiForm = c; navigate('donasi'); } })); buku.filter(b => b.banner_home).forEach(b => slides.push({ tag: 'Toko Buku', image: b.cover_url, overlay: SCRIM['#1B2F6E'][0], overlay2: SCRIM['#1B2F6E'][1], accent: '#1B2F6E', title: b.title, subtitle: b.desc, cta: 'Lihat Buku', onClick: () => { window.__openBuku = b; navigate('toko'); } })); // 3) Fallback otomatis bila admin belum menandai apa pun if (slides.length === 0) { if (featured) slides.push({ tag: 'Artikel Pilihan', image: featured.cover_url, overlay: 'rgba(15,61,39,.86)', overlay2: 'rgba(15,61,39,.35)', accent: '#1F6B47', title: featured.title, subtitle: featured.excerpt, cta: 'Baca Selengkapnya', onClick: () => openArticle(featured) }); if (prog) slides.push({ tag: 'Program', image: 'img/grup-besar.jpg', overlay: 'rgba(14,26,69,.86)', overlay2: 'rgba(14,26,69,.4)', accent: '#1B2F6E', title: prog.name, subtitle: prog.desc, cta: 'Daftar Sekarang', onClick: () => navigate('register') }); if (keg) slides.push({ tag: 'Kegiatan', image: 'img/grup-santri.jpg', overlay: 'rgba(90,56,24,.84)', overlay2: 'rgba(90,56,24,.38)', accent: '#8B5A2B', title: keg.title, subtitle: keg.desc, cta: 'Lihat Kegiatan', onClick: () => navigate('kegiatan') }); slides.push({ tag: 'Donasi', image: 'img/gedung.jpg', overlay: 'rgba(150,90,15,.85)', overlay2: 'rgba(150,90,15,.4)', accent: '#C26F12', title: 'Wujudkan Amal Jariyah Bersama Kami', subtitle: 'Dukung pendidikan santri yatim & dhuafa melalui sedekah dan wakaf Anda.', cta: 'Donasi Sekarang', onClick: () => { window.__openDonasiForm = true; navigate('donasi'); } }); } return (
Bacaan yang paling sering dibuka oleh pengunjung.
{p.desc}
{p.schedule &&{k.desc}