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 @@ -20,7 +20,6 @@ import { cookieSelector } from 'lib/selectors/keyserver-selectors.js'; import { isLoggedIn } from 'lib/selectors/user-selectors.js'; import { recoveryFromReduxActionSources } from 'lib/types/account-types.js'; -import type { Dispatch } from 'lib/types/redux-types.js'; import { useDispatch } from 'lib/utils/redux-utils.js'; import { usingCommServicesAccessToken } from 'lib/utils/services-utils.js'; @@ -240,58 +239,11 @@ +setActiveAlert: boolean => void, +resetToPrompt: () => boolean, // Redux state - +rehydrateConcluded: boolean, - +cookie: ?string, - +loggedIn: boolean, +dimensions: DerivedDimensionsInfo, +splashStyle: ImageStyle, +styles: $ReadOnly, - // Redux dispatch functions - +dispatch: Dispatch, }; class LoggedOutModal extends React.PureComponent { - componentDidMount() { - if (this.props.rehydrateConcluded) { - this.onInitialAppLoad(); - } - } - - componentDidUpdate(prevProps: Props) { - if (!prevProps.rehydrateConcluded && this.props.rehydrateConcluded) { - this.onInitialAppLoad(); - } - } - - // This gets triggered when an app is killed and restarted - // Not when it is returned from being backgrounded - onInitialAppLoad() { - if (!initialAppLoad) { - return; - } - initialAppLoad = false; - - if (usingCommServicesAccessToken || __DEV__) { - return; - } - - const { loggedIn, cookie, dispatch } = this.props; - const hasUserCookie = cookie && cookie.startsWith('user='); - if (loggedIn === !!hasUserCookie) { - return; - } - - const actionSource = loggedIn - ? recoveryFromReduxActionSources.appStartReduxLoggedInButInvalidCookie - : recoveryFromReduxActionSources.appStartCookieLoggedInButInvalidRedux; - dispatch({ - type: setActiveSessionRecoveryActionType, - payload: { - activeSessionRecovery: actionSource, - keyserverID: authoritativeKeyserverID, - }, - }); - } - render(): React.Node { const { styles } = this.props; @@ -820,10 +772,38 @@ ); const cookie = useSelector(cookieSelector(authoritativeKeyserverID)); const loggedIn = useSelector(isLoggedIn); + const dispatch = useDispatch(); + React.useEffect(() => { + // This gets triggered when an app is killed and restarted + // Not when it is returned from being backgrounded + if (!initialAppLoad || !rehydrateConcluded) { + return; + } + initialAppLoad = false; + + if (usingCommServicesAccessToken || __DEV__) { + return; + } + + const hasUserCookie = cookie && cookie.startsWith('user='); + if (loggedIn === !!hasUserCookie) { + return; + } + + const actionSource = loggedIn + ? recoveryFromReduxActionSources.appStartReduxLoggedInButInvalidCookie + : recoveryFromReduxActionSources.appStartCookieLoggedInButInvalidRedux; + dispatch({ + type: setActiveSessionRecoveryActionType, + payload: { + activeSessionRecovery: actionSource, + keyserverID: authoritativeKeyserverID, + }, + }); + }, [rehydrateConcluded, loggedIn, cookie, dispatch]); + const splashStyle = useSelector(splashStyleSelector); const styles = useStyles(unboundStyles); - - const dispatch = useDispatch(); return ( ); });