"use client"; import { Search, Users, UserX } from "lucide-react"; import { useCallback, useState } from "react"; import { GlassCard } from "@/components/glass/card"; import { EmptyState, LoadingSkeleton } from "@/components/shared"; import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar"; import { Badge } from "@/components/ui/badge"; import { Button } from "@/components/ui/button"; import { Card, CardContent } from "@/components/ui/card"; import { Input } from "@/components/ui/input"; import { useUserDetail, useUsers } from "@/hooks"; import { renderMessageContent } from "@/lib/format"; import type { DashboardUser } from "@/lib/types"; export function UsersSection() { const [search, setSearch] = useState(""); const [selectedId, setSelectedId] = useState(null); const { data: users = [], isLoading, error, mutate: refetch, } = useUsers(search); const { data: detail } = useUserDetail(selectedId); const handleSearch = useCallback((v: string) => { setSearch(v); setSelectedId(null); }, []); if (error) { return ( Failed to load users: {error.message} ); } return (
handleSearch(e.target.value)} className="pl-9 h-9" />
{isLoading ? ( ) : users.length === 0 ? ( ) : (
{users.map((user) => ( ))}
)}
{detail ? (
{detail.username?.charAt(0).toUpperCase() ?? "?"}

{detail.username ?? "Unknown user"}

{detail.user_id}

Messages: {detail.total_messages} Flagged: {detail.flagged_count} Clean: {detail.clean_count} {detail.trust_score != null && ( Trust: {detail.trust_score} )} {detail.clean_message_streak != null && ( Streak: {detail.clean_message_streak} )} {detail.total_infractions != null && ( Infractions: {detail.total_infractions} )}
{detail.profile_summary && (

{detail.profile_summary}

)} {detail.recent_messages.length > 0 && (

Recent messages

{detail.recent_messages.slice(0, 5).map((msg) => (

{renderMessageContent(msg.content, msg.metadata) || "(no text content)"}

{msg.channel_id?.slice(0, 8)} ·{" "} {new Date(msg.created_at).toLocaleString()}

))}
)}
) : (

Select a user to see their profile, trust score and recent messages.

)}
); } function UserRow({ user, active, onSelect, }: { user: DashboardUser; active: boolean; onSelect: (id: string) => void; }) { return ( onSelect(user.user_id)} > {user.username?.charAt(0).toUpperCase() ?? "?"}

{user.username ?? "Unknown user"}

{user.user_id}

{user.total_messages} {user.flagged_count > 0 && ( {user.flagged_count} )}
); }