From e0cdb51f96f87fc3178751f303d7e8a60b1ad3c9 Mon Sep 17 00:00:00 2001 From: rory Date: Thu, 19 Feb 2026 14:22:00 -0800 Subject: [PATCH 1/2] Fix prettier import sorting broken by @prettier/plugin-oxc Upgrade @trivago/prettier-plugin-sort-imports from 5.2.2 to 6.0.2 and patch it to support the oxc and oxc-ts parsers registered by @prettier/plugin-oxc. Without this patch, import sorting is silently skipped because the sort-imports plugin only attaches its preprocess hook to the babel/typescript/flow/vue parsers, not the OXC parsers that now handle JS/TS files. The patch adds oxc and oxc-ts parser entries that compose OXC's parser with the sort-imports defaultPreprocessor. The import of @prettier/plugin-oxc is wrapped in try/catch so it remains optional. Also runs prettier to fix import ordering in 65 files that drifted while the sorting was broken. Co-authored-by: Cursor --- package-lock.json | 52 +++++++++++++++---- package.json | 2 +- ...rts+6.0.2+001+add-oxc-parser-support.patch | 34 ++++++++++++ .../prettier-plugin-sort-imports/details.md | 17 ++++++ src/components/BookTravelButton.tsx | 2 +- src/components/CardPreview.tsx | 2 +- .../DelegateNoAccessModalProvider/index.tsx | 4 +- src/components/FeatureList.tsx | 2 +- .../LHNOptionsList/LHNOptionsList.tsx | 2 +- .../MoneyRequestConfirmationListFooter.tsx | 2 +- .../MoneyRequestReportActionsList.tsx | 2 +- .../MoneyRequestReportNavigation.tsx | 2 +- .../Context/stateReducer.ts | 2 +- .../AuthenticationMethodDescription.tsx | 2 +- .../NavigationTabBar/WorkspacesTabButton.tsx | 2 +- .../MoneyRequestReceiptView.tsx | 6 +-- .../ReportActionItem/MoneyRequestView.tsx | 4 +- .../TransactionPreviewContent.tsx | 4 +- .../Search/SearchAutocompleteList.tsx | 2 +- src/components/Search/SearchChartView.tsx | 2 +- .../VideoPlayer/BaseVideoPlayer.tsx | 2 +- src/hooks/useOutstandingReports.ts | 2 +- src/hooks/useReceiptScanDrop.tsx | 6 +-- src/hooks/useSearchTypeMenuSections.ts | 2 +- src/hooks/useSidebarOrderedReports.tsx | 2 +- src/languages/de.ts | 1 + src/languages/fr.ts | 1 + src/languages/it.ts | 1 + src/languages/ja.ts | 1 + src/languages/nl.ts | 1 + src/languages/pl.ts | 1 + src/languages/pt-BR.ts | 1 + src/languages/zh-hans.ts | 1 + src/libs/CardFeedUtils.ts | 2 +- src/libs/CardUtils.ts | 4 +- .../helpers/getAdaptedStateFromPath.ts | 6 +-- src/libs/SearchQueryUtils.ts | 2 +- src/libs/SearchUIUtils.ts | 2 +- src/pages/ReportDetailsPage.tsx | 2 +- src/pages/Share/SubmitDetailsPage.tsx | 2 +- .../inbox/report/PureReportActionItem.tsx | 2 +- .../AttachmentPickerWithMenuItems.tsx | 2 +- .../FloatingActionButtonAndPopover.tsx | 2 +- .../iou/request/step/IOURequestStepAmount.tsx | 2 +- .../step/IOURequestStepConfirmation.tsx | 2 +- .../request/step/IOURequestStepDistance.tsx | 2 +- .../index.native.tsx | 2 +- .../step/IOURequestStepDistanceManual.tsx | 2 +- .../step/IOURequestStepDistanceMap.tsx | 2 +- .../step/IOURequestStepDistanceOdometer.tsx | 2 +- .../step/IOURequestStepParticipants.tsx | 2 +- .../step/IOURequestStepScan/index.native.tsx | 2 +- .../request/step/IOURequestStepScan/index.tsx | 2 +- .../CustomStatus/VacationDelegatePage.tsx | 2 +- .../settings/Rules/Fields/AddCategoryPage.tsx | 2 +- src/pages/settings/Rules/RulePageBase.tsx | 2 +- .../Subscription/SubscriptionPlan/index.tsx | 2 +- .../ExpensifyCardPage/FrozenCardIndicator.tsx | 2 +- .../Wallet/ExpensifyCardPage/index.tsx | 2 +- .../SignInPageLayout/SignInHeroCopy.tsx | 2 +- .../SignInPageLayout/SignInPageContent.tsx | 2 +- .../WorkspacesListPageHeaderButton.tsx | 2 +- .../WorkspaceInvoicingDetailsSection.tsx | 2 +- .../rules/MerchantRules/AddCategoryPage.tsx | 2 +- .../MerchantRules/MerchantRulePageBase.tsx | 2 +- tests/unit/CardUtilsTest.ts | 2 +- tests/unit/RenderHTMLTest.tsx | 2 +- tests/unit/hooks/useMappedPolicies.test.ts | 2 +- .../unit/hooks/useSplitContextHooks.test.tsx | 4 +- 69 files changed, 170 insertions(+), 79 deletions(-) create mode 100644 patches/@trivago/prettier-plugin-sort-imports/@trivago+prettier-plugin-sort-imports+6.0.2+001+add-oxc-parser-support.patch create mode 100644 patches/@trivago/prettier-plugin-sort-imports/details.md diff --git a/package-lock.json b/package-lock.json index a897aacf98c3..45b42bc330c6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -197,7 +197,7 @@ "@storybook/react-webpack5": "10.1.10", "@svgr/webpack": "^6.0.0", "@testing-library/react-native": "13.2.0", - "@trivago/prettier-plugin-sort-imports": "5.2.2", + "@trivago/prettier-plugin-sort-imports": "^6.0.2", "@types/base-64": "^1.0.2", "@types/canvas-size": "^1.2.2", "@types/concurrently": "^7.0.0", @@ -16058,25 +16058,28 @@ } }, "node_modules/@trivago/prettier-plugin-sort-imports": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/@trivago/prettier-plugin-sort-imports/-/prettier-plugin-sort-imports-5.2.2.tgz", - "integrity": "sha512-fYDQA9e6yTNmA13TLVSA+WMQRc5Bn/c0EUBditUHNfMMxN7M82c38b1kEggVE3pLpZ0FwkwJkUEKMiOi52JXFA==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@trivago/prettier-plugin-sort-imports/-/prettier-plugin-sort-imports-6.0.2.tgz", + "integrity": "sha512-3DgfkukFyC/sE/VuYjaUUWoFfuVjPK55vOFDsxD56XXynFMCZDYFogH2l/hDfOsQAm1myoU/1xByJ3tWqtulXA==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@babel/generator": "^7.26.5", - "@babel/parser": "^7.26.7", - "@babel/traverse": "^7.26.7", - "@babel/types": "^7.26.7", + "@babel/generator": "^7.28.0", + "@babel/parser": "^7.28.0", + "@babel/traverse": "^7.28.0", + "@babel/types": "^7.28.0", "javascript-natural-sort": "^0.7.1", - "lodash": "^4.17.21" + "lodash-es": "^4.17.21", + "minimatch": "^9.0.0", + "parse-imports-exports": "^0.2.4" }, "engines": { - "node": ">18.12" + "node": ">= 20" }, "peerDependencies": { "@vue/compiler-sfc": "3.x", "prettier": "2.x - 3.x", + "prettier-plugin-ember-template-tag": ">= 2.0.0", "prettier-plugin-svelte": "3.x", "svelte": "4.x || 5.x" }, @@ -16084,6 +16087,9 @@ "@vue/compiler-sfc": { "optional": true }, + "prettier-plugin-ember-template-tag": { + "optional": true + }, "prettier-plugin-svelte": { "optional": true }, @@ -16092,6 +16098,32 @@ } } }, + "node_modules/@trivago/prettier-plugin-sort-imports/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@trivago/prettier-plugin-sort-imports/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/@trysound/sax": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", diff --git a/package.json b/package.json index 35a94afab073..83b452d3b6f4 100644 --- a/package.json +++ b/package.json @@ -263,7 +263,7 @@ "@storybook/react-webpack5": "10.1.10", "@svgr/webpack": "^6.0.0", "@testing-library/react-native": "13.2.0", - "@trivago/prettier-plugin-sort-imports": "5.2.2", + "@trivago/prettier-plugin-sort-imports": "^6.0.2", "@types/base-64": "^1.0.2", "@types/canvas-size": "^1.2.2", "@types/concurrently": "^7.0.0", diff --git a/patches/@trivago/prettier-plugin-sort-imports/@trivago+prettier-plugin-sort-imports+6.0.2+001+add-oxc-parser-support.patch b/patches/@trivago/prettier-plugin-sort-imports/@trivago+prettier-plugin-sort-imports+6.0.2+001+add-oxc-parser-support.patch new file mode 100644 index 000000000000..45e325943a20 --- /dev/null +++ b/patches/@trivago/prettier-plugin-sort-imports/@trivago+prettier-plugin-sort-imports+6.0.2+001+add-oxc-parser-support.patch @@ -0,0 +1,34 @@ +diff --git a/node_modules/@trivago/prettier-plugin-sort-imports/lib/src/index.js b/node_modules/@trivago/prettier-plugin-sort-imports/lib/src/index.js +index d2d7e8d..397aa3b 100644 +--- a/node_modules/@trivago/prettier-plugin-sort-imports/lib/src/index.js ++++ b/node_modules/@trivago/prettier-plugin-sort-imports/lib/src/index.js +@@ -10,6 +10,10 @@ import { createEmberParsers } from './utils/create-ember-parsers.js'; + import { createSvelteParsers } from './utils/create-svelte-parsers.js'; + const emberParsers = await createEmberParsers(); + const svelteParsers = await createSvelteParsers(); ++ ++let oxcParsers = {}; ++try { oxcParsers = (await import('@prettier/plugin-oxc')).parsers; } catch {} ++ + const options = { + importOrderExclude: { + type: 'path', +@@ -122,6 +126,18 @@ export default { + }, + } + : {}), ++ ...(oxcParsers.oxc ++ ? { ++ oxc: { ++ ...oxcParsers.oxc, ++ preprocess: defaultPreprocessor, ++ }, ++ 'oxc-ts': { ++ ...oxcParsers['oxc-ts'], ++ preprocess: defaultPreprocessor, ++ }, ++ } ++ : {}), + }, + options, + }; diff --git a/patches/@trivago/prettier-plugin-sort-imports/details.md b/patches/@trivago/prettier-plugin-sort-imports/details.md new file mode 100644 index 000000000000..f7f5eb5d84fa --- /dev/null +++ b/patches/@trivago/prettier-plugin-sort-imports/details.md @@ -0,0 +1,17 @@ +# `@trivago/prettier-plugin-sort-imports` patches + +### [@trivago+prettier-plugin-sort-imports+6.0.2+001+add-oxc-parser-support.patch](@trivago+prettier-plugin-sort-imports+6.0.2+001+add-oxc-parser-support.patch) + +- Reason: + + ``` + @prettier/plugin-oxc registers oxc and oxc-ts parsers that override the built-in + babel and typescript parsers for JS/TS files. Since the sort-imports plugin only + attaches its import-sorting preprocess hook to babel/typescript/flow/vue parsers, + import sorting is silently skipped when OXC is active. This patch adds oxc and + oxc-ts parser entries that compose OXC's parser with the sort-imports preprocess hook. + ``` + +- Upstream PR/issue: https://github.com/trivago/prettier-plugin-sort-imports/pull/398 +- E/App issue: https://github.com/Expensify/App/issues/82687 +- PR introducing patch: https://github.com/Expensify/App/pull/83008 diff --git a/src/components/BookTravelButton.tsx b/src/components/BookTravelButton.tsx index 46b05591e061..1a8abee90557 100644 --- a/src/components/BookTravelButton.tsx +++ b/src/components/BookTravelButton.tsx @@ -20,8 +20,8 @@ import colors from '@styles/theme/colors'; import CONST from '@src/CONST'; import ONYXKEYS from '@src/ONYXKEYS'; import ROUTES from '@src/ROUTES'; -import type WithSentryLabel from '@src/types/utils/SentryLabel'; import {isEmptyObject} from '@src/types/utils/EmptyObject'; +import type WithSentryLabel from '@src/types/utils/SentryLabel'; import Button from './Button'; import ConfirmModal from './ConfirmModal'; import DotIndicatorMessage from './DotIndicatorMessage'; diff --git a/src/components/CardPreview.tsx b/src/components/CardPreview.tsx index 73beb3429fea..2c95aa385a96 100644 --- a/src/components/CardPreview.tsx +++ b/src/components/CardPreview.tsx @@ -1,5 +1,5 @@ -import type {StyleProp, ViewStyle} from 'react-native'; import React from 'react'; +import type {StyleProp, ViewStyle} from 'react-native'; import {View} from 'react-native'; import {useMemoizedLazyIllustrations} from '@hooks/useLazyAsset'; import useOnyx from '@hooks/useOnyx'; diff --git a/src/components/DelegateNoAccessModalProvider/index.tsx b/src/components/DelegateNoAccessModalProvider/index.tsx index 881d7b10e79d..e35fff07fd65 100644 --- a/src/components/DelegateNoAccessModalProvider/index.tsx +++ b/src/components/DelegateNoAccessModalProvider/index.tsx @@ -3,14 +3,14 @@ import React, {createContext, useContext, useState} from 'react'; import type {PropsWithChildren} from 'react'; import {View} from 'react-native'; +import ConfirmModal from '@components/ConfirmModal'; +import RenderHTML from '@components/RenderHTML'; import useCurrentUserPersonalDetails from '@hooks/useCurrentUserPersonalDetails'; import useLocalize from '@hooks/useLocalize'; import useOnyx from '@hooks/useOnyx'; import useThemeStyles from '@hooks/useThemeStyles'; import AccountUtils from '@libs/AccountUtils'; import ONYXKEYS from '@src/ONYXKEYS'; -import ConfirmModal from '@components/ConfirmModal'; -import RenderHTML from '@components/RenderHTML'; import {defaultDelegateNoAccessActionsContextValue, defaultDelegateNoAccessStateContextValue} from './default'; import type {DelegateNoAccessActionsContextType, DelegateNoAccessStateContextType} from './types'; diff --git a/src/components/FeatureList.tsx b/src/components/FeatureList.tsx index 224fa9e5e7d4..a97310cdfa6f 100644 --- a/src/components/FeatureList.tsx +++ b/src/components/FeatureList.tsx @@ -5,9 +5,9 @@ import type {StyleProp, TextStyle, ViewStyle} from 'react-native'; import useLocalize from '@hooks/useLocalize'; import useThemeStyles from '@hooks/useThemeStyles'; import variables from '@styles/variables'; +import CONST from '@src/CONST'; import type {TranslationPaths} from '@src/languages/types'; import type IconAsset from '@src/types/utils/IconAsset'; -import CONST from '@src/CONST'; import Button from './Button'; import type DotLottieAnimation from './LottieAnimations/types'; import MenuItem from './MenuItem'; diff --git a/src/components/LHNOptionsList/LHNOptionsList.tsx b/src/components/LHNOptionsList/LHNOptionsList.tsx index a25be06bf7ac..efdac8fc4b4d 100644 --- a/src/components/LHNOptionsList/LHNOptionsList.tsx +++ b/src/components/LHNOptionsList/LHNOptionsList.tsx @@ -18,8 +18,8 @@ import useLocalize from '@hooks/useLocalize'; import useNetwork from '@hooks/useNetwork'; import useOnyx from '@hooks/useOnyx'; import usePolicyForMovingExpenses from '@hooks/usePolicyForMovingExpenses'; -import useReportAttributes from '@hooks/useReportAttributes'; import usePrevious from '@hooks/usePrevious'; +import useReportAttributes from '@hooks/useReportAttributes'; import useRootNavigationState from '@hooks/useRootNavigationState'; import useScrollEventEmitter from '@hooks/useScrollEventEmitter'; import useTheme from '@hooks/useTheme'; diff --git a/src/components/MoneyRequestConfirmationListFooter.tsx b/src/components/MoneyRequestConfirmationListFooter.tsx index 6bbe965d4439..7a82d1785e90 100644 --- a/src/components/MoneyRequestConfirmationListFooter.tsx +++ b/src/components/MoneyRequestConfirmationListFooter.tsx @@ -12,9 +12,9 @@ import useLocalize from '@hooks/useLocalize'; import useNetwork from '@hooks/useNetwork'; import useOnyx from '@hooks/useOnyx'; import useOutstandingReports from '@hooks/useOutstandingReports'; -import useReportAttributes from '@hooks/useReportAttributes'; import usePolicyForMovingExpenses from '@hooks/usePolicyForMovingExpenses'; import usePrevious from '@hooks/usePrevious'; +import useReportAttributes from '@hooks/useReportAttributes'; import useThemeStyles from '@hooks/useThemeStyles'; import {getDecodedCategoryName} from '@libs/CategoryUtils'; import {convertToDisplayString} from '@libs/CurrencyUtils'; diff --git a/src/components/MoneyRequestReportView/MoneyRequestReportActionsList.tsx b/src/components/MoneyRequestReportView/MoneyRequestReportActionsList.tsx index 0181bb0114ff..139e6bf33ced 100644 --- a/src/components/MoneyRequestReportView/MoneyRequestReportActionsList.tsx +++ b/src/components/MoneyRequestReportView/MoneyRequestReportActionsList.tsx @@ -60,12 +60,12 @@ import markOpenReportEnd from '@libs/telemetry/markOpenReportEnd'; import {isTransactionPendingDelete} from '@libs/TransactionUtils'; import Visibility from '@libs/Visibility'; import isSearchTopmostFullScreenRoute from '@navigation/helpers/isSearchTopmostFullScreenRoute'; -import {ActionListContext} from '@pages/inbox/ReportScreenContext'; import FloatingMessageCounter from '@pages/inbox/report/FloatingMessageCounter'; import getInitialNumToRender from '@pages/inbox/report/getInitialNumReportActionsToRender'; import ReportActionsListItemRenderer from '@pages/inbox/report/ReportActionsListItemRenderer'; import shouldDisplayNewMarkerOnReportAction from '@pages/inbox/report/shouldDisplayNewMarkerOnReportAction'; import useReportUnreadMessageScrollTracking from '@pages/inbox/report/useReportUnreadMessageScrollTracking'; +import {ActionListContext} from '@pages/inbox/ReportScreenContext'; import variables from '@styles/variables'; import {openReport, readNewestAction, subscribeToNewActionEvent} from '@userActions/Report'; import CONST from '@src/CONST'; diff --git a/src/components/MoneyRequestReportView/MoneyRequestReportNavigation.tsx b/src/components/MoneyRequestReportView/MoneyRequestReportNavigation.tsx index 699f026d3879..1267749a019c 100644 --- a/src/components/MoneyRequestReportView/MoneyRequestReportNavigation.tsx +++ b/src/components/MoneyRequestReportView/MoneyRequestReportNavigation.tsx @@ -2,11 +2,11 @@ import React, {useEffect} from 'react'; import {View} from 'react-native'; import PrevNextButtons from '@components/PrevNextButtons'; import Text from '@components/Text'; +import useActionLoadingReportIDs from '@hooks/useActionLoadingReportIDs'; import useArchivedReportsIdSet from '@hooks/useArchivedReportsIdSet'; import useCurrentUserPersonalDetails from '@hooks/useCurrentUserPersonalDetails'; import useLocalize from '@hooks/useLocalize'; import useOnyx from '@hooks/useOnyx'; -import useActionLoadingReportIDs from '@hooks/useActionLoadingReportIDs'; import useThemeStyles from '@hooks/useThemeStyles'; import {selectFilteredReportActions} from '@libs/ReportUtils'; import {getSections, getSortedSections} from '@libs/SearchUIUtils'; diff --git a/src/components/MultifactorAuthentication/Context/stateReducer.ts b/src/components/MultifactorAuthentication/Context/stateReducer.ts index b420d39bc69a..9d21ceb03426 100644 --- a/src/components/MultifactorAuthentication/Context/stateReducer.ts +++ b/src/components/MultifactorAuthentication/Context/stateReducer.ts @@ -1,5 +1,5 @@ -import CONST from '@src/CONST'; import {MULTIFACTOR_AUTHENTICATION_SCENARIO_CONFIG} from '@components/MultifactorAuthentication/config'; +import CONST from '@src/CONST'; import type {Action, MultifactorAuthenticationState} from './types'; const DEFAULT_STATE: MultifactorAuthenticationState = { diff --git a/src/components/MultifactorAuthentication/components/AuthenticationMethodDescription.tsx b/src/components/MultifactorAuthentication/components/AuthenticationMethodDescription.tsx index 3392acddaedf..05d0909d709d 100644 --- a/src/components/MultifactorAuthentication/components/AuthenticationMethodDescription.tsx +++ b/src/components/MultifactorAuthentication/components/AuthenticationMethodDescription.tsx @@ -3,9 +3,9 @@ import {useMultifactorAuthenticationState} from '@components/MultifactorAuthenti import Text from '@components/Text'; import useLocalize from '@hooks/useLocalize'; import useThemeStyles from '@hooks/useThemeStyles'; +import {SECURE_STORE_VALUES} from '@libs/MultifactorAuthentication/Biometrics/SecureStore'; import type {AuthTypeName} from '@libs/MultifactorAuthentication/Biometrics/types'; import type {TranslationPaths} from '@src/languages/types'; -import {SECURE_STORE_VALUES} from '@libs/MultifactorAuthentication/Biometrics/SecureStore'; /* eslint-disable @typescript-eslint/naming-convention */ const AUTH_TYPE_TRANSLATION_KEY = { diff --git a/src/components/Navigation/NavigationTabBar/WorkspacesTabButton.tsx b/src/components/Navigation/NavigationTabBar/WorkspacesTabButton.tsx index 54ea0b7269bf..44a1fb86e7ac 100644 --- a/src/components/Navigation/NavigationTabBar/WorkspacesTabButton.tsx +++ b/src/components/Navigation/NavigationTabBar/WorkspacesTabButton.tsx @@ -15,11 +15,11 @@ import useTheme from '@hooks/useTheme'; import useThemeStyles from '@hooks/useThemeStyles'; import useWorkspacesTabIndicatorStatus from '@hooks/useWorkspacesTabIndicatorStatus'; import navigateToWorkspacesPage, {getWorkspaceNavigationRouteState} from '@libs/Navigation/helpers/navigateToWorkspacesPage'; +import type {DomainSplitNavigatorParamList, WorkspaceSplitNavigatorParamList} from '@navigation/types'; import variables from '@styles/variables'; import CONST from '@src/CONST'; import NAVIGATORS from '@src/NAVIGATORS'; import ONYXKEYS from '@src/ONYXKEYS'; -import type {DomainSplitNavigatorParamList, WorkspaceSplitNavigatorParamList} from '@navigation/types'; import type SCREENS from '@src/SCREENS'; import type {Domain, Policy} from '@src/types/onyx'; import getTabIconFill from './getTabIconFill'; diff --git a/src/components/ReportActionItem/MoneyRequestReceiptView.tsx b/src/components/ReportActionItem/MoneyRequestReceiptView.tsx index 96a6912f1c54..5742562d33e4 100644 --- a/src/components/ReportActionItem/MoneyRequestReceiptView.tsx +++ b/src/components/ReportActionItem/MoneyRequestReceiptView.tsx @@ -3,12 +3,13 @@ import React, {useMemo, useState} from 'react'; import {View} from 'react-native'; import type {StyleProp, ViewStyle} from 'react-native'; import type {OnyxCollection, OnyxEntry} from 'react-native-onyx'; -import {ModalActions} from '@components/Modal/Global/ModalContext'; import type {ValueOf} from 'type-fest'; +import {ModalActions} from '@components/Modal/Global/ModalContext'; import OfflineWithFeedback from '@components/OfflineWithFeedback'; import ReceiptAudit, {ReceiptAuditMessages} from '@components/ReceiptAudit'; import ReceiptEmptyState from '@components/ReceiptEmptyState'; import useActiveRoute from '@hooks/useActiveRoute'; +import useCardFeedErrors from '@hooks/useCardFeedErrors'; import useConfirmModal from '@hooks/useConfirmModal'; import useCurrentUserPersonalDetails from '@hooks/useCurrentUserPersonalDetails'; import useEnvironment from '@hooks/useEnvironment'; @@ -19,6 +20,7 @@ import useReportIsArchived from '@hooks/useReportIsArchived'; import useResponsiveLayout from '@hooks/useResponsiveLayout'; import useThemeStyles from '@hooks/useThemeStyles'; import useTransactionViolations from '@hooks/useTransactionViolations'; +import {getBrokenConnectionUrlToFixPersonalCard} from '@libs/CardUtils'; import {getMicroSecondOnyxErrorWithTranslationKey, isReceiptError} from '@libs/ErrorUtils'; import getNonEmptyStringOnyxID from '@libs/getNonEmptyStringOnyxID'; import {getThumbnailAndImageURIs} from '@libs/ReceiptUtils'; @@ -53,8 +55,6 @@ import ROUTES from '@src/ROUTES'; import type * as OnyxTypes from '@src/types/onyx'; import type {TransactionPendingFieldsKey} from '@src/types/onyx/Transaction'; import {isEmptyObject} from '@src/types/utils/EmptyObject'; -import useCardFeedErrors from '@hooks/useCardFeedErrors'; -import {getBrokenConnectionUrlToFixPersonalCard} from '@libs/CardUtils'; import ReportActionItemImage from './ReportActionItemImage'; type MoneyRequestReceiptViewProps = { diff --git a/src/components/ReportActionItem/MoneyRequestView.tsx b/src/components/ReportActionItem/MoneyRequestView.tsx index 9386b7b6b609..a90517fbaf40 100644 --- a/src/components/ReportActionItem/MoneyRequestView.tsx +++ b/src/components/ReportActionItem/MoneyRequestView.tsx @@ -15,6 +15,7 @@ import Text from '@components/Text'; import ViolationMessages from '@components/ViolationMessages'; import {useWideRHPState} from '@components/WideRHPContextProvider'; import useActiveRoute from '@hooks/useActiveRoute'; +import useCardFeedErrors from '@hooks/useCardFeedErrors'; import {useCurrencyListActions} from '@hooks/useCurrencyList'; import useCurrentUserPersonalDetails from '@hooks/useCurrentUserPersonalDetails'; import useEnvironment from '@hooks/useEnvironment'; @@ -23,9 +24,9 @@ import useLocalize from '@hooks/useLocalize'; import useNetwork from '@hooks/useNetwork'; import useOnyx from '@hooks/useOnyx'; import usePermissions from '@hooks/usePermissions'; -import useReportAttributes from '@hooks/useReportAttributes'; import usePolicyForMovingExpenses from '@hooks/usePolicyForMovingExpenses'; import usePrevious from '@hooks/usePrevious'; +import useReportAttributes from '@hooks/useReportAttributes'; import useReportIsArchived from '@hooks/useReportIsArchived'; import useResponsiveLayout from '@hooks/useResponsiveLayout'; import useStyleUtils from '@hooks/useStyleUtils'; @@ -44,7 +45,6 @@ import DistanceRequestUtils from '@libs/DistanceRequestUtils'; import getNonEmptyStringOnyxID from '@libs/getNonEmptyStringOnyxID'; import {getRateFromMerchant} from '@libs/MergeTransactionUtils'; import {hasEnabledOptions} from '@libs/OptionsListUtils'; -import useCardFeedErrors from '@hooks/useCardFeedErrors'; import Parser from '@libs/Parser'; import { canSubmitPerDiemExpenseFromWorkspace, diff --git a/src/components/ReportActionItem/TransactionPreview/TransactionPreviewContent.tsx b/src/components/ReportActionItem/TransactionPreview/TransactionPreviewContent.tsx index 8f373b8bfe3b..5d67878aad01 100644 --- a/src/components/ReportActionItem/TransactionPreview/TransactionPreviewContent.tsx +++ b/src/components/ReportActionItem/TransactionPreview/TransactionPreviewContent.tsx @@ -11,6 +11,7 @@ import ReportActionItemImages from '@components/ReportActionItem/ReportActionIte import UserInfoCellsWithArrow from '@components/SelectionListWithSections/Search/UserInfoCellsWithArrow'; import Text from '@components/Text'; import TransactionPreviewSkeletonView from '@components/TransactionPreviewSkeletonView'; +import useCardFeedErrors from '@hooks/useCardFeedErrors'; import useCurrentUserPersonalDetails from '@hooks/useCurrentUserPersonalDetails'; import useEnvironment from '@hooks/useEnvironment'; import {useMemoizedLazyExpensifyIcons} from '@hooks/useLazyAsset'; @@ -19,6 +20,7 @@ import useOnyx from '@hooks/useOnyx'; import useReportIsArchived from '@hooks/useReportIsArchived'; import useTheme from '@hooks/useTheme'; import useThemeStyles from '@hooks/useThemeStyles'; +import {getBrokenConnectionUrlToFixPersonalCard} from '@libs/CardUtils'; import {getDecodedCategoryName} from '@libs/CategoryUtils'; import {convertToDisplayString} from '@libs/CurrencyUtils'; import getNonEmptyStringOnyxID from '@libs/getNonEmptyStringOnyxID'; @@ -39,8 +41,6 @@ import variables from '@styles/variables'; import CONST from '@src/CONST'; import ONYXKEYS from '@src/ONYXKEYS'; import ROUTES from '@src/ROUTES'; -import useCardFeedErrors from '@hooks/useCardFeedErrors'; -import {getBrokenConnectionUrlToFixPersonalCard} from '@libs/CardUtils'; import type {TransactionPreviewContentProps} from './types'; function TransactionPreviewContent({ diff --git a/src/components/Search/SearchAutocompleteList.tsx b/src/components/Search/SearchAutocompleteList.tsx index 9777e67ee778..1801fe3c9d6e 100644 --- a/src/components/Search/SearchAutocompleteList.tsx +++ b/src/components/Search/SearchAutocompleteList.tsx @@ -14,8 +14,8 @@ import type {SearchQueryItem, SearchQueryListItemProps} from '@components/Select import SearchQueryListItem, {isSearchQueryItem} from '@components/SelectionListWithSections/Search/SearchQueryListItem'; import {useCurrencyListState} from '@hooks/useCurrencyList'; import useCurrentUserPersonalDetails from '@hooks/useCurrentUserPersonalDetails'; -import useFeedKeysWithAssignedCards from '@hooks/useFeedKeysWithAssignedCards'; import useDebounce from '@hooks/useDebounce'; +import useFeedKeysWithAssignedCards from '@hooks/useFeedKeysWithAssignedCards'; import {useMemoizedLazyExpensifyIcons} from '@hooks/useLazyAsset'; import useLocalize from '@hooks/useLocalize'; import useOnyx from '@hooks/useOnyx'; diff --git a/src/components/Search/SearchChartView.tsx b/src/components/Search/SearchChartView.tsx index 79ffb2a3e04b..562c20e6c0dd 100644 --- a/src/components/Search/SearchChartView.tsx +++ b/src/components/Search/SearchChartView.tsx @@ -15,6 +15,7 @@ import type { TransactionYearGroupListItemType, } from '@components/SelectionListWithSections/types'; import {useMemoizedLazyExpensifyIcons} from '@hooks/useLazyAsset'; +import useLocalize from '@hooks/useLocalize'; import useResponsiveLayout from '@hooks/useResponsiveLayout'; import useThemeStyles from '@hooks/useThemeStyles'; import DateUtils from '@libs/DateUtils'; @@ -24,7 +25,6 @@ import {formatToParts} from '@libs/NumberFormatUtils'; import {buildSearchQueryJSON, buildSearchQueryString} from '@libs/SearchQueryUtils'; import CONST from '@src/CONST'; import ROUTES from '@src/ROUTES'; -import useLocalize from '@hooks/useLocalize'; import SearchBarChart from './SearchBarChart'; import SearchLineChart from './SearchLineChart'; import type {ChartView, GroupedItem, SearchGroupBy, SearchQueryJSON} from './types'; diff --git a/src/components/VideoPlayer/BaseVideoPlayer.tsx b/src/components/VideoPlayer/BaseVideoPlayer.tsx index 4d27bd8089ca..f7723bd055d7 100644 --- a/src/components/VideoPlayer/BaseVideoPlayer.tsx +++ b/src/components/VideoPlayer/BaseVideoPlayer.tsx @@ -9,8 +9,8 @@ import {View} from 'react-native'; import {useAnimatedStyle, useSharedValue, withTiming} from 'react-native-reanimated'; import {scheduleOnRN} from 'react-native-worklets'; import AttachmentOfflineIndicator from '@components/AttachmentOfflineIndicator'; -import LoadingIndicator from '@components/LoadingIndicator'; import Hoverable from '@components/Hoverable'; +import LoadingIndicator from '@components/LoadingIndicator'; import PressableWithoutFeedback from '@components/Pressable/PressableWithoutFeedback'; import {useFullScreenContext} from '@components/VideoPlayerContexts/FullScreenContext'; import {usePlaybackActionsContext, usePlaybackStateContext} from '@components/VideoPlayerContexts/PlaybackContext'; diff --git a/src/hooks/useOutstandingReports.ts b/src/hooks/useOutstandingReports.ts index 5dd4d04b0551..7b45c4291de5 100644 --- a/src/hooks/useOutstandingReports.ts +++ b/src/hooks/useOutstandingReports.ts @@ -4,8 +4,8 @@ import CONST from '@src/CONST'; import ONYXKEYS from '@src/ONYXKEYS'; import type {Policy} from '@src/types/onyx'; import {isEmptyObject} from '@src/types/utils/EmptyObject'; -import useOnyx from './useOnyx'; import useMappedPolicies from './useMappedPolicies'; +import useOnyx from './useOnyx'; const policyIdMapper = (policy: OnyxEntry) => policy?.id; diff --git a/src/hooks/useReceiptScanDrop.tsx b/src/hooks/useReceiptScanDrop.tsx index 9b1a57248f93..e35d2e850f1c 100644 --- a/src/hooks/useReceiptScanDrop.tsx +++ b/src/hooks/useReceiptScanDrop.tsx @@ -1,18 +1,18 @@ import {useMemo} from 'react'; +import {setTransactionReport} from '@libs/actions/Transaction'; import {navigateToParticipantPage} from '@libs/IOUUtils'; import Navigation from '@libs/Navigation/Navigation'; import {hasOnlyPersonalPolicies as hasOnlyPersonalPoliciesUtil, isPaidGroupPolicy} from '@libs/PolicyUtils'; import {generateReportID, getPolicyExpenseChat, isSelfDM} from '@libs/ReportUtils'; import {shouldRestrictUserBillableActions} from '@libs/SubscriptionUtils'; -import {setTransactionReport} from '@libs/actions/Transaction'; import type {ReceiptFile} from '@pages/iou/request/step/IOURequestStepScan/types'; +import {initMoneyRequest, setMoneyRequestParticipantsFromReport, setMoneyRequestReceipt} from '@userActions/IOU'; +import {buildOptimisticTransactionAndCreateDraft} from '@userActions/TransactionEdit'; import CONST from '@src/CONST'; import ONYXKEYS from '@src/ONYXKEYS'; import ROUTES from '@src/ROUTES'; import type {Transaction} from '@src/types/onyx'; import type {FileObject} from '@src/types/utils/Attachment'; -import {initMoneyRequest, setMoneyRequestParticipantsFromReport, setMoneyRequestReceipt} from '@userActions/IOU'; -import {buildOptimisticTransactionAndCreateDraft} from '@userActions/TransactionEdit'; import useCurrentUserPersonalDetails from './useCurrentUserPersonalDetails'; import useFilesValidation from './useFilesValidation'; import useOnyx from './useOnyx'; diff --git a/src/hooks/useSearchTypeMenuSections.ts b/src/hooks/useSearchTypeMenuSections.ts index fb170d37435d..ba73505986bc 100644 --- a/src/hooks/useSearchTypeMenuSections.ts +++ b/src/hooks/useSearchTypeMenuSections.ts @@ -11,9 +11,9 @@ import useCardFeedsForDisplay from './useCardFeedsForDisplay'; import useCreateEmptyReportConfirmation from './useCreateEmptyReportConfirmation'; import {useMemoizedLazyExpensifyIcons} from './useLazyAsset'; import useLocalize from './useLocalize'; +import useMappedPolicies from './useMappedPolicies'; import useNetwork from './useNetwork'; import useOnyx from './useOnyx'; -import useMappedPolicies from './useMappedPolicies'; const policyMapper = (policy: OnyxEntry): OnyxEntry => policy && { diff --git a/src/hooks/useSidebarOrderedReports.tsx b/src/hooks/useSidebarOrderedReports.tsx index 64ccd2d1deb3..b64bef834e20 100644 --- a/src/hooks/useSidebarOrderedReports.tsx +++ b/src/hooks/useSidebarOrderedReports.tsx @@ -11,8 +11,8 @@ import {useCurrentReportIDState} from './useCurrentReportID'; import useCurrentUserPersonalDetails from './useCurrentUserPersonalDetails'; import useDeepCompareRef from './useDeepCompareRef'; import useLocalize from './useLocalize'; -import useOnyx from './useOnyx'; import useMappedPolicies from './useMappedPolicies'; +import useOnyx from './useOnyx'; import usePrevious from './usePrevious'; import useReportAttributes from './useReportAttributes'; import useResponsiveLayout from './useResponsiveLayout'; diff --git a/src/languages/de.ts b/src/languages/de.ts index c192fbe4e8e3..d3f33f5f8a22 100644 --- a/src/languages/de.ts +++ b/src/languages/de.ts @@ -131,6 +131,7 @@ import type { ZipCodeExampleFormatParams, } from './params'; import type {TranslationDeepObject} from './types'; + type StateValue = { stateISO: string; stateName: string; diff --git a/src/languages/fr.ts b/src/languages/fr.ts index 3a1a8447a29a..31d85df862ed 100644 --- a/src/languages/fr.ts +++ b/src/languages/fr.ts @@ -131,6 +131,7 @@ import type { ZipCodeExampleFormatParams, } from './params'; import type {TranslationDeepObject} from './types'; + type StateValue = { stateISO: string; stateName: string; diff --git a/src/languages/it.ts b/src/languages/it.ts index a7e7b6e2d95c..b1cdda62ef07 100644 --- a/src/languages/it.ts +++ b/src/languages/it.ts @@ -131,6 +131,7 @@ import type { ZipCodeExampleFormatParams, } from './params'; import type {TranslationDeepObject} from './types'; + type StateValue = { stateISO: string; stateName: string; diff --git a/src/languages/ja.ts b/src/languages/ja.ts index 9fe80606a252..475e97465f69 100644 --- a/src/languages/ja.ts +++ b/src/languages/ja.ts @@ -131,6 +131,7 @@ import type { ZipCodeExampleFormatParams, } from './params'; import type {TranslationDeepObject} from './types'; + type StateValue = { stateISO: string; stateName: string; diff --git a/src/languages/nl.ts b/src/languages/nl.ts index 7a44ef897251..5b0614dc4ea4 100644 --- a/src/languages/nl.ts +++ b/src/languages/nl.ts @@ -131,6 +131,7 @@ import type { ZipCodeExampleFormatParams, } from './params'; import type {TranslationDeepObject} from './types'; + type StateValue = { stateISO: string; stateName: string; diff --git a/src/languages/pl.ts b/src/languages/pl.ts index b73b46f9f54d..aeb1ffe5c968 100644 --- a/src/languages/pl.ts +++ b/src/languages/pl.ts @@ -131,6 +131,7 @@ import type { ZipCodeExampleFormatParams, } from './params'; import type {TranslationDeepObject} from './types'; + type StateValue = { stateISO: string; stateName: string; diff --git a/src/languages/pt-BR.ts b/src/languages/pt-BR.ts index c405664e5db6..1823ca5e601e 100644 --- a/src/languages/pt-BR.ts +++ b/src/languages/pt-BR.ts @@ -131,6 +131,7 @@ import type { ZipCodeExampleFormatParams, } from './params'; import type {TranslationDeepObject} from './types'; + type StateValue = { stateISO: string; stateName: string; diff --git a/src/languages/zh-hans.ts b/src/languages/zh-hans.ts index 2a58ed222cc9..580531067aba 100644 --- a/src/languages/zh-hans.ts +++ b/src/languages/zh-hans.ts @@ -131,6 +131,7 @@ import type { ZipCodeExampleFormatParams, } from './params'; import type {TranslationDeepObject} from './types'; + type StateValue = { stateISO: string; stateName: string; diff --git a/src/libs/CardFeedUtils.ts b/src/libs/CardFeedUtils.ts index 91c2ee93c69c..d1847aa2a03c 100644 --- a/src/libs/CardFeedUtils.ts +++ b/src/libs/CardFeedUtils.ts @@ -1,7 +1,7 @@ -import type {FeedKeysWithAssignedCards} from '@hooks/useFeedKeysWithAssignedCards'; import type {OnyxCollection} from 'react-native-onyx'; import type {LocaleContextProps, LocalizedTranslate} from '@components/LocaleContextProvider'; import type {AdditionalCardProps} from '@components/SelectionListWithSections/Search/CardListItem'; +import type {FeedKeysWithAssignedCards} from '@hooks/useFeedKeysWithAssignedCards'; import type IllustrationsType from '@styles/theme/illustrations/types'; import CONST from '@src/CONST'; import type {CombinedCardFeeds} from '@src/hooks/useCardFeeds'; diff --git a/src/libs/CardUtils.ts b/src/libs/CardUtils.ts index 11227aaa9b1f..322044f5b23e 100644 --- a/src/libs/CardUtils.ts +++ b/src/libs/CardUtils.ts @@ -1,15 +1,16 @@ -import type {FeedKeysWithAssignedCards} from '@hooks/useFeedKeysWithAssignedCards'; import {fromUnixTime, isBefore} from 'date-fns'; import groupBy from 'lodash/groupBy'; import type {OnyxCollection, OnyxEntry} from 'react-native-onyx'; import type {TupleToUnion, ValueOf} from 'type-fest'; import type {LocaleContextProps, LocalizedTranslate} from '@components/LocaleContextProvider'; import type {CombinedCardFeed, CombinedCardFeeds} from '@hooks/useCardFeeds'; +import type {FeedKeysWithAssignedCards} from '@hooks/useFeedKeysWithAssignedCards'; import type IllustrationsType from '@styles/theme/illustrations/types'; import * as Illustrations from '@src/components/Icon/Illustrations'; import CONST from '@src/CONST'; import type {TranslationPaths} from '@src/languages/types'; import ONYXKEYS from '@src/ONYXKEYS'; +import ROUTES from '@src/ROUTES'; import type { BankAccountList, Card, @@ -23,7 +24,6 @@ import type { PrivatePersonalDetails, WorkspaceCardsList, } from '@src/types/onyx'; -import ROUTES from '@src/ROUTES'; import type {UnassignedCard} from '@src/types/onyx/Card'; import type { BankName, diff --git a/src/libs/Navigation/helpers/getAdaptedStateFromPath.ts b/src/libs/Navigation/helpers/getAdaptedStateFromPath.ts index 5385d2b3d782..52377a9f1326 100644 --- a/src/libs/Navigation/helpers/getAdaptedStateFromPath.ts +++ b/src/libs/Navigation/helpers/getAdaptedStateFromPath.ts @@ -1,16 +1,16 @@ +import type {NavigationState, PartialState, getStateFromPath as RNGetStateFromPath, Route} from '@react-navigation/native'; +import {findFocusedRoute} from '@react-navigation/native'; +import pick from 'lodash/pick'; import getInitialSplitNavigatorState from '@libs/Navigation/AppNavigator/createSplitNavigator/getInitialSplitNavigatorState'; import {RHP_TO_DOMAIN, RHP_TO_HOME, RHP_TO_SEARCH, RHP_TO_SETTINGS, RHP_TO_SIDEBAR, RHP_TO_WORKSPACE, RHP_TO_WORKSPACES_LIST} from '@libs/Navigation/linkingConfig/RELATIONS'; import type {NavigationPartialRoute, RootNavigatorParamList} from '@libs/Navigation/types'; import {getReportOrDraftReport} from '@libs/ReportUtils'; import {getSearchParamFromPath} from '@libs/Url'; -import type {NavigationState, PartialState, getStateFromPath as RNGetStateFromPath, Route} from '@react-navigation/native'; -import {findFocusedRoute} from '@react-navigation/native'; import CONST from '@src/CONST'; import NAVIGATORS from '@src/NAVIGATORS'; import type {Route as RoutePath} from '@src/ROUTES'; import ROUTES from '@src/ROUTES'; import SCREENS from '@src/SCREENS'; -import pick from 'lodash/pick'; import getLastSuffixFromPath from './getLastSuffixFromPath'; import getMatchingNewRoute from './getMatchingNewRoute'; import getParamsFromRoute from './getParamsFromRoute'; diff --git a/src/libs/SearchQueryUtils.ts b/src/libs/SearchQueryUtils.ts index 5f38fdebce2a..bdfde8ef1afe 100644 --- a/src/libs/SearchQueryUtils.ts +++ b/src/libs/SearchQueryUtils.ts @@ -1,4 +1,3 @@ -import type {FeedKeysWithAssignedCards} from '@hooks/useFeedKeysWithAssignedCards'; import cloneDeep from 'lodash/cloneDeep'; import type {OnyxCollection} from 'react-native-onyx'; import type {ValueOf} from 'type-fest'; @@ -22,6 +21,7 @@ import type { UserFriendlyKey, UserFriendlyValue, } from '@components/Search/types'; +import type {FeedKeysWithAssignedCards} from '@hooks/useFeedKeysWithAssignedCards'; import CONST from '@src/CONST'; import NAVIGATORS from '@src/NAVIGATORS'; import type {OnyxCollectionKey, OnyxCollectionValuesMapping} from '@src/ONYXKEYS'; diff --git a/src/libs/SearchUIUtils.ts b/src/libs/SearchUIUtils.ts index 6733d90689ba..e25e050633b1 100644 --- a/src/libs/SearchUIUtils.ts +++ b/src/libs/SearchUIUtils.ts @@ -1,6 +1,5 @@ /* eslint-disable max-lines */ // TODO: Remove this disable once SearchUIUtils is refactored (see dedicated refactor issue) -import type {FeedKeysWithAssignedCards} from '@hooks/useFeedKeysWithAssignedCards'; import {addDays, endOfMonth, format, parse, startOfMonth, startOfYear, subDays, subMonths} from 'date-fns'; import type {TextStyle, ViewStyle} from 'react-native'; import type {OnyxCollection, OnyxEntry} from 'react-native-onyx'; @@ -55,6 +54,7 @@ import type { TransactionWithdrawalIDGroupListItemType, TransactionYearGroupListItemType, } from '@components/SelectionListWithSections/types'; +import type {FeedKeysWithAssignedCards} from '@hooks/useFeedKeysWithAssignedCards'; import type {ThemeColors} from '@styles/theme/types'; import * as Expensicons from '@src/components/Icon/Expensicons'; import CONST from '@src/CONST'; diff --git a/src/pages/ReportDetailsPage.tsx b/src/pages/ReportDetailsPage.tsx index ce32a79fcb54..4a164662a6ea 100644 --- a/src/pages/ReportDetailsPage.tsx +++ b/src/pages/ReportDetailsPage.tsx @@ -35,9 +35,9 @@ import useLocalize from '@hooks/useLocalize'; import useNetwork from '@hooks/useNetwork'; import useOnyx from '@hooks/useOnyx'; import usePaginatedReportActions from '@hooks/usePaginatedReportActions'; -import useReportAttributes from '@hooks/useReportAttributes'; import useParentReportAction from '@hooks/useParentReportAction'; import usePreferredPolicy from '@hooks/usePreferredPolicy'; +import useReportAttributes from '@hooks/useReportAttributes'; import useReportIsArchived from '@hooks/useReportIsArchived'; import useResponsiveLayout from '@hooks/useResponsiveLayout'; import useThemeStyles from '@hooks/useThemeStyles'; diff --git a/src/pages/Share/SubmitDetailsPage.tsx b/src/pages/Share/SubmitDetailsPage.tsx index 90df6dc45b85..08d61bbdd1ca 100644 --- a/src/pages/Share/SubmitDetailsPage.tsx +++ b/src/pages/Share/SubmitDetailsPage.tsx @@ -12,9 +12,9 @@ import useCurrentUserPersonalDetails from '@hooks/useCurrentUserPersonalDetails' import useLocalize from '@hooks/useLocalize'; import useOnyx from '@hooks/useOnyx'; import usePermissions from '@hooks/usePermissions'; -import useReportAttributes from '@hooks/useReportAttributes'; import usePersonalPolicy from '@hooks/usePersonalPolicy'; import usePrivateIsArchivedMap from '@hooks/usePrivateIsArchivedMap'; +import useReportAttributes from '@hooks/useReportAttributes'; import useReportIsArchived from '@hooks/useReportIsArchived'; import useThemeStyles from '@hooks/useThemeStyles'; import type {GpsPoint} from '@libs/actions/IOU'; diff --git a/src/pages/inbox/report/PureReportActionItem.tsx b/src/pages/inbox/report/PureReportActionItem.tsx index 260bb9ece480..be7ed7062c77 100644 --- a/src/pages/inbox/report/PureReportActionItem.tsx +++ b/src/pages/inbox/report/PureReportActionItem.tsx @@ -54,6 +54,7 @@ import useTheme from '@hooks/useTheme'; import useThemeStyles from '@hooks/useThemeStyles'; import {cleanUpMoneyRequest} from '@libs/actions/IOU'; import {resolveSuggestedFollowup} from '@libs/actions/Report/SuggestedFollowup'; +import {isPersonalCardBrokenConnection} from '@libs/CardUtils'; import ControlSelection from '@libs/ControlSelection'; import {convertToDisplayString} from '@libs/CurrencyUtils'; import {canUseTouchScreen} from '@libs/DeviceCapabilities'; @@ -242,7 +243,6 @@ import type * as OnyxTypes from '@src/types/onyx'; import type {Errors} from '@src/types/onyx/OnyxCommon'; import type {JoinWorkspaceResolution, OriginalMessageMovedTransaction, OriginalMessageUnreportedTransaction} from '@src/types/onyx/OriginalMessage'; import {isEmptyObject, isEmptyValueObject} from '@src/types/utils/EmptyObject'; -import {isPersonalCardBrokenConnection} from '@libs/CardUtils'; import {RestrictedReadOnlyContextMenuActions} from './ContextMenu/ContextMenuActions'; import MiniReportActionContextMenu from './ContextMenu/MiniReportActionContextMenu'; import type {ContextMenuAnchor} from './ContextMenu/ReportActionContextMenu'; diff --git a/src/pages/inbox/report/ReportActionCompose/AttachmentPickerWithMenuItems.tsx b/src/pages/inbox/report/ReportActionCompose/AttachmentPickerWithMenuItems.tsx index 363a7b2cbfa9..2be025899398 100644 --- a/src/pages/inbox/report/ReportActionCompose/AttachmentPickerWithMenuItems.tsx +++ b/src/pages/inbox/report/ReportActionCompose/AttachmentPickerWithMenuItems.tsx @@ -15,6 +15,7 @@ import PressableWithFeedback from '@components/Pressable/PressableWithFeedback'; import Tooltip from '@components/Tooltip/PopoverAnchorTooltip'; import useCreateEmptyReportConfirmation from '@hooks/useCreateEmptyReportConfirmation'; import useEnvironment from '@hooks/useEnvironment'; +import useHasEmptyReportsForPolicy from '@hooks/useHasEmptyReportsForPolicy'; import {useMemoizedLazyExpensifyIcons} from '@hooks/useLazyAsset'; import useLocalize from '@hooks/useLocalize'; import useOnyx from '@hooks/useOnyx'; @@ -22,7 +23,6 @@ import usePermissions from '@hooks/usePermissions'; import usePopoverPosition from '@hooks/usePopoverPosition'; import usePreferredPolicy from '@hooks/usePreferredPolicy'; import usePrevious from '@hooks/usePrevious'; -import useHasEmptyReportsForPolicy from '@hooks/useHasEmptyReportsForPolicy'; import useReportIsArchived from '@hooks/useReportIsArchived'; import useResponsiveLayout from '@hooks/useResponsiveLayout'; import useTheme from '@hooks/useTheme'; diff --git a/src/pages/inbox/sidebar/FloatingActionButtonAndPopover.tsx b/src/pages/inbox/sidebar/FloatingActionButtonAndPopover.tsx index 0faa9d023b0f..dfa3cbf591de 100644 --- a/src/pages/inbox/sidebar/FloatingActionButtonAndPopover.tsx +++ b/src/pages/inbox/sidebar/FloatingActionButtonAndPopover.tsx @@ -20,10 +20,10 @@ import useHasEmptyReportsForPolicy from '@hooks/useHasEmptyReportsForPolicy'; import useIsPaidPolicyAdmin from '@hooks/useIsPaidPolicyAdmin'; import {useMemoizedLazyExpensifyIcons} from '@hooks/useLazyAsset'; import useLocalize from '@hooks/useLocalize'; +import useMappedPolicies from '@hooks/useMappedPolicies'; import useNetwork from '@hooks/useNetwork'; import useOnyx from '@hooks/useOnyx'; import usePermissions from '@hooks/usePermissions'; -import useMappedPolicies from '@hooks/useMappedPolicies'; import usePreferredPolicy from '@hooks/usePreferredPolicy'; import usePrevious from '@hooks/usePrevious'; import useReportIsArchived from '@hooks/useReportIsArchived'; diff --git a/src/pages/iou/request/step/IOURequestStepAmount.tsx b/src/pages/iou/request/step/IOURequestStepAmount.tsx index 98567a376da5..58e25c0c8f41 100644 --- a/src/pages/iou/request/step/IOURequestStepAmount.tsx +++ b/src/pages/iou/request/step/IOURequestStepAmount.tsx @@ -11,10 +11,10 @@ import useDuplicateTransactionsAndViolations from '@hooks/useDuplicateTransactio import useLocalize from '@hooks/useLocalize'; import useOnyx from '@hooks/useOnyx'; import usePermissions from '@hooks/usePermissions'; -import useReportAttributes from '@hooks/useReportAttributes'; import usePersonalPolicy from '@hooks/usePersonalPolicy'; import usePolicyForMovingExpenses from '@hooks/usePolicyForMovingExpenses'; import usePrivateIsArchivedMap from '@hooks/usePrivateIsArchivedMap'; +import useReportAttributes from '@hooks/useReportAttributes'; import useReportIsArchived from '@hooks/useReportIsArchived'; import useSelfDMReport from '@hooks/useSelfDMReport'; import useShowNotFoundPageInIOUStep from '@hooks/useShowNotFoundPageInIOUStep'; diff --git a/src/pages/iou/request/step/IOURequestStepConfirmation.tsx b/src/pages/iou/request/step/IOURequestStepConfirmation.tsx index 57659881545c..959f05a4f9af 100644 --- a/src/pages/iou/request/step/IOURequestStepConfirmation.tsx +++ b/src/pages/iou/request/step/IOURequestStepConfirmation.tsx @@ -22,12 +22,12 @@ import useNetwork from '@hooks/useNetwork'; import useOnboardingTaskInformation from '@hooks/useOnboardingTaskInformation'; import useOnyx from '@hooks/useOnyx'; import useOptimisticDraftTransactions from '@hooks/useOptimisticDraftTransactions'; -import useReportAttributes from '@hooks/useReportAttributes'; import useParentReportAction from '@hooks/useParentReportAction'; import useParticipantsInvoiceReport from '@hooks/useParticipantsInvoiceReport'; import usePermissions from '@hooks/usePermissions'; import usePolicyForTransaction from '@hooks/usePolicyForTransaction'; import usePrivateIsArchivedMap from '@hooks/usePrivateIsArchivedMap'; +import useReportAttributes from '@hooks/useReportAttributes'; import useTheme from '@hooks/useTheme'; import useThemeStyles from '@hooks/useThemeStyles'; import {completeTestDriveTask} from '@libs/actions/Task'; diff --git a/src/pages/iou/request/step/IOURequestStepDistance.tsx b/src/pages/iou/request/step/IOURequestStepDistance.tsx index 876b26e70455..218ac56c6c52 100644 --- a/src/pages/iou/request/step/IOURequestStepDistance.tsx +++ b/src/pages/iou/request/step/IOURequestStepDistance.tsx @@ -19,11 +19,11 @@ import useLocalize from '@hooks/useLocalize'; import useNetwork from '@hooks/useNetwork'; import useOnyx from '@hooks/useOnyx'; import usePermissions from '@hooks/usePermissions'; -import useReportAttributes from '@hooks/useReportAttributes'; import usePersonalPolicy from '@hooks/usePersonalPolicy'; import usePolicy from '@hooks/usePolicy'; import usePolicyForMovingExpenses from '@hooks/usePolicyForMovingExpenses'; import usePrevious from '@hooks/usePrevious'; +import useReportAttributes from '@hooks/useReportAttributes'; import useSelfDMReport from '@hooks/useSelfDMReport'; import useShowNotFoundPageInIOUStep from '@hooks/useShowNotFoundPageInIOUStep'; import useThemeStyles from '@hooks/useThemeStyles'; diff --git a/src/pages/iou/request/step/IOURequestStepDistanceGPS/index.native.tsx b/src/pages/iou/request/step/IOURequestStepDistanceGPS/index.native.tsx index 9d59509037a5..d1a0b710bc2d 100644 --- a/src/pages/iou/request/step/IOURequestStepDistanceGPS/index.native.tsx +++ b/src/pages/iou/request/step/IOURequestStepDistanceGPS/index.native.tsx @@ -6,10 +6,10 @@ import useDefaultExpensePolicy from '@hooks/useDefaultExpensePolicy'; import useLocalize from '@hooks/useLocalize'; import useOnyx from '@hooks/useOnyx'; import usePermissions from '@hooks/usePermissions'; -import useReportAttributes from '@hooks/useReportAttributes'; import usePersonalPolicy from '@hooks/usePersonalPolicy'; import usePolicy from '@hooks/usePolicy'; import usePolicyForMovingExpenses from '@hooks/usePolicyForMovingExpenses'; +import useReportAttributes from '@hooks/useReportAttributes'; import useSelfDMReport from '@hooks/useSelfDMReport'; import useShowNotFoundPageInIOUStep from '@hooks/useShowNotFoundPageInIOUStep'; import useThemeStyles from '@hooks/useThemeStyles'; diff --git a/src/pages/iou/request/step/IOURequestStepDistanceManual.tsx b/src/pages/iou/request/step/IOURequestStepDistanceManual.tsx index 7fe39c1264bf..77a93711502e 100644 --- a/src/pages/iou/request/step/IOURequestStepDistanceManual.tsx +++ b/src/pages/iou/request/step/IOURequestStepDistanceManual.tsx @@ -13,9 +13,9 @@ import useLocalize from '@hooks/useLocalize'; import useOnyx from '@hooks/useOnyx'; import usePermissions from '@hooks/usePermissions'; import usePersonalPolicy from '@hooks/usePersonalPolicy'; -import useReportAttributes from '@hooks/useReportAttributes'; import usePolicy from '@hooks/usePolicy'; import usePolicyForMovingExpenses from '@hooks/usePolicyForMovingExpenses'; +import useReportAttributes from '@hooks/useReportAttributes'; import useResponsiveLayout from '@hooks/useResponsiveLayout'; import useSelfDMReport from '@hooks/useSelfDMReport'; import useThemeStyles from '@hooks/useThemeStyles'; diff --git a/src/pages/iou/request/step/IOURequestStepDistanceMap.tsx b/src/pages/iou/request/step/IOURequestStepDistanceMap.tsx index cdcd111e5eef..0d5aa7028b8e 100644 --- a/src/pages/iou/request/step/IOURequestStepDistanceMap.tsx +++ b/src/pages/iou/request/step/IOURequestStepDistanceMap.tsx @@ -20,10 +20,10 @@ import useNetwork from '@hooks/useNetwork'; import useOnyx from '@hooks/useOnyx'; import usePermissions from '@hooks/usePermissions'; import usePersonalPolicy from '@hooks/usePersonalPolicy'; -import useReportAttributes from '@hooks/useReportAttributes'; import usePolicy from '@hooks/usePolicy'; import usePolicyForMovingExpenses from '@hooks/usePolicyForMovingExpenses'; import usePrevious from '@hooks/usePrevious'; +import useReportAttributes from '@hooks/useReportAttributes'; import useSelfDMReport from '@hooks/useSelfDMReport'; import useShowNotFoundPageInIOUStep from '@hooks/useShowNotFoundPageInIOUStep'; import useThemeStyles from '@hooks/useThemeStyles'; diff --git a/src/pages/iou/request/step/IOURequestStepDistanceOdometer.tsx b/src/pages/iou/request/step/IOURequestStepDistanceOdometer.tsx index 9287d20bab22..5362bc5c5871 100644 --- a/src/pages/iou/request/step/IOURequestStepDistanceOdometer.tsx +++ b/src/pages/iou/request/step/IOURequestStepDistanceOdometer.tsx @@ -15,9 +15,9 @@ import useDefaultExpensePolicy from '@hooks/useDefaultExpensePolicy'; import useLocalize from '@hooks/useLocalize'; import useOnyx from '@hooks/useOnyx'; import usePersonalPolicy from '@hooks/usePersonalPolicy'; -import useReportAttributes from '@hooks/useReportAttributes'; import usePolicy from '@hooks/usePolicy'; import usePolicyForMovingExpenses from '@hooks/usePolicyForMovingExpenses'; +import useReportAttributes from '@hooks/useReportAttributes'; import useResponsiveLayout from '@hooks/useResponsiveLayout'; import useSelfDMReport from '@hooks/useSelfDMReport'; import useStyleUtils from '@hooks/useStyleUtils'; diff --git a/src/pages/iou/request/step/IOURequestStepParticipants.tsx b/src/pages/iou/request/step/IOURequestStepParticipants.tsx index 99da565eebbd..326ff6bba17b 100644 --- a/src/pages/iou/request/step/IOURequestStepParticipants.tsx +++ b/src/pages/iou/request/step/IOURequestStepParticipants.tsx @@ -4,9 +4,9 @@ import type {OnyxEntry} from 'react-native-onyx'; import FormHelpMessage from '@components/FormHelpMessage'; import useCurrentUserPersonalDetails from '@hooks/useCurrentUserPersonalDetails'; import useLocalize from '@hooks/useLocalize'; +import useMappedPolicies from '@hooks/useMappedPolicies'; import useOnyx from '@hooks/useOnyx'; import useOptimisticDraftTransactions from '@hooks/useOptimisticDraftTransactions'; -import useMappedPolicies from '@hooks/useMappedPolicies'; import usePolicyForMovingExpenses from '@hooks/usePolicyForMovingExpenses'; import useThemeStyles from '@hooks/useThemeStyles'; import {setTransactionReport} from '@libs/actions/Transaction'; diff --git a/src/pages/iou/request/step/IOURequestStepScan/index.native.tsx b/src/pages/iou/request/step/IOURequestStepScan/index.native.tsx index 45e96ec3a345..beb3496690a9 100644 --- a/src/pages/iou/request/step/IOURequestStepScan/index.native.tsx +++ b/src/pages/iou/request/step/IOURequestStepScan/index.native.tsx @@ -27,12 +27,12 @@ import useFilesValidation from '@hooks/useFilesValidation'; import useIOUUtils from '@hooks/useIOUUtils'; import {useMemoizedLazyExpensifyIcons, useMemoizedLazyIllustrations} from '@hooks/useLazyAsset'; import useLocalize from '@hooks/useLocalize'; -import useReportAttributes from '@hooks/useReportAttributes'; import useOnyx from '@hooks/useOnyx'; import useOptimisticDraftTransactions from '@hooks/useOptimisticDraftTransactions'; import usePermissions from '@hooks/usePermissions'; import usePersonalPolicy from '@hooks/usePersonalPolicy'; import usePolicy from '@hooks/usePolicy'; +import useReportAttributes from '@hooks/useReportAttributes'; import useSelfDMReport from '@hooks/useSelfDMReport'; import useTheme from '@hooks/useTheme'; import useThemeStyles from '@hooks/useThemeStyles'; diff --git a/src/pages/iou/request/step/IOURequestStepScan/index.tsx b/src/pages/iou/request/step/IOURequestStepScan/index.tsx index 02f65ee53af4..1ef606abd801 100644 --- a/src/pages/iou/request/step/IOURequestStepScan/index.tsx +++ b/src/pages/iou/request/step/IOURequestStepScan/index.tsx @@ -27,12 +27,12 @@ import useIOUUtils from '@hooks/useIOUUtils'; import {useMemoizedLazyExpensifyIcons, useMemoizedLazyIllustrations} from '@hooks/useLazyAsset'; import useLocalize from '@hooks/useLocalize'; import useOnyx from '@hooks/useOnyx'; -import useReportAttributes from '@hooks/useReportAttributes'; import useOptimisticDraftTransactions from '@hooks/useOptimisticDraftTransactions'; import usePermissions from '@hooks/usePermissions'; import usePersonalPolicy from '@hooks/usePersonalPolicy'; import usePolicy from '@hooks/usePolicy'; import usePolicyForMovingExpenses from '@hooks/usePolicyForMovingExpenses'; +import useReportAttributes from '@hooks/useReportAttributes'; import useResponsiveLayout from '@hooks/useResponsiveLayout'; import useSelfDMReport from '@hooks/useSelfDMReport'; import useTheme from '@hooks/useTheme'; diff --git a/src/pages/settings/Profile/CustomStatus/VacationDelegatePage.tsx b/src/pages/settings/Profile/CustomStatus/VacationDelegatePage.tsx index 33f2630b83d7..6a04ef257b1e 100644 --- a/src/pages/settings/Profile/CustomStatus/VacationDelegatePage.tsx +++ b/src/pages/settings/Profile/CustomStatus/VacationDelegatePage.tsx @@ -5,8 +5,8 @@ import HeaderWithBackButton from '@components/HeaderWithBackButton'; import MenuItem from '@components/MenuItem'; import ScreenWrapper from '@components/ScreenWrapper'; import UserListItem from '@components/SelectionList/ListItem/UserListItem'; -import Text from '@components/Text'; import SelectionListWithSections from '@components/SelectionList/SelectionListWithSections'; +import Text from '@components/Text'; import useCurrentUserPersonalDetails from '@hooks/useCurrentUserPersonalDetails'; import {useMemoizedLazyExpensifyIcons} from '@hooks/useLazyAsset'; import useLocalize from '@hooks/useLocalize'; diff --git a/src/pages/settings/Rules/Fields/AddCategoryPage.tsx b/src/pages/settings/Rules/Fields/AddCategoryPage.tsx index a02c1e55b9f7..c455ca275eab 100644 --- a/src/pages/settings/Rules/Fields/AddCategoryPage.tsx +++ b/src/pages/settings/Rules/Fields/AddCategoryPage.tsx @@ -7,12 +7,12 @@ import {getAvailableNonPersonalPolicyCategories, getDecodedCategoryName} from '@ import Navigation from '@libs/Navigation/Navigation'; import type {PlatformStackScreenProps} from '@libs/Navigation/PlatformStackNavigation/types'; import type {SettingsNavigatorParamList} from '@libs/Navigation/types'; +import CONST from '@src/CONST'; import ONYXKEYS from '@src/ONYXKEYS'; import ROUTES from '@src/ROUTES'; import type SCREENS from '@src/SCREENS'; import type {PolicyCategories} from '@src/types/onyx'; import {getEmptyObject} from '@src/types/utils/EmptyObject'; -import CONST from '@src/CONST'; type AddCategoryPageProps = PlatformStackScreenProps; diff --git a/src/pages/settings/Rules/RulePageBase.tsx b/src/pages/settings/Rules/RulePageBase.tsx index d3b800c5d402..fa6923727b51 100644 --- a/src/pages/settings/Rules/RulePageBase.tsx +++ b/src/pages/settings/Rules/RulePageBase.tsx @@ -17,6 +17,7 @@ import {clearDraftRule, saveExpenseRule, updateDraftRule} from '@libs/actions/Us import {getAvailableNonPersonalPolicyCategories, getDecodedCategoryName} from '@libs/CategoryUtils'; import {extractRuleFromForm, getKeyForRule} from '@libs/ExpenseRuleUtils'; import Navigation from '@libs/Navigation/Navigation'; +import {hasEnabledOptions} from '@libs/OptionsListUtils'; import Parser from '@libs/Parser'; import {getAllTaxRatesNamesAndValues, getCleanedTagName, getTagLists} from '@libs/PolicyUtils'; import {getEnabledTags} from '@libs/TagsOptionsListUtils'; @@ -29,7 +30,6 @@ import ROUTES from '@src/ROUTES'; import type {ExpenseRuleForm} from '@src/types/form'; import type {ExpenseRule, PolicyCategories, PolicyTagLists} from '@src/types/onyx'; import getEmptyArray from '@src/types/utils/getEmptyArray'; -import {hasEnabledOptions} from '@libs/OptionsListUtils'; type RulePageBaseProps = { titleKey: TranslationPaths; diff --git a/src/pages/settings/Subscription/SubscriptionPlan/index.tsx b/src/pages/settings/Subscription/SubscriptionPlan/index.tsx index 6863c54f0731..0ef4cf4ad6ad 100644 --- a/src/pages/settings/Subscription/SubscriptionPlan/index.tsx +++ b/src/pages/settings/Subscription/SubscriptionPlan/index.tsx @@ -8,8 +8,8 @@ import {useMemoizedLazyIllustrations} from '@hooks/useLazyAsset'; import useLocalize from '@hooks/useLocalize'; import useSubscriptionPlan from '@hooks/useSubscriptionPlan'; import useThemeStyles from '@hooks/useThemeStyles'; -import CONST from '@src/CONST'; import variables from '@styles/variables'; +import CONST from '@src/CONST'; import ComparePlansModal from './ComparePlansModal'; import SaveWithExpensifyButton from './SaveWithExpensifyButton'; import SubscriptionPlanCard from './SubscriptionPlanCard'; diff --git a/src/pages/settings/Wallet/ExpensifyCardPage/FrozenCardIndicator.tsx b/src/pages/settings/Wallet/ExpensifyCardPage/FrozenCardIndicator.tsx index c0048960b7ef..7961179823bd 100644 --- a/src/pages/settings/Wallet/ExpensifyCardPage/FrozenCardIndicator.tsx +++ b/src/pages/settings/Wallet/ExpensifyCardPage/FrozenCardIndicator.tsx @@ -16,8 +16,8 @@ import useThemeStyles from '@hooks/useThemeStyles'; import DateUtils from '@libs/DateUtils'; import {getDisplayNameOrDefault} from '@libs/PersonalDetailsUtils'; import variables from '@styles/variables'; -import ONYXKEYS from '@src/ONYXKEYS'; import CONST from '@src/CONST'; +import ONYXKEYS from '@src/ONYXKEYS'; type FrozenCardIndicatorProps = { cardID: string; diff --git a/src/pages/settings/Wallet/ExpensifyCardPage/index.tsx b/src/pages/settings/Wallet/ExpensifyCardPage/index.tsx index 32f900a3b9d5..9664606f5f16 100644 --- a/src/pages/settings/Wallet/ExpensifyCardPage/index.tsx +++ b/src/pages/settings/Wallet/ExpensifyCardPage/index.tsx @@ -26,8 +26,8 @@ import useNonPersonalCardList from '@hooks/useNonPersonalCardList'; import useOnyx from '@hooks/useOnyx'; import usePermissions from '@hooks/usePermissions'; import useThemeStyles from '@hooks/useThemeStyles'; -import {resetValidateActionCodeSent} from '@libs/actions/User'; import {freezeCard, unfreezeCard} from '@libs/actions/Card'; +import {resetValidateActionCodeSent} from '@libs/actions/User'; import {formatCardExpiration, getDomainCards, getTranslationKeyForLimitType, isCardFrozen, maskCard, maskPin} from '@libs/CardUtils'; import {convertToDisplayString, getCurrencyKeyByCountryCode} from '@libs/CurrencyUtils'; import DateUtils from '@libs/DateUtils'; diff --git a/src/pages/signin/SignInPageLayout/SignInHeroCopy.tsx b/src/pages/signin/SignInPageLayout/SignInHeroCopy.tsx index a4749a08a306..0a67f3e5bbcb 100644 --- a/src/pages/signin/SignInPageLayout/SignInHeroCopy.tsx +++ b/src/pages/signin/SignInPageLayout/SignInHeroCopy.tsx @@ -5,8 +5,8 @@ import useLocalize from '@hooks/useLocalize'; import useResponsiveLayout from '@hooks/useResponsiveLayout'; import useStyleUtils from '@hooks/useStyleUtils'; import useThemeStyles from '@hooks/useThemeStyles'; -import CONST from '@src/CONST'; import variables from '@styles/variables'; +import CONST from '@src/CONST'; import type {SignInPageLayoutProps} from './types'; type SignInHeroCopyProps = Pick; diff --git a/src/pages/signin/SignInPageLayout/SignInPageContent.tsx b/src/pages/signin/SignInPageLayout/SignInPageContent.tsx index d1442c9b81c4..e5ea93f1cf82 100755 --- a/src/pages/signin/SignInPageLayout/SignInPageContent.tsx +++ b/src/pages/signin/SignInPageLayout/SignInPageContent.tsx @@ -7,8 +7,8 @@ import Text from '@components/Text'; import useResponsiveLayout from '@hooks/useResponsiveLayout'; import useStyleUtils from '@hooks/useStyleUtils'; import useThemeStyles from '@hooks/useThemeStyles'; -import CONST from '@src/CONST'; import variables from '@styles/variables'; +import CONST from '@src/CONST'; import SignInHeroImage from './SignInHeroImage'; import type {SignInPageLayoutProps} from './types'; diff --git a/src/pages/workspace/WorkspacesListPageHeaderButton.tsx b/src/pages/workspace/WorkspacesListPageHeaderButton.tsx index 6a6cb7215b1d..93eaaf439fbe 100755 --- a/src/pages/workspace/WorkspacesListPageHeaderButton.tsx +++ b/src/pages/workspace/WorkspacesListPageHeaderButton.tsx @@ -7,8 +7,8 @@ import useResponsiveLayout from '@hooks/useResponsiveLayout'; import useThemeStyles from '@hooks/useThemeStyles'; import interceptAnonymousUser from '@libs/interceptAnonymousUser'; import Navigation from '@libs/Navigation/Navigation'; -import ROUTES from '@src/ROUTES'; import CONST from '@src/CONST'; +import ROUTES from '@src/ROUTES'; type WorkspacesListPageHeaderButtonProps = { /** Whether the button to add a new workspace should be shown. */ diff --git a/src/pages/workspace/invoices/WorkspaceInvoicingDetailsSection.tsx b/src/pages/workspace/invoices/WorkspaceInvoicingDetailsSection.tsx index c311e742843f..887dce7dcbb3 100644 --- a/src/pages/workspace/invoices/WorkspaceInvoicingDetailsSection.tsx +++ b/src/pages/workspace/invoices/WorkspaceInvoicingDetailsSection.tsx @@ -6,9 +6,9 @@ import useOnyx from '@hooks/useOnyx'; import useResponsiveLayout from '@hooks/useResponsiveLayout'; import useThemeStyles from '@hooks/useThemeStyles'; import Navigation from '@navigation/Navigation'; +import CONST from '@src/CONST'; import ONYXKEYS from '@src/ONYXKEYS'; import ROUTES from '@src/ROUTES'; -import CONST from '@src/CONST'; type WorkspaceInvoicingDetailsSectionProps = { /** The current policy ID */ diff --git a/src/pages/workspace/rules/MerchantRules/AddCategoryPage.tsx b/src/pages/workspace/rules/MerchantRules/AddCategoryPage.tsx index ac5802d03af4..7b1048f53fd3 100644 --- a/src/pages/workspace/rules/MerchantRules/AddCategoryPage.tsx +++ b/src/pages/workspace/rules/MerchantRules/AddCategoryPage.tsx @@ -6,10 +6,10 @@ import {getDecodedCategoryName} from '@libs/CategoryUtils'; import Navigation from '@libs/Navigation/Navigation'; import type {PlatformStackScreenProps} from '@libs/Navigation/PlatformStackNavigation/types'; import type {SettingsNavigatorParamList} from '@libs/Navigation/types'; +import CONST from '@src/CONST'; import ONYXKEYS from '@src/ONYXKEYS'; import ROUTES from '@src/ROUTES'; import type SCREENS from '@src/SCREENS'; -import CONST from '@src/CONST'; type AddCategoryPageProps = PlatformStackScreenProps; diff --git a/src/pages/workspace/rules/MerchantRules/MerchantRulePageBase.tsx b/src/pages/workspace/rules/MerchantRules/MerchantRulePageBase.tsx index e458a7116478..44def6f9bb24 100644 --- a/src/pages/workspace/rules/MerchantRules/MerchantRulePageBase.tsx +++ b/src/pages/workspace/rules/MerchantRules/MerchantRulePageBase.tsx @@ -20,6 +20,7 @@ import {deletePolicyCodingRule, setPolicyCodingRule} from '@libs/actions/Policy/ import {clearDraftMerchantRule, setDraftMerchantRule} from '@libs/actions/User'; import {getDecodedCategoryName} from '@libs/CategoryUtils'; import Navigation from '@libs/Navigation/Navigation'; +import {hasEnabledOptions} from '@libs/OptionsListUtils'; import Parser from '@libs/Parser'; import {getCleanedTagName, getTagLists} from '@libs/PolicyUtils'; import {getEnabledTags} from '@libs/TagsOptionsListUtils'; @@ -34,7 +35,6 @@ import type {MerchantRuleForm} from '@src/types/form'; import type {PolicyTagLists} from '@src/types/onyx'; import type {CodingRule} from '@src/types/onyx/Policy'; import getEmptyArray from '@src/types/utils/getEmptyArray'; -import {hasEnabledOptions} from '@libs/OptionsListUtils'; type MerchantRulePageBaseProps = { policyID: string; diff --git a/tests/unit/CardUtilsTest.ts b/tests/unit/CardUtilsTest.ts index 9bbeb57c0aae..15c3dd3a3d77 100644 --- a/tests/unit/CardUtilsTest.ts +++ b/tests/unit/CardUtilsTest.ts @@ -1,7 +1,7 @@ -import type {FeedKeysWithAssignedCards} from '@hooks/useFeedKeysWithAssignedCards'; import {buildFeedKeysWithAssignedCards} from '@selectors/Card'; import lodashSortBy from 'lodash/sortBy'; import type {OnyxCollection} from 'react-native-onyx'; +import type {FeedKeysWithAssignedCards} from '@hooks/useFeedKeysWithAssignedCards'; import type IllustrationsType from '@styles/theme/illustrations/types'; // eslint-disable-next-line no-restricted-imports import type * as Illustrations from '@src/components/Icon/Illustrations'; diff --git a/tests/unit/RenderHTMLTest.tsx b/tests/unit/RenderHTMLTest.tsx index 3fb54bf127f1..fea313f74702 100644 --- a/tests/unit/RenderHTMLTest.tsx +++ b/tests/unit/RenderHTMLTest.tsx @@ -1,8 +1,8 @@ import {render} from '@testing-library/react-native'; import React from 'react'; import {View} from 'react-native'; -import Text from '@components/Text'; import RenderHTML from '@components/RenderHTML'; +import Text from '@components/Text'; jest.mock('@hooks/useWindowDimensions', () => () => ({windowWidth: 400})); jest.mock('react-native-render-html', () => { diff --git a/tests/unit/hooks/useMappedPolicies.test.ts b/tests/unit/hooks/useMappedPolicies.test.ts index 73b0eee71c64..6ad284d02e5d 100644 --- a/tests/unit/hooks/useMappedPolicies.test.ts +++ b/tests/unit/hooks/useMappedPolicies.test.ts @@ -1,7 +1,7 @@ import {renderHook, waitFor} from '@testing-library/react-native'; import Onyx from 'react-native-onyx'; -import useMappedPolicies from '@hooks/useMappedPolicies'; import type {OnyxEntry} from 'react-native-onyx'; +import useMappedPolicies from '@hooks/useMappedPolicies'; import CONST from '@src/CONST'; import ONYXKEYS from '@src/ONYXKEYS'; import type {Policy} from '@src/types/onyx'; diff --git a/tests/unit/hooks/useSplitContextHooks.test.tsx b/tests/unit/hooks/useSplitContextHooks.test.tsx index 3bde1845d583..9bb8ea463525 100644 --- a/tests/unit/hooks/useSplitContextHooks.test.tsx +++ b/tests/unit/hooks/useSplitContextHooks.test.tsx @@ -1,5 +1,5 @@ -import React from 'react'; import {act, renderHook} from '@testing-library/react-native'; +import React from 'react'; import type {PropsWithChildren} from 'react'; import type {SharedValue} from 'react-native-reanimated'; import { @@ -18,9 +18,9 @@ import type {CustomStatusBarAndBackgroundActionsContextType, CustomStatusBarAndB import {DragAndDropActionsContext, DragAndDropStateContext, useDragAndDropActions, useDragAndDropState} from '@components/DragAndDrop/Provider/DragAndDropContext'; import type {DragAndDropActionsContextType, DragAndDropStateContextType} from '@components/DragAndDrop/Provider/types'; import MultifactorAuthenticationStateProvider, { + DEFAULT_STATE, useMultifactorAuthenticationActions, useMultifactorAuthenticationState, - DEFAULT_STATE, } from '@components/MultifactorAuthentication/Context/State'; /** From b10fc51c6b3057ecc084acb67f45f4c7e29e2e7e Mon Sep 17 00:00:00 2001 From: rory Date: Thu, 19 Feb 2026 14:29:14 -0800 Subject: [PATCH 2/2] Fix generateTranslationsTest for sort-imports v6 ESM compatibility - Map parse-imports-exports to its CJS entry in Jest moduleNameMapper to work around Jest VM module linker failing to resolve named ESM exports - Restore blank line after import statements in test expectations, which the sort-imports preprocessor adds when it processes imports Co-authored-by: Cursor --- jest.config.js | 1 + tests/unit/generateTranslationsTest.ts | 25 +++++++++++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/jest.config.js b/jest.config.js index 904f49eb1f49..c397bbc89b91 100644 --- a/jest.config.js +++ b/jest.config.js @@ -37,5 +37,6 @@ module.exports = { '^group-ib-fp$': '/__mocks__/group-ib-fp.ts', '@noble/ed25519': '/node_modules/@noble/ed25519/index.ts', '@noble/hashes/(.*)': '/node_modules/@noble/hashes/src/$1.ts', + '^parse-imports-exports$': '/node_modules/parse-imports-exports/index.cjs', }, }; diff --git a/tests/unit/generateTranslationsTest.ts b/tests/unit/generateTranslationsTest.ts index d44d9155d554..cfa2f59586a4 100644 --- a/tests/unit/generateTranslationsTest.ts +++ b/tests/unit/generateTranslationsTest.ts @@ -114,6 +114,7 @@ describe('generateTranslations', () => { expect(itContent).toStrictEqual( `${GENERATED_FILE_PREFIX}${dedent(` import type en from './en'; + const strings = { greeting: '[it] Hello', farewell: '[it] Goodbye', @@ -172,6 +173,7 @@ describe('generateTranslations', () => { import Log from '@libs/Log'; import CONST from '@src/CONST'; import type en from './en'; + if (CONST.REPORT.TYPE.EXPENSE == 'true') { Log.info('This should not be translated'); console.log('This should not be translated either'); @@ -245,6 +247,7 @@ describe('generateTranslations', () => { expect(itContent).toStrictEqual( `${GENERATED_FILE_PREFIX}${dedent(` import type en from './en'; + const strings = { simple: (name: string, greeting: string) => \`[it] \${greeting} good sir \${name}!\`, simpleWithDotNotation: (myParams: {name: string; greeting: string}) => \`[it] \${myParams.greeting} good sir \${myParams.greeting}!\`, @@ -303,6 +306,7 @@ describe('generateTranslations', () => { expect(itContent).toStrictEqual( `${GENERATED_FILE_PREFIX}${dedent(` import type en from './en'; + const strings = { updateReportFieldAllOptionsDisabled: (count: number, enabled: boolean, option: string) => { if (toggledOptionsCount > 1) { @@ -359,6 +363,7 @@ describe('generateTranslations', () => { expect(itContent).toStrictEqual( `${GENERATED_FILE_PREFIX}${dedent(` import type en from './en'; + const strings = { bank: '[it][ctx: As in a financial institution] Bank', bankTemplate: \`[it][ctx: As in a financial institution] Bank\`, @@ -463,6 +468,7 @@ describe('generateTranslations', () => { expect(itContent).toStrictEqual( `${GENERATED_FILE_PREFIX}${dedent(` import type en from './en'; + const strings = { greeting: '[it] Hello', farewell: '[it] Goodbye', @@ -498,6 +504,7 @@ describe('generateTranslations', () => { expect(itContent).toStrictEqual( `${GENERATED_FILE_PREFIX}${dedent(` import type en from './en'; + const strings = { myFunc: ({brand}: {brand: 'Apple' | 'Google'}) => \`[it] \${brand} Phone\`, }; @@ -523,6 +530,7 @@ describe('generateTranslations', () => { expect(itContent).toStrictEqual( `${GENERATED_FILE_PREFIX}${dedent(` import type en from './en'; + const strings = { hello: '[it] こんにちは', world: '[it] world', @@ -567,6 +575,7 @@ describe('generateTranslations', () => { IT_PATH, dedent(` import type en from './en'; + const strings = { greeting: '[it] Hello', unchanged: '[it] Unchanged', @@ -654,6 +663,7 @@ describe('generateTranslations', () => { IT_PATH, dedent(` import type en from './en'; + const strings = { greeting: '[it] Hello', farewell: '[it] Goodbye', @@ -729,6 +739,7 @@ describe('generateTranslations', () => { IT_PATH, dedent(` import type en from './en'; + const strings = { greeting: '[it] Hello (existing)', common: { @@ -798,6 +809,7 @@ describe('generateTranslations', () => { IT_PATH, dedent(` import type en from './en'; + const strings = { greeting: '[it] Hello (existing)', common: { @@ -905,6 +917,7 @@ describe('generateTranslations', () => { IT_PATH, dedent(` import type en from './en'; + const strings = { greeting: '[it] Hello (existing)', common: { @@ -1168,6 +1181,7 @@ describe('generateTranslations', () => { IT_PATH, dedent(` import type en from './en'; + const strings = { deepTemplate: (user: User, settings: Settings) => \`[it] Old complex template\`, unchanged: '[it] Keep this (existing)' @@ -1240,6 +1254,7 @@ describe('generateTranslations', () => { IT_PATH, dedent(` import type en from './en'; + const strings = { keep: { this: '[it] Keep this section (existing)' @@ -1340,6 +1355,7 @@ describe('generateTranslations', () => { IT_PATH, dedent(` import type en from './en'; + const strings = { existingSection: { keep: '[it] Keep this existing translation', @@ -1419,6 +1435,7 @@ describe('generateTranslations', () => { IT_PATH, dedent(` import type en from './en'; + const strings = { existingSection: { keep: '[it] Keep this existing translation', @@ -1492,6 +1509,7 @@ describe('generateTranslations', () => { IT_PATH, dedent(` import type en from './en'; + const strings = { testDrive: { modal: { @@ -1585,6 +1603,7 @@ describe('generateTranslations', () => { IT_PATH, dedent(` import type en from './en'; + const strings = { onboarding: { tasks: { @@ -1643,6 +1662,7 @@ describe('generateTranslations', () => { IT_PATH, dedent(` import type en from './en'; + const strings = { common: { tasks: '[it] Tasks', @@ -1695,6 +1715,7 @@ describe('generateTranslations', () => { IT_PATH, dedent(` import type en from './en'; + const strings = { unchanged: '[it] This stays the same', pin: '[it] Pin', @@ -1772,6 +1793,7 @@ describe('generateTranslations', () => { IT_PATH, dedent(` import type en from './en'; + const strings = { unchanged: '[it] This stays the same', // @context original context @@ -1858,6 +1880,7 @@ describe('generateTranslations', () => { IT_PATH, dedent(` import type en from './en'; + const strings = { unchanged: '[it] This stays the same', // @context as a verb, not a noun @@ -1940,6 +1963,7 @@ describe('generateTranslations', () => { IT_PATH, dedent(` import type en from './en'; + const strings = { unchanged: '[it] This stays the same', pin: '[it] Pin (existing)', @@ -2013,6 +2037,7 @@ describe('generateTranslations', () => { IT_PATH, dedent(` import type en from './en'; + const strings = { unchanged: '[it] This stays the same', // TODO: fix this