chat / client /src /hooks /Artifacts /useAutoScroll.ts
helloya20's picture
Upload 2345 files
f0743f4 verified
// hooks/useAutoScroll.ts
import { useEffect, useState } from 'react';
interface UseAutoScrollProps {
ref: React.RefObject<HTMLElement>;
content: string;
isSubmitting: boolean;
}
export const useAutoScroll = ({ ref, content, isSubmitting }: UseAutoScrollProps) => {
const [userScrolled, setUserScrolled] = useState(false);
useEffect(() => {
const scrollContainer = ref.current;
if (!scrollContainer) {
return;
}
const handleScroll = () => {
const { scrollTop, scrollHeight, clientHeight } = scrollContainer;
const isNearBottom = scrollHeight - scrollTop - clientHeight < 50;
if (!isNearBottom) {
setUserScrolled(true);
} else {
setUserScrolled(false);
}
};
scrollContainer.addEventListener('scroll', handleScroll);
return () => {
scrollContainer.removeEventListener('scroll', handleScroll);
};
}, [ref]);
useEffect(() => {
const scrollContainer = ref.current;
if (!scrollContainer || !isSubmitting || userScrolled) {
return;
}
scrollContainer.scrollTop = scrollContainer.scrollHeight;
}, [content, isSubmitting, userScrolled, ref]);
return { userScrolled };
};