@livelike/react-native
Version:
LiveLike React Native package
60 lines (56 loc) • 1.53 kB
text/typescript
import {
addMessageListener,
getMessageList,
IMessageListenerCallbackArgs,
removeMessageListener,
} from '@livelike/javascript';
import { useEffect } from 'react';
import { chatMessageStoreActions } from '../store/chatMessage';
import { useAnalytics } from './useAnalytics';
export function useChatMessagesEffect({ roomId }) {
const { trackEvent } = useAnalytics();
useEffect(() => {
if (!roomId) {
return;
}
getMessageList(roomId).then((res) => {
chatMessageStoreActions.updateChatMessageStateAction({
roomId,
chatMessages: res.messages,
messageListIterator: res.done ? undefined : res.next,
chatMessagesLoaded: true,
});
trackEvent('Chat Message History Loaded', {
roomId,
});
});
function onMessage({ event, message }: IMessageListenerCallbackArgs) {
if (event === 'messagereceived') {
chatMessageStoreActions.addChatMessageAction({
roomId,
chatMessage: message,
});
trackEvent('Chat Message Received', { roomId, message });
}
if (event === 'messagedeleted') {
chatMessageStoreActions.deleteChatMessageAction({
roomId,
chatMessage: message,
});
trackEvent('Chat Message Deleted', {
roomId,
message,
});
}
}
addMessageListener(
{
roomId,
},
onMessage
);
return () => {
removeMessageListener({ roomId }, onMessage);
};
}, [roomId]);
}