diff --git a/lib/shared/user-utils.js b/lib/shared/user-utils.js --- a/lib/shared/user-utils.js +++ b/lib/shared/user-utils.js @@ -7,7 +7,8 @@ RawThreadInfo, ThreadInfo, } from '../types/thread-types'; -import type { UserInfo, UserInfos } from '../types/user-types'; +import type { UserInfo } from '../types/user-types'; +import { useSelector } from '../utils/redux-utils'; import { memberHasAdminPowers } from './thread-utils'; function stringForUser(user: { @@ -43,10 +44,10 @@ return false; } -function getKeyserverAdmin( +function useKeyserverAdmin( community: ThreadInfo | RawThreadInfo | ServerThreadInfo, - userInfos: UserInfos, ): ?UserInfo { + const userInfos = useSelector(state => state.userStore.userInfos); // This hack only works as long as there is only one admin // Linear task to revert this: // https://linear.app/comm/issue/ENG-1707/revert-fix-getting-the-keyserver-admin-info @@ -54,4 +55,4 @@ return admin ? userInfos[admin.id] : undefined; } -export { stringForUser, stringForUserExplicit, isStaff, getKeyserverAdmin }; +export { stringForUser, stringForUserExplicit, isStaff, useKeyserverAdmin }; diff --git a/native/components/community-pill.react.js b/native/components/community-pill.react.js --- a/native/components/community-pill.react.js +++ b/native/components/community-pill.react.js @@ -3,10 +3,9 @@ import * as React from 'react'; import { View, StyleSheet } from 'react-native'; -import { getKeyserverAdmin } from 'lib/shared/user-utils'; +import { useKeyserverAdmin } from 'lib/shared/user-utils'; import type { ThreadInfo } from 'lib/types/thread-types'; -import { useSelector } from '../redux/redux-utils'; import { useColors } from '../themes/colors'; import CommIcon from './comm-icon.react'; import Pill from './pill.react'; @@ -18,11 +17,8 @@ function CommunityPill(props: Props): React.Node { const { community } = props; - const userInfos = useSelector(state => state.userStore.userInfos); - const keyserverOperatorUsername: ?string = React.useMemo( - () => getKeyserverAdmin(community, userInfos)?.username, - [community, userInfos], - ); + const keyserverAdmin = useKeyserverAdmin(community); + const keyserverOperatorUsername = keyserverAdmin?.username; const colors = useColors(); const keyserverOperatorLabel: ?React.Node = React.useMemo(() => { diff --git a/web/chat/chat-thread-ancestors.react.js b/web/chat/chat-thread-ancestors.react.js --- a/web/chat/chat-thread-ancestors.react.js +++ b/web/chat/chat-thread-ancestors.react.js @@ -5,11 +5,10 @@ import { useAncestorThreads } from 'lib/shared/ancestor-threads'; import { colorIsDark } from 'lib/shared/thread-utils'; -import { getKeyserverAdmin } from 'lib/shared/user-utils'; +import { useKeyserverAdmin } from 'lib/shared/user-utils'; import type { ThreadInfo } from 'lib/types/thread-types'; import CommIcon from '../CommIcon.react'; -import { useSelector } from '../redux/redux-utils'; import SWMansionIcon from '../SWMansionIcon.react'; import css from './chat-thread-ancestors.css'; @@ -38,12 +37,9 @@ const ancestorThreads = useAncestorThreads(threadInfo); - const userInfos = useSelector(state => state.userStore.userInfos); const community = ancestorThreads[0] ?? threadInfo; - const keyserverOwnerUsername: ?string = React.useMemo( - () => getKeyserverAdmin(community, userInfos)?.username, - [community, userInfos], - ); + const keyserverAdmin = useKeyserverAdmin(community); + const keyserverOwnerUsername = keyserverAdmin?.username; const keyserverInfo = React.useMemo( () => (