'use client'; import CharacterHeader from './CharacterHeader'; import AIMessage from './AIMessage'; import UserMessage from './UserMessage'; import VirtualList from '@/components/ui/virtual-list'; import { useStreamChatStore } from '@/app/(main)/chat/stream-chat'; import React, { useCallback, useEffect, useMemo } from 'react'; import { useChatParams } from './page'; const MessageList = React.memo(() => { const { id } = useChatParams(); const messages = useStreamChatStore((s) => s.messages); const itemList = useMemo(() => { return [ { type: 'header', }, ...messages.map((i) => { return { type: i.role === 'user' ? 'user-message' : 'assistant-message', data: i, }; }), ]; }, [messages]); const itemContent = useCallback((index: number, item: { type: string; data: any }) => { switch (item.type) { case 'user-message': return ; case 'assistant-message': return ; case 'header': return ; default: return null; } }, []); return (
{ if (item.type === 'header') return 'header'; return item.data?.key ?? `${item.type}-${index}`; }} itemContent={itemContent} />
); }); export default MessageList;