'use client'; import { useState, useEffect } from 'react'; import { toast } from 'react-hot-toast'; import { Users, Search, Edit2, Shield, ShieldOff, Trash2 } from 'lucide-react'; import AdminGuard from '@/components/AdminGuard'; import api from '@/lib/api'; interface User { id: string; email: string; name: string; role: string; is_active: boolean; created_at: string; last_login?: string; } export default function UserManagementPage() { const [users, setUsers] = useState([]); const [loading, setLoading] = useState(true); const [searchQuery, setSearchQuery] = useState(''); const [roleFilter, setRoleFilter] = useState(''); const [editingUser, setEditingUser] = useState(null); const [newRole, setNewRole] = useState(''); useEffect(() => { fetchUsers(); }, [roleFilter]); const fetchUsers = async () => { setLoading(true); try { const params: any = {}; if (roleFilter) params.role = roleFilter; const response = await api.get('/admin/users', { params }); setUsers(response.data.items || []); } catch (err) { // Mock data for demo setUsers([ { id: '1', email: 'admin@forgeai.dev', name: 'Admin User', role: 'admin', is_active: true, created_at: '2024-01-15T10:00:00Z', last_login: '2024-12-09T14:30:00Z', }, { id: '2', email: 'test@forgeai.dev', name: 'Test User', role: 'user', is_active: true, created_at: '2024-02-01T10:00:00Z', last_login: '2024-12-09T12:00:00Z', }, { id: '3', email: 'john@example.com', name: 'John Doe', role: 'user', is_active: true, created_at: '2024-03-01T10:00:00Z', }, ]); } finally { setLoading(false); } }; const handleUpdateRole = async () => { if (!editingUser || !newRole) return; try { await api.patch(`/admin/users/${editingUser.id}`, { role: newRole }); toast.success('User role updated'); setEditingUser(null); fetchUsers(); } catch (err) { toast.error('Failed to update role'); } }; const handleToggleActive = async (user: User) => { try { await api.patch(`/admin/users/${user.id}`, { is_active: !user.is_active }); toast.success(user.is_active ? 'User deactivated' : 'User activated'); fetchUsers(); } catch (err) { toast.error('Failed to update user status'); } }; const filteredUsers = users.filter( (user) => user.email.toLowerCase().includes(searchQuery.toLowerCase()) || user.name.toLowerCase().includes(searchQuery.toLowerCase()) ); const getRoleBadgeColor = (role: string) => { switch (role) { case 'super_admin': return 'bg-red-900/50 text-red-400'; case 'admin': return 'bg-orange-900/50 text-orange-400'; default: return 'bg-blue-900/50 text-blue-400'; } }; return (
{/* Header */}

User Management

Manage users and their roles

{/* Filters */}
setSearchQuery(e.target.value)} placeholder="Search users..." className="input-field pl-10" />
{/* Users Table */}
{loading ? (
Loading...
) : filteredUsers.length === 0 ? (
No users found
) : ( {filteredUsers.map((user) => ( ))}
User Role Status Last Login Actions

{user.name}

{user.email}

{user.role.replace('_', ' ')} {user.is_active ? 'Active' : 'Inactive'} {user.last_login ? new Date(user.last_login).toLocaleDateString() : 'Never'}
)}
{/* Edit Role Modal */} {editingUser && (

Change User Role

User

{editingUser.name}

{editingUser.email}

)}
); }