'use client'; import { useState, useEffect } from 'react'; import { getAllUsers, updateAdminUser, deleteAdminUser } from '@/lib/api/admin'; import { createUser } from '@/lib/api/users'; import { getAllOrganizations } from '@/lib/api/admin'; interface User { id: string; email: string; firstName: string; lastName: string; role: string; organizationId: string; organizationName?: string; isActive: boolean; createdAt: string; } interface Organization { id: string; name: string; } export default function AdminUsersPage() { const [users, setUsers] = useState([]); const [organizations, setOrganizations] = useState([]); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); const [selectedUser, setSelectedUser] = useState(null); const [showCreateModal, setShowCreateModal] = useState(false); const [showEditModal, setShowEditModal] = useState(false); const [showDeleteConfirm, setShowDeleteConfirm] = useState(false); // Form state const [formData, setFormData] = useState({ email: '', firstName: '', lastName: '', role: 'USER', organizationId: '', password: '', }); // Fetch users and organizations useEffect(() => { fetchData(); }, []); const fetchData = async () => { try { setLoading(true); const [usersResponse, orgsResponse] = await Promise.all([ getAllUsers(), getAllOrganizations(), ]); setUsers(usersResponse.users || []); setOrganizations(orgsResponse.organizations || []); setError(null); } catch (err: any) { setError(err.message || 'Failed to load data'); } finally { setLoading(false); } }; const handleCreate = async (e: React.FormEvent) => { e.preventDefault(); try { await createUser(formData); await fetchData(); setShowCreateModal(false); resetForm(); } catch (err: any) { alert(err.message || 'Failed to create user'); } }; const handleUpdate = async (e: React.FormEvent) => { e.preventDefault(); if (!selectedUser) return; try { await updateAdminUser(selectedUser.id, { firstName: formData.firstName, lastName: formData.lastName, role: formData.role, isActive: selectedUser.isActive, }); await fetchData(); setShowEditModal(false); setSelectedUser(null); resetForm(); } catch (err: any) { alert(err.message || 'Failed to update user'); } }; const handleDelete = async () => { if (!selectedUser) return; try { await deleteAdminUser(selectedUser.id); await fetchData(); setShowDeleteConfirm(false); setSelectedUser(null); } catch (err: any) { alert(err.message || 'Failed to delete user'); } }; const resetForm = () => { setFormData({ email: '', firstName: '', lastName: '', role: 'USER', organizationId: '', password: '', }); }; const openEditModal = (user: User) => { setSelectedUser(user); setFormData({ email: user.email, firstName: user.firstName, lastName: user.lastName, role: user.role, organizationId: user.organizationId, password: '', }); setShowEditModal(true); }; const openDeleteConfirm = (user: User) => { setSelectedUser(user); setShowDeleteConfirm(true); }; if (loading) { return (

Loading users...

); } return (
{/* Header */}

User Management

Manage all users in the system

{/* Error Message */} {error && (
{error}
)} {/* Users Table */}
{users.map(user => ( ))}
User Email Role Organization Status Actions
{user.firstName} {user.lastName}
{user.email}
{user.role} {user.organizationName || user.organizationId} {user.isActive ? 'Active' : 'Inactive'}
{/* Create Modal */} {showCreateModal && (

Create New User

setFormData({ ...formData, email: e.target.value })} className="mt-1 block w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm focus:border-blue-500 focus:ring-blue-500 focus:outline-none" />
setFormData({ ...formData, firstName: e.target.value })} className="mt-1 block w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm focus:border-blue-500 focus:ring-blue-500 focus:outline-none" />
setFormData({ ...formData, lastName: e.target.value })} className="mt-1 block w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm focus:border-blue-500 focus:ring-blue-500 focus:outline-none" />
setFormData({ ...formData, password: e.target.value })} className="mt-1 block w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm focus:border-blue-500 focus:ring-blue-500 focus:outline-none" />
)} {/* Edit Modal */} {showEditModal && selectedUser && (

Edit User

setFormData({ ...formData, firstName: e.target.value })} className="mt-1 block w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm focus:border-blue-500 focus:ring-blue-500 focus:outline-none" />
setFormData({ ...formData, lastName: e.target.value })} className="mt-1 block w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm focus:border-blue-500 focus:ring-blue-500 focus:outline-none" />
)} {/* Delete Confirmation */} {showDeleteConfirm && selectedUser && (

Confirm Delete

Are you sure you want to delete user {selectedUser.firstName} {selectedUser.lastName}? This action cannot be undone.

)}
); }