Page MenuHomePhabricator

D3566.id11128.diff
No OneTemporary

D3566.id11128.diff

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
@@ -5,6 +5,7 @@
import type {
FetchMessageInfosPayload,
SendMessageResult,
+ SimpleMessagesPayload,
} from '../types/message-types';
import type { FetchJSON, FetchResultInfo } from '../utils/fetch-json';
@@ -56,6 +57,29 @@
};
};
+const fetchSingleMostRecentMessagesFromThreadsActionTypes = Object.freeze({
+ started: 'FETCH_SINGLE_MOST_RECENT_MESSAGES_FROM_THREADS_STARTED',
+ success: 'FETCH_SINGLE_MOST_RECENT_MESSAGES_FROM_THREADS_SUCCESS',
+ failed: 'FETCH_SINGLE_MOST_RECENT_MESSAGES_FROM_THREADS_FAILED',
+});
+const fetchSingleMostRecentMessagesFromThreads = (
+ fetchJSON: FetchJSON,
+): ((
+ threadIDs: $ReadOnlyArray<string>,
+) => Promise<SimpleMessagesPayload>) => async threadIDs => {
+ const cursors = Object.fromEntries(
+ threadIDs.map(threadID => [threadID, null]),
+ );
+ const response = await fetchJSON('fetch_messages', {
+ cursors,
+ numberPerThread: 1,
+ });
+ return {
+ rawMessageInfos: response.rawMessageInfos,
+ truncationStatuses: response.truncationStatuses,
+ };
+};
+
const sendTextMessageActionTypes = Object.freeze({
started: 'SEND_TEXT_MESSAGE_STARTED',
success: 'SEND_TEXT_MESSAGE_SUCCESS',
@@ -142,6 +166,8 @@
fetchMessagesBeforeCursor,
fetchMostRecentMessagesActionTypes,
fetchMostRecentMessages,
+ fetchSingleMostRecentMessagesFromThreadsActionTypes,
+ fetchSingleMostRecentMessagesFromThreads,
sendTextMessageActionTypes,
sendTextMessage,
createLocalMessageActionType,
diff --git a/lib/reducers/message-reducer.js b/lib/reducers/message-reducer.js
--- a/lib/reducers/message-reducer.js
+++ b/lib/reducers/message-reducer.js
@@ -29,6 +29,7 @@
processMessagesActionType,
messageStorePruneActionType,
createLocalMessageActionType,
+ fetchSingleMostRecentMessagesFromThreadsActionTypes,
setMessageStoreMessages,
} from '../actions/message-actions';
import {
@@ -807,6 +808,20 @@
action.type,
);
return { messageStoreOperations, messageStore: mergedMessageStore };
+ } else if (
+ action.type === fetchSingleMostRecentMessagesFromThreadsActionTypes.success
+ ) {
+ const {
+ messageStoreOperations,
+ messageStore: mergedMessageStore,
+ } = mergeNewMessages(
+ messageStore,
+ action.payload.rawMessageInfos,
+ action.payload.truncationStatuses,
+ newThreadInfos,
+ action.type,
+ );
+ return { messageStoreOperations, messageStore: mergedMessageStore };
} else if (
action.type === fetchMessagesBeforeCursorActionTypes.success ||
action.type === fetchMostRecentMessagesActionTypes.success
diff --git a/lib/types/message-types.js b/lib/types/message-types.js
--- a/lib/types/message-types.js
+++ b/lib/types/message-types.js
@@ -467,6 +467,10 @@
+truncationStatuses: MessageTruncationStatuses,
+currentAsOf: number,
};
+export type SimpleMessagesPayload = {
+ +rawMessageInfos: $ReadOnlyArray<RawMessageInfo>,
+ +truncationStatuses: MessageTruncationStatuses,
+};
export const defaultNumberPerThread = 20;
export const defaultMaxMessageAge = 14 * 24 * 60 * 60 * 1000; // 2 weeks
diff --git a/lib/types/redux-types.js b/lib/types/redux-types.js
--- a/lib/types/redux-types.js
+++ b/lib/types/redux-types.js
@@ -43,6 +43,7 @@
MessageStorePrunePayload,
LocallyComposedMessageInfo,
ClientDBMessageInfo,
+ SimpleMessagesPayload,
} from './message-types';
import type { RawTextMessageInfo } from './messages/text';
import type { BaseNavInfo } from './nav-types';
@@ -464,6 +465,22 @@
+payload: FetchMessageInfosPayload,
+loadingInfo: LoadingInfo,
}
+ | {
+ +type: 'FETCH_SINGLE_MOST_RECENT_MESSAGES_FROM_THREADS_STARTED',
+ +payload?: void,
+ +loadingInfo: LoadingInfo,
+ }
+ | {
+ +type: 'FETCH_SINGLE_MOST_RECENT_MESSAGES_FROM_THREADS_FAILED',
+ +error: true,
+ +payload: Error,
+ +loadingInfo: LoadingInfo,
+ }
+ | {
+ +type: 'FETCH_SINGLE_MOST_RECENT_MESSAGES_FROM_THREADS_SUCCESS',
+ +payload: SimpleMessagesPayload,
+ +loadingInfo: LoadingInfo,
+ }
| {
+type: 'SEND_TEXT_MESSAGE_STARTED',
+loadingInfo?: LoadingInfo,

File Metadata

Mime Type
text/plain
Expires
Sun, Nov 17, 7:53 PM (21 h, 13 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
2530847
Default Alt Text
D3566.id11128.diff (4 KB)

Event Timeline