From aae968542aed1301b992b5735dc9706cba800ed5 Mon Sep 17 00:00:00 2001 From: rory Date: Fri, 15 May 2026 15:20:17 -0700 Subject: [PATCH] refactor: migrate getUrlWithBackToParam from no-restricted-syntax to @deprecated Mark getUrlWithBackToParam with @deprecated JSDoc so usages are visible via npm run eslint-report. Remove the no-restricted-syntax custom rule and its 181 disable comments, and seatbelt the 176 existing call sites under @typescript-eslint/no-deprecated so they are grandfathered without blocking CI. Co-authored-by: Cursor --- config/eslint/eslint.config.mjs | 5 - config/eslint/eslint.seatbelt.tsv | 1 + src/ROUTES.ts | 190 ++---------------------------- 3 files changed, 13 insertions(+), 183 deletions(-) diff --git a/config/eslint/eslint.config.mjs b/config/eslint/eslint.config.mjs index 510ea2d1ee1d..25500517ee64 100644 --- a/config/eslint/eslint.config.mjs +++ b/config/eslint/eslint.config.mjs @@ -402,11 +402,6 @@ const config = defineConfig([ selector: 'CallExpression[callee.object.name="React"][callee.property.name="forwardRef"]', message: 'forwardRef is deprecated. Please use ref as a prop instead. See: contributingGuides/STYLE.md#forwarding-refs', }, - { - selector: 'CallExpression[callee.name="getUrlWithBackToParam"]', - message: - 'Usage of getUrlWithBackToParam function is prohibited. This is legacy code and no new occurrences should be added. Please look into the `How to remove backTo from URL` section in contributingGuides/NAVIGATION.md. and use alternative routing methods instead.', - }, { selector: 'ImportNamespaceSpecifier[parent.source.value=/^@libs/]', message: 'Namespace imports from @libs are not allowed. Use named imports instead. Example: import { method } from "@libs/module"', diff --git a/config/eslint/eslint.seatbelt.tsv b/config/eslint/eslint.seatbelt.tsv index 133cfd1fc5b5..e2c1fcbddaa1 100644 --- a/config/eslint/eslint.seatbelt.tsv +++ b/config/eslint/eslint.seatbelt.tsv @@ -18,6 +18,7 @@ "../../src/Expensify.tsx" "react-hooks/set-state-in-effect" 1 "../../src/GlobalModals.tsx" "no-restricted-syntax" 2 "../../src/ONYXKEYS.ts" "no-restricted-syntax" 2 +"../../src/ROUTES.ts" "@typescript-eslint/no-deprecated/getUrlWithBackToParam" 176 "../../src/components/AccountingConnectionConfirmationModal.tsx" "@typescript-eslint/no-deprecated/ConfirmModal" 1 "../../src/components/ActionSheetAwareScrollView/useActionSheetAwareScrollViewRef.ts" "react-hooks/immutability" 1 "../../src/components/ActionSheetAwareScrollView/useActionSheetKeyboardSpacing.ts" "@typescript-eslint/no-deprecated/useScrollViewOffset" 1 diff --git a/src/ROUTES.ts b/src/ROUTES.ts index 38abfd9f4feb..f585920b058f 100644 --- a/src/ROUTES.ts +++ b/src/ROUTES.ts @@ -33,6 +33,8 @@ type WorkspaceCompanyCardsAssignCardParams = { /** * Builds a URL with an encoded URI component for the `backTo` param which can be added to the end of URLs + * @deprecated Usage of getUrlWithBackToParam is prohibited. This is legacy code and no new occurrences should be added. + * Please look into the `How to remove backTo from URL` section in contributingGuides/NAVIGATION.md and use alternative routing methods instead. */ function getUrlWithBackToParam(url: TUrl, backTo?: string, shouldEncodeURIComponent = true): `${TUrl}` { const backToParam = backTo ? (`${url.includes('?') ? '&' : '?'}backTo=${shouldEncodeURIComponent ? encodeURIComponent(backTo) : backTo}` as const) : ''; @@ -588,7 +590,6 @@ const ROUTES = { INBOX: 'inbox', HOME: 'home', - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation WORKSPACES_LIST: {route: 'workspaces', getRoute: (backTo?: string) => getUrlWithBackToParam('workspaces', backTo)}, SEARCH_ROUTER: 'search-router', SEARCH_ROOT: { @@ -624,7 +625,6 @@ const ROUTES = { const baseRoute = reportActionID ? (`search/view/${reportID}/${reportActionID}` as const) : (`search/view/${reportID}` as const); - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation return getUrlWithBackToParam(baseRoute, backTo); }, }, @@ -634,7 +634,6 @@ const ROUTES = { getRoute: ({reportID, backTo}: {reportID: string; backTo?: string}) => { const baseRoute = `e/${reportID}` as const; - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation return getUrlWithBackToParam(baseRoute, backTo); }, }, @@ -648,7 +647,6 @@ const ROUTES = { getRoute: ({reportID, backTo}: {reportID: string; backTo?: string}) => { const baseRoute = `search/r/${reportID}` as const; - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation return getUrlWithBackToParam(baseRoute, backTo); }, }, @@ -661,7 +659,6 @@ const ROUTES = { getRoute: ({reportID, backTo}: {reportID: string; backTo?: string}) => { const baseRoute = `search/r/${reportID}/hold` as const; - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation return getUrlWithBackToParam(baseRoute, backTo); }, }, @@ -720,7 +717,6 @@ const ROUTES = { PROFILE: { route: 'a/:accountID', getRoute: (accountID?: number, backTo?: string, login?: string) => { - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation const baseRoute = getUrlWithBackToParam(`a/${accountID}`, backTo); const loginParam = login ? `?login=${encodeURIComponent(login)}` : ''; return `${baseRoute}${loginParam}` as const; @@ -729,7 +725,6 @@ const ROUTES = { PROFILE_AVATAR: { route: 'a/:accountID/avatar', - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation getRoute: (accountID: number, backTo?: string) => getUrlWithBackToParam(`a/${accountID}/avatar` as const, backTo), }, @@ -742,7 +737,7 @@ const ROUTES = { BANK_ACCOUNT: 'bank-account', BANK_ACCOUNT_VERIFY_ACCOUNT: { route: `bank-account/${VERIFY_ACCOUNT}`, - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation + getRoute: (policyID?: string, backTo?: string) => getUrlWithBackToParam(`bank-account/${VERIFY_ACCOUNT}?policyID=${policyID}`, backTo), }, BANK_ACCOUNT_NEW: 'bank-account/new', @@ -763,17 +758,15 @@ const ROUTES = { subStepToOpen?: typeof CONST.BANK_ACCOUNT.STEP.COUNTRY; }) => { if (!policyID && !bankAccountID) { - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation return getUrlWithBackToParam(`bank-account/${stepToOpen}`, backTo); } if (bankAccountID) { - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation return getUrlWithBackToParam(`bank-account/${stepToOpen}?bankAccountID=${bankAccountID}`, backTo); } // TODO this backTo comes from drilling it through bank account form screens // should be removed once https://github.com/Expensify/App/pull/72219 is resolved - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation + return getUrlWithBackToParam(`bank-account/${stepToOpen}?policyID=${policyID}${subStepToOpen ? `&subStep=${subStepToOpen}` : ''}`, backTo); }, }, @@ -789,9 +782,7 @@ const ROUTES = { BANK_ACCOUNT_CONNECT_EXISTING_BUSINESS_BANK_ACCOUNT: { route: 'bank-account/connect-existing-business-bank-account', - getRoute: (policyID: string, backTo?: string) => - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation - getUrlWithBackToParam(`bank-account/connect-existing-business-bank-account?policyID=${policyID}`, backTo), + getRoute: (policyID: string, backTo?: string) => getUrlWithBackToParam(`bank-account/connect-existing-business-bank-account?policyID=${policyID}`, backTo), }, BANK_ACCOUNT_NON_USD_SETUP: { route: 'bank-account/new/global/:page?/:subPage?/:action?', @@ -802,7 +793,7 @@ const ROUTES = { const subPagePart = subPage ? `/${subPage}` : ''; const actionPart = action ? `/${action}` : ''; const queryString = policyID ? `?policyID=${policyID}` : ''; - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation + return getUrlWithBackToParam(`${base}${pagePart}${subPagePart}${actionPart}${queryString}`, backTo); }, }, @@ -810,7 +801,6 @@ const ROUTES = { SETTINGS_PROFILE: { route: 'settings/profile', - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation getRoute: (backTo?: string) => getUrlWithBackToParam('settings/profile', backTo), }, SETTINGS_CHANGE_CURRENCY: 'settings/add-payment-card/change-currency', @@ -824,7 +814,6 @@ const ROUTES = { SETTINGS_SUBSCRIPTION: { route: 'settings/subscription', - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation getRoute: (backTo?: string) => getUrlWithBackToParam('settings/subscription', backTo), }, SETTINGS_SUBSCRIPTION_SIZE: { @@ -841,7 +830,6 @@ const ROUTES = { SETTINGS_SUBSCRIPTION_DOWNGRADE_BLOCKED: { route: 'settings/subscription/downgrade-blocked', - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation getRoute: (backTo?: string) => getUrlWithBackToParam('settings/subscription/downgrade-blocked', backTo), }, SETTINGS_PRIORITY_MODE: 'settings/preferences/priority-mode', @@ -863,7 +851,6 @@ const ROUTES = { SETTINGS_MERGE_ACCOUNTS_RESULT: { route: 'settings/security/merge-accounts/:login/result/:result', - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation getRoute: (login: string, result: string, backTo?: string) => getUrlWithBackToParam(`settings/security/merge-accounts/${encodeURIComponent(login)}/result/${result}`, backTo), }, SETTINGS_LOCK_ACCOUNT: 'settings/security/lock-account', @@ -874,7 +861,6 @@ const ROUTES = { SETTINGS_DELEGATE_ROLE: { route: 'settings/security/delegate/:login/role/:role', - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation getRoute: (login: string, role?: string, backTo?: string) => getUrlWithBackToParam(`settings/security/delegate/${encodeURIComponent(login)}/role/${role}`, backTo), }, SETTINGS_UPDATE_DELEGATE_ROLE: { @@ -958,10 +944,9 @@ const ROUTES = { route: 'settings/wallet/add-bank-account/:subPage?/:action?', getRoute: (backTo?: string, subPage?: string, action?: 'edit') => { if (!subPage) { - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation return getUrlWithBackToParam('settings/wallet/add-bank-account', backTo); } - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation + return getUrlWithBackToParam(`settings/wallet/add-bank-account/${subPage}${action ? `/${action}` : ''}`, backTo); }, }, @@ -1100,7 +1085,6 @@ const ROUTES = { route: 'settings/profile/address/state', getRoute: (state?: string, backTo?: string, label?: string) => - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation `${getUrlWithBackToParam(`settings/profile/address/state${state ? `?state=${encodeURIComponent(state)}` : ''}`, backTo)}${ // the label param can be an empty string so we cannot use a nullish ?? operator @@ -1110,7 +1094,6 @@ const ROUTES = { SETTINGS_CONTACT_METHODS: { route: 'settings/profile/contact-methods', - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation getRoute: (backTo?: string) => getUrlWithBackToParam('settings/profile/contact-methods', backTo), }, SETTINGS_CONTACT_METHOD_DETAILS: { @@ -1118,14 +1101,12 @@ const ROUTES = { getRoute: (contactMethod: string, backTo?: string, shouldSkipInitialValidation?: boolean) => { const encodedMethod = encodeURIComponent(contactMethod); - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation return getUrlWithBackToParam(`settings/profile/contact-methods/${encodedMethod}/details${shouldSkipInitialValidation ? `?shouldSkipInitialValidation=true` : ``}`, backTo); }, }, SETTINGS_NEW_CONTACT_METHOD: { route: 'settings/profile/contact-methods/new', - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation getRoute: (backTo?: string) => getUrlWithBackToParam('settings/profile/contact-methods/new', backTo), }, SETTINGS_NEW_CONTACT_METHOD_CONFIRM_MAGIC_CODE: { @@ -1133,7 +1114,7 @@ const ROUTES = { getRoute: (backTo?: string) => { // TODO this backTo comes from drilling it through settings screens // should be removed once https://github.com/Expensify/App/pull/72219 is resolved - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation + return getUrlWithBackToParam(`settings/profile/contact-methods/new/confirm-magic-code`, backTo); }, }, @@ -1142,14 +1123,12 @@ const ROUTES = { getRoute: (contactMethod: string, backTo?: string) => { const encodedMethod = encodeURIComponent(contactMethod); - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation return getUrlWithBackToParam(`settings/profile/contact-methods/${encodedMethod}/set-default/confirm`, backTo); }, }, SETTINGS_CONTACT_METHOD_VERIFY_ACCOUNT: { route: 'settings/profile/contact-methods/verify', getRoute: (backTo?: string, forwardTo?: string) => - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation getUrlWithBackToParam(forwardTo ? `settings/profile/contact-methods/verify?forwardTo=${encodeURIComponent(forwardTo)}` : 'settings/profile/contact-methods/verify', backTo), }, SETTINGS_2FA_VERIFY_ACCOUNT: { @@ -1159,19 +1138,16 @@ const ROUTES = { SETTINGS_2FA_ROOT: { route: 'settings/security/two-factor-auth', getRoute: (backTo?: string, forwardTo?: string) => - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation getUrlWithBackToParam(forwardTo ? `settings/security/two-factor-auth?forwardTo=${encodeURIComponent(forwardTo)}` : 'settings/security/two-factor-auth', backTo), }, SETTINGS_2FA_VERIFY: { route: 'settings/security/two-factor-auth/verify', getRoute: (backTo?: string, forwardTo?: string) => - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation getUrlWithBackToParam(forwardTo ? `settings/security/two-factor-auth/verify?forwardTo=${encodeURIComponent(forwardTo)}` : 'settings/security/two-factor-auth/verify', backTo), }, SETTINGS_2FA_SUCCESS: { route: 'settings/security/two-factor-auth/success', getRoute: (backTo?: string, forwardTo?: string) => - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation getUrlWithBackToParam(forwardTo ? `settings/security/two-factor-auth/success?forwardTo=${encodeURIComponent(forwardTo)}` : 'settings/security/two-factor-auth/success', backTo), }, SETTINGS_2FA_DISABLED: 'settings/security/two-factor-auth/disabled', @@ -1207,7 +1183,6 @@ const ROUTES = { const query = params.toString(); const baseRoute = `new-report-workspace-selection${query ? `?${query}` : ''}` as const; - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation return getUrlWithBackToParam(baseRoute, backTo); }, }, @@ -1227,7 +1202,6 @@ const ROUTES = { const queryString = queryParams.length > 0 ? `?${queryParams.join('&')}` : ''; - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation return getUrlWithBackToParam(`${baseRoute}${queryString}` as const, backTo); }, }, @@ -1276,7 +1250,6 @@ const ROUTES = { }); } - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation return getUrlWithBackToParam(`r/${reportID}/edit/policyField/${policyID}/${encodeURIComponent(fieldID)}` as const, backTo); }, }, @@ -1287,7 +1260,6 @@ const ROUTES = { Log.warn('Invalid reportID is used to build the REPORT_WITH_ID_DETAILS_SHARE_CODE route'); } - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation return getUrlWithBackToParam(`r/${reportID}/details/shareCode` as const, backTo); }, }, @@ -1302,25 +1274,21 @@ const ROUTES = { REPORT_PARTICIPANTS: { route: 'r/:reportID/participants', - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation getRoute: (reportID: string, backTo?: string) => getUrlWithBackToParam(`r/${reportID}/participants` as const, backTo), }, REPORT_PARTICIPANTS_INVITE: { route: 'r/:reportID/participants/invite', - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation getRoute: (reportID: string, backTo?: string) => getUrlWithBackToParam(`r/${reportID}/participants/invite` as const, backTo), }, REPORT_PARTICIPANTS_DETAILS: { route: 'r/:reportID/participants/:accountID', - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation getRoute: (reportID: string, accountID: number, backTo?: string) => getUrlWithBackToParam(`r/${reportID}/participants/${accountID}` as const, backTo), }, REPORT_PARTICIPANTS_ROLE_SELECTION: { route: 'r/:reportID/participants/:accountID/role', - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation getRoute: (reportID: string, accountID: number, backTo?: string) => getUrlWithBackToParam(`r/${reportID}/participants/${accountID}/role` as const, backTo), }, REPORT_WITH_ID_DETAILS: { @@ -1330,26 +1298,22 @@ const ROUTES = { Log.warn('Invalid reportID is used to build the REPORT_WITH_ID_DETAILS route'); } - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation return getUrlWithBackToParam(`r/${reportID}/details`, backTo); }, }, REPORT_WITH_ID_DETAILS_EXPORT: { route: 'r/:reportID/details/export/:connectionName', - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation getRoute: (reportID: string, connectionName: ConnectionName, backTo?: string) => getUrlWithBackToParam(`r/${reportID}/details/export/${connectionName as string}` as const, backTo), }, REPORT_WITH_ID_CHANGE_WORKSPACE: { route: 'r/:reportID/change-workspace', - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation getRoute: (reportID: string, backTo?: string) => getUrlWithBackToParam(`r/${reportID}/change-workspace` as const, backTo), }, REPORT_SETTINGS: { route: 'r/:reportID/settings', - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation getRoute: (reportID: string, backTo?: string) => getUrlWithBackToParam(`r/${reportID}/settings` as const, backTo), }, REPORT_CHANGE_APPROVER_ADD_APPROVER: { @@ -1375,7 +1339,6 @@ const ROUTES = { Log.warn('Invalid reportID is used to build the SPLIT_BILL_DETAILS route'); } - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation return getUrlWithBackToParam(`r/${reportID}/split/${reportActionID}` as const, backTo); }, }, @@ -1386,7 +1349,6 @@ const ROUTES = { Log.warn('Invalid reportID is used to build the TASK_TITLE route'); } - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation return getUrlWithBackToParam(`r/${reportID}/title` as const, backTo); }, }, @@ -1397,7 +1359,6 @@ const ROUTES = { Log.warn('Invalid reportID is used to build the REPORT_DESCRIPTION route'); } - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation return getUrlWithBackToParam(`r/${reportID}/description` as const, backTo); }, }, @@ -1408,32 +1369,27 @@ const ROUTES = { Log.warn('Invalid reportID is used to build the TASK_ASSIGNEE route'); } - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation return getUrlWithBackToParam(`r/${reportID}/assignee` as const, backTo); }, }, PRIVATE_NOTES_LIST: { route: 'r/:reportID/notes', - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation getRoute: (reportID: string, backTo?: string) => getUrlWithBackToParam(`r/${reportID}/notes` as const, backTo), }, PRIVATE_NOTES_EDIT: { route: 'r/:reportID/notes/:accountID/edit', - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation getRoute: (reportID: string, accountID: number, backTo?: string) => getUrlWithBackToParam(`r/${reportID}/notes/${accountID}/edit` as const, backTo), }, ROOM_MEMBERS: { route: 'r/:reportID/members', - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation getRoute: (reportID: string, backTo?: string) => getUrlWithBackToParam(`r/${reportID}/members` as const, backTo), }, ROOM_MEMBER_DETAILS: { route: 'r/:reportID/members/:accountID', - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation getRoute: (reportID: string, accountID: number, backTo?: string) => getUrlWithBackToParam(`r/${reportID}/members/${accountID}` as const, backTo), }, ROOM_INVITE: { @@ -1443,7 +1399,6 @@ const ROUTES = { Log.warn('Invalid reportID is used to build the ROOM_INVITE route'); } - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation return getUrlWithBackToParam(`r/${reportID}/invite` as const, backTo); }, }, @@ -1457,7 +1412,6 @@ const ROUTES = { const splitExpenseTransactionIDPart = splitExpenseTransactionID ? `/${splitExpenseTransactionID}` : '/0'; - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation return getUrlWithBackToParam(`create/split-expense/overview/${reportID}/${originalTransactionID}${splitExpenseTransactionIDPart}`, backTo); }, }, @@ -1470,7 +1424,6 @@ const ROUTES = { const splitExpenseTransactionIDPart = splitExpenseTransactionID ? `/${splitExpenseTransactionID}` : '/0'; - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation return getUrlWithBackToParam(`create/split-expense/overview/${reportID}/${originalTransactionID}${splitExpenseTransactionIDPart}/search`, backTo); }, }, @@ -1481,7 +1434,6 @@ const ROUTES = { Log.warn(`Invalid ${reportID}(reportID) or ${transactionID}(transactionID) is used to build the SPLIT_EXPENSE_CREATE_DATE_RANGE route`); } - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation return getUrlWithBackToParam(`create/split-expense/create-date-range/${reportID}/${transactionID}`, backTo); }, }, @@ -1492,7 +1444,6 @@ const ROUTES = { Log.warn(`Invalid ${reportID}(reportID) or ${originalTransactionID}(transactionID) is used to build the SPLIT_EXPENSE_EDIT route`); } - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation return getUrlWithBackToParam(`edit/split-expense/overview/${reportID}/${originalTransactionID}${splitExpenseTransactionID ? `/${splitExpenseTransactionID}` : ''}`, backTo); }, }, @@ -1521,13 +1472,11 @@ const ROUTES = { MONEY_REQUEST_STEP_SEND_FROM: { route: 'create/:iouType/from/:transactionID/:reportID', - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation getRoute: (iouType: IOUType, transactionID: string, reportID: string, backTo = '') => getUrlWithBackToParam(`create/${iouType as string}/from/${transactionID}/${reportID}`, backTo), }, MONEY_REQUEST_STEP_COMPANY_INFO: { route: 'create/:iouType/company-info/:transactionID/:reportID', getRoute: (iouType: IOUType, transactionID: string, reportID: string, backTo = '') => - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation getUrlWithBackToParam(`create/${iouType as string}/company-info/${transactionID}/${reportID}`, backTo), }, MONEY_REQUEST_STEP_CONFIRMATION: { @@ -1540,7 +1489,7 @@ const ROUTES = { if (participantsAutoAssigned !== undefined) { optionalRoutePart += '?participantsAutoAssigned=true'; } - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation + return getUrlWithBackToParam(`${action as string}/${iouType as string}/confirmation/${transactionID}/${reportID}${optionalRoutePart}` as const, backTo); }, }, @@ -1556,7 +1505,6 @@ const ROUTES = { Log.warn('Invalid transactionID or reportID is used to build the MONEY_REQUEST_STEP_AMOUNT route'); } - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation return getUrlWithBackToParam(`${action as string}/${iouType as string}/amount/${transactionID}/${reportID}/${reportActionID ? `${reportActionID}/` : ''}${pageIndex}`, backTo); }, }, @@ -1567,7 +1515,6 @@ const ROUTES = { Log.warn('Invalid transactionID or reportID is used to build the MONEY_REQUEST_STEP_TAX_RATE route'); } - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation return getUrlWithBackToParam(`${action as string}/${iouType as string}/taxRate/${transactionID}/${reportID}`, backTo); }, }, @@ -1578,7 +1525,6 @@ const ROUTES = { Log.warn('Invalid transactionID or reportID is used to build the MONEY_REQUEST_STEP_TAX_AMOUNT route'); } - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation return getUrlWithBackToParam(`${action as string}/${iouType as string}/taxAmount/${transactionID}/${reportID}`, backTo); }, }, @@ -1588,7 +1534,7 @@ const ROUTES = { if (!transactionID || !reportID) { Log.warn('Invalid transactionID or reportID is used to build the MONEY_REQUEST_STEP_CATEGORY_CREATE route'); } - // eslint-disable-next-line no-restricted-syntax -- backTo is needed here to track where editing was initiated from (e.g. search/view or r/:reportID) + return getUrlWithBackToParam(`${action as string}/${iouType as string}/category/new/${transactionID}/${reportID}${reportActionID ? `/${reportActionID}` : ''}`, backTo); }, }, @@ -1599,7 +1545,6 @@ const ROUTES = { Log.warn('Invalid transactionID or reportID is used to build the MONEY_REQUEST_STEP_CATEGORY route'); } - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation return getUrlWithBackToParam(`${action as string}/${iouType as string}/category/${transactionID}/${reportID}${reportActionID ? `/${reportActionID}` : ''}`, backTo); }, }, @@ -1610,7 +1555,6 @@ const ROUTES = { Log.warn('Invalid transactionID or reportID is used to build the MONEY_REQUEST_ATTENDEE route'); } - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation return getUrlWithBackToParam(`${action as string}/${iouType as string}/attendees/${transactionID}/${reportID}`, backTo); }, }, @@ -1621,7 +1565,6 @@ const ROUTES = { Log.warn('Invalid transactionID or reportID is used to build the MONEY_REQUEST_ACCOUNTANT route'); } - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation return getUrlWithBackToParam(`${action as string}/${iouType as string}/accountant/${transactionID}/${reportID}`, backTo); }, }, @@ -1633,54 +1576,45 @@ const ROUTES = { const baseURL = `${action as string}/${iouType as string}/upgrade/${transactionID}/${reportID}${upgradePathParam}` as const; if (shouldSubmitExpense) { - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation return getUrlWithBackToParam(`${baseURL}?shouldSubmitExpense=${shouldSubmitExpense}` as const, backTo); } - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation return getUrlWithBackToParam(baseURL, backTo); }, }, MONEY_REQUEST_STEP_DESTINATION: { route: ':action/:iouType/destination/:transactionID/:reportID', getRoute: (action: IOUAction, iouType: IOUType, transactionID: string, reportID: string, backTo = '') => - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation getUrlWithBackToParam(`${action as string}/${iouType as string}/destination/${transactionID}/${reportID}`, backTo), }, MONEY_REQUEST_STEP_TIME: { route: ':action/:iouType/time/:transactionID/:reportID', getRoute: (action: IOUAction, iouType: IOUType, transactionID: string, reportID: string, backTo = '') => - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation getUrlWithBackToParam(`${action as string}/${iouType as string}/time/${transactionID}/${reportID}`, backTo), }, MONEY_REQUEST_STEP_SUBRATE: { route: ':action/:iouType/subrate/:transactionID/:reportID/:pageIndex', getRoute: (action: IOUAction, iouType: IOUType, transactionID: string, reportID: string, backTo = '') => - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation getUrlWithBackToParam(`${action as string}/${iouType as string}/subrate/${transactionID}/${reportID}/0`, backTo), }, MONEY_REQUEST_STEP_DESTINATION_EDIT: { route: ':action/:iouType/destination/:transactionID/:reportID/edit', getRoute: (action: IOUAction, iouType: IOUType, transactionID: string, reportID: string, backTo = '') => - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation getUrlWithBackToParam(`${action as string}/${iouType as string}/destination/${transactionID}/${reportID}/edit`, backTo), }, MONEY_REQUEST_STEP_TIME_EDIT: { route: ':action/:iouType/time/:transactionID/:reportID/edit', getRoute: (action: IOUAction, iouType: IOUType, transactionID: string, reportID: string, backTo = '') => - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation getUrlWithBackToParam(`${action as string}/${iouType as string}/time/${transactionID}/${reportID}/edit`, backTo), }, MONEY_REQUEST_STEP_SUBRATE_EDIT: { route: ':action/:iouType/subrate/:transactionID/:reportID/edit/:pageIndex', getRoute: (action: IOUAction, iouType: IOUType, transactionID: string, reportID: string, pageIndex = 0, backTo = '') => - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation getUrlWithBackToParam(`${action as string}/${iouType as string}/subrate/${transactionID}/${reportID}/edit/${pageIndex}`, backTo), }, MONEY_REQUEST_STEP_REPORT: { route: ':action/:iouType/report/:transactionID/:reportID/:reportActionID?', getRoute: (action: IOUAction, iouType: IOUType, transactionID: string, reportID: string, backTo = '', reportActionID?: string) => - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation getUrlWithBackToParam(`${action as string}/${iouType as string}/report/${transactionID}/${reportID}${reportActionID ? `/${reportActionID}` : ''}`, backTo), }, MONEY_REQUEST_RECEIPT_PREVIEW: { @@ -1716,7 +1650,6 @@ const ROUTES = { const queryParams = [shouldTurnOffSelectionMode ? 'shouldTurnOffSelectionMode=true' : '', transactionID ? `transactionID=${transactionID}` : ''].filter(Boolean).join('&'); const queryString = queryParams ? `?${queryParams}` : ''; - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation return getUrlWithBackToParam(`${action as string}/${iouType as string}/report/${reportID}/edit${queryString}`, backTo); }, }, @@ -1731,92 +1664,77 @@ const ROUTES = { Log.warn('Invalid policyID while building route SETTINGS_TAGS_ROOT'); } - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation return getUrlWithBackToParam(`settings/${policyID}/tags`, backTo); }, }, SETTINGS_TAGS_SETTINGS: { route: 'settings/:policyID/tags/settings', - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation getRoute: (policyID: string, backTo = '') => getUrlWithBackToParam(`settings/${policyID}/tags/settings` as const, backTo), }, SETTINGS_TAGS_EDIT: { route: 'settings/:policyID/tags/:orderWeight/edit', - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation getRoute: (policyID: string, orderWeight: number, backTo = '') => getUrlWithBackToParam(`settings/${policyID}/tags/${orderWeight}/edit` as const, backTo), }, SETTINGS_TAG_CREATE: { route: 'settings/:policyID/tags/new', - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation getRoute: (policyID: string, backTo = '') => getUrlWithBackToParam(`settings/${policyID}/tags/new` as const, backTo), }, SETTINGS_TAG_EDIT: { route: 'settings/:policyID/tag/:orderWeight/:tagName/edit', getRoute: (policyID: string, orderWeight: number, tagName: string, backTo = '') => - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation getUrlWithBackToParam(`settings/${policyID}/tag/${orderWeight}/${encodeURIComponent(tagName)}/edit` as const, backTo), }, SETTINGS_TAG_SETTINGS: { route: 'settings/:policyID/tag/:orderWeight/:tagName', getRoute: (policyID: string, orderWeight: number, tagName: string, backTo = '') => - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation getUrlWithBackToParam(`settings/${policyID}/tag/${orderWeight}/${encodeURIComponent(tagName)}` as const, backTo), }, SETTINGS_TAG_GL_CODE: { route: 'settings/:policyID/tag/:orderWeight/:tagName/gl-code', getRoute: (policyID: string, orderWeight: number, tagName: string, backTo = '') => - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation getUrlWithBackToParam(`settings/${policyID}/tag/${orderWeight}/${encodeURIComponent(tagName)}/gl-code` as const, backTo), }, SETTINGS_TAGS_IMPORT: { route: 'settings/:policyID/tags/import', - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation getRoute: (policyID: string, backTo = '') => getUrlWithBackToParam(`settings/${policyID}/tags/import` as const, backTo), }, SETTINGS_TAGS_IMPORTED: { route: 'settings/:policyID/tags/imported', - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation getRoute: (policyID: string, backTo = '') => getUrlWithBackToParam(`settings/${policyID}/tags/imported` as const, backTo), }, SETTINGS_CATEGORIES_ROOT: { route: 'settings/:policyID/categories', - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation getRoute: (policyID: string, backTo = '') => getUrlWithBackToParam(`settings/${policyID}/categories`, backTo), }, SETTINGS_CATEGORY_SETTINGS: { route: 'settings/:policyID/category/:categoryName', - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation getRoute: (policyID: string, categoryName: string, backTo = '') => getUrlWithBackToParam(`settings/${policyID}/category/${encodeURIComponent(categoryName)}`, backTo), }, SETTINGS_CATEGORIES_IMPORT: { route: 'settings/:policyID/categories/import', - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation getRoute: (policyID: string, backTo = '') => getUrlWithBackToParam(`settings/${policyID}/categories/import` as const, backTo), }, SETTINGS_CATEGORIES_IMPORTED: { route: 'settings/:policyID/categories/imported', - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation getRoute: (policyID: string, backTo = '') => getUrlWithBackToParam(`settings/${policyID}/categories/imported` as const, backTo), }, SETTINGS_CATEGORY_PAYROLL_CODE: { route: 'settings/:policyID/category/:categoryName/payroll-code', getRoute: (policyID: string, categoryName: string, backTo = '') => - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation getUrlWithBackToParam(`settings/${policyID}/category/${encodeURIComponent(categoryName)}/payroll-code` as const, backTo), }, SETTINGS_CATEGORY_GL_CODE: { route: 'settings/:policyID/category/:categoryName/gl-code', getRoute: (policyID: string, categoryName: string, backTo = '') => - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation getUrlWithBackToParam(`settings/${policyID}/category/${encodeURIComponent(categoryName)}/gl-code` as const, backTo), }, MONEY_REQUEST_STEP_DATE: { @@ -1826,7 +1744,6 @@ const ROUTES = { Log.warn('Invalid transactionID or reportID is used to build the MONEY_REQUEST_STEP_DATE route'); } - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation return getUrlWithBackToParam(`${action as string}/${iouType as string}/date/${transactionID}/${reportID}${reportActionID ? `/${reportActionID}` : ''}`, backTo); }, }, @@ -1837,7 +1754,6 @@ const ROUTES = { Log.warn('Invalid transactionID or reportID is used to build the MONEY_REQUEST_STEP_DESCRIPTION route'); } - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation return getUrlWithBackToParam(`${action as string}/${iouType as string}/description/${transactionID}/${reportID}${reportActionID ? `/${reportActionID}` : ''}`, backTo); }, }, @@ -1848,7 +1764,6 @@ const ROUTES = { Log.warn('Invalid transactionID or reportID is used to build the MONEY_REQUEST_STEP_DISTANCE route'); } - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation return getUrlWithBackToParam(`${action as string}/${iouType as string}/distance/${transactionID}/${reportID}${reportActionID ? `/${reportActionID}` : ''}`, backTo); }, }, @@ -1858,7 +1773,7 @@ const ROUTES = { if (!transactionID || !reportID) { Log.warn('Invalid transactionID or reportID is used to build the MONEY_REQUEST_STEP_DISTANCE_MANUAL route'); } - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation + return getUrlWithBackToParam(`${action as string}/${iouType as string}/distance-manual/${transactionID}/${reportID}${reportActionID ? `/${reportActionID}` : ''}`, backTo); }, }, @@ -1879,7 +1794,6 @@ const ROUTES = { Log.warn('Invalid transactionID or reportID is used to build the MONEY_REQUEST_STEP_DISTANCE_RATE route'); } - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation return getUrlWithBackToParam(`${action as string}/${iouType as string}/distanceRate/${transactionID}/${reportID}${reportActionID ? `/${reportActionID}` : ''}`, backTo); }, }, @@ -1890,14 +1804,12 @@ const ROUTES = { Log.warn('Invalid transactionID or reportID is used to build the MONEY_REQUEST_STEP_MERCHANT route'); } - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation return getUrlWithBackToParam(`${action as string}/${iouType as string}/merchant/${transactionID}/${reportID}${reportActionID ? `/${reportActionID}` : ''}`, backTo); }, }, MONEY_REQUEST_STEP_PARTICIPANTS: { route: ':action/:iouType/participants/:transactionID/:reportID', getRoute: (iouType: IOUType, transactionID: string | undefined, reportID: string | undefined, backTo = '', action: IOUAction = 'create') => - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation getUrlWithBackToParam(`${action as string}/${iouType as string}/participants/${transactionID}/${reportID}`, backTo), }, MONEY_REQUEST_STEP_SCAN: { @@ -1907,14 +1819,12 @@ const ROUTES = { Log.warn('Invalid transactionID or reportID is used to build the MONEY_REQUEST_STEP_SCAN route'); } - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation return getUrlWithBackToParam(`${action as string}/${iouType as string}/scan/${transactionID}/${reportID}`, backTo); }, }, MONEY_REQUEST_STEP_TAG: { route: ':action/:iouType/tag/:orderWeight/:transactionID/:reportID/:reportActionID?', getRoute: (action: IOUAction, iouType: IOUType, orderWeight: number, transactionID: string, reportID?: string, backTo = '', reportActionID?: string) => - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation getUrlWithBackToParam( `${action as string}/${iouType as string}/tag/${orderWeight}/${transactionID}${reportID ? `/${reportID}` : ''}${reportActionID ? `/${reportActionID}` : ''}`, backTo, @@ -1923,7 +1833,6 @@ const ROUTES = { MONEY_REQUEST_STEP_WAYPOINT: { route: ':action/:iouType/waypoint/:transactionID/:reportID/:pageIndex', getRoute: (action: IOUAction, iouType: IOUType, transactionID: string, reportID?: string, pageIndex = '', backTo = '') => - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation getUrlWithBackToParam(`${action as string}/${iouType as string}/waypoint/${transactionID}/${reportID}/${pageIndex}`, backTo), }, // This URL is used as a redirect to one of the create tabs below. This is so that we can message users with a link @@ -1961,7 +1870,6 @@ const ROUTES = { MONEY_REQUEST_RECEIPT_VIEW: { route: 'receipt-view/:transactionID', - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation getRoute: (transactionID: string, backTo: string) => getUrlWithBackToParam(`receipt-view/${transactionID}`, backTo), } as const, @@ -1969,7 +1877,6 @@ const ROUTES = { route: 'submit/state', getRoute: (state?: string, backTo?: string, label?: string) => - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation `${getUrlWithBackToParam(`submit/state${state ? `?state=${encodeURIComponent(state)}` : ''}`, backTo)}${ // the label param can be an empty string so we cannot use a nullish ?? operator @@ -2028,32 +1935,27 @@ const ROUTES = { NEW_TASK: { route: 'new/task', - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation getRoute: (backTo?: string) => getUrlWithBackToParam('new/task', backTo), }, NEW_TASK_ASSIGNEE: { route: 'new/task/assignee', - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation getRoute: (backTo?: string) => getUrlWithBackToParam('new/task/assignee', backTo), }, NEW_TASK_SHARE_DESTINATION: 'new/task/share-destination', NEW_TASK_DETAILS: { route: 'new/task/details', - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation getRoute: (backTo?: string) => getUrlWithBackToParam('new/task/details', backTo), }, NEW_TASK_TITLE: { route: 'new/task/title', - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation getRoute: (backTo?: string) => getUrlWithBackToParam('new/task/title', backTo), }, NEW_TASK_DESCRIPTION: { route: 'new/task/description', - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation getRoute: (backTo?: string) => getUrlWithBackToParam('new/task/description', backTo), }, @@ -2076,14 +1978,12 @@ const ROUTES = { Log.warn('Invalid policyID is used to build the WORKSPACE_INITIAL route'); } - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation return `${getUrlWithBackToParam(`workspaces/${policyID}`, backTo)}` as const; }, }, WORKSPACE_INVITE_MESSAGE_APPROVER: { route: 'workspaces/:policyID/invite-message/approver', - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation getRoute: (policyID: string, backTo?: string) => `${getUrlWithBackToParam(`workspaces/${policyID}/invite-message/approver`, backTo)}` as const, }, WORKSPACE_OVERVIEW: { @@ -2093,7 +1993,6 @@ const ROUTES = { Log.warn('Invalid policyID is used to build the WORKSPACE_OVERVIEW route'); } - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation return getUrlWithBackToParam(`workspaces/${policyID}/overview` as const, backTo); }, }, @@ -2118,7 +2017,6 @@ const ROUTES = { Log.warn('Invalid policyID is used to build the POLICY_ACCOUNTING_QUICKBOOKS_ONLINE_EXPORT route'); } - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation return getUrlWithBackToParam(`workspaces/${policyID}/accounting/quickbooks-online/export` as const, backTo, false); }, }, @@ -2138,7 +2036,6 @@ const ROUTES = { Log.warn('Invalid policyID is used to build the POLICY_ACCOUNTING_QUICKBOOKS_ONLINE_COMPANY_CARD_EXPENSE_SELECT route'); } - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation return getUrlWithBackToParam(`workspaces/${policyID}/accounting/quickbooks-online/export/company-card-expense-account/card-select` as const, backTo); }, }, @@ -2326,7 +2223,6 @@ const ROUTES = { WORKSPACE_WORKFLOWS_APPROVALS_EXPENSES_FROM: { route: 'workspaces/:policyID/workflows/approvals/expenses-from', - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation getRoute: (policyID: string, backTo?: string) => getUrlWithBackToParam(`workspaces/${policyID}/workflows/approvals/expenses-from` as const, backTo), }, WORKSPACE_WORKFLOWS_APPROVALS_APPROVER: { @@ -2468,19 +2364,16 @@ const ROUTES = { WORKSPACE_UPGRADE: { route: 'workspaces/:policyID?/upgrade/:featureName?', getRoute: (policyID?: string, featureName?: string, backTo?: string) => - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation getUrlWithBackToParam(policyID ? (`workspaces/${policyID}/upgrade/${encodeURIComponent(featureName ?? '')}` as const) : (`workspaces/upgrade` as const), backTo), }, WORKSPACE_DOWNGRADE: { route: 'workspaces/:policyID?/downgrade/', - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation getRoute: (policyID?: string, backTo?: string) => getUrlWithBackToParam(policyID ? (`workspaces/${policyID}/downgrade/` as const) : (`workspaces/downgrade` as const), backTo), }, WORKSPACE_PAY_AND_DOWNGRADE: { route: 'workspaces/pay-and-downgrade/', - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation getRoute: (backTo?: string) => getUrlWithBackToParam(`workspaces/pay-and-downgrade` as const, backTo), }, WORKSPACE_MORE_FEATURES: { @@ -2557,7 +2450,6 @@ const ROUTES = { WORKSPACE_EDIT_TAGS: { route: 'workspaces/:policyID/tags/:orderWeight/edit', - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation getRoute: (policyID: string, orderWeight: number, backTo?: string) => getUrlWithBackToParam(`workspaces/${policyID}/tags/${orderWeight}/edit` as const, backTo), }, WORKSPACE_TAG_EDIT: { @@ -2654,13 +2546,11 @@ const ROUTES = { WORKSPACE_OWNER_CHANGE_SUCCESS: { route: 'workspaces/:policyID/change-owner/:accountID/success', - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation getRoute: (policyID: string, accountID: number, backTo?: string) => getUrlWithBackToParam(`workspaces/${policyID}/change-owner/${accountID}/success` as const, backTo), }, WORKSPACE_OWNER_CHANGE_ERROR: { route: 'workspaces/:policyID/change-owner/:accountID/failure', - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation getRoute: (policyID: string, accountID: number, backTo?: string) => getUrlWithBackToParam(`workspaces/${policyID}/change-owner/${accountID}/failure` as const, backTo), }, WORKSPACE_OWNER_CHANGE_CHECK: { @@ -2670,7 +2560,6 @@ const ROUTES = { Log.warn('Invalid policyID is used to build the WORKSPACE_OWNER_CHANGE_CHECK route'); } - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation return getUrlWithBackToParam(`workspaces/${policyID}/change-owner/${accountID}/${error as string}` as const, backTo); }, }, @@ -2748,14 +2637,12 @@ const ROUTES = { Log.warn('Invalid policyID is used to build the WORKSPACE_COMPANY_CARDS_BANK_CONNECTION route'); } - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation return getUrlWithBackToParam(`workspaces/${policyID}/company-cards/${feed}/bank-connection`, backTo); }, }, WORKSPACE_COMPANY_CARDS_ADD_NEW: { route: 'workspaces/:policyID/company-cards/add-card-feed', - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation getRoute: (policyID: string, backTo?: string) => getUrlWithBackToParam(`workspaces/${policyID}/company-cards/add-card-feed`, backTo), }, WORKSPACE_COMPANY_CARDS_IMPORT_SPREADSHEET: { @@ -2790,7 +2677,6 @@ const ROUTES = { WORKSPACE_COMPANY_CARDS_ASSIGN_CARD_ASSIGNEE: { route: 'workspaces/:policyID/company-cards/:feed/assign-card/:cardID/assignee', getRoute: (params: WorkspaceCompanyCardsAssignCardParams, backTo?: string) => - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation getUrlWithBackToParam(`workspaces/${params.policyID}/company-cards/${encodeURIComponent(params.feed)}/assign-card/${encodeURIComponent(params.cardID)}/assignee`, backTo), }, WORKSPACE_COMPANY_CARDS_ASSIGN_CARD_CARD_SELECTION: { @@ -2811,7 +2697,6 @@ const ROUTES = { WORKSPACE_COMPANY_CARDS_ASSIGN_CARD_CONFIRMATION: { route: 'workspaces/:policyID/company-cards/:feed/assign-card/:cardID/confirmation', getRoute: (params: WorkspaceCompanyCardsAssignCardParams, backTo?: string) => - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation getUrlWithBackToParam(`workspaces/${params.policyID}/company-cards/${encodeURIComponent(params.feed)}/assign-card/${encodeURIComponent(params.cardID)}/confirmation`, backTo), }, WORKSPACE_COMPANY_CARDS_ASSIGN_CARD_INVITE_NEW_MEMBER: { @@ -2823,7 +2708,6 @@ const ROUTES = { route: 'workspaces/:policyID/company-cards/:feed/:cardID', getRoute: (policyID: string, feed: CompanyCardFeedWithDomainID, cardID: string, backTo?: string) => - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation getUrlWithBackToParam(`workspaces/${policyID}/company-cards/${encodeURIComponent(feed)}/${encodeURIComponent(cardID)}`, backTo), }, WORKSPACE_COMPANY_CARD_EDIT_CARD_NAME: { @@ -2847,7 +2731,6 @@ const ROUTES = { WORKSPACE_COMPANY_CARD_EXPORT: { route: 'workspaces/:policyID/company-cards/:feed/:cardID/edit/export', getRoute: (policyID: string, cardID: string, feed: CompanyCardFeedWithDomainID, backTo?: string) => - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation getUrlWithBackToParam(`workspaces/${policyID}/company-cards/${feed}/${cardID}/edit/export`, backTo, false), }, WORKSPACE_EXPENSIFY_CARD: { @@ -2862,25 +2745,21 @@ const ROUTES = { WORKSPACE_EXPENSIFY_CARD_DETAILS: { route: 'workspaces/:policyID/expensify-card/:cardID', - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation getRoute: (policyID: string, cardID: string, backTo?: string) => getUrlWithBackToParam(`workspaces/${policyID}/expensify-card/${cardID}`, backTo), }, EXPENSIFY_CARD_DETAILS: { route: 'settings/:policyID/expensify-card/:cardID', - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation getRoute: (policyID: string, cardID: string, backTo?: string) => getUrlWithBackToParam(`settings/${policyID}/expensify-card/${cardID}`, backTo), }, EXPENSIFY_CARD_EXPIRY_OPTIONS: { route: 'settings/:policyID/expensify-card/:cardID/edit/expiry-options', - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation getRoute: (policyID: string, cardID: string, backTo?: string) => getUrlWithBackToParam(`settings/${policyID}/expensify-card/${cardID}/edit/expiry-options`, backTo), }, WORKSPACE_EXPENSIFY_CARD_EXPIRY_OPTIONS: { route: 'workspaces/:policyID/expensify-card/:cardID/edit/expiry-options', - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation getRoute: (policyID: string, cardID: string, backTo?: string) => getUrlWithBackToParam(`workspaces/${policyID}/expensify-card/${cardID}/edit/expiry-options`, backTo), }, WORKSPACE_EXPENSIFY_CARD_BANK_ACCOUNT: { @@ -3013,7 +2892,6 @@ const ROUTES = { Log.warn('Invalid policyID is used to build the WORKSPACE_PER_DIEM route'); } - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation return getUrlWithBackToParam(`workspaces/${policyID}/per-diem`, backTo); }, }, @@ -3044,7 +2922,6 @@ const ROUTES = { Log.warn('Invalid policyID is used to build the WORKSPACE_RECEIPT_PARTNERS route'); } - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation return getUrlWithBackToParam(`workspaces/${policyID}/receipt-partners`, backTo); }, }, @@ -3055,7 +2932,6 @@ const ROUTES = { Log.warn('Invalid policyID is used to build the WORKSPACE_RECEIPT_PARTNERS_INVITE route'); } - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation return getUrlWithBackToParam(`workspaces/${policyID}/receipt-partners/${integration}/invite`, backTo); }, }, @@ -3070,7 +2946,6 @@ const ROUTES = { Log.warn('Invalid policyID is used to build the WORKSPACE_RECEIPT_PARTNERS_INVITE_EDIT route'); } - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation return getUrlWithBackToParam(`workspaces/${policyID}/receipt-partners/${integration}/invite/edit`, backTo); }, }, @@ -3253,7 +3128,6 @@ const ROUTES = { REFERRAL_DETAILS_MODAL: { route: 'referral/:contentType', - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation getRoute: (contentType: string, backTo?: string) => getUrlWithBackToParam(`referral/${contentType}`, backTo), }, SHARE_ROOT: 'share/root', @@ -3287,7 +3161,6 @@ const ROUTES = { Log.warn('Invalid reportID or transactionID is used to build the TRAVEL_TRIP_SUMMARY route'); } - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation return getUrlWithBackToParam(`r/${reportID}/trip/${transactionID}`, backTo); }, }, @@ -3298,115 +3171,97 @@ const ROUTES = { Log.warn('Invalid reportID, transactionID or pnr is used to build the TRAVEL_TRIP_DETAILS route'); } - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation return getUrlWithBackToParam(`r/${reportID}/trip/${transactionID}/${pnr}/${sequenceIndex}`, backTo); }, }, TRAVEL_WORKSPACE_CONFIRMATION: { route: 'travel/upgrade/workspace/confirmation', - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation getRoute: (backTo?: string) => getUrlWithBackToParam(`travel/upgrade/workspace/confirmation`, backTo), }, TRAVEL_WORKSPACE_ADDRESS: { route: 'travel/:domain/workspace-address', - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation getRoute: (domain: string, policyID?: string, backTo?: string) => getUrlWithBackToParam(`travel/${domain}/workspace-address?${policyID ? `policyID=${policyID}` : ''}`, backTo), }, TRAVEL_VERIFY_ACCOUNT: { route: `travel/${VERIFY_ACCOUNT}`, - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation + getRoute: (domain?: string, policyID?: string, backTo?: string) => getUrlWithBackToParam(getUrlWithParams(`travel/${VERIFY_ACCOUNT}`, {domain, policyID}), backTo), }, ONBOARDING_ROOT: { route: 'onboarding', - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation getRoute: (backTo?: string) => getUrlWithBackToParam(`onboarding`, backTo), }, ONBOARDING_PERSONAL_DETAILS: { route: 'onboarding/personal-details', - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation getRoute: (backTo?: string) => getUrlWithBackToParam(`onboarding/personal-details`, backTo), }, ONBOARDING_PRIVATE_DOMAIN: { route: 'onboarding/private-domain', - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation getRoute: (backTo?: string) => getUrlWithBackToParam(`onboarding/private-domain`, backTo), }, ONBOARDING_EMPLOYEES: { route: 'onboarding/employees', - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation getRoute: (backTo?: string) => getUrlWithBackToParam(`onboarding/employees`, backTo), }, ONBOARDING_ACCOUNTING: { route: 'onboarding/accounting', - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation getRoute: (backTo?: string) => getUrlWithBackToParam(`onboarding/accounting`, backTo), }, ONBOARDING_INTERESTED_FEATURES: { route: 'onboarding/interested-features', - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation getRoute: (userReportedIntegration?: string, backTo?: string) => getUrlWithBackToParam(`onboarding/interested-features?userReportedIntegration=${userReportedIntegration}`, backTo), }, ONBOARDING_PURPOSE: { route: 'onboarding/purpose', - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation getRoute: (backTo?: string) => getUrlWithBackToParam(`onboarding/purpose`, backTo), }, ONBOARDING_WORKSPACES: { route: 'onboarding/join-workspaces', - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation getRoute: (backTo?: string) => getUrlWithBackToParam(`onboarding/join-workspaces`, backTo), }, ONBOARDING_WORK_EMAIL: { route: 'onboarding/work-email', - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation getRoute: (backTo?: string) => getUrlWithBackToParam(`onboarding/work-email`, backTo), }, ONBOARDING_WORK_EMAIL_VALIDATION: { route: 'onboarding/work-email-validation', - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation getRoute: (backTo?: string) => getUrlWithBackToParam(`onboarding/work-email-validation`, backTo), }, ONBOARDING_WORKSPACE: { route: 'onboarding/create-workspace', - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation getRoute: (backTo?: string) => getUrlWithBackToParam(`onboarding/create-workspace`, backTo), }, ONBOARDING_WORKSPACE_CONFIRMATION: { route: 'onboarding/workspace-confirmation', - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation getRoute: (backTo?: string) => getUrlWithBackToParam(`onboarding/workspace-confirmation`, backTo), }, ONBOARDING_WORKSPACE_CURRENCY: { route: 'onboarding/workspace-currency', - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation getRoute: (backTo?: string) => getUrlWithBackToParam(`onboarding/workspace-currency`, backTo), }, CURRENCY_SELECTION: { route: 'workspace/confirmation/currency', - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation getRoute: (backTo?: string) => getUrlWithBackToParam(`workspace/confirmation/currency`, backTo), }, ONBOARDING_WORKSPACE_INVITE: { route: 'onboarding/workspace-invite', - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation getRoute: (backTo?: string) => getUrlWithBackToParam(`onboarding/workspace-invite`, backTo), }, EXPLANATION_MODAL_ROOT: 'onboarding/explanation', @@ -3419,7 +3274,6 @@ const ROUTES = { WORKSPACE_CONFIRMATION: { route: 'workspace/confirmation', - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation getRoute: (backTo?: string) => getUrlWithBackToParam(`workspace/confirmation`, backTo), }, WORKSPACE_CONFIRMATION_OWNER_SELECTOR: 'workspace/confirmation/owner-selector', @@ -3427,7 +3281,6 @@ const ROUTES = { MIGRATED_USER_WELCOME_MODAL: { route: 'onboarding/migrated-user-welcome', - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation getRoute: (backTo?: string) => getUrlWithBackToParam('onboarding/migrated-user-welcome', backTo, false), }, @@ -3447,62 +3300,52 @@ const ROUTES = { TRANSACTION_DUPLICATE_REVIEW_PAGE: { route: 'r/:threadReportID/duplicates/review', - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation getRoute: (threadReportID: string | undefined, backTo?: string) => getUrlWithBackToParam(`r/${threadReportID}/duplicates/review` as const, backTo), }, TRANSACTION_DUPLICATE_REVIEW_MERCHANT_PAGE: { route: 'r/:threadReportID/duplicates/review/merchant', - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation getRoute: (threadReportID: string, backTo?: string) => getUrlWithBackToParam(`r/${threadReportID}/duplicates/review/merchant` as const, backTo), }, TRANSACTION_DUPLICATE_REVIEW_CATEGORY_PAGE: { route: 'r/:threadReportID/duplicates/review/category', - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation getRoute: (threadReportID: string, backTo?: string) => getUrlWithBackToParam(`r/${threadReportID}/duplicates/review/category` as const, backTo), }, TRANSACTION_DUPLICATE_REVIEW_TAG_PAGE: { route: 'r/:threadReportID/duplicates/review/tag', - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation getRoute: (threadReportID: string, backTo?: string) => getUrlWithBackToParam(`r/${threadReportID}/duplicates/review/tag` as const, backTo), }, TRANSACTION_DUPLICATE_REVIEW_TAX_CODE_PAGE: { route: 'r/:threadReportID/duplicates/review/tax-code', - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation getRoute: (threadReportID: string, backTo?: string) => getUrlWithBackToParam(`r/${threadReportID}/duplicates/review/tax-code` as const, backTo), }, TRANSACTION_DUPLICATE_REVIEW_DESCRIPTION_PAGE: { route: 'r/:threadReportID/duplicates/review/description', - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation getRoute: (threadReportID: string, backTo?: string) => getUrlWithBackToParam(`r/${threadReportID}/duplicates/review/description` as const, backTo), }, TRANSACTION_DUPLICATE_REVIEW_REIMBURSABLE_PAGE: { route: 'r/:threadReportID/duplicates/review/reimbursable', - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation getRoute: (threadReportID: string, backTo?: string) => getUrlWithBackToParam(`r/${threadReportID}/duplicates/review/reimbursable` as const, backTo), }, TRANSACTION_DUPLICATE_REVIEW_BILLABLE_PAGE: { route: 'r/:threadReportID/duplicates/review/billable', - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation getRoute: (threadReportID: string, backTo?: string) => getUrlWithBackToParam(`r/${threadReportID}/duplicates/review/billable` as const, backTo), }, TRANSACTION_DUPLICATE_CONFIRMATION_PAGE: { route: 'r/:threadReportID/duplicates/confirm', - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation getRoute: (threadReportID: string, backTo?: string) => getUrlWithBackToParam(`r/${threadReportID}/duplicates/confirm` as const, backTo), }, MERGE_TRANSACTION_LIST_PAGE: { route: 'merge/:transactionID', getRoute: (transactionID: string, backTo: string, isOnSearch = false) => { - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation const url = getUrlWithBackToParam(`merge/${transactionID}` as const, backTo); return isOnSearch ? (`${url}&isOnSearch=true` as const) : url; }, @@ -3511,7 +3354,6 @@ const ROUTES = { route: 'merge/:transactionID/receipt', getRoute: (transactionID: string, backTo: string, isOnSearch = false) => { - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation const url = getUrlWithBackToParam(`merge/${transactionID}/receipt` as const, backTo); return isOnSearch ? (`${url}&isOnSearch=true` as const) : url; }, @@ -3520,7 +3362,6 @@ const ROUTES = { route: 'merge/:transactionID/details', getRoute: (transactionID: string, backTo: string, isOnSearch = false) => { - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation const url = getUrlWithBackToParam(`merge/${transactionID}/details` as const, backTo); return isOnSearch ? (`${url}&isOnSearch=true` as const) : url; }, @@ -3529,7 +3370,6 @@ const ROUTES = { route: 'merge/:transactionID/confirmation', getRoute: (transactionID: string, backTo: string, isOnSearch = false) => { - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation const url = getUrlWithBackToParam(`merge/${transactionID}/confirmation` as const, backTo); return isOnSearch ? (`${url}&isOnSearch=true` as const) : url; }, @@ -3866,31 +3706,26 @@ const ROUTES = { POLICY_ACCOUNTING_SAGE_INTACCT_PREFERRED_EXPORTER: { route: 'workspaces/:policyID/accounting/sage-intacct/export/preferred-exporter', - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation getRoute: (policyID: string, backTo?: string) => getUrlWithBackToParam(`workspaces/${policyID}/accounting/sage-intacct/export/preferred-exporter` as const, backTo), }, POLICY_ACCOUNTING_SAGE_INTACCT_EXPORT_DATE: { route: 'workspaces/:policyID/accounting/sage-intacct/export/date', - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation getRoute: (policyID: string, backTo?: string) => getUrlWithBackToParam(`workspaces/${policyID}/accounting/sage-intacct/export/date` as const, backTo), }, POLICY_ACCOUNTING_SAGE_INTACCT_REIMBURSABLE_EXPENSES: { route: 'workspaces/:policyID/accounting/sage-intacct/export/reimbursable', - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation getRoute: (policyID: string, backTo?: string) => getUrlWithBackToParam(`workspaces/${policyID}/accounting/sage-intacct/export/reimbursable` as const, backTo), }, POLICY_ACCOUNTING_SAGE_INTACCT_NON_REIMBURSABLE_EXPENSES: { route: 'workspaces/:policyID/accounting/sage-intacct/export/nonreimbursable', - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation getRoute: (policyID: string, backTo?: string) => getUrlWithBackToParam(`workspaces/${policyID}/accounting/sage-intacct/export/nonreimbursable` as const, backTo), }, POLICY_ACCOUNTING_SAGE_INTACCT_REIMBURSABLE_DESTINATION: { route: 'workspaces/:policyID/accounting/sage-intacct/export/reimbursable/destination', - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation getRoute: (policyID: string, backTo?: string) => getUrlWithBackToParam(`workspaces/${policyID}/accounting/sage-intacct/export/reimbursable/destination` as const, backTo), }, POLICY_ACCOUNTING_SAGE_INTACCT_ADVANCED: { @@ -4098,7 +3933,6 @@ const ROUTES = { TEST_TOOLS_MODAL: { route: 'test-tools', - // eslint-disable-next-line no-restricted-syntax -- Legacy route generation getRoute: (backTo?: string) => getUrlWithBackToParam('test-tools' as const, backTo), }, WORKSPACES_VERIFY_DOMAIN: {