function DashboardView({ onNavigate }) { const SAMPLE_STATS = [ { label:'ค่าโฆษณา', en:'Spend', value:'฿10,950', trend:'+12%', up:true, Icon:IconCoins }, { label:'รายได้', en:'Revenue', value:'฿31,200', trend:'+24%', up:true, Icon:IconActivity }, { label:'ROAS เฉลี่ย', en:'Avg. ROAS', value:'2.85x', trend:'+0.4', up:true, Icon:IconTarget }, { label:'Conversions', en:'Conversions', value:'142', trend:'+18%', up:true, Icon:IconBolt }, ]; const SAMPLE_PERF = [ { name:'จ.', roas:2.1, spend:1200, revenue:2520 }, { name:'อ.', roas:2.4, spend:1350, revenue:3240 }, { name:'พ.', roas:2.2, spend:1100, revenue:2420 }, { name:'พฤ.', roas:2.8, spend:1500, revenue:4200 }, { name:'ศ.', roas:3.1, spend:1800, revenue:5580 }, { name:'ส.', roas:3.5, spend:2100, revenue:7350 }, { name:'อา.', roas:3.2, spend:1900, revenue:6080 }, ]; const SAMPLE_PLACEMENT = [ { name:'Mobile Feed', value:65, color:'var(--accent)' }, { name:'Desktop Feed', value:15, color:'var(--ink-3)' }, { name:'Instagram', value:12, color:'var(--accent-strong)' }, { name:'Messenger', value:8, color:'var(--ink-4)' }, ]; const [stats, setStats] = useState(null); const [perfData, setPerfData] = useState([]); const [placement, setPlacement] = useState([]); const [insights, setInsights] = useState([]); const [isSample, setIsSample] = useState(false); const [isLive, setIsLive] = useState(false); const [loading, setLoading] = useState(false); const [error, setError] = useState(null); // Auto-fetch from Meta API on mount if settings exist React.useEffect(() => { if (hasMetaKey()) { fetchLiveData(); } }, []); const fetchLiveData = async () => { setLoading(true); setError(null); try { const result = await fetchMetaDashboard(); if (result.perfData.length > 0) { setPerfData(result.perfData); setPlacement(result.placementData); const totalConversions = Math.round(result.totalRevenue / 220); // estimated setStats([ { label:'ค่าโฆษณา', en:'Spend', value:`฿${Math.round(result.totalSpend).toLocaleString()}`, trend:'LIVE', up:true, Icon:IconCoins }, { label:'รายได้', en:'Revenue', value:`฿${Math.round(result.totalRevenue).toLocaleString()}`, trend:'LIVE', up:true, Icon:IconActivity }, { label:'ROAS เฉลี่ย', en:'Avg. ROAS', value:`${result.avgRoas.toFixed(2)}x`, trend:'LIVE', up:result.avgRoas >= 2, Icon:IconTarget }, { label:'Conversions', en:'Conversions', value:`${totalConversions}`, trend:'LIVE', up:true, Icon:IconBolt }, ]); setInsights(result.insights || []); setIsLive(true); setIsSample(false); } else { // API connected but no data in last 7 days setError('เชื่อมต่อ Meta API สำเร็จ แต่ยังไม่มีข้อมูลในรอบ 7 วัน'); } } catch (e) { setError(e.message); } setLoading(false); }; const hasData = perfData.length > 0; const metaConfigured = hasMetaKey(); const loadSample = () => { setStats(SAMPLE_STATS); setPerfData(SAMPLE_PERF); setPlacement(SAMPLE_PLACEMENT); setInsights([]); setIsSample(true); setIsLive(false); }; const clearSample = () => { setStats(null); setPerfData([]); setPlacement([]); setInsights([]); setIsSample(false); setIsLive(false); }; return (
กรุณารอสักครู่