diff --git a/lib/actions/user-actions.js b/lib/actions/user-actions.js --- a/lib/actions/user-actions.js +++ b/lib/actions/user-actions.js @@ -1,5 +1,8 @@ // @flow +import * as React from 'react'; + +import { preRequestUserStateSelector } from '../selectors/account-selectors.js'; import threadWatcher from '../shared/thread-watcher.js'; import type { LogOutResult, @@ -56,6 +59,7 @@ import { getConfig } from '../utils/config.js'; import type { CallKeyserverEndpoint } from '../utils/keyserver-call'; import { useKeyserverCall } from '../utils/keyserver-call.js'; +import { useSelector } from '../utils/redux-utils.js'; import sleep from '../utils/sleep.js'; import { ashoatKeyserverID } from '../utils/validation-utils.js'; @@ -93,8 +97,14 @@ return { currentUserInfo, preRequestUserState }; }; -function useLogOut(): (input: PreRequestUserState) => Promise { - return useKeyserverCall(logOut); +function useLogOut(): () => Promise { + const preRequestUserState = useSelector(preRequestUserStateSelector); + const callKeyserverLogOut = useKeyserverCall(logOut); + + return React.useCallback( + () => callKeyserverLogOut(preRequestUserState), + [callKeyserverLogOut, preRequestUserState], + ); } const claimUsernameActionTypes = Object.freeze({ diff --git a/lib/socket/socket.react.js b/lib/socket/socket.react.js --- a/lib/socket/socket.react.js +++ b/lib/socket/socket.react.js @@ -111,7 +111,7 @@ +dispatch: Dispatch, +dispatchActionPromise: DispatchActionPromise, // async functions that hit server APIs - +logOut: (preRequestUserState: PreRequestUserState) => Promise, + +logOut: () => Promise, +socketCrashLoopRecovery?: () => Promise, // keyserver olm sessions specific props +getInitialNotificationsEncryptedMessage?: () => Promise, @@ -695,7 +695,7 @@ console.log(error); void this.props.dispatchActionPromise( logOutActionTypes, - this.props.logOut(this.props.preRequestUserState), + this.props.logOut(), ); } return; @@ -717,7 +717,7 @@ if (e.message === 'not_logged_in') { void this.props.dispatchActionPromise( logOutActionTypes, - this.props.logOut(this.props.preRequestUserState), + this.props.logOut(), ); } else if (this.socket) { this.socket.close(); diff --git a/native/components/version-supported.react.js b/native/components/version-supported.react.js --- a/native/components/version-supported.react.js +++ b/native/components/version-supported.react.js @@ -3,10 +3,8 @@ import * as React from 'react'; import { useLogOut, logOutActionTypes } from 'lib/actions/user-actions.js'; -import { preRequestUserStateForSingleKeyserverSelector } from 'lib/selectors/account-selectors.js'; import { isLoggedIn } from 'lib/selectors/user-selectors.js'; import { useDispatchActionPromise } from 'lib/utils/action-utils.js'; -import { ashoatKeyserverID } from 'lib/utils/validation-utils.js'; import { commRustModule } from '../native-modules.js'; import { useSelector } from '../redux/redux-utils.js'; @@ -17,20 +15,14 @@ const hasRun = React.useRef(false); const loggedIn = useSelector(isLoggedIn); - const preRequestUserState = useSelector( - preRequestUserStateForSingleKeyserverSelector(ashoatKeyserverID), - ); const dispatchActionPromise = useDispatchActionPromise(); const callLogOut = useLogOut(); const onUsernameAlertAcknowledged = React.useCallback(() => { if (loggedIn) { - void dispatchActionPromise( - logOutActionTypes, - callLogOut(preRequestUserState), - ); + void dispatchActionPromise(logOutActionTypes, callLogOut()); } - }, [callLogOut, dispatchActionPromise, loggedIn, preRequestUserState]); + }, [callLogOut, dispatchActionPromise, loggedIn]); const checkVersionSupport = React.useCallback(async () => { try { diff --git a/native/profile/profile-screen.react.js b/native/profile/profile-screen.react.js --- a/native/profile/profile-screen.react.js +++ b/native/profile/profile-screen.react.js @@ -5,11 +5,9 @@ import { logOutActionTypes, useLogOut } from 'lib/actions/user-actions.js'; import { useStringForUser } from 'lib/hooks/ens-cache.js'; -import { preRequestUserStateSelector } from 'lib/selectors/account-selectors.js'; import { createLoadingStatusSelector } from 'lib/selectors/loading-selectors.js'; import { accountHasPassword } from 'lib/shared/account-utils.js'; import type { LogOutResult } from 'lib/types/account-types.js'; -import { type PreRequestUserState } from 'lib/types/session-types.js'; import { type CurrentUserInfo } from 'lib/types/user-types.js'; import { type DispatchActionPromise, @@ -150,12 +148,11 @@ type Props = { ...BaseProps, +currentUserInfo: ?CurrentUserInfo, - +preRequestUserState: PreRequestUserState, +logOutLoading: boolean, +colors: Colors, +styles: $ReadOnly, +dispatchActionPromise: DispatchActionPromise, - +logOut: (preRequestUserState: PreRequestUserState) => Promise, + +logOut: () => Promise, +staffCanSee: boolean, +stringForUser: ?string, +isAccountWithPassword: boolean, @@ -362,7 +359,7 @@ logOut() { void this.props.dispatchActionPromise( logOutActionTypes, - this.props.logOut(this.props.preRequestUserState), + this.props.logOut(), ); } @@ -431,7 +428,6 @@ const ConnectedProfileScreen: React.ComponentType = React.memo(function ConnectedProfileScreen(props: BaseProps) { const currentUserInfo = useSelector(state => state.currentUserInfo); - const preRequestUserState = useSelector(preRequestUserStateSelector); const logOutLoading = useSelector(logOutLoadingStatusSelector) === 'loading'; const colors = useColors(); @@ -448,7 +444,6 @@ { if (!accountHasPassword(currentUserInfo)) { - void dispatchActionPromise( - logOutActionTypes, - callLogOut(preRequestUserState), - ); + void dispatchActionPromise(logOutActionTypes, callLogOut()); Alert.alert( 'Log in needed', 'After acknowledging the policies, we need you to log in to your account again', @@ -144,7 +141,6 @@ currentUserInfo, dispatch, dispatchActionPromise, - preRequestUserState, urlPrefix, getInitialNotificationsEncryptedMessage, ]); diff --git a/web/settings/account-settings.react.js b/web/settings/account-settings.react.js --- a/web/settings/account-settings.react.js +++ b/web/settings/account-settings.react.js @@ -6,7 +6,6 @@ import { useModalContext } from 'lib/components/modal-provider.react.js'; import SWMansionIcon from 'lib/components/SWMansionIcon.react.js'; import { useStringForUser } from 'lib/hooks/ens-cache.js'; -import { preRequestUserStateSelector } from 'lib/selectors/account-selectors.js'; import { accountHasPassword } from 'lib/shared/account-utils.js'; import { useTunnelbroker } from 'lib/tunnelbroker/tunnelbroker-context.js'; import { useDispatchActionPromise } from 'lib/utils/action-utils.js'; @@ -25,15 +24,10 @@ function AccountSettings(): React.Node { const sendLogoutRequest = useLogOut(); - const preRequestUserState = useSelector(preRequestUserStateSelector); const dispatchActionPromise = useDispatchActionPromise(); const logOutUser = React.useCallback( - () => - dispatchActionPromise( - logOutActionTypes, - sendLogoutRequest(preRequestUserState), - ), - [dispatchActionPromise, preRequestUserState, sendLogoutRequest], + () => dispatchActionPromise(logOutActionTypes, sendLogoutRequest()), + [dispatchActionPromise, sendLogoutRequest], ); const { pushModal, popModal } = useModalContext();