diff --git a/webview-ui/src/components/ui/chat/ChatMessages.tsx b/webview-ui/src/components/ui/chat/ChatMessages.tsx index e23e5aba31..bcaffd2397 100644 --- a/webview-ui/src/components/ui/chat/ChatMessages.tsx +++ b/webview-ui/src/components/ui/chat/ChatMessages.tsx @@ -1,31 +1,30 @@ -import { useCallback, useEffect, useRef } from "react" +import { useEffect, useRef } from "react" +import { Virtuoso, VirtuosoHandle } from "react-virtuoso" import { useChatUI } from "./useChatUI" import { ChatMessage } from "./ChatMessage" export function ChatMessages() { const { messages, isLoading, append } = useChatUI() - const containerRef = useRef(null) const messageCount = messages.length + const virtuoso = useRef(null) - const scrollToBottom = useCallback(() => { - if (!containerRef.current) { + useEffect(() => { + if (!virtuoso.current) { return } - requestAnimationFrame(() => { - containerRef.current?.scrollTo({ - top: containerRef.current.scrollHeight, - behavior: "smooth", - }) - }) - }, []) - - useEffect(() => scrollToBottom(), [messageCount, scrollToBottom]) + requestAnimationFrame(() => + virtuoso.current?.scrollToIndex({ index: messageCount - 1, align: "end", behavior: "smooth" }), + ) + }, [messageCount]) return ( -
- {messages.map((message, index) => ( + ( - ))} -
+ )} + /> ) }