'use client'; import { useState, useEffect } from 'react'; import { apiClient } from '@/lib/apiClient'; import Card from '@/components/ui/Card'; import { AdminViewModelService } from '@/lib/services/AdminViewModelService'; import { DashboardStatsViewModel } from '@/lib/view-models/AdminUserViewModel'; import { Users, Shield, Activity, Clock, AlertTriangle, RefreshCw } from 'lucide-react'; export function AdminDashboardPage() { const [stats, setStats] = useState(null); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); useEffect(() => { loadStats(); }, []); const loadStats = async () => { try { setLoading(true); setError(null); const response = await apiClient.admin.getDashboardStats(); // Map DTO to View Model const viewModel = AdminViewModelService.mapDashboardStats(response); setStats(viewModel); } catch (err) { const message = err instanceof Error ? err.message : 'Failed to load stats'; if (message.includes('403') || message.includes('401')) { setError('Access denied - You must be logged in as an Owner or Admin'); } else { setError(message); } } finally { setLoading(false); } }; if (loading) { return (
Loading dashboard...
); } if (error) { return (
Error
{error}
); } if (!stats) { return null; } return (
{/* Header */}

Admin Dashboard

System overview and statistics

{/* Stats Cards */}
Total Users
{stats.totalUsers}
Admins
{stats.adminCount}
Active Users
{stats.activeUsers}
Recent Logins
{stats.recentLogins}
{/* Activity Overview */}
{/* Recent Activity */}

Recent Activity

{stats.recentActivity.length > 0 ? ( stats.recentActivity.map((activity, index) => (
{activity.description}
{activity.timestamp}
{activity.type.replace('_', ' ')}
)) ) : (
No recent activity
)}
{/* System Status */}

System Status

System Health {stats.systemHealth}
Total Sessions {stats.totalSessions}
Active Sessions {stats.activeSessions}
Avg Session Duration {stats.avgSessionDuration}
{/* Quick Actions */}

Quick Actions

); }