diff --git a/.eslintrc.js b/.eslintrc.js index 5f450f3ae6c2..9e0c202e23f7 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -108,7 +108,18 @@ module.exports = { 'plugin:you-dont-need-lodash-underscore/all', 'plugin:prettier/recommended', ], - plugins: ['@typescript-eslint', 'jsdoc', 'you-dont-need-lodash-underscore', 'react-native-a11y', 'react', 'testing-library', 'eslint-plugin-react-compiler', 'lodash', 'deprecation'], + plugins: [ + '@stylistic/js', + '@typescript-eslint', + 'jsdoc', + 'you-dont-need-lodash-underscore', + 'react-native-a11y', + 'react', + 'testing-library', + 'eslint-plugin-react-compiler', + 'lodash', + 'deprecation', + ], ignorePatterns: ['lib/**'], parser: '@typescript-eslint/parser', parserOptions: { @@ -173,6 +184,9 @@ module.exports = { }, ], '@typescript-eslint/no-use-before-define': ['error', {functions: false}], + // Add rules related to quotes + '@stylistic/js/quotes': ['error', 'single', {avoidEscape: true}], + '@typescript-eslint/no-unnecessary-template-expression': 'error', // ESLint core rules 'es/no-nullish-coalescing-operators': 'off', diff --git a/.github/actions/javascript/authorChecklist/index.js b/.github/actions/javascript/authorChecklist/index.js index 22d8805e2201..5c88758d308f 100644 --- a/.github/actions/javascript/authorChecklist/index.js +++ b/.github/actions/javascript/authorChecklist/index.js @@ -17311,7 +17311,7 @@ class GithubUtils { const merger = internalQAPRMap[URL]; const mergerMention = `@${merger}`; issueBody += `${resolvedInternalQAPRs.includes(URL) ? '- [x]' : '- [ ]'} `; - issueBody += `${URL}`; + issueBody += URL; issueBody += ` - ${mergerMention}`; issueBody += '\r\n'; }); diff --git a/.github/actions/javascript/awaitStagingDeploys/index.js b/.github/actions/javascript/awaitStagingDeploys/index.js index cfc7e8b4cc4a..a445cf34e18a 100644 --- a/.github/actions/javascript/awaitStagingDeploys/index.js +++ b/.github/actions/javascript/awaitStagingDeploys/index.js @@ -12552,7 +12552,7 @@ class GithubUtils { const merger = internalQAPRMap[URL]; const mergerMention = `@${merger}`; issueBody += `${resolvedInternalQAPRs.includes(URL) ? '- [x]' : '- [ ]'} `; - issueBody += `${URL}`; + issueBody += URL; issueBody += ` - ${mergerMention}`; issueBody += '\r\n'; }); diff --git a/.github/actions/javascript/checkDeployBlockers/index.js b/.github/actions/javascript/checkDeployBlockers/index.js index 1e9626511e5e..a019b93bd17c 100644 --- a/.github/actions/javascript/checkDeployBlockers/index.js +++ b/.github/actions/javascript/checkDeployBlockers/index.js @@ -11835,7 +11835,7 @@ class GithubUtils { const merger = internalQAPRMap[URL]; const mergerMention = `@${merger}`; issueBody += `${resolvedInternalQAPRs.includes(URL) ? '- [x]' : '- [ ]'} `; - issueBody += `${URL}`; + issueBody += URL; issueBody += ` - ${mergerMention}`; issueBody += '\r\n'; }); diff --git a/.github/actions/javascript/createOrUpdateStagingDeploy/index.js b/.github/actions/javascript/createOrUpdateStagingDeploy/index.js index 1b7cccb730ff..66aeda00de3b 100644 --- a/.github/actions/javascript/createOrUpdateStagingDeploy/index.js +++ b/.github/actions/javascript/createOrUpdateStagingDeploy/index.js @@ -14550,7 +14550,7 @@ function getCommitHistoryAsJSON(fromTag, toTag) { spawnedProcess.on('close', (code) => { if (code !== 0) { console.log('code: ', code); - return reject(new Error(`${stderr}`)); + return reject(new Error(stderr)); } resolve(stdout); }); @@ -14872,7 +14872,7 @@ class GithubUtils { const merger = internalQAPRMap[URL]; const mergerMention = `@${merger}`; issueBody += `${resolvedInternalQAPRs.includes(URL) ? '- [x]' : '- [ ]'} `; - issueBody += `${URL}`; + issueBody += URL; issueBody += ` - ${mergerMention}`; issueBody += '\r\n'; }); diff --git a/.github/actions/javascript/getArtifactInfo/index.js b/.github/actions/javascript/getArtifactInfo/index.js index 76cacef0221f..9b335e54ad64 100644 --- a/.github/actions/javascript/getArtifactInfo/index.js +++ b/.github/actions/javascript/getArtifactInfo/index.js @@ -11796,7 +11796,7 @@ class GithubUtils { const merger = internalQAPRMap[URL]; const mergerMention = `@${merger}`; issueBody += `${resolvedInternalQAPRs.includes(URL) ? '- [x]' : '- [ ]'} `; - issueBody += `${URL}`; + issueBody += URL; issueBody += ` - ${mergerMention}`; issueBody += '\r\n'; }); diff --git a/.github/actions/javascript/getDeployPullRequestList/index.js b/.github/actions/javascript/getDeployPullRequestList/index.js index cde96b76b6e6..fcc53e6027de 100644 --- a/.github/actions/javascript/getDeployPullRequestList/index.js +++ b/.github/actions/javascript/getDeployPullRequestList/index.js @@ -11836,7 +11836,7 @@ function getCommitHistoryAsJSON(fromTag, toTag) { spawnedProcess.on('close', (code) => { if (code !== 0) { console.log('code: ', code); - return reject(new Error(`${stderr}`)); + return reject(new Error(stderr)); } resolve(stdout); }); @@ -12158,7 +12158,7 @@ class GithubUtils { const merger = internalQAPRMap[URL]; const mergerMention = `@${merger}`; issueBody += `${resolvedInternalQAPRs.includes(URL) ? '- [x]' : '- [ ]'} `; - issueBody += `${URL}`; + issueBody += URL; issueBody += ` - ${mergerMention}`; issueBody += '\r\n'; }); diff --git a/.github/actions/javascript/getPreviousVersion/index.js b/.github/actions/javascript/getPreviousVersion/index.js index 9938951d6768..b2ffaea0a589 100644 --- a/.github/actions/javascript/getPreviousVersion/index.js +++ b/.github/actions/javascript/getPreviousVersion/index.js @@ -2960,7 +2960,7 @@ function getCommitHistoryAsJSON(fromTag, toTag) { spawnedProcess.on('close', (code) => { if (code !== 0) { console.log('code: ', code); - return reject(new Error(`${stderr}`)); + return reject(new Error(stderr)); } resolve(stdout); }); diff --git a/.github/actions/javascript/getPullRequestDetails/index.js b/.github/actions/javascript/getPullRequestDetails/index.js index b1c096ed0be8..708c18a32b78 100644 --- a/.github/actions/javascript/getPullRequestDetails/index.js +++ b/.github/actions/javascript/getPullRequestDetails/index.js @@ -11898,7 +11898,7 @@ class GithubUtils { const merger = internalQAPRMap[URL]; const mergerMention = `@${merger}`; issueBody += `${resolvedInternalQAPRs.includes(URL) ? '- [x]' : '- [ ]'} `; - issueBody += `${URL}`; + issueBody += URL; issueBody += ` - ${mergerMention}`; issueBody += '\r\n'; }); diff --git a/.github/actions/javascript/isStagingDeployLocked/index.js b/.github/actions/javascript/isStagingDeployLocked/index.js index d7196cad32f7..54edeecc70d2 100644 --- a/.github/actions/javascript/isStagingDeployLocked/index.js +++ b/.github/actions/javascript/isStagingDeployLocked/index.js @@ -11796,7 +11796,7 @@ class GithubUtils { const merger = internalQAPRMap[URL]; const mergerMention = `@${merger}`; issueBody += `${resolvedInternalQAPRs.includes(URL) ? '- [x]' : '- [ ]'} `; - issueBody += `${URL}`; + issueBody += URL; issueBody += ` - ${mergerMention}`; issueBody += '\r\n'; }); diff --git a/.github/actions/javascript/markPullRequestsAsDeployed/index.js b/.github/actions/javascript/markPullRequestsAsDeployed/index.js index 62d326c9af3a..6a09c97177cf 100644 --- a/.github/actions/javascript/markPullRequestsAsDeployed/index.js +++ b/.github/actions/javascript/markPullRequestsAsDeployed/index.js @@ -12721,7 +12721,7 @@ async function run() { if (date) { message += `on ${date}`; } - message += `🚀`; + message += '🚀'; message += `\n\nplatform | result\n---|---\n🤖 android 🤖|${androidResult}\n🖥 desktop 🖥|${desktopResult}`; message += `\n🍎 iOS 🍎|${iOSResult}\n🕸 web 🕸|${webResult}`; if (deployVerb === 'Cherry-picked' && !/no ?qa/gi.test(prTitle ?? '')) { @@ -13192,7 +13192,7 @@ class GithubUtils { const merger = internalQAPRMap[URL]; const mergerMention = `@${merger}`; issueBody += `${resolvedInternalQAPRs.includes(URL) ? '- [x]' : '- [ ]'} `; - issueBody += `${URL}`; + issueBody += URL; issueBody += ` - ${mergerMention}`; issueBody += '\r\n'; }); diff --git a/.github/actions/javascript/markPullRequestsAsDeployed/markPullRequestsAsDeployed.ts b/.github/actions/javascript/markPullRequestsAsDeployed/markPullRequestsAsDeployed.ts index 9c2defebd01d..b4a90e566613 100644 --- a/.github/actions/javascript/markPullRequestsAsDeployed/markPullRequestsAsDeployed.ts +++ b/.github/actions/javascript/markPullRequestsAsDeployed/markPullRequestsAsDeployed.ts @@ -64,7 +64,7 @@ async function run() { if (date) { message += `on ${date}`; } - message += `🚀`; + message += '🚀'; message += `\n\nplatform | result\n---|---\n🤖 android 🤖|${androidResult}\n🖥 desktop 🖥|${desktopResult}`; message += `\n🍎 iOS 🍎|${iOSResult}\n🕸 web 🕸|${webResult}`; diff --git a/.github/actions/javascript/postTestBuildComment/index.js b/.github/actions/javascript/postTestBuildComment/index.js index 265d62c4b321..9986f14fc4f4 100644 --- a/.github/actions/javascript/postTestBuildComment/index.js +++ b/.github/actions/javascript/postTestBuildComment/index.js @@ -11895,7 +11895,7 @@ class GithubUtils { const merger = internalQAPRMap[URL]; const mergerMention = `@${merger}`; issueBody += `${resolvedInternalQAPRs.includes(URL) ? '- [x]' : '- [ ]'} `; - issueBody += `${URL}`; + issueBody += URL; issueBody += ` - ${mergerMention}`; issueBody += '\r\n'; }); diff --git a/.github/actions/javascript/proposalPoliceComment/index.js b/.github/actions/javascript/proposalPoliceComment/index.js index 2a41f49f654f..9b4f199a72ef 100644 --- a/.github/actions/javascript/proposalPoliceComment/index.js +++ b/.github/actions/javascript/proposalPoliceComment/index.js @@ -18384,7 +18384,7 @@ class GithubUtils { const merger = internalQAPRMap[URL]; const mergerMention = `@${merger}`; issueBody += `${resolvedInternalQAPRs.includes(URL) ? '- [x]' : '- [ ]'} `; - issueBody += `${URL}`; + issueBody += URL; issueBody += ` - ${mergerMention}`; issueBody += '\r\n'; }); diff --git a/.github/actions/javascript/reopenIssueWithComment/index.js b/.github/actions/javascript/reopenIssueWithComment/index.js index 9c97e3c612a9..e71e6b538046 100644 --- a/.github/actions/javascript/reopenIssueWithComment/index.js +++ b/.github/actions/javascript/reopenIssueWithComment/index.js @@ -11806,7 +11806,7 @@ class GithubUtils { const merger = internalQAPRMap[URL]; const mergerMention = `@${merger}`; issueBody += `${resolvedInternalQAPRs.includes(URL) ? '- [x]' : '- [ ]'} `; - issueBody += `${URL}`; + issueBody += URL; issueBody += ` - ${mergerMention}`; issueBody += '\r\n'; }); diff --git a/.github/actions/javascript/reviewerChecklist/index.js b/.github/actions/javascript/reviewerChecklist/index.js index 93a3ccf1a0f3..4ac62734617a 100644 --- a/.github/actions/javascript/reviewerChecklist/index.js +++ b/.github/actions/javascript/reviewerChecklist/index.js @@ -11898,7 +11898,7 @@ class GithubUtils { const merger = internalQAPRMap[URL]; const mergerMention = `@${merger}`; issueBody += `${resolvedInternalQAPRs.includes(URL) ? '- [x]' : '- [ ]'} `; - issueBody += `${URL}`; + issueBody += URL; issueBody += ` - ${mergerMention}`; issueBody += '\r\n'; }); diff --git a/.github/actions/javascript/verifySignedCommits/index.js b/.github/actions/javascript/verifySignedCommits/index.js index 8920086eea46..cfafe0f7c005 100644 --- a/.github/actions/javascript/verifySignedCommits/index.js +++ b/.github/actions/javascript/verifySignedCommits/index.js @@ -11838,7 +11838,7 @@ class GithubUtils { const merger = internalQAPRMap[URL]; const mergerMention = `@${merger}`; issueBody += `${resolvedInternalQAPRs.includes(URL) ? '- [x]' : '- [ ]'} `; - issueBody += `${URL}`; + issueBody += URL; issueBody += ` - ${mergerMention}`; issueBody += '\r\n'; }); diff --git a/.github/libs/GitUtils.ts b/.github/libs/GitUtils.ts index 89950613bc2e..b2661c07c460 100644 --- a/.github/libs/GitUtils.ts +++ b/.github/libs/GitUtils.ts @@ -136,7 +136,7 @@ function getCommitHistoryAsJSON(fromTag: string, toTag: string): Promise { if (code !== 0) { console.log('code: ', code); - return reject(new Error(`${stderr}`)); + return reject(new Error(stderr)); } resolve(stdout); diff --git a/.github/libs/GithubUtils.ts b/.github/libs/GithubUtils.ts index ae74621b356a..2efd39857ff3 100644 --- a/.github/libs/GithubUtils.ts +++ b/.github/libs/GithubUtils.ts @@ -330,7 +330,7 @@ class GithubUtils { const merger = internalQAPRMap[URL]; const mergerMention = `@${merger}`; issueBody += `${resolvedInternalQAPRs.includes(URL) ? '- [x]' : '- [ ]'} `; - issueBody += `${URL}`; + issueBody += URL; issueBody += ` - ${mergerMention}`; issueBody += '\r\n'; }); diff --git a/desktop/main.ts b/desktop/main.ts index 1221b05a8388..5263e8007f71 100644 --- a/desktop/main.ts +++ b/desktop/main.ts @@ -202,8 +202,8 @@ const electronUpdater = (browserWindow: BrowserWindow): PlatformSpecificUpdater init: () => { autoUpdater.on(ELECTRON_EVENTS.UPDATE_DOWNLOADED, (info) => { const systemMenu = Menu.getApplicationMenu(); - const updateMenuItem = systemMenu?.getMenuItemById(`update`); - const checkForUpdatesMenuItem = systemMenu?.getMenuItemById(`checkForUpdates`); + const updateMenuItem = systemMenu?.getMenuItemById('update'); + const checkForUpdatesMenuItem = systemMenu?.getMenuItemById('checkForUpdates'); downloadedVersion = info.version; @@ -343,14 +343,14 @@ const mainWindow = (): Promise => { const initialMenuTemplate: MenuItemConstructorOptions[] = [ { id: 'mainMenu', - label: Localize.translate(preferredLocale, `desktopApplicationMenu.mainMenu`), + label: Localize.translate(preferredLocale, 'desktopApplicationMenu.mainMenu'), submenu: [ {id: 'about', role: 'about'}, - {id: 'update', label: Localize.translate(preferredLocale, `desktopApplicationMenu.update`), click: quitAndInstallWithUpdate, visible: false}, - {id: 'checkForUpdates', label: Localize.translate(preferredLocale, `desktopApplicationMenu.checkForUpdates`), click: manuallyCheckForUpdates}, + {id: 'update', label: Localize.translate(preferredLocale, 'desktopApplicationMenu.update'), click: quitAndInstallWithUpdate, visible: false}, + {id: 'checkForUpdates', label: Localize.translate(preferredLocale, 'desktopApplicationMenu.checkForUpdates'), click: manuallyCheckForUpdates}, { id: 'viewShortcuts', - label: Localize.translate(preferredLocale, `desktopApplicationMenu.viewShortcuts`), + label: Localize.translate(preferredLocale, 'desktopApplicationMenu.viewShortcuts'), accelerator: 'CmdOrCtrl+J', click: () => { showKeyboardShortcutsPage(browserWindow); @@ -368,12 +368,12 @@ const mainWindow = (): Promise => { }, { id: 'fileMenu', - label: Localize.translate(preferredLocale, `desktopApplicationMenu.fileMenu`), + label: Localize.translate(preferredLocale, 'desktopApplicationMenu.fileMenu'), submenu: [{id: 'closeWindow', role: 'close', accelerator: 'Cmd+w'}], }, { id: 'editMenu', - label: Localize.translate(preferredLocale, `desktopApplicationMenu.editMenu`), + label: Localize.translate(preferredLocale, 'desktopApplicationMenu.editMenu'), submenu: [ {id: 'undo', role: 'undo'}, {id: 'redo', role: 'redo'}, @@ -396,7 +396,7 @@ const mainWindow = (): Promise => { {type: 'separator'}, { id: 'speechSubmenu', - label: Localize.translate(preferredLocale, `desktopApplicationMenu.speechSubmenu`), + label: Localize.translate(preferredLocale, 'desktopApplicationMenu.speechSubmenu'), submenu: [ {id: 'startSpeaking', role: 'startSpeaking'}, {id: 'stopSpeaking', role: 'stopSpeaking'}, @@ -406,7 +406,7 @@ const mainWindow = (): Promise => { }, { id: 'viewMenu', - label: Localize.translate(preferredLocale, `desktopApplicationMenu.viewMenu`), + label: Localize.translate(preferredLocale, 'desktopApplicationMenu.viewMenu'), submenu: [ {id: 'reload', role: 'reload'}, {id: 'forceReload', role: 'forceReload'}, @@ -421,7 +421,7 @@ const mainWindow = (): Promise => { }, { id: 'historyMenu', - label: Localize.translate(preferredLocale, `desktopApplicationMenu.historyMenu`), + label: Localize.translate(preferredLocale, 'desktopApplicationMenu.historyMenu'), submenu: [ { id: 'back', @@ -462,33 +462,33 @@ const mainWindow = (): Promise => { }, { id: 'helpMenu', - label: Localize.translate(preferredLocale, `desktopApplicationMenu.helpMenu`), + label: Localize.translate(preferredLocale, 'desktopApplicationMenu.helpMenu'), role: 'help', submenu: [ { id: 'learnMore', - label: Localize.translate(preferredLocale, `desktopApplicationMenu.learnMore`), + label: Localize.translate(preferredLocale, 'desktopApplicationMenu.learnMore'), click: () => { shell.openExternal(CONST.MENU_HELP_URLS.LEARN_MORE); }, }, { id: 'documentation', - label: Localize.translate(preferredLocale, `desktopApplicationMenu.documentation`), + label: Localize.translate(preferredLocale, 'desktopApplicationMenu.documentation'), click: () => { shell.openExternal(CONST.MENU_HELP_URLS.DOCUMENTATION); }, }, { id: 'communityDiscussions', - label: Localize.translate(preferredLocale, `desktopApplicationMenu.communityDiscussions`), + label: Localize.translate(preferredLocale, 'desktopApplicationMenu.communityDiscussions'), click: () => { shell.openExternal(CONST.MENU_HELP_URLS.COMMUNITY_DISCUSSIONS); }, }, { id: 'searchIssues', - label: Localize.translate(preferredLocale, `desktopApplicationMenu.searchIssues`), + label: Localize.translate(preferredLocale, 'desktopApplicationMenu.searchIssues'), click: () => { shell.openExternal(CONST.MENU_HELP_URLS.SEARCH_ISSUES); }, diff --git a/package-lock.json b/package-lock.json index 33baf6a35084..c84524d33984 100644 --- a/package-lock.json +++ b/package-lock.json @@ -166,6 +166,7 @@ "@storybook/react": "^8.1.10", "@storybook/react-webpack5": "^8.1.6", "@storybook/theming": "^8.1.10", + "@stylistic/eslint-plugin-js": "^2.8.0", "@svgr/webpack": "^6.0.0", "@testing-library/jest-native": "5.4.1", "@testing-library/react-native": "11.5.1", @@ -14960,6 +14961,63 @@ "url": "https://opencollective.com/storybook" } }, + "node_modules/@stylistic/eslint-plugin-js": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin-js/-/eslint-plugin-js-2.8.0.tgz", + "integrity": "sha512-/e7pSzVMrwBd6yzSDsKHwax3TS96+pd/xSKzELaTkOuYqUhYfj/becWdfDbFSBGQD7BBBCiiE4L8L2cUfu5h+A==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^4.0.0", + "espree": "^10.1.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "peerDependencies": { + "eslint": ">=8.40.0" + } + }, + "node_modules/@stylistic/eslint-plugin-js/node_modules/acorn": { + "version": "8.12.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", + "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/@stylistic/eslint-plugin-js/node_modules/eslint-visitor-keys": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.1.0.tgz", + "integrity": "sha512-Q7lok0mqMUSf5a/AdAZkA5a/gHcO6snwQClVNNvFKCAVlxXucdU8pKydU5ZVZjBx5xr37vGbFFWtLQYreLzrZg==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@stylistic/eslint-plugin-js/node_modules/espree": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.2.0.tgz", + "integrity": "sha512-upbkBJbckcCNBDBDXEbuhjbP68n+scUd3k/U2EkyM9nw+I/jPiL4cLF/Al06CF96wRltFda16sxDFrxsI1v0/g==", + "dev": true, + "dependencies": { + "acorn": "^8.12.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.1.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, "node_modules/@svgr/babel-plugin-add-jsx-attribute": { "version": "6.5.1", "dev": true, diff --git a/package.json b/package.json index 527a293a6a9e..d6ce7f341cfa 100644 --- a/package.json +++ b/package.json @@ -223,6 +223,7 @@ "@storybook/react": "^8.1.10", "@storybook/react-webpack5": "^8.1.6", "@storybook/theming": "^8.1.10", + "@stylistic/eslint-plugin-js": "^2.8.0", "@svgr/webpack": "^6.0.0", "@testing-library/jest-native": "5.4.1", "@testing-library/react-native": "11.5.1", diff --git a/src/CONST.ts b/src/CONST.ts index bbc92ddadbde..dc71b1ed6d81 100755 --- a/src/CONST.ts +++ b/src/CONST.ts @@ -716,7 +716,7 @@ const CONST = { EXPENSIFY_PACKAGE_FOR_SAGE_INTACCT_FILE_NAME: 'ExpensifyPackageForSageIntacct', SAGE_INTACCT_INSTRUCTIONS: 'https://help.expensify.com/articles/expensify-classic/integrations/accounting-integrations/Sage-Intacct', HOW_TO_CONNECT_TO_SAGE_INTACCT: 'https://help.expensify.com/articles/expensify-classic/integrations/accounting-integrations/Sage-Intacct#how-to-connect-to-sage-intacct', - PRICING: `https://www.expensify.com/pricing`, + PRICING: 'https://www.expensify.com/pricing', COMPANY_CARDS_HELP: 'https://help.expensify.com/articles/expensify-classic/connect-credit-cards/company-cards/Commercial-Card-Feeds', CUSTOM_REPORT_NAME_HELP_URL: 'https://help.expensify.com/articles/expensify-classic/spending-insights/Custom-Templates', CONFIGURE_REIMBURSEMENT_SETTINGS_HELP_URL: 'https://help.expensify.com/articles/expensify-classic/workspaces/Configure-Reimbursement-Settings', @@ -4540,7 +4540,7 @@ const CONST = { autoCompleted: false, title: 'Meet your setup specialist', description: ({adminsRoomLink}) => - `Meet your setup specialist, who can answer any questions as you get started with Expensify. Yes, a real human!\n` + + 'Meet your setup specialist, who can answer any questions as you get started with Expensify. Yes, a real human!\n' + '\n' + `Chat with the specialist in your [#admins room](${adminsRoomLink}).`, }, @@ -5676,8 +5676,8 @@ const CONST = { id: 'approvals' as const, alias: 'approvals' as const, name: 'Advanced Approvals' as const, - title: `workspace.upgrade.approvals.title` as const, - description: `workspace.upgrade.approvals.description` as const, + title: 'workspace.upgrade.approvals.title' as const, + description: 'workspace.upgrade.approvals.description' as const, icon: 'AdvancedApprovalsSquare', }, glCodes: { @@ -5747,7 +5747,7 @@ const CONST = { BOOT_SPLASH_STATE: { VISIBLE: 'visible', READY_TO_BE_HIDDEN: 'readyToBeHidden', - HIDDEN: `hidden`, + HIDDEN: 'hidden', }, CSV_IMPORT_COLUMNS: { diff --git a/src/ROUTES.ts b/src/ROUTES.ts index 9c429dd3e909..7aa134a6716f 100644 --- a/src/ROUTES.ts +++ b/src/ROUTES.ts @@ -234,7 +234,7 @@ const ROUTES = { SETTINGS_TROUBLESHOOT: 'settings/troubleshoot', SETTINGS_CONSOLE: { route: 'settings/troubleshoot/console', - getRoute: (backTo?: string) => getUrlWithBackToParam(`settings/troubleshoot/console`, backTo), + getRoute: (backTo?: string) => getUrlWithBackToParam('settings/troubleshoot/console', backTo), }, SETTINGS_SHARE_LOG: { route: 'settings/troubleshoot/console/share-log', @@ -580,7 +580,7 @@ const ROUTES = { WORKSPACE_NEW_ROOM: 'workspace/new-room', WORKSPACE_INITIAL: { route: 'settings/workspaces/:policyID', - getRoute: (policyID: string, backTo?: string) => `${getUrlWithBackToParam(`settings/workspaces/${policyID}`, backTo)}` as const, + getRoute: (policyID: string, backTo?: string) => getUrlWithBackToParam(`settings/workspaces/${policyID}`, backTo) as const, }, WORKSPACE_INVITE: { route: 'settings/workspaces/:policyID/invite', @@ -1129,19 +1129,19 @@ const ROUTES = { TRACK_TRAINING_MODAL: 'track-training', ONBOARDING_ROOT: { route: 'onboarding', - getRoute: (backTo?: string) => getUrlWithBackToParam(`onboarding`, backTo), + getRoute: (backTo?: string) => getUrlWithBackToParam('onboarding', backTo), }, ONBOARDING_PERSONAL_DETAILS: { route: 'onboarding/personal-details', - getRoute: (backTo?: string) => getUrlWithBackToParam(`onboarding/personal-details`, backTo), + getRoute: (backTo?: string) => getUrlWithBackToParam('onboarding/personal-details', backTo), }, ONBOARDING_WORK: { route: 'onboarding/work', - getRoute: (backTo?: string) => getUrlWithBackToParam(`onboarding/work`, backTo), + getRoute: (backTo?: string) => getUrlWithBackToParam('onboarding/work', backTo), }, ONBOARDING_PURPOSE: { route: 'onboarding/purpose', - getRoute: (backTo?: string) => getUrlWithBackToParam(`onboarding/purpose`, backTo), + getRoute: (backTo?: string) => getUrlWithBackToParam('onboarding/purpose', backTo), }, WELCOME_VIDEO_ROOT: 'onboarding/welcome-video', EXPLANATION_MODAL_ROOT: 'onboarding/explanation', diff --git a/src/components/AddPaymentCard/PaymentCardCurrencyHeader.tsx b/src/components/AddPaymentCard/PaymentCardCurrencyHeader.tsx index e5142aec8efc..77906ccfb4dd 100644 --- a/src/components/AddPaymentCard/PaymentCardCurrencyHeader.tsx +++ b/src/components/AddPaymentCard/PaymentCardCurrencyHeader.tsx @@ -12,12 +12,14 @@ function PaymentCardCurrencyHeader({isSectionList}: {isSectionList?: boolean}) { return ( - {`${translate('billingCurrency.note')}`}{' '} + {translate('billingCurrency.note')}{' '} {`${translate('billingCurrency.noteLink')}`}{' '} - {`${translate('billingCurrency.noteDetails')}`} + > + {translate('billingCurrency.noteLink')} + {' '} + {translate('billingCurrency.noteDetails')} ); diff --git a/src/components/AddPaymentCard/PaymentCardForm.tsx b/src/components/AddPaymentCard/PaymentCardForm.tsx index f38ea60f1aad..b60d3b7eb96a 100644 --- a/src/components/AddPaymentCard/PaymentCardForm.tsx +++ b/src/components/AddPaymentCard/PaymentCardForm.tsx @@ -47,8 +47,8 @@ function IAcceptTheLabel() { return ( - {`${translate('common.iAcceptThe')}`} - {`${translate('common.addCardTermsOfService')}`} {`${translate('common.and')}`} + {translate('common.iAcceptThe')} + {translate('common.addCardTermsOfService')} {translate('common.and')} {` ${translate('common.privacyPolicy')} `} ); diff --git a/src/components/ApprovalWorkflowSection.tsx b/src/components/ApprovalWorkflowSection.tsx index fd28595e7436..c0968c6a38e7 100644 --- a/src/components/ApprovalWorkflowSection.tsx +++ b/src/components/ApprovalWorkflowSection.tsx @@ -28,7 +28,7 @@ function ApprovalWorkflowSection({approvalWorkflow, onPress}: ApprovalWorkflowSe const approverTitle = useCallback( (index: number) => - approvalWorkflow.approvers.length > 1 ? `${toLocaleOrdinal(index + 1, true)} ${translate('workflowsPage.approver').toLowerCase()}` : `${translate('workflowsPage.approver')}`, + approvalWorkflow.approvers.length > 1 ? `${toLocaleOrdinal(index + 1, true)} ${translate('workflowsPage.approver').toLowerCase()}` : translate('workflowsPage.approver'), [approvalWorkflow.approvers.length, toLocaleOrdinal, translate], ); diff --git a/src/components/AttachmentModal.tsx b/src/components/AttachmentModal.tsx index 8de7f4575e75..cc3fa94f81b4 100644 --- a/src/components/AttachmentModal.tsx +++ b/src/components/AttachmentModal.tsx @@ -243,7 +243,7 @@ function AttachmentModal({ } if (typeof sourceURL === 'string') { - const fileName = type === CONST.ATTACHMENT_TYPE.SEARCH ? FileUtils.getFileName(`${sourceURL}`) : file?.name; + const fileName = type === CONST.ATTACHMENT_TYPE.SEARCH ? FileUtils.getFileName(sourceURL) : file?.name; fileDownload(sourceURL, fileName ?? ''); } diff --git a/src/components/Attachments/AttachmentCarousel/extractAttachments.ts b/src/components/Attachments/AttachmentCarousel/extractAttachments.ts index 81ee6d08934b..ceb1e61bf233 100644 --- a/src/components/Attachments/AttachmentCarousel/extractAttachments.ts +++ b/src/components/Attachments/AttachmentCarousel/extractAttachments.ts @@ -37,7 +37,7 @@ function extractAttachments( } uniqueSources.add(source); - const fileName = attribs[CONST.ATTACHMENT_ORIGINAL_FILENAME_ATTRIBUTE] || FileUtils.getFileName(`${source}`); + const fileName = attribs[CONST.ATTACHMENT_ORIGINAL_FILENAME_ATTRIBUTE] || FileUtils.getFileName(source); attachments.unshift({ source: tryResolveUrlFromApiRoot(attribs[CONST.ATTACHMENT_SOURCE_ATTRIBUTE]), isAuthTokenRequired: !!attribs[CONST.ATTACHMENT_SOURCE_ATTRIBUTE], @@ -58,7 +58,7 @@ function extractAttachments( } uniqueSources.add(source); - let fileName = attribs[CONST.ATTACHMENT_ORIGINAL_FILENAME_ATTRIBUTE] || FileUtils.getFileName(`${source}`); + let fileName = attribs[CONST.ATTACHMENT_ORIGINAL_FILENAME_ATTRIBUTE] || FileUtils.getFileName(source); const width = (attribs['data-expensify-width'] && parseInt(attribs['data-expensify-width'], 10)) || undefined; const height = (attribs['data-expensify-height'] && parseInt(attribs['data-expensify-height'], 10)) || undefined; diff --git a/src/components/Composer/index.tsx b/src/components/Composer/index.tsx index 72116a346c00..b65874e6f472 100755 --- a/src/components/Composer/index.tsx +++ b/src/components/Composer/index.tsx @@ -348,7 +348,7 @@ function Composer( numberOfLines={1} ref={textRef} > - {`${caretContent}`} + {caretContent} diff --git a/src/components/EReceiptThumbnail.tsx b/src/components/EReceiptThumbnail.tsx index 8e0f589cc34d..d33abc865e99 100644 --- a/src/components/EReceiptThumbnail.tsx +++ b/src/components/EReceiptThumbnail.tsx @@ -66,7 +66,7 @@ function EReceiptThumbnail({transaction, borderRadius, fileExtension, isReceiptT const secondaryColor = colorStyles?.color; const transactionDetails = ReportUtils.getTransactionDetails(transaction); const transactionMCCGroup = transactionDetails?.mccGroup; - const MCCIcon = transactionMCCGroup ? MCCIcons[`${transactionMCCGroup}`] : undefined; + const MCCIcon = transactionMCCGroup ? MCCIcons[transactionMCCGroup] : undefined; const tripIcon = TripReservationUtils.getTripEReceiptIcon(transaction); let receiptIconWidth: number = variables.eReceiptIconWidth; diff --git a/src/components/Form/FormProvider.tsx b/src/components/Form/FormProvider.tsx index 1d66953c1070..69baef311035 100644 --- a/src/components/Form/FormProvider.tsx +++ b/src/components/Form/FormProvider.tsx @@ -84,7 +84,7 @@ function FormProvider( forwardedRef: ForwardedRef, ) { const [network] = useOnyx(ONYXKEYS.NETWORK); - const [formState] = useOnyx(`${formID}`); + const [formState] = useOnyx(formID); const [draftValues] = useOnyx(`${formID}Draft`); const {preferredLocale, translate} = useLocalize(); const inputRefs = useRef({}); diff --git a/src/components/HTMLEngineProvider/HTMLRenderers/VideoRenderer.tsx b/src/components/HTMLEngineProvider/HTMLRenderers/VideoRenderer.tsx index ce822af14cb8..cf9abc0c9b1e 100644 --- a/src/components/HTMLEngineProvider/HTMLRenderers/VideoRenderer.tsx +++ b/src/components/HTMLEngineProvider/HTMLRenderers/VideoRenderer.tsx @@ -19,7 +19,7 @@ function VideoRenderer({tnode, key}: VideoRendererProps) { const htmlAttribs = tnode.attributes; const attrHref = htmlAttribs[CONST.ATTACHMENT_SOURCE_ATTRIBUTE] || htmlAttribs.src || htmlAttribs.href || ''; const sourceURL = tryResolveUrlFromApiRoot(attrHref); - const fileName = FileUtils.getFileName(`${sourceURL}`); + const fileName = FileUtils.getFileName(sourceURL); const thumbnailUrl = tryResolveUrlFromApiRoot(htmlAttribs[CONST.ATTACHMENT_THUMBNAIL_URL_ATTRIBUTE]); const width = Number(htmlAttribs[CONST.ATTACHMENT_THUMBNAIL_WIDTH_ATTRIBUTE]); const height = Number(htmlAttribs[CONST.ATTACHMENT_THUMBNAIL_HEIGHT_ATTRIBUTE]); diff --git a/src/components/Indicator.tsx b/src/components/Indicator.tsx index 4d352b6a6cde..4e7c51807091 100644 --- a/src/components/Indicator.tsx +++ b/src/components/Indicator.tsx @@ -42,7 +42,7 @@ type IndicatorProps = IndicatorOnyxProps; function Indicator({reimbursementAccount, policies, bankAccountList, fundList, userWallet, walletTerms, loginList}: IndicatorOnyxProps) { const theme = useTheme(); const styles = useThemeStyles(); - const [allConnectionSyncProgresses] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY_CONNECTION_SYNC_PROGRESS}`); + const [allConnectionSyncProgresses] = useOnyx(ONYXKEYS.COLLECTION.POLICY_CONNECTION_SYNC_PROGRESS); // If a policy was just deleted from Onyx, then Onyx will pass a null value to the props, and // those should be cleaned out before doing any error checking diff --git a/src/components/ProfilingToolMenu/index.android.tsx b/src/components/ProfilingToolMenu/index.android.tsx index 33c7354f199e..f1bd70d956d1 100644 --- a/src/components/ProfilingToolMenu/index.android.tsx +++ b/src/components/ProfilingToolMenu/index.android.tsx @@ -7,7 +7,7 @@ function ProfilingToolMenu() { return ( ); diff --git a/src/components/ReportActionItem/MoneyRequestView.tsx b/src/components/ReportActionItem/MoneyRequestView.tsx index 66c773ab9534..aae9a2f8c476 100644 --- a/src/components/ReportActionItem/MoneyRequestView.tsx +++ b/src/components/ReportActionItem/MoneyRequestView.tsx @@ -208,7 +208,7 @@ function MoneyRequestView({report, shouldShowAnimatedBackground, readonly = fals [getViolationsForField], ); - let amountDescription = `${translate('iou.amount')}`; + let amountDescription = translate('iou.amount'); const hasRoute = TransactionUtils.hasRoute(transactionBackup ?? transaction, isDistanceRequest); const rateID = TransactionUtils.getRateID(transaction) ?? '-1'; diff --git a/src/components/ReportActionItem/TripDetailsView.tsx b/src/components/ReportActionItem/TripDetailsView.tsx index d9576c79b030..b4c9f1182867 100644 --- a/src/components/ReportActionItem/TripDetailsView.tsx +++ b/src/components/ReportActionItem/TripDetailsView.tsx @@ -40,7 +40,7 @@ function ReservationView({reservation}: ReservationViewProps) { const formatAirportInfo = (reservationTimeDetails: ReservationTimeDetails) => { const longName = reservationTimeDetails?.longName ? `${reservationTimeDetails?.longName} ` : ''; - let shortName = reservationTimeDetails?.shortName ? `${reservationTimeDetails?.shortName}` : ''; + let shortName = reservationTimeDetails?.shortName ? reservationTimeDetails?.shortName : ''; shortName = longName && shortName ? `(${shortName})` : shortName; @@ -62,7 +62,7 @@ function ReservationView({reservation}: ReservationViewProps) { const formattedDate = getFormattedDate(); const bottomDescription = useMemo(() => { - const code = `${reservation.confirmations && reservation.confirmations?.length > 0 ? `${reservation.confirmations.at(0)?.value} • ` : ''}`; + const code = reservation.confirmations && reservation.confirmations?.length > 0 ? `${reservation.confirmations.at(0)?.value} • ` : ''; if (reservation.type === CONST.RESERVATION_TYPE.FLIGHT) { const longName = reservation.company?.longName ? `${reservation.company?.longName} • ` : ''; const shortName = reservation?.company?.shortName ? `${reservation?.company?.shortName} ` : ''; diff --git a/src/languages/en.ts b/src/languages/en.ts index 18dcbe35c9f6..ca477c504f64 100755 --- a/src/languages/en.ts +++ b/src/languages/en.ts @@ -872,7 +872,7 @@ const translations = { statusText.push(`${pendingReceipts} pending`); } return { - one: statusText.length > 0 ? `1 expense (${statusText.join(', ')})` : `1 expense`, + one: statusText.length > 0 ? `1 expense (${statusText.join(', ')})` : '1 expense', other: (count: number) => (statusText.length > 0 ? `${count} expenses (${statusText.join(', ')})` : `${count} expenses`), }; }, @@ -888,11 +888,11 @@ const translations = { settledElsewhere: 'Paid elsewhere', individual: 'Individual', business: 'Business', - settleExpensify: ({formattedAmount}: SettleExpensifyCardParams) => (formattedAmount ? `Pay ${formattedAmount} with Expensify` : `Pay with Expensify`), - settlePersonal: ({formattedAmount}: SettleExpensifyCardParams) => (formattedAmount ? `Pay ${formattedAmount} as an individual` : `Pay as an individual`), + settleExpensify: ({formattedAmount}: SettleExpensifyCardParams) => (formattedAmount ? `Pay ${formattedAmount} with Expensify` : 'Pay with Expensify'), + settlePersonal: ({formattedAmount}: SettleExpensifyCardParams) => (formattedAmount ? `Pay ${formattedAmount} as an individual` : 'Pay as an individual'), settlePayment: ({formattedAmount}: SettleExpensifyCardParams) => `Pay ${formattedAmount}`, - settleBusiness: ({formattedAmount}: SettleExpensifyCardParams) => (formattedAmount ? `Pay ${formattedAmount} as a business` : `Pay as a business`), - payElsewhere: ({formattedAmount}: SettleExpensifyCardParams) => (formattedAmount ? `Pay ${formattedAmount} elsewhere` : `Pay elsewhere`), + settleBusiness: ({formattedAmount}: SettleExpensifyCardParams) => (formattedAmount ? `Pay ${formattedAmount} as a business` : 'Pay as a business'), + payElsewhere: ({formattedAmount}: SettleExpensifyCardParams) => (formattedAmount ? `Pay ${formattedAmount} elsewhere` : 'Pay elsewhere'), nextStep: 'Next steps', finished: 'Finished', sendInvoice: ({amount}: RequestAmountParams) => `Send ${amount} invoice`, @@ -2563,7 +2563,7 @@ const translations = { 'The preferred exporter can be any workspace admin, but must also be a Domain Admin if you set different export accounts for individual company cards in Domain Settings.', exportPreferredExporterSubNote: 'Once set, the preferred exporter will see reports for export in their account.', noAccountsFound: 'No accounts found', - noAccountsFoundDescription: `Please add the account in Sage Intacct and sync the connection again.`, + noAccountsFoundDescription: 'Please add the account in Sage Intacct and sync the connection again.', autoSync: 'Auto-sync', autoSyncDescription: 'Expensify will automatically sync with Sage Intacct every day.', inviteEmployees: 'Invite employees', @@ -2843,7 +2843,7 @@ const translations = { mappingTitle: 'How should this custom list be displayed in Expensify?', }, errors: { - uniqueTransactionFieldIDError: `A custom list with this transaction field ID already exists.`, + uniqueTransactionFieldIDError: 'A custom list with this transaction field ID already exists.', }, }, }, @@ -3802,42 +3802,47 @@ const translations = { upgrade: { reportFields: { title: 'Report fields', - description: `Report fields let you specify header-level details, distinct from tags that pertain to expenses on individual line items. These details can encompass specific project names, business trip information, locations, and more.`, + description: + 'Report fields let you specify header-level details, distinct from tags that pertain to expenses on individual line items. These details can encompass specific project names, business trip information, locations, and more.', onlyAvailableOnPlan: 'Report fields are only available on the Control plan, starting at ', }, [CONST.POLICY.CONNECTIONS.NAME.NETSUITE]: { title: 'NetSuite', - description: `Enjoy automated syncing and reduce manual entries with the Expensify + NetSuite integration. Gain in-depth, realtime financial insights with native and custom segment support, including project and customer mapping.`, + description: + 'Enjoy automated syncing and reduce manual entries with the Expensify + NetSuite integration. Gain in-depth, realtime financial insights with native and custom segment support, including project and customer mapping.', onlyAvailableOnPlan: 'Our NetSuite integration is only available on the Control plan, starting at ', }, [CONST.POLICY.CONNECTIONS.NAME.SAGE_INTACCT]: { title: 'Sage Intacct', - description: `Enjoy automated syncing and reduce manual entries with the Expensify + Sage Intacct integration. Gain in-depth, real-time financial insights with user-defined dimensions, as well as expense coding by department, class, location, customer, and project (job).`, + description: + 'Enjoy automated syncing and reduce manual entries with the Expensify + Sage Intacct integration. Gain in-depth, real-time financial insights with user-defined dimensions, as well as expense coding by department, class, location, customer, and project (job).', onlyAvailableOnPlan: 'Our Sage Intacct integration is only available on the Control plan, starting at ', }, [CONST.UPGRADE_FEATURE_INTRO_MAPPING.approvals.id]: { title: 'Advanced Approvals', - description: `If you want to add more layers of approval to the mix – or just make sure the largest expenses get another set of eyes – we’ve got you covered. Advanced approvals help you put the right checks in place at every level so you keep your team’s spend under control.`, + description: + 'If you want to add more layers of approval to the mix – or just make sure the largest expenses get another set of eyes – we’ve got you covered. Advanced approvals help you put the right checks in place at every level so you keep your team’s spend under control.', onlyAvailableOnPlan: 'Advanced approvals are only available on the Control plan, which starts at ', }, glCodes: { title: 'GL codes', - description: `Add GL codes to your categories and tags for easy export of expenses to your accounting and payroll systems.`, + description: 'Add GL codes to your categories and tags for easy export of expenses to your accounting and payroll systems.', onlyAvailableOnPlan: 'GL codes are only available on the Control plan, starting at ', }, glAndPayrollCodes: { title: 'GL & Payroll codes', - description: `Add GL & Payroll codes to your categories for easy export of expenses to your accounting and payroll systems.`, + description: 'Add GL & Payroll codes to your categories for easy export of expenses to your accounting and payroll systems.', onlyAvailableOnPlan: 'GL & Payroll codes are only available on the Control plan, starting at ', }, taxCodes: { title: 'Tax codes', - description: `Add tax codes to your taxes for easy export of expenses to your accounting and payroll systems.`, + description: 'Add tax codes to your taxes for easy export of expenses to your accounting and payroll systems.', onlyAvailableOnPlan: 'Tax codes are only available on the Control plan, starting at ', }, companyCards: { title: 'Company cards', - description: `Company cards lets you import spend for existing company cards from all major card issuers. You can assign cards to employees, and automatically import transactions.`, + description: + 'Company cards lets you import spend for existing company cards from all major card issuers. You can assign cards to employees, and automatically import transactions.', onlyAvailableOnPlan: 'Company cards are only available on the Control plan, starting at ', }, rules: { @@ -4253,7 +4258,7 @@ const translations = { changePolicy: ({fromPolicy, toPolicy}: ChangePolicyParams) => `changed workspace from ${fromPolicy} to ${toPolicy}`, changeType: ({oldType, newType}: ChangeTypeParams) => `changed type from ${oldType} to ${newType}`, delegateSubmit: ({delegateUser, originalManager}: DelegateSubmitParams) => `sent this report to ${delegateUser} since ${originalManager} is on vacation`, - exportedToCSV: `exported this report to CSV`, + exportedToCSV: 'exported this report to CSV', exportedToIntegration: { automatic: ({label}: ExportedToIntegrationParams) => `exported this report to ${label}.`, manual: ({label}: ExportedToIntegrationParams) => `marked this report as manually exported to ${label}.`, @@ -4262,21 +4267,21 @@ const translations = { pending: ({label}: ExportedToIntegrationParams) => `started exporting this report to ${label}...`, }, integrationsMessage: ({errorMessage, label}: IntegrationSyncFailedParams) => `failed to export this report to ${label} ("${errorMessage}").`, - managerAttachReceipt: `added a receipt`, - managerDetachReceipt: `removed a receipt`, + managerAttachReceipt: 'added a receipt', + managerDetachReceipt: 'removed a receipt', markedReimbursed: ({amount, currency}: MarkedReimbursedParams) => `paid ${currency}${amount} elsewhere`, markedReimbursedFromIntegration: ({amount, currency}: MarkReimbursedFromIntegrationParams) => `paid ${currency}${amount} via integration`, - outdatedBankAccount: `couldn’t process the payment due to a problem with the payer’s bank account`, - reimbursementACHBounce: `couldn’t process the payment, as the payer doesn’t have sufficient funds`, - reimbursementACHCancelled: `canceled the payment`, - reimbursementAccountChanged: `couldn’t process the payment, as the payer changed bank accounts`, - reimbursementDelayed: `processed the payment but it’s delayed by 1-2 more business days`, - selectedForRandomAudit: `randomly selected for review`, - selectedForRandomAuditMarkdown: `[randomly selected](https://help.expensify.com/articles/expensify-classic/reports/Set-a-random-report-audit-schedule) for review`, + outdatedBankAccount: 'couldn’t process the payment due to a problem with the payer’s bank account', + reimbursementACHBounce: 'couldn’t process the payment, as the payer doesn’t have sufficient funds', + reimbursementACHCancelled: 'canceled the payment', + reimbursementAccountChanged: 'couldn’t process the payment, as the payer changed bank accounts', + reimbursementDelayed: 'processed the payment but it’s delayed by 1-2 more business days', + selectedForRandomAudit: 'randomly selected for review', + selectedForRandomAuditMarkdown: '[randomly selected](https://help.expensify.com/articles/expensify-classic/reports/Set-a-random-report-audit-schedule) for review', share: ({to}: ShareParams) => `invited member ${to}`, unshare: ({to}: UnshareParams) => `removed user ${to}`, stripePaid: ({amount, currency}: StripePaidParams) => `paid ${currency}${amount}`, - takeControl: `took control`, + takeControl: 'took control', unapproved: ({amount, currency}: UnapprovedParams) => `unapproved ${currency}${amount}`, integrationSyncFailed: ({label, errorMessage}: IntegrationSyncFailedParams) => `failed to sync with ${label} ("${errorMessage}")`, addEmployee: ({email, role}: AddEmployeeParams) => `added ${email} as ${role === 'user' ? 'member' : 'admin'}`, diff --git a/src/languages/es.ts b/src/languages/es.ts index 8e16c03a91d3..ddcdfafc667c 100644 --- a/src/languages/es.ts +++ b/src/languages/es.ts @@ -865,7 +865,7 @@ const translations = { statusText.push(`${pendingReceipts} pendiente`); } return { - one: statusText.length > 0 ? `1 gasto (${statusText.join(', ')})` : `1 gasto`, + one: statusText.length > 0 ? `1 gasto (${statusText.join(', ')})` : '1 gasto', other: (count: number) => (statusText.length > 0 ? `${count} gastos (${statusText.join(', ')})` : `${count} gastos`), }; }, @@ -881,11 +881,11 @@ const translations = { settledElsewhere: 'Pagado de otra forma', individual: 'Individual', business: 'Empresa', - settleExpensify: ({formattedAmount}: SettleExpensifyCardParams) => (formattedAmount ? `Pagar ${formattedAmount} con Expensify` : `Pagar con Expensify`), - settlePersonal: ({formattedAmount}: SettleExpensifyCardParams) => (formattedAmount ? `Pago ${formattedAmount} como individuo` : `Pago individual`), + settleExpensify: ({formattedAmount}: SettleExpensifyCardParams) => (formattedAmount ? `Pagar ${formattedAmount} con Expensify` : 'Pagar con Expensify'), + settlePersonal: ({formattedAmount}: SettleExpensifyCardParams) => (formattedAmount ? `Pago ${formattedAmount} como individuo` : 'Pago individual'), settlePayment: ({formattedAmount}: SettleExpensifyCardParams) => `Pagar ${formattedAmount}`, - settleBusiness: ({formattedAmount}: SettleExpensifyCardParams) => (formattedAmount ? `Pagar ${formattedAmount} como negocio` : `Pagar como empresa`), - payElsewhere: ({formattedAmount}: SettleExpensifyCardParams) => (formattedAmount ? `Pagar ${formattedAmount} de otra forma` : `Pagar de otra forma`), + settleBusiness: ({formattedAmount}: SettleExpensifyCardParams) => (formattedAmount ? `Pagar ${formattedAmount} como negocio` : 'Pagar como empresa'), + payElsewhere: ({formattedAmount}: SettleExpensifyCardParams) => (formattedAmount ? `Pagar ${formattedAmount} de otra forma` : 'Pagar de otra forma'), nextStep: 'Pasos siguientes', finished: 'Finalizado', sendInvoice: ({amount}: RequestAmountParams) => `Enviar factura de ${amount}`, @@ -931,7 +931,7 @@ const translations = { `${valueName === 'comerciante' || valueName === 'importe' || valueName === 'gasto' ? 'el' : 'la'} ${valueName} a ${newValueToDisplay} (previamente ${oldValueToDisplay})`, updatedTheDistanceMerchant: ({translatedChangedField, newMerchant, oldMerchant, newAmountToDisplay, oldAmountToDisplay}: UpdatedTheDistanceMerchantParams) => `cambió la ${translatedChangedField} a ${newMerchant} (previamente ${oldMerchant}), lo que cambió el importe a ${newAmountToDisplay} (previamente ${oldAmountToDisplay})`, - threadExpenseReportName: ({formattedAmount, comment}: ThreadRequestReportNameParams) => `${comment ? `${formattedAmount} para ${comment}` : `Gasto de ${formattedAmount}`}`, + threadExpenseReportName: ({formattedAmount, comment}: ThreadRequestReportNameParams) => (comment ? `${formattedAmount} para ${comment}` : `Gasto de ${formattedAmount}`), threadTrackReportName: ({formattedAmount, comment}: ThreadRequestReportNameParams) => `Seguimiento ${formattedAmount} ${comment ? `para ${comment}` : ''}`, threadPaySomeoneReportName: ({formattedAmount, comment}: ThreadSentMoneyReportNameParams) => `${formattedAmount} enviado${comment ? ` para ${comment}` : ''}`, tagSelection: 'Selecciona una etiqueta para organizar mejor tus gastos.', @@ -2878,7 +2878,7 @@ const translations = { mappingTitle: '¿Cómo debería mostrarse esta lista personalizada en Expensify?', }, errors: { - uniqueTransactionFieldIDError: `Ya existe una lista personalizada con este ID de campo de transacción.`, + uniqueTransactionFieldIDError: 'Ya existe una lista personalizada con este ID de campo de transacción.', }, }, }, @@ -2964,7 +2964,7 @@ const translations = { mastercard: 'Tarjetas comerciales Mastercard', visa: 'Tarjetas comerciales Visa', }, - yourCardProvider: `¿Quién es su proveedor de tarjetas?`, + yourCardProvider: '¿Quién es su proveedor de tarjetas?', enableFeed: { title: ({provider}: GoBackMessageParams) => `Habilita tu feed ${provider}`, heading: @@ -2983,11 +2983,11 @@ const translations = { companyLabel: 'Empresa ID', }, amex: { - title: `¿Cuál es el nombre del archivo de entrega de Amex?`, + title: '¿Cuál es el nombre del archivo de entrega de Amex?', fileNameLabel: 'Nombre del archivo de entrega', }, mastercard: { - title: `¿Cuál es el identificador de distribución de Mastercard?`, + title: '¿Cuál es el identificador de distribución de Mastercard?', distributionLabel: 'ID de distribución', }, }, @@ -3206,8 +3206,8 @@ const translations = { 'Cuando está habilitada, los titulares de tarjetas pueden eliminar transacciones con tarjeta. Las transacciones nuevas seguirán esta regla.', emptyAddedFeedTitle: 'Asignar tarjetas de empresa', emptyAddedFeedDescription: 'Comienza asignando tu primera tarjeta a un miembro.', - pendingFeedTitle: `Estamos revisando tu solicitud...`, - pendingFeedDescription: `Actualmente estamos revisando los detalles de tu feed. Una vez hecho esto, nos pondremos en contacto contigo a través de`, + pendingFeedTitle: 'Estamos revisando tu solicitud...', + pendingFeedDescription: 'Actualmente estamos revisando los detalles de tu feed. Una vez hecho esto, nos pondremos en contacto contigo a través de', giveItNameInstruction: 'Nombra la tarjeta para distingirla de las demás.', updating: 'Actualizando...', noAccountsFound: 'No se han encontrado cuentas', @@ -3845,47 +3845,53 @@ const translations = { upgrade: { reportFields: { title: 'Los campos', - description: `Los campos de informe permiten especificar detalles a nivel de cabecera, distintos de las etiquetas que pertenecen a los gastos en partidas individuales. Estos detalles pueden incluir nombres de proyectos específicos, información sobre viajes de negocios, ubicaciones, etc.`, + description: + 'Los campos de informe permiten especificar detalles a nivel de cabecera, distintos de las etiquetas que pertenecen a los gastos en partidas individuales. Estos detalles pueden incluir nombres de proyectos específicos, información sobre viajes de negocios, ubicaciones, etc.', onlyAvailableOnPlan: 'Los campos de informe sólo están disponibles en el plan Control, a partir de ', }, [CONST.POLICY.CONNECTIONS.NAME.NETSUITE]: { title: 'NetSuite', - description: `Disfruta de la sincronización automática y reduce las entradas manuales con la integración Expensify + NetSuite. Obtén información financiera en profundidad y en tiempo real con la compatibilidad nativa y personalizada con segmentos, incluida la asignación de proyectos y clientes.`, + description: + 'Disfruta de la sincronización automática y reduce las entradas manuales con la integración Expensify + NetSuite. Obtén información financiera en profundidad y en tiempo real con la compatibilidad nativa y personalizada con segmentos, incluida la asignación de proyectos y clientes.', onlyAvailableOnPlan: 'Nuestra integración NetSuite sólo está disponible en el plan Control, a partir de ', }, [CONST.POLICY.CONNECTIONS.NAME.SAGE_INTACCT]: { title: 'Sage Intacct', - description: `Disfruta de una sincronización automatizada y reduce las entradas manuales con la integración Expensify + Sage Intacct. Obtén información financiera en profundidad y en tiempo real con dimensiones definidas por el usuario, así como codificación de gastos por departamento, clase, ubicación, cliente y proyecto (trabajo).`, + description: + 'Disfruta de una sincronización automatizada y reduce las entradas manuales con la integración Expensify + Sage Intacct. Obtén información financiera en profundidad y en tiempo real con dimensiones definidas por el usuario, así como codificación de gastos por departamento, clase, ubicación, cliente y proyecto (trabajo).', onlyAvailableOnPlan: 'Nuestra integración Sage Intacct sólo está disponible en el plan Control, a partir de ', }, [CONST.UPGRADE_FEATURE_INTRO_MAPPING.approvals.id]: { title: 'Aprobaciones anticipadas', - description: `Si quieres añadir más niveles de aprobación, o simplemente asegurarte de que los gastos más importantes reciben otro vistazo, no hay problema. Las aprobaciones avanzadas ayudan a realizar las comprobaciones adecuadas a cada nivel para mantener los gastos de tu equipo bajo control.`, + description: + 'Si quieres añadir más niveles de aprobación, o simplemente asegurarte de que los gastos más importantes reciben otro vistazo, no hay problema. Las aprobaciones avanzadas ayudan a realizar las comprobaciones adecuadas a cada nivel para mantener los gastos de tu equipo bajo control.', onlyAvailableOnPlan: 'Las aprobaciones avanzadas sólo están disponibles en el plan Control, con precios desde ', }, glCodes: { title: 'Códigos de libro mayor', - description: `Añada códigos de libro mayor a sus categorías para exportar fácilmente los gastos a sus sistemas de contabilidad y nómina.`, + description: 'Añada códigos de libro mayor a sus categorías para exportar fácilmente los gastos a sus sistemas de contabilidad y nómina.', onlyAvailableOnPlan: 'Los códigos de libro mayor solo están disponibles en el plan Control, a partir de ', }, glAndPayrollCodes: { title: 'Códigos de libro mayor y nómina', - description: `Añada códigos de libro mayor y nómina a sus categorías para exportar fácilmente los gastos a sus sistemas de contabilidad y nómina.`, + description: 'Añada códigos de libro mayor y nómina a sus categorías para exportar fácilmente los gastos a sus sistemas de contabilidad y nómina.', onlyAvailableOnPlan: 'Los códigos de libro mayor y nómina solo están disponibles en el plan Control, a partir de ', }, taxCodes: { title: 'Código de impuesto', - description: `Añada código de impuesto mayor a sus categorías para exportar fácilmente los gastos a sus sistemas de contabilidad y nómina.`, + description: 'Añada código de impuesto mayor a sus categorías para exportar fácilmente los gastos a sus sistemas de contabilidad y nómina.', onlyAvailableOnPlan: 'Los código de impuesto mayor solo están disponibles en el plan Control, a partir de ', }, companyCards: { title: 'Tarjetas de empresa', - description: `Las tarjetas de empresa le permiten importar los gastos de las tarjetas de empresa existentes de todos los principales emisores de tarjetas. Puede asignar tarjetas a empleados e importar transacciones automáticamente.`, + description: + 'Las tarjetas de empresa le permiten importar los gastos de las tarjetas de empresa existentes de todos los principales emisores de tarjetas. Puede asignar tarjetas a empleados e importar transacciones automáticamente.', onlyAvailableOnPlan: 'Las tarjetas de empresa solo están disponibles en el plan Control, a partir de ', }, rules: { title: 'Reglas', - description: `Las reglas se ejecutan en segundo plano y mantienen tus gastos bajo control para que no tengas que preocuparte por los detalles pequeños.\n\nExige detalles de los gastos, como recibos y descripciones, establece límites y valores predeterminados, y automatiza las aprobaciones y los pagos, todo en un mismo lugar.`, + description: + 'Las reglas se ejecutan en segundo plano y mantienen tus gastos bajo control para que no tengas que preocuparte por los detalles pequeños.\n\nExige detalles de los gastos, como recibos y descripciones, establece límites y valores predeterminados, y automatiza las aprobaciones y los pagos, todo en un mismo lugar.', onlyAvailableOnPlan: 'Las reglas están disponibles solo en el plan Control, que comienza en ', }, note: { @@ -4298,7 +4304,7 @@ const translations = { changePolicy: ({fromPolicy, toPolicy}: ChangePolicyParams) => `cambió el espacio de trabajo de ${fromPolicy} a ${toPolicy}`, changeType: ({oldType, newType}: ChangeTypeParams) => `cambió type de ${oldType} a ${newType}`, delegateSubmit: ({delegateUser, originalManager}: DelegateSubmitParams) => `envié este informe a ${delegateUser} ya que ${originalManager} está de vacaciones`, - exportedToCSV: `exportó este informe a CSV`, + exportedToCSV: 'exportó este informe a CSV', exportedToIntegration: { automatic: ({label}: ExportedToIntegrationParams) => `exportó este informe a ${label}.`, manual: ({label}: ExportedToIntegrationParams) => `marcó este informe como exportado manualmente a ${label}.`, @@ -4307,21 +4313,21 @@ const translations = { pending: ({label}: ExportedToIntegrationParams) => `comenzó a exportar este informe a ${label}...`, }, integrationsMessage: ({label, errorMessage}: IntegrationSyncFailedParams) => `no se pudo exportar este informe a ${label} ("${errorMessage}").`, - managerAttachReceipt: `agregó un recibo`, - managerDetachReceipt: `quitó un recibo`, + managerAttachReceipt: 'agregó un recibo', + managerDetachReceipt: 'quitó un recibo', markedReimbursed: ({amount, currency}: MarkedReimbursedParams) => `pagó ${currency}${amount} en otro lugar`, markedReimbursedFromIntegration: ({amount, currency}: MarkReimbursedFromIntegrationParams) => `pagó ${currency}${amount} mediante integración`, - outdatedBankAccount: `no se pudo procesar el pago debido a un problema con la cuenta bancaria del pagador`, - reimbursementACHBounce: `no se pudo procesar el pago porque el pagador no tiene fondos suficientes`, - reimbursementACHCancelled: `canceled the payment`, - reimbursementAccountChanged: `no se pudo procesar el pago porque el pagador cambió de cuenta bancaria`, - reimbursementDelayed: `procesó el pago pero se retrasó entre 1 y 2 días hábiles más`, - selectedForRandomAudit: `seleccionado al azar para revisión`, - selectedForRandomAuditMarkdown: `[seleccionado al azar](https://help.expensify.com/articles/expensify-classic/reports/Set-a-random-report-audit-schedule) para revisión`, + outdatedBankAccount: 'no se pudo procesar el pago debido a un problema con la cuenta bancaria del pagador', + reimbursementACHBounce: 'no se pudo procesar el pago porque el pagador no tiene fondos suficientes', + reimbursementACHCancelled: 'canceled the payment', + reimbursementAccountChanged: 'no se pudo procesar el pago porque el pagador cambió de cuenta bancaria', + reimbursementDelayed: 'procesó el pago pero se retrasó entre 1 y 2 días hábiles más', + selectedForRandomAudit: 'seleccionado al azar para revisión', + selectedForRandomAuditMarkdown: '[seleccionado al azar](https://help.expensify.com/articles/expensify-classic/reports/Set-a-random-report-audit-schedule) para revisión', share: ({to}: ShareParams) => `miembro invitado ${to}`, unshare: ({to}: UnshareParams) => `usuario eliminado ${to}`, stripePaid: ({amount, currency}: StripePaidParams) => `pagado ${currency}${amount}`, - takeControl: `tomó el control`, + takeControl: 'tomó el control', unapproved: ({amount, currency}: UnapprovedParams) => `no aprobado ${currency}${amount}`, integrationSyncFailed: ({label, errorMessage}: IntegrationSyncFailedParams) => `no se pudo sincronizar con ${label} ("${errorMessage}")`, addEmployee: ({email, role}: AddEmployeeParams) => `agregó a ${email} como ${role === 'user' ? 'miembro' : 'administrador'}`, @@ -5146,7 +5152,7 @@ const translations = { authenticatePaymentCard: 'Autenticar tarjeta de pago', mobileReducedFunctionalityMessage: 'No puedes hacer cambios en tu suscripción en la aplicación móvil.', badge: { - freeTrial: ({numOfDays}: BadgeFreeTrialParams) => `Prueba gratuita: ${numOfDays === 1 ? `queda 1 día` : `quedan ${numOfDays} días`}`, + freeTrial: ({numOfDays}: BadgeFreeTrialParams) => `Prueba gratuita: ${numOfDays === 1 ? 'queda 1 día' : `quedan ${numOfDays} días`}`, }, billingBanner: { policyOwnerAmountOwed: { @@ -5208,7 +5214,7 @@ const translations = { subtitleEnd: 'para que tu equipo pueda empezar a enviar gastos.', }, trialStarted: { - title: ({numOfDays}: TrialStartedTitleParams) => `Prueba gratuita: ¡${numOfDays === 1 ? `queda 1 día` : `quedan ${numOfDays} días`}!`, + title: ({numOfDays}: TrialStartedTitleParams) => `Prueba gratuita: ¡${numOfDays === 1 ? 'queda 1 día' : `quedan ${numOfDays} días`}!`, subtitle: 'Añade una tarjeta de pago para seguir utilizando tus funciones favoritas.', }, trialEnded: { diff --git a/src/libs/CardUtils.ts b/src/libs/CardUtils.ts index 07ed431a0bc0..6e93375eae1a 100644 --- a/src/libs/CardUtils.ts +++ b/src/libs/CardUtils.ts @@ -70,7 +70,7 @@ function getCardDescription(cardID?: number) { return ''; } const cardDescriptor = card.state === CONST.EXPENSIFY_CARD.STATE.NOT_ACTIVATED ? Localize.translateLocal('cardTransactions.notActivated') : card.lastFourPAN; - return cardDescriptor ? `${card.bank} - ${cardDescriptor}` : `${card.bank}`; + return cardDescriptor ? `${card.bank} - ${cardDescriptor}` : card.bank; } /** diff --git a/src/libs/CategoryUtils.ts b/src/libs/CategoryUtils.ts index 479ae557eab6..8c7cc9335174 100644 --- a/src/libs/CategoryUtils.ts +++ b/src/libs/CategoryUtils.ts @@ -21,7 +21,7 @@ function formatDefaultTaxRateText(translate: LocaleContextProps['translate'], ta } else if (taxID === foreignTaxDefault) { suffix = translate('workspace.taxes.foreignDefault'); } - return `${taxRateText}${suffix ? ` ${CONST.DOT_SEPARATOR} ${suffix}` : ``}`; + return `${taxRateText}${suffix ? ` ${CONST.DOT_SEPARATOR} ${suffix}` : ''}`; } function formatRequireReceiptsOverText(translate: LocaleContextProps['translate'], policy: Policy, categoryMaxExpenseAmountNoReceipt?: number | null) { @@ -29,16 +29,16 @@ function formatRequireReceiptsOverText(translate: LocaleContextProps['translate' const isNeverSelected = categoryMaxExpenseAmountNoReceipt === CONST.DISABLED_MAX_EXPENSE_VALUE; if (isAlwaysSelected) { - return translate(`workspace.rules.categoryRules.requireReceiptsOverList.always`); + return translate('workspace.rules.categoryRules.requireReceiptsOverList.always'); } if (isNeverSelected) { - return translate(`workspace.rules.categoryRules.requireReceiptsOverList.never`); + return translate('workspace.rules.categoryRules.requireReceiptsOverList.never'); } const maxExpenseAmountToDisplay = policy?.maxExpenseAmount === CONST.DISABLED_MAX_EXPENSE_VALUE ? 0 : policy?.maxExpenseAmount; - return translate(`workspace.rules.categoryRules.requireReceiptsOverList.default`, { + return translate('workspace.rules.categoryRules.requireReceiptsOverList.default', { defaultAmount: CurrencyUtils.convertToShortDisplayString(maxExpenseAmountToDisplay, policy?.outputCurrency ?? CONST.CURRENCY.USD), }); } diff --git a/src/libs/E2E/actions/waitForKeyboard.ts b/src/libs/E2E/actions/waitForKeyboard.ts index df7a9aae9651..925d47c0e331 100644 --- a/src/libs/E2E/actions/waitForKeyboard.ts +++ b/src/libs/E2E/actions/waitForKeyboard.ts @@ -6,7 +6,7 @@ export default function waitForKeyboard(): Promise { if (Keyboard.isVisible()) { resolve(); } else { - console.debug(`[E2E] Waiting for keyboard to appear…`); + console.debug('[E2E] Waiting for keyboard to appear…'); setTimeout(checkKeyboard, 1000); } } diff --git a/src/libs/E2E/tests/chatOpeningTest.e2e.ts b/src/libs/E2E/tests/chatOpeningTest.e2e.ts index 8e2a0a81da7d..0da44406aff7 100644 --- a/src/libs/E2E/tests/chatOpeningTest.e2e.ts +++ b/src/libs/E2E/tests/chatOpeningTest.e2e.ts @@ -30,14 +30,14 @@ const test = (config: NativeConfig) => { const [chatTTIPromise, chatTTIResolve] = getPromiseWithResolve(); Promise.all([renderChatPromise, chatTTIPromise]).then(() => { - console.debug(`[E2E] Submitting!`); + console.debug('[E2E] Submitting!'); E2EClient.submitTestDone(); }); Performance.subscribeToMeasurements((entry) => { if (entry.name === CONST.TIMING.SIDEBAR_LOADED) { - console.debug(`[E2E] Sidebar loaded, navigating to report…`); + console.debug('[E2E] Sidebar loaded, navigating to report…'); Performance.markStart(CONST.TIMING.OPEN_REPORT); Navigation.navigate(ROUTES.REPORT_WITH_ID.getRoute(reportID)); return; diff --git a/src/libs/E2E/tests/openChatFinderPageTest.e2e.ts b/src/libs/E2E/tests/openChatFinderPageTest.e2e.ts index 2c2f2eda4efe..685fb15dec6e 100644 --- a/src/libs/E2E/tests/openChatFinderPageTest.e2e.ts +++ b/src/libs/E2E/tests/openChatFinderPageTest.e2e.ts @@ -26,14 +26,14 @@ const test = () => { const [loadSearchOptionsPromise, loadSearchOptionsResolve] = getPromiseWithResolve(); Promise.all([openSearchPagePromise, loadSearchOptionsPromise]).then(() => { - console.debug(`[E2E] Submitting!`); + console.debug('[E2E] Submitting!'); E2EClient.submitTestDone(); }); Performance.subscribeToMeasurements((entry) => { if (entry.name === CONST.TIMING.SIDEBAR_LOADED) { - console.debug(`[E2E] Sidebar loaded, navigating to chat finder route…`); + console.debug('[E2E] Sidebar loaded, navigating to chat finder route…'); Performance.markStart(CONST.TIMING.CHAT_FINDER_RENDER); Navigation.navigate(ROUTES.CHAT_FINDER); return; @@ -73,7 +73,7 @@ const test = () => { }); } - console.debug(`[E2E] Submitting!`); + console.debug('[E2E] Submitting!'); }); }); }; diff --git a/src/libs/E2E/tests/reportTypingTest.e2e.ts b/src/libs/E2E/tests/reportTypingTest.e2e.ts index efe1c380dfd0..86d3cc937dbc 100644 --- a/src/libs/E2E/tests/reportTypingTest.e2e.ts +++ b/src/libs/E2E/tests/reportTypingTest.e2e.ts @@ -36,7 +36,7 @@ const test = (config: NativeConfig) => { const [messageSentPromise, messageSentResolve] = getPromiseWithResolve(); Promise.all([renderTimesPromise, messageSentPromise]).then(() => { - console.debug(`[E2E] Submitting!`); + console.debug('[E2E] Submitting!'); E2EClient.submitTestDone(); }); @@ -56,13 +56,13 @@ const test = (config: NativeConfig) => { return; } - console.debug(`[E2E] Sidebar loaded, navigating to a report…`); + console.debug('[E2E] Sidebar loaded, navigating to a report…'); // Crowded Policy (Do Not Delete) Report, has a input bar available: Navigation.navigate(ROUTES.REPORT_WITH_ID.getRoute(reportID)); // Wait until keyboard is visible (so we are focused on the input): waitForKeyboard().then(() => { - console.debug(`[E2E] Keyboard visible, typing…`); + console.debug('[E2E] Keyboard visible, typing…'); E2EClient.sendNativeCommand(NativeCommands.makeBackspaceCommand()) .then(() => { resetRerenderCount(); diff --git a/src/libs/E2E/utils/NetworkInterceptor.ts b/src/libs/E2E/utils/NetworkInterceptor.ts index 511c8014f0cd..768f44af1b2d 100644 --- a/src/libs/E2E/utils/NetworkInterceptor.ts +++ b/src/libs/E2E/utils/NetworkInterceptor.ts @@ -2,7 +2,7 @@ import {DeviceEventEmitter} from 'react-native'; import type {NetworkCacheEntry, NetworkCacheMap} from '@libs/E2E/types'; -const LOG_TAG = `[E2E][NetworkInterceptor]`; +const LOG_TAG = '[E2E][NetworkInterceptor]'; // Requests with these headers will be ignored: const IGNORE_REQUEST_HEADERS = ['X-E2E-Server-Request']; diff --git a/src/libs/ModifiedExpenseMessage.ts b/src/libs/ModifiedExpenseMessage.ts index 20c5f6d7dce9..03f2d44f7dae 100644 --- a/src/libs/ModifiedExpenseMessage.ts +++ b/src/libs/ModifiedExpenseMessage.ts @@ -309,7 +309,7 @@ function getForReportAction(reportID: string | undefined, reportAction: OnyxEntr if (message === '') { return Localize.translateLocal('iou.changedTheExpense'); } - return `${message.substring(1, message.length)}`; + return message.substring(1, message.length); } export default { diff --git a/src/libs/NetworkConnection.ts b/src/libs/NetworkConnection.ts index cb9faae31ddd..38c59c495aa5 100644 --- a/src/libs/NetworkConnection.ts +++ b/src/libs/NetworkConnection.ts @@ -77,7 +77,7 @@ Onyx.connect({ shouldForceOffline = currentShouldForceOffline; if (shouldForceOffline) { setOfflineStatus(true, 'shouldForceOffline was detected in the Onyx data'); - Log.info(`[NetworkStatus] Setting "offlineStatus" to "true" because user is under force offline`); + Log.info('[NetworkStatus] Setting "offlineStatus" to "true" because user is under force offline'); } else { // If we are no longer forcing offline fetch the NetInfo to set isOffline appropriately NetInfo.fetch().then((state) => { @@ -176,7 +176,7 @@ function subscribeToNetInfo(): () => void { return; } recheckNetworkConnection(); - Log.info(`[NetworkStatus] Rechecking the network connection with "isOffline" set to "true" to double-check internet reachability.`); + Log.info('[NetworkStatus] Rechecking the network connection with "isOffline" set to "true" to double-check internet reachability.'); }, CONST.NETWORK.RECHECK_INTERVAL_MS); return () => { diff --git a/src/libs/NextStepUtils.ts b/src/libs/NextStepUtils.ts index 4016e2418a50..be5bb9f769de 100644 --- a/src/libs/NextStepUtils.ts +++ b/src/libs/NextStepUtils.ts @@ -109,7 +109,7 @@ function buildNextStep(report: OnyxEntry, predictedNextStatus: ValueOf, predictedNextStatus: ValueOf, predictedNextStatus: ValueOf { // Register this device as a named user in AirshipAPI. // Regardless of the user's opt-in status, we still want to receive silent push notifications. - Log.info(`[PushNotification] Subscribing to notifications`); + Log.info('[PushNotification] Subscribing to notifications'); Airship.contact.identify(notificationID.toString()); // Refresh notification opt-in status NVP for the new user. diff --git a/src/libs/Notification/PushNotification/parsePushNotificationPayload.ts b/src/libs/Notification/PushNotification/parsePushNotificationPayload.ts index 8ef20dd9f537..3586ed14bee1 100644 --- a/src/libs/Notification/PushNotification/parsePushNotificationPayload.ts +++ b/src/libs/Notification/PushNotification/parsePushNotificationPayload.ts @@ -11,7 +11,7 @@ export default function parsePushNotificationPayload(payload: JsonValue | undefi try { data = JSON.parse(payload) as JsonObject; } catch { - Log.hmmm(`[PushNotification] Failed to parse the payload`, payload); + Log.hmmm('[PushNotification] Failed to parse the payload', payload); data = undefined; } } diff --git a/src/libs/OptionsListUtils.ts b/src/libs/OptionsListUtils.ts index 90320b4a9ea1..66026e53dafc 100644 --- a/src/libs/OptionsListUtils.ts +++ b/src/libs/OptionsListUtils.ts @@ -642,7 +642,7 @@ function getLastMessageTextForReport(report: OnyxEntry, lastActorDetails break; } default: { - lastMessageTextFromReport = Localize.translate(preferredLocale, `reportArchiveReasons.default`); + lastMessageTextFromReport = Localize.translate(preferredLocale, 'reportArchiveReasons.default'); } } } else if (ReportActionUtils.isMoneyRequestAction(lastReportAction)) { diff --git a/src/libs/PolicyUtils.ts b/src/libs/PolicyUtils.ts index f7c75d73f2c3..eb67198a46d9 100644 --- a/src/libs/PolicyUtils.ts +++ b/src/libs/PolicyUtils.ts @@ -829,7 +829,7 @@ function getCustomersOrJobsLabelNetSuite(policy: Policy | undefined, translate: importFields.push(translate('workspace.netsuite.import.customersOrJobs.jobs')); } - const importedValueLabel = translate(`workspace.netsuite.import.customersOrJobs.label`, { + const importedValueLabel = translate('workspace.netsuite.import.customersOrJobs.label', { importFields, importType: translate(`workspace.accounting.importTypes.${importedValue}`).toLowerCase(), }); @@ -850,7 +850,7 @@ function getNetSuiteImportCustomFieldLabel( const importedTypes = Array.from(mappingSet) .sort((a, b) => b.localeCompare(a)) .map((mapping) => translate(`workspace.netsuite.import.importTypes.${mapping}.label`).toLowerCase()); - return translate(`workspace.netsuite.import.importCustomFields.label`, {importedTypes}); + return translate('workspace.netsuite.import.importCustomFields.label', {importedTypes}); } function isNetSuiteCustomSegmentRecord(customField: NetSuiteCustomList | NetSuiteCustomSegment): boolean { diff --git a/src/libs/ReportUtils.ts b/src/libs/ReportUtils.ts index 2885593b52ae..45672b1147d3 100644 --- a/src/libs/ReportUtils.ts +++ b/src/libs/ReportUtils.ts @@ -2790,7 +2790,7 @@ function isReportFieldOfTypeTitle(reportField: OnyxEntry): bo * Check if Report has any held expenses */ function isHoldCreator(transaction: OnyxEntry, reportID: string): boolean { - const holdReportAction = ReportActionsUtils.getReportAction(reportID, `${transaction?.comment?.hold ?? ''}`); + const holdReportAction = ReportActionsUtils.getReportAction(reportID, transaction?.comment?.hold ?? ''); return isActionCreator(holdReportAction); } @@ -4596,7 +4596,7 @@ function getIOUReportActionMessage(iouReportID: string, type: string, total: num paymentMethodMessage = ' with Expensify'; break; default: - paymentMethodMessage = ` elsewhere`; + paymentMethodMessage = ' elsewhere'; break; } diff --git a/src/libs/RequestThrottle.ts b/src/libs/RequestThrottle.ts index 3bbc82ff5b45..2a04244a84d6 100644 --- a/src/libs/RequestThrottle.ts +++ b/src/libs/RequestThrottle.ts @@ -9,7 +9,7 @@ let requestRetryCount = 0; function clear() { requestWaitTime = 0; requestRetryCount = 0; - Log.info(`[RequestThrottle] in clear()`); + Log.info('[RequestThrottle] in clear()'); } function getRequestWaitTime() { diff --git a/src/libs/SearchUtils.ts b/src/libs/SearchUtils.ts index 47cee2c7c2b4..a7c7fe07a908 100644 --- a/src/libs/SearchUtils.ts +++ b/src/libs/SearchUtils.ts @@ -614,7 +614,7 @@ function buildQueryStringFromFilterFormValues(filterValues: Partial = 0) { * state because of race conditions between reconnectApp and other pusher updates being applied at the same time. */ function finalReconnectAppAfterActivatingReliableUpdates(): Promise { - console.debug(`[OnyxUpdates] Executing last reconnect app with promise`); + console.debug('[OnyxUpdates] Executing last reconnect app with promise'); return getPolicyParamsForOpenOrReconnect().then((policyParams) => { const params: ReconnectAppParams = {...policyParams}; diff --git a/src/libs/actions/BankAccounts.ts b/src/libs/actions/BankAccounts.ts index 3007bd2cb88c..2a893d10c4fd 100644 --- a/src/libs/actions/BankAccounts.ts +++ b/src/libs/actions/BankAccounts.ts @@ -257,7 +257,7 @@ function deletePaymentBankAccount(bankAccountID: number) { optimisticData: [ { onyxMethod: Onyx.METHOD.MERGE, - key: `${ONYXKEYS.BANK_ACCOUNT_LIST}`, + key: ONYXKEYS.BANK_ACCOUNT_LIST, value: {[bankAccountID]: {pendingAction: CONST.RED_BRICK_ROAD_PENDING_ACTION.DELETE}}, }, ], @@ -267,7 +267,7 @@ function deletePaymentBankAccount(bankAccountID: number) { successData: [ { onyxMethod: Onyx.METHOD.MERGE, - key: `${ONYXKEYS.BANK_ACCOUNT_LIST}`, + key: ONYXKEYS.BANK_ACCOUNT_LIST, value: {[bankAccountID]: null}, }, ], diff --git a/src/libs/actions/IOU.ts b/src/libs/actions/IOU.ts index 9c03dd2af8fc..9fd64f433f78 100644 --- a/src/libs/actions/IOU.ts +++ b/src/libs/actions/IOU.ts @@ -6550,13 +6550,13 @@ function getReportFromHoldRequestsOnyxData( // update held reports with new parentReportActionID { onyxMethod: Onyx.METHOD.MERGE_COLLECTION, - key: `${ONYXKEYS.COLLECTION.REPORT}`, + key: ONYXKEYS.COLLECTION.REPORT, value: updateHeldReports, }, // update transactions with new iouReportID { onyxMethod: Onyx.METHOD.MERGE_COLLECTION, - key: `${ONYXKEYS.COLLECTION.TRANSACTION}`, + key: ONYXKEYS.COLLECTION.TRANSACTION, value: updateHeldTransactions, }, ]; @@ -6601,7 +6601,7 @@ function getReportFromHoldRequestsOnyxData( // add hold transactions back to old iou report { onyxMethod: Onyx.METHOD.MERGE_COLLECTION, - key: `${ONYXKEYS.COLLECTION.TRANSACTION}`, + key: ONYXKEYS.COLLECTION.TRANSACTION, value: bringHeldTransactionsBack, }, ]; @@ -8105,7 +8105,7 @@ function navigateToStartStepIfScanFileCannotBeRead( /** Save the preferred payment method for a policy */ function savePreferredPaymentMethod(policyID: string, paymentMethod: PaymentMethodType) { - Onyx.merge(`${ONYXKEYS.NVP_LAST_PAYMENT_METHOD}`, {[policyID]: paymentMethod}); + Onyx.merge(ONYXKEYS.NVP_LAST_PAYMENT_METHOD, {[policyID]: paymentMethod}); } /** Get report policy id of IOU request */ diff --git a/src/libs/actions/PaymentMethods.ts b/src/libs/actions/PaymentMethods.ts index 5276f56d59bd..fdd46aa11959 100644 --- a/src/libs/actions/PaymentMethods.ts +++ b/src/libs/actions/PaymentMethods.ts @@ -467,7 +467,7 @@ function deletePaymentCard(fundID: number) { const optimisticData: OnyxUpdate[] = [ { onyxMethod: Onyx.METHOD.MERGE, - key: `${ONYXKEYS.FUND_LIST}`, + key: ONYXKEYS.FUND_LIST, value: {[fundID]: {pendingAction: CONST.RED_BRICK_ROAD_PENDING_ACTION.DELETE}}, }, ]; diff --git a/src/libs/actions/Policy/Member.ts b/src/libs/actions/Policy/Member.ts index d5b2adc54de3..2d1031ab535c 100644 --- a/src/libs/actions/Policy/Member.ts +++ b/src/libs/actions/Policy/Member.ts @@ -754,7 +754,7 @@ function clearAddMemberError(policyID: string, accountID: number) { [email]: null, }, }); - Onyx.merge(`${ONYXKEYS.PERSONAL_DETAILS_LIST}`, { + Onyx.merge(ONYXKEYS.PERSONAL_DETAILS_LIST, { [accountID]: null, }); } diff --git a/src/libs/actions/Policy/Policy.ts b/src/libs/actions/Policy/Policy.ts index f5871ed94b58..874459e34517 100644 --- a/src/libs/actions/Policy/Policy.ts +++ b/src/libs/actions/Policy/Policy.ts @@ -2428,12 +2428,12 @@ function createWorkspaceFromIOUPayment(iouReport: OnyxEntry): WorkspaceF optimisticData.push({ onyxMethod: Onyx.METHOD.MERGE_COLLECTION, - key: `${ONYXKEYS.COLLECTION.TRANSACTION}`, + key: ONYXKEYS.COLLECTION.TRANSACTION, value: transactionsOptimisticData, }); failureData.push({ onyxMethod: Onyx.METHOD.MERGE_COLLECTION, - key: `${ONYXKEYS.COLLECTION.TRANSACTION}`, + key: ONYXKEYS.COLLECTION.TRANSACTION, value: transactionFailureData, }); @@ -2522,7 +2522,7 @@ function createWorkspaceFromIOUPayment(iouReport: OnyxEntry): WorkspaceF // the reimbursement account to be immediately in the setup state for a new bank account: optimisticData.push({ onyxMethod: Onyx.METHOD.MERGE, - key: `${ONYXKEYS.REIMBURSEMENT_ACCOUNT}`, + key: ONYXKEYS.REIMBURSEMENT_ACCOUNT, value: { isLoading: false, achData: { @@ -2534,7 +2534,7 @@ function createWorkspaceFromIOUPayment(iouReport: OnyxEntry): WorkspaceF }); failureData.push({ onyxMethod: Onyx.METHOD.SET, - key: `${ONYXKEYS.REIMBURSEMENT_ACCOUNT}`, + key: ONYXKEYS.REIMBURSEMENT_ACCOUNT, value: CONST.REIMBURSEMENT_ACCOUNT.DEFAULT_DATA, }); @@ -2610,7 +2610,7 @@ function enablePolicyConnections(policyID: string, enabled: boolean) { /** Save the preferred export method for a policy */ function savePreferredExportMethod(policyID: string, exportMethod: ReportExportType) { - Onyx.merge(`${ONYXKEYS.LAST_EXPORT_METHOD}`, {[policyID]: exportMethod}); + Onyx.merge(ONYXKEYS.LAST_EXPORT_METHOD, {[policyID]: exportMethod}); } function enableExpensifyCard(policyID: string, enabled: boolean) { diff --git a/src/libs/actions/Search.ts b/src/libs/actions/Search.ts index 0f89232dc3cf..3589912439da 100644 --- a/src/libs/actions/Search.ts +++ b/src/libs/actions/Search.ts @@ -58,7 +58,7 @@ function saveSearch({queryJSON, newName}: {queryJSON: SearchQueryJSON; newName?: const optimisticData: OnyxUpdate[] = [ { onyxMethod: Onyx.METHOD.MERGE, - key: `${ONYXKEYS.SAVED_SEARCHES}`, + key: ONYXKEYS.SAVED_SEARCHES, value: { [queryJSON.hash]: { pendingAction: CONST.RED_BRICK_ROAD_PENDING_ACTION.ADD, @@ -72,7 +72,7 @@ function saveSearch({queryJSON, newName}: {queryJSON: SearchQueryJSON; newName?: const failureData: OnyxUpdate[] = [ { onyxMethod: Onyx.METHOD.MERGE, - key: `${ONYXKEYS.SAVED_SEARCHES}`, + key: ONYXKEYS.SAVED_SEARCHES, value: { [queryJSON.hash]: null, }, @@ -82,7 +82,7 @@ function saveSearch({queryJSON, newName}: {queryJSON: SearchQueryJSON; newName?: const successData: OnyxUpdate[] = [ { onyxMethod: Onyx.METHOD.MERGE, - key: `${ONYXKEYS.SAVED_SEARCHES}`, + key: ONYXKEYS.SAVED_SEARCHES, value: { [queryJSON.hash]: { pendingAction: null, @@ -97,7 +97,7 @@ function deleteSavedSearch(hash: number) { const optimisticData: OnyxUpdate[] = [ { onyxMethod: Onyx.METHOD.MERGE, - key: `${ONYXKEYS.SAVED_SEARCHES}`, + key: ONYXKEYS.SAVED_SEARCHES, value: { [hash]: { pendingAction: CONST.RED_BRICK_ROAD_PENDING_ACTION.DELETE, @@ -108,7 +108,7 @@ function deleteSavedSearch(hash: number) { const successData: OnyxUpdate[] = [ { onyxMethod: Onyx.METHOD.MERGE, - key: `${ONYXKEYS.SAVED_SEARCHES}`, + key: ONYXKEYS.SAVED_SEARCHES, value: { [hash]: null, }, @@ -117,7 +117,7 @@ function deleteSavedSearch(hash: number) { const failureData: OnyxUpdate[] = [ { onyxMethod: Onyx.METHOD.MERGE, - key: `${ONYXKEYS.SAVED_SEARCHES}`, + key: ONYXKEYS.SAVED_SEARCHES, value: { [hash]: { pendingAction: null, diff --git a/src/libs/actions/Task.ts b/src/libs/actions/Task.ts index 2f9ec060c1e8..351b5b63ce4e 100644 --- a/src/libs/actions/Task.ts +++ b/src/libs/actions/Task.ts @@ -329,7 +329,7 @@ function getOutstandingChildTask(taskReport: OnyxEntry) { */ function completeTask(taskReport: OnyxEntry) { const taskReportID = taskReport?.reportID ?? '-1'; - const message = `marked as complete`; + const message = 'marked as complete'; const completedTaskReportAction = ReportUtils.buildOptimisticTaskReportAction(taskReportID, CONST.REPORT.ACTIONS.TYPE.TASK_COMPLETED, message); const parentReport = getParentReport(taskReport); const optimisticData: OnyxUpdate[] = [ @@ -415,7 +415,7 @@ function completeTask(taskReport: OnyxEntry) { */ function reopenTask(taskReport: OnyxEntry) { const taskReportID = taskReport?.reportID ?? '-1'; - const message = `marked as incomplete`; + const message = 'marked as incomplete'; const reopenedTaskReportAction = ReportUtils.buildOptimisticTaskReportAction(taskReportID, CONST.REPORT.ACTIONS.TYPE.TASK_REOPENED, message); const parentReport = getParentReport(taskReport); const hasOutstandingChildTask = taskReport?.managerID === currentUserAccountID ? true : parentReport?.hasOutstandingChildTask; diff --git a/src/libs/actions/Timing.ts b/src/libs/actions/Timing.ts index edb751b33a4b..1da130bb114e 100644 --- a/src/libs/actions/Timing.ts +++ b/src/libs/actions/Timing.ts @@ -66,7 +66,7 @@ function end(eventName: string, secondaryName = '', maxExecutionTime = 0) { const parameters: SendPerformanceTimingParams = { name: grafanaEventName, value: eventTime, - platform: `${getPlatform()}`, + platform: getPlatform(), }; API.read(READ_COMMANDS.SEND_PERFORMANCE_TIMING, parameters, {}); diff --git a/src/libs/actions/Transaction.ts b/src/libs/actions/Transaction.ts index 3c1e02751727..68270b7cf3c5 100644 --- a/src/libs/actions/Transaction.ts +++ b/src/libs/actions/Transaction.ts @@ -391,7 +391,7 @@ function dismissDuplicateTransactionViolation(transactionIDs: string[], dissmiss } function setReviewDuplicatesKey(values: Partial) { - Onyx.merge(`${ONYXKEYS.REVIEW_DUPLICATES}`, { + Onyx.merge(ONYXKEYS.REVIEW_DUPLICATES, { ...values, }); } diff --git a/src/libs/actions/Welcome/index.ts b/src/libs/actions/Welcome/index.ts index b15c5a6cc39c..db144130a40a 100644 --- a/src/libs/actions/Welcome/index.ts +++ b/src/libs/actions/Welcome/index.ts @@ -133,7 +133,7 @@ function completeHybridAppOnboarding() { } // No matter what the response is, we want to mark the onboarding as completed (user saw the explanation modal) - Log.info(`[HybridApp] Onboarding status has changed. Propagating new value to OldDot`, true); + Log.info('[HybridApp] Onboarding status has changed. Propagating new value to OldDot', true); NativeModules.HybridAppModule.completeOnboarding(true); }); } diff --git a/src/pages/EnablePayments/FeesAndTerms/substeps/TermsStep.tsx b/src/pages/EnablePayments/FeesAndTerms/substeps/TermsStep.tsx index 7998d9511b0d..d7e63d09a132 100644 --- a/src/pages/EnablePayments/FeesAndTerms/substeps/TermsStep.tsx +++ b/src/pages/EnablePayments/FeesAndTerms/substeps/TermsStep.tsx @@ -17,7 +17,7 @@ function HaveReadAndAgreeLabel() { return ( - {`${translate('termsStep.haveReadAndAgree')}`} + {translate('termsStep.haveReadAndAgree')} {`${translate('termsStep.electronicDisclosures')}.`} ); diff --git a/src/pages/EnablePayments/TermsStep.tsx b/src/pages/EnablePayments/TermsStep.tsx index 09bf0da163bc..694f0adcd1ba 100644 --- a/src/pages/EnablePayments/TermsStep.tsx +++ b/src/pages/EnablePayments/TermsStep.tsx @@ -32,7 +32,7 @@ function HaveReadAndAgreeLabel() { return ( - {`${translate('termsStep.haveReadAndAgree')}`} + {translate('termsStep.haveReadAndAgree')} {`${translate('termsStep.electronicDisclosures')}.`} ); diff --git a/src/pages/FlagCommentPage.tsx b/src/pages/FlagCommentPage.tsx index c87dda8e13c9..73f16749b406 100644 --- a/src/pages/FlagCommentPage.tsx +++ b/src/pages/FlagCommentPage.tsx @@ -109,7 +109,7 @@ function FlagCommentPage({parentReportAction, route, report, parentReport, repor ]; const getActionToFlag = useCallback((): OnyxTypes.ReportAction | null => { - let reportAction = reportActions?.[`${route.params.reportActionID.toString()}`]; + let reportAction = reportActions?.[route.params.reportActionID.toString()]; // Handle threads if needed if (reportAction?.reportActionID === undefined && parentReportAction) { @@ -141,7 +141,7 @@ function FlagCommentPage({parentReportAction, route, report, parentReport, repor const severityMenuItems = severities.map((item) => ( ReportUtils.navigateToPrivateNotes(report, session, navigateBackTo)} diff --git a/src/pages/ReimbursementAccount/BankAccountStep.tsx b/src/pages/ReimbursementAccount/BankAccountStep.tsx index 36ef3f4f00a9..37f94cf98d4e 100644 --- a/src/pages/ReimbursementAccount/BankAccountStep.tsx +++ b/src/pages/ReimbursementAccount/BankAccountStep.tsx @@ -65,7 +65,7 @@ function BankAccountStep({plaidLinkOAuthToken = '', policyID = '', policyName = subStep = CONST.BANK_ACCOUNT.SETUP_TYPE.PLAID; } const plaidDesktopMessage = getPlaidDesktopMessage(); - const bankAccountRoute = `${ROUTES.BANK_ACCOUNT_WITH_STEP_TO_OPEN.getRoute('new', policyID, ROUTES.WORKSPACE_INITIAL.getRoute(policyID))}`; + const bankAccountRoute = ROUTES.BANK_ACCOUNT_WITH_STEP_TO_OPEN.getRoute('new', policyID, ROUTES.WORKSPACE_INITIAL.getRoute(policyID)); const personalBankAccounts = bankAccountList ? Object.keys(bankAccountList).filter((key) => bankAccountList[key].accountType === CONST.PAYMENT_METHODS.PERSONAL_BANK_ACCOUNT) : []; const removeExistingBankAccountDetails = () => { diff --git a/src/pages/ReimbursementAccount/CompleteVerification/substeps/ConfirmAgreements.tsx b/src/pages/ReimbursementAccount/CompleteVerification/substeps/ConfirmAgreements.tsx index 71d7a80ab58b..b045f2b55d4f 100644 --- a/src/pages/ReimbursementAccount/CompleteVerification/substeps/ConfirmAgreements.tsx +++ b/src/pages/ReimbursementAccount/CompleteVerification/substeps/ConfirmAgreements.tsx @@ -45,7 +45,7 @@ function TermsAndConditionsLabel() { return ( {translate('common.iAcceptThe')} - {`${translate('completeVerificationStep.termsAndConditions')}`} + {translate('completeVerificationStep.termsAndConditions')} ); } diff --git a/src/pages/Travel/TravelTerms.tsx b/src/pages/Travel/TravelTerms.tsx index f33ab9965d4a..d2e66aa15fd0 100644 --- a/src/pages/Travel/TravelTerms.tsx +++ b/src/pages/Travel/TravelTerms.tsx @@ -42,8 +42,8 @@ function TravelTerms() { const AgreeToTheLabel = useCallback( () => ( - {`${translate('travel.termsAndConditions.agree')}`} - {`${translate('travel.termsAndConditions.travelTermsAndConditions')}`} + {translate('travel.termsAndConditions.agree')} + {translate('travel.termsAndConditions.travelTermsAndConditions')} ), [translate], @@ -65,15 +65,15 @@ function TravelTerms() { {({safeAreaPaddingBottomStyle}) => ( - {`${translate('travel.termsAndConditions.title')}`} + {translate('travel.termsAndConditions.title')} - {`${translate('travel.termsAndConditions.subtitle')}`} + {translate('travel.termsAndConditions.subtitle')} {`${translate('travel.termsAndConditions.termsconditions')}.`} - {`${translate('travel.termsAndConditions.helpDocIntro')}`} + {translate('travel.termsAndConditions.helpDocIntro')} {`${translate('travel.termsAndConditions.helpDoc')} `} - {`${translate('travel.termsAndConditions.helpDocOutro')}`} + {translate('travel.termsAndConditions.helpDocOutro')} {`${status?.emojiCode}`} + > + {status?.emojiCode} + )} diff --git a/src/pages/home/report/withReportAndReportActionOrNotFound.tsx b/src/pages/home/report/withReportAndReportActionOrNotFound.tsx index b8bb25d39c86..097596c3eafe 100644 --- a/src/pages/home/report/withReportAndReportActionOrNotFound.tsx +++ b/src/pages/home/report/withReportAndReportActionOrNotFound.tsx @@ -50,7 +50,7 @@ export default function , keyof OnyxProps>> { function WithReportOrNotFound(props: TProps, ref: ForwardedRef) { const getReportAction = useCallback(() => { - let reportAction: OnyxEntry = props.reportActions?.[`${props.route.params.reportActionID}`]; + let reportAction: OnyxEntry = props.reportActions?.[props.route.params.reportActionID]; // Handle threads if needed if (!reportAction?.reportActionID) { diff --git a/src/pages/home/sidebar/AllSettingsScreen.tsx b/src/pages/home/sidebar/AllSettingsScreen.tsx index 0025e6b429c5..b446d5cfa8b0 100644 --- a/src/pages/home/sidebar/AllSettingsScreen.tsx +++ b/src/pages/home/sidebar/AllSettingsScreen.tsx @@ -24,7 +24,7 @@ function AllSettingsScreen() { const waitForNavigate = useWaitForNavigation(); const {translate} = useLocalize(); const {shouldUseNarrowLayout} = useResponsiveLayout(); - const [allConnectionSyncProgresses] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY_CONNECTION_SYNC_PROGRESS}`); + const [allConnectionSyncProgresses] = useOnyx(ONYXKEYS.COLLECTION.POLICY_CONNECTION_SYNC_PROGRESS); const [privateSubscription] = useOnyx(ONYXKEYS.NVP_PRIVATE_SUBSCRIPTION); diff --git a/src/pages/settings/ExitSurvey/ExitSurveyResponsePage.tsx b/src/pages/settings/ExitSurvey/ExitSurveyResponsePage.tsx index 1fb7cfbc94ab..56f3cd6ebf60 100644 --- a/src/pages/settings/ExitSurvey/ExitSurveyResponsePage.tsx +++ b/src/pages/settings/ExitSurvey/ExitSurveyResponsePage.tsx @@ -114,8 +114,8 @@ function ExitSurveyResponsePage({route, navigation}: ExitSurveyResponsePageProps Navigation.navigate(ROUTES.POLICY_ACCOUNTING_SAGE_INTACCT_EXPORT_DATE.getRoute(policyID)), - title: exportConfig?.exportDate ? translate(`workspace.sageIntacct.exportDate.values.${exportConfig.exportDate}.label`) : translate(`workspace.sageIntacct.notConfigured`), + title: exportConfig?.exportDate ? translate(`workspace.sageIntacct.exportDate.values.${exportConfig.exportDate}.label`) : translate('workspace.sageIntacct.notConfigured'), subscribedSettings: [CONST.SAGE_INTACCT_CONFIG.EXPORT_DATE], }, { diff --git a/src/pages/workspace/accounting/netsuite/NetSuiteTokenInput/substeps/NetSuiteTokenInputForm.tsx b/src/pages/workspace/accounting/netsuite/NetSuiteTokenInput/substeps/NetSuiteTokenInputForm.tsx index 580ad181e6ed..95dca758aa09 100644 --- a/src/pages/workspace/accounting/netsuite/NetSuiteTokenInput/substeps/NetSuiteTokenInputForm.tsx +++ b/src/pages/workspace/accounting/netsuite/NetSuiteTokenInput/substeps/NetSuiteTokenInputForm.tsx @@ -49,7 +49,7 @@ function NetSuiteTokenInputForm({onNext, policyID}: SubStepProps & {policyID: st return ( - {translate(`workspace.netsuite.tokenInput.formSteps.enterCredentials.title`)} + {translate('workspace.netsuite.tokenInput.formSteps.enterCredentials.title')} customList.transactionFieldID.toLowerCase() === values[INPUT_IDS.TRANSACTION_FIELD_ID].toLowerCase())) { errors[INPUT_IDS.TRANSACTION_FIELD_ID] = translate('workspace.netsuite.import.importCustomFields.customLists.errors.uniqueTransactionFieldIDError'); diff --git a/src/pages/workspace/accounting/netsuite/import/NetSuiteImportCustomFieldNew/NetSuiteImportAddCustomSegmentPage.tsx b/src/pages/workspace/accounting/netsuite/import/NetSuiteImportCustomFieldNew/NetSuiteImportAddCustomSegmentPage.tsx index eb22f8b3dec9..e6c541ef757d 100644 --- a/src/pages/workspace/accounting/netsuite/import/NetSuiteImportCustomFieldNew/NetSuiteImportAddCustomSegmentPage.tsx +++ b/src/pages/workspace/accounting/netsuite/import/NetSuiteImportCustomFieldNew/NetSuiteImportAddCustomSegmentPage.tsx @@ -94,16 +94,16 @@ function NetSuiteImportAddCustomSegmentPage({policy}: WithPolicyConnectionsProps fieldName: translate(`workspace.netsuite.import.importCustomFields.customSegments.addForm.${customSegmentRecordType}Name`), }); } else if (customSegments.find((customSegment) => customSegment.segmentName.toLowerCase() === values[INPUT_IDS.SEGMENT_NAME].toLowerCase())) { - const fieldLabel = translate(`workspace.netsuite.import.importCustomFields.customSegments.fields.segmentName`); + const fieldLabel = translate('workspace.netsuite.import.importCustomFields.customSegments.fields.segmentName'); errors[INPUT_IDS.SEGMENT_NAME] = translate('workspace.netsuite.import.importCustomFields.customSegments.errors.uniqueFieldError', {fieldName: fieldLabel}); } return errors; case CONST.NETSUITE_CUSTOM_FIELD_SUBSTEP_INDEXES.CUSTOM_SEGMENTS.INTERNAL_ID: if (!ValidationUtils.isRequiredFulfilled(values[INPUT_IDS.INTERNAL_ID])) { - const fieldLabel = translate(`workspace.netsuite.import.importCustomFields.customSegments.fields.internalID`); + const fieldLabel = translate('workspace.netsuite.import.importCustomFields.customSegments.fields.internalID'); errors[INPUT_IDS.INTERNAL_ID] = translate('workspace.netsuite.import.importCustomFields.requiredFieldError', {fieldName: fieldLabel}); } else if (customSegments.find((customSegment) => customSegment.internalID.toLowerCase() === values[INPUT_IDS.INTERNAL_ID].toLowerCase())) { - const fieldLabel = translate(`workspace.netsuite.import.importCustomFields.customSegments.fields.internalID`); + const fieldLabel = translate('workspace.netsuite.import.importCustomFields.customSegments.fields.internalID'); errors[INPUT_IDS.INTERNAL_ID] = translate('workspace.netsuite.import.importCustomFields.customSegments.errors.uniqueFieldError', {fieldName: fieldLabel}); } return errors; diff --git a/src/pages/workspace/accounting/netsuite/import/NetSuiteImportCustomFieldNew/substeps/ChooseCustomListStep.tsx b/src/pages/workspace/accounting/netsuite/import/NetSuiteImportCustomFieldNew/substeps/ChooseCustomListStep.tsx index 473a01d5e7ce..6dff08f492ea 100644 --- a/src/pages/workspace/accounting/netsuite/import/NetSuiteImportCustomFieldNew/substeps/ChooseCustomListStep.tsx +++ b/src/pages/workspace/accounting/netsuite/import/NetSuiteImportCustomFieldNew/substeps/ChooseCustomListStep.tsx @@ -13,7 +13,7 @@ function ChooseCustomListStep({policy}: CustomFieldSubStepWithPolicy) { return ( <> - {translate(`workspace.netsuite.import.importCustomFields.customLists.addForm.listNameTitle`)} + {translate('workspace.netsuite.import.importCustomFields.customLists.addForm.listNameTitle')} - {translate(`workspace.netsuite.import.importCustomFields.customSegments.addForm.segmentRecordType`)} + {translate('workspace.netsuite.import.importCustomFields.customSegments.addForm.segmentRecordType')} - {translate(`workspace.netsuite.import.importCustomFields.chooseOptionBelow`)} + {translate('workspace.netsuite.import.importCustomFields.chooseOptionBelow')} - {translate(`workspace.netsuite.import.importCustomFields.customSegments.addForm.customSegmentInternalIDTitle`)} + {translate('workspace.netsuite.import.importCustomFields.customSegments.addForm.customSegmentInternalIDTitle')} {translate(titleKey as TranslationPaths)} - {translate(`workspace.netsuite.import.importCustomFields.chooseOptionBelow`)} + {translate('workspace.netsuite.import.importCustomFields.chooseOptionBelow')} - {translate(`workspace.netsuite.import.importCustomFields.customLists.addForm.transactionFieldIDTitle`)} + {translate('workspace.netsuite.import.importCustomFields.customLists.addForm.transactionFieldIDTitle')} - ${Parser.replace(translate(`workspace.netsuite.import.importCustomFields.customLists.addForm.transactionFieldIDFooter`))}`} /> + ${Parser.replace(translate('workspace.netsuite.import.importCustomFields.customLists.addForm.transactionFieldIDFooter'))}`} /> ); diff --git a/src/pages/workspace/accounting/netsuite/import/NetSuiteImportCustomersOrProjectsPage.tsx b/src/pages/workspace/accounting/netsuite/import/NetSuiteImportCustomersOrProjectsPage.tsx index bb94ca59e630..c5ac2fe3cf63 100644 --- a/src/pages/workspace/accounting/netsuite/import/NetSuiteImportCustomersOrProjectsPage.tsx +++ b/src/pages/workspace/accounting/netsuite/import/NetSuiteImportCustomersOrProjectsPage.tsx @@ -68,7 +68,7 @@ function NetSuiteImportCustomersOrProjectsPage({policy}: WithPolicyConnectionsPr onBackButtonPress={() => Navigation.goBack(ROUTES.POLICY_ACCOUNTING_NETSUITE_IMPORT.getRoute(policyID))} > - ${Parser.replace(translate(`workspace.netsuite.import.customersOrJobs.subtitle` as TranslationPaths))}`} /> + ${Parser.replace(translate('workspace.netsuite.import.customersOrJobs.subtitle' as TranslationPaths))}`} /> { const options: MenuItem[] = [ { - text: translate(`workspace.qbo.accounts.credit_card`), + text: translate('workspace.qbo.accounts.credit_card'), value: CONST.QUICKBOOKS_NON_REIMBURSABLE_EXPORT_ACCOUNT_TYPE.CREDIT_CARD, keyForList: CONST.QUICKBOOKS_NON_REIMBURSABLE_EXPORT_ACCOUNT_TYPE.CREDIT_CARD, isSelected: CONST.QUICKBOOKS_NON_REIMBURSABLE_EXPORT_ACCOUNT_TYPE.CREDIT_CARD === qboConfig?.nonReimbursableExpensesExportDestination, @@ -42,7 +42,7 @@ function QuickbooksCompanyCardExpenseAccountSelectCardPage({policy}: WithPolicyC defaultVendor: CONST.INTEGRATION_ENTITY_MAP_TYPES.NONE, }, { - text: translate(`workspace.qbo.accounts.debit_card`), + text: translate('workspace.qbo.accounts.debit_card'), value: CONST.QUICKBOOKS_NON_REIMBURSABLE_EXPORT_ACCOUNT_TYPE.DEBIT_CARD, keyForList: CONST.QUICKBOOKS_NON_REIMBURSABLE_EXPORT_ACCOUNT_TYPE.DEBIT_CARD, isSelected: CONST.QUICKBOOKS_NON_REIMBURSABLE_EXPORT_ACCOUNT_TYPE.DEBIT_CARD === qboConfig?.nonReimbursableExpensesExportDestination, @@ -52,7 +52,7 @@ function QuickbooksCompanyCardExpenseAccountSelectCardPage({policy}: WithPolicyC ]; if (!isLocationEnabled) { options.push({ - text: translate(`workspace.qbo.accounts.bill`), + text: translate('workspace.qbo.accounts.bill'), value: CONST.QUICKBOOKS_NON_REIMBURSABLE_EXPORT_ACCOUNT_TYPE.VENDOR_BILL, keyForList: CONST.QUICKBOOKS_NON_REIMBURSABLE_EXPORT_ACCOUNT_TYPE.VENDOR_BILL, isSelected: CONST.QUICKBOOKS_NON_REIMBURSABLE_EXPORT_ACCOUNT_TYPE.VENDOR_BILL === qboConfig?.nonReimbursableExpensesExportDestination, diff --git a/src/pages/workspace/accounting/qbo/export/QuickbooksOutOfPocketExpenseEntitySelectPage.tsx b/src/pages/workspace/accounting/qbo/export/QuickbooksOutOfPocketExpenseEntitySelectPage.tsx index 0fd977fb5b13..a2ab4f4661be 100644 --- a/src/pages/workspace/accounting/qbo/export/QuickbooksOutOfPocketExpenseEntitySelectPage.tsx +++ b/src/pages/workspace/accounting/qbo/export/QuickbooksOutOfPocketExpenseEntitySelectPage.tsx @@ -54,7 +54,7 @@ function QuickbooksOutOfPocketExpenseEntitySelectPage({policy}: WithPolicyConnec () => [ { value: CONST.QUICKBOOKS_REIMBURSABLE_ACCOUNT_TYPE.CHECK, - text: translate(`workspace.qbo.accounts.check`), + text: translate('workspace.qbo.accounts.check'), keyForList: CONST.QUICKBOOKS_REIMBURSABLE_ACCOUNT_TYPE.CHECK, isSelected: qboConfig?.reimbursableExpensesExportDestination === CONST.QUICKBOOKS_REIMBURSABLE_ACCOUNT_TYPE.CHECK, isShown: !isLocationsEnabled, @@ -62,7 +62,7 @@ function QuickbooksOutOfPocketExpenseEntitySelectPage({policy}: WithPolicyConnec }, { value: CONST.QUICKBOOKS_REIMBURSABLE_ACCOUNT_TYPE.JOURNAL_ENTRY, - text: translate(`workspace.qbo.accounts.journal_entry`), + text: translate('workspace.qbo.accounts.journal_entry'), keyForList: CONST.QUICKBOOKS_REIMBURSABLE_ACCOUNT_TYPE.JOURNAL_ENTRY, isSelected: qboConfig?.reimbursableExpensesExportDestination === CONST.QUICKBOOKS_REIMBURSABLE_ACCOUNT_TYPE.JOURNAL_ENTRY, isShown: !isTaxesEnabled, @@ -70,7 +70,7 @@ function QuickbooksOutOfPocketExpenseEntitySelectPage({policy}: WithPolicyConnec }, { value: CONST.QUICKBOOKS_REIMBURSABLE_ACCOUNT_TYPE.VENDOR_BILL, - text: translate(`workspace.qbo.accounts.bill`), + text: translate('workspace.qbo.accounts.bill'), keyForList: CONST.QUICKBOOKS_REIMBURSABLE_ACCOUNT_TYPE.VENDOR_BILL, isSelected: qboConfig?.reimbursableExpensesExportDestination === CONST.QUICKBOOKS_REIMBURSABLE_ACCOUNT_TYPE.VENDOR_BILL, isShown: !isLocationsEnabled, diff --git a/src/pages/workspace/categories/CategoryRequireReceiptsOverPage.tsx b/src/pages/workspace/categories/CategoryRequireReceiptsOverPage.tsx index 7d526ede42b5..3db052f2f3c2 100644 --- a/src/pages/workspace/categories/CategoryRequireReceiptsOverPage.tsx +++ b/src/pages/workspace/categories/CategoryRequireReceiptsOverPage.tsx @@ -50,7 +50,7 @@ function CategoryRequireReceiptsOverPage({ const requireReceiptsOverListData = [ { value: null, - text: translate(`workspace.rules.categoryRules.requireReceiptsOverList.default`, { + text: translate('workspace.rules.categoryRules.requireReceiptsOverList.default', { defaultAmount: CurrencyUtils.convertToShortDisplayString(maxExpenseAmountToDisplay, policy?.outputCurrency ?? CONST.CURRENCY.USD), }), keyForList: CONST.POLICY.REQUIRE_RECEIPTS_OVER_OPTIONS.DEFAULT, @@ -58,13 +58,13 @@ function CategoryRequireReceiptsOverPage({ }, { value: CONST.DISABLED_MAX_EXPENSE_VALUE, - text: translate(`workspace.rules.categoryRules.requireReceiptsOverList.never`), + text: translate('workspace.rules.categoryRules.requireReceiptsOverList.never'), keyForList: CONST.POLICY.REQUIRE_RECEIPTS_OVER_OPTIONS.NEVER, isSelected: isNeverSelected, }, { value: 0, - text: translate(`workspace.rules.categoryRules.requireReceiptsOverList.always`), + text: translate('workspace.rules.categoryRules.requireReceiptsOverList.always'), keyForList: CONST.POLICY.REQUIRE_RECEIPTS_OVER_OPTIONS.ALWAYS, isSelected: isAlwaysSelected, }, diff --git a/src/pages/workspace/categories/CategorySettingsPage.tsx b/src/pages/workspace/categories/CategorySettingsPage.tsx index 05111864f61a..08be99c1eab6 100644 --- a/src/pages/workspace/categories/CategorySettingsPage.tsx +++ b/src/pages/workspace/categories/CategorySettingsPage.tsx @@ -298,7 +298,7 @@ function CategorySettingsPage({ { Navigation.navigate(ROUTES.WORSKPACE_CATEGORY_REQUIRE_RECEIPTS_OVER.getRoute(policyID, policyCategory.name)); }} diff --git a/src/pages/workspace/members/WorkspaceMemberDetailsPage.tsx b/src/pages/workspace/members/WorkspaceMemberDetailsPage.tsx index 52814f5da23d..dca9001b92b8 100644 --- a/src/pages/workspace/members/WorkspaceMemberDetailsPage.tsx +++ b/src/pages/workspace/members/WorkspaceMemberDetailsPage.tsx @@ -62,7 +62,7 @@ function WorkspaceMemberDetailsPage({personalDetails, policy, route}: WorkspaceM const StyleUtils = useStyleUtils(); const currentUserPersonalDetails = useCurrentUserPersonalDetails(); const [expensifyCardsList] = useOnyx(`${ONYXKEYS.COLLECTION.WORKSPACE_CARDS_LIST}${workspaceAccountID}_${CONST.EXPENSIFY_CARD.BANK}`); - const [allCardsList] = useOnyx(`${ONYXKEYS.COLLECTION.WORKSPACE_CARDS_LIST}`); + const [allCardsList] = useOnyx(ONYXKEYS.COLLECTION.WORKSPACE_CARDS_LIST); const [isRemoveMemberConfirmModalVisible, setIsRemoveMemberConfirmModalVisible] = useState(false); const [isRoleSelectionModalVisible, setIsRoleSelectionModalVisible] = useState(false); @@ -275,7 +275,7 @@ function WorkspaceMemberDetailsPage({personalDetails, policy, route}: WorkspaceM @@ -145,7 +145,7 @@ function TagSettingsPage({route, navigation}: TagSettingsPageProps) { - + Navigation.navigate(ROUTES.WORKSPACE_EDIT_TAGS.getRoute(policyID, policyTagLists.at(0)?.orderWeight ?? 0))} shouldShowRightIcon /> diff --git a/src/pages/workspace/tags/WorkspaceViewTagsPage.tsx b/src/pages/workspace/tags/WorkspaceViewTagsPage.tsx index a01707a04740..d4c3e3770026 100644 --- a/src/pages/workspace/tags/WorkspaceViewTagsPage.tsx +++ b/src/pages/workspace/tags/WorkspaceViewTagsPage.tsx @@ -299,7 +299,7 @@ function WorkspaceViewTagsPage({route}: WorkspaceViewTagsProps) { > diff --git a/src/pages/workspace/taxes/WorkspaceEditTaxPage.tsx b/src/pages/workspace/taxes/WorkspaceEditTaxPage.tsx index 0f50ed8fe0b8..81993fe3cab6 100644 --- a/src/pages/workspace/taxes/WorkspaceEditTaxPage.tsx +++ b/src/pages/workspace/taxes/WorkspaceEditTaxPage.tsx @@ -113,7 +113,7 @@ function WorkspaceEditTaxPage({ description={translate('common.name')} style={[styles.moneyRequestMenuItem]} titleStyle={styles.flex1} - onPress={() => Navigation.navigate(ROUTES.WORKSPACE_TAX_NAME.getRoute(`${policyID}`, taxID))} + onPress={() => Navigation.navigate(ROUTES.WORKSPACE_TAX_NAME.getRoute(policyID, taxID))} /> Navigation.navigate(ROUTES.WORKSPACE_TAX_VALUE.getRoute(`${policyID}`, taxID))} + onPress={() => Navigation.navigate(ROUTES.WORKSPACE_TAX_VALUE.getRoute(policyID, taxID))} /> { if (!PolicyUtils.isControlPolicy(policy)) { Navigation.navigate( - ROUTES.WORKSPACE_UPGRADE.getRoute( - policyID, - CONST.UPGRADE_FEATURE_INTRO_MAPPING.taxCodes.alias, - ROUTES.WORKSPACE_TAX_CODE.getRoute(`${policyID}`, taxID), - ), + ROUTES.WORKSPACE_UPGRADE.getRoute(policyID, CONST.UPGRADE_FEATURE_INTRO_MAPPING.taxCodes.alias, ROUTES.WORKSPACE_TAX_CODE.getRoute(policyID, taxID)), ); return; } - Navigation.navigate(ROUTES.WORKSPACE_TAX_CODE.getRoute(`${policyID}`, taxID)); + Navigation.navigate(ROUTES.WORKSPACE_TAX_CODE.getRoute(policyID, taxID)); }} /> diff --git a/src/pages/workspace/taxes/WorkspaceTaxesPage.tsx b/src/pages/workspace/taxes/WorkspaceTaxesPage.tsx index 31e4a5e093eb..461e06bbf8de 100644 --- a/src/pages/workspace/taxes/WorkspaceTaxesPage.tsx +++ b/src/pages/workspace/taxes/WorkspaceTaxesPage.tsx @@ -96,7 +96,7 @@ function WorkspaceTaxesPage({ if (suffix) { return `${taxRate.value} ${CONST.DOT_SEPARATOR} ${suffix}`; } - return `${taxRate.value}`; + return taxRate.value; }, [defaultExternalID, foreignTaxDefault, translate], ); diff --git a/src/pages/workspace/upgrade/UpgradeIntro.tsx b/src/pages/workspace/upgrade/UpgradeIntro.tsx index 5fe04fb7a0ce..7226bba829a5 100644 --- a/src/pages/workspace/upgrade/UpgradeIntro.tsx +++ b/src/pages/workspace/upgrade/UpgradeIntro.tsx @@ -59,8 +59,8 @@ function UpgradeIntro({feature, onUpgrade, buttonDisabled, loading}: Props) { {translate(feature.description)} {translate(`workspace.upgrade.${feature.id}.onlyAvailableOnPlan`)} - {translate(`workspace.upgrade.pricing.amount`)} - {translate(`workspace.upgrade.pricing.perActiveMember`)} + {translate('workspace.upgrade.pricing.amount')} + {translate('workspace.upgrade.pricing.perActiveMember')}