Changeset View
Changeset View
Standalone View
Standalone View
lib/selectors/user-selectors.js
Show First 20 Lines • Show All 157 Lines • ▼ Show 20 Lines | for (const id in userInfos) { | ||||
) { | ) { | ||||
availableUsers[id] = { id, username, relationshipStatus }; | availableUsers[id] = { id, username, relationshipStatus }; | ||||
} | } | ||||
} | } | ||||
return availableUsers; | return availableUsers; | ||||
}, | }, | ||||
); | ); | ||||
function searchIndexFromUserInfos(userInfos: { | |||||
[id: string]: AccountUserInfo, | |||||
}) { | |||||
const searchIndex = new SearchIndex(); | |||||
for (const id in userInfos) { | |||||
searchIndex.addEntry(id, userInfos[id].username); | |||||
} | |||||
return searchIndex; | |||||
} | |||||
const userSearchIndexForPotentialMembers: ( | |||||
state: BaseAppState<>, | |||||
) => SearchIndex = createSelector( | |||||
userInfoSelectorForPotentialMembers, | |||||
searchIndexFromUserInfos, | |||||
); | |||||
const isLoggedIn = (state: BaseAppState<>): boolean => | const isLoggedIn = (state: BaseAppState<>): boolean => | ||||
!!( | !!( | ||||
state.currentUserInfo && | state.currentUserInfo && | ||||
!state.currentUserInfo.anonymous && | !state.currentUserInfo.anonymous && | ||||
state.dataLoaded | state.dataLoaded | ||||
); | ); | ||||
const addUsersToSearchIndex = ( | const addUsersToSearchIndex = ( | ||||
userInfos: UserInfos, | userInfos: UserInfos, | ||||
searchIndex: SearchIndex | SentencePrefixSearchIndex, | searchIndex: SearchIndex | SentencePrefixSearchIndex, | ||||
): void => { | ): void => { | ||||
for (const id in userInfos) { | for (const id in userInfos) { | ||||
const { username } = userInfos[id]; | const { username } = userInfos[id]; | ||||
if (!username) { | if (!username) { | ||||
continue; | continue; | ||||
} | } | ||||
searchIndex.addEntry(id, username); | searchIndex.addEntry(id, username); | ||||
} | } | ||||
}; | }; | ||||
const userStoreSearchIndex: (state: BaseAppState<>) => SearchIndex = | |||||
createSelector( | |||||
(state: BaseAppState<>) => state.userStore.userInfos, | |||||
(userInfos: UserInfos) => { | |||||
const searchIndex = new SearchIndex(); | |||||
addUsersToSearchIndex(userInfos, searchIndex); | |||||
return searchIndex; | |||||
}, | |||||
); | |||||
const userStoreMentionSearchIndex: ( | const userStoreMentionSearchIndex: ( | ||||
state: BaseAppState<>, | state: BaseAppState<>, | ||||
) => SentencePrefixSearchIndex = createSelector( | ) => SentencePrefixSearchIndex = createSelector( | ||||
(state: BaseAppState<>) => state.userStore.userInfos, | (state: BaseAppState<>) => state.userStore.userInfos, | ||||
(userInfos: UserInfos) => { | (userInfos: UserInfos) => { | ||||
const searchIndex = new SentencePrefixSearchIndex(); | const searchIndex = new SentencePrefixSearchIndex(); | ||||
addUsersToSearchIndex(userInfos, searchIndex); | addUsersToSearchIndex(userInfos, searchIndex); | ||||
return searchIndex; | return searchIndex; | ||||
Show All 40 Lines | ) => () => ClientEmojiAvatar = createSelector( | ||||
}, | }, | ||||
); | ); | ||||
export { | export { | ||||
userIDsToRelativeUserInfos, | userIDsToRelativeUserInfos, | ||||
getRelativeMemberInfos, | getRelativeMemberInfos, | ||||
relativeMemberInfoSelectorForMembersOfThread, | relativeMemberInfoSelectorForMembersOfThread, | ||||
userInfoSelectorForPotentialMembers, | userInfoSelectorForPotentialMembers, | ||||
userSearchIndexForPotentialMembers, | |||||
isLoggedIn, | isLoggedIn, | ||||
userStoreSearchIndex, | |||||
userStoreMentionSearchIndex, | userStoreMentionSearchIndex, | ||||
usersWithPersonalThreadSelector, | usersWithPersonalThreadSelector, | ||||
savedEmojiAvatarSelectorForCurrentUser, | savedEmojiAvatarSelectorForCurrentUser, | ||||
}; | }; |