diff --git a/lib/components/farcaster-data-handler.react.js b/lib/components/farcaster-data-handler.react.js --- a/lib/components/farcaster-data-handler.react.js +++ b/lib/components/farcaster-data-handler.react.js @@ -9,8 +9,8 @@ } from '../actions/relationship-actions.js'; import { setSyncedMetadataEntryActionType } from '../actions/synced-metadata-actions.js'; import { NeynarClientContext } from '../components/neynar-client-provider.react.js'; +import { useIsLoggedInToIdentityAndAuthoritativeKeyserver } from '../hooks/account-hooks.js'; import { useLegacyAshoatKeyserverCall } from '../keyserver-conn/legacy-keyserver-call.js'; -import { isLoggedInToIdentityAndAuthoritativeKeyserver } from '../selectors/user-selectors.js'; import { IdentityClientContext } from '../shared/identity-client-context.js'; import { relationshipActions } from '../types/relationship-types.js'; import { syncedMetadataNames } from '../types/synced-metadata-types.js'; @@ -24,7 +24,7 @@ const currentUserID = useSelector(state => state.currentUserInfo?.id); - const loggedIn = useSelector(isLoggedInToIdentityAndAuthoritativeKeyserver); + const loggedIn = useIsLoggedInToIdentityAndAuthoritativeKeyserver(); const neynarClient = React.useContext(NeynarClientContext)?.client; diff --git a/lib/handlers/user-infos-handler.react.js b/lib/handlers/user-infos-handler.react.js --- a/lib/handlers/user-infos-handler.react.js +++ b/lib/handlers/user-infos-handler.react.js @@ -10,12 +10,10 @@ useFindUserIdentities, findUserIdentitiesActionTypes, } from '../actions/user-actions.js'; +import { useIsLoggedInToAuthoritativeKeyserver } from '../hooks/account-hooks.js'; import { useGetAndUpdateDeviceListsForUsers } from '../hooks/peer-list-hooks.js'; import { useLegacyAshoatKeyserverCall } from '../keyserver-conn/legacy-keyserver-call.js'; -import { - usersWithMissingDeviceListSelector, - isLoggedInToAuthoritativeKeyserver, -} from '../selectors/user-selectors.js'; +import { usersWithMissingDeviceListSelector } from '../selectors/user-selectors.js'; import { useTunnelbroker } from '../tunnelbroker/tunnelbroker-context.js'; import { relationshipActions } from '../types/relationship-types.js'; import { getMessageForException } from '../utils/errors.js'; @@ -46,9 +44,7 @@ const currentUserInfo = useSelector(state => state.currentUserInfo); - const loggedInToAuthKeyserver = useSelector( - isLoggedInToAuthoritativeKeyserver, - ); + const loggedInToAuthKeyserver = useIsLoggedInToAuthoritativeKeyserver(); React.useEffect(() => { if (!loggedInToAuthKeyserver) { diff --git a/lib/hooks/account-hooks.js b/lib/hooks/account-hooks.js --- a/lib/hooks/account-hooks.js +++ b/lib/hooks/account-hooks.js @@ -1,6 +1,11 @@ // @flow +import { + isLoggedIn, + isLoggedInToKeyserver, +} from '../selectors/user-selectors.js'; import type { LoggedInUserInfo } from '../types/user-types.js'; +import { authoritativeKeyserverID } from '../utils/authoritative-keyserver.js'; import { useSelector } from '../utils/redux-utils.js'; function useLoggedInUserInfo(): ?LoggedInUserInfo { @@ -11,4 +16,20 @@ ); } -export { useLoggedInUserInfo }; +function useIsLoggedInToAuthoritativeKeyserver(): boolean { + return useSelector(isLoggedInToKeyserver(authoritativeKeyserverID())); +} + +function useIsLoggedInToIdentityAndAuthoritativeKeyserver(): boolean { + return useSelector( + state => + isLoggedInToKeyserver(authoritativeKeyserverID())(state) && + isLoggedIn(state), + ); +} + +export { + useLoggedInUserInfo, + useIsLoggedInToAuthoritativeKeyserver, + useIsLoggedInToIdentityAndAuthoritativeKeyserver, +}; diff --git a/lib/selectors/user-selectors.js b/lib/selectors/user-selectors.js --- a/lib/selectors/user-selectors.js +++ b/lib/selectors/user-selectors.js @@ -28,7 +28,6 @@ AccountUserInfo, CurrentUserInfo, } from '../types/user-types.js'; -import { authoritativeKeyserverID } from '../utils/authoritative-keyserver.js'; import { entries, values } from '../utils/objects.js'; // Used for specific message payloads that include an array of user IDs, ie. @@ -168,14 +167,6 @@ }, ); -const isLoggedInToAuthoritativeKeyserver: (state: BaseAppState<>) => boolean = - isLoggedInToKeyserver(authoritativeKeyserverID()); - -const isLoggedInToIdentityAndAuthoritativeKeyserver: ( - state: BaseAppState<>, -) => boolean = (state: BaseAppState<>) => - isLoggedInToAuthoritativeKeyserver(state) && isLoggedIn(state); - const usersWithPersonalThreadSelector: ( state: BaseAppState<>, ) => $ReadOnlySet = createSelector( @@ -276,8 +267,6 @@ userInfoSelectorForPotentialMembers, isLoggedIn, isLoggedInToKeyserver, - isLoggedInToAuthoritativeKeyserver, - isLoggedInToIdentityAndAuthoritativeKeyserver, usersWithPersonalThreadSelector, savedEmojiAvatarSelectorForCurrentUser, getRelativeUserIDs, diff --git a/native/account/logged-out-modal.react.js b/native/account/logged-out-modal.react.js --- a/native/account/logged-out-modal.react.js +++ b/native/account/logged-out-modal.react.js @@ -21,11 +21,9 @@ } from 'react-native-reanimated'; import { SafeAreaView } from 'react-native-safe-area-context'; +import { useIsLoggedInToAuthoritativeKeyserver } from 'lib/hooks/account-hooks.js'; import { setActiveSessionRecoveryActionType } from 'lib/keyserver-conn/keyserver-conn-types.js'; -import { - isLoggedIn, - isLoggedInToAuthoritativeKeyserver, -} from 'lib/selectors/user-selectors.js'; +import { isLoggedIn } from 'lib/selectors/user-selectors.js'; import { recoveryFromReduxActionSources } from 'lib/types/account-types.js'; import { useDispatch } from 'lib/utils/redux-utils.js'; import { usingCommServicesAccessToken } from 'lib/utils/services-utils.js'; @@ -426,9 +424,7 @@ const rehydrateConcluded = useSelector( state => !!(state._persist && state._persist.rehydrated && navContext), ); - const isLoggedInToAuthKeyserver = useSelector( - isLoggedInToAuthoritativeKeyserver, - ); + const isLoggedInToAuthKeyserver = useIsLoggedInToAuthoritativeKeyserver(); const loggedIn = useSelector(isLoggedIn); const dispatch = useDispatch(); React.useEffect(() => { diff --git a/native/account/registration/registration-server-call.js b/native/account/registration/registration-server-call.js --- a/native/account/registration/registration-server-call.js +++ b/native/account/registration/registration-server-call.js @@ -12,10 +12,10 @@ deleteAccountActionTypes, useDeleteDiscardedIdentityAccount, } from 'lib/actions/user-actions.js'; +import { useIsLoggedInToAuthoritativeKeyserver } from 'lib/hooks/account-hooks.js'; import { useKeyserverAuthWithRetry } from 'lib/keyserver-conn/keyserver-auth.js'; import { useLegacyAshoatKeyserverCall } from 'lib/keyserver-conn/legacy-keyserver-call.js'; import { usePreRequestUserState } from 'lib/selectors/account-selectors.js'; -import { isLoggedInToAuthoritativeKeyserver } from 'lib/selectors/user-selectors.js'; import { type LegacyLogInStartingPayload, logInActionSources, @@ -543,9 +543,7 @@ const uploadSelectedMedia = useUploadSelectedMedia(); const nativeSetUserAvatar = useNativeSetUserAvatar(); - const isLoggedInToAuthKeyserver = useSelector( - isLoggedInToAuthoritativeKeyserver, - ); + const isLoggedInToAuthKeyserver = useIsLoggedInToAuthoritativeKeyserver(); const avatarBeingSetRef = React.useRef(false); React.useEffect(() => { diff --git a/native/components/auto-join-community-handler.react.js b/native/components/auto-join-community-handler.react.js --- a/native/components/auto-join-community-handler.react.js +++ b/native/components/auto-join-community-handler.react.js @@ -9,8 +9,8 @@ } from 'lib/actions/thread-actions.js'; import { NeynarClientContext } from 'lib/components/neynar-client-provider.react.js'; import blobService from 'lib/facts/blob-service.js'; +import { useIsLoggedInToIdentityAndAuthoritativeKeyserver } from 'lib/hooks/account-hooks.js'; import { extractKeyserverIDFromID } from 'lib/keyserver-conn/keyserver-call-utils.js'; -import { isLoggedInToIdentityAndAuthoritativeKeyserver } from 'lib/selectors/user-selectors.js'; import { farcasterChannelTagBlobHash } from 'lib/shared/community-utils.js'; import type { AuthMetadata } from 'lib/shared/identity-client-context.js'; import { IdentityClientContext } from 'lib/shared/identity-client-context.js'; @@ -30,7 +30,7 @@ function AutoJoinCommunityHandler(): React.Node { const isActive = useSelector(state => state.lifecycleState !== 'background'); - const loggedIn = useSelector(isLoggedInToIdentityAndAuthoritativeKeyserver); + const loggedIn = useIsLoggedInToIdentityAndAuthoritativeKeyserver(); const fid = useCurrentUserFID(); diff --git a/native/components/background-identity-login-handler.react.js b/native/components/background-identity-login-handler.react.js --- a/native/components/background-identity-login-handler.react.js +++ b/native/components/background-identity-login-handler.react.js @@ -8,7 +8,7 @@ logOutActionTypes, useLogOut, } from 'lib/actions/user-actions.js'; -import { isLoggedInToIdentityAndAuthoritativeKeyserver } from 'lib/selectors/user-selectors.js'; +import { useIsLoggedInToIdentityAndAuthoritativeKeyserver } from 'lib/hooks/account-hooks.js'; import { accountHasPassword } from 'lib/shared/account-utils.js'; import { securityUpdateLogoutText } from 'lib/types/alert-types.js'; import { useDispatchActionPromise } from 'lib/utils/redux-promise-utils.js'; @@ -28,7 +28,7 @@ ); const hasAccessToken = useSelector(state => !!state.commServicesAccessToken); - const loggedIn = useSelector(isLoggedInToIdentityAndAuthoritativeKeyserver); + const loggedIn = useIsLoggedInToIdentityAndAuthoritativeKeyserver(); const navLoggedIn = useIsAppLoggedIn(); // We don't want to try identity login until both loggedIn and navLoggedIn are diff --git a/native/components/connect-farcaster-alert-handler.react.js b/native/components/connect-farcaster-alert-handler.react.js --- a/native/components/connect-farcaster-alert-handler.react.js +++ b/native/components/connect-farcaster-alert-handler.react.js @@ -4,7 +4,7 @@ import * as React from 'react'; import { recordAlertActionType } from 'lib/actions/alert-actions.js'; -import { isLoggedInToIdentityAndAuthoritativeKeyserver } from 'lib/selectors/user-selectors.js'; +import { useIsLoggedInToIdentityAndAuthoritativeKeyserver } from 'lib/hooks/account-hooks.js'; import { alertTypes, type RecordAlertActionPayload, @@ -22,7 +22,7 @@ const isActive = useSelector(state => state.lifecycleState !== 'background'); - const loggedIn = useSelector(isLoggedInToIdentityAndAuthoritativeKeyserver); + const loggedIn = useIsLoggedInToIdentityAndAuthoritativeKeyserver(); const fid = useCurrentUserFID(); diff --git a/native/navigation/navigation-handler.react.js b/native/navigation/navigation-handler.react.js --- a/native/navigation/navigation-handler.react.js +++ b/native/navigation/navigation-handler.react.js @@ -2,7 +2,7 @@ import * as React from 'react'; -import { isLoggedInToIdentityAndAuthoritativeKeyserver } from 'lib/selectors/user-selectors.js'; +import { useIsLoggedInToIdentityAndAuthoritativeKeyserver } from 'lib/hooks/account-hooks.js'; import { logInActionType, logOutActionType } from './action-types.js'; import ModalPruner from './modal-pruner.react.js'; @@ -13,7 +13,6 @@ import ThreadScreenTracker from './thread-screen-tracker.react.js'; import { MissingRegistrationDataHandler } from '../account/registration/missing-registration-data/missing-registration-data-handler.react.js'; import DevTools from '../redux/dev-tools.react.js'; -import { useSelector } from '../redux/redux-utils.js'; import { usePersistedStateLoaded } from '../selectors/app-state-selectors.js'; const NavigationHandler: React.ComponentType<{}> = React.memo<{}>( @@ -59,7 +58,7 @@ ) { const { dispatch } = props; - const loggedIn = useSelector(isLoggedInToIdentityAndAuthoritativeKeyserver); + const loggedIn = useIsLoggedInToIdentityAndAuthoritativeKeyserver(); const navLoggedIn = useIsAppLoggedIn(); const prevLoggedInRef = React.useRef();