"use client"; import { AlertCircle, Eye, Shield, UserPlus, Users } from "lucide-react"; import { useSession } from "next-auth/react"; import { useCallback, useEffect, useId, useState } from "react"; import { Alert, AlertDescription } from "@/components/ui/alert"; import { Badge } from "@/components/ui/badge"; import { Button } from "@/components/ui/button"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "@/components/ui/select"; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from "@/components/ui/table"; interface UserItem { id: string; email: string; role: string; } export default function UserManagementPage() { const { data: session, status } = useSession(); const [users, setUsers] = useState([]); const [email, setEmail] = useState(""); const [role, setRole] = useState("USER"); const [message, setMessage] = useState(""); const [loading, setLoading] = useState(true); const emailId = useId(); const fetchUsers = useCallback(async () => { setLoading(true); try { const res = await fetch("/api/dashboard/users"); const data = await res.json(); setUsers(data.users); } catch (error) { console.error("Failed to fetch users:", error); setMessage("Failed to load users."); } finally { setLoading(false); } }, []); useEffect(() => { if (status === "authenticated") { if (session?.user?.role === "ADMIN") { fetchUsers(); } else { setLoading(false); // Stop loading for non-admin users } } else if (status === "unauthenticated") { setLoading(false); } }, [status, session?.user?.role, fetchUsers]); async function inviteUser() { setMessage(""); try { const res = await fetch("/api/dashboard/users", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ email, role }), }); if (res.ok) { setMessage("User invited successfully!"); setEmail(""); // Clear the form // Refresh the user list fetchUsers(); } else { const error = await res.json(); setMessage( `Failed to invite user: ${error.message || "Unknown error"}` ); } } catch (error) { setMessage("Failed to invite user. Please try again."); console.error("Error inviting user:", error); } } // Loading state if (loading) { return (
Loading users...
); } // Check for admin access if (session?.user?.role !== "ADMIN") { return (

Access Denied

You don't have permission to view user management.

); } return (
{/* Header */} User Management {/* Message Alert */} {message && ( {message} )} {/* Invite New User */} Invite New User
{ e.preventDefault(); inviteUser(); }} autoComplete="off" data-testid="invite-form" >
setEmail(e.target.value)} required autoComplete="off" />
{/* Current Users */} Current Users ({users?.length || 0})
Email Role Actions {users.length === 0 ? ( No users found ) : ( users.map((user) => ( {user.email} {user.role === "ADMIN" && ( )} {user.role === "AUDITOR" && ( )} {user.role} No actions available )) )}
); }