import { ChatRequestOptions, Message } from 'ai'; import { PreviewMessage, ThinkingMessage } from './message'; import { useScrollToBottom } from './use-scroll-to-bottom'; import { Overview } from './overview'; import { UIBlock } from './block'; import { Dispatch, memo, SetStateAction } from 'react'; import { Vote } from '@/lib/db/schema'; interface MessagesProps { chatId: string; block: UIBlock; setBlock: Dispatch>; isLoading: boolean; votes: Array | undefined; messages: Array; setMessages: ( messages: Message[] | ((messages: Message[]) => Message[]), ) => void; reload: ( chatRequestOptions?: ChatRequestOptions, ) => Promise; } function PureMessages({ chatId, block, setBlock, isLoading, votes, messages, setMessages, reload, }: MessagesProps) { const [messagesContainerRef, messagesEndRef] = useScrollToBottom(); return (
{messages.length === 0 && } {messages.map((message, index) => ( vote.messageId === message.id) : undefined } setMessages={setMessages} reload={reload} /> ))} {isLoading && messages.length > 0 && messages[messages.length - 1].role === 'user' && }
); } function areEqual(prevProps: MessagesProps, nextProps: MessagesProps) { if ( prevProps.block.status === 'streaming' && nextProps.block.status === 'streaming' ) { return true; } return false; } export const Messages = memo(PureMessages, areEqual);