Skip to content

Instantly share code, notes, and snippets.

@Ashoat
Created December 11, 2023 18:08
Show Gist options
  • Save Ashoat/38315c14a5a16974b840aff796a814eb to your computer and use it in GitHub Desktop.
Save Ashoat/38315c14a5a16974b840aff796a814eb to your computer and use it in GitHub Desktop.
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