stream-chat-react-native-core
Version:
The official React Native and Expo components for Stream Chat, a service for building chat applications
44 lines (37 loc) • 1.32 kB
text/typescript
import { useEffect, useRef } from 'react';
import type { LocalMessage } from 'stream-chat';
export function useShouldScrollToRecentOnNewOwnMessage(
rawMessageList: LocalMessage[],
currentUserId?: string,
) {
const lastFocusedOwnMessageId = useRef('');
const initialFocusRegistered = useRef(false);
const messagesRef = useRef(rawMessageList);
messagesRef.current = rawMessageList;
const isMyOwnNewMessageRef = useRef(() => {
if (messagesRef.current && messagesRef.current.length > 0) {
const lastMessage = messagesRef.current[messagesRef.current.length - 1];
if (
lastMessage &&
lastMessage.user?.id === currentUserId &&
lastFocusedOwnMessageId.current !== lastMessage.id
) {
lastFocusedOwnMessageId.current = lastMessage.id;
return true;
}
}
return false;
});
useEffect(() => {
if (rawMessageList && rawMessageList.length) {
if (!initialFocusRegistered.current) {
initialFocusRegistered.current = true;
const lastMessage = rawMessageList[rawMessageList.length - 1];
if (lastMessage && lastMessage.user?.id === currentUserId) {
lastFocusedOwnMessageId.current = lastMessage.id;
}
}
}
}, [currentUserId, rawMessageList]);
return isMyOwnNewMessageRef;
}