From 26675cda490d94a3bc4cf961877b1c8e15e7caa8 Mon Sep 17 00:00:00 2001 From: Sibtain Ali Date: Thu, 24 Apr 2025 02:50:18 +0500 Subject: [PATCH 1/6] add remove from state for the initial route --- .../Security/MergeAccounts/MergeResultPage.tsx | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/pages/settings/Security/MergeAccounts/MergeResultPage.tsx b/src/pages/settings/Security/MergeAccounts/MergeResultPage.tsx index 8f92059e34cae..22c150e5ebafd 100644 --- a/src/pages/settings/Security/MergeAccounts/MergeResultPage.tsx +++ b/src/pages/settings/Security/MergeAccounts/MergeResultPage.tsx @@ -1,6 +1,6 @@ import HybridAppModule from '@expensify/react-native-hybrid-app'; import {useRoute} from '@react-navigation/native'; -import React, {useContext, useMemo} from 'react'; +import React, {useContext, useEffect, useMemo} from 'react'; import {useOnyx} from 'react-native-onyx'; import type {ValueOf} from 'type-fest'; import ConfirmationPage from '@components/ConfirmationPage'; @@ -23,7 +23,7 @@ import CONFIG from '@src/CONFIG'; import CONST from '@src/CONST'; import ONYXKEYS from '@src/ONYXKEYS'; import ROUTES from '@src/ROUTES'; -import type SCREENS from '@src/SCREENS'; +import SCREENS from '@src/SCREENS'; function MergeResultPage() { const styles = useThemeStyles(); @@ -228,6 +228,14 @@ function MergeResultPage() { }; }, [setRootStatusBarEnabled, login, translate, userEmailOrPhone, styles]); + useEffect(() => { + if (result !== CONST.MERGE_ACCOUNT_RESULTS.SUCCESS) { + return; + } + + Navigation.removeScreenFromNavigationState(SCREENS.SETTINGS.MERGE_ACCOUNTS.ACCOUNT_DETAILS); + }, [result]); + const { heading, headingStyle, From b0c845cf58c5d03fe86d5ea2c33db0346ed562aa Mon Sep 17 00:00:00 2001 From: Sibtain Ali Date: Thu, 24 Apr 2025 03:40:00 +0500 Subject: [PATCH 2/6] update copy for incorrect magic code --- src/languages/en.ts | 2 +- src/languages/es.ts | 2 +- .../settings/Security/MergeAccounts/AccountValidatePage.tsx | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/languages/en.ts b/src/languages/en.ts index c1d261200fa27..4d2a396815738 100755 --- a/src/languages/en.ts +++ b/src/languages/en.ts @@ -1429,7 +1429,7 @@ const translations = { lossOfUnsubmittedData: `Merging your accounts is irreversible and will result in the loss of any unsubmitted expenses for `, enterMagicCode: `To continue, please enter the magic code sent to `, errors: { - incorrect2fa: 'Incorrect two-factor authentication code. Please try again.', + incorrectMagicCode: 'Incorrect or invalid magic code. Please try again or request a new code.', fallback: 'Something went wrong. Please try again later.', }, }, diff --git a/src/languages/es.ts b/src/languages/es.ts index 8da0586576ab0..d36bbcd283625 100644 --- a/src/languages/es.ts +++ b/src/languages/es.ts @@ -1428,7 +1428,7 @@ const translations = { lossOfUnsubmittedData: `Fusionar tus cuentas es irreversible y resultará en la pérdida de cualquier gasto no enviado de `, enterMagicCode: `Para continuar, por favor introduce el código mágico enviado a `, errors: { - incorrect2fa: 'Código de autenticación de dos factores incorrecto. Por favor, inténtalo de nuevo.', + incorrectMagicCode: 'Código mágico incorrecto o no válido. Inténtalo de nuevo o solicita otro código.', fallback: 'Ha ocurrido un error. Por favor, inténtalo mas tarde.', }, }, diff --git a/src/pages/settings/Security/MergeAccounts/AccountValidatePage.tsx b/src/pages/settings/Security/MergeAccounts/AccountValidatePage.tsx index 0df368c1ac4a8..1d035660d275f 100644 --- a/src/pages/settings/Security/MergeAccounts/AccountValidatePage.tsx +++ b/src/pages/settings/Security/MergeAccounts/AccountValidatePage.tsx @@ -65,7 +65,7 @@ const getAuthenticationErrorKey = (err: string): TranslationPaths | null => { } if (err.includes('Invalid validateCode')) { - return 'mergeAccountsPage.accountValidate.errors.incorrect2fa'; + return 'mergeAccountsPage.accountValidate.errors.incorrectMagicCode'; } return 'mergeAccountsPage.accountValidate.errors.fallback'; From 0e3a6ca2f5f9fcd4acf5aa6d373d478dee7c0049 Mon Sep 17 00:00:00 2001 From: Sibtain Ali Date: Thu, 24 Apr 2025 19:16:07 +0500 Subject: [PATCH 3/6] add comment explaining the screen removal --- src/pages/settings/Security/MergeAccounts/MergeResultPage.tsx | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/pages/settings/Security/MergeAccounts/MergeResultPage.tsx b/src/pages/settings/Security/MergeAccounts/MergeResultPage.tsx index 22c150e5ebafd..e1fdb80cb1e68 100644 --- a/src/pages/settings/Security/MergeAccounts/MergeResultPage.tsx +++ b/src/pages/settings/Security/MergeAccounts/MergeResultPage.tsx @@ -229,6 +229,10 @@ function MergeResultPage() { }, [setRootStatusBarEnabled, login, translate, userEmailOrPhone, styles]); useEffect(() => { + /** + * If the result is success, we need to remove the initial screen from the navigation state + * so that the back button closes the modal instead of going back to the initial screen. + */ if (result !== CONST.MERGE_ACCOUNT_RESULTS.SUCCESS) { return; } From db73e84e039b63010a1f165f251a87ccc22578c7 Mon Sep 17 00:00:00 2001 From: Sibtain Ali Date: Wed, 30 Apr 2025 04:32:08 +0500 Subject: [PATCH 4/6] fix weird navigation stack --- .../settings/Security/MergeAccounts/AccountValidatePage.tsx | 2 +- src/pages/settings/Security/MergeAccounts/MergeResultPage.tsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/pages/settings/Security/MergeAccounts/AccountValidatePage.tsx b/src/pages/settings/Security/MergeAccounts/AccountValidatePage.tsx index 1d035660d275f..614dfb3bf62fe 100644 --- a/src/pages/settings/Security/MergeAccounts/AccountValidatePage.tsx +++ b/src/pages/settings/Security/MergeAccounts/AccountValidatePage.tsx @@ -137,7 +137,7 @@ function AccountValidatePage() { { - Navigation.goBack(ROUTES.SETTINGS_MERGE_ACCOUNTS.getRoute(email)); + Navigation.goBack(ROUTES.SETTINGS_MERGE_ACCOUNTS.getRoute()); }} shouldDisplayHelpButton={false} /> diff --git a/src/pages/settings/Security/MergeAccounts/MergeResultPage.tsx b/src/pages/settings/Security/MergeAccounts/MergeResultPage.tsx index e1fdb80cb1e68..a9198b2883333 100644 --- a/src/pages/settings/Security/MergeAccounts/MergeResultPage.tsx +++ b/src/pages/settings/Security/MergeAccounts/MergeResultPage.tsx @@ -265,7 +265,7 @@ function MergeResultPage() { title={translate('mergeAccountsPage.mergeAccount')} shouldShowBackButton={result !== CONST.MERGE_ACCOUNT_RESULTS.SUCCESS} onBackButtonPress={() => { - Navigation.goBack(ROUTES.SETTINGS_MERGE_ACCOUNTS.getRoute(login)); + Navigation.goBack(ROUTES.SETTINGS_MERGE_ACCOUNTS.getRoute()); }} shouldDisplayHelpButton={false} /> From 45e3b60963134e0bf853dd63a958e426ba3dbfa7 Mon Sep 17 00:00:00 2001 From: Sibtain Ali Date: Thu, 8 May 2025 03:17:53 +0500 Subject: [PATCH 5/6] wrap with interaction manager --- .../settings/Security/MergeAccounts/MergeResultPage.tsx | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/pages/settings/Security/MergeAccounts/MergeResultPage.tsx b/src/pages/settings/Security/MergeAccounts/MergeResultPage.tsx index a9198b2883333..dadce46094b20 100644 --- a/src/pages/settings/Security/MergeAccounts/MergeResultPage.tsx +++ b/src/pages/settings/Security/MergeAccounts/MergeResultPage.tsx @@ -1,6 +1,7 @@ import HybridAppModule from '@expensify/react-native-hybrid-app'; import {useRoute} from '@react-navigation/native'; import React, {useContext, useEffect, useMemo} from 'react'; +import {InteractionManager} from 'react-native'; import {useOnyx} from 'react-native-onyx'; import type {ValueOf} from 'type-fest'; import ConfirmationPage from '@components/ConfirmationPage'; @@ -237,7 +238,9 @@ function MergeResultPage() { return; } - Navigation.removeScreenFromNavigationState(SCREENS.SETTINGS.MERGE_ACCOUNTS.ACCOUNT_DETAILS); + InteractionManager.runAfterInteractions(() => { + Navigation.removeScreenFromNavigationState(SCREENS.SETTINGS.MERGE_ACCOUNTS.ACCOUNT_DETAILS); + }); }, [result]); const { From 272656dd7beb03a45b832944fef2d7bc6b4dcaee Mon Sep 17 00:00:00 2001 From: Sibtain Ali Date: Sat, 10 May 2025 01:57:09 +0500 Subject: [PATCH 6/6] apply suggestion --- .../AppNavigator/ModalStackNavigators/index.tsx | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/libs/Navigation/AppNavigator/ModalStackNavigators/index.tsx b/src/libs/Navigation/AppNavigator/ModalStackNavigators/index.tsx index bd13b29b1dd4b..f8c0b519c996e 100644 --- a/src/libs/Navigation/AppNavigator/ModalStackNavigators/index.tsx +++ b/src/libs/Navigation/AppNavigator/ModalStackNavigators/index.tsx @@ -2,6 +2,7 @@ import type {ParamListBase} from '@react-navigation/routers'; import React from 'react'; import createPlatformStackNavigator from '@libs/Navigation/PlatformStackNavigation/createPlatformStackNavigator'; import Animations from '@libs/Navigation/PlatformStackNavigation/navigationOptions/animation'; +import type {PlatformStackNavigationOptions} from '@libs/Navigation/PlatformStackNavigation/types'; import type { AddPersonalBankAccountNavigatorParamList, AddUnreportedExpensesParamList, @@ -47,6 +48,12 @@ import useModalStackScreenOptions from './useModalStackScreenOptions'; type Screens = Partial React.ComponentType>>; +const OPTIONS_PER_SCREEN: Partial> = { + [SCREENS.SETTINGS.MERGE_ACCOUNTS.MERGE_RESULT]: { + animationTypeForReplace: 'push', + }, +}; + /** * Create a modal stack navigator with an array of sub-screens. * @@ -66,6 +73,7 @@ function createModalStackNavigator(screens: Scr key={name} name={name} getComponent={(screens as Required)[name as Screen]} + options={OPTIONS_PER_SCREEN[name as Screen]} /> ))}