Skip to content

Commit d2aefb8

Browse files
MRN-880
1 parent 502f7d7 commit d2aefb8

File tree

4 files changed

+57
-5
lines changed

4 files changed

+57
-5
lines changed

src/components/ConversationList.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import { getCurrentUserJid } from '../uikitMethods';
1919
import ChatMessage from './ChatMessage';
2020
import store from '../redux/store';
2121
import { highlightMessage } from '../redux/chatMessageDataSlice';
22+
import { getMergedMediaMessages } from '../hooks/useMediaMessaegs';
2223

2324
export const conversationFlatListRef = createRef();
2425
conversationFlatListRef.current = {};
@@ -46,6 +47,7 @@ const ConversationList = ({ chatUser }) => {
4647
setChatLoading(false);
4748
};
4849
initialize();
50+
getMergedMediaMessages(chatUser);
4951
}, [chatUser]);
5052

5153
// Monitor new messages and update counter

src/hooks/useMediaMessaegs.js

Lines changed: 34 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { useEffect, useMemo, useState } from 'react';
22
import { getUserIdFromJid } from '../helpers/chatHelpers';
3-
import { useMediaMessages } from '../redux/reduxHook';
3+
import { getMediaMessages, useMediaMessages } from '../redux/reduxHook';
44
import SDK from '../SDK/SDK';
55

66
const cache = {};
@@ -21,7 +21,7 @@ export const useMergedMediaMessages = (jid, mediaTypeArr = []) => {
2121
setFetchedMediaMessages(cache[cacheKey]);
2222
return;
2323
}
24-
const getMediaMessages = async () => {
24+
const getMediaMessage = async () => {
2525
if (!userId) {
2626
return;
2727
}
@@ -37,7 +37,7 @@ export const useMergedMediaMessages = (jid, mediaTypeArr = []) => {
3737
setIsLoading(false);
3838
};
3939

40-
getMediaMessages();
40+
getMediaMessage();
4141
}, [userId]);
4242

4343
// Memoized merged media messages
@@ -73,3 +73,34 @@ export const useMergedMediaMessages = (jid, mediaTypeArr = []) => {
7373

7474
return { mergedMediaMessages, isLoading };
7575
};
76+
77+
export const getMergedMediaMessages = async (jid, mediaTypeArr = []) => {
78+
const userId = getUserIdFromJid(jid);
79+
const cacheKey = `${jid}-${mediaTypeArr.join(',')}`;
80+
81+
// Get media messages from Redux
82+
const stateMediaMessages = getMediaMessages(userId, mediaTypeArr);
83+
const fetchedData = await SDK.getMediaMessages({ jid, messageTypes: mediaTypeArr });
84+
const fetchedMessagesMap = fetchedData?.data ? { ...fetchedData.data } : {};
85+
86+
stateMediaMessages.forEach(stateMsg => {
87+
if (fetchedMessagesMap[stateMsg.msgId]) {
88+
fetchedMessagesMap[stateMsg.msgId] = {
89+
...fetchedMessagesMap[stateMsg.msgId],
90+
...stateMsg,
91+
msgBody: {
92+
...fetchedMessagesMap[stateMsg.msgId].msgBody,
93+
...stateMsg.msgBody,
94+
media: {
95+
...fetchedMessagesMap[stateMsg.msgId].msgBody?.media,
96+
...stateMsg.msgBody?.media,
97+
},
98+
},
99+
};
100+
} else {
101+
fetchedMessagesMap[stateMsg.msgId] = stateMsg;
102+
}
103+
});
104+
105+
cache[cacheKey] = Object.values(fetchedMessagesMap);
106+
};

src/redux/reduxHook.js

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,3 +134,17 @@ export const getAnySelectedChatMessages = userId => {
134134
return messages.some(item => item.isSelected === 1);
135135
};
136136
export const getRoomLink = () => store.getState().callData?.connectionState?.roomLink;
137+
138+
export const getMediaMessages = (userId, mediaTypeArr = []) => {
139+
const state = store.getState();
140+
const messages = state.chatMessagesData?.[userId] || [];
141+
142+
return messages.filter(
143+
({ msgBody: { message_type = '', media } = {}, deleteStatus, recallStatus }) =>
144+
mediaTypeArr.includes(message_type) &&
145+
deleteStatus === 0 &&
146+
recallStatus === 0 &&
147+
media?.is_downloaded === 2 &&
148+
media?.is_uploading === 2,
149+
);
150+
};

src/screens/PostPreViewPage.js

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import { getCurrentUserJid } from '../uikitMethods';
1414

1515
const PostPreViewPage = () => {
1616
const stringSet = getStringSet();
17+
const pagerRef = React.useRef();
1718
const themeColorPalatte = useThemeColorPalatte();
1819
const { params: { jid = '', msgId = '' } = {} } = useRoute();
1920
const navigation = useNavigation();
@@ -40,7 +41,7 @@ const PostPreViewPage = () => {
4041
};
4142

4243
const initialPage = React.useMemo(() => {
43-
const selectedMsgIndex = messageList.findIndex(message => {
44+
const selectedMsgIndex = messageList.reverse().findIndex(message => {
4445
return message.msgId === msgId;
4546
});
4647
setCurrentIndex(selectedMsgIndex);
@@ -49,7 +50,11 @@ const PostPreViewPage = () => {
4950

5051
const renderMediaPages = React.useMemo(() => {
5152
return (
52-
<PagerView style={commonStyles.flex1} initialPage={initialPage} onPageScroll={handlePageSelected}>
53+
<PagerView
54+
ref={pagerRef}
55+
style={commonStyles.flex1}
56+
initialPage={initialPage}
57+
onPageScroll={handlePageSelected}>
5358
{messageList.map?.(item => (
5459
<PostView key={item.msgId} item={item} />
5560
))}

0 commit comments

Comments
 (0)