From 1e1737efaff4f6e530a11dea9be9136748dbdf99 Mon Sep 17 00:00:00 2001 From: ved015 Date: Mon, 11 May 2026 21:19:16 +0530 Subject: [PATCH] use ref to read latest bottom state --- apps/web/components/chat/index.tsx | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/apps/web/components/chat/index.tsx b/apps/web/components/chat/index.tsx index 6af3dde3..3d133e9f 100644 --- a/apps/web/components/chat/index.tsx +++ b/apps/web/components/chat/index.tsx @@ -187,6 +187,7 @@ export function ChatSidebar({ null, ) const messagesContainerRef = useRef(null) + const isScrolledToBottomRef = useRef(true) const sentQueuedMessageRef = useRef(null) const { selectedProject } = useProject() const { allProjects } = useContainerTags() @@ -296,6 +297,7 @@ export function ChatSidebar({ const { scrollTop, scrollHeight, clientHeight } = container const distanceFromBottom = scrollHeight - scrollTop - clientHeight const isAtBottom = distanceFromBottom <= 20 + isScrolledToBottomRef.current = isAtBottom setIsScrolledToBottom(isAtBottom) }, []) @@ -303,6 +305,7 @@ export function ChatSidebar({ if (messagesContainerRef.current) { messagesContainerRef.current.scrollTop = messagesContainerRef.current.scrollHeight + isScrolledToBottomRef.current = true setIsScrolledToBottom(true) } }, []) @@ -571,26 +574,23 @@ export function ChatSidebar({ if (!isStreaming) return const mutationObserver = new MutationObserver(() => { - if (isScrolledToBottom) { + if (isScrolledToBottomRef.current) { requestAnimationFrame(() => { scrollToBottom() }) } }) - const messagesWrapper = container.firstElementChild - if (messagesWrapper) { - mutationObserver.observe(messagesWrapper, { - childList: true, - subtree: true, - characterData: true, - }) - } + mutationObserver.observe(container, { + childList: true, + subtree: true, + characterData: true, + }) return () => { mutationObserver.disconnect() } - }, [status, isScrolledToBottom, scrollToBottom]) + }, [status, scrollToBottom]) // Add scroll event listener to track scroll position useEffect(() => {