From dfc0dde2ed0b190154f66e804ea5d929bb3e4d61 Mon Sep 17 00:00:00 2001 From: Bernhard Owen Josephus Date: Fri, 1 Mar 2024 14:46:02 +0800 Subject: [PATCH 1/3] fix sign in modal closed too early --- .../Navigation/AppNavigator/AuthScreens.tsx | 3 +- src/pages/home/report/ReportFooter.js | 16 +++++++-- src/pages/signin/SignInModal.tsx | 33 +++++++++++++------ 3 files changed, 37 insertions(+), 15 deletions(-) diff --git a/src/libs/Navigation/AppNavigator/AuthScreens.tsx b/src/libs/Navigation/AppNavigator/AuthScreens.tsx index 00c96d436496..30a8010ad801 100644 --- a/src/libs/Navigation/AppNavigator/AuthScreens.tsx +++ b/src/libs/Navigation/AppNavigator/AuthScreens.tsx @@ -81,8 +81,7 @@ Onyx.connect({ currentAccountID = value.accountID ?? -1; if (Navigation.isActiveRoute(ROUTES.SIGN_IN_MODAL)) { - // This means sign in in RHP was successful, so we can dismiss the modal and subscribe to user events - Navigation.dismissModal(); + // This means sign in in RHP was successful, so we can subscribe to user events User.subscribeToUserEvents(); } }, diff --git a/src/pages/home/report/ReportFooter.js b/src/pages/home/report/ReportFooter.js index 1761e135481a..7372d3fb4854 100644 --- a/src/pages/home/report/ReportFooter.js +++ b/src/pages/home/report/ReportFooter.js @@ -16,7 +16,6 @@ import * as ReportUtils from '@libs/ReportUtils'; import reportPropTypes from '@pages/reportPropTypes'; import variables from '@styles/variables'; import * as Report from '@userActions/Report'; -import * as Session from '@userActions/Session'; import * as Task from '@userActions/Task'; import CONST from '@src/CONST'; import ONYXKEYS from '@src/ONYXKEYS'; @@ -43,6 +42,12 @@ const propTypes = { /** Whether to show the compose input */ shouldShowComposeInput: PropTypes.bool, + /** Session info for the currently logged in user. */ + session: PropTypes.shape({ + /** Currently logged in user auth token type */ + authTokenType: PropTypes.string, + }), + ...windowDimensionsPropTypes, }; @@ -54,6 +59,7 @@ const defaultProps = { lastReportAction: null, isEmptyChat: true, shouldShowComposeInput: false, + session: {}, }; function ReportFooter(props) { @@ -61,7 +67,7 @@ function ReportFooter(props) { const {isOffline} = useNetwork(); const chatFooterStyles = {...styles.chatFooter, minHeight: !isOffline ? CONST.CHAT_FOOTER_MIN_HEIGHT : 0}; const isArchivedRoom = ReportUtils.isArchivedRoom(props.report); - const isAnonymousUser = Session.isAnonymousUser(); + const isAnonymousUser = props.session.authTokenType === 'anonymousAccount'; const isSmallSizeLayout = props.windowWidth - (props.isSmallScreenWidth ? 0 : variables.sideBarWidth) < variables.anonymousReportFooterBreakpoint; const hideComposer = !ReportUtils.canUserPerformWriteAction(props.report); @@ -159,6 +165,9 @@ export default compose( key: ONYXKEYS.SHOULD_SHOW_COMPOSE_INPUT, initialValue: false, }, + session: { + key: ONYXKEYS.SESSION, + }, }), )( memo( @@ -173,6 +182,7 @@ export default compose( prevProps.shouldShowComposeInput === nextProps.shouldShowComposeInput && prevProps.windowWidth === nextProps.windowWidth && prevProps.isSmallScreenWidth === nextProps.isSmallScreenWidth && - prevProps.isReportReadyForDisplay === nextProps.isReportReadyForDisplay, + prevProps.isReportReadyForDisplay === nextProps.isReportReadyForDisplay && + isEqual(prevProps.session, nextProps.session), ), ); diff --git a/src/pages/signin/SignInModal.tsx b/src/pages/signin/SignInModal.tsx index 60350adae26a..c850c586af79 100644 --- a/src/pages/signin/SignInModal.tsx +++ b/src/pages/signin/SignInModal.tsx @@ -1,23 +1,34 @@ -import React from 'react'; +import React, {useEffect} from 'react'; +import type {OnyxEntry} from 'react-native-onyx'; +import {withOnyx} from 'react-native-onyx'; import HeaderWithBackButton from '@components/HeaderWithBackButton'; import ScreenWrapper from '@components/ScreenWrapper'; import useStyleUtils from '@hooks/useStyleUtils'; import useTheme from '@hooks/useTheme'; import Navigation from '@libs/Navigation/Navigation'; -import * as Session from '@userActions/Session'; +import ONYXKEYS from '@src/ONYXKEYS'; import SCREENS from '@src/SCREENS'; +import type {Session} from '@src/types/onyx'; import SignInPage from './SignInPage'; -function SignInModal() { +type SignInModalOnyxProps = { + session: OnyxEntry; +}; + +type SignInModalProps = SignInModalOnyxProps; + +function SignInModal({session}: SignInModalProps) { const theme = useTheme(); const StyleUtils = useStyleUtils(); - if (!Session.isAnonymousUser()) { - // Signing in RHP is only for anonymous users - Navigation.isNavigationReady().then(() => { - Navigation.dismissModal(); - }); - } + useEffect(() => { + const isAnonymousUser = session?.authTokenType === 'anonymousAccount'; + if (!isAnonymousUser) { + // Signing in RHP is only for anonymous users + Navigation.isNavigationReady().then(Navigation.dismissModal); + } + }, [session?.authTokenType]); + return ( ({ + session: {key: ONYXKEYS.SESSION}, +})(SignInModal); From d0be45986ea4451c3b6709553d9e624d3b046f67 Mon Sep 17 00:00:00 2001 From: Bernhard Owen Josephus Date: Fri, 1 Mar 2024 14:56:03 +0800 Subject: [PATCH 2/3] fix ts error --- src/pages/signin/SignInModal.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/signin/SignInModal.tsx b/src/pages/signin/SignInModal.tsx index c850c586af79..741074fa952b 100644 --- a/src/pages/signin/SignInModal.tsx +++ b/src/pages/signin/SignInModal.tsx @@ -25,7 +25,7 @@ function SignInModal({session}: SignInModalProps) { const isAnonymousUser = session?.authTokenType === 'anonymousAccount'; if (!isAnonymousUser) { // Signing in RHP is only for anonymous users - Navigation.isNavigationReady().then(Navigation.dismissModal); + Navigation.isNavigationReady().then(() => Navigation.dismissModal()); } }, [session?.authTokenType]); From c186109101584d65152f576c87c124d53b44c16a Mon Sep 17 00:00:00 2001 From: Bernhard Owen Josephus Date: Fri, 1 Mar 2024 20:22:20 +0800 Subject: [PATCH 3/3] move to const --- src/CONST.ts | 4 ++++ src/libs/ReportUtils.ts | 2 +- src/libs/actions/Session/index.ts | 2 +- src/pages/home/report/ReportActionsView.js | 2 +- src/pages/home/report/ReportFooter.js | 2 +- src/pages/signin/SignInModal.tsx | 3 ++- 6 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/CONST.ts b/src/CONST.ts index 8d4eaac44a38..ba3794659d59 100755 --- a/src/CONST.ts +++ b/src/CONST.ts @@ -3332,6 +3332,10 @@ const CONST = { SESSION_STORAGE_KEYS: { INITIAL_URL: 'INITIAL_URL', }, + + AUTH_TOKEN_TYPE: { + ANONYMOUS: 'anonymousAccount', + }, } as const; type Country = keyof typeof CONST.ALL_COUNTRIES; diff --git a/src/libs/ReportUtils.ts b/src/libs/ReportUtils.ts index a814c91ea8b2..f64123aceaf8 100644 --- a/src/libs/ReportUtils.ts +++ b/src/libs/ReportUtils.ts @@ -438,7 +438,7 @@ Onyx.connect({ currentUserEmail = value.email; currentUserAccountID = value.accountID; - isAnonymousUser = value.authTokenType === 'anonymousAccount'; + isAnonymousUser = value.authTokenType === CONST.AUTH_TOKEN_TYPE.ANONYMOUS; currentUserPrivateDomain = isEmailPublicDomain(currentUserEmail ?? '') ? '' : Str.extractEmailDomain(currentUserEmail ?? ''); }, }); diff --git a/src/libs/actions/Session/index.ts b/src/libs/actions/Session/index.ts index 013d86049150..76f335a3bec0 100644 --- a/src/libs/actions/Session/index.ts +++ b/src/libs/actions/Session/index.ts @@ -107,7 +107,7 @@ function signOut() { * Checks if the account is an anonymous account. */ function isAnonymousUser(): boolean { - return sessionAuthTokenType === 'anonymousAccount'; + return sessionAuthTokenType === CONST.AUTH_TOKEN_TYPE.ANONYMOUS; } function signOutAndRedirectToSignIn(shouldReplaceCurrentScreen?: boolean) { diff --git a/src/pages/home/report/ReportActionsView.js b/src/pages/home/report/ReportActionsView.js index cd625a667a7f..ed414de134f4 100755 --- a/src/pages/home/report/ReportActionsView.js +++ b/src/pages/home/report/ReportActionsView.js @@ -140,7 +140,7 @@ function ReportActionsView(props) { }, [props.network, isReportFullyVisible]); useEffect(() => { - const wasLoginChangedDetected = prevAuthTokenType === 'anonymousAccount' && !props.session.authTokenType; + const wasLoginChangedDetected = prevAuthTokenType === CONST.AUTH_TOKEN_TYPE.ANONYMOUS && !props.session.authTokenType; if (wasLoginChangedDetected && didUserLogInDuringSession() && isUserCreatedPolicyRoom(props.report)) { if (isReportFullyVisible) { openReportIfNecessary(); diff --git a/src/pages/home/report/ReportFooter.js b/src/pages/home/report/ReportFooter.js index 7372d3fb4854..3b9f8f03c320 100644 --- a/src/pages/home/report/ReportFooter.js +++ b/src/pages/home/report/ReportFooter.js @@ -67,7 +67,7 @@ function ReportFooter(props) { const {isOffline} = useNetwork(); const chatFooterStyles = {...styles.chatFooter, minHeight: !isOffline ? CONST.CHAT_FOOTER_MIN_HEIGHT : 0}; const isArchivedRoom = ReportUtils.isArchivedRoom(props.report); - const isAnonymousUser = props.session.authTokenType === 'anonymousAccount'; + const isAnonymousUser = props.session.authTokenType === CONST.AUTH_TOKEN_TYPE.ANONYMOUS; const isSmallSizeLayout = props.windowWidth - (props.isSmallScreenWidth ? 0 : variables.sideBarWidth) < variables.anonymousReportFooterBreakpoint; const hideComposer = !ReportUtils.canUserPerformWriteAction(props.report); diff --git a/src/pages/signin/SignInModal.tsx b/src/pages/signin/SignInModal.tsx index 741074fa952b..e71ee6e9a988 100644 --- a/src/pages/signin/SignInModal.tsx +++ b/src/pages/signin/SignInModal.tsx @@ -6,6 +6,7 @@ import ScreenWrapper from '@components/ScreenWrapper'; import useStyleUtils from '@hooks/useStyleUtils'; import useTheme from '@hooks/useTheme'; import Navigation from '@libs/Navigation/Navigation'; +import CONST from '@src/CONST'; import ONYXKEYS from '@src/ONYXKEYS'; import SCREENS from '@src/SCREENS'; import type {Session} from '@src/types/onyx'; @@ -22,7 +23,7 @@ function SignInModal({session}: SignInModalProps) { const StyleUtils = useStyleUtils(); useEffect(() => { - const isAnonymousUser = session?.authTokenType === 'anonymousAccount'; + const isAnonymousUser = session?.authTokenType === CONST.AUTH_TOKEN_TYPE.ANONYMOUS; if (!isAnonymousUser) { // Signing in RHP is only for anonymous users Navigation.isNavigationReady().then(() => Navigation.dismissModal());