"use client"; import { Copy, Dot, ExternalLink, MessageSquare, MoreHorizontal, Trash2 } from "lucide-react"; import { useCallback, useState } from "react"; import { toast } from "sonner"; 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 { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger, } from "@/components/ui/dropdown-menu"; import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from "@/components/ui/tooltip"; import type { PublicChatSnapshotDetail } from "@/contracts/types/chat-threads.types"; import { useMediaQuery } from "@/hooks/use-media-query"; import { cn } from "@/lib/utils"; function getInitials(name: string): string { const parts = name.trim().split(/\s+/); if (parts.length >= 2) { return (parts[0][0] + parts[1][0]).toUpperCase(); } return name.slice(0, 2).toUpperCase(); } interface PublicChatSnapshotRowProps { snapshot: PublicChatSnapshotDetail; canDelete: boolean; onCopy: (snapshot: PublicChatSnapshotDetail) => void; onDelete: (snapshot: PublicChatSnapshotDetail) => void; isDeleting?: boolean; memberMap: Map; } export function PublicChatSnapshotRow({ snapshot, canDelete, onCopy, onDelete, isDeleting = false, memberMap, }: PublicChatSnapshotRowProps) { const [dropdownOpen, setDropdownOpen] = useState(false); const isDesktop = useMediaQuery("(min-width: 768px)"); const handleCopyClick = useCallback(() => { onCopy(snapshot); toast.success("Link copied to clipboard"); }, [onCopy, snapshot]); const formattedDate = new Date(snapshot.created_at).toLocaleDateString(undefined, { year: "numeric", month: "short", day: "numeric", }); const member = snapshot.created_by_user_id ? memberMap.get(snapshot.created_by_user_id) : null; return ( {/* Header: Title + Actions */}

{snapshot.thread_title}

Copy link Open link {canDelete && ( onDelete(snapshot)} disabled={isDeleting}> Delete )}
{/* Message count badge */}
{snapshot.message_count} messages
{/* Footer: Date + Creator */}
{formattedDate} {member && ( <>
{member.avatarUrl && ( )} {getInitials(member.name)} {member.name}
{member.email || member.name}
)}
); }