import React, { useEffect, useState } from 'react'; import { AuthProvider, AuthGuard, useAuth } from './AdminAuth'; import AdminLayout from './AdminLayout'; import { BarChart, Bar, LineChart, Line, XAxis, YAxis, Tooltip, ResponsiveContainer } from 'recharts'; interface Stats { total_sneakers: number; total_products: number; active_feeds: number; clicks_today: number; revenue_month: number; last_sync_at: string | null; } function StatCard({ label, value, icon, sub }: { label: string; value: string | number; icon: string; sub?: string }) { return (
{label} {icon}
{value}
{sub &&
{sub}
}
); } function DashboardContent() { const { token } = useAuth(); const [stats, setStats] = useState(null); const [timeseries, setTimeseries] = useState([]); const [loading, setLoading] = useState(true); useEffect(() => { const headers = { Authorization: `Bearer ${token}` }; Promise.all([ fetch('/api/admin/stats', { headers }).then(r => r.json()), fetch('/api/admin/analytics?type=timeseries&days=30', { headers }).then(r => r.json()), ]).then(([s, ts]) => { setStats(s); setTimeseries(ts.data || []); }).catch(() => {}).finally(() => setLoading(false)); }, [token]); if (loading) { return (
Laden...
); } const formatSync = (iso: string | null) => { if (!iso) return 'Nooit'; const d = new Date(iso); const mins = Math.floor((Date.now() - d.getTime()) / 60000); if (mins < 1) return 'Zojuist'; if (mins < 60) return `${mins} min geleden`; if (mins < 1440) return `${Math.floor(mins / 60)} uur geleden`; return `${Math.floor(mins / 1440)} dagen geleden`; }; return (
{timeseries.length === 0 ? (
📊
Nog geen analytics data
Data verschijnt hier zodra er clicks en conversies binnenkomen
) : (

Clicks (30 dagen)

v.slice(5)} />

Revenue (30 dagen)

v.slice(5)} />
)}
); } export default function Dashboard() { return ( ); }