From 17394dab1089d9741f80368676feec047cfe9f61 Mon Sep 17 00:00:00 2001 From: Andrew Rosiclair Date: Mon, 12 Sep 2022 18:05:59 -0400 Subject: [PATCH 1/6] Revert "partial revert" This reverts commit 46c7c43c2b231e48f56948f8e71a0c9421a5fdcc. --- src/CONST.js | 1 - src/libs/Navigation/AppNavigator/AuthScreens.js | 9 +-------- src/libs/Navigation/AppNavigator/index.js | 5 +---- src/libs/Navigation/NavigationRoot.js | 14 +------------- 4 files changed, 3 insertions(+), 26 deletions(-) diff --git a/src/CONST.js b/src/CONST.js index a2dbc0ef9478..78a2c2a8896c 100755 --- a/src/CONST.js +++ b/src/CONST.js @@ -670,7 +670,6 @@ const CONST = { FREE: 'free', PERSONAL: 'personal', CORPORATE: 'corporate', - TEAM: 'team', }, ROLE: { ADMIN: 'admin', diff --git a/src/libs/Navigation/AppNavigator/AuthScreens.js b/src/libs/Navigation/AppNavigator/AuthScreens.js index a363dd84ba95..3454a6847847 100644 --- a/src/libs/Navigation/AppNavigator/AuthScreens.js +++ b/src/libs/Navigation/AppNavigator/AuthScreens.js @@ -3,7 +3,6 @@ import Onyx, {withOnyx} from 'react-native-onyx'; import moment from 'moment'; import _ from 'underscore'; import lodashGet from 'lodash/get'; -import PropTypes from 'prop-types'; import * as StyleUtils from '../../../styles/StyleUtils'; import withWindowDimensions, {windowDimensionsPropTypes} from '../../../components/withWindowDimensions'; import CONST from '../../../CONST'; @@ -87,9 +86,6 @@ const modalScreenListeners = { const propTypes = { ...windowDimensionsPropTypes, - - /** The current path as reported by the NavigationContainer */ - currentPath: PropTypes.string.isRequired, }; class AuthScreens extends React.Component { @@ -116,6 +112,7 @@ class AuthScreens extends React.Component { // Listen for report changes and fetch some data we need on initialization UnreadIndicatorUpdater.listenForReportChanges(); App.openApp(); + App.setUpPoliciesAndNavigate(this.props.session); Timing.end(CONST.TIMING.HOMEPAGE_INITIAL_RENDER); const searchShortcutConfig = CONST.KEYBOARD_SHORTCUTS.SEARCH; @@ -133,10 +130,6 @@ class AuthScreens extends React.Component { } shouldComponentUpdate(nextProps) { - // we perform this check here instead of componentDidUpdate to skip an unnecessary re-render - if (this.props.currentPath !== nextProps.currentPath) { - App.setUpPoliciesAndNavigate(nextProps.session, nextProps.currentPath); - } return nextProps.isSmallScreenWidth !== this.props.isSmallScreenWidth; } diff --git a/src/libs/Navigation/AppNavigator/index.js b/src/libs/Navigation/AppNavigator/index.js index b1f53844dcb5..6a7b910ebaef 100644 --- a/src/libs/Navigation/AppNavigator/index.js +++ b/src/libs/Navigation/AppNavigator/index.js @@ -6,9 +6,6 @@ import AuthScreens from './AuthScreens'; const propTypes = { /** If we have an authToken this is true */ authenticated: PropTypes.bool.isRequired, - - /** The current path as reported by the NavigationContainer */ - currentPath: PropTypes.string.isRequired, }; const AppNavigator = props => ( @@ -16,7 +13,7 @@ const AppNavigator = props => ( ? ( // These are the protected screens and only accessible when an authToken is present - + ) : ( diff --git a/src/libs/Navigation/NavigationRoot.js b/src/libs/Navigation/NavigationRoot.js index 57fd9ccd0305..4002c0101c35 100644 --- a/src/libs/Navigation/NavigationRoot.js +++ b/src/libs/Navigation/NavigationRoot.js @@ -28,16 +28,6 @@ const propTypes = { }; class NavigationRoot extends Component { - constructor(props) { - super(props); - - this.state = { - currentPath: '', - }; - - this.parseAndLogRoute = this.parseAndLogRoute.bind(this); - } - /** * Intercept navigation state changes and log it * @param {NavigationState} state @@ -57,8 +47,6 @@ class NavigationRoot extends Component { } UnreadIndicatorUpdater.throttledUpdatePageTitleAndUnreadCount(); - - this.setState({currentPath}); } render() { @@ -79,7 +67,7 @@ class NavigationRoot extends Component { enabled: false, }} > - + ); } From 8f4ec05430394ed3601f25f2079e478b221dfbf9 Mon Sep 17 00:00:00 2001 From: Andrew Rosiclair Date: Mon, 12 Sep 2022 18:23:43 -0400 Subject: [PATCH 2/6] navigate to exitTo when we're already logged in --- src/pages/LogOutPreviousUserPage.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/pages/LogOutPreviousUserPage.js b/src/pages/LogOutPreviousUserPage.js index d9d36602721d..85ef92887e56 100644 --- a/src/pages/LogOutPreviousUserPage.js +++ b/src/pages/LogOutPreviousUserPage.js @@ -7,6 +7,8 @@ import ONYXKEYS from '../ONYXKEYS'; import * as Session from '../libs/actions/Session'; import FullScreenLoadingIndicator from '../components/FullscreenLoadingIndicator'; import * as SessionUtils from '../libs/SessionUtils'; +import Navigation from '../libs/Navigation/Navigation'; +import ROUTES from '../ROUTES'; const propTypes = { /** The data about the current session which will be set once the user is authenticated and we return to this component as an AuthScreen */ @@ -24,6 +26,10 @@ class LogOutPreviousUserPage extends Component { const isLoggingInAsNewUser = SessionUtils.isLoggingInAsNewUser(transitionURL, sessionEmail); if (isLoggingInAsNewUser) { Session.signOutAndRedirectToSignIn(); + } else { + const exitTo = lodashGet(this.props, 'route.params.exitTo'); + Navigation.dismissModal(); + Navigation.navigate(exitTo || ROUTES.HOME); } }); } From 94ddbe0db220b9dfb176e27ec24fe64a0e752001 Mon Sep 17 00:00:00 2001 From: Andrew Rosiclair Date: Mon, 19 Sep 2022 13:23:01 -0400 Subject: [PATCH 3/6] Revert "navigate to exitTo when we're already logged in" This reverts commit 8f4ec05430394ed3601f25f2079e478b221dfbf9. --- src/pages/LogOutPreviousUserPage.js | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/pages/LogOutPreviousUserPage.js b/src/pages/LogOutPreviousUserPage.js index 85ef92887e56..d9d36602721d 100644 --- a/src/pages/LogOutPreviousUserPage.js +++ b/src/pages/LogOutPreviousUserPage.js @@ -7,8 +7,6 @@ import ONYXKEYS from '../ONYXKEYS'; import * as Session from '../libs/actions/Session'; import FullScreenLoadingIndicator from '../components/FullscreenLoadingIndicator'; import * as SessionUtils from '../libs/SessionUtils'; -import Navigation from '../libs/Navigation/Navigation'; -import ROUTES from '../ROUTES'; const propTypes = { /** The data about the current session which will be set once the user is authenticated and we return to this component as an AuthScreen */ @@ -26,10 +24,6 @@ class LogOutPreviousUserPage extends Component { const isLoggingInAsNewUser = SessionUtils.isLoggingInAsNewUser(transitionURL, sessionEmail); if (isLoggingInAsNewUser) { Session.signOutAndRedirectToSignIn(); - } else { - const exitTo = lodashGet(this.props, 'route.params.exitTo'); - Navigation.dismissModal(); - Navigation.navigate(exitTo || ROUTES.HOME); } }); } From bf19d4b86cef7182acb5b1c5a3784ce0fba5e8ca Mon Sep 17 00:00:00 2001 From: Andrew Rosiclair Date: Mon, 19 Sep 2022 16:52:44 -0400 Subject: [PATCH 4/6] ensure the NavigationContainer is ready when navigating after transitions --- src/libs/Navigation/Navigation.js | 18 ++++++++++++++++++ src/libs/Navigation/NavigationRoot.js | 5 +++-- src/libs/actions/App.js | 9 ++++++--- src/libs/actions/Policy.js | 5 ++++- 4 files changed, 31 insertions(+), 6 deletions(-) diff --git a/src/libs/Navigation/Navigation.js b/src/libs/Navigation/Navigation.js index 7f9328138120..30f6b4ca8399 100644 --- a/src/libs/Navigation/Navigation.js +++ b/src/libs/Navigation/Navigation.js @@ -10,6 +10,11 @@ import ONYXKEYS from '../../ONYXKEYS'; import linkingConfig from './linkingConfig'; import navigationRef from './navigationRef'; +let resolveNavigationIsReadyPromise; +const navigationIsReadyPromise = new Promise((resolve) => { + resolveNavigationIsReadyPromise = resolve; +}); + let isLoggedIn = false; Onyx.connect({ key: ONYXKEYS.SESSION, @@ -186,6 +191,17 @@ function isActiveRoute(routePath) { return getActiveRoute().substring(1) === routePath; } +/** + * @returns {Promise} + */ +function isNavigationReady() { + return navigationIsReadyPromise; +} + +function setIsNavigationReady() { + resolveNavigationIsReadyPromise(); +} + export default { canNavigate, navigate, @@ -196,6 +212,8 @@ export default { closeDrawer, getDefaultDrawerState, setDidTapNotification, + isNavigationReady, + setIsNavigationReady, }; export { diff --git a/src/libs/Navigation/NavigationRoot.js b/src/libs/Navigation/NavigationRoot.js index 4002c0101c35..1618fea6d3c4 100644 --- a/src/libs/Navigation/NavigationRoot.js +++ b/src/libs/Navigation/NavigationRoot.js @@ -1,7 +1,7 @@ import React, {Component} from 'react'; import PropTypes from 'prop-types'; import {NavigationContainer, DefaultTheme, getPathFromState} from '@react-navigation/native'; -import * as Navigation from './Navigation'; +import Navigation, {navigationRef} from './Navigation'; import linkingConfig from './linkingConfig'; import AppNavigator from './AppNavigator'; import FullScreenLoadingIndicator from '../../components/FullscreenLoadingIndicator'; @@ -47,6 +47,7 @@ class NavigationRoot extends Component { } UnreadIndicatorUpdater.throttledUpdatePageTitleAndUnreadCount(); + Navigation.setIsNavigationReady(); } render() { @@ -61,7 +62,7 @@ class NavigationRoot extends Component { onStateChange={this.parseAndLogRoute} onReady={this.props.onReady} theme={navigationTheme} - ref={Navigation.navigationRef} + ref={navigationRef} linking={linkingConfig} documentTitle={{ enabled: false, diff --git a/src/libs/actions/App.js b/src/libs/actions/App.js index 2e2a493ed468..523a8c92be03 100644 --- a/src/libs/actions/App.js +++ b/src/libs/actions/App.js @@ -181,9 +181,12 @@ function setUpPoliciesAndNavigate(session) { return; } if (!isLoggingInAsNewUser && exitTo) { - // We must call dismissModal() to remove the /transition route from history - Navigation.dismissModal(); - Navigation.navigate(exitTo); + Navigation.isNavigationReady() + .then(() => { + // We must call dismissModal() to remove the /transition route from history + Navigation.dismissModal(); + Navigation.navigate(exitTo); + }); } } diff --git a/src/libs/actions/Policy.js b/src/libs/actions/Policy.js index 5fac77a56380..a62424a9ccf2 100644 --- a/src/libs/actions/Policy.js +++ b/src/libs/actions/Policy.js @@ -966,7 +966,10 @@ function createWorkspace() { value: null, }], }).then(() => { - Navigation.navigate(ROUTES.getWorkspaceInitialRoute(policyID)); + Navigation.isNavigationReady() + .then(() => { + Navigation.navigate(ROUTES.getWorkspaceInitialRoute(policyID)); + }); }); } From 08e2218f4233c3db789da0f1a11d3a347e94ad0c Mon Sep 17 00:00:00 2001 From: Andrew Rosiclair Date: Mon, 19 Sep 2022 17:30:49 -0400 Subject: [PATCH 5/6] dismiss transition route for transitions --- src/libs/actions/Policy.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/libs/actions/Policy.js b/src/libs/actions/Policy.js index a62424a9ccf2..d1e8e1c51e5c 100644 --- a/src/libs/actions/Policy.js +++ b/src/libs/actions/Policy.js @@ -968,6 +968,7 @@ function createWorkspace() { }).then(() => { Navigation.isNavigationReady() .then(() => { + Navigation.dismissModal(); // Dismiss /transition route for OldDot to NewDot transitions Navigation.navigate(ROUTES.getWorkspaceInitialRoute(policyID)); }); }); From 83a011f487810a1fa74fdb1ed2080e37ff98b03c Mon Sep 17 00:00:00 2001 From: Andrew Rosiclair Date: Wed, 21 Sep 2022 18:16:26 -0400 Subject: [PATCH 6/6] fix bad merge --- src/libs/actions/Policy.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/libs/actions/Policy.js b/src/libs/actions/Policy.js index 8f789e381cc4..5716547d1eda 100644 --- a/src/libs/actions/Policy.js +++ b/src/libs/actions/Policy.js @@ -960,8 +960,11 @@ function createWorkspace() { }], }); - Navigation.dismissModal(); // Dismiss /transition route for OldDot to NewDot transitions - Navigation.navigate(ROUTES.getWorkspaceInitialRoute(policyID)); + Navigation.isNavigationReady() + .then(() => { + Navigation.dismissModal(); // Dismiss /transition route for OldDot to NewDot transitions + Navigation.navigate(ROUTES.getWorkspaceInitialRoute(policyID)); + }); } function openWorkspaceReimburseView(policyID) {