From 6fe192bcf4212fe649c2a727f34bf88da0caf42f Mon Sep 17 00:00:00 2001 From: Wojciech Boman Date: Thu, 15 Jan 2026 20:21:23 +0100 Subject: [PATCH] Fix issue: Expense - Expense report RHP does not close and opens not here page after rejecting expense --- src/libs/actions/Search.ts | 20 +++++++++++++++----- src/pages/Search/SearchRejectReasonPage.tsx | 2 +- src/pages/iou/RejectReasonPage.tsx | 11 +++++++++-- 3 files changed, 25 insertions(+), 8 deletions(-) diff --git a/src/libs/actions/Search.ts b/src/libs/actions/Search.ts index 29b64221bbb50..eeeb9d5958f90 100644 --- a/src/libs/actions/Search.ts +++ b/src/libs/actions/Search.ts @@ -18,6 +18,7 @@ import {getMicroSecondOnyxErrorWithTranslationKey} from '@libs/ErrorUtils'; import fileDownload from '@libs/fileDownload'; import isSearchTopmostFullScreenRoute from '@libs/Navigation/helpers/isSearchTopmostFullScreenRoute'; import Navigation, {navigationRef} from '@libs/Navigation/Navigation'; +import type {SearchFullscreenNavigatorParamList} from '@libs/Navigation/types'; import enhanceParameters from '@libs/Network/enhanceParameters'; import {rand64} from '@libs/NumberUtils'; import {getActivePaymentType} from '@libs/PaymentUtils'; @@ -845,13 +846,22 @@ function rejectMoneyRequestsOnSearch( if (isSingleReport && areAllExpensesSelected && !isPolicyDelayedSubmissionEnabled) { const searchFullScreenRoutes = navigationRef.getRootState()?.routes.findLast((route) => route.name === NAVIGATORS.SEARCH_FULLSCREEN_NAVIGATOR); const lastRoute = searchFullScreenRoutes?.state?.routes?.at(-1); + const focusedNavigator = navigationRef.getRootState()?.routes?.at(-1); const isUserOnSearchPage = isSearchTopmostFullScreenRoute() && lastRoute?.name === SCREENS.SEARCH.ROOT; - const isUserOnSearchMoneyRequestReport = isSearchTopmostFullScreenRoute() && lastRoute?.name === SCREENS.SEARCH.MONEY_REQUEST_REPORT; + const isUserOnSearchMoneyRequestReport = + focusedNavigator?.name === NAVIGATORS.RIGHT_MODAL_NAVIGATOR && + focusedNavigator?.state?.routes?.some((route) => route.name === SCREENS.RIGHT_MODAL.SEARCH_MONEY_REQUEST_REPORT); if (isUserOnSearchPage) { - urlToNavigateBack = undefined; - } else if (isUserOnSearchMoneyRequestReport) { - const lastRouteParams = lastRoute?.params; - urlToNavigateBack = lastRouteParams && 'backTo' in lastRouteParams ? lastRouteParams?.backTo : undefined; + if (isUserOnSearchMoneyRequestReport && lastRoute?.params) { + const searchParams = lastRoute.params as SearchFullscreenNavigatorParamList[typeof SCREENS.SEARCH.ROOT]; + urlToNavigateBack = ROUTES.SEARCH_ROOT.getRoute({ + query: searchParams.q, + ...(searchParams?.rawQuery && {rawQuery: searchParams.rawQuery}), + ...(searchParams?.name && {name: searchParams.name}), + }); + } else { + urlToNavigateBack = undefined; + } } else { urlToNavigateBack = ROUTES.REPORT_WITH_ID.getRoute(report?.chatReportID); } diff --git a/src/pages/Search/SearchRejectReasonPage.tsx b/src/pages/Search/SearchRejectReasonPage.tsx index 583aa0f8f1d20..5c50ee4d02673 100644 --- a/src/pages/Search/SearchRejectReasonPage.tsx +++ b/src/pages/Search/SearchRejectReasonPage.tsx @@ -43,7 +43,7 @@ function SearchRejectReasonPage({route}: SearchRejectReasonPageProps) { } else { context.clearSelectedTransactions(); } - Navigation.dismissModal(); + Navigation.dismissToSuperWideRHP(); if (urlToNavigateBack) { Navigation.isNavigationReady().then(() => Navigation.goBack(urlToNavigateBack as Route)); } diff --git a/src/pages/iou/RejectReasonPage.tsx b/src/pages/iou/RejectReasonPage.tsx index 1068c65e9c0fe..e68a89f20effa 100644 --- a/src/pages/iou/RejectReasonPage.tsx +++ b/src/pages/iou/RejectReasonPage.tsx @@ -1,7 +1,8 @@ import {getReportPolicyID} from '@selectors/Report'; -import React, {useCallback, useEffect} from 'react'; +import React, {useCallback, useContext, useEffect} from 'react'; import type {FormInputErrors, FormOnyxValues} from '@components/Form/types'; import {useSearchContext} from '@components/Search/SearchContext'; +import {WideRHPContext} from '@components/WideRHPContextProvider'; import useLocalize from '@hooks/useLocalize'; import useOnyx from '@hooks/useOnyx'; import usePolicy from '@hooks/usePolicy'; @@ -29,11 +30,17 @@ function RejectReasonPage({route}: RejectReasonPageProps) { const {removeTransaction} = useSearchContext(); const [reportPolicyID] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT}${getNonEmptyStringOnyxID(reportID)}`, {canBeMissing: false, selector: getReportPolicyID}); const policy = usePolicy(reportPolicyID); + const {superWideRHPRouteKeys} = useContext(WideRHPContext); const onSubmit = (values: FormOnyxValues) => { const urlToNavigateBack = rejectMoneyRequest(transactionID, reportID, values.comment, policy); removeTransaction(transactionID); - Navigation.dismissToSuperWideRHP(); + // If the super wide rhp is not opened, dismiss the entire modal. + if (superWideRHPRouteKeys.length > 0) { + Navigation.dismissToSuperWideRHP(); + } else { + Navigation.dismissModal(); + } if (urlToNavigateBack && getIsSmallScreenWidth()) { Navigation.isNavigationReady().then(() => Navigation.goBack(urlToNavigateBack)); }