stream-chat-react
Version:
React components to create chat conversations or livestream style chat
33 lines (32 loc) • 1.25 kB
JavaScript
import { useEffect, useRef, useState } from 'react';
export const useScrollToBottomOnNewMessage = ({ messages, scrollToBottom, scrollToLatestMessageOnFocus, }) => {
const [newMessagesReceivedInBackground, setNewMessagesReceivedInBackground] = useState(false);
const scrollToBottomIfConfigured = useRef(undefined);
scrollToBottomIfConfigured.current = (event) => {
if (!scrollToLatestMessageOnFocus ||
!newMessagesReceivedInBackground ||
event.target !== window) {
return;
}
setTimeout(scrollToBottom, 100);
};
useEffect(() => {
setNewMessagesReceivedInBackground(true);
}, [messages]);
useEffect(() => {
const handleFocus = (event) => {
scrollToBottomIfConfigured.current?.(event);
};
const handleBlur = () => {
setNewMessagesReceivedInBackground(false);
};
if (typeof window !== 'undefined') {
window.addEventListener('focus', handleFocus);
window.addEventListener('blur', handleBlur);
}
return () => {
window.removeEventListener('focus', handleFocus);
window.removeEventListener('blur', handleBlur);
};
}, []);
};