"use client"; import { useState } from "react"; import Link from "next/link"; import { Search } from "lucide-react"; import { Input } from "@/components/ui/input"; import { Badge } from "@/components/ui/badge"; import { Avatar, AvatarFallback } from "@/components/ui/avatar"; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from "@/components/ui/table"; import { Button } from "@/components/ui/button"; import { cn } from "@/lib/utils"; import { formatDateShort } from "@/lib/utils"; type User = { id: string; name: string; email: string; role: string; xp: number; level: number; banned: boolean; createdAt: Date; _count: { scans: number }; }; export default function UsersClient({ users }: { users: User[] }) { const [search, setSearch] = useState(""); const [roleFilter, setRoleFilter] = useState("ALL"); const filtered = users.filter((u) => { const matchSearch = u.name.toLowerCase().includes(search.toLowerCase()) || u.email.toLowerCase().includes(search.toLowerCase()); const matchRole = roleFilter === "ALL" || u.role === roleFilter; return matchSearch && matchRole; }); return (

Utilisateurs

{users.length} utilisateurs

setSearch(e.target.value)} className="pl-9 rounded-xl bg-card border-[oklch(0.22_0.005_60)] text-cream placeholder:text-stone-700 focus:border-vine/40" />
{["ALL", "USER", "ADMIN"].map((role) => ( ))}
Utilisateur Role XP Niveau Scans Inscrit Statut {filtered.map((user) => ( {user.name.charAt(0).toUpperCase()}

{user.name}

{user.email}

{user.role} {user.xp} {user.level} {user._count.scans} {formatDateShort(user.createdAt)} {user.banned ? ( Banni ) : ( Actif )}
))}
{filtered.length === 0 && (

Aucun utilisateur trouve

)}
{/* Mobile cards */}
{filtered.map((user) => (
{user.name.charAt(0).toUpperCase()}

{user.name}

{user.email}

{user.role}
))}
); }