"use client"; import { useState } from "react"; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from "@/components/ui/table"; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuTrigger, } from "@/components/ui/dropdown-menu"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar"; import { Badge } from "@/components/ui/badge"; import { AdminUser } from "@/types/admin"; import { MoreHorizontal, Search, UserCog, Ban, CheckCircle } from "lucide-react"; interface UserManagementTableProps { users: AdminUser[]; onUpdateStatus: (userId: string, newStatus: "active" | "suspended") => void; onUpdateRole: (userId: string, newRole: "user" | "admin") => void; } export function UserManagementTable({ users, onUpdateStatus, onUpdateRole, }: UserManagementTableProps) { const [searchTerm, setSearchTerm] = useState(""); const filteredUsers = users.filter( (user) => user.name?.toLowerCase().includes(searchTerm.toLowerCase()) || user.email?.toLowerCase().includes(searchTerm.toLowerCase()) ); const getStatusColor = (status: string) => { switch (status) { case "active": return "bg-green-100 text-green-800 dark:bg-green-900 dark:text-green-100"; case "suspended": return "bg-red-100 text-red-800 dark:bg-red-900 dark:text-red-100"; case "inactive": return "bg-gray-100 text-gray-800 dark:bg-gray-800 dark:text-gray-100"; default: return "bg-gray-100 text-gray-800"; } }; return (
setSearchTerm(e.target.value)} className="pl-8" />
User Role Status Joined Last Active Actions {filteredUsers.length === 0 ? ( No users found. ) : ( filteredUsers.map((user) => (
{user.name?.slice(0, 2).toUpperCase() || "U"}
{user.name} {user.email}
{user.role} {user.status} {new Date(user.createdAt).toLocaleDateString()} {user.lastActive ? new Date(user.lastActive).toLocaleDateString() : "Never"} Actions onUpdateRole( user.id, user.role === "admin" ? "user" : "admin" ) } > {user.role === "admin" ? "Remove Admin" : "Make Admin"} {user.status === "suspended" ? ( onUpdateStatus(user.id, "active")} > Activate Account ) : ( onUpdateStatus(user.id, "suspended")} className="text-red-600" > Suspend Account )}
)) )}
); }