fix scroll behavior
This commit is contained in:
		
							parent
							
								
									83987d3021
								
							
						
					
					
						commit
						68cd41a6dc
					
				|  | @ -22,17 +22,46 @@ interface Props { | |||
| 
 | ||||
| export const Chat: FC<Props> = ({ conversation, models, messageIsStreaming, modelError, messageError, loading, lightMode, onSend, onUpdateConversation, stopConversationRef }) => { | ||||
|   const [currentMessage, setCurrentMessage] = useState<Message>(); | ||||
|   const [autoScrollEnabled, setAutoScrollEnabled] = useState(true); | ||||
| 
 | ||||
|   const messagesEndRef = useRef<HTMLDivElement>(null); | ||||
|   const chatContainerRef = useRef<HTMLDivElement>(null); | ||||
| 
 | ||||
|   const scrollToBottom = () => { | ||||
|     messagesEndRef.current?.scrollIntoView({ behavior: "auto" }); | ||||
|     if (autoScrollEnabled) { | ||||
|       messagesEndRef.current?.scrollIntoView({ behavior: "smooth" }); | ||||
|     } | ||||
|   }; | ||||
| 
 | ||||
|   const handleScroll = () => { | ||||
|     if (chatContainerRef.current) { | ||||
|       const { scrollTop, scrollHeight, clientHeight } = chatContainerRef.current; | ||||
|       const bottomTolerance = 50; | ||||
| 
 | ||||
|       if (scrollTop + clientHeight < scrollHeight - bottomTolerance) { | ||||
|         setAutoScrollEnabled(false); | ||||
|       } else { | ||||
|         setAutoScrollEnabled(true); | ||||
|       } | ||||
|     } | ||||
|   }; | ||||
| 
 | ||||
|   useEffect(() => { | ||||
|     scrollToBottom(); | ||||
|   }, [conversation.messages]); | ||||
| 
 | ||||
|   useEffect(() => { | ||||
|     const chatContainer = chatContainerRef.current; | ||||
| 
 | ||||
|     if (chatContainer) { | ||||
|       chatContainer.addEventListener("scroll", handleScroll); | ||||
| 
 | ||||
|       return () => { | ||||
|         chatContainer.removeEventListener("scroll", handleScroll); | ||||
|       }; | ||||
|     } | ||||
|   }, []); | ||||
| 
 | ||||
|   return ( | ||||
|     <div className="relative flex-1 overflow-none dark:bg-[#343541] bg-white"> | ||||
|       {modelError ? ( | ||||
|  | @ -43,7 +72,10 @@ export const Chat: FC<Props> = ({ conversation, models, messageIsStreaming, mode | |||
|         </div> | ||||
|       ) : ( | ||||
|         <> | ||||
|           <div className="overflow-scroll max-h-full"> | ||||
|           <div | ||||
|             className="overflow-scroll max-h-full" | ||||
|             ref={chatContainerRef} | ||||
|           > | ||||
|             {conversation.messages.length === 0 ? ( | ||||
|               <> | ||||
|                 <div className="flex flex-col mx-auto pt-12 space-y-10 w-[350px] sm:w-[600px]"> | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue