"use client" import { UserIcon } from "lucide-react" import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar" import { ScrollArea } from "@/components/ui/scroll-area" import { formatDateTime } from "@/lib/utils" import { useAgentConversationsStore } from "@/lib/stores/agent-conversations" import { IMConversationStatus, IMConversationStatusLabels, } from "@/lib/generated/enums" import { getEnumLabel } from "@/lib/enums" function getStatusVariant(status: number) { switch (status) { case IMConversationStatus.AIServing: return "bg-violet-500/15 text-violet-700 dark:bg-violet-500/20 dark:text-violet-300" case IMConversationStatus.Pending: return "bg-blue-500/15 text-blue-700 dark:bg-blue-500/20 dark:text-blue-300" case IMConversationStatus.Active: return "bg-emerald-500/15 text-emerald-800 dark:bg-emerald-500/20 dark:text-emerald-300" case IMConversationStatus.Closed: return "bg-muted text-muted-foreground" default: return "bg-muted text-muted-foreground" } } type ConversationListProps = { onAfterSelect?: () => void } export function ConversationList({ onAfterSelect }: ConversationListProps) { const conversations = useAgentConversationsStore((state) => state.conversations) const loading = useAgentConversationsStore((state) => state.conversationsLoading) const selectedId = useAgentConversationsStore((state) => state.selectedConversationId) const selectConversation = useAgentConversationsStore((state) => state.selectConversation) return (
{loading ? (
加载中...
) : conversations.length > 0 ? ( conversations.map((conversation) => { const isSelected = selectedId === conversation.id return (
{ void selectConversation(conversation.id).then( () => { onAfterSelect?.() }, () => {}, ) }} >
{conversation.customerName || `客户 #${conversation.customerId || conversation.id}`} {conversation.agentUnreadCount > 0 ? (
{conversation.agentUnreadCount > 99 ? "99+" : conversation.agentUnreadCount}
) : null}
{conversation.lastMessageAt ? formatDateTime(conversation.lastMessageAt) : "暂无时间"}
{conversation.lastMessageSummary || "暂无最新消息"}
{getEnumLabel(IMConversationStatusLabels, conversation.status)}
) }) ) : (
暂无会话
)}
) }