import { createSignal, Show } from 'solid-js'; import AdminShell from '~/components/AdminShell'; const API = '/api/gateway'; type UserReport = { total_users?: number; new_users?: number; active_users?: number; }; type RevenueReport = { total_revenue?: number; total_orders?: number; total_tracecoins_sold?: number; }; export default function ReportPage() { const [from, setFrom] = createSignal(''); const [to, setTo] = createSignal(''); const [loading, setLoading] = createSignal(false); const [error, setError] = createSignal(''); const [userReport, setUserReport] = createSignal(null); const [revenueReport, setRevenueReport] = createSignal(null); const handleLoad = async (e: Event) => { e.preventDefault(); if (!from() || !to()) return; try { setLoading(true); setError(''); const [usersRes, revenueRes] = await Promise.all([ fetch(`${API}/api/admin/reports/users?from=${from()}&to=${to()}`), fetch(`${API}/api/admin/reports/revenue?from=${from()}&to=${to()}`), ]); if (!usersRes.ok || !revenueRes.ok) throw new Error('Failed to load report data'); const [usersData, revenueData] = await Promise.all([usersRes.json(), revenueRes.json()]); setUserReport(usersData); setRevenueReport(revenueData); } catch (err: any) { setError(err.message || 'Failed to load reports'); } finally { setLoading(false); } }; return (

Report Management

View platform analytics and generate reports.

Date Range

setFrom(e.currentTarget.value)} required style="padding:8px 10px;border:1px solid #e2e8f0;border-radius:6px;font-size:14px" />
setTo(e.currentTarget.value)} required style="padding:8px 10px;border:1px solid #e2e8f0;border-radius:6px;font-size:14px" />
{error()}

Total Users

{userReport()?.total_users ?? '—'}

New Users

{userReport()?.new_users ?? '—'}

Active Users

{userReport()?.active_users ?? '—'}

Total Revenue

{revenueReport()?.total_revenue != null ? `₹${(revenueReport()!.total_revenue! / 100).toFixed(2)}` : '—'}

Total Orders

{revenueReport()?.total_orders ?? '—'}

TraceCoins Sold

{revenueReport()?.total_tracecoins_sold ?? '—'}

); }