Skip to content

Commit

Permalink
Merge pull request #57362 from Expensify/francois-revert-55966
Browse files Browse the repository at this point in the history
Revert #55966 / Fix "just sign in here" Magic Code page link

(cherry picked from commit 7628627)

(CP triggered by chiragsalian)
  • Loading branch information
srikarparsi authored and OSBotify committed Feb 25, 2025
1 parent 3b2b079 commit ccea23c
Show file tree
Hide file tree
Showing 4 changed files with 61 additions and 61 deletions.
89 changes: 46 additions & 43 deletions src/libs/Navigation/AppNavigator/AuthScreens.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import {findFocusedRoute, useNavigation} from '@react-navigation/native';
import React, {memo, useEffect, useMemo, useRef} from 'react';
import {NativeModules} from 'react-native';
import type {OnyxEntry} from 'react-native-onyx';
import Onyx, {useOnyx} from 'react-native-onyx';
import Onyx, {withOnyx} from 'react-native-onyx';
import ActiveGuidesEventListener from '@components/ActiveGuidesEventListener';
import ActiveWorkspaceContextProvider from '@components/ActiveWorkspaceProvider';
import ComposeProviders from '@components/ComposeProviders';
Expand Down Expand Up @@ -55,7 +55,6 @@ import SCREENS from '@src/SCREENS';
import type * as OnyxTypes from '@src/types/onyx';
import type {SelectedTimezone, Timezone} from '@src/types/onyx/PersonalDetails';
import {isEmptyObject} from '@src/types/utils/EmptyObject';
import isLoadingOnyxValue from '@src/types/utils/isLoadingOnyxValue';
import type ReactComponentModule from '@src/types/utils/ReactComponentModule';
import createRootStackNavigator from './createRootStackNavigator';
import {reportsSplitsWithEnteringAnimation, workspaceSplitsWithoutEnteringAnimation} from './createRootStackNavigator/GetStateForActionHandlers';
Expand All @@ -69,6 +68,17 @@ import RightModalNavigator from './Navigators/RightModalNavigator';
import WelcomeVideoModalNavigator from './Navigators/WelcomeVideoModalNavigator';
import useRootNavigatorScreenOptions from './useRootNavigatorScreenOptions';

type AuthScreensProps = {
/** Session of currently logged in user */
session: OnyxEntry<OnyxTypes.Session>;

/** The report ID of the last opened public room as anonymous user */
lastOpenedPublicRoomID: OnyxEntry<string>;

/** The last Onyx update ID was applied to the client */
initialLastUpdateIDAppliedToClient: OnyxEntry<number>;
};

const loadReportAttachments = () => require<ReactComponentModule>('../../../pages/home/report/ReportAttachments').default;
const loadValidateLoginPage = () => require<ReactComponentModule>('../../../pages/ValidateLoginPage').default;
const loadLogOutPreviousUserPage = () => require<ReactComponentModule>('../../../pages/LogOutPreviousUserPage').default;
Expand Down Expand Up @@ -201,10 +211,7 @@ const modalScreenListenersWithCancelSearch = {
},
};

