Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
0b3f7fe
migrate MONEY_REQUEST_STEP_TAX_RATE
huult Jun 1, 2026
0d62ae8
upgrate route path
huult Jun 1, 2026
7ad0ff1
migrate MONEY_REQUEST_STEP_TAX_AMOUNT
huult Jun 1, 2026
958755b
update lint
huult Jun 1, 2026
e605342
migrate MONEY_REQUEST_STEP_CATEGORY
huult Jun 1, 2026
149106c
migrate MONEY_REQUEST_ATTENDEE
huult Jun 1, 2026
3c63ae5
update lint
huult Jun 1, 2026
556d7e8
migrate DYNAMIC_STEP_ACCOUNTANT
huult Jun 1, 2026
634063d
update lint
huult Jun 1, 2026
6d19e5f
migrate MONEY_REQUEST_UPGRADE
huult Jun 1, 2026
25ea713
update eslint seatbelt
huult Jun 1, 2026
2192c78
fix typescript error
huult Jun 1, 2026
6312006
update base path
huult Jun 1, 2026
7c583a4
update eslint seatbelt
huult Jun 1, 2026
4e2f7a5
Refactor route destructuring
huult Jun 1, 2026
6334229
update entry screen
huult Jun 2, 2026
dcc7eae
Merge remote-tracking branch 'upstream/main' into 83858-migrate-money…
huult Jun 2, 2026
f9f5e08
Merge remote-tracking branch 'upstream/main' into 83858-migrate-money…
huult Jun 3, 2026
8b3d545
Merge remote-tracking branch 'upstream/main' into 83858-migrate-money…
huult Jun 4, 2026
0a0369f
Merge remote-tracking branch 'upstream/main' into 83858-migrate-money…
huult Jun 8, 2026
16204e2
remove import unused
huult Jun 8, 2026
2f1e155
Merge remote-tracking branch 'upstream/main' into 83858-migrate-money…
huult Jun 9, 2026
8fee344
Merge remote-tracking branch 'upstream/main' into 83858-migrate-money…
huult Jun 9, 2026
a3c9fc4
Restore file from upstream/main
huult Jun 9, 2026
cfe1abb
Restore file from upstream/main
huult Jun 9, 2026
d700cf1
update import
huult Jun 9, 2026
104d4fb
remove unused import
huult Jun 9, 2026
7e50e89
Merge remote-tracking branch 'upstream/main' into 83858-migrate-money…
huult Jun 9, 2026
93f935f
update seatbelt
huult Jun 10, 2026
4bc254b
Merge remote-tracking branch 'upstream/main' into 83858-migrate-money…
huult Jun 10, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions config/eslint/eslint.seatbelt.tsv
Original file line number Diff line number Diff line change
Expand Up @@ -1187,7 +1187,7 @@
"../../src/pages/iou/request/step/IOURequestEditReportCommon.tsx" "@typescript-eslint/no-deprecated/ConfirmModal" 1
"../../src/pages/iou/request/step/IOURequestEditReportCommon.tsx" "@typescript-eslint/no-unsafe-type-assertion" 1
"../../src/pages/iou/request/step/IOURequestStepAmount.tsx" "react-hooks/set-state-in-effect" 1
"../../src/pages/iou/request/step/IOURequestStepCategory.tsx" "@typescript-eslint/no-deprecated/InteractionManager.runAfterInteractions" 1
"../../src/pages/iou/request/step/DynamicIOURequestStepCategoryPage.tsx" "@typescript-eslint/no-deprecated/InteractionManager.runAfterInteractions" 1
"../../src/pages/iou/request/step/IOURequestStepConfirmation.tsx" "@typescript-eslint/no-unsafe-type-assertion" 3
"../../src/pages/iou/request/step/IOURequestStepConfirmation.tsx" "react-hooks/preserve-manual-memoization" 1
"../../src/pages/iou/request/step/IOURequestStepDestination.tsx" "@typescript-eslint/no-deprecated/InteractionManager.runAfterInteractions" 1
Expand All @@ -1213,8 +1213,8 @@
"../../src/pages/iou/request/step/IOURequestStepSubrate.tsx" "@typescript-eslint/no-deprecated/InteractionManager.runAfterInteractions" 1
"../../src/pages/iou/request/step/IOURequestStepSubrate.tsx" "@typescript-eslint/no-unsafe-type-assertion" 1
"../../src/pages/iou/request/step/IOURequestStepSubrate.tsx" "react-hooks/set-state-in-effect" 1
"../../src/pages/iou/request/step/IOURequestStepUpgrade.tsx" "@typescript-eslint/no-deprecated/ConfirmModal" 1
"../../src/pages/iou/request/step/IOURequestStepUpgrade.tsx" "@typescript-eslint/no-unsafe-type-assertion" 2
"../../src/pages/iou/request/step/DynamicIOURequestStepUpgradePage.tsx" "@typescript-eslint/no-deprecated/ConfirmModal" 1
"../../src/pages/iou/request/step/DynamicIOURequestStepUpgradePage.tsx" "@typescript-eslint/no-unsafe-type-assertion" 2
"../../src/pages/iou/request/step/IOURequestStepWaypoint.tsx" "@typescript-eslint/no-unsafe-type-assertion" 2
"../../src/pages/iou/request/step/StepScreenWrapper.tsx" "@typescript-eslint/no-unsafe-type-assertion" 1
"../../src/pages/iou/request/step/confirmation/submitDismissStrategies.ts" "no-restricted-imports" 1
Expand Down
184 changes: 120 additions & 64 deletions src/ROUTES.ts
Original file line number Diff line number Diff line change
Expand Up @@ -180,6 +180,126 @@ const DYNAMIC_ROUTES = {
entryScreens: ['*'],
getRoute: (accountID: number) => `avatar/${accountID}` as const,
},
MONEY_REQUEST_STEP_TAX_RATE: {
path: 'money-request/tax-rate/:action/:iouType/:transactionID/:reportID?',
entryScreens: [
SCREENS.MONEY_REQUEST.STEP_CONFIRMATION,
SCREENS.REPORT,
SCREENS.RIGHT_MODAL.EXPENSE_REPORT,
SCREENS.RIGHT_MODAL.SEARCH_REPORT,
SCREENS.RIGHT_MODAL.SEARCH_REPORT_ACTIONS,
SCREENS.RIGHT_MODAL.SEARCH_MONEY_REQUEST_REPORT,
],
getRoute: (action: IOUAction, iouType: IOUType, transactionID: string | undefined, reportID?: string) => {
if (!transactionID || !reportID) {
Log.warn('Invalid transactionID or reportID is used to build the MONEY_REQUEST_STEP_TAX_RATE dynamic route');
}

return `money-request/tax-rate/${action as string}/${iouType as string}/${transactionID}${reportID ? `/${reportID}` : ''}` as const;
},
},
MONEY_REQUEST_STEP_TAX_AMOUNT: {
path: 'money-request/tax-amount/:action/:iouType/:transactionID/:reportID?',
entryScreens: [
SCREENS.MONEY_REQUEST.STEP_CONFIRMATION,
SCREENS.REPORT,
SCREENS.RIGHT_MODAL.EXPENSE_REPORT,
SCREENS.RIGHT_MODAL.SEARCH_REPORT,
SCREENS.RIGHT_MODAL.SEARCH_REPORT_ACTIONS,
SCREENS.RIGHT_MODAL.SEARCH_MONEY_REQUEST_REPORT,
],
getRoute: (action: IOUAction, iouType: IOUType, transactionID: string | undefined, reportID?: string) => {
if (!transactionID || !reportID) {
Log.warn('Invalid transactionID or reportID is used to build the MONEY_REQUEST_STEP_TAX_AMOUNT dynamic route');
}

return `money-request/tax-amount/${action as string}/${iouType as string}/${transactionID}${reportID ? `/${reportID}` : ''}` as const;
},
},
MONEY_REQUEST_STEP_CATEGORY: {
path: 'money-request/category/:action/:iouType/:transactionID/:reportID/:reportActionID?',
entryScreens: [
SCREENS.MONEY_REQUEST.STEP_CONFIRMATION,
SCREENS.MONEY_REQUEST.SPLIT_EXPENSE_EDIT,
SCREENS.REPORT,
SCREENS.RIGHT_MODAL.EXPENSE_REPORT,
SCREENS.RIGHT_MODAL.SEARCH_REPORT,
SCREENS.RIGHT_MODAL.SEARCH_REPORT_ACTIONS,
SCREENS.RIGHT_MODAL.SEARCH_MONEY_REQUEST_REPORT,
],
getRoute: (action: IOUAction, iouType: IOUType, transactionID: string | undefined, reportID: string | undefined, reportActionID?: string) => {
if (!transactionID || !reportID) {
Log.warn('Invalid transactionID or reportID is used to build the MONEY_REQUEST_STEP_CATEGORY dynamic route');
}

return `money-request/category/${action as string}/${iouType as string}/${transactionID}/${reportID}${reportActionID ? `/${reportActionID}` : ''}` as const;
},
},
MONEY_REQUEST_ATTENDEE: {
path: 'money-request/attendees/:action/:iouType/:transactionID/:reportID',
entryScreens: [
SCREENS.MONEY_REQUEST.STEP_CONFIRMATION,
SCREENS.REPORT,
SCREENS.RIGHT_MODAL.EXPENSE_REPORT,
SCREENS.RIGHT_MODAL.SEARCH_REPORT,
SCREENS.RIGHT_MODAL.SEARCH_REPORT_ACTIONS,
SCREENS.RIGHT_MODAL.SEARCH_MONEY_REQUEST_REPORT,
],
getRoute: (action: IOUAction, iouType: IOUType, transactionID: string | undefined, reportID: string | undefined) => {
if (!transactionID || !reportID) {
Log.warn('Invalid transactionID or reportID is used to build the MONEY_REQUEST_ATTENDEE dynamic route');
}

return `money-request/attendees/${action as string}/${iouType as string}/${transactionID}/${reportID}` as const;
},
},
MONEY_REQUEST_ACCOUNTANT: {
path: 'money-request/accountant/:action/:iouType/:transactionID/:reportID',
entryScreens: [
SCREENS.MONEY_REQUEST.STEP_CONFIRMATION,
SCREENS.REPORT,
SCREENS.REPORT_DETAILS.DYNAMIC_ROOT,
SCREENS.RIGHT_MODAL.EXPENSE_REPORT,
SCREENS.RIGHT_MODAL.SEARCH_REPORT,
SCREENS.RIGHT_MODAL.SEARCH_REPORT_ACTIONS,
SCREENS.RIGHT_MODAL.SEARCH_MONEY_REQUEST_REPORT,
],
getRoute: (action: IOUAction, iouType: IOUType, transactionID: string | undefined, reportID: string | undefined) => {
if (!transactionID || !reportID) {
Log.warn('Invalid transactionID or reportID is used to build the MONEY_REQUEST_ACCOUNTANT dynamic route');
}

return `money-request/accountant/${action as string}/${iouType as string}/${transactionID}/${reportID}` as const;
},
},
MONEY_REQUEST_UPGRADE: {
path: 'money-request/upgrade/:action/:iouType/:transactionID/:reportID/:upgradePath?',
entryScreens: [
SCREENS.MONEY_REQUEST.STEP_CONFIRMATION,
SCREENS.MONEY_REQUEST.SPLIT_EXPENSE_EDIT,
SCREENS.HOME,
SCREENS.INBOX,
SCREENS.REPORT,
SCREENS.RIGHT_MODAL.EXPENSE_REPORT,
SCREENS.RIGHT_MODAL.SEARCH_REPORT,
SCREENS.RIGHT_MODAL.SEARCH_REPORT_ACTIONS,
SCREENS.RIGHT_MODAL.SEARCH_MONEY_REQUEST_REPORT,
SCREENS.SEARCH.ROOT,
SCREENS.SEARCH.TRANSACTIONS_CHANGE_REPORT_SEARCH_RHP,
],
getRoute: (params: {action: IOUAction; iouType: IOUType; transactionID: string; reportID: string; upgradePath?: string; shouldSubmitExpense?: boolean}) => {
const {action, iouType, transactionID, reportID, upgradePath, shouldSubmitExpense} = params;
const upgradePathParam = upgradePath ? `/${upgradePath}` : '';
const basePath = `money-request/upgrade/${action as string}/${iouType as string}/${transactionID}/${reportID}${upgradePathParam}` as const;

if (shouldSubmitExpense) {
return `${basePath}?shouldSubmitExpense=true` as const;
}

return basePath;
},
queryParams: ['shouldSubmitExpense'],
},
NEW_REPORT_WORKSPACE_SELECTION: {
path: 'new-report-workspace-selection',
entryScreens: ['*'],
Expand Down Expand Up @@ -1663,26 +1783,6 @@ const ROUTES = {
return getUrlWithBackToParam(`${action as string}/${iouType as string}/amount/${transactionID}/${reportID}/${reportActionID ? `${reportActionID}/` : ''}${pageIndex}`, backTo);
},
},
MONEY_REQUEST_STEP_TAX_RATE: {
route: ':action/:iouType/taxRate/:transactionID/:reportID?',
getRoute: (action: IOUAction, iouType: IOUType, transactionID: string | undefined, reportID: string | undefined, backTo = '') => {
if (!transactionID || !reportID) {
Log.warn('Invalid transactionID or reportID is used to build the MONEY_REQUEST_STEP_TAX_RATE route');
}

return getUrlWithBackToParam(`${action as string}/${iouType as string}/taxRate/${transactionID}/${reportID}`, backTo);
},
},
MONEY_REQUEST_STEP_TAX_AMOUNT: {
route: ':action/:iouType/taxAmount/:transactionID/:reportID?',
getRoute: (action: IOUAction, iouType: IOUType, transactionID: string | undefined, reportID: string | undefined, backTo = '') => {
if (!transactionID || !reportID) {
Log.warn('Invalid transactionID or reportID is used to build the MONEY_REQUEST_STEP_TAX_AMOUNT route');
}

return getUrlWithBackToParam(`${action as string}/${iouType as string}/taxAmount/${transactionID}/${reportID}`, backTo);
},
},
MONEY_REQUEST_STEP_CATEGORY_CREATE: {
route: ':action/:iouType/category/new/:transactionID/:reportID/:reportActionID?',
getRoute: (action: IOUAction, iouType: IOUType, transactionID: string | undefined, reportID: string | undefined, reportActionID?: string, backTo = '') => {
Expand All @@ -1693,50 +1793,6 @@ const ROUTES = {
return getUrlWithBackToParam(`${action as string}/${iouType as string}/category/new/${transactionID}/${reportID}${reportActionID ? `/${reportActionID}` : ''}`, backTo);
},
},
MONEY_REQUEST_STEP_CATEGORY: {
route: ':action/:iouType/category/:transactionID/:reportID/:reportActionID?',
getRoute: (action: IOUAction, iouType: IOUType, transactionID: string | undefined, reportID: string | undefined, backTo = '', reportActionID?: string) => {
if (!transactionID || !reportID) {
Log.warn('Invalid transactionID or reportID is used to build the MONEY_REQUEST_STEP_CATEGORY route');
}

return getUrlWithBackToParam(`${action as string}/${iouType as string}/category/${transactionID}/${reportID}${reportActionID ? `/${reportActionID}` : ''}`, backTo);
},
},
MONEY_REQUEST_ATTENDEE: {
route: ':action/:iouType/attendees/:transactionID/:reportID',
getRoute: (action: IOUAction, iouType: IOUType, transactionID: string | undefined, reportID: string | undefined, backTo = '') => {
if (!transactionID || !reportID) {
Log.warn('Invalid transactionID or reportID is used to build the MONEY_REQUEST_ATTENDEE route');
}

return getUrlWithBackToParam(`${action as string}/${iouType as string}/attendees/${transactionID}/${reportID}`, backTo);
},
},
MONEY_REQUEST_ACCOUNTANT: {
route: ':action/:iouType/accountant/:transactionID/:reportID',
getRoute: (action: IOUAction, iouType: IOUType, transactionID: string | undefined, reportID: string | undefined, backTo = '') => {
if (!transactionID || !reportID) {
Log.warn('Invalid transactionID or reportID is used to build the MONEY_REQUEST_ACCOUNTANT route');
}

return getUrlWithBackToParam(`${action as string}/${iouType as string}/accountant/${transactionID}/${reportID}`, backTo);
},
},
MONEY_REQUEST_UPGRADE: {
route: ':action/:iouType/upgrade/:transactionID/:reportID/:upgradePath?',
getRoute: (params: {action: IOUAction; iouType: IOUType; transactionID: string; reportID: string; backTo?: string; shouldSubmitExpense?: boolean; upgradePath?: string}) => {
const {action, iouType, transactionID, reportID, backTo = '', shouldSubmitExpense = false, upgradePath} = params;
const upgradePathParam = upgradePath ? `/${upgradePath}` : '';
const baseURL = `${action as string}/${iouType as string}/upgrade/${transactionID}/${reportID}${upgradePathParam}` as const;

if (shouldSubmitExpense) {
return getUrlWithBackToParam(`${baseURL}?shouldSubmitExpense=${shouldSubmitExpense}` as const, backTo);
}

return getUrlWithBackToParam(baseURL, backTo);
},
},
MONEY_REQUEST_STEP_DESTINATION: {
route: ':action/:iouType/destination/:transactionID/:reportID',
getRoute: (action: IOUAction, iouType: IOUType, transactionID: string, reportID: string, backTo = '') =>
Expand Down
12 changes: 6 additions & 6 deletions src/SCREENS.ts
Original file line number Diff line number Diff line change
Expand Up @@ -372,9 +372,9 @@ const SCREENS = {
STEP_CONFIRMATION: 'Money_Request_Step_Confirmation',
STEP_CONFIRMATION_VERIFY_ACCOUNT: 'Money_Request_Step_Confirmation_Verify_Account',
START: 'Money_Request_Start',
STEP_UPGRADE: 'Money_Request_Step_Upgrade',
DYNAMIC_STEP_UPGRADE: 'Dynamic_Money_Request_Step_Upgrade',
STEP_AMOUNT: 'Money_Request_Step_Amount',
STEP_CATEGORY: 'Money_Request_Step_Category',
DYNAMIC_STEP_CATEGORY: 'Dynamic_Money_Request_Step_Category',
STEP_CATEGORY_CREATE: 'Money_Request_Step_Category_Create',
STEP_DATE: 'Money_Request_Step_Date',
STEP_DESCRIPTION: 'Money_Request_Step_Description',
Expand All @@ -385,8 +385,8 @@ const SCREENS = {
STEP_SCAN: 'Money_Request_Step_Scan',
STEP_TAG: 'Money_Request_Step_Tag',
STEP_WAYPOINT: 'Money_Request_Step_Waypoint',
STEP_TAX_AMOUNT: 'Money_Request_Step_Tax_Amount',
STEP_TAX_RATE: 'Money_Request_Step_Tax_Rate',
DYNAMIC_STEP_TAX_AMOUNT: 'Dynamic_Money_Request_Step_Tax_Amount',
DYNAMIC_STEP_TAX_RATE: 'Dynamic_Money_Request_Step_Tax_Rate',
RECEIPT_VIEW: 'Money_Request_Receipt_View',
STEP_SEND_FROM: 'Money_Request_Step_Send_From',
STEP_COMPANY_INFO: 'Money_Request_Step_Company_Info',
Expand All @@ -395,8 +395,8 @@ const SCREENS = {
EDIT_WAYPOINT: 'Money_Request_Edit_Waypoint',
RECEIPT: 'Money_Request_Receipt',
STATE_SELECTOR: 'Money_Request_State_Selector',
STEP_ATTENDEES: 'Money_Request_Attendee',
STEP_ACCOUNTANT: 'Money_Request_Accountant',
DYNAMIC_STEP_ATTENDEES: 'Dynamic_Money_Request_Attendee',
DYNAMIC_STEP_ACCOUNTANT: 'Dynamic_Money_Request_Step_Accountant',
STEP_DESTINATION: 'Money_Request_Destination',
STEP_TIME: 'Money_Request_Time',
STEP_SUBRATE: 'Money_Request_SubRate',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,13 @@ import useAttendees from '@hooks/useAttendees';
import useLocalize from '@hooks/useLocalize';
import useThemeStyles from '@hooks/useThemeStyles';
import {enrichAndSortAttendees} from '@libs/AttendeeUtils';
import createDynamicRoute from '@libs/Navigation/helpers/dynamicRoutesUtils/createDynamicRoute';
import Navigation from '@libs/Navigation/Navigation';
import {getAttendeesListDisplayString} from '@libs/TransactionUtils';
import CONST from '@src/CONST';
import type {IOUAction, IOUType} from '@src/CONST';
import type {TranslationPaths} from '@src/languages/types';
import ROUTES from '@src/ROUTES';
import {DYNAMIC_ROUTES} from '@src/ROUTES';
import type * as OnyxTypes from '@src/types/onyx';
import {attendeeSliceSelector} from './selectors';
import useTransactionSelector from './useTransactionSelector';
Expand Down Expand Up @@ -67,7 +68,7 @@ function AttendeeField({formattedAmountPerAttendee, isReadOnly, transactionID, a
return;
}

Navigation.navigate(ROUTES.MONEY_REQUEST_ATTENDEE.getRoute(action, iouType, transactionID, reportID, Navigation.getActiveRoute()));
Navigation.navigate(createDynamicRoute(DYNAMIC_ROUTES.MONEY_REQUEST_ATTENDEE.getRoute(action, iouType, transactionID, reportID)));
}}
interactive={!isReadOnly}
brickRoadIndicator={shouldDisplayAttendeesError ? CONST.BRICK_ROAD_INDICATOR_STATUS.ERROR : undefined}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,12 @@ import {useMemoizedLazyExpensifyIcons} from '@hooks/useLazyAsset';
import useLocalize from '@hooks/useLocalize';
import useThemeStyles from '@hooks/useThemeStyles';
import {getDecodedLeafCategoryName} from '@libs/CategoryUtils';
import createDynamicRoute from '@libs/Navigation/helpers/dynamicRoutesUtils/createDynamicRoute';
import Navigation from '@libs/Navigation/Navigation';
import CONST from '@src/CONST';
import type {IOUAction, IOUType} from '@src/CONST';
import type {TranslationPaths} from '@src/languages/types';
import ROUTES from '@src/ROUTES';
import ROUTES, {DYNAMIC_ROUTES} from '@src/ROUTES';
import type * as OnyxTypes from '@src/types/onyx';
import {categoryStateSelector} from './selectors';
import useTransactionSelector from './useTransactionSelector';
Expand Down Expand Up @@ -78,23 +79,24 @@ function CategoryField({

if (shouldNavigateToUpgradePath) {
Navigation.navigate(
ROUTES.MONEY_REQUEST_UPGRADE.getRoute({
action,
iouType,
transactionID,
reportID,
backTo: ROUTES.MONEY_REQUEST_STEP_CATEGORY.getRoute(action, iouType, transactionID, reportID, Navigation.getActiveRoute(), reportActionID),
upgradePath: CONST.UPGRADE_PATHS.CATEGORIES,
}),
createDynamicRoute(
DYNAMIC_ROUTES.MONEY_REQUEST_UPGRADE.getRoute({
action,
iouType,
transactionID,
reportID,
upgradePath: CONST.UPGRADE_PATHS.CATEGORIES,
}),
),
);
} else if (!policy && shouldSelectPolicy) {
Navigation.navigate(
ROUTES.SET_DEFAULT_WORKSPACE.getRoute(
ROUTES.MONEY_REQUEST_STEP_CATEGORY.getRoute(action, iouType, transactionID, reportID, Navigation.getActiveRoute(), reportActionID),
createDynamicRoute(DYNAMIC_ROUTES.MONEY_REQUEST_STEP_CATEGORY.getRoute(action, iouType, transactionID, reportID, reportActionID)),
),
);
} else {
Navigation.navigate(ROUTES.MONEY_REQUEST_STEP_CATEGORY.getRoute(action, iouType, transactionID, reportID, Navigation.getActiveRoute(), reportActionID));
Navigation.navigate(createDynamicRoute(DYNAMIC_ROUTES.MONEY_REQUEST_STEP_CATEGORY.getRoute(action, iouType, transactionID, reportID, reportActionID)));
}
}}
style={[styles.moneyRequestMenuItem]}
Expand Down
Loading
Loading