Spaces:
Configuration error
Configuration error
import { useState, useEffect } from 'react' | |
import { Routes, Route, Link, useLocation } from 'react-router-dom' | |
import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card' | |
import { | |
Users, | |
MessageSquare, | |
Settings, | |
BarChart3, | |
Shield, | |
Activity, | |
Database, | |
Server | |
} from 'lucide-react' | |
// Mock data - replace with real API calls | |
const mockStats = { | |
totalUsers: 1234, | |
activeUsers: 567, | |
totalChats: 890, | |
totalMessages: 12345, | |
storageUsed: 2.5, // GB | |
serverUptime: 99.9 // % | |
} | |
export default function AdminPage() { | |
const [stats] = useState(mockStats) | |
const location = useLocation() | |
useEffect(() => { | |
// Load admin stats | |
// TODO: Implement API call | |
}, []) | |
return ( | |
<div className="min-h-screen bg-background"> | |
<div className="border-b"> | |
<div className="flex h-16 items-center px-6"> | |
<Shield className="w-6 h-6 mr-2" /> | |
<h1 className="text-xl font-semibold">Admin Panel</h1> | |
</div> | |
</div> | |
<div className="flex"> | |
{/* Sidebar */} | |
<div className="w-64 border-r min-h-screen p-4"> | |
<nav className="space-y-2"> | |
<Link | |
to="/admin" | |
className={`flex items-center space-x-2 px-3 py-2 rounded-md text-sm font-medium ${ | |
location.pathname === '/admin' | |
? 'bg-primary text-primary-foreground' | |
: 'text-muted-foreground hover:text-foreground hover:bg-muted' | |
}`} | |
> | |
<BarChart3 className="w-4 h-4" /> | |
<span>Dashboard</span> | |
</Link> | |
<Link | |
to="/admin/users" | |
className={`flex items-center space-x-2 px-3 py-2 rounded-md text-sm font-medium ${ | |
location.pathname === '/admin/users' | |
? 'bg-primary text-primary-foreground' | |
: 'text-muted-foreground hover:text-foreground hover:bg-muted' | |
}`} | |
> | |
<Users className="w-4 h-4" /> | |
<span>Users</span> | |
</Link> | |
<Link | |
to="/admin/chats" | |
className={`flex items-center space-x-2 px-3 py-2 rounded-md text-sm font-medium ${ | |
location.pathname === '/admin/chats' | |
? 'bg-primary text-primary-foreground' | |
: 'text-muted-foreground hover:text-foreground hover:bg-muted' | |
}`} | |
> | |
<MessageSquare className="w-4 h-4" /> | |
<span>Chats</span> | |
</Link> | |
<Link | |
to="/admin/settings" | |
className={`flex items-center space-x-2 px-3 py-2 rounded-md text-sm font-medium ${ | |
location.pathname === '/admin/settings' | |
? 'bg-primary text-primary-foreground' | |
: 'text-muted-foreground hover:text-foreground hover:bg-muted' | |
}`} | |
> | |
<Settings className="w-4 h-4" /> | |
<span>Settings</span> | |
</Link> | |
</nav> | |
</div> | |
{/* Main content */} | |
<div className="flex-1 p-6"> | |
<Routes> | |
<Route path="/" element={<AdminDashboard stats={stats} />} /> | |
<Route path="/users" element={<AdminUsers />} /> | |
<Route path="/chats" element={<AdminChats />} /> | |
<Route path="/settings" element={<AdminSettings />} /> | |
</Routes> | |
</div> | |
</div> | |
</div> | |
) | |
} | |
function AdminDashboard({ stats }: { stats: typeof mockStats }) { | |
return ( | |
<div className="space-y-6"> | |
<div> | |
<h2 className="text-2xl font-bold">Dashboard</h2> | |
<p className="text-muted-foreground"> | |
Overview of your ChatApp instance | |
</p> | |
</div> | |
{/* Stats Cards */} | |
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6"> | |
<Card> | |
<CardHeader className="flex flex-row items-center justify-between space-y-0 pb-2"> | |
<CardTitle className="text-sm font-medium">Total Users</CardTitle> | |
<Users className="h-4 w-4 text-muted-foreground" /> | |
</CardHeader> | |
<CardContent> | |
<div className="text-2xl font-bold">{stats.totalUsers.toLocaleString()}</div> | |
<p className="text-xs text-muted-foreground"> | |
+12% from last month | |
</p> | |
</CardContent> | |
</Card> | |
<Card> | |
<CardHeader className="flex flex-row items-center justify-between space-y-0 pb-2"> | |
<CardTitle className="text-sm font-medium">Active Users</CardTitle> | |
<Activity className="h-4 w-4 text-muted-foreground" /> | |
</CardHeader> | |
<CardContent> | |
<div className="text-2xl font-bold">{stats.activeUsers.toLocaleString()}</div> | |
<p className="text-xs text-muted-foreground"> | |
Currently online | |
</p> | |
</CardContent> | |
</Card> | |
<Card> | |
<CardHeader className="flex flex-row items-center justify-between space-y-0 pb-2"> | |
<CardTitle className="text-sm font-medium">Total Messages</CardTitle> | |
<MessageSquare className="h-4 w-4 text-muted-foreground" /> | |
</CardHeader> | |
<CardContent> | |
<div className="text-2xl font-bold">{stats.totalMessages.toLocaleString()}</div> | |
<p className="text-xs text-muted-foreground"> | |
+5% from last week | |
</p> | |
</CardContent> | |
</Card> | |
<Card> | |
<CardHeader className="flex flex-row items-center justify-between space-y-0 pb-2"> | |
<CardTitle className="text-sm font-medium">Storage Used</CardTitle> | |
<Database className="h-4 w-4 text-muted-foreground" /> | |
</CardHeader> | |
<CardContent> | |
<div className="text-2xl font-bold">{stats.storageUsed} GB</div> | |
<p className="text-xs text-muted-foreground"> | |
Of 10 GB available | |
</p> | |
</CardContent> | |
</Card> | |
<Card> | |
<CardHeader className="flex flex-row items-center justify-between space-y-0 pb-2"> | |
<CardTitle className="text-sm font-medium">Server Uptime</CardTitle> | |
<Server className="h-4 w-4 text-muted-foreground" /> | |
</CardHeader> | |
<CardContent> | |
<div className="text-2xl font-bold">{stats.serverUptime}%</div> | |
<p className="text-xs text-muted-foreground"> | |
Last 30 days | |
</p> | |
</CardContent> | |
</Card> | |
<Card> | |
<CardHeader className="flex flex-row items-center justify-between space-y-0 pb-2"> | |
<CardTitle className="text-sm font-medium">Total Chats</CardTitle> | |
<MessageSquare className="h-4 w-4 text-muted-foreground" /> | |
</CardHeader> | |
<CardContent> | |
<div className="text-2xl font-bold">{stats.totalChats.toLocaleString()}</div> | |
<p className="text-xs text-muted-foreground"> | |
Groups and direct messages | |
</p> | |
</CardContent> | |
</Card> | |
</div> | |
{/* Recent Activity */} | |
<Card> | |
<CardHeader> | |
<CardTitle>Recent Activity</CardTitle> | |
<CardDescription> | |
Latest events in your ChatApp instance | |
</CardDescription> | |
</CardHeader> | |
<CardContent> | |
<div className="space-y-4"> | |
<div className="flex items-center space-x-4"> | |
<div className="w-2 h-2 bg-green-500 rounded-full"></div> | |
<div className="flex-1"> | |
<p className="text-sm">New user registered: john_doe</p> | |
<p className="text-xs text-muted-foreground">2 minutes ago</p> | |
</div> | |
</div> | |
<div className="flex items-center space-x-4"> | |
<div className="w-2 h-2 bg-blue-500 rounded-full"></div> | |
<div className="flex-1"> | |
<p className="text-sm">New group created: "Project Team"</p> | |
<p className="text-xs text-muted-foreground">5 minutes ago</p> | |
</div> | |
</div> | |
<div className="flex items-center space-x-4"> | |
<div className="w-2 h-2 bg-yellow-500 rounded-full"></div> | |
<div className="flex-1"> | |
<p className="text-sm">Server maintenance completed</p> | |
<p className="text-xs text-muted-foreground">1 hour ago</p> | |
</div> | |
</div> | |
</div> | |
</CardContent> | |
</Card> | |
</div> | |
) | |
} | |
function AdminUsers() { | |
return ( | |
<div className="space-y-6"> | |
<div> | |
<h2 className="text-2xl font-bold">User Management</h2> | |
<p className="text-muted-foreground"> | |
Manage users and their permissions | |
</p> | |
</div> | |
<Card> | |
<CardContent className="p-6"> | |
<p className="text-center text-muted-foreground"> | |
User management interface coming soon... | |
</p> | |
</CardContent> | |
</Card> | |
</div> | |
) | |
} | |
function AdminChats() { | |
return ( | |
<div className="space-y-6"> | |
<div> | |
<h2 className="text-2xl font-bold">Chat Management</h2> | |
<p className="text-muted-foreground"> | |
Monitor and manage chats and groups | |
</p> | |
</div> | |
<Card> | |
<CardContent className="p-6"> | |
<p className="text-center text-muted-foreground"> | |
Chat management interface coming soon... | |
</p> | |
</CardContent> | |
</Card> | |
</div> | |
) | |
} | |
function AdminSettings() { | |
return ( | |
<div className="space-y-6"> | |
<div> | |
<h2 className="text-2xl font-bold">System Settings</h2> | |
<p className="text-muted-foreground"> | |
Configure your ChatApp instance | |
</p> | |
</div> | |
<Card> | |
<CardContent className="p-6"> | |
<p className="text-center text-muted-foreground"> | |
Settings interface coming soon... | |
</p> | |
</CardContent> | |
</Card> | |
</div> | |
) | |
} | |