Skip to content

Commit ce26394

Browse files
authored
Merge pull request Expensify#78382 from daledah/fix/78133
fix: app opens Inbox after refreshing Reports page with Split RHP opened
2 parents 2b53350 + 5d467b8 commit ce26394

7 files changed

Lines changed: 63 additions & 7 deletions

File tree

src/ROUTES.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -772,6 +772,20 @@ const ROUTES = {
772772
return getUrlWithBackToParam(`create/split-expense/overview/${reportID}/${originalTransactionID}${splitExpenseTransactionIDPart}`, backTo);
773773
},
774774
},
775+
SPLIT_EXPENSE_SEARCH: {
776+
route: 'create/split-expense/overview/:reportID/:transactionID/:splitExpenseTransactionID?/search',
777+
getRoute: (reportID: string | undefined, originalTransactionID: string | undefined, splitExpenseTransactionID?: string, backTo?: string) => {
778+
if (!reportID || !originalTransactionID) {
779+
Log.warn(`Invalid ${reportID}(reportID) or ${originalTransactionID}(transactionID) is used to build the SPLIT_EXPENSE_SEARCH route`);
780+
}
781+
782+
// eslint-disable-next-line no-restricted-syntax -- Legacy route generation
783+
return getUrlWithBackToParam(
784+
`create/split-expense/overview/${reportID}/${originalTransactionID}${splitExpenseTransactionID ? `/${splitExpenseTransactionID}` : ''}/search`,
785+
backTo,
786+
);
787+
},
788+
},
775789
SPLIT_EXPENSE_CREATE_DATE_RANGE: {
776790
route: 'create/split-expense/create-date-range/:reportID/:transactionID?',
777791
getRoute: (reportID: string | undefined, transactionID: string | undefined, backTo?: string) => {

src/SCREENS.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -322,6 +322,7 @@ const SCREENS = {
322322
STEP_REPORT: 'Money_Request_Report',
323323
EDIT_REPORT: 'Money_Request_Edit_Report',
324324
SPLIT_EXPENSE: 'Money_Request_Split_Expense',
325+
SPLIT_EXPENSE_SEARCH: 'Money_Request_Split_Expense_Search',
325326
SPLIT_EXPENSE_CREATE_DATE_RANGE: 'Money_Request_Split_Expense_Create_Date_Range',
326327
SPLIT_EXPENSE_EDIT: 'Money_Request_Split_Expense_Edit',
327328
DISTANCE_CREATE: 'Money_Request_Distance_Create',

src/libs/Navigation/AppNavigator/ModalStackNavigators/index.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,7 @@ const MoneyRequestModalStackNavigator = createModalStackNavigator<MoneyRequestNa
177177
[SCREENS.MONEY_REQUEST.STEP_SUBRATE_EDIT]: () => require<ReactComponentModule>('../../../../pages/iou/request/step/IOURequestStepSubrate').default,
178178
[SCREENS.MONEY_REQUEST.RECEIPT_VIEW]: () => require<ReactComponentModule>('../../../../pages/iou/request/step/IOURequestStepScan/ReceiptView').default,
179179
[SCREENS.MONEY_REQUEST.SPLIT_EXPENSE]: () => require<ReactComponentModule>('../../../../pages/iou/SplitExpensePage').default,
180+
[SCREENS.MONEY_REQUEST.SPLIT_EXPENSE_SEARCH]: () => require<ReactComponentModule>('../../../../pages/iou/SplitExpensePage').default,
180181
[SCREENS.MONEY_REQUEST.SPLIT_EXPENSE_CREATE_DATE_RANGE]: () => require<ReactComponentModule>('../../../../pages/iou/SplitExpenseCreateDateRagePage').default,
181182
[SCREENS.MONEY_REQUEST.SPLIT_EXPENSE_EDIT]: () => require<ReactComponentModule>('../../../../pages/iou/SplitExpenseEditPage').default,
182183
[SCREENS.MONEY_REQUEST.DISTANCE_CREATE]: () => require<ReactComponentModule>('../../../../pages/iou/request/DistanceRequestStartPage').default,

src/libs/Navigation/helpers/getAdaptedStateFromPath.ts

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,23 @@ function isRouteWithReportID(route: NavigationPartialRoute): route is Route<stri
4343
return route.params !== undefined && 'reportID' in route.params && typeof route.params.reportID === 'string';
4444
}
4545

46+
/**
47+
* Get the appropriate screen name for RHP_TO_SEARCH lookup.
48+
* Split tabs (amount, percentage, date) are nested routes within SPLIT_EXPENSE/SPLIT_EXPENSE_SEARCH.
49+
* When a split tab route is accessed from search context (path contains '/search'),
50+
* we use SPLIT_EXPENSE_SEARCH for the mapping lookup instead of the tab name.
51+
*/
52+
function getSearchScreenNameForRoute(route: NavigationPartialRoute): string {
53+
const splitTabNames = Object.values(CONST.TAB.SPLIT) as string[];
54+
const isSplitTabRoute = splitTabNames.includes(route.name);
55+
56+
if (isSplitTabRoute && route.path?.includes('/search')) {
57+
return SCREENS.MONEY_REQUEST.SPLIT_EXPENSE_SEARCH;
58+
}
59+
60+
return route.name;
61+
}
62+
4663
function getMatchingFullScreenRoute(route: NavigationPartialRoute) {
4764
// Check for backTo param. One screen with different backTo value may need different screens visible under the overlay.
4865
if (isRouteWithBackToParam(route)) {
@@ -69,11 +86,11 @@ function getMatchingFullScreenRoute(route: NavigationPartialRoute) {
6986
// If not, get the matching full screen route for the back to state.
7087
return getMatchingFullScreenRoute(focusedStateForBackToRoute);
7188
}
72-
73-
if (RHP_TO_SEARCH[route.name]) {
74-
const paramsFromRoute = getParamsFromRoute(RHP_TO_SEARCH[route.name]);
89+
const routeNameForLookup = getSearchScreenNameForRoute(route);
90+
if (RHP_TO_SEARCH[routeNameForLookup]) {
91+
const paramsFromRoute = getParamsFromRoute(RHP_TO_SEARCH[routeNameForLookup]);
7592
const searchRoute = {
76-
name: RHP_TO_SEARCH[route.name],
93+
name: RHP_TO_SEARCH[routeNameForLookup],
7794
params: paramsFromRoute.length > 0 ? pick(route.params, paramsFromRoute) : undefined,
7895
};
7996
return {

src/libs/Navigation/linkingConfig/RELATIONS/SEARCH_TO_RHP.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ const SEARCH_TO_RHP: Partial<Record<keyof SearchFullscreenNavigatorParamList, st
4949
SCREENS.SEARCH.ADVANCED_FILTERS_PURCHASE_CURRENCY_RHP,
5050
SCREENS.SEARCH.ADVANCED_FILTERS_REPORT_FIELD_RHP,
5151
SCREENS.SEARCH.SAVED_SEARCH_RENAME_RHP,
52+
SCREENS.MONEY_REQUEST.SPLIT_EXPENSE_SEARCH,
5253
SCREENS.RIGHT_MODAL.SEARCH_REPORT,
5354
],
5455
};

src/libs/Navigation/linkingConfig/config.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1508,6 +1508,21 @@ const config: LinkingOptions<RootNavigatorParamList>['config'] = {
15081508
},
15091509
},
15101510
},
1511+
[SCREENS.MONEY_REQUEST.SPLIT_EXPENSE_SEARCH]: {
1512+
path: ROUTES.SPLIT_EXPENSE_SEARCH.route,
1513+
exact: true,
1514+
screens: {
1515+
[CONST.TAB.SPLIT.AMOUNT]: {
1516+
path: CONST.TAB.SPLIT.AMOUNT,
1517+
},
1518+
[CONST.TAB.SPLIT.PERCENTAGE]: {
1519+
path: CONST.TAB.SPLIT.PERCENTAGE,
1520+
},
1521+
[CONST.TAB.SPLIT.DATE]: {
1522+
path: CONST.TAB.SPLIT.DATE,
1523+
},
1524+
},
1525+
},
15111526
[SCREENS.MONEY_REQUEST.SPLIT_EXPENSE_CREATE_DATE_RANGE]: {
15121527
path: ROUTES.SPLIT_EXPENSE_CREATE_DATE_RANGE.route,
15131528
exact: true,

src/libs/actions/IOU/index.ts

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14093,8 +14093,11 @@ function initSplitExpense(transactions: OnyxCollection<OnyxTypes.Transaction>, r
1409314093
});
1409414094

1409514095
Onyx.set(`${ONYXKEYS.COLLECTION.SPLIT_TRANSACTION_DRAFT}${originalTransactionID}`, draftTransaction);
14096-
14097-
Navigation.navigate(ROUTES.SPLIT_EXPENSE.getRoute(reportID, originalTransactionID, transaction.transactionID, Navigation.getActiveRoute()));
14096+
if (isSearchTopmostFullScreenRoute()) {
14097+
Navigation.navigate(ROUTES.SPLIT_EXPENSE_SEARCH.getRoute(reportID, originalTransactionID, transaction.transactionID, Navigation.getActiveRoute()));
14098+
} else {
14099+
Navigation.navigate(ROUTES.SPLIT_EXPENSE.getRoute(reportID, originalTransactionID, transaction.transactionID, Navigation.getActiveRoute()));
14100+
}
1409814101
return;
1409914102
}
1410014103

@@ -14123,7 +14126,11 @@ function initSplitExpense(transactions: OnyxCollection<OnyxTypes.Transaction>, r
1412314126

1412414127
Onyx.set(`${ONYXKEYS.COLLECTION.SPLIT_TRANSACTION_DRAFT}${transaction?.transactionID}`, draftTransaction);
1412514128

14126-
Navigation.navigate(ROUTES.SPLIT_EXPENSE.getRoute(reportID, transaction.transactionID, undefined, Navigation.getActiveRoute()));
14129+
if (isSearchTopmostFullScreenRoute()) {
14130+
Navigation.navigate(ROUTES.SPLIT_EXPENSE_SEARCH.getRoute(reportID, transaction.transactionID, undefined, Navigation.getActiveRoute()));
14131+
} else {
14132+
Navigation.navigate(ROUTES.SPLIT_EXPENSE.getRoute(reportID, transaction.transactionID, undefined, Navigation.getActiveRoute()));
14133+
}
1412714134
}
1412814135

1412914136
/**

0 commit comments

Comments
 (0)