Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions jest.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -37,5 +37,6 @@ module.exports = {
'^group-ib-fp$': '<rootDir>/__mocks__/group-ib-fp.ts',
'@noble/ed25519': '<rootDir>/node_modules/@noble/ed25519/index.ts',
'@noble/hashes/(.*)': '<rootDir>/node_modules/@noble/hashes/src/$1.ts',
'^parse-imports-exports$': '<rootDir>/node_modules/parse-imports-exports/index.cjs',
},
};
2 changes: 1 addition & 1 deletion jest/setup.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
/* eslint-disable max-classes-per-file */
// Polyfill necessary for Onyx.init in jest/setupAfterEnv.ts
import '@src/polyfills/PromiseWithResolvers';
import * as core from '@actions/core';
import '@shopify/flash-list/jestSetup';
import type {ReactNode} from 'react';
Expand All @@ -13,6 +12,7 @@ import mockStorage from 'react-native-onyx/dist/storage/__mocks__';
import type Animated from 'react-native-reanimated';
import 'setimmediate';
import * as MockedSecureStore from '@src/libs/MultifactorAuthentication/Biometrics/SecureStore/index.web';
import '@src/polyfills/PromiseWithResolvers';

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Restore PromiseWithResolvers import to top of setup file

Moving @src/polyfills/PromiseWithResolvers below other imports allows those modules to execute before the polyfill is installed, which can break test bootstrap in runtimes that do not yet provide Promise.withResolvers natively (the file comment already documents this dependency for Onyx setup). This commit introduced that reordering, so the polyfill should remain the first import in jest/setup.ts to avoid order-dependent initialization failures.

Useful? React with 👍 / 👎.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If tests still pass I think it's fine. But generally it might be right about this.

import mockFSLibrary from './setupMockFullstoryLib';
import setupMockImages from './setupMockImages';

Expand Down
52 changes: 42 additions & 10 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down
Original file line number Diff line number Diff line change
@@ -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,
};
17 changes: 17 additions & 0 deletions patches/@trivago/prettier-plugin-sort-imports/details.md
Original file line number Diff line number Diff line change
@@ -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
2 changes: 1 addition & 1 deletion src/components/BookTravelButton.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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';
Expand Down
2 changes: 1 addition & 1 deletion src/components/CardPreview.tsx
Original file line number Diff line number Diff line change
@@ -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';
Expand Down
4 changes: 2 additions & 2 deletions src/components/DelegateNoAccessModalProvider/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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';

Expand Down
2 changes: 1 addition & 1 deletion src/components/FeatureList.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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';
Expand Down
2 changes: 1 addition & 1 deletion src/components/LHNOptionsList/LHNOptionsList.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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';
Expand Down
2 changes: 1 addition & 1 deletion src/components/MoneyRequestConfirmationListFooter.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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';
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -60,12 +60,12 @@
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';
Expand Down Expand Up @@ -674,7 +674,7 @@
reportScrollManager.scrollToEnd();
readActionSkipped.current = false;
readNewestAction(report.reportID);
}, [setIsFloatingMessageCounterVisible, hasNewestReportAction, reportScrollManager, report.reportID]);

Check warning on line 677 in src/components/MoneyRequestReportView/MoneyRequestReportActionsList.tsx

View workflow job for this annotation

GitHub Actions / ESLint check

React Hook useCallback has a missing dependency: 'introSelected'. Either include it or remove the dependency array

Check warning on line 677 in src/components/MoneyRequestReportView/MoneyRequestReportActionsList.tsx

View workflow job for this annotation

GitHub Actions / Changed files ESLint check

React Hook useCallback has a missing dependency: 'introSelected'. Either include it or remove the dependency array

const scrollToNewTransaction = useCallback(
(pageY: number) => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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';
Expand Down
Original file line number Diff line number Diff line change
@@ -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 = {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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 = {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@ import type {ValueOf} from 'type-fest';
import Icon from '@components/Icon';
import {PressableWithFeedback} from '@components/Pressable';
import Text from '@components/Text';
import useDefaultSearchQuery from '@hooks/useDefaultSearchQuery';
import {useMemoizedLazyExpensifyIcons} from '@hooks/useLazyAsset';
import useLocalize from '@hooks/useLocalize';
import useDefaultSearchQuery from '@hooks/useDefaultSearchQuery';
import useOnyx from '@hooks/useOnyx';
import useTheme from '@hooks/useTheme';
import useThemeStyles from '@hooks/useThemeStyles';
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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';
Expand Down
8 changes: 4 additions & 4 deletions src/components/ReportActionItem/MoneyRequestReceiptView.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,22 +3,25 @@ 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';
import useGetIOUReportFromReportAction from '@hooks/useGetIOUReportFromReportAction';
import useLocalize from '@hooks/useLocalize';
import useOnyx from '@hooks/useOnyx';
import useOriginalReportID from '@hooks/useOriginalReportID';
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';
Expand Down Expand Up @@ -53,9 +56,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 useOriginalReportID from '@hooks/useOriginalReportID';
import useCardFeedErrors from '@hooks/useCardFeedErrors';
import {getBrokenConnectionUrlToFixPersonalCard} from '@libs/CardUtils';
import ReportActionItemImage from './ReportActionItemImage';

type MoneyRequestReceiptViewProps = {
Expand Down
4 changes: 2 additions & 2 deletions src/components/ReportActionItem/MoneyRequestView.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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';
Expand All @@ -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';
Expand All @@ -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,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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';
Expand All @@ -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';
Expand All @@ -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({
Expand Down
Loading
Loading