import { useEffect, useRef } from 'react'; import type { ChatMessageItem } from './types'; type ChatMessageListProps = { messages: ChatMessageItem[]; loading?: boolean; }; export default function ChatMessageList({ messages, loading }: ChatMessageListProps) { const containerRef = useRef(null); useEffect(() => { const container = containerRef.current; if (!container) return; container.scrollTop = container.scrollHeight; }, [messages]); return (
{loading ? (
正在加载会话内容...
) : null} {!loading && messages.length === 0 ? (
输入你的问题开始一段新对话,现有会话和流式响应都会直接显示在这里。
) : null} {messages.map((message) => (
{message.role === 'assistant' ? 'AI' : 'ME'}
{message.name}
{message.time}

{message.content}

{message.attachments && message.attachments.length > 0 ? (
{message.attachments.map((attachment, index) => { const attachmentKey = attachment.filePath || `${attachment.fileName}-${index}`; const isImage = attachment.mimeType.startsWith('image/') && Boolean(attachment.preview); if (isImage && attachment.preview) { return (
{attachment.fileName}
); } return (
{attachment.fileName}
); })}
) : null} {message.isStreaming ? (
正在生成回复...
) : null}
))}
); }