From 0f6004cfcc52f002e4d6af87d57c3c30242c52d9 Mon Sep 17 00:00:00 2001 From: gijoe0295 <153004152+gijoe0295@users.noreply.github.com> Date: Tue, 30 Sep 2025 03:40:54 +0700 Subject: [PATCH 1/6] fix Central pane changes to Wallet after clicking Update address in workspace chat --- src/ROUTES.ts | 4 ++++ src/SCREENS.ts | 1 + .../ModalStackNavigators/index.tsx | 1 + src/libs/Navigation/linkingConfig/config.ts | 3 +++ .../settings/Wallet/ExpensifyCardPage.tsx | 11 ++++++----- .../settings/Wallet/WalletPage/CardDetails.tsx | 18 +++++++++++++++--- 6 files changed, 30 insertions(+), 8 deletions(-) diff --git a/src/ROUTES.ts b/src/ROUTES.ts index f07e469188b04..80ed76274fc21 100644 --- a/src/ROUTES.ts +++ b/src/ROUTES.ts @@ -267,6 +267,10 @@ const ROUTES = { route: 'settings/card/:cardID?', getRoute: (cardID: string) => `settings/card/${cardID}` as const, }, + SETTINGS_DOMAIN_CARD_UPDATE_ADDRESS: { + route: 'settings/card/:cardID/update-address', + getRoute: (cardID: string) => `settings/card/${cardID}/update-address` as const, + }, SETTINGS_REPORT_FRAUD: { route: 'settings/wallet/card/:cardID/report-virtual-fraud', diff --git a/src/SCREENS.ts b/src/SCREENS.ts index d5ede296b7287..05052882b7482 100644 --- a/src/SCREENS.ts +++ b/src/SCREENS.ts @@ -348,6 +348,7 @@ const SCREENS = { DOMAIN_CARD: { DOMAIN_CARD_DETAIL: 'Domain_Card_Detail', DOMAIN_CARD_REPORT_FRAUD: 'Domain_Card_Report_Fraud', + DOMAIN_CARD_UPDATE_ADDRESS: 'Domain_Card_Update_Address', }, SETTINGS_TAGS: { diff --git a/src/libs/Navigation/AppNavigator/ModalStackNavigators/index.tsx b/src/libs/Navigation/AppNavigator/ModalStackNavigators/index.tsx index cbc6722e0a303..05ab49168f38a 100644 --- a/src/libs/Navigation/AppNavigator/ModalStackNavigators/index.tsx +++ b/src/libs/Navigation/AppNavigator/ModalStackNavigators/index.tsx @@ -283,6 +283,7 @@ const ExpensifyCardModalStackNavigator = createModalStackNavigator({ const DomainCardModalStackNavigator = createModalStackNavigator({ [SCREENS.DOMAIN_CARD.DOMAIN_CARD_DETAIL]: () => require('../../../../pages/settings/Wallet/ExpensifyCardPage').default, [SCREENS.DOMAIN_CARD.DOMAIN_CARD_REPORT_FRAUD]: () => require('../../../../pages/settings/Wallet/ReportVirtualCardFraudPage').default, + [SCREENS.DOMAIN_CARD.DOMAIN_CARD_UPDATE_ADDRESS]: () => require('../../../../pages/settings/Profile/PersonalDetails/PersonalAddressPage').default, }); const ReportParticipantsModalStackNavigator = createModalStackNavigator({ diff --git a/src/libs/Navigation/linkingConfig/config.ts b/src/libs/Navigation/linkingConfig/config.ts index 736b5ce1768b8..1e73ff39d5aa6 100644 --- a/src/libs/Navigation/linkingConfig/config.ts +++ b/src/libs/Navigation/linkingConfig/config.ts @@ -1219,6 +1219,9 @@ const config: LinkingOptions['config'] = { [SCREENS.DOMAIN_CARD.DOMAIN_CARD_REPORT_FRAUD]: { path: ROUTES.SETTINGS_DOMAIN_CARD_REPORT_FRAUD.route, }, + [SCREENS.DOMAIN_CARD.DOMAIN_CARD_UPDATE_ADDRESS]: { + path: ROUTES.SETTINGS_DOMAIN_CARD_UPDATE_ADDRESS.route, + }, }, }, [SCREENS.RIGHT_MODAL.REPORT_DESCRIPTION]: { diff --git a/src/pages/settings/Wallet/ExpensifyCardPage.tsx b/src/pages/settings/Wallet/ExpensifyCardPage.tsx index 6434b3454071a..96f4d8f4d18a6 100644 --- a/src/pages/settings/Wallet/ExpensifyCardPage.tsx +++ b/src/pages/settings/Wallet/ExpensifyCardPage.tsx @@ -64,11 +64,8 @@ function getLimitTypeTranslationKeys(limitType: ValueOf()] = useOnyx(ONYXKEYS.CURRENCY_LIST, {canBeMissing: true}); @@ -243,6 +240,8 @@ function ExpensifyCardPage({ expiration={formatCardExpiration(cardsDetails[card.cardID]?.expiration ?? '')} cvv={cardsDetails[card.cardID]?.cvv} domain={domain} + cardID={card.cardID} + route={route} /> ) : ( <> @@ -300,6 +299,8 @@ function ExpensifyCardPage({ ) : ( <> diff --git a/src/pages/settings/Wallet/WalletPage/CardDetails.tsx b/src/pages/settings/Wallet/WalletPage/CardDetails.tsx index 5af5265009511..c173610cff79d 100644 --- a/src/pages/settings/Wallet/WalletPage/CardDetails.tsx +++ b/src/pages/settings/Wallet/WalletPage/CardDetails.tsx @@ -6,10 +6,13 @@ import useLocalize from '@hooks/useLocalize'; import useOnyx from '@hooks/useOnyx'; import useThemeStyles from '@hooks/useThemeStyles'; import Navigation from '@libs/Navigation/Navigation'; +import type {PlatformStackScreenProps} from '@libs/Navigation/PlatformStackNavigation/types'; +import type {SettingsNavigatorParamList} from '@libs/Navigation/types'; import {getFormattedAddress} from '@libs/PersonalDetailsUtils'; import CONST from '@src/CONST'; import ONYXKEYS from '@src/ONYXKEYS'; import ROUTES from '@src/ROUTES'; +import SCREENS from '@src/SCREENS'; import type {PrivatePersonalDetails} from '@src/types/onyx'; const defaultPrivatePersonalDetails: PrivatePersonalDetails = { @@ -24,7 +27,7 @@ const defaultPrivatePersonalDetails: PrivatePersonalDetails = { ], }; -type CardDetailsProps = { +type CardDetailsProps = Omit, 'navigation'> & { /** Card number */ pan?: string; @@ -36,9 +39,12 @@ type CardDetailsProps = { /** Domain name */ domain: string; + + /** Card ID */ + cardID: number; }; -function CardDetails({pan = '', expiration = '', cvv = '', domain}: CardDetailsProps) { +function CardDetails({pan = '', expiration = '', cvv = '', domain, cardID, route}: CardDetailsProps) { const styles = useThemeStyles(); const {translate} = useLocalize(); const [privatePersonalDetails] = useOnyx(ONYXKEYS.PRIVATE_PERSONAL_DETAILS, {canBeMissing: true}); @@ -81,7 +87,13 @@ function CardDetails({pan = '', expiration = '', cvv = '', domain}: CardDetailsP /> Navigation.navigate(ROUTES.SETTINGS_WALLET_CARD_DIGITAL_DETAILS_UPDATE_ADDRESS.getRoute(domain))} + onPress={() => { + if (route.name === SCREENS.SETTINGS.WALLET.DOMAIN_CARD) { + Navigation.navigate(ROUTES.SETTINGS_WALLET_CARD_DIGITAL_DETAILS_UPDATE_ADDRESS.getRoute(domain)); + return; + } + Navigation.navigate(ROUTES.SETTINGS_DOMAIN_CARD_UPDATE_ADDRESS.getRoute(cardID.toString())); + }} > {translate('cardPage.cardDetails.updateAddress')} From d6f0947efee6bb22e73e2912fab36161458861e2 Mon Sep 17 00:00:00 2001 From: gijoe0295 <153004152+gijoe0295@users.noreply.github.com> Date: Tue, 14 Oct 2025 02:38:03 +0700 Subject: [PATCH 2/6] pass callback to CardDetails --- .../Wallet/ExpensifyCardPage/index.tsx | 19 ++++++++------- .../Wallet/WalletPage/CardDetails.tsx | 23 ++++--------------- 2 files changed, 13 insertions(+), 29 deletions(-) diff --git a/src/pages/settings/Wallet/ExpensifyCardPage/index.tsx b/src/pages/settings/Wallet/ExpensifyCardPage/index.tsx index dc8da89d7314a..cfcb094341b0a 100644 --- a/src/pages/settings/Wallet/ExpensifyCardPage/index.tsx +++ b/src/pages/settings/Wallet/ExpensifyCardPage/index.tsx @@ -34,7 +34,7 @@ import CONST from '@src/CONST'; import type {TranslationPaths} from '@src/languages/types'; import ONYXKEYS from '@src/ONYXKEYS'; import ROUTES from '@src/ROUTES'; -import type SCREENS from '@src/SCREENS'; +import SCREENS from '@src/SCREENS'; import type {CurrencyList} from '@src/types/onyx'; import {getEmptyObject} from '@src/types/utils/EmptyObject'; import useExpensifyCardContext from './useExpensifyCardContext'; @@ -195,9 +195,13 @@ function ExpensifyCardPage({route}: ExpensifyCardPageProps) { pan={cardsDetails[card.cardID]?.pan} expiration={formatCardExpiration(cardsDetails[card.cardID]?.expiration ?? '')} cvv={cardsDetails[card.cardID]?.cvv} - domain={domain} - cardID={card.cardID} - route={route} + onUpdateAddressPress={() => { + if (route.name === SCREENS.SETTINGS.WALLET.DOMAIN_CARD) { + Navigation.navigate(ROUTES.SETTINGS_WALLET_CARD_DIGITAL_DETAILS_UPDATE_ADDRESS.getRoute(domain)); + return; + } + Navigation.navigate(ROUTES.SETTINGS_DOMAIN_CARD_UPDATE_ADDRESS.getRoute(cardID.toString())); + }} /> ) : ( <> @@ -252,12 +256,7 @@ function ExpensifyCardPage({route}: ExpensifyCardPageProps) { travelCards.map((card) => ( {!!cardsDetails[card.cardID] && cardsDetails[card.cardID]?.cvv ? ( - + ) : ( <> , 'navigation'> & { +type CardDetailsProps = { /** Card number */ pan?: string; @@ -37,14 +32,10 @@ type CardDetailsProps = Omit void; }; -function CardDetails({pan = '', expiration = '', cvv = '', domain, cardID, route}: CardDetailsProps) { +function CardDetails({pan = '', expiration = '', cvv = '', onUpdateAddressPress}: CardDetailsProps) { const styles = useThemeStyles(); const {translate} = useLocalize(); const [privatePersonalDetails] = useOnyx(ONYXKEYS.PRIVATE_PERSONAL_DETAILS, {canBeMissing: true}); @@ -87,13 +78,7 @@ function CardDetails({pan = '', expiration = '', cvv = '', domain, cardID, route /> { - if (route.name === SCREENS.SETTINGS.WALLET.DOMAIN_CARD) { - Navigation.navigate(ROUTES.SETTINGS_WALLET_CARD_DIGITAL_DETAILS_UPDATE_ADDRESS.getRoute(domain)); - return; - } - Navigation.navigate(ROUTES.SETTINGS_DOMAIN_CARD_UPDATE_ADDRESS.getRoute(cardID.toString())); - }} + onPress={() => onUpdateAddressPress?.()} > {translate('cardPage.cardDetails.updateAddress')} From 8d76e7c28ad967e9c229c29f8ef601c921ff927f Mon Sep 17 00:00:00 2001 From: gijoe0295 <153004152+gijoe0295@users.noreply.github.com> Date: Tue, 14 Oct 2025 02:47:55 +0700 Subject: [PATCH 3/6] update param type to highlight possible pages that can navigate to --- src/libs/Navigation/types.ts | 11 +++++++++++ src/pages/settings/Wallet/ExpensifyCardPage/index.tsx | 6 ++++-- .../settings/Wallet/ReportVirtualCardFraudPage.tsx | 6 ++++-- 3 files changed, 19 insertions(+), 4 deletions(-) diff --git a/src/libs/Navigation/types.ts b/src/libs/Navigation/types.ts index 856d0e8957aac..93de55621bb68 100644 --- a/src/libs/Navigation/types.ts +++ b/src/libs/Navigation/types.ts @@ -1162,6 +1162,16 @@ type SettingsNavigatorParamList = { }; } & ReimbursementAccountNavigatorParamList; +type DomainCardNavigatorParamList = { + [SCREENS.DOMAIN_CARD.DOMAIN_CARD_DETAIL]: { + cardID: string; + }; + [SCREENS.DOMAIN_CARD.DOMAIN_CARD_REPORT_FRAUD]: { + cardID: string; + backTo?: Routes; + }; +}; + type TwoFactorAuthNavigatorParamList = { [SCREENS.TWO_FACTOR_AUTH.ROOT]: { backTo?: Routes; @@ -2438,6 +2448,7 @@ export type { BackToParams, DebugParamList, DetailsNavigatorParamList, + DomainCardNavigatorParamList, EditRequestNavigatorParamList, EnablePaymentsNavigatorParamList, ExplanationModalNavigatorParamList, diff --git a/src/pages/settings/Wallet/ExpensifyCardPage/index.tsx b/src/pages/settings/Wallet/ExpensifyCardPage/index.tsx index cfcb094341b0a..184735053a039 100644 --- a/src/pages/settings/Wallet/ExpensifyCardPage/index.tsx +++ b/src/pages/settings/Wallet/ExpensifyCardPage/index.tsx @@ -23,7 +23,7 @@ import {formatCardExpiration, getDomainCards, maskCard, maskPin} from '@libs/Car import {convertToDisplayString, getCurrencyKeyByCountryCode} from '@libs/CurrencyUtils'; import Navigation from '@libs/Navigation/Navigation'; import type {PlatformStackScreenProps} from '@libs/Navigation/PlatformStackNavigation/types'; -import type {SettingsNavigatorParamList} from '@libs/Navigation/types'; +import type {DomainCardNavigatorParamList, SettingsNavigatorParamList} from '@libs/Navigation/types'; import {buildCannedSearchQuery} from '@libs/SearchQueryUtils'; import NotFoundPage from '@pages/ErrorPage/NotFoundPage'; import RedDotCardSection from '@pages/settings/Wallet/RedDotCardSection'; @@ -39,7 +39,9 @@ import type {CurrencyList} from '@src/types/onyx'; import {getEmptyObject} from '@src/types/utils/EmptyObject'; import useExpensifyCardContext from './useExpensifyCardContext'; -type ExpensifyCardPageProps = PlatformStackScreenProps; +type ExpensifyCardPageProps = + | PlatformStackScreenProps + | PlatformStackScreenProps; type PossibleTitles = 'cardPage.smartLimit.title' | 'cardPage.monthlyLimit.title' | 'cardPage.fixedLimit.title'; diff --git a/src/pages/settings/Wallet/ReportVirtualCardFraudPage.tsx b/src/pages/settings/Wallet/ReportVirtualCardFraudPage.tsx index d4d778033a97b..f65095da00a7f 100644 --- a/src/pages/settings/Wallet/ReportVirtualCardFraudPage.tsx +++ b/src/pages/settings/Wallet/ReportVirtualCardFraudPage.tsx @@ -11,7 +11,7 @@ import useThemeStyles from '@hooks/useThemeStyles'; import {getLatestErrorMessage} from '@libs/ErrorUtils'; import Navigation from '@libs/Navigation/Navigation'; import type {PlatformStackScreenProps} from '@libs/Navigation/PlatformStackNavigation/types'; -import type {SettingsNavigatorParamList} from '@libs/Navigation/types'; +import type {DomainCardNavigatorParamList, SettingsNavigatorParamList} from '@libs/Navigation/types'; import NotFoundPage from '@pages/ErrorPage/NotFoundPage'; import {clearReportVirtualCardFraudForm} from '@userActions/Card'; import CONST from '@src/CONST'; @@ -20,7 +20,9 @@ import ROUTES from '@src/ROUTES'; import type SCREENS from '@src/SCREENS'; import {isEmptyObject} from '@src/types/utils/EmptyObject'; -type ReportVirtualCardFraudPageProps = PlatformStackScreenProps; +type ReportVirtualCardFraudPageProps = + | PlatformStackScreenProps + | PlatformStackScreenProps; function ReportVirtualCardFraudPage({ route: { From 121300457e33e074e212b979e7675a62649b52c2 Mon Sep 17 00:00:00 2001 From: gijoe0295 <153004152+gijoe0295@users.noreply.github.com> Date: Tue, 14 Oct 2025 02:49:28 +0700 Subject: [PATCH 4/6] add JSDoc comment --- src/pages/settings/Wallet/WalletPage/CardDetails.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/src/pages/settings/Wallet/WalletPage/CardDetails.tsx b/src/pages/settings/Wallet/WalletPage/CardDetails.tsx index a36b95954ea04..2c882ed2d19f1 100644 --- a/src/pages/settings/Wallet/WalletPage/CardDetails.tsx +++ b/src/pages/settings/Wallet/WalletPage/CardDetails.tsx @@ -32,6 +32,7 @@ type CardDetailsProps = { /** 3 digit code */ cvv?: string; + /** Callback to navigate to update address page */ onUpdateAddressPress?: () => void; }; From 6f5b3a42efb8f97d3765a48ca63f47d38b30f265 Mon Sep 17 00:00:00 2001 From: gijoe0295 <153004152+gijoe0295@users.noreply.github.com> Date: Thu, 16 Oct 2025 06:48:10 +0700 Subject: [PATCH 5/6] handle domain card navigator routes for magic code page --- src/ROUTES.ts | 4 +++ src/SCREENS.ts | 1 + .../ModalStackNavigators/index.tsx | 1 + src/libs/Navigation/linkingConfig/config.ts | 3 +++ src/libs/Navigation/types.ts | 3 +++ .../ExpensifyCardVerifyAccountPage.tsx | 27 ++++++++++++------- .../Wallet/ExpensifyCardPage/index.tsx | 10 ++++--- 7 files changed, 36 insertions(+), 13 deletions(-) diff --git a/src/ROUTES.ts b/src/ROUTES.ts index b45a21e6cdd5b..0e48185c78625 100644 --- a/src/ROUTES.ts +++ b/src/ROUTES.ts @@ -272,6 +272,10 @@ const ROUTES = { route: 'settings/card/:cardID/update-address', getRoute: (cardID: string) => `settings/card/${cardID}/update-address` as const, }, + SETTINGS_DOMAIN_CARD_CONFIRM_MAGIC_CODE: { + route: 'settings/card/:cardID/confirm-magic-code', + getRoute: (cardID: string) => `settings/card/${cardID}/confirm-magic-code` as const, + }, SETTINGS_REPORT_FRAUD: { route: 'settings/wallet/card/:cardID/report-virtual-fraud', getRoute: (cardID: string) => `settings/wallet/card/${cardID}/report-virtual-fraud` as const, diff --git a/src/SCREENS.ts b/src/SCREENS.ts index 57c08f565ae96..decc9b917d4a4 100644 --- a/src/SCREENS.ts +++ b/src/SCREENS.ts @@ -354,6 +354,7 @@ const SCREENS = { DOMAIN_CARD_DETAIL: 'Domain_Card_Detail', DOMAIN_CARD_REPORT_FRAUD: 'Domain_Card_Report_Fraud', DOMAIN_CARD_UPDATE_ADDRESS: 'Domain_Card_Update_Address', + DOMAIN_CARD_CONFIRM_MAGIC_CODE: 'Domain_Card_Confirm_Magic_Code', }, SETTINGS_TAGS: { diff --git a/src/libs/Navigation/AppNavigator/ModalStackNavigators/index.tsx b/src/libs/Navigation/AppNavigator/ModalStackNavigators/index.tsx index add96c90213ac..b0bea83b328d5 100644 --- a/src/libs/Navigation/AppNavigator/ModalStackNavigators/index.tsx +++ b/src/libs/Navigation/AppNavigator/ModalStackNavigators/index.tsx @@ -284,6 +284,7 @@ const DomainCardModalStackNavigator = createModalStackNavigator({ [SCREENS.DOMAIN_CARD.DOMAIN_CARD_DETAIL]: () => require('../../../../pages/settings/Wallet/ExpensifyCardPage/index').default, [SCREENS.DOMAIN_CARD.DOMAIN_CARD_REPORT_FRAUD]: () => require('../../../../pages/settings/Wallet/ReportVirtualCardFraudPage').default, [SCREENS.DOMAIN_CARD.DOMAIN_CARD_UPDATE_ADDRESS]: () => require('../../../../pages/settings/Profile/PersonalDetails/PersonalAddressPage').default, + [SCREENS.DOMAIN_CARD.DOMAIN_CARD_CONFIRM_MAGIC_CODE]: () => require('../../../../pages/settings/Wallet/ExpensifyCardPage/ExpensifyCardVerifyAccountPage').default, }); const ReportParticipantsModalStackNavigator = createModalStackNavigator({ diff --git a/src/libs/Navigation/linkingConfig/config.ts b/src/libs/Navigation/linkingConfig/config.ts index 49ab69b70c7da..af2dea23c91b7 100644 --- a/src/libs/Navigation/linkingConfig/config.ts +++ b/src/libs/Navigation/linkingConfig/config.ts @@ -1249,6 +1249,9 @@ const config: LinkingOptions['config'] = { [SCREENS.DOMAIN_CARD.DOMAIN_CARD_UPDATE_ADDRESS]: { path: ROUTES.SETTINGS_DOMAIN_CARD_UPDATE_ADDRESS.route, }, + [SCREENS.DOMAIN_CARD.DOMAIN_CARD_CONFIRM_MAGIC_CODE]: { + path: ROUTES.SETTINGS_DOMAIN_CARD_CONFIRM_MAGIC_CODE.route, + }, }, }, [SCREENS.RIGHT_MODAL.REPORT_DESCRIPTION]: { diff --git a/src/libs/Navigation/types.ts b/src/libs/Navigation/types.ts index 915e509ba958a..54eb2b4c9f8d8 100644 --- a/src/libs/Navigation/types.ts +++ b/src/libs/Navigation/types.ts @@ -1171,6 +1171,9 @@ type DomainCardNavigatorParamList = { cardID: string; backTo?: Routes; }; + [SCREENS.DOMAIN_CARD.DOMAIN_CARD_CONFIRM_MAGIC_CODE]: { + cardID: string; + }; }; type TwoFactorAuthNavigatorParamList = { diff --git a/src/pages/settings/Wallet/ExpensifyCardPage/ExpensifyCardVerifyAccountPage.tsx b/src/pages/settings/Wallet/ExpensifyCardPage/ExpensifyCardVerifyAccountPage.tsx index d5662c1a24e2c..ecdc429e20e42 100644 --- a/src/pages/settings/Wallet/ExpensifyCardPage/ExpensifyCardVerifyAccountPage.tsx +++ b/src/pages/settings/Wallet/ExpensifyCardPage/ExpensifyCardVerifyAccountPage.tsx @@ -6,27 +6,34 @@ import {revealVirtualCardDetails} from '@libs/actions/Card'; import {requestValidateCodeAction, resetValidateActionCodeSent} from '@libs/actions/User'; import Navigation from '@libs/Navigation/Navigation'; import type {PlatformStackScreenProps} from '@libs/Navigation/PlatformStackNavigation/types'; -import type {SettingsNavigatorParamList} from '@libs/Navigation/types'; +import type {DomainCardNavigatorParamList, SettingsNavigatorParamList} from '@libs/Navigation/types'; import ONYXKEYS from '@src/ONYXKEYS'; import ROUTES from '@src/ROUTES'; -import type SCREENS from '@src/SCREENS'; +import SCREENS from '@src/SCREENS'; import type {ExpensifyCardDetails} from '@src/types/onyx/Card'; import type {Errors} from '@src/types/onyx/OnyxCommon'; import useExpensifyCardContext from './useExpensifyCardContext'; -type ExpensifyCardVerifyAccountPageProps = PlatformStackScreenProps; +type ExpensifyCardVerifyAccountPageProps = + | PlatformStackScreenProps + | PlatformStackScreenProps; -function ExpensifyCardVerifyAccountPage({ - route: { - params: {cardID = ''}, - }, -}: ExpensifyCardVerifyAccountPageProps) { +function ExpensifyCardVerifyAccountPage({route}: ExpensifyCardVerifyAccountPageProps) { + const {cardID} = route.params; const {translate} = useLocalize(); const [validateError, setValidateError] = useState({}); const [account] = useOnyx(ONYXKEYS.ACCOUNT, {canBeMissing: false}); const primaryLogin = account?.primaryLogin ?? ''; const {setIsCardDetailsLoading, setCardsDetails, setCardsDetailsErrors} = useExpensifyCardContext(); + const navigateBack = () => { + if (route.name === SCREENS.DOMAIN_CARD.DOMAIN_CARD_CONFIRM_MAGIC_CODE) { + Navigation.goBack(ROUTES.SETTINGS_DOMAIN_CARD_DETAIL.getRoute(cardID)); + return; + } + Navigation.goBack(ROUTES.SETTINGS_WALLET_DOMAIN_CARD.getRoute(cardID)); + }; + const handleRevealCardDetails = (validateCode: string) => { setIsCardDetailsLoading((prevState: Record) => ({ ...prevState, @@ -43,7 +50,7 @@ function ExpensifyCardVerifyAccountPage({ ...prevState, [cardID]: '', })); - Navigation.goBack(ROUTES.SETTINGS_WALLET_DOMAIN_CARD.getRoute(cardID)); + navigateBack(); }) .catch((error: string) => { // Displaying magic code errors is handled in the modal, no need to set it on the card @@ -68,7 +75,7 @@ function ExpensifyCardVerifyAccountPage({ clearError={() => setValidateError({})} onClose={() => { resetValidateActionCodeSent(); - Navigation.goBack(ROUTES.SETTINGS_WALLET_DOMAIN_CARD.getRoute(cardID)); + navigateBack(); }} /> ); diff --git a/src/pages/settings/Wallet/ExpensifyCardPage/index.tsx b/src/pages/settings/Wallet/ExpensifyCardPage/index.tsx index 4778a42797cb2..191180e381081 100644 --- a/src/pages/settings/Wallet/ExpensifyCardPage/index.tsx +++ b/src/pages/settings/Wallet/ExpensifyCardPage/index.tsx @@ -199,11 +199,11 @@ function ExpensifyCardPage({route}: ExpensifyCardPageProps) { expiration={formatCardExpiration(cardsDetails[card.cardID]?.expiration ?? '')} cvv={cardsDetails[card.cardID]?.cvv} onUpdateAddressPress={() => { - if (route.name === SCREENS.SETTINGS.WALLET.DOMAIN_CARD) { - Navigation.navigate(ROUTES.SETTINGS_WALLET_CARD_DIGITAL_DETAILS_UPDATE_ADDRESS.getRoute(domain)); + if (route.name === SCREENS.DOMAIN_CARD.DOMAIN_CARD_DETAIL) { + Navigation.navigate(ROUTES.SETTINGS_DOMAIN_CARD_UPDATE_ADDRESS.getRoute(String(card.cardID))); return; } - Navigation.navigate(ROUTES.SETTINGS_DOMAIN_CARD_UPDATE_ADDRESS.getRoute(cardID.toString())); + Navigation.navigate(ROUTES.SETTINGS_WALLET_CARD_DIGITAL_DETAILS_UPDATE_ADDRESS.getRoute(domain)); }} /> ) : ( @@ -223,6 +223,10 @@ function ExpensifyCardPage({route}: ExpensifyCardPageProps) { showLockedAccountModal(); return; } + if (route.name === SCREENS.DOMAIN_CARD.DOMAIN_CARD_DETAIL) { + Navigation.navigate(ROUTES.SETTINGS_DOMAIN_CARD_CONFIRM_MAGIC_CODE.getRoute(String(card.cardID))); + return; + } Navigation.navigate(ROUTES.SETTINGS_WALLET_DOMAIN_CARD_CONFIRM_MAGIC_CODE.getRoute(String(card.cardID))); }} isDisabled={isCardDetailsLoading[card.cardID] || isOffline} From 967d847df3a5a058a3ff46f035611cde62b3386d Mon Sep 17 00:00:00 2001 From: gijoe0295 <153004152+gijoe0295@users.noreply.github.com> Date: Thu, 16 Oct 2025 07:04:41 +0700 Subject: [PATCH 6/6] handle domain navigator routes for report fraud flow --- src/libs/Navigation/types.ts | 1 - .../settings/Wallet/ExpensifyCardPage/index.tsx | 4 ++++ .../Wallet/ReportVirtualCardFraudPage.tsx | 17 ++++++++++------- 3 files changed, 14 insertions(+), 8 deletions(-) diff --git a/src/libs/Navigation/types.ts b/src/libs/Navigation/types.ts index 54eb2b4c9f8d8..1dfbfe90f6d53 100644 --- a/src/libs/Navigation/types.ts +++ b/src/libs/Navigation/types.ts @@ -1169,7 +1169,6 @@ type DomainCardNavigatorParamList = { }; [SCREENS.DOMAIN_CARD.DOMAIN_CARD_REPORT_FRAUD]: { cardID: string; - backTo?: Routes; }; [SCREENS.DOMAIN_CARD.DOMAIN_CARD_CONFIRM_MAGIC_CODE]: { cardID: string; diff --git a/src/pages/settings/Wallet/ExpensifyCardPage/index.tsx b/src/pages/settings/Wallet/ExpensifyCardPage/index.tsx index 191180e381081..3f6c59d26598b 100644 --- a/src/pages/settings/Wallet/ExpensifyCardPage/index.tsx +++ b/src/pages/settings/Wallet/ExpensifyCardPage/index.tsx @@ -253,6 +253,10 @@ function ExpensifyCardPage({route}: ExpensifyCardPageProps) { showLockedAccountModal(); return; } + if (route.name === SCREENS.DOMAIN_CARD.DOMAIN_CARD_DETAIL) { + Navigation.navigate(ROUTES.SETTINGS_DOMAIN_CARD_REPORT_FRAUD.getRoute(String(card.cardID))); + return; + } Navigation.navigate(ROUTES.SETTINGS_REPORT_FRAUD.getRoute(String(card.cardID))); }} /> diff --git a/src/pages/settings/Wallet/ReportVirtualCardFraudPage.tsx b/src/pages/settings/Wallet/ReportVirtualCardFraudPage.tsx index f65095da00a7f..95847b07372d9 100644 --- a/src/pages/settings/Wallet/ReportVirtualCardFraudPage.tsx +++ b/src/pages/settings/Wallet/ReportVirtualCardFraudPage.tsx @@ -17,18 +17,15 @@ import {clearReportVirtualCardFraudForm} from '@userActions/Card'; 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'; import {isEmptyObject} from '@src/types/utils/EmptyObject'; type ReportVirtualCardFraudPageProps = | PlatformStackScreenProps | PlatformStackScreenProps; -function ReportVirtualCardFraudPage({ - route: { - params: {cardID = '', backTo}, - }, -}: ReportVirtualCardFraudPageProps) { +function ReportVirtualCardFraudPage({route}: ReportVirtualCardFraudPageProps) { + const {cardID = ''} = route.params; const styles = useThemeStyles(); const {translate} = useLocalize(); const [cardList] = useOnyx(ONYXKEYS.CARD_LIST, {canBeMissing: false}); @@ -54,7 +51,13 @@ function ReportVirtualCardFraudPage({ Navigation.goBack(backTo)} + onBackButtonPress={() => { + if (route.name === SCREENS.DOMAIN_CARD.DOMAIN_CARD_REPORT_FRAUD) { + Navigation.goBack(ROUTES.SETTINGS_DOMAIN_CARD_DETAIL.getRoute(cardID)); + return; + } + Navigation.goBack(ROUTES.SETTINGS_WALLET_DOMAIN_CARD.getRoute(cardID)); + }} /> {translate('reportFraudPage.description')}