MCPcopy Create free account
hub / github.com/CommE2E/comm / useExistingThreadInfoFinder

Function useExistingThreadInfoFinder

lib/shared/thread-utils.js:1147–1226  ·  view source on GitHub ↗
(
  baseThreadInfo: ?ThreadInfo,
  selectedProtocol: ?ProtocolName,
)

Source from the content-addressed store, hash-verified

1145) => ?ThreadInfo;
1146
1147function 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

Calls 8

useSelectorFunction · 0.90
useLoggedInUserInfoFunction · 0.90
getProtocolByNameFunction · 0.90
threadIsPendingFunction · 0.85
threadTypeCanBePendingFunction · 0.85
getPendingThreadIDFunction · 0.85
createPendingThreadFunction · 0.85
getMethod · 0.65

Tested by

no test coverage detected