2024-11-14 12:16:05 -05:00
|
|
|
import { useEffect, useRef, RefObject } from 'react';
|
2024-10-11 18:00:22 +05:30
|
|
|
|
|
|
|
|
export function useScrollToBottom<T extends HTMLElement>(): [
|
|
|
|
|
RefObject<T>,
|
|
|
|
|
RefObject<T>,
|
|
|
|
|
] {
|
|
|
|
|
const containerRef = useRef<T>(null);
|
|
|
|
|
const endRef = useRef<T>(null);
|
|
|
|
|
|
|
|
|
|
useEffect(() => {
|
|
|
|
|
const container = containerRef.current;
|
|
|
|
|
const end = endRef.current;
|
|
|
|
|
|
|
|
|
|
if (container && end) {
|
|
|
|
|
const observer = new MutationObserver(() => {
|
2024-11-14 12:16:05 -05:00
|
|
|
end.scrollIntoView({ behavior: 'instant', block: 'end' });
|
2024-10-11 18:00:22 +05:30
|
|
|
});
|
|
|
|
|
|
|
|
|
|
observer.observe(container, {
|
|
|
|
|
childList: true,
|
|
|
|
|
subtree: true,
|
2024-10-14 23:01:46 +05:30
|
|
|
attributes: true,
|
|
|
|
|
characterData: true,
|
2024-10-11 18:00:22 +05:30
|
|
|
});
|
|
|
|
|
|
|
|
|
|
return () => observer.disconnect();
|
|
|
|
|
}
|
|
|
|
|
}, []);
|
|
|
|
|
|
|
|
|
|
return [containerRef, endRef];
|
|
|
|
|
}
|