Changeset View
Changeset View
Standalone View
Standalone View
lib/selectors/chat-selectors.js
Show First 20 Lines • Show All 285 Lines • ▼ Show 20 Lines | | { | ||||
+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", | ||||
); | ); | ||||
▲ Show 20 Lines • Show All 134 Lines • Show Last 20 Lines |