"use client"; import { useState } from "react"; import { Button } from "@/components/ui/button"; import { cn } from "@/lib/utils"; import { NewUserDialog } from "./NewUserDialog"; import { EditUserDialog, type EditableUser } from "./EditUserDialog"; import { useRouter } from "next/navigation"; import { PlusCircle, Pencil, ShieldCheck, Shield, Eye, Palette, User2, Trash2 } from "lucide-react"; import { deleteUser } from "@/actions/users"; const ROLE_CONFIG: Record = { ADMIN: { label: "Admin", className: "bg-red-500/10 text-red-400 border border-red-500/20", Icon: ShieldCheck }, PRODUCER: { label: "Producer", className: "bg-blue-500/10 text-blue-400 border border-blue-500/20", Icon: Shield }, SUPERVISOR: { label: "Supervisor", className: "bg-violet-500/10 text-violet-400 border border-violet-500/20", Icon: Eye }, ARTIST: { label: "Artist", className: "bg-emerald-500/10 text-emerald-400 border border-emerald-500/20", Icon: Palette }, CLIENT: { label: "Client", className: "bg-zinc-500/10 text-zinc-400 border border-zinc-500/20", Icon: User2 }, }; function getInitials(name: string | null, email: string) { const src = name ?? email; return src.slice(0, 2).toUpperCase(); } interface User { id: string; name: string | null; email: string; role: string; isActive: boolean; createdAt: string; } interface UsersClientProps { users: User[]; currentUserId: string; } export function UsersClient({ users, currentUserId }: UsersClientProps) { const router = useRouter(); const [showNew, setShowNew] = useState(false); const [editTarget, setEditTarget] = useState(null); const [confirmDeleteId, setConfirmDeleteId] = useState(null); const [deleting, setDeleting] = useState(false); const handleSuccess = () => { router.refresh(); }; async function handleDelete(userId: string) { setDeleting(true); try { await deleteUser(userId); router.refresh(); } finally { setDeleting(false); setConfirmDeleteId(null); } } return (

{users.length} user{users.length !== 1 ? "s" : ""}

{/* Table */}
{users.map((user) => { const role = ROLE_CONFIG[user.role] ?? ROLE_CONFIG.ARTIST; const RoleIcon = role.Icon; const isSelf = user.id === currentUserId; return ( ); })}
User Role Status
{getInitials(user.name, user.email)}

{user.name ?? No name} {isSelf && (you)}

{user.email}

{role.label} {user.isActive ? "Active" : "Inactive"}
{!isSelf && ( confirmDeleteId === user.id ? ( <> ) : ( ) )}
setShowNew(false)} onSuccess={handleSuccess} /> {editTarget && ( setEditTarget(null)} onSuccess={() => { setEditTarget(null); handleSuccess(); }} /> )}
); }