"use client" import React, { useState, useEffect } from 'react' import { Button } from '@/components/ui/button' import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card' import { Input } from '@/components/ui/input' import { Label } from '@/components/ui/label' import { Alert, AlertDescription } from '@/components/ui/alert' import { Badge } from '@/components/ui/badge' import { authApi } from '@/lib/api' import { useAuth } from '@/lib/auth-context' interface User { id: string username: string email?: string role: 'admin' | 'user' active: boolean created_at: string last_login?: string } export function UserManagement() { const { user: currentUser } = useAuth() const [users, setUsers] = useState([]) const [loading, setLoading] = useState(true) const [error, setError] = useState(null) const [showCreateForm, setShowCreateForm] = useState(false) const [editingUser, setEditingUser] = useState(null) const [formData, setFormData] = useState({ username: '', email: '', password: '', role: 'user' as 'admin' | 'user', active: true }) useEffect(() => { loadUsers() }, []) const loadUsers = async () => { try { setLoading(true) const data = await authApi.getUsers() setUsers(data.users || []) setError(null) } catch (err) { setError(err instanceof Error ? err.message : 'Failed to load users') } finally { setLoading(false) } } const handleCreateUser = async (e: React.FormEvent) => { e.preventDefault() if (!formData.username.trim() || !formData.password.trim()) { setError('Username and password are required') return } try { await authApi.createUser({ username: formData.username.trim(), email: formData.email.trim() || undefined, password: formData.password, role: formData.role }) await loadUsers() setFormData({ username: '', email: '', password: '', role: 'user', active: true }) setShowCreateForm(false) setError(null) } catch (err) { setError(err instanceof Error ? err.message : 'Failed to create user') } } const handleUpdateUser = async (e: React.FormEvent) => { e.preventDefault() if (!editingUser) return try { await authApi.updateUser(editingUser.id, { email: formData.email.trim() || undefined, role: formData.role, active: formData.active }) await loadUsers() setEditingUser(null) setFormData({ username: '', email: '', password: '', role: 'user', active: true }) setError(null) } catch (err) { setError(err instanceof Error ? err.message : 'Failed to update user') } } const handleDeleteUser = async (userId: string, username: string) => { if (!confirm(`Are you sure you want to delete user "${username}"? This action cannot be undone.`)) { return } try { await authApi.deleteUser(userId) setUsers(prev => prev.filter(user => user.id !== userId)) setError(null) } catch (err) { setError(err instanceof Error ? err.message : 'Failed to delete user') } } const startEditUser = (user: User) => { setEditingUser(user) setFormData({ username: user.username, email: user.email || '', password: '', role: user.role, active: user.active }) } const cancelEdit = () => { setEditingUser(null) setFormData({ username: '', email: '', password: '', role: 'user', active: true }) } const formatDate = (dateString: string) => { return new Date(dateString).toLocaleDateString() + ' ' + new Date(dateString).toLocaleTimeString() } if (loading) { return
Loading users...
} return (
{error && ( {error} )}
User Management Manage user accounts and permissions
{(showCreateForm || editingUser) && (
setFormData(prev => ({ ...prev, username: e.target.value }))} placeholder="Username" required disabled={!!editingUser} />
setFormData(prev => ({ ...prev, email: e.target.value }))} placeholder="Email (optional)" />
{!editingUser && (
setFormData(prev => ({ ...prev, password: e.target.value }))} placeholder="Password" required />
)}
{editingUser && (
setFormData(prev => ({ ...prev, active: e.target.checked }))} />
)}
)} {users.length === 0 ? (
No users found. Create your first user to get started.
) : (
{users.map((user) => (

{user.username}

{user.role} {user.active ? 'Active' : 'Inactive'} {user.id === currentUser?.id && ( You )}
{user.email &&

Email: {user.email}

}

Created: {formatDate(user.created_at)}

{user.last_login && (

Last login: {formatDate(user.last_login)}

)}
{user.id !== currentUser?.id && ( )}
))}
)}
) }