function AuthScreens() {
const [session] = useOnyx(ONYXKEYS.SESSION);
const [lastOpenedPublicRoomID, lastOpenedPublicRoomIDStatus] = useOnyx(ONYXKEYS.LAST_OPENED_PUBLIC_ROOM_ID);
const [initialLastUpdateIDAppliedToClient, initialLastUpdateIDAppliedToClientStatus] = useOnyx(ONYXKEYS.ONYX_UPDATES_LAST_UPDATE_ID_APPLIED_TO_CLIENT);
function AuthScreens({session, lastOpenedPublicRoomID, initialLastUpdateIDAppliedToClient}: AuthScreensProps) {
const theme = useTheme();
const {shouldUseNarrowLayout} = useResponsiveLayout();
const rootNavigatorScreenOptions = useRootNavigatorScreenOptions();
Expand All @@ -213,10 +220,6 @@ function AuthScreens() {

const modal = useRef<OnyxTypes.Modal>({});
const {isOnboardingCompleted} = useOnboardingFlowRouter();
const isLastOpenedPublicRoomIDLoading = isLoadingOnyxValue(lastOpenedPublicRoomIDStatus);
const isInitialLastUpdateIDAppliedToClientLoading = isLoadingOnyxValue(initialLastUpdateIDAppliedToClientStatus);
const isLastOpenedPublicRoomIDLoadedRef = useRef(false);
const isInitialLastUpdateIDAppliedToClientLoadedRef = useRef(false);
const navigation = useNavigation();

useEffect(() => {
Expand All @@ -239,37 +242,6 @@ function AuthScreens() {
};
}, [theme]);

useEffect(() => {
if (isLastOpenedPublicRoomIDLoading || isLastOpenedPublicRoomIDLoadedRef.current) {
return;
}

isLastOpenedPublicRoomIDLoadedRef.current = true;
if (lastOpenedPublicRoomID) {
// Re-open the last opened public room if the user logged in from a public room link
Report.openLastOpenedPublicRoom(lastOpenedPublicRoomID);
}
}, [isLastOpenedPublicRoomIDLoading, lastOpenedPublicRoomID]);

useEffect(() => {
if (isInitialLastUpdateIDAppliedToClientLoading || isInitialLastUpdateIDAppliedToClientLoadedRef.current) {
return;
}

isInitialLastUpdateIDAppliedToClientLoadedRef.current = true;
// In Hybrid App we decide to call one of those method when booting ND and we don't want to duplicate calls
if (!NativeModules.HybridAppModule) {
// If we are on this screen then we are "logged in", but the user might not have "just logged in". They could be reopening the app
// or returning from background. If so, we'll assume they have some app data already and we can call reconnectApp() instead of openApp().
if (SessionUtils.didUserLogInDuringSession()) {
App.openApp();
} else {
Log.info('[AuthScreens] Sending ReconnectApp');
App.reconnectApp(initialLastUpdateIDAppliedToClient);
}
}
}, [initialLastUpdateIDAppliedToClient, isInitialLastUpdateIDAppliedToClientLoading]);

useEffect(() => {
const shortcutsOverviewShortcutConfig = CONST.KEYBOARD_SHORTCUTS.SHORTCUTS;
const searchShortcutConfig = CONST.KEYBOARD_SHORTCUTS.SEARCH;
Expand All @@ -289,12 +261,28 @@ function AuthScreens() {
PusherConnectionManager.init();
initializePusher();

// In Hybrid App we decide to call one of those method when booting ND and we don't want to duplicate calls
if (!NativeModules.HybridAppModule) {
// If we are on this screen then we are "logged in", but the user might not have "just logged in". They could be reopening the app
// or returning from background. If so, we'll assume they have some app data already and we can call reconnectApp() instead of openApp().
if (SessionUtils.didUserLogInDuringSession()) {
App.openApp();
} else {
Log.info('[AuthScreens] Sending ReconnectApp');
App.reconnectApp(initialLastUpdateIDAppliedToClient);
}
}

PriorityMode.autoSwitchToFocusMode();

App.setUpPoliciesAndNavigate(session);

App.redirectThirdPartyDesktopSignIn();

if (lastOpenedPublicRoomID) {
// Re-open the last opened public room if the user logged in from a public room link
Report.openLastOpenedPublicRoom(lastOpenedPublicRoomID);
}
Download.clearDownloads();

const unsubscribeOnyxModal = onyxSubscribe({
Expand Down Expand Up @@ -635,5 +623,20 @@ function AuthScreens() {

AuthScreens.displayName = 'AuthScreens';

// This memo is needed because <AuthScreens> is one of the main components in the app and navigation root and is relevant for the app performance.
export default memo(AuthScreens);
const AuthScreensMemoized = memo(AuthScreens, () => true);

// Migration to useOnyx cause re-login if logout from deeplinked report in desktop app
// Further analysis required and more details can be seen here:
// https://github.com/Expensify/App/issues/50560
// eslint-disable-next-line
export default withOnyx<AuthScreensProps, AuthScreensProps>({
session: {
key: ONYXKEYS.SESSION,
},
lastOpenedPublicRoomID: {
key: ONYXKEYS.LAST_OPENED_PUBLIC_ROOM_ID,
},
initialLastUpdateIDAppliedToClient: {
key: ONYXKEYS.ONYX_UPDATES_LAST_UPDATE_ID_APPLIED_TO_CLIENT,
},
})(AuthScreensMemoized);
14 changes: 1 addition & 13 deletions src/libs/Navigation/linkingConfig/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1539,19 +1539,7 @@ const config: LinkingOptions<RootNavigatorParamList>['config'] = {
path: ROUTES.HOME,
exact: true,
},
[SCREENS.REPORT]: {
path: ROUTES.REPORT_WITH_ID.route,
// If params are defined, but reportID is explicitly undefined, we will get the url /r/undefined.
// We want to avoid that situation, so we will return an empty string instead.
parse: {
// eslint-disable-next-line
reportID: (reportID: string | undefined) => reportID ?? '',
},
stringify: {
// eslint-disable-next-line
reportID: (reportID: string | undefined) => reportID ?? '',
},
},
[SCREENS.REPORT]: ROUTES.REPORT_WITH_ID.route,
},
},

Expand Down
2 changes: 1 addition & 1 deletion src/libs/actions/App.ts
Original file line number Diff line number Diff line change
Expand Up @@ -500,7 +500,7 @@ function setUpPoliciesAndNavigate(session: OnyxEntry<OnyxTypes.Session>) {
if (!isLoggingInAsNewUser && exitTo) {
Navigation.waitForProtectedRoutes()
.then(() => {
Navigation.navigate(exitTo, {forceReplace: true});
Navigation.navigate(exitTo);
})
.then(endSignOnTransition);
} else {
Expand Down
17 changes: 13 additions & 4 deletions src/libs/actions/Session/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@ import CONST from '@src/CONST';
import ONYXKEYS from '@src/ONYXKEYS';
import type {HybridAppRoute, Route} from '@src/ROUTES';
import ROUTES from '@src/ROUTES';
import SCREENS from '@src/SCREENS';
import type Credentials from '@src/types/onyx/Credentials';
import type Session from '@src/types/onyx/Session';
import type {AutoAuthState} from '@src/types/onyx/Session';
Expand Down Expand Up @@ -825,11 +826,19 @@ function clearSignInData() {
}

/**
* Reset navigation state after logout
* Reset all current params of the Home route
*/
function resetNavigationState() {
function resetHomeRouteParams() {
Navigation.isNavigationReady().then(() => {
navigationRef.resetRoot(navigationRef.getRootState());
const routes = navigationRef.current?.getState()?.routes;
const homeRoute = routes?.find((route) => route.name === SCREENS.HOME);

const emptyParams: Record<string, undefined> = {};
Object.keys(homeRoute?.params ?? {}).forEach((paramKey) => {
emptyParams[paramKey] = undefined;
});

Navigation.setParams(emptyParams, homeRoute?.key ?? '');
Onyx.set(ONYXKEYS.IS_CHECKING_PUBLIC_ROOM, false);
});
}
Expand All @@ -849,7 +858,7 @@ function cleanupSession() {
PersistedRequests.clear();
NetworkConnection.clearReconnectionCallbacks();
SessionUtils.resetDidUserLogInDuringSession();
resetNavigationState();
resetHomeRouteParams();
clearCache().then(() => {
Log.info('Cleared all cache data', true, {}, true);
});
Expand Down

0 comments on commit ccea23c

Please sign in to comment.