diff --git a/web/screens/Thread/ThreadCenterPanel/ChatBody/index.tsx b/web/screens/Thread/ThreadCenterPanel/ChatBody/index.tsx index 29595f249..f384611c5 100644 --- a/web/screens/Thread/ThreadCenterPanel/ChatBody/index.tsx +++ b/web/screens/Thread/ThreadCenterPanel/ChatBody/index.tsx @@ -85,24 +85,33 @@ const ChatBody = memo( overscan: 5, }) + useEffect(() => { + if (parentRef.current) { + parentRef.current.scrollTo({ top: parentRef.current.scrollHeight }) + virtualizer.scrollToIndex(count - 1) + } + }, [count, virtualizer]) + useEffect(() => { if (parentRef.current && isGeneratingResponse) { - requestAnimationFrame(() => { - if (parentRef.current) { - parentRef.current.scrollTo({ top: parentRef.current.scrollHeight }) - } - }) + parentRef.current.scrollTo({ top: parentRef.current.scrollHeight }) + virtualizer.scrollToIndex(count - 1) } }, [count, virtualizer, isGeneratingResponse]) + useEffect(() => { + if (parentRef.current && isGeneratingResponse) { + parentRef.current.scrollTo({ top: parentRef.current.scrollHeight }) + virtualizer.scrollToIndex(count - 1) + } + }, [count, virtualizer, isGeneratingResponse, currentThread?.id]) + useEffect(() => { isUserManuallyScrollingUp.current = false - requestAnimationFrame(() => { - if (parentRef.current) { - parentRef.current.scrollTo({ top: parentRef.current.scrollHeight }) - virtualizer.scrollToIndex(count - 1) - } - }) + if (parentRef.current) { + parentRef.current.scrollTo({ top: parentRef.current.scrollHeight }) + virtualizer.scrollToIndex(count - 1) + } }, [count, currentThread?.id, virtualizer]) const items = virtualizer.getVirtualItems()