import React, { useState, useEffect } from 'react'; import { AuthProvider, AuthGuard, useAuth } from './AdminAuth'; import AdminLayout from './AdminLayout'; function PerformanceContent() { const { token } = useAuth(); const [days, setDays] = useState(30); const [brand, setBrand] = useState(''); const [sort, setSort] = useState('score'); const [order, setOrder] = useState<'desc' | 'asc'>('desc'); const [data, setData] = useState([]); const [total, setTotal] = useState(0); const [page, setPage] = useState(1); const [loading, setLoading] = useState(true); const headers = { Authorization: `Bearer ${token}` }; useEffect(() => { setLoading(true); const params = new URLSearchParams({ days: String(days), sort, order, page: String(page), limit: '50' }); if (brand) params.set('brand', brand); fetch(`/api/admin/performance?${params}`, { headers }) .then(r => r.json()) .then(res => { setData(res.data || []); setTotal(res.total || 0); }) .finally(() => setLoading(false)); }, [days, brand, sort, order, page]); const toggleSort = (col: string) => { if (sort === col) setOrder(order === 'desc' ? 'asc' : 'desc'); else { setSort(col); setOrder('desc'); } }; const exportCSV = () => { const cols = ['name', 'brand', 'pageviews', 'clicks', 'watchlist_adds', 'active_alerts', 'ctr', 'conversions', 'revenue', 'score']; const csv = [cols.join(','), ...data.map(r => cols.map(c => `"${r[c] ?? ''}"`).join(','))].join('\n'); const blob = new Blob([csv], { type: 'text/csv' }); const url = URL.createObjectURL(blob); const a = document.createElement('a'); a.href = url; a.download = `performance-${days}d.csv`; a.click(); }; const SortHeader = ({ col, label }: { col: string; label: string }) => ( toggleSort(col)}> {label} {sort === col && (order === 'desc' ? '↓' : '↑')} ); return (
{[7, 30, 90].map(d => ( ))} { setBrand(e.target.value); setPage(1); }} className="bg-[#1A1A1A] border border-[#333] rounded-lg px-3 py-1.5 text-sm text-[#F5F5F5] w-48" />
{loading ? (
) : data.length === 0 ? (
Geen producten gevonden
) : (
{data.map((r: any, i: number) => ( ))}
Product Alerts
{r.name}
{r.brand}
{r.pageviews} {r.clicks} {r.watchlist_adds} {r.active_alerts} {r.ctr}% {r.conversions} €{Number(r.revenue).toFixed(2)} {Math.round(Number(r.score))}
)} {/* Pagination */}
{total} producten
Pagina {page}
); } export default function PerformanceDashboard() { return ; }