Created
December 11, 2023 18:08
-
-
Save Ashoat/38315c14a5a16974b840aff796a814eb to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff --git a/lib/selectors/user-selectors.js b/lib/selectors/user-selectors.js | |
index 1f5e9dfe97..280cf60de5 100644 | |
--- a/lib/selectors/user-selectors.js | |
+++ b/lib/selectors/user-selectors.js | |
@@ -58,92 +58,63 @@ function userIDsToRelativeUserInfos( | |
return relativeUserInfos; | |
} | |
-function getMinimallyEncodedRelativeMemberInfos( | |
- threadInfo: ?MinimallyEncodedRawThreadInfo, | |
- currentUserID: ?string, | |
- userInfos: UserInfos, | |
-): $ReadOnlyArray<MinimallyEncodedRelativeMemberInfo> { | |
- const relativeMemberInfos = []; | |
- if (!threadInfo) { | |
- return relativeMemberInfos; | |
- } | |
- const memberInfos = threadInfo.members; | |
- for (const memberInfo of memberInfos) { | |
- if (!memberInfo.role) { | |
- continue; | |
- } | |
- const username = userInfos[memberInfo.id] | |
- ? userInfos[memberInfo.id].username | |
- : null; | |
- if (memberInfo.id === currentUserID) { | |
- relativeMemberInfos.unshift({ | |
- ...memberInfo, | |
- username, | |
- isViewer: true, | |
- }); | |
- } else { | |
- relativeMemberInfos.push({ | |
- ...memberInfo, | |
- username, | |
- isViewer: false, | |
- }); | |
- } | |
- } | |
- return relativeMemberInfos; | |
-} | |
+type ExtractArrayParam = <T>(arr: $ReadOnlyArray<T>) => T; | |
-function getLegacyRelativeMemberInfos( | |
- threadInfo: ?LegacyRawThreadInfo, | |
+function getRelativeMemberInfos< | |
+ TI: MinimallyEncodedRawThreadInfo | LegacyRawThreadInfo, | |
+>( | |
+ threadInfo: ?TI, | |
currentUserID: ?string, | |
userInfos: UserInfos, | |
-): $ReadOnlyArray<LegacyRelativeMemberInfo> { | |
- const relativeMemberInfos = []; | |
+): $ReadOnlyArray<$ReadOnly<{ | |
+ ...$Call< | |
+ ExtractArrayParam, | |
+ $PropertyType<TI, 'members'>, | |
+ >, | |
+ +username: ?string, | |
+ +isViewer: boolean, | |
+}>> { | |
+ const relativeMemberInfos: Array<$ReadOnly<{ | |
+ ...$Call< | |
+ ExtractArrayParam, | |
+ $PropertyType<TI, 'members'>, | |
+ >, | |
+ +username: ?string, | |
+ +isViewer: boolean, | |
+ }>> = []; | |
if (!threadInfo) { | |
return relativeMemberInfos; | |
} | |
const memberInfos = threadInfo.members; | |
- for (const memberInfo of memberInfos) { | |
+ for (const memberInfoInput of memberInfos) { | |
+ const memberInfo: $Call< | |
+ ExtractArrayParam, | |
+ $PropertyType<TI, 'members'>, | |
+ > = memberInfoInput; | |
if (!memberInfo.role) { | |
continue; | |
} | |
- const username = userInfos[memberInfo.id] | |
+ const username: ?string = userInfos[memberInfo.id] | |
? userInfos[memberInfo.id].username | |
: null; | |
- if (memberInfo.id === currentUserID) { | |
- relativeMemberInfos.unshift({ | |
- ...memberInfo, | |
- username, | |
- isViewer: true, | |
- }); | |
- } else { | |
- relativeMemberInfos.push({ | |
- ...memberInfo, | |
- username, | |
- isViewer: false, | |
- }); | |
- } | |
+ const isViewer: boolean = memberInfo.id === currentUserID; | |
+ const relativeMemberInfo: $ReadOnly<{ | |
+ ...$Call< | |
+ ExtractArrayParam, | |
+ $PropertyType<TI, 'members'>, | |
+ >, | |
+ +username: ?string, | |
+ +isViewer: boolean, | |
+ }> = { | |
+ ...memberInfo, | |
+ username, | |
+ isViewer, | |
+ }; | |
+ relativeMemberInfos.unshift(relativeMemberInfo); | |
} | |
return relativeMemberInfos; | |
} | |
-function getRelativeMemberInfos( | |
- threadInfo: ?MinimallyEncodedRawThreadInfo | LegacyRawThreadInfo, | |
- currentUserID: ?string, | |
- userInfos: UserInfos, | |
-): $ReadOnlyArray< | |
- MinimallyEncodedRelativeMemberInfo | LegacyRelativeMemberInfo, | |
-> { | |
- if (threadInfo?.minimallyEncoded) { | |
- return getMinimallyEncodedRelativeMemberInfos( | |
- threadInfo, | |
- currentUserID, | |
- userInfos, | |
- ); | |
- } else { | |
- return getLegacyRelativeMemberInfos(threadInfo, currentUserID, userInfos); | |
- } | |
-} | |
- | |
const emptyArray: $ReadOnlyArray<RelativeMemberInfo> = []; | |
// Includes current user at the start | |
@@ -298,8 +269,6 @@ const savedEmojiAvatarSelectorForCurrentUser: ( | |
export { | |
userIDsToRelativeUserInfos, | |
getRelativeMemberInfos, | |
- getMinimallyEncodedRelativeMemberInfos, | |
- getLegacyRelativeMemberInfos, | |
relativeMemberInfoSelectorForMembersOfThread, | |
userInfoSelectorForPotentialMembers, | |
userSearchIndexForPotentialMembers, | |
diff --git a/lib/shared/thread-utils.js b/lib/shared/thread-utils.js | |
index 4793571e62..df2a3e0a37 100644 | |
--- a/lib/shared/thread-utils.js | |
+++ b/lib/shared/thread-utils.js | |
@@ -48,8 +48,7 @@ import { | |
threadInfosSelectorForThreadType, | |
} from '../selectors/thread-selectors.js'; | |
import { | |
- getLegacyRelativeMemberInfos, | |
- getMinimallyEncodedRelativeMemberInfos, | |
+ getRelativeMemberInfos, | |
usersWithPersonalThreadSelector, | |
} from '../selectors/user-selectors.js'; | |
import type { CalendarQuery } from '../types/entry-types.js'; | |
@@ -910,11 +909,9 @@ function threadInfoFromRawThreadInfo( | |
parentThreadID: rawThreadInfo.parentThreadID, | |
containingThreadID: rawThreadInfo.containingThreadID, | |
community: rawThreadInfo.community, | |
- members: getMinimallyEncodedRelativeMemberInfos( | |
- rawThreadInfo, | |
- viewerID, | |
- userInfos, | |
- ), | |
+ members: getRelativeMemberInfos< | |
+ MinimallyEncodedRawThreadInfo, | |
+ >(rawThreadInfo, viewerID, userInfos), | |
roles: rawThreadInfo.roles, | |
currentUser: getMinimallyEncodedCurrentUser( | |
rawThreadInfo, | |
@@ -935,7 +932,9 @@ function threadInfoFromRawThreadInfo( | |
parentThreadID: rawThreadInfo.parentThreadID, | |
containingThreadID: rawThreadInfo.containingThreadID, | |
community: rawThreadInfo.community, | |
- members: getLegacyRelativeMemberInfos(rawThreadInfo, viewerID, userInfos), | |
+ members: getRelativeMemberInfos< | |
+ LegacyRawThreadInfo, | |
+ >(rawThreadInfo, viewerID, userInfos), | |
roles: rawThreadInfo.roles, | |
currentUser: getCurrentUser(rawThreadInfo, viewerID, userInfos), | |
repliesCount: rawThreadInfo.repliesCount, |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment