import { useState, useEffect } from 'react' import { Link } from 'react-router-dom' import { Users, TreePine, CreditCard, Activity, TrendingUp, Building2 } from 'lucide-react' import { cn } from '@/lib/utils' import { PageHeader } from '@/components/admin' import { adminApi } from '@/api/admin' import type { DashboardMetrics, ActivityEntry } from '@/types/admin' interface MetricCardProps { label: string value: number | string icon: React.ReactNode } function MetricCard({ label, value, icon }: MetricCardProps) { return (

{label}

{value}

{icon}
) } export function DashboardPage() { const [metrics, setMetrics] = useState(null) const [activity, setActivity] = useState([]) const [loading, setLoading] = useState(true) useEffect(() => { Promise.allSettled([ adminApi.getDashboardMetrics(), adminApi.getDashboardActivity(), ]).then(([metricsResult, activityResult]) => { if (metricsResult.status === 'fulfilled') setMetrics(metricsResult.value) if (activityResult.status === 'fulfilled') setActivity(activityResult.value) setLoading(false) }) }, []) const quickLinks = [ { to: '/admin/accounts', label: 'Manage Accounts', icon: Building2 }, { to: '/admin/plan-limits', label: 'Plan Limits', icon: TrendingUp }, { to: '/admin/feature-flags', label: 'Feature Flags', icon: Activity }, { to: '/admin/audit-logs', label: 'Audit Logs', icon: Activity }, ] return (
{loading ? (
{Array.from({ length: 4 }).map((_, i) => (
))}
) : metrics && (
} /> } /> } /> } />
)} {/* Recent Activity */} {activity.length > 0 && (

Recent Activity

{activity.slice(0, 10).map((entry) => (
{entry.action} {entry.resource_type} {entry.user_email && ( by {entry.user_email} )}
{new Date(entry.created_at).toLocaleString()}
))}
)} {/* Quick Links */}

Quick Links

{quickLinks.map((link) => ( {link.label} ))}
) } export default DashboardPage