"use client"; import { useState, useEffect } from "react"; import { Trash2 } from "lucide-react"; import { SettingsSection, SettingsRow, SettingsInput, SettingsSelect } from "../ui"; import { Modal } from "@/components/ui/Modal"; import { useAuth } from "@/lib/auth-context"; import { api } from "@/lib/api"; import { InlineStatus, StatusType } from "@/components/ui/InlineStatus"; interface User { id: string; username: string; role: "user" | "admin"; createdAt: string; } export function UserManagementSection() { const { user: currentUser } = useAuth(); const [users, setUsers] = useState([]); const [newUsername, setNewUsername] = useState(""); const [newPassword, setNewPassword] = useState(""); const [newRole, setNewRole] = useState<"user" | "admin">("user"); const [creating, setCreating] = useState(false); const [confirmDelete, setConfirmDelete] = useState(null); const [loading, setLoading] = useState(true); const [createStatus, setCreateStatus] = useState("idle"); const [createMessage, setCreateMessage] = useState(""); const [deleteStatus, setDeleteStatus] = useState("idle"); const [deleteMessage, setDeleteMessage] = useState(""); useEffect(() => { loadUsers(); }, []); const loadUsers = async () => { try { setLoading(true); const data = await api.get("/auth/users"); setUsers(data); } catch (error) { console.error("Failed to load users:", error); } finally { setLoading(false); } }; const handleCreate = async () => { if (!newUsername.trim() || newPassword.length < 6) { setCreateStatus("error"); setCreateMessage("Username required, password 6+ chars"); return; } setCreating(true); setCreateStatus("loading"); try { await api.post("/auth/create-user", { username: newUsername, password: newPassword, role: newRole, }); setCreateStatus("success"); setCreateMessage("Created"); setNewUsername(""); setNewPassword(""); setNewRole("user"); loadUsers(); } catch (error: any) { setCreateStatus("error"); setCreateMessage(error.message || "Failed"); } finally { setCreating(false); } }; const handleDelete = async (userId: string) => { setDeleteStatus("loading"); try { await api.delete(`/auth/users/${userId}`); setDeleteStatus("success"); setDeleteMessage("Deleted"); setConfirmDelete(null); loadUsers(); } catch (error: any) { setDeleteStatus("error"); setDeleteMessage(error.message || "Failed"); } }; if (currentUser?.role !== "admin") { return null; } return ( <> {/* Create User Form */}

Create New User

setNewRole(v as "user" | "admin")} options={[ { value: "user", label: "User" }, { value: "admin", label: "Admin" }, ]} /> setCreateStatus("idle")} />
{/* Users List */}
{loading ? (
Loading users...
) : users.length === 0 ? (
No users found
) : ( users.map((user) => (
{user.username[0].toUpperCase()}
{user.username} {currentUser?.id === user.id && ( (you) )}
{user.role === "admin" ? "Admin" : "User"}
{currentUser?.id !== user.id && ( )}
)) )}
{/* Delete Confirmation Modal */} setConfirmDelete(null)} title="Delete User" >

Are you sure you want to delete this user? This action cannot be undone.

setDeleteStatus("idle")} />
); }