Changeset View
Changeset View
Standalone View
Standalone View
lib/selectors/chat-selectors.js
Show First 20 Lines • Show All 272 Lines • ▼ Show 20 Lines | export type RobotextChatMessageInfoItem = { | ||||
+messageInfoType: 'robotext', | +messageInfoType: 'robotext', | ||||
+messageInfo: RobotextMessageInfo, | +messageInfo: RobotextMessageInfo, | ||||
+startsConversation: boolean, | +startsConversation: boolean, | ||||
+startsCluster: boolean, | +startsCluster: boolean, | ||||
endsCluster: boolean, | endsCluster: boolean, | ||||
+robotext: EntityText, | +robotext: EntityText, | ||||
+threadCreatedFromMessage: ?ThreadInfo, | +threadCreatedFromMessage: ?ThreadInfo, | ||||
+reactions: ReactionInfo, | +reactions: ReactionInfo, | ||||
+hasBeenEdited: boolean, | |||||
}; | }; | ||||
export type ChatMessageInfoItem = | export type ChatMessageInfoItem = | ||||
| RobotextChatMessageInfoItem | | RobotextChatMessageInfoItem | ||||
| { | | { | ||||
+itemType: 'message', | +itemType: 'message', | ||||
+messageInfoType: 'composable', | +messageInfoType: 'composable', | ||||
+messageInfo: ComposableMessageInfo, | +messageInfo: ComposableMessageInfo, | ||||
+localMessageInfo: ?LocalMessageInfo, | +localMessageInfo: ?LocalMessageInfo, | ||||
+startsConversation: boolean, | +startsConversation: boolean, | ||||
+startsCluster: boolean, | +startsCluster: boolean, | ||||
endsCluster: boolean, | endsCluster: boolean, | ||||
+threadCreatedFromMessage: ?ThreadInfo, | +threadCreatedFromMessage: ?ThreadInfo, | ||||
+reactions: ReactionInfo, | +reactions: ReactionInfo, | ||||
+hasBeenEdited: boolean, | |||||
}; | }; | ||||
export type ChatMessageItem = { itemType: 'loader' } | ChatMessageInfoItem; | export type ChatMessageItem = { itemType: 'loader' } | ChatMessageInfoItem; | ||||
export type ReactionInfo = { +[reaction: string]: MessageReactionInfo }; | export type ReactionInfo = { +[reaction: string]: MessageReactionInfo }; | ||||
type MessageReactionInfo = { | type MessageReactionInfo = { | ||||
+viewerReacted: boolean, | +viewerReacted: boolean, | ||||
+users: $ReadOnlyArray<RelativeUserInfo>, | +users: $ReadOnlyArray<RelativeUserInfo>, | ||||
}; | }; | ||||
▲ Show 20 Lines • Show All 90 Lines • ▼ Show 20 Lines | let originalMessageInfo = | ||||
messageInfo.type === messageTypes.SIDEBAR_SOURCE | messageInfo.type === messageTypes.SIDEBAR_SOURCE | ||||
? messageInfo.sourceMessage | ? messageInfo.sourceMessage | ||||
: messageInfo; | : messageInfo; | ||||
if (isEmptyMediaMessage(originalMessageInfo)) { | if (isEmptyMediaMessage(originalMessageInfo)) { | ||||
continue; | continue; | ||||
} | } | ||||
let hasBeenEdited = false; | |||||
if ( | if ( | ||||
originalMessageInfo.type === messageTypes.TEXT && | originalMessageInfo.type === messageTypes.TEXT && | ||||
originalMessageInfo.id | originalMessageInfo.id | ||||
) { | ) { | ||||
const newText = targetMessageEditMap.get(originalMessageInfo.id); | const newText = targetMessageEditMap.get(originalMessageInfo.id); | ||||
if (newText !== undefined) { | if (newText !== undefined) { | ||||
originalMessageInfo = { ...originalMessageInfo, text: newText }; | hasBeenEdited = true; | ||||
originalMessageInfo = { | |||||
...originalMessageInfo, | |||||
text: newText, | |||||
}; | |||||
} | } | ||||
} | } | ||||
let startsConversation = true; | let startsConversation = true; | ||||
let startsCluster = true; | let startsCluster = true; | ||||
if ( | if ( | ||||
lastMessageInfo && | lastMessageInfo && | ||||
lastMessageInfo.time + msInFiveMinutes > originalMessageInfo.time | lastMessageInfo.time + msInFiveMinutes > originalMessageInfo.time | ||||
▲ Show 20 Lines • Show All 69 Lines • ▼ Show 20 Lines | if (isComposableMessageType(originalMessageInfo.type)) { | ||||
messageInfoType: 'composable', | messageInfoType: 'composable', | ||||
messageInfo: originalMessageInfo, | messageInfo: originalMessageInfo, | ||||
localMessageInfo, | localMessageInfo, | ||||
startsConversation, | startsConversation, | ||||
startsCluster, | startsCluster, | ||||
endsCluster: false, | endsCluster: false, | ||||
threadCreatedFromMessage, | threadCreatedFromMessage, | ||||
reactions: renderedReactions, | reactions: renderedReactions, | ||||
hasBeenEdited, | |||||
}); | }); | ||||
} else { | } else { | ||||
invariant( | invariant( | ||||
originalMessageInfo.type !== messageTypes.TEXT && | originalMessageInfo.type !== messageTypes.TEXT && | ||||
originalMessageInfo.type !== messageTypes.IMAGES && | originalMessageInfo.type !== messageTypes.IMAGES && | ||||
originalMessageInfo.type !== messageTypes.MULTIMEDIA, | originalMessageInfo.type !== messageTypes.MULTIMEDIA, | ||||
"Flow doesn't understand isComposableMessageType above", | "Flow doesn't understand isComposableMessageType above", | ||||
); | ); | ||||
const robotext = robotextForMessageInfo( | const robotext = robotextForMessageInfo( | ||||
originalMessageInfo, | originalMessageInfo, | ||||
threadInfos[threadID], | threadInfos[threadID], | ||||
); | ); | ||||
chatMessageItems.push({ | chatMessageItems.push({ | ||||
itemType: 'message', | itemType: 'message', | ||||
messageInfoType: 'robotext', | messageInfoType: 'robotext', | ||||
messageInfo: originalMessageInfo, | messageInfo: originalMessageInfo, | ||||
startsConversation, | startsConversation, | ||||
startsCluster, | startsCluster, | ||||
endsCluster: false, | endsCluster: false, | ||||
threadCreatedFromMessage, | threadCreatedFromMessage, | ||||
robotext, | robotext, | ||||
reactions: renderedReactions, | reactions: renderedReactions, | ||||
hasBeenEdited, | |||||
}); | }); | ||||
} | } | ||||
lastMessageInfo = originalMessageInfo; | lastMessageInfo = originalMessageInfo; | ||||
} | } | ||||
if (chatMessageItems.length > 0) { | if (chatMessageItems.length > 0) { | ||||
const lastMessageItem = chatMessageItems[chatMessageItems.length - 1]; | const lastMessageItem = chatMessageItems[chatMessageItems.length - 1]; | ||||
invariant(lastMessageItem.itemType === 'message', 'should be message'); | invariant(lastMessageItem.itemType === 'message', 'should be message'); | ||||
lastMessageItem.endsCluster = true; | lastMessageItem.endsCluster = true; | ||||
▲ Show 20 Lines • Show All 112 Lines • Show Last 20 Lines |