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 (
)
}
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