import type { UseChatHelpers } from "@ai-sdk/react"; import { ArrowDownIcon } from "lucide-react"; import { useEffect, useRef } from "react"; import { useMessages } from "@/hooks/use-messages"; import type { Vote } from "@/lib/db/schema"; import type { ChatMessage } from "@/lib/types"; import { cn } from "@/lib/utils"; import { useDataStream } from "./data-stream-provider"; import { Greeting } from "./greeting"; import { PreviewMessage, ThinkingMessage } from "./message"; type MessagesProps = { addToolApprovalResponse: UseChatHelpers["addToolApprovalResponse"]; chatId: string; status: UseChatHelpers["status"]; votes: Vote[] | undefined; messages: ChatMessage[]; setMessages: UseChatHelpers["setMessages"]; regenerate: UseChatHelpers["regenerate"]; isReadonly: boolean; isLoading?: boolean; selectedModelId: string; onEditMessage?: (message: ChatMessage) => void; }; function PureMessages({ addToolApprovalResponse, chatId, status, votes, messages, setMessages, regenerate, isReadonly, isLoading, selectedModelId: _selectedModelId, onEditMessage, }: MessagesProps) { const { containerRef: messagesContainerRef, endRef: messagesEndRef, isAtBottom, scrollToBottom, hasSentMessage, reset, } = useMessages({ status, }); useDataStream(); const prevChatIdRef = useRef(chatId); useEffect(() => { if (prevChatIdRef.current !== chatId) { prevChatIdRef.current = chatId; reset(); } }, [chatId, reset]); return (
{messages.length === 0 && !isLoading && (
)}
0 ? "bg-background" : "bg-transparent" )} ref={messagesContainerRef} >
{messages.map((message, index) => ( vote.messageId === message.id) : undefined } /> ))} {status === "submitted" && messages.at(-1)?.role !== "assistant" && ( )}
); } export const Messages = PureMessages;