( baseThreadInfo: ?ThreadInfo, selectedProtocol: ?ProtocolName, )
| 1145 | ) => ?ThreadInfo; |
| 1146 | |
| 1147 | function useExistingThreadInfoFinder( |
| 1148 | baseThreadInfo: ?ThreadInfo, |
| 1149 | selectedProtocol: ?ProtocolName, |
| 1150 | ): ExistingThreadInfoFinder { |
| 1151 | const threadInfos = useSelector(threadInfoSelector); |
| 1152 | const loggedInUserInfo = useLoggedInUserInfo(); |
| 1153 | |
| 1154 | const pendingToRealizedThreadIDs = useSelector(state => |
| 1155 | pendingToRealizedThreadIDsSelector(state.threadStore.threadInfos), |
| 1156 | ); |
| 1157 | return React.useCallback( |
| 1158 | (params: ExistingThreadInfoFinderParams): ?ThreadInfo => { |
| 1159 | if (!baseThreadInfo) { |
| 1160 | return null; |
| 1161 | } |
| 1162 | |
| 1163 | const realizedThreadInfo = threadInfos[baseThreadInfo.id]; |
| 1164 | if (realizedThreadInfo) { |
| 1165 | return realizedThreadInfo; |
| 1166 | } |
| 1167 | |
| 1168 | if (!loggedInUserInfo || !threadIsPending(baseThreadInfo.id)) { |
| 1169 | return baseThreadInfo; |
| 1170 | } |
| 1171 | const viewerID = loggedInUserInfo?.id; |
| 1172 | |
| 1173 | invariant( |
| 1174 | threadTypeCanBePending(baseThreadInfo.type), |
| 1175 | `ThreadInfo has pending ID ${baseThreadInfo.id}, but type that ` + |
| 1176 | `should not be pending ${baseThreadInfo.type}`, |
| 1177 | ); |
| 1178 | |
| 1179 | const { searching, userInfoInputArray } = params; |
| 1180 | |
| 1181 | const { sourceMessageID } = baseThreadInfo; |
| 1182 | |
| 1183 | const protocol = getProtocolByName(selectedProtocol) ?? dmThreadProtocol; |
| 1184 | |
| 1185 | let pendingThreadID; |
| 1186 | if (searching) { |
| 1187 | pendingThreadID = getPendingThreadID( |
| 1188 | protocol.pendingThreadType(userInfoInputArray.length), |
| 1189 | [...userInfoInputArray.map(user => user.id), viewerID], |
| 1190 | sourceMessageID, |
| 1191 | selectedProtocol, |
| 1192 | ); |
| 1193 | } else { |
| 1194 | pendingThreadID = getPendingThreadID( |
| 1195 | baseThreadInfo.type, |
| 1196 | baseThreadInfo.members.map(member => member.id), |
| 1197 | sourceMessageID, |
| 1198 | ); |
| 1199 | } |
| 1200 | const realizedThreadID = pendingToRealizedThreadIDs.get(pendingThreadID); |
| 1201 | if (realizedThreadID && threadInfos[realizedThreadID]) { |
| 1202 | return threadInfos[realizedThreadID]; |
| 1203 | } |
| 1204 |
no test coverage detected