diff --git a/lib/actions/message-actions.js b/lib/actions/message-actions.js --- a/lib/actions/message-actions.js +++ b/lib/actions/message-actions.js @@ -42,6 +42,7 @@ export type FetchMessagesBeforeCursorInput = { +threadID: string, +beforeMessageID: string, + +numMessagesToFetch?: ?number, }; const fetchMessagesBeforeCursor = ( @@ -61,6 +62,10 @@ }, }; + if (input.numMessagesToFetch) { + requests[keyserverID].numberPerThread = input.numMessagesToFetch; + } + const responses = await callKeyserverEndpoint('fetch_messages', requests); return { threadID, @@ -77,6 +82,7 @@ export type FetchMostRecentMessagesInput = { +threadID: string, + +numMessagesToFetch?: ?number, }; const fetchMostRecentMessagesActionTypes = Object.freeze({ @@ -102,6 +108,10 @@ }, }; + if (input.numMessagesToFetch) { + requests[keyserverID].numberPerThread = input.numMessagesToFetch; + } + const responses = await callKeyserverEndpoint('fetch_messages', requests); return { threadID, diff --git a/lib/shared/message-utils.js b/lib/shared/message-utils.js --- a/lib/shared/message-utils.js +++ b/lib/shared/message-utils.js @@ -713,7 +713,12 @@ }; } -function useFetchMessages(threadInfo: ThreadInfo): () => Promise { +type FetchMessagesOptions = { + +numMessagesToFetch?: ?number, +}; +function useFetchMessages( + threadInfo: ThreadInfo, +): (options?: ?FetchMessagesOptions) => Promise { const oldestMessageServerID = useOldestMessageServerID(threadInfo.id); const callFetchMessagesBeforeCursor = useFetchMessagesBeforeCursor(); const callFetchMostRecentMessages = useFetchMostRecentMessages(); @@ -729,45 +734,50 @@ state => state.messageStore.threads[threadID]?.messageIDs, ); - return React.useCallback(async () => { - if (threadTypeIsThick(threadInfo.type)) { - const promise = (async () => { - const currentNumberOfFetchedMessages = messageIDs?.length ?? 0; - return await fetchThickThreadMessages( - threadID, - defaultNumberPerThread, - currentNumberOfFetchedMessages, + return React.useCallback( + async (options?: ?FetchMessagesOptions) => { + const numMessagesToFetch = options?.numMessagesToFetch; + if (threadTypeIsThick(threadInfo.type)) { + const promise = (async () => { + const currentNumberOfFetchedMessages = messageIDs?.length ?? 0; + return await fetchThickThreadMessages( + threadID, + numMessagesToFetch ?? defaultNumberPerThread, + currentNumberOfFetchedMessages, + ); + })(); + await dispatchActionPromise( + fetchMessagesBeforeCursorActionTypes, + promise, ); - })(); - await dispatchActionPromise( - fetchMessagesBeforeCursorActionTypes, - promise, - ); - return; - } - if (oldestMessageServerID) { - await dispatchActionPromise( - fetchMessagesBeforeCursorActionTypes, - callFetchMessagesBeforeCursor({ - threadID, - beforeMessageID: oldestMessageServerID, - }), - ); - } else { - await dispatchActionPromise( - fetchMostRecentMessagesActionTypes, - callFetchMostRecentMessages({ threadID }), - ); - } - }, [ - callFetchMessagesBeforeCursor, - callFetchMostRecentMessages, - dispatchActionPromise, - messageIDs?.length, - oldestMessageServerID, - threadID, - threadInfo.type, - ]); + return; + } + if (oldestMessageServerID) { + await dispatchActionPromise( + fetchMessagesBeforeCursorActionTypes, + callFetchMessagesBeforeCursor({ + threadID, + beforeMessageID: oldestMessageServerID, + numMessagesToFetch, + }), + ); + } else { + await dispatchActionPromise( + fetchMostRecentMessagesActionTypes, + callFetchMostRecentMessages({ threadID, numMessagesToFetch }), + ); + } + }, + [ + callFetchMessagesBeforeCursor, + callFetchMostRecentMessages, + dispatchActionPromise, + messageIDs?.length, + oldestMessageServerID, + threadID, + threadInfo.type, + ], + ); } export {