import React, { useEffect, useState, useRef } from 'react'; import { CSSTransition } from 'react-transition-group'; import ScrollToBottom from './ScrollToBottom'; import Message from './Message'; const Messages = ({ messages }) => { const [showScrollButton, setShowScrollButton] = useState(false); const scrollableRef = useRef(null); const messagesEndRef = useRef(null); useEffect(() => { const timeoutId = setTimeout(() => { const scrollable = scrollableRef.current; const hasScrollbar = scrollable.scrollHeight > scrollable.clientHeight; setShowScrollButton(hasScrollbar); }, 650); return () => { clearTimeout(timeoutId); }; }, [messages]); const scrollToBottom = () => { messagesEndRef.current?.scrollIntoView({ behavior: 'smooth' }); setShowScrollButton(false); }; const handleScroll = () => { const { scrollTop, scrollHeight, clientHeight } = scrollableRef.current; const diff = Math.abs(scrollHeight - scrollTop); const bottom = diff === clientHeight || (diff <= clientHeight + 25 && diff >= clientHeight - 25); if (bottom) { setShowScrollButton(false); } else { setShowScrollButton(true); } }; let timeoutId = null; const debouncedHandleScroll = () => { clearTimeout(timeoutId); timeoutId = setTimeout(handleScroll, 100); }; const scrollHandler = (e) => { e.preventDefault(); scrollToBottom(); }; return (