From 4edc518505f1ced774d92f2a600aa9f384799085 Mon Sep 17 00:00:00 2001 From: Adam Grzybowski Date: Tue, 20 Aug 2024 16:44:23 +0200 Subject: [PATCH 1/3] keep user on search page if expense is created from Search page --- .../Navigation/isSearchTopmostCentralPane.ts | 22 +++++++++++++++++ src/libs/actions/IOU.ts | 24 ++++++++++++------- 2 files changed, 37 insertions(+), 9 deletions(-) create mode 100644 src/libs/Navigation/isSearchTopmostCentralPane.ts diff --git a/src/libs/Navigation/isSearchTopmostCentralPane.ts b/src/libs/Navigation/isSearchTopmostCentralPane.ts new file mode 100644 index 000000000000..3c315116bb00 --- /dev/null +++ b/src/libs/Navigation/isSearchTopmostCentralPane.ts @@ -0,0 +1,22 @@ +import SCREENS from '@src/SCREENS'; +import getTopmostCentralPaneRoute from './getTopmostCentralPaneRoute'; +import {navigationRef} from './Navigation'; +import type {RootStackParamList, State} from './types'; + +const isSearchTopmostCentralPane = (): boolean => { + const rootState = navigationRef.getRootState() as State; + + if (!rootState) { + return false; + } + + const topmostCentralPaneRoute = getTopmostCentralPaneRoute(rootState); + + if (topmostCentralPaneRoute?.name === SCREENS.SEARCH.CENTRAL_PANE) { + return true; + } + + return false; +}; + +export default isSearchTopmostCentralPane; diff --git a/src/libs/actions/IOU.ts b/src/libs/actions/IOU.ts index e84a14836efd..ed1b1191bf87 100644 --- a/src/libs/actions/IOU.ts +++ b/src/libs/actions/IOU.ts @@ -37,6 +37,7 @@ import * as FileUtils from '@libs/fileDownload/FileUtils'; import * as IOUUtils from '@libs/IOUUtils'; import * as LocalePhoneNumber from '@libs/LocalePhoneNumber'; import * as Localize from '@libs/Localize'; +import isSearchTopmostCentralPane from '@libs/Navigation/isSearchTopmostCentralPane'; import Navigation from '@libs/Navigation/Navigation'; import * as NextStepUtils from '@libs/NextStepUtils'; import {rand64} from '@libs/NumberUtils'; @@ -3587,7 +3588,7 @@ function requestMoney( } } - Navigation.dismissModal(activeReportID); + Navigation.dismissModal(isSearchTopmostCentralPane() ? undefined : activeReportID); if (activeReportID) { Report.notifyNewAction(activeReportID, payeeAccountID); } @@ -3629,7 +3630,12 @@ function sendInvoice( API.write(WRITE_COMMANDS.SEND_INVOICE, parameters, onyxData); - Navigation.dismissModalWithReport(invoiceRoom); + if (isSearchTopmostCentralPane()) { + Navigation.dismissModal(); + } else { + Navigation.dismissModalWithReport(invoiceRoom); + } + Report.notifyNewAction(invoiceRoom.reportID, receiver.accountID); } @@ -3807,7 +3813,7 @@ function trackExpense( API.write(WRITE_COMMANDS.TRACK_EXPENSE, parameters, onyxData); } } - Navigation.dismissModal(activeReportID); + Navigation.dismissModal(isSearchTopmostCentralPane() ? undefined : activeReportID); if (action === CONST.IOU.ACTION.SHARE) { Navigation.navigate(ROUTES.ROOM_INVITE.getRoute(activeReportID ?? '-1', CONST.IOU.SHARE.ROLE.ACCOUNTANT)); @@ -4373,7 +4379,7 @@ function splitBill({ API.write(WRITE_COMMANDS.SPLIT_BILL, parameters, onyxData); - Navigation.dismissModal(existingSplitChatReportID); + Navigation.dismissModal(isSearchTopmostCentralPane() ? undefined : existingSplitChatReportID); Report.notifyNewAction(splitData.chatReportID, currentUserAccountID); } @@ -4440,7 +4446,7 @@ function splitBillAndOpenReport({ API.write(WRITE_COMMANDS.SPLIT_BILL_AND_OPEN_REPORT, parameters, onyxData); - Navigation.dismissModal(splitData.chatReportID); + Navigation.dismissModal(isSearchTopmostCentralPane() ? undefined : splitData.chatReportID); Report.notifyNewAction(splitData.chatReportID, currentUserAccountID); } @@ -4994,7 +5000,7 @@ function completeSplitBill(chatReportID: string, reportAction: OnyxTypes.ReportA }; API.write(WRITE_COMMANDS.COMPLETE_SPLIT_BILL, parameters, {optimisticData, successData, failureData}); - Navigation.dismissModal(chatReportID); + Navigation.dismissModal(isSearchTopmostCentralPane() ? undefined : chatReportID); Report.notifyNewAction(chatReportID, sessionAccountID); } @@ -5153,7 +5159,7 @@ function createDistanceRequest( API.write(WRITE_COMMANDS.CREATE_DISTANCE_REQUEST, parameters, onyxData); const activeReportID = isMoneyRequestReport ? report?.reportID ?? '-1' : parameters.chatReportID; - Navigation.dismissModal(activeReportID); + Navigation.dismissModal(isSearchTopmostCentralPane() ? undefined : activeReportID); Report.notifyNewAction(activeReportID, userAccountID); } @@ -6754,7 +6760,7 @@ function sendMoneyElsewhere(report: OnyxEntry, amount: number, API.write(WRITE_COMMANDS.SEND_MONEY_ELSEWHERE, params, {optimisticData, successData, failureData}); - Navigation.dismissModal(params.chatReportID); + Navigation.dismissModal(isSearchTopmostCentralPane() ? undefined : params.chatReportID); Report.notifyNewAction(params.chatReportID, managerID); } @@ -6767,7 +6773,7 @@ function sendMoneyWithWallet(report: OnyxEntry, amount: number API.write(WRITE_COMMANDS.SEND_MONEY_WITH_WALLET, params, {optimisticData, successData, failureData}); - Navigation.dismissModal(params.chatReportID); + Navigation.dismissModal(isSearchTopmostCentralPane() ? undefined : params.chatReportID); Report.notifyNewAction(params.chatReportID, managerID); } From 12ed4000897d2e48618b397a8ea0eed0fb268527 Mon Sep 17 00:00:00 2001 From: Adam Grzybowski Date: Thu, 22 Aug 2024 15:51:02 +0200 Subject: [PATCH 2/3] fix dismissModal on EditReportFiledPage --- src/pages/EditReportFieldPage.tsx | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/pages/EditReportFieldPage.tsx b/src/pages/EditReportFieldPage.tsx index a58f95eebc9d..9922eeb2a430 100644 --- a/src/pages/EditReportFieldPage.tsx +++ b/src/pages/EditReportFieldPage.tsx @@ -12,6 +12,7 @@ import ScreenWrapper from '@components/ScreenWrapper'; import useLocalize from '@hooks/useLocalize'; import useThemeStyles from '@hooks/useThemeStyles'; import useWindowDimensions from '@hooks/useWindowDimensions'; +import isSearchTopmostCentralPane from '@libs/Navigation/isSearchTopmostCentralPane'; import Navigation from '@libs/Navigation/Navigation'; import * as ReportUtils from '@libs/ReportUtils'; import * as ReportActions from '@src/libs/actions/Report'; @@ -80,14 +81,14 @@ function EditReportFieldPage({route, policy, report}: EditReportFieldPageProps) Navigation.goBack(); } else { ReportActions.updateReportField(report.reportID, {...reportField, value: value === '' ? null : value}, reportField); - Navigation.dismissModal(report?.reportID); + Navigation.dismissModal(isSearchTopmostCentralPane() ? undefined : report?.reportID); } }; const handleReportFieldDelete = () => { ReportActions.deleteReportField(report.reportID, reportField); setIsDeleteModalVisible(false); - Navigation.dismissModal(report?.reportID); + Navigation.dismissModal(isSearchTopmostCentralPane() ? undefined : report?.reportID); }; const fieldValue = isReportFieldTitle ? report.reportName ?? '' : reportField.value ?? reportField.defaultValue; From 9e1b2db2c67abb3e79136b6ecc924bbed3f3bbd5 Mon Sep 17 00:00:00 2001 From: Adam Grzybowski Date: Fri, 23 Aug 2024 12:27:19 +0200 Subject: [PATCH 3/3] fix tests --- tests/actions/IOUTest.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/actions/IOUTest.ts b/tests/actions/IOUTest.ts index 405760435d14..42840bea35f6 100644 --- a/tests/actions/IOUTest.ts +++ b/tests/actions/IOUTest.ts @@ -34,6 +34,8 @@ jest.mock('@src/libs/Navigation/Navigation', () => ({ goBack: jest.fn(), })); +jest.mock('@src/libs/Navigation/isSearchTopmostCentralPane', () => jest.fn()); + const CARLOS_EMAIL = 'cmartins@expensifail.com'; const CARLOS_ACCOUNT_ID = 1; const CARLOS_PARTICIPANT: Participant = {hidden: false, role: 'member'};