import React, { useEffect } from 'react'; import { throttle } from '../utils/misc'; export const scrollToBottom = (requiresNearBottom: boolean, delay?: number) => { const mainScrollElem = document.getElementById('main-scroll'); if (!mainScrollElem) return; const spaceToBottom = mainScrollElem.scrollHeight - mainScrollElem.scrollTop - mainScrollElem.clientHeight; if (!requiresNearBottom || spaceToBottom < 100) { setTimeout( () => mainScrollElem.scrollTo({ top: mainScrollElem.scrollHeight }), delay ?? 80 ); } }; const scrollToBottomThrottled = throttle(scrollToBottom, 80); export function useChatScroll(msgListRef: React.RefObject) { useEffect(() => { if (!msgListRef.current) return; const resizeObserver = new ResizeObserver((_) => { scrollToBottomThrottled(true, 10); }); resizeObserver.observe(msgListRef.current); return () => { resizeObserver.disconnect(); }; }, [msgListRef]); }