diff --git a/config/eslint/eslint.config.mjs b/config/eslint/eslint.config.mjs index 1759e8d8c46c..5dac371b0558 100644 --- a/config/eslint/eslint.config.mjs +++ b/config/eslint/eslint.config.mjs @@ -314,6 +314,7 @@ const config = defineConfig([ 'rulesdir/no-raw-typography': 'error', 'rulesdir/no-layout-spacing-conditional': 'error', 'rulesdir/no-direct-personal-details-list': 'error', + 'rulesdir/no-onyx-loading-status': 'error', 'rulesdir/require-locale-for-localized-date-format': 'error', 'rulesdir/no-unsafe-onyx-read': 'error', 'rulesdir/no-onyx-get-snapshot-key': 'error', @@ -697,6 +698,22 @@ const config = defineConfig([ }, }, + // LocaleContextProvider and HybridAppHandler mount before `Onyx.init` finishes, so they keep relying on the startup + // loading status. Tests and mocks follow the code they cover and get cleaned up together with it. + { + files: [ + 'src/components/LocaleContextProvider.tsx', + 'src/HybridAppHandler.tsx', + 'tests/**/*.{ts,tsx}', + 'jest/**/*.{ts,tsx}', + '__mocks__/**/*.{ts,tsx}', + 'src/**/__mocks__/**/*.{ts,tsx}', + ], + rules: { + 'rulesdir/no-onyx-loading-status': 'off', + }, + }, + // The typography token files are where raw font sizes and line heights are defined. { files: ['src/styles/typography.ts', 'src/styles/variables.ts'], diff --git a/config/eslint/eslint.seatbelt.tsv b/config/eslint/eslint.seatbelt.tsv index a86adbc28fa6..06082dd24d82 100644 --- a/config/eslint/eslint.seatbelt.tsv +++ b/config/eslint/eslint.seatbelt.tsv @@ -46,6 +46,8 @@ "../../server/victory-chart-renderer/src/initSkiaForCli.ts" "@typescript-eslint/no-unsafe-type-assertion" 1 "../../src/components/ActionSheetAwareScrollView/useActionSheetAwareScrollViewRef.ts" "react-hooks/immutability" 1 "../../src/components/ActionSheetAwareScrollView/useActionSheetKeyboardSpacing.ts" "@typescript-eslint/no-deprecated/useScrollViewOffset" 1 +"../../src/components/AddPaymentCard/PaymentCardForm.tsx" "rulesdir/no-onyx-loading-status" 1 +"../../src/components/AddPaymentMethodMenu.tsx" "rulesdir/no-onyx-loading-status" 1 "../../src/components/AddPlaidBankAccount.tsx" "@typescript-eslint/no-unsafe-type-assertion" 1 "../../src/components/AddressForm.tsx" "@typescript-eslint/no-unsafe-type-assertion" 2 "../../src/components/AddressSearch/CurrentLocationButton.tsx" "no-restricted-syntax" 1 @@ -84,6 +86,7 @@ "../../src/components/BaseVacationDelegateSelectionComponent.tsx" "no-restricted-imports" 1 "../../src/components/BlockingViews/FullPageNotFoundView.tsx" "no-restricted-imports" 1 "../../src/components/BookTravelButton.tsx" "no-restricted-imports" 1 +"../../src/components/BulkActionStatusManager.tsx" "rulesdir/no-onyx-loading-status" 1 "../../src/components/ButtonWithDropdownMenu/index.tsx" "react-hooks/set-state-in-effect" 1 "../../src/components/CategoryPicker/index.tsx" "@typescript-eslint/no-unsafe-type-assertion" 1 "../../src/components/Charts/hooks/useChartLabelFormats.ts" "@typescript-eslint/no-unsafe-type-assertion" 1 @@ -123,14 +126,18 @@ "../../src/components/DragAndDrop/Provider/index.tsx" "react-hooks/refs" 6 "../../src/components/DraggableList/SortableItem.tsx" "@typescript-eslint/no-unsafe-type-assertion" 1 "../../src/components/DropZone/DropZoneWrapper.tsx" "react-hooks/refs" 1 +"../../src/components/DynamicForm/components/DynamicFormListItemModal.tsx" "rulesdir/no-onyx-loading-status" 1 +"../../src/components/DynamicForm/index.tsx" "rulesdir/no-onyx-loading-status" 1 "../../src/components/EditableCell/usePopoverEditState.ts" "@typescript-eslint/no-unsafe-type-assertion" 1 "../../src/components/EmojiPicker/EmojiPicker.tsx" "react-hooks/refs" 3 "../../src/components/EmojiPicker/EmojiPickerMenu/useEmojiPickerMenu.ts" "react-hooks/set-state-in-effect" 2 "../../src/components/EmojiPicker/EmojiSkinToneList.tsx" "react-hooks/set-state-in-effect" 2 "../../src/components/EmptySelectionListContent.tsx" "@typescript-eslint/no-unsafe-type-assertion" 1 "../../src/components/EReceiptWithSizeCalculation.tsx" "@typescript-eslint/no-unsafe-type-assertion" 1 +"../../src/components/ExportDownloadStatusManager.tsx" "rulesdir/no-onyx-loading-status" 1 "../../src/components/FeatureList.tsx" "@typescript-eslint/no-deprecated/MenuItem" 1 "../../src/components/FeedbackSurvey.tsx" "react-hooks/set-state-in-effect" 1 +"../../src/components/FeedbackSurvey.tsx" "rulesdir/no-onyx-loading-status" 1 "../../src/components/FilePicker/index.native.tsx" "react-hooks/refs" 1 "../../src/components/FilePicker/index.tsx" "react-hooks/refs" 1 "../../src/components/FlatList/hooks/useFlatListHandle.ts" "@typescript-eslint/no-unsafe-type-assertion" 3 @@ -140,6 +147,7 @@ "../../src/components/Form/FormProvider.tsx" "@typescript-eslint/no-unsafe-type-assertion" 2 "../../src/components/Form/FormProvider.tsx" "react-hooks/immutability" 2 "../../src/components/Form/FormProvider.tsx" "react-hooks/refs" 2 +"../../src/components/Form/FormProvider.tsx" "rulesdir/no-onyx-loading-status" 1 "../../src/components/Form/InputWrapper.tsx" "@typescript-eslint/no-unsafe-type-assertion" 2 "../../src/components/Form/InputWrapper.tsx" "react-hooks/refs" 1 "../../src/components/HeaderPageLayout.tsx" "no-restricted-imports" 2 @@ -244,6 +252,7 @@ "../../src/components/PopoverMenu/index.tsx" "@typescript-eslint/no-deprecated/MenuItem" 1 "../../src/components/PopoverMenu/index.tsx" "@typescript-eslint/no-unsafe-type-assertion" 1 "../../src/components/PopoverMenu/index.tsx" "react-hooks/set-state-in-effect" 1 +"../../src/components/PopoverMenu/v2/content/useCloseOnModalCover.ts" "rulesdir/no-onyx-loading-status" 1 "../../src/components/PopoverMenu/v2/rows/Item.tsx" "@typescript-eslint/no-deprecated/MenuItem" 1 "../../src/components/PopoverMenu/v2/rows/Label.tsx" "@typescript-eslint/no-deprecated/MenuItem" 1 "../../src/components/PopoverMenu/v2/rows/RadioItem.tsx" "@typescript-eslint/no-deprecated/MenuItem" 1 @@ -257,6 +266,9 @@ "../../src/components/PressableWithSecondaryInteraction/index.native.tsx" "@typescript-eslint/no-unsafe-type-assertion" 2 "../../src/components/PressableWithSecondaryInteraction/index.native.tsx" "no-restricted-syntax" 1 "../../src/components/PressableWithSecondaryInteraction/index.tsx" "no-restricted-syntax" 1 +"../../src/components/PriorityModeController.tsx" "rulesdir/no-onyx-loading-status" 1 +"../../src/components/ProductMarketingWindow/ProductMarketingWindowManager.tsx" "rulesdir/no-onyx-loading-status" 2 +"../../src/components/ProductTrainingContext/index.tsx" "rulesdir/no-onyx-loading-status" 4 "../../src/components/PromotedActionsBar.tsx" "no-restricted-imports" 1 "../../src/components/PushRowWithModal/index.tsx" "@typescript-eslint/no-deprecated/MenuItemWithTopDescription" 1 "../../src/components/PushRowWithModal/PushRowModal.tsx" "no-restricted-imports" 1 @@ -278,18 +290,23 @@ "../../src/components/ReportActionItem/TransactionPreview/TransactionPreviewContent.tsx" "@typescript-eslint/no-deprecated/fontSize" 2 "../../src/components/ReportActionItem/TripDetailsView.tsx" "@typescript-eslint/no-deprecated/MenuItemWithTopDescription" 1 "../../src/components/ReportActionItem/TripRoomPreview.tsx" "@typescript-eslint/no-deprecated/MenuItemWithTopDescription" 1 +"../../src/components/RequireFieldsRules/FieldRequirementSettingRow.tsx" "rulesdir/no-onyx-loading-status" 1 "../../src/components/RNMarkdownTextInput.tsx" "@typescript-eslint/no-unsafe-type-assertion" 1 "../../src/components/RNMaskedTextInput.tsx" "@typescript-eslint/no-unsafe-type-assertion" 1 "../../src/components/RoomHeaderAvatars.tsx" "no-restricted-syntax" 2 "../../src/components/Rule/RuleBooleanBase.tsx" "@typescript-eslint/no-unsafe-type-assertion" 1 "../../src/components/Rule/RuleBooleanBase.tsx" "no-restricted-imports" 1 +"../../src/components/Rule/RuleNotFoundPageWrapper.tsx" "rulesdir/no-onyx-loading-status" 1 "../../src/components/Rule/RuleSelectionBase.tsx" "no-restricted-imports" 1 "../../src/components/Rule/RuleTextBase.tsx" "no-restricted-imports" 1 "../../src/components/Rule/TextBase.tsx" "@typescript-eslint/no-unsafe-type-assertion" 2 "../../src/components/SAMLLoadingIndicator.tsx" "@typescript-eslint/no-deprecated/fontSize" 1 +"../../src/components/ScreenWrapper/index.tsx" "rulesdir/no-onyx-loading-status" 1 "../../src/components/ScreenWrapper/ScreenWrapperContainer.tsx" "react-hooks/refs" 2 "../../src/components/Search/chartGroupByConfig.ts" "@typescript-eslint/no-unsafe-type-assertion" 20 "../../src/components/Search/FilterComponents/AdvancedFilters/DateFilterContent.tsx" "no-restricted-imports" 1 +"../../src/components/Search/FilterComponents/BankAccountSelector.tsx" "rulesdir/no-onyx-loading-status" 1 +"../../src/components/Search/FilterComponents/CardSelector.tsx" "rulesdir/no-onyx-loading-status" 1 "../../src/components/Search/FilterComponents/DateFilterBase.tsx" "no-restricted-imports" 1 "../../src/components/Search/FilterComponents/DateFilterBase.tsx" "react-hooks/set-state-in-effect" 1 "../../src/components/Search/FilterComponents/DatePresetFilterBase.tsx" "@typescript-eslint/no-deprecated/MenuItem" 2 @@ -299,6 +316,7 @@ "../../src/components/Search/FilterComponents/ReportField/index.tsx" "no-restricted-imports" 1 "../../src/components/Search/FilterComponents/SingleSelect.tsx" "@typescript-eslint/no-unsafe-type-assertion" 1 "../../src/components/Search/FilterComponents/TypeSelector.tsx" "@typescript-eslint/no-unsafe-type-assertion" 1 +"../../src/components/Search/FilterComponents/WorkspaceSelector.tsx" "rulesdir/no-onyx-loading-status" 1 "../../src/components/Search/FilterDropdowns/AmountPopup.tsx" "@typescript-eslint/no-deprecated/MenuItem" 1 "../../src/components/Search/FilterDropdowns/BasePopup.tsx" "no-restricted-imports" 1 "../../src/components/Search/FilterDropdowns/DateSelectPopup/SelectedDateModifierHeader.tsx" "no-restricted-imports" 1 @@ -310,6 +328,8 @@ "../../src/components/Search/index.tsx" "react-hooks/preserve-manual-memoization" 2 "../../src/components/Search/index.tsx" "react-hooks/refs" 5 "../../src/components/Search/index.tsx" "react-hooks/set-state-in-effect" 1 +"../../src/components/Search/index.tsx" "rulesdir/no-onyx-loading-status" 1 +"../../src/components/Search/SearchAutocompleteList.tsx" "rulesdir/no-onyx-loading-status" 1 "../../src/components/Search/SearchBulkActionsButton.tsx" "@typescript-eslint/no-unsafe-type-assertion" 2 "../../src/components/Search/SearchContextDefinitions.ts" "@typescript-eslint/no-unsafe-type-assertion" 1 "../../src/components/Search/SearchList/ListItem/BaseListItemHeader.tsx" "@typescript-eslint/no-unsafe-type-assertion" 1 @@ -368,6 +388,9 @@ "../../src/components/Table/Table.tsx" "@typescript-eslint/no-unsafe-type-assertion" 4 "../../src/components/Table/TableContext.tsx" "@typescript-eslint/no-unsafe-type-assertion" 3 "../../src/components/Tables/WorkspaceCategoryRulesTable/index.tsx" "@typescript-eslint/no-unsafe-type-assertion" 1 +"../../src/components/Tables/WorkspaceCompanyCardsTable/index.tsx" "rulesdir/no-onyx-loading-status" 3 +"../../src/components/Tables/WorkspaceListTable/LeaveWorkspaceFlow.tsx" "rulesdir/no-onyx-loading-status" 1 +"../../src/components/Tables/WorkspaceListTable/TransferOwnershipFlow.tsx" "rulesdir/no-onyx-loading-status" 1 "../../src/components/TabSelector/getBackground.ts" "@typescript-eslint/no-unsafe-type-assertion" 1 "../../src/components/TagPicker/index.tsx" "@typescript-eslint/no-unsafe-type-assertion" 1 "../../src/components/TaxPicker.tsx" "@typescript-eslint/no-unsafe-type-assertion" 1 @@ -404,6 +427,7 @@ "../../src/components/TransactionItemRow/DataCells/MerchantCell.tsx" "@typescript-eslint/no-unsafe-type-assertion" 1 "../../src/components/UploadFile.tsx" "@typescript-eslint/no-unsafe-type-assertion" 1 "../../src/components/UserInitialsAvatar.tsx" "@typescript-eslint/no-deprecated/fontSize" 1 +"../../src/components/ValidateCodeActionModal/ValidateCodeActionContent.tsx" "rulesdir/no-onyx-loading-status" 1 "../../src/components/ValidateCodeInput.tsx" "react-hooks/set-state-in-effect" 3 "../../src/components/ValuePicker/index.tsx" "@typescript-eslint/no-deprecated/MenuItemWithTopDescription" 1 "../../src/components/ValuePicker/ValueSelectorModal.tsx" "no-restricted-imports" 1 @@ -421,15 +445,18 @@ "../../src/components/withViewportOffsetTop.tsx" "@typescript-eslint/no-unsafe-type-assertion" 1 "../../src/components/WorkspaceConfirmationForm.tsx" "@typescript-eslint/no-deprecated/MenuItemWithTopDescription" 2 "../../src/components/WorkspaceConfirmationForm.tsx" "no-restricted-imports" 1 +"../../src/components/WorkspaceConfirmationForm.tsx" "rulesdir/no-onyx-loading-status" 1 "../../src/components/WorkspaceMemberRoleList.tsx" "no-restricted-imports" 1 "../../src/components/ZeroWidthView/index.tsx" "no-restricted-syntax" 2 "../../src/CONST/index.ts" "@typescript-eslint/no-unsafe-type-assertion" 1 "../../src/CONST/runtimeConfigured.ts" "rulesdir/no-direct-personal-details-list" 1 "../../src/DeepLinkHandler.tsx" "no-restricted-syntax" 1 +"../../src/DeepLinkHandler.tsx" "rulesdir/no-onyx-loading-status" 8 "../../src/Expensify.tsx" "@typescript-eslint/no-unsafe-type-assertion" 2 "../../src/Expensify.tsx" "no-restricted-syntax" 1 "../../src/Expensify.tsx" "react-hooks/refs" 1 "../../src/Expensify.tsx" "react-hooks/set-state-in-effect" 1 +"../../src/FullstoryInitHandler.tsx" "rulesdir/no-onyx-loading-status" 1 "../../src/GlobalModals.tsx" "no-restricted-syntax" 2 "../../src/hooks/useAccountIndicatorChecks.ts" "@typescript-eslint/no-unsafe-type-assertion" 2 "../../src/hooks/useAdvancedSearchFilters.ts" "@typescript-eslint/no-unsafe-type-assertion" 1 @@ -447,23 +474,42 @@ "../../src/hooks/useCardFeedsForActivePolicies.ts" "no-restricted-imports" 1 "../../src/hooks/useCardFeedsForDisplay.ts" "@typescript-eslint/no-unsafe-type-assertion" 1 "../../src/hooks/useCardFeedsForDisplay.ts" "no-restricted-imports" 1 +"../../src/hooks/useCarouselTransactionIDs.ts" "rulesdir/no-onyx-loading-status" 1 +"../../src/hooks/useCompanyCards.ts" "rulesdir/no-onyx-loading-status" 1 +"../../src/hooks/useContactPermissionModal/index.native.ts" "rulesdir/no-onyx-loading-status" 2 +"../../src/hooks/useCreateReport.tsx" "rulesdir/no-onyx-loading-status" 1 "../../src/hooks/useDebounce.ts" "@typescript-eslint/no-unsafe-type-assertion" 1 "../../src/hooks/useDebouncedValue.ts" "@typescript-eslint/no-unsafe-type-assertion" 1 "../../src/hooks/useDebounceNonReactive.ts" "@typescript-eslint/no-unsafe-type-assertion" 1 +"../../src/hooks/useDefaultParticipants.ts" "rulesdir/no-onyx-loading-status" 1 "../../src/hooks/useDragAndDrop/types.ts" "@typescript-eslint/no-deprecated/React.MutableRefObject" 1 +"../../src/hooks/useExpensifyCardRulesList.ts" "rulesdir/no-onyx-loading-status" 1 "../../src/hooks/useExportedToFilterOptions.ts" "@typescript-eslint/no-unsafe-type-assertion" 1 +"../../src/hooks/useGPSTripStateChecker/index.native.ts" "rulesdir/no-onyx-loading-status" 3 +"../../src/hooks/useHasLoggedIntoMobileApp.ts" "rulesdir/no-onyx-loading-status" 4 +"../../src/hooks/useHasPhoneNumberLogin.ts" "rulesdir/no-onyx-loading-status" 2 +"../../src/hooks/useHasReportAwaitingApproval.ts" "rulesdir/no-onyx-loading-status" 1 "../../src/hooks/useHydrateReportsFromSnapshot.ts" "@typescript-eslint/no-unsafe-type-assertion" 1 "../../src/hooks/useImportSpreadsheetConfirmModal.ts" "@typescript-eslint/no-unsafe-type-assertion" 1 +"../../src/hooks/useInFlightRequests.ts" "rulesdir/no-onyx-loading-status" 2 "../../src/hooks/useInitial.ts" "react-hooks/refs" 4 +"../../src/hooks/useInitialOnyxValue.ts" "rulesdir/no-onyx-loading-status" 1 "../../src/hooks/useInitialSelection.ts" "@typescript-eslint/no-unsafe-type-assertion" 1 +"../../src/hooks/useIsAgentAccount.ts" "rulesdir/no-onyx-loading-status" 1 "../../src/hooks/useIsBlockedToAddFeed.ts" "react-hooks/set-state-in-effect" 1 +"../../src/hooks/useIsBlockedToAddFeed.ts" "rulesdir/no-onyx-loading-status" 1 +"../../src/hooks/useIsDomainUsingCard.ts" "rulesdir/no-onyx-loading-status" 1 +"../../src/hooks/useIsLoadingAppRecovery.ts" "rulesdir/no-onyx-loading-status" 2 "../../src/hooks/useIsOwnWorkspaceChatRef.ts" "react-hooks/refs" 2 "../../src/hooks/useIsPaidPolicyAdmin.ts" "no-restricted-imports" 1 "../../src/hooks/useKeyboardShortcut.ts" "@typescript-eslint/no-unsafe-type-assertion" 1 "../../src/hooks/useLazyAsset.ts" "@typescript-eslint/no-unsafe-type-assertion" 3 "../../src/hooks/useLazyAsset.ts" "react-hooks/set-state-in-effect" 1 +"../../src/hooks/useLoadDepositAccountSetup.ts" "rulesdir/no-onyx-loading-status" 1 "../../src/hooks/useMarkdownStyle.ts" "rulesdir/no-raw-typography" 3 +"../../src/hooks/useMergeResultConfirmationConfig.tsx" "rulesdir/no-onyx-loading-status" 1 "../../src/hooks/useNewTransactions.ts" "react-hooks/refs" 2 +"../../src/hooks/useOnboardingFlow.ts" "rulesdir/no-onyx-loading-status" 3 "../../src/hooks/useOnyx.ts" "@typescript-eslint/no-unsafe-type-assertion" 10 "../../src/hooks/useOptimisticDraftTransactions.ts" "@typescript-eslint/no-unsafe-type-assertion" 1 "../../src/hooks/useOtherFeedsForFeedSelector.tsx" "@typescript-eslint/no-unsafe-type-assertion" 2 @@ -471,24 +517,44 @@ "../../src/hooks/useParticipantSubmission.ts" "@typescript-eslint/no-unsafe-type-assertion" 1 "../../src/hooks/usePaymentOptions.ts" "@typescript-eslint/no-unsafe-type-assertion" 3 "../../src/hooks/usePaymentOptions.ts" "react-hooks/refs" 1 +"../../src/hooks/usePaymentOptions.ts" "rulesdir/no-onyx-loading-status" 1 +"../../src/hooks/usePersonalDetailOptions.ts" "rulesdir/no-onyx-loading-status" 1 "../../src/hooks/usePersonalPolicy.ts" "@typescript-eslint/no-unsafe-type-assertion" 1 +"../../src/hooks/usePolicyConnectionsPrefetch.ts" "rulesdir/no-onyx-loading-status" 1 "../../src/hooks/usePolicyData/index.ts" "@typescript-eslint/no-unsafe-type-assertion" 1 +"../../src/hooks/usePolicyForMovingExpenses.ts" "rulesdir/no-onyx-loading-status" 1 "../../src/hooks/usePreferredCurrency.ts" "@typescript-eslint/no-unsafe-type-assertion" 1 "../../src/hooks/usePrevious.ts" "react-hooks/refs" 1 +"../../src/hooks/usePrivateSubscription.ts" "rulesdir/no-onyx-loading-status" 1 "../../src/hooks/useResetBankAccountModal.tsx" "@typescript-eslint/no-unsafe-type-assertion" 1 "../../src/hooks/useResponsiveLayout/index.native.ts" "@typescript-eslint/no-unsafe-type-assertion" 1 "../../src/hooks/useResponsiveLayout/index.ts" "@typescript-eslint/no-unsafe-type-assertion" 1 +"../../src/hooks/useRestartOnOdometerImagesFailure/index.ts" "rulesdir/no-onyx-loading-status" 3 +"../../src/hooks/useRestartOnReceiptFailure.ts" "rulesdir/no-onyx-loading-status" 1 "../../src/hooks/useRestoreWorkspacesTabOnNavigate.ts" "@typescript-eslint/no-unsafe-type-assertion" 1 "../../src/hooks/useReviewDuplicatesNavigation.tsx" "@typescript-eslint/no-unsafe-type-assertion" 1 "../../src/hooks/useReviewDuplicatesNavigation.tsx" "react-hooks/set-state-in-effect" 1 +"../../src/hooks/useRulesPrefetch.ts" "rulesdir/no-onyx-loading-status" 1 +"../../src/hooks/useSaveMarketingAttribution.ts" "rulesdir/no-onyx-loading-status" 1 "../../src/hooks/useSearchBulkActions.ts" "@typescript-eslint/no-unsafe-type-assertion" 9 +"../../src/hooks/useSearchFilterSync.ts" "rulesdir/no-onyx-loading-status" 1 +"../../src/hooks/useSearchLoadingState.ts" "rulesdir/no-onyx-loading-status" 1 +"../../src/hooks/useSeedMyExpensesSearch.ts" "rulesdir/no-onyx-loading-status" 2 +"../../src/hooks/useSelfDMReport.ts" "rulesdir/no-onyx-loading-status" 1 +"../../src/hooks/useShouldSuppressPromotionalUI.ts" "rulesdir/no-onyx-loading-status" 1 "../../src/hooks/useSidebarOrderedReports.tsx" "react-hooks/refs" 5 "../../src/hooks/useSidebarOrderedReports.tsx" "react-hooks/set-state-in-effect" 1 "../../src/hooks/useSingleExecution/index.native.ts" "react-hooks/refs" 1 "../../src/hooks/useStableIndexedHandler.ts" "@typescript-eslint/no-unsafe-type-assertion" 1 "../../src/hooks/useStepFormSubmit.ts" "no-restricted-syntax" 1 "../../src/hooks/useSubPage/index.tsx" "@typescript-eslint/no-unsafe-type-assertion" 3 +"../../src/hooks/useSuggestedAgentRules.ts" "rulesdir/no-onyx-loading-status" 1 +"../../src/hooks/useSuggestedAgents.ts" "rulesdir/no-onyx-loading-status" 1 +"../../src/hooks/useTodoCounts.ts" "rulesdir/no-onyx-loading-status" 1 +"../../src/hooks/useTodoSearchResults.ts" "rulesdir/no-onyx-loading-status" 2 "../../src/hooks/useTransactionViolationOfWorkspace.tsx" "@typescript-eslint/no-unsafe-type-assertion" 1 +"../../src/hooks/useTrialPaymentReminder.ts" "rulesdir/no-onyx-loading-status" 3 +"../../src/hooks/useUserSecurityGroup.ts" "rulesdir/no-onyx-loading-status" 1 "../../src/hooks/useViolations.ts" "@typescript-eslint/no-unsafe-type-assertion" 1 "../../src/hooks/useWorkletStateMachine/index.ts" "@typescript-eslint/no-unsafe-type-assertion" 1 "../../src/languages/flattenObject.ts" "@typescript-eslint/no-unsafe-type-assertion" 2 @@ -723,6 +789,8 @@ "../../src/libs/Navigation/AppNavigator/KeyboardShortcutsHandler/SearchHandler.tsx" "no-restricted-syntax" 1 "../../src/libs/Navigation/AppNavigator/KeyboardShortcutsHandler/ShortcutsOverviewHandler.tsx" "no-restricted-syntax" 1 "../../src/libs/Navigation/AppNavigator/ModalStackNavigators/index.tsx" "@typescript-eslint/no-unsafe-type-assertion" 5 +"../../src/libs/Navigation/AppNavigator/Navigators/NativeTabNavigator/TabPressListeners.tsx" "rulesdir/no-onyx-loading-status" 1 +"../../src/libs/Navigation/AppNavigator/Navigators/OnboardingModalNavigator.tsx" "rulesdir/no-onyx-loading-status" 1 "../../src/libs/Navigation/AppNavigator/Navigators/Overlay/BaseOverlay.tsx" "no-restricted-syntax" 2 "../../src/libs/Navigation/AppNavigator/Navigators/RightModalNavigator.tsx" "@typescript-eslint/no-unsafe-type-assertion" 1 "../../src/libs/Navigation/AppNavigator/Navigators/RightModalNavigator.tsx" "no-restricted-syntax" 1 @@ -762,10 +830,12 @@ "../../src/libs/Navigation/linkingConfig/config.ts" "@typescript-eslint/no-unsafe-type-assertion" 2 "../../src/libs/Navigation/linkingConfig/RELATIONS/index.ts" "@typescript-eslint/no-unsafe-type-assertion" 3 "../../src/libs/Navigation/Navigation.ts" "@typescript-eslint/no-unsafe-type-assertion" 10 +"../../src/libs/Navigation/OnyxTabNavigator.tsx" "rulesdir/no-onyx-loading-status" 1 "../../src/libs/Navigation/PlatformStackNavigation/createPlatformStackNavigatorComponent/index.native.tsx" "@typescript-eslint/no-deprecated/NavigationContent" 1 "../../src/libs/Navigation/PlatformStackNavigation/createPlatformStackNavigatorComponent/index.tsx" "@typescript-eslint/no-deprecated/NavigationContent" 1 "../../src/libs/Navigation/PlatformStackNavigation/navigationOptions/animation/withAnimation.ts" "@typescript-eslint/no-unsafe-type-assertion" 6 "../../src/libs/Navigation/PlatformStackNavigation/ScreenLayout.tsx" "@typescript-eslint/no-unsafe-type-assertion" 1 +"../../src/libs/Navigation/useNavigateTo3DSAuthorizationChallenge.ts" "rulesdir/no-onyx-loading-status" 1 "../../src/libs/NetSuiteUtils.ts" "@typescript-eslint/no-unsafe-type-assertion" 1 "../../src/libs/Network/enhanceParameters.ts" "no-restricted-syntax" 1 "../../src/libs/Network/index.ts" "no-restricted-syntax" 1 @@ -842,6 +912,7 @@ "../../src/pages/AddressPage.tsx" "@typescript-eslint/no-unsafe-type-assertion" 3 "../../src/pages/AddressPage.tsx" "no-restricted-imports" 1 "../../src/pages/AddressPage.tsx" "react-hooks/set-state-in-effect" 1 +"../../src/pages/AvatarCropPage.tsx" "rulesdir/no-onyx-loading-status" 1 "../../src/pages/ChronosScheduleOOOPage.tsx" "@typescript-eslint/no-deprecated/MenuItemWithTopDescription" 1 "../../src/pages/ChronosScheduleOOOPage.tsx" "no-restricted-imports" 1 "../../src/pages/Debug/ConstantPicker.tsx" "@typescript-eslint/no-unsafe-type-assertion" 1 @@ -862,6 +933,7 @@ "../../src/pages/Debug/TransactionViolation/DebugTransactionViolationPage.tsx" "@typescript-eslint/no-unsafe-type-assertion" 1 "../../src/pages/Debug/TransactionViolation/DebugTransactionViolationPage.tsx" "no-restricted-imports" 1 "../../src/pages/domain/AddDomainPage.tsx" "no-restricted-imports" 1 +"../../src/pages/domain/AddDomainPage.tsx" "rulesdir/no-onyx-loading-status" 1 "../../src/pages/domain/Admins/DomainAddAdminPage.tsx" "no-restricted-imports" 1 "../../src/pages/domain/Admins/DomainAddPrimaryContactPage.tsx" "no-restricted-imports" 1 "../../src/pages/domain/Admins/DomainAdminsPage.tsx" "no-restricted-imports" 1 @@ -870,13 +942,21 @@ "../../src/pages/domain/BaseDomainRequireTwoFactorAuthPage.tsx" "no-restricted-imports" 1 "../../src/pages/domain/BaseDomainSettingsPage.tsx" "no-restricted-imports" 1 "../../src/pages/domain/BaseDomainVerifiedPage.tsx" "no-restricted-imports" 1 +"../../src/pages/domain/BaseDomainVerifiedPage.tsx" "rulesdir/no-onyx-loading-status" 1 "../../src/pages/domain/BaseVerifyDomainPage.tsx" "no-restricted-imports" 1 +"../../src/pages/domain/BaseVerifyDomainPage.tsx" "rulesdir/no-onyx-loading-status" 1 "../../src/pages/domain/DomainAccessRestrictedPage.tsx" "no-restricted-imports" 1 "../../src/pages/domain/DomainAddedPage.tsx" "no-restricted-imports" 1 +"../../src/pages/domain/DomainAddedPage.tsx" "rulesdir/no-onyx-loading-status" 1 "../../src/pages/domain/DomainAlreadyExistsPage.tsx" "no-restricted-imports" 1 "../../src/pages/domain/DomainInitialPage.tsx" "no-restricted-imports" 1 +"../../src/pages/domain/DomainInitialPage.tsx" "rulesdir/no-onyx-loading-status" 1 +"../../src/pages/domain/DomainNameOrNotFoundWrapper.tsx" "rulesdir/no-onyx-loading-status" 1 +"../../src/pages/domain/DomainNotFoundPageWrapper.tsx" "rulesdir/no-onyx-loading-status" 1 "../../src/pages/domain/DomainResetPage.tsx" "no-restricted-imports" 1 +"../../src/pages/domain/DomainResetPage.tsx" "rulesdir/no-onyx-loading-status" 1 "../../src/pages/domain/DomainSamlPage.tsx" "no-restricted-imports" 1 +"../../src/pages/domain/DomainSamlPage.tsx" "rulesdir/no-onyx-loading-status" 1 "../../src/pages/domain/Groups/BaseDomainGroupPreferredWorkspacePage.tsx" "no-restricted-imports" 1 "../../src/pages/domain/Groups/DomainGroupCreatePage.tsx" "no-restricted-imports" 1 "../../src/pages/domain/Groups/DomainGroupDetailsPage.tsx" "no-restricted-imports" 1 @@ -886,13 +966,16 @@ "../../src/pages/domain/Members/DomainMembersPage.tsx" "no-restricted-imports" 1 "../../src/pages/domain/Members/MoveUserBetweenGroupsPage.tsx" "no-restricted-imports" 1 "../../src/pages/domain/Members/MoveUsersBetweenGroupsPage.tsx" "no-restricted-imports" 1 +"../../src/pages/domain/Saml/SamlConfigurationDetailsSectionContent.tsx" "rulesdir/no-onyx-loading-status" 1 "../../src/pages/DynamicEditReportFieldPage.tsx" "no-restricted-imports" 1 "../../src/pages/DynamicFlagCommentPage.tsx" "@typescript-eslint/no-deprecated/MenuItem" 1 "../../src/pages/DynamicFlagCommentPage.tsx" "no-restricted-imports" 1 "../../src/pages/DynamicNewReportWorkspaceSelectionPage.tsx" "no-restricted-imports" 1 +"../../src/pages/DynamicNewReportWorkspaceSelectionPage.tsx" "rulesdir/no-onyx-loading-status" 1 "../../src/pages/DynamicReferralDetailsPage.tsx" "@typescript-eslint/no-deprecated/MenuItem" 1 "../../src/pages/DynamicReportChangeApproverPage.tsx" "no-restricted-imports" 1 "../../src/pages/DynamicReportChangeWorkspacePage.tsx" "no-restricted-imports" 1 +"../../src/pages/DynamicReportChangeWorkspacePage.tsx" "rulesdir/no-onyx-loading-status" 1 "../../src/pages/DynamicReportDetailsPage/ReportDetailsContent.tsx" "@typescript-eslint/no-deprecated/MenuItemWithTopDescription" 2 "../../src/pages/DynamicReportDetailsPage/ReportDetailsMenuDebugItem.tsx" "@typescript-eslint/no-deprecated/MenuItem" 1 "../../src/pages/DynamicReportDetailsPage/ReportDetailsMenuGoToRoomItem.tsx" "@typescript-eslint/no-deprecated/MenuItem" 1 @@ -925,9 +1008,15 @@ "../../src/pages/EnablePayments/Wallet/EnablePayments.tsx" "no-restricted-imports" 1 "../../src/pages/EnablePayments/Wallet/VerifyIdentity/VerifyIdentity.tsx" "no-restricted-imports" 1 "../../src/pages/GroupChatNameEditPage.tsx" "no-restricted-imports" 1 +"../../src/pages/GroupChatNameEditPage.tsx" "rulesdir/no-onyx-loading-status" 1 +"../../src/pages/home/EarlyRenewalOfferSection/index.tsx" "rulesdir/no-onyx-loading-status" 1 "../../src/pages/home/ForYouSection/ConciergePromptBox.tsx" "@typescript-eslint/no-unsafe-type-assertion" 1 "../../src/pages/home/GettingStartedSection/hooks/useGettingStartedItems.ts" "@typescript-eslint/no-unsafe-type-assertion" 1 "../../src/pages/home/GettingStartedSection/hooks/useGettingStartedItems.ts" "no-restricted-imports" 1 +"../../src/pages/home/InsightsSection/InsightsSectionContent.tsx" "rulesdir/no-onyx-loading-status" 1 +"../../src/pages/home/TimeSensitiveSection/hooks/useTimeSensitiveAddBankAccount.ts" "rulesdir/no-onyx-loading-status" 1 +"../../src/pages/home/TimeSensitiveSection/hooks/useTimeSensitiveAddDepositAccount.ts" "rulesdir/no-onyx-loading-status" 1 +"../../src/pages/home/TimeSensitiveSection/hooks/useTimeSensitiveOverdueInvoice.ts" "rulesdir/no-onyx-loading-status" 1 "../../src/pages/home/TimeSensitiveSection/items/FixCompanyCardConnection.tsx" "@typescript-eslint/no-unsafe-type-assertion" 2 "../../src/pages/home/UpcomingTravelSection/UpcomingTravelItem.tsx" "@typescript-eslint/no-deprecated/MenuItemWithTopDescription" 1 "../../src/pages/home/YourSpendSection/CardRow.tsx" "@typescript-eslint/no-deprecated/MenuItemWithTopDescription" 1 @@ -952,6 +1041,7 @@ "../../src/pages/inbox/report/ReportActionCompose/AttachmentPickerWithMenuItems.tsx" "@typescript-eslint/no-unsafe-type-assertion" 1 "../../src/pages/inbox/report/ReportActionCompose/ComposerWithSuggestions.tsx" "@typescript-eslint/no-unsafe-type-assertion" 3 "../../src/pages/inbox/report/ReportActionCompose/ComposerWithSuggestions.tsx" "react-hooks/refs" 7 +"../../src/pages/inbox/report/ReportActionCompose/SilentCommentUpdater/index.tsx" "rulesdir/no-onyx-loading-status" 1 "../../src/pages/inbox/report/ReportActionCompose/SuggestionEmoji.tsx" "react-hooks/refs" 1 "../../src/pages/inbox/report/ReportActionCompose/SuggestionMention.tsx" "@typescript-eslint/no-unsafe-type-assertion" 1 "../../src/pages/inbox/report/ReportActionCompose/SuggestionMention.tsx" "react-hooks/refs" 3 @@ -964,6 +1054,7 @@ "../../src/pages/inbox/report/ReportActionItemMessageEdit.tsx" "no-restricted-syntax" 1 "../../src/pages/inbox/report/ReportActionItemMessageEdit.tsx" "react-hooks/refs" 5 "../../src/pages/inbox/report/ReportActionItemMessageEdit.tsx" "react-hooks/set-state-in-effect" 1 +"../../src/pages/inbox/report/ReportActionsListContext.tsx" "rulesdir/no-onyx-loading-status" 1 "../../src/pages/inbox/report/SearchActionHeader.tsx" "@typescript-eslint/no-deprecated/fontSize" 1 "../../src/pages/inbox/report/shouldUseEmojiPickerSelection/index.web.ts" "no-restricted-syntax" 1 "../../src/pages/inbox/report/TripSummary.tsx" "rulesdir/no-default-id-values" 1 @@ -975,11 +1066,15 @@ "../../src/pages/inbox/report/withReportOrNotFound.tsx" "react-hooks/refs" 3 "../../src/pages/inbox/ReportHeader.tsx" "@typescript-eslint/no-unsafe-type-assertion" 2 "../../src/pages/inbox/ReportNavigateAwayHandler.tsx" "react-hooks/exhaustive-deps" 1 +"../../src/pages/inbox/ReportRouteParamHandler.tsx" "rulesdir/no-onyx-loading-status" 1 "../../src/pages/inbox/sidebar/FABPopoverContent/FABFocusableMenuItem.tsx" "@typescript-eslint/no-unsafe-type-assertion" 1 "../../src/pages/inbox/sidebar/FABPopoverContent/menuItems/InvoiceMenuItem.tsx" "@typescript-eslint/no-unsafe-type-assertion" 1 "../../src/pages/inbox/sidebar/FABPopoverContent/menuItems/NewWorkspaceMenuItem.tsx" "@typescript-eslint/no-unsafe-type-assertion" 1 "../../src/pages/inbox/sidebar/FABPopoverContent/menuItems/TravelMenuItem.tsx" "no-restricted-imports" 1 "../../src/pages/inbox/sidebar/FABPopoverContent/useScanActions.ts" "@typescript-eslint/no-unsafe-type-assertion" 2 +"../../src/pages/Insights/InsightsDashboard.tsx" "rulesdir/no-onyx-loading-status" 1 +"../../src/pages/Insights/InsightsPage.tsx" "rulesdir/no-onyx-loading-status" 1 +"../../src/pages/Insights/useInsightsFilters.ts" "rulesdir/no-onyx-loading-status" 3 "../../src/pages/iou/DynamicSplitBillDetailsPage.tsx" "no-restricted-imports" 1 "../../src/pages/iou/DynamicSplitExpenseCreateDateRangePage.tsx" "no-restricted-imports" 1 "../../src/pages/iou/DynamicSplitExpenseEditPage.tsx" "@typescript-eslint/no-deprecated/MenuItemWithTopDescription" 1 @@ -988,15 +1083,20 @@ "../../src/pages/iou/DynamicSplitExpensePage.tsx" "@typescript-eslint/no-unsafe-type-assertion" 2 "../../src/pages/iou/DynamicSplitExpensePage.tsx" "no-restricted-imports" 1 "../../src/pages/iou/DynamicSplitExpensePage.tsx" "react-hooks/set-state-in-effect" 3 +"../../src/pages/iou/DynamicSplitExpensePage.tsx" "rulesdir/no-onyx-loading-status" 1 "../../src/pages/iou/HoldReasonFormView.tsx" "no-restricted-imports" 1 "../../src/pages/iou/MoneyRequestAmountForm.tsx" "react-hooks/set-state-in-effect" 1 "../../src/pages/iou/RejectReasonFormView.tsx" "no-restricted-imports" 1 "../../src/pages/iou/request/DistanceRequestStartPage.tsx" "no-restricted-imports" 1 +"../../src/pages/iou/request/DistanceRequestStartPage.tsx" "rulesdir/no-onyx-loading-status" 1 "../../src/pages/iou/request/IOURequestStartPage.tsx" "no-restricted-imports" 1 +"../../src/pages/iou/request/IOURequestStartPage.tsx" "rulesdir/no-onyx-loading-status" 2 "../../src/pages/iou/request/ParticipantSearchResults.tsx" "@typescript-eslint/no-unsafe-type-assertion" 4 "../../src/pages/iou/request/step/DistanceManualTabContent.tsx" "@typescript-eslint/no-unsafe-type-assertion" 1 "../../src/pages/iou/request/step/DynamicIOURequestEditReport.tsx" "@typescript-eslint/no-unsafe-type-assertion" 1 +"../../src/pages/iou/request/step/DynamicIOURequestStepDestination.tsx" "rulesdir/no-onyx-loading-status" 1 "../../src/pages/iou/request/step/DynamicIOURequestStepDistance.tsx" "react-hooks/set-state-in-effect" 1 +"../../src/pages/iou/request/step/DynamicIOURequestStepDistance.tsx" "rulesdir/no-onyx-loading-status" 1 "../../src/pages/iou/request/step/DynamicIOURequestStepReport.tsx" "@typescript-eslint/no-unsafe-type-assertion" 2 "../../src/pages/iou/request/step/DynamicIOURequestStepSubrate.tsx" "@typescript-eslint/no-unsafe-type-assertion" 1 "../../src/pages/iou/request/step/DynamicIOURequestStepSubrate.tsx" "no-restricted-imports" 1 @@ -1010,9 +1110,12 @@ "../../src/pages/iou/request/step/IOURequestStepAmount.tsx" "react-hooks/set-state-in-effect" 1 "../../src/pages/iou/request/step/IOURequestStepConfirmation/index.tsx" "@typescript-eslint/no-unsafe-type-assertion" 2 "../../src/pages/iou/request/step/IOURequestStepConfirmation/index.tsx" "no-restricted-imports" 1 +"../../src/pages/iou/request/step/IOURequestStepConfirmation/useConfirmationTransactionPager.ts" "rulesdir/no-onyx-loading-status" 1 "../../src/pages/iou/request/step/IOURequestStepCurrencyModal.tsx" "no-restricted-imports" 1 "../../src/pages/iou/request/step/IOURequestStepDistanceGPS/Waypoints/index.tsx" "@typescript-eslint/no-deprecated/MenuItemWithTopDescription" 2 "../../src/pages/iou/request/step/IOURequestStepDistanceMap.tsx" "react-hooks/set-state-in-effect" 1 +"../../src/pages/iou/request/step/IOURequestStepDistanceMap.tsx" "rulesdir/no-onyx-loading-status" 1 +"../../src/pages/iou/request/step/IOURequestStepDistanceOdometer.tsx" "rulesdir/no-onyx-loading-status" 1 "../../src/pages/iou/request/step/IOURequestStepOdometerImage/index.tsx" "@typescript-eslint/no-unsafe-type-assertion" 1 "../../src/pages/iou/request/step/IOURequestStepScan/components/NavigationAwareCamera/WebCamera.tsx" "@typescript-eslint/no-unsafe-type-assertion" 1 "../../src/pages/iou/request/step/IOURequestStepScan/components/ScanEditReceipt.tsx" "@typescript-eslint/no-unsafe-type-assertion" 1 @@ -1020,14 +1123,17 @@ "../../src/pages/iou/request/step/IOURequestStepScan/DynamicReceiptView/index.tsx" "no-restricted-imports" 1 "../../src/pages/iou/request/step/IOURequestStepScan/DynamicReceiptView/index.tsx" "react-hooks/set-state-in-effect" 1 "../../src/pages/iou/request/step/IOURequestStepScan/hooks/useScanRouteParams.ts" "@typescript-eslint/no-unsafe-type-assertion" 2 +"../../src/pages/iou/request/step/IOURequestStepScan/ScanRouter.tsx" "rulesdir/no-onyx-loading-status" 1 "../../src/pages/iou/request/step/IOURequestStepScan/utils/buildReceiptFiles.ts" "@typescript-eslint/no-unsafe-type-assertion" 1 "../../src/pages/iou/request/step/IOURequestStepScan/utils/getFileSource.ts" "@typescript-eslint/no-unsafe-type-assertion" 1 "../../src/pages/iou/request/step/StepScreenDragAndDropWrapper.tsx" "no-restricted-imports" 1 "../../src/pages/iou/request/step/StepScreenWrapper.tsx" "@typescript-eslint/no-unsafe-type-assertion" 1 "../../src/pages/iou/request/step/StepScreenWrapper.tsx" "no-restricted-imports" 1 "../../src/pages/iou/request/step/withFullTransactionOrNotFound.tsx" "@typescript-eslint/no-unsafe-type-assertion" 1 +"../../src/pages/iou/request/step/withFullTransactionOrNotFound.tsx" "rulesdir/no-onyx-loading-status" 1 "../../src/pages/iou/request/step/withWritableReportOrNotFound.tsx" "@typescript-eslint/no-unsafe-type-assertion" 1 "../../src/pages/LoadingPage.tsx" "no-restricted-imports" 1 +"../../src/pages/LogInWithShortLivedAuthTokenPage.tsx" "rulesdir/no-onyx-loading-status" 1 "../../src/pages/media/AttachmentModalScreen/AttachmentModalBaseContent/index.tsx" "no-restricted-imports" 1 "../../src/pages/media/AttachmentModalScreen/AttachmentModalBaseContent/index.tsx" "react-hooks/set-state-in-effect" 3 "../../src/pages/media/AttachmentModalScreen/AttachmentModalContext.tsx" "@typescript-eslint/no-unsafe-type-assertion" 1 @@ -1035,6 +1141,7 @@ "../../src/pages/media/AttachmentModalScreen/routes/hooks/useReportAttachmentModalType.ts" "react-hooks/set-state-in-effect" 1 "../../src/pages/media/AttachmentModalScreen/routes/TransactionReceiptModalContent.tsx" "@typescript-eslint/no-unsafe-type-assertion" 7 "../../src/pages/media/AttachmentModalScreen/routes/TransactionReceiptModalContent.tsx" "react-hooks/set-state-in-effect" 2 +"../../src/pages/MissingPersonalDetails/index.tsx" "rulesdir/no-onyx-loading-status" 1 "../../src/pages/MissingPersonalDetails/MissingPersonalDetailsContent.tsx" "@typescript-eslint/no-unsafe-type-assertion" 1 "../../src/pages/MissingPersonalDetails/MissingPersonalDetailsContent.tsx" "no-restricted-imports" 1 "../../src/pages/MissingPersonalDetails/MissingPersonalDetailsValidateCodePage.tsx" "@typescript-eslint/no-unsafe-type-assertion" 1 @@ -1047,11 +1154,15 @@ "../../src/pages/MultifactorAuthentication/ValidateCodePage.tsx" "no-restricted-imports" 1 "../../src/pages/NewChatConfirmPage.tsx" "@typescript-eslint/no-deprecated/MenuItemWithTopDescription" 1 "../../src/pages/NewChatConfirmPage.tsx" "no-restricted-imports" 1 +"../../src/pages/NewChatConfirmPage.tsx" "rulesdir/no-onyx-loading-status" 1 +"../../src/pages/NewChatPage/useGroupChatDraftParticipantSync.ts" "rulesdir/no-onyx-loading-status" 1 "../../src/pages/NewChatSelectorPage.tsx" "no-restricted-imports" 1 "../../src/pages/OnboardingInterestedFeatures/BaseOnboardingInterestedFeatures.tsx" "@typescript-eslint/no-unsafe-type-assertion" 1 "../../src/pages/OnboardingPersonalTrackGoal/BaseOnboardingPersonalTrackGoal.tsx" "@typescript-eslint/no-deprecated/MenuItem" 1 "../../src/pages/OnboardingPrivateDomain/BaseOnboardingPrivateDomain.tsx" "@typescript-eslint/no-unsafe-type-assertion" 1 +"../../src/pages/OnboardingPurpose/BaseOnboardingPurpose.tsx" "rulesdir/no-onyx-loading-status" 1 "../../src/pages/PrivateNotes/PrivateNotesEditPage.tsx" "no-restricted-imports" 1 +"../../src/pages/PrivateNotes/PrivateNotesEditPage.tsx" "rulesdir/no-onyx-loading-status" 1 "../../src/pages/PrivateNotes/PrivateNotesListPage.tsx" "no-restricted-imports" 1 "../../src/pages/ProfilePage.tsx" "@typescript-eslint/no-deprecated/MenuItem" 1 "../../src/pages/ProfilePage.tsx" "@typescript-eslint/no-deprecated/MenuItemWithTopDescription" 5 @@ -1081,16 +1192,27 @@ "../../src/pages/ReimbursementAccount/ReimbursementAccountPage.tsx" "no-restricted-imports" 1 "../../src/pages/ReimbursementAccount/ReimbursementAccountPage.tsx" "react-hooks/refs" 3 "../../src/pages/ReimbursementAccount/ReimbursementAccountPage.tsx" "react-hooks/set-state-in-effect" 4 +"../../src/pages/ReimbursementAccount/ReimbursementAccountPage.tsx" "rulesdir/no-onyx-loading-status" 4 "../../src/pages/ReimbursementAccount/USD/BankInfo/BankInfo.tsx" "@typescript-eslint/no-unsafe-type-assertion" 1 "../../src/pages/ReimbursementAccount/USD/BeneficialOwnerInfo/subSteps/BeneficialOwnerDetailsFormSubSteps/LegalNameUBO.tsx" "@typescript-eslint/no-unsafe-type-assertion" 2 +"../../src/pages/ReimbursementAccount/USD/BusinessInfo/subSteps/AddressBusiness.tsx" "rulesdir/no-onyx-loading-status" 1 "../../src/pages/ReimbursementAccount/USD/BusinessInfo/subSteps/ConfirmationBusiness.tsx" "@typescript-eslint/no-unsafe-type-assertion" 2 +"../../src/pages/ReimbursementAccount/USD/BusinessInfo/subSteps/IncorporationDateBusiness.tsx" "rulesdir/no-onyx-loading-status" 1 +"../../src/pages/ReimbursementAccount/USD/BusinessInfo/subSteps/IncorporationStateBusiness.tsx" "rulesdir/no-onyx-loading-status" 1 "../../src/pages/ReimbursementAccount/USD/BusinessInfo/subSteps/IndustryCode/IndustryCodeSelector.tsx" "react-hooks/set-state-in-effect" 1 +"../../src/pages/ReimbursementAccount/USD/BusinessInfo/subSteps/PhoneNumberBusiness.tsx" "rulesdir/no-onyx-loading-status" 1 +"../../src/pages/ReimbursementAccount/USD/BusinessInfo/subSteps/TaxIdBusiness.tsx" "rulesdir/no-onyx-loading-status" 1 "../../src/pages/ReimbursementAccount/USD/BusinessInfo/subSteps/TypeBusiness/BusinessTypePicker/BusinessTypeSelectorModal.tsx" "@typescript-eslint/no-unsafe-type-assertion" 1 "../../src/pages/ReimbursementAccount/USD/BusinessInfo/subSteps/TypeBusiness/BusinessTypePicker/BusinessTypeSelectorModal.tsx" "no-restricted-imports" 1 "../../src/pages/ReimbursementAccount/USD/BusinessInfo/subSteps/TypeBusiness/BusinessTypePicker/index.tsx" "@typescript-eslint/no-unsafe-type-assertion" 1 +"../../src/pages/ReimbursementAccount/USD/BusinessInfo/subSteps/TypeBusiness/TypeBusiness.tsx" "rulesdir/no-onyx-loading-status" 1 "../../src/pages/ReimbursementAccount/USD/BusinessInfo/subSteps/WebsiteBusiness.tsx" "@typescript-eslint/no-unsafe-type-assertion" 1 +"../../src/pages/ReimbursementAccount/USD/BusinessInfo/subSteps/WebsiteBusiness.tsx" "rulesdir/no-onyx-loading-status" 1 "../../src/pages/ReimbursementAccount/USD/ConnectBankAccount/components/BankAccountValidationForm.tsx" "@typescript-eslint/no-unsafe-type-assertion" 2 "../../src/pages/ReimbursementAccount/USD/ConnectBankAccount/ConnectBankAccount.tsx" "no-restricted-imports" 1 +"../../src/pages/ReimbursementAccount/USD/Requestor/PersonalInfo/subSteps/Address.tsx" "rulesdir/no-onyx-loading-status" 1 +"../../src/pages/ReimbursementAccount/USD/Requestor/PersonalInfo/subSteps/DateOfBirth.tsx" "rulesdir/no-onyx-loading-status" 1 +"../../src/pages/ReimbursementAccount/USD/Requestor/PersonalInfo/subSteps/SocialSecurityNumber.tsx" "rulesdir/no-onyx-loading-status" 1 "../../src/pages/ReimbursementAccount/utils/getSubStepValues.ts" "@typescript-eslint/no-unsafe-type-assertion" 4 "../../src/pages/ReimbursementAccount/VerifiedBankAccountFlowEntryPoint.tsx" "no-restricted-imports" 1 "../../src/pages/RejectExpenseReportPage.tsx" "no-restricted-imports" 1 @@ -1125,15 +1247,20 @@ "../../src/pages/Search/SearchMoneyRequestReportPage.tsx" "@typescript-eslint/no-unsafe-type-assertion" 2 "../../src/pages/Search/SearchPage.tsx" "react-hooks/set-state-in-effect" 1 "../../src/pages/Search/SearchPageNarrow/index.tsx" "no-restricted-imports" 1 +"../../src/pages/Search/SearchReportsMergeReports.tsx" "rulesdir/no-onyx-loading-status" 1 "../../src/pages/Search/SearchSavePage.tsx" "no-restricted-imports" 1 "../../src/pages/Search/SearchTransactionsChangeReport.tsx" "@typescript-eslint/no-unsafe-type-assertion" 1 "../../src/pages/SetDefaultWorkspacePage.tsx" "no-restricted-imports" 1 +"../../src/pages/SetDefaultWorkspacePage.tsx" "rulesdir/no-onyx-loading-status" 1 "../../src/pages/settings/AboutPage/AboutPage.tsx" "no-restricted-imports" 1 "../../src/pages/settings/AboutPage/AboutPage.tsx" "react-hooks/refs" 1 "../../src/pages/settings/Agents/AgentsPage.tsx" "no-restricted-imports" 1 "../../src/pages/settings/Agents/DynamicAddAgentPage.tsx" "no-restricted-imports" 1 +"../../src/pages/settings/Agents/DynamicAddAgentPage.tsx" "rulesdir/no-onyx-loading-status" 2 "../../src/pages/settings/Agents/DynamicEditAgentPage.tsx" "no-restricted-imports" 1 +"../../src/pages/settings/Agents/DynamicEditAgentPage.tsx" "rulesdir/no-onyx-loading-status" 1 "../../src/pages/settings/Agents/DynamicNewAgentPage.tsx" "no-restricted-imports" 1 +"../../src/pages/settings/Agents/Fields/DynamicAddAgentAvatarPage.tsx" "rulesdir/no-onyx-loading-status" 1 "../../src/pages/settings/Agents/Fields/DynamicEditAgentAvatarPage.tsx" "no-restricted-imports" 1 "../../src/pages/settings/Agents/Fields/DynamicEditNamePage.tsx" "no-restricted-imports" 1 "../../src/pages/settings/Agents/Fields/DynamicEditPromptPage.tsx" "@typescript-eslint/no-unsafe-type-assertion" 1 @@ -1142,6 +1269,7 @@ "../../src/pages/settings/Copilot/CopilotPage.tsx" "no-restricted-imports" 1 "../../src/pages/settings/DynamicKeyboardShortcutsPage.tsx" "@typescript-eslint/no-deprecated/MenuItem" 1 "../../src/pages/settings/DynamicKeyboardShortcutsPage.tsx" "no-restricted-imports" 1 +"../../src/pages/settings/EmailIssue/index.tsx" "rulesdir/no-onyx-loading-status" 1 "../../src/pages/settings/ExitSurvey/DynamicExitSurveyConfirmPage.tsx" "@typescript-eslint/no-unsafe-type-assertion" 1 "../../src/pages/settings/ExitSurvey/DynamicExitSurveyConfirmPage.tsx" "no-restricted-imports" 1 "../../src/pages/settings/ExitSurvey/DynamicExitSurveyReasonPage.tsx" "no-restricted-imports" 1 @@ -1156,10 +1284,12 @@ "../../src/pages/settings/Profile/Contacts/DynamicContactMethodDetailsPage.tsx" "no-restricted-imports" 1 "../../src/pages/settings/Profile/Contacts/DynamicContactMethodDetailsPage.tsx" "react-hooks/refs" 3 "../../src/pages/settings/Profile/Contacts/DynamicContactMethodDetailsPage.tsx" "react-hooks/set-state-in-effect" 3 +"../../src/pages/settings/Profile/Contacts/DynamicContactMethodDetailsPage.tsx" "rulesdir/no-onyx-loading-status" 1 "../../src/pages/settings/Profile/Contacts/DynamicContactMethodsPage.tsx" "@typescript-eslint/no-deprecated/MenuItem" 1 "../../src/pages/settings/Profile/Contacts/DynamicContactMethodsPage.tsx" "no-restricted-imports" 1 "../../src/pages/settings/Profile/Contacts/DynamicNewContactMethodPage.tsx" "no-restricted-imports" 1 "../../src/pages/settings/Profile/CustomStatus/SetDatePage.tsx" "no-restricted-imports" 1 +"../../src/pages/settings/Profile/CustomStatus/SetDatePage.tsx" "rulesdir/no-onyx-loading-status" 1 "../../src/pages/settings/Profile/CustomStatus/SetTimePage.tsx" "no-restricted-imports" 1 "../../src/pages/settings/Profile/CustomStatus/StatusClearAfterPage.tsx" "@typescript-eslint/no-deprecated/MenuItemWithTopDescription" 2 "../../src/pages/settings/Profile/CustomStatus/StatusClearAfterPage.tsx" "no-restricted-imports" 1 @@ -1168,6 +1298,7 @@ "../../src/pages/settings/Profile/CustomStatus/StatusPage.tsx" "no-restricted-imports" 1 "../../src/pages/settings/Profile/CustomStatus/StatusPage.tsx" "react-hooks/set-state-in-effect" 1 "../../src/pages/settings/Profile/CustomStatus/VacationDelegateMissingWorkspacesPage/index.tsx" "no-restricted-imports" 1 +"../../src/pages/settings/Profile/CustomStatus/VacationDelegateMissingWorkspacesPage/index.tsx" "rulesdir/no-onyx-loading-status" 1 "../../src/pages/settings/Profile/DisplayNamePage.tsx" "no-restricted-imports" 1 "../../src/pages/settings/Profile/PersonalDetails/BaseLegalNamePage.tsx" "no-restricted-imports" 1 "../../src/pages/settings/Profile/PersonalDetails/DynamicCountrySelectionPage.tsx" "@typescript-eslint/no-unsafe-type-assertion" 1 @@ -1175,6 +1306,7 @@ "../../src/pages/settings/Profile/PersonalDetails/DynamicStateSelectionPage.tsx" "@typescript-eslint/no-unsafe-type-assertion" 2 "../../src/pages/settings/Profile/PersonalDetails/DynamicStateSelectionPage.tsx" "no-restricted-imports" 1 "../../src/pages/settings/Profile/PersonalDetails/PersonalAddressPage.tsx" "@typescript-eslint/no-unsafe-type-assertion" 2 +"../../src/pages/settings/Profile/PersonalDetails/PersonalAddressPage.tsx" "rulesdir/no-onyx-loading-status" 1 "../../src/pages/settings/Profile/PersonalDetails/PrivatePersonalDetailsConfirmValidateCodePage.tsx" "@typescript-eslint/no-unsafe-type-assertion" 1 "../../src/pages/settings/Profile/PersonalDetails/PrivatePersonalDetailsPage.tsx" "@typescript-eslint/no-unsafe-type-assertion" 8 "../../src/pages/settings/Profile/PersonalDetails/PrivatePersonalDetailsPage.tsx" "no-restricted-imports" 1 @@ -1193,6 +1325,7 @@ "../../src/pages/settings/Report/DynamicWriteCapabilityPage.tsx" "no-restricted-imports" 1 "../../src/pages/settings/Report/RoomNamePage.tsx" "no-restricted-imports" 1 "../../src/pages/settings/Rules/ExpenseRulesPage.tsx" "no-restricted-imports" 1 +"../../src/pages/settings/Rules/ExpenseRulesPage.tsx" "rulesdir/no-onyx-loading-status" 1 "../../src/pages/settings/Rules/RulePageBase.tsx" "no-restricted-imports" 1 "../../src/pages/settings/Security/AddDelegate/AddDelegatePage.tsx" "no-restricted-imports" 1 "../../src/pages/settings/Security/AddDelegate/ConfirmDelegatePage.tsx" "@typescript-eslint/no-unsafe-type-assertion" 1 @@ -1201,6 +1334,7 @@ "../../src/pages/settings/Security/AddDelegate/UpdateDelegateRole/UpdateDelegateRolePage.tsx" "no-restricted-imports" 1 "../../src/pages/settings/Security/AddDelegate/UpdateDelegateRole/UpdateDelegateValidateCodePage.tsx" "@typescript-eslint/no-unsafe-type-assertion" 1 "../../src/pages/settings/Security/CloseAccount/CloseAccountPage.tsx" "no-restricted-imports" 1 +"../../src/pages/settings/Security/CloseAccount/CloseAccountValidateCodePage.tsx" "rulesdir/no-onyx-loading-status" 1 "../../src/pages/settings/Security/DeviceManagementPage.tsx" "no-restricted-imports" 1 "../../src/pages/settings/Security/LockAccount/FailedToLockAccountPage.tsx" "no-restricted-imports" 1 "../../src/pages/settings/Security/LockAccount/UnlockAccountPage.tsx" "no-restricted-imports" 1 @@ -1208,11 +1342,17 @@ "../../src/pages/settings/Security/MergeAccounts/AccountValidatePage.tsx" "no-restricted-imports" 1 "../../src/pages/settings/Security/MergeAccounts/MergeResultPage.tsx" "no-restricted-imports" 1 "../../src/pages/settings/Security/SecuritySettingsPage.tsx" "no-restricted-imports" 1 +"../../src/pages/settings/Security/TwoFactorAuth/DynamicSuccessPage.tsx" "rulesdir/no-onyx-loading-status" 1 +"../../src/pages/settings/Security/TwoFactorAuth/DynamicTwoFactorAuthPage.tsx" "rulesdir/no-onyx-loading-status" 2 "../../src/pages/settings/Security/TwoFactorAuth/EnabledPage.tsx" "@typescript-eslint/no-deprecated/MenuItem" 1 +"../../src/pages/settings/Security/TwoFactorAuth/SuccessPage.tsx" "rulesdir/no-onyx-loading-status" 1 "../../src/pages/settings/Security/TwoFactorAuth/TwoFactorAuthWrapper.tsx" "no-restricted-imports" 1 "../../src/pages/settings/SettingsMenuItem.tsx" "@typescript-eslint/no-deprecated/MenuItem" 1 "../../src/pages/settings/Subscription/CancelSubscriptionPage/index.tsx" "no-restricted-imports" 1 +"../../src/pages/settings/Subscription/CancelSubscriptionPage/index.tsx" "rulesdir/no-onyx-loading-status" 2 +"../../src/pages/settings/Subscription/CardSection/CardSection.tsx" "rulesdir/no-onyx-loading-status" 1 "../../src/pages/settings/Subscription/DisableAutoRenewSurveyPage/index.tsx" "no-restricted-imports" 1 +"../../src/pages/settings/Subscription/EarlyRenewalOfferPage/index.web.tsx" "rulesdir/no-onyx-loading-status" 1 "../../src/pages/settings/Subscription/ExpensifyCodePage/index.tsx" "no-restricted-imports" 1 "../../src/pages/settings/Subscription/PaymentCard/ChangeBillingCurrency/index.tsx" "no-restricted-imports" 1 "../../src/pages/settings/Subscription/PaymentCard/ChangeBillingCurrency/index.tsx" "no-restricted-syntax" 1 @@ -1230,8 +1370,11 @@ "../../src/pages/settings/Troubleshoot/DynamicBetaOverridesPage.tsx" "no-restricted-imports" 1 "../../src/pages/settings/Troubleshoot/ServerSelector.tsx" "no-restricted-imports" 1 "../../src/pages/settings/Troubleshoot/TroubleshootPage.tsx" "no-restricted-imports" 1 +"../../src/pages/settings/Troubleshoot/TroubleshootPage.tsx" "rulesdir/no-onyx-loading-status" 1 +"../../src/pages/settings/useInitialSettingsPageMenuData.ts" "rulesdir/no-onyx-loading-status" 1 "../../src/pages/settings/VerifyAccountPageBase.tsx" "no-restricted-imports" 1 "../../src/pages/settings/Wallet/AddCardToDigitalWalletPage.tsx" "no-restricted-imports" 1 +"../../src/pages/settings/Wallet/AddCardToDigitalWalletPage.tsx" "rulesdir/no-onyx-loading-status" 1 "../../src/pages/settings/Wallet/AddDebitCardPage.tsx" "no-restricted-imports" 1 "../../src/pages/settings/Wallet/BankAccountPurposePage/index.tsx" "no-restricted-imports" 1 "../../src/pages/settings/Wallet/BankAccountPurposePage/substeps/BankAccountPurpose.tsx" "@typescript-eslint/no-deprecated/MenuItem" 2 @@ -1239,30 +1382,42 @@ "../../src/pages/settings/Wallet/CardAddedToWalletPage.tsx" "no-restricted-imports" 1 "../../src/pages/settings/Wallet/ChooseTransferAccountPage.tsx" "@typescript-eslint/no-unsafe-type-assertion" 1 "../../src/pages/settings/Wallet/ChooseTransferAccountPage.tsx" "no-restricted-imports" 1 +"../../src/pages/settings/Wallet/ChooseTransferAccountPage.tsx" "rulesdir/no-onyx-loading-status" 1 "../../src/pages/settings/Wallet/CountrySelectionList.tsx" "@typescript-eslint/no-unsafe-type-assertion" 1 +"../../src/pages/settings/Wallet/EditBankAccountNicknamePage.tsx" "rulesdir/no-onyx-loading-status" 1 "../../src/pages/settings/Wallet/EnableGlobalReimbursements/EnableGlobalReimbursementsAgreementsPage.tsx" "@typescript-eslint/no-unsafe-type-assertion" 2 "../../src/pages/settings/Wallet/EnableGlobalReimbursements/EnableGlobalReimbursementsBusinessPage/index.tsx" "@typescript-eslint/no-unsafe-type-assertion" 1 +"../../src/pages/settings/Wallet/EnableGlobalReimbursements/EnableGlobalReimbursementsSignPage.tsx" "rulesdir/no-onyx-loading-status" 1 "../../src/pages/settings/Wallet/ExpensifyCardPage/ChangePINPage.tsx" "no-restricted-imports" 1 "../../src/pages/settings/Wallet/ExpensifyCardPage/index.tsx" "@typescript-eslint/no-deprecated/MenuItemWithTopDescription" 2 "../../src/pages/settings/Wallet/ExpensifyCardPage/index.tsx" "no-restricted-imports" 1 +"../../src/pages/settings/Wallet/ExpensifyCardPage/index.tsx" "rulesdir/no-onyx-loading-status" 1 "../../src/pages/settings/Wallet/ImportTransactionsCardNamePage.tsx" "no-restricted-imports" 1 "../../src/pages/settings/Wallet/ImportTransactionsCurrencyPage.tsx" "no-restricted-imports" 1 "../../src/pages/settings/Wallet/ImportTransactionsPage.tsx" "no-restricted-imports" 1 +"../../src/pages/settings/Wallet/ImportTransactionsSpreadsheetPage.tsx" "rulesdir/no-onyx-loading-status" 1 +"../../src/pages/settings/Wallet/InternationalDepositAccount/index.tsx" "rulesdir/no-onyx-loading-status" 1 "../../src/pages/settings/Wallet/InternationalDepositAccount/InternationalDepositAccountContent.tsx" "no-restricted-imports" 1 "../../src/pages/settings/Wallet/InternationalDepositAccount/subPages/AccountFlowEntryPoint.tsx" "no-restricted-imports" 1 +"../../src/pages/settings/Wallet/InternationalDepositAccount/subPages/AccountFlowEntryPoint.tsx" "rulesdir/no-onyx-loading-status" 1 "../../src/pages/settings/Wallet/InternationalDepositAccount/subPages/Confirmation.tsx" "@typescript-eslint/no-unsafe-type-assertion" 2 "../../src/pages/settings/Wallet/InternationalDepositAccount/utils.ts" "@typescript-eslint/no-unsafe-type-assertion" 2 "../../src/pages/settings/Wallet/PaymentMethodList.tsx" "@typescript-eslint/no-deprecated/MenuItem" 1 "../../src/pages/settings/Wallet/PaymentMethodList.tsx" "@typescript-eslint/no-unsafe-type-assertion" 7 +"../../src/pages/settings/Wallet/PaymentMethodList.tsx" "rulesdir/no-onyx-loading-status" 2 "../../src/pages/settings/Wallet/PaymentMethodListItem.tsx" "@typescript-eslint/no-deprecated/MenuItem" 1 "../../src/pages/settings/Wallet/PersonalCardDetailsHeaderMenu.tsx" "@typescript-eslint/no-deprecated/MenuItem" 2 "../../src/pages/settings/Wallet/PersonalCardDetailsPage.tsx" "@typescript-eslint/no-unsafe-type-assertion" 2 "../../src/pages/settings/Wallet/PersonalCardDetailsPage.tsx" "no-restricted-imports" 1 +"../../src/pages/settings/Wallet/PersonalCardDetailsPage.tsx" "rulesdir/no-onyx-loading-status" 1 "../../src/pages/settings/Wallet/PersonalCardEditNamePage.tsx" "no-restricted-imports" 1 +"../../src/pages/settings/Wallet/PersonalCardEditNamePage.tsx" "rulesdir/no-onyx-loading-status" 1 "../../src/pages/settings/Wallet/PersonalCardEditTransactionStartDatePage.tsx" "no-restricted-imports" 1 +"../../src/pages/settings/Wallet/PersonalCards/AddNewCardPage.tsx" "rulesdir/no-onyx-loading-status" 1 "../../src/pages/settings/Wallet/PersonalCards/FixPersonalCardConnectionPage/index.native.tsx" "no-restricted-imports" 1 "../../src/pages/settings/Wallet/PersonalCards/FixPersonalCardConnectionPage/index.tsx" "no-restricted-imports" 1 "../../src/pages/settings/Wallet/PersonalCards/FixPersonalCardConnectionPage/useFixPersonalCardConnection.ts" "@typescript-eslint/no-unsafe-type-assertion" 2 +"../../src/pages/settings/Wallet/PersonalCards/FixPersonalCardConnectionPage/useFixPersonalCardConnection.ts" "rulesdir/no-onyx-loading-status" 1 "../../src/pages/settings/Wallet/PersonalCards/steps/BankConnection/index.native.tsx" "no-restricted-imports" 1 "../../src/pages/settings/Wallet/PersonalCards/steps/BankConnection/index.tsx" "no-restricted-imports" 1 "../../src/pages/settings/Wallet/PersonalCards/steps/PlaidConnectionStep.tsx" "no-restricted-imports" 1 @@ -1279,17 +1434,21 @@ "../../src/pages/settings/Wallet/ShareBankAccount/ShareBankAccount.tsx" "no-restricted-imports" 1 "../../src/pages/settings/Wallet/ShareBankAccount/ShareBankAccount.tsx" "react-hooks/set-state-in-effect" 1 "../../src/pages/settings/Wallet/TransactionsImportedPage.tsx" "no-restricted-imports" 1 +"../../src/pages/settings/Wallet/TransactionsImportedPage.tsx" "rulesdir/no-onyx-loading-status" 1 "../../src/pages/settings/Wallet/TransferBalancePage.tsx" "@typescript-eslint/no-deprecated/MenuItem" 2 "../../src/pages/settings/Wallet/TransferBalancePage.tsx" "no-restricted-imports" 1 "../../src/pages/settings/Wallet/TravelCVVPage/TravelCVVPage.tsx" "no-restricted-imports" 1 +"../../src/pages/settings/Wallet/TravelCVVPage/TravelCVVPage.tsx" "rulesdir/no-onyx-loading-status" 2 "../../src/pages/settings/Wallet/UnshareBankAccount/UnshareBankAccount.tsx" "no-restricted-imports" 1 "../../src/pages/settings/Wallet/UpdatePersonalBankAccountPage.tsx" "@typescript-eslint/no-unsafe-type-assertion" 1 "../../src/pages/settings/Wallet/UpdatePersonalBankAccountPage.tsx" "no-restricted-imports" 1 +"../../src/pages/settings/Wallet/UpdatePersonalBankAccountPage.tsx" "rulesdir/no-onyx-loading-status" 1 "../../src/pages/settings/Wallet/WalletPage/CardDetails.tsx" "@typescript-eslint/no-deprecated/MenuItemWithTopDescription" 4 "../../src/pages/settings/Wallet/WalletPage/index.tsx" "@typescript-eslint/no-deprecated/MenuItemWithTopDescription" 1 "../../src/pages/settings/Wallet/WalletPage/index.tsx" "@typescript-eslint/no-unsafe-type-assertion" 2 "../../src/pages/settings/Wallet/WalletPage/index.tsx" "no-restricted-imports" 2 "../../src/pages/settings/Wallet/WalletPage/index.tsx" "react-hooks/set-state-in-effect" 1 +"../../src/pages/settings/Wallet/WiseGlobalReimbursementsIntroPage.tsx" "rulesdir/no-onyx-loading-status" 1 "../../src/pages/Share/ShareDetailsPage.tsx" "no-restricted-imports" 1 "../../src/pages/Share/ShareRootPage.tsx" "@typescript-eslint/no-unsafe-type-assertion" 1 "../../src/pages/Share/ShareRootPage.tsx" "no-restricted-imports" 1 @@ -1308,9 +1467,11 @@ "../../src/pages/signin/SMSDeliveryFailurePage.tsx" "@typescript-eslint/no-unsafe-type-assertion" 2 "../../src/pages/signin/ValidateCodeForm/BaseValidateCodeForm.tsx" "react-hooks/set-state-in-effect" 4 "../../src/pages/tasks/DynamicNewTaskDescriptionPage.tsx" "no-restricted-imports" 1 +"../../src/pages/tasks/DynamicNewTaskDescriptionPage.tsx" "rulesdir/no-onyx-loading-status" 1 "../../src/pages/tasks/DynamicNewTaskDetailsPage.tsx" "no-restricted-imports" 1 "../../src/pages/tasks/DynamicNewTaskPage.tsx" "no-restricted-imports" 1 "../../src/pages/tasks/DynamicNewTaskTitlePage.tsx" "no-restricted-imports" 1 +"../../src/pages/tasks/DynamicNewTaskTitlePage.tsx" "rulesdir/no-onyx-loading-status" 1 "../../src/pages/tasks/DynamicTaskAssigneeSelectorModal.tsx" "no-restricted-imports" 1 "../../src/pages/tasks/DynamicTaskShareDestinationSelectorModal.tsx" "@typescript-eslint/no-unsafe-type-assertion" 2 "../../src/pages/tasks/DynamicTaskShareDestinationSelectorModal.tsx" "no-restricted-imports" 1 @@ -1321,11 +1482,13 @@ "../../src/pages/TeachersUnite/KnowATeacherPage.tsx" "no-restricted-imports" 1 "../../src/pages/TeachersUnite/SaveTheWorldPage.tsx" "@typescript-eslint/no-unsafe-type-assertion" 1 "../../src/pages/TeachersUnite/SaveTheWorldPage.tsx" "no-restricted-imports" 1 +"../../src/pages/TrackExpensePage.tsx" "rulesdir/no-onyx-loading-status" 1 "../../src/pages/TransactionDuplicate/DuplicateTransactionItem.tsx" "@typescript-eslint/no-unsafe-type-assertion" 2 "../../src/pages/TransactionDuplicate/DynamicConfirmationPage.tsx" "@typescript-eslint/no-deprecated/fontSize" 1 "../../src/pages/TransactionDuplicate/DynamicConfirmationPage.tsx" "@typescript-eslint/no-unsafe-type-assertion" 1 "../../src/pages/TransactionDuplicate/DynamicConfirmationPage.tsx" "no-restricted-imports" 2 "../../src/pages/TransactionDuplicate/DynamicConfirmationPage.tsx" "react-hooks/refs" 12 +"../../src/pages/TransactionDuplicate/DynamicConfirmationPage.tsx" "rulesdir/no-onyx-loading-status" 2 "../../src/pages/TransactionDuplicate/DynamicReviewBillablePage.tsx" "no-restricted-imports" 1 "../../src/pages/TransactionDuplicate/DynamicReviewCategoryPage.tsx" "no-restricted-imports" 1 "../../src/pages/TransactionDuplicate/DynamicReviewDescriptionPage.tsx" "no-restricted-imports" 1 @@ -1337,10 +1500,14 @@ "../../src/pages/TransactionDuplicate/ReviewFields.tsx" "@typescript-eslint/no-deprecated/fontSize" 1 "../../src/pages/TransactionMerge/DynamicConfirmationPage.tsx" "@typescript-eslint/no-unsafe-type-assertion" 1 "../../src/pages/TransactionMerge/DynamicConfirmationPage.tsx" "no-restricted-imports" 1 +"../../src/pages/TransactionMerge/DynamicConfirmationPage.tsx" "rulesdir/no-onyx-loading-status" 1 "../../src/pages/TransactionMerge/DynamicDetailsReviewPage.tsx" "@typescript-eslint/no-unsafe-type-assertion" 1 "../../src/pages/TransactionMerge/DynamicDetailsReviewPage.tsx" "no-restricted-imports" 1 +"../../src/pages/TransactionMerge/DynamicDetailsReviewPage.tsx" "rulesdir/no-onyx-loading-status" 1 "../../src/pages/TransactionMerge/DynamicMergeTransactionsListPage.tsx" "no-restricted-imports" 1 +"../../src/pages/TransactionMerge/DynamicMergeTransactionsListPage.tsx" "rulesdir/no-onyx-loading-status" 1 "../../src/pages/TransactionMerge/DynamicReceiptReviewPage.tsx" "no-restricted-imports" 1 +"../../src/pages/TransactionMerge/DynamicReceiptReviewPage.tsx" "rulesdir/no-onyx-loading-status" 1 "../../src/pages/TransactionMerge/MergeTransactionItem.tsx" "@typescript-eslint/no-unsafe-type-assertion" 1 "../../src/pages/TransactionMerge/MergeTransactionsListContent.tsx" "@typescript-eslint/no-unsafe-type-assertion" 1 "../../src/pages/Travel/CarTripDetails.tsx" "@typescript-eslint/no-deprecated/MenuItemWithTopDescription" 2 @@ -1351,6 +1518,7 @@ "../../src/pages/Travel/DynamicTripSummaryPage.tsx" "no-restricted-imports" 1 "../../src/pages/Travel/DynamicWorkspaceConfirmationForTravelPage.tsx" "@typescript-eslint/no-unsafe-type-assertion" 2 "../../src/pages/Travel/EnableTravel/EnableTravelContent.tsx" "no-restricted-imports" 1 +"../../src/pages/Travel/EnableTravel/index.tsx" "rulesdir/no-onyx-loading-status" 3 "../../src/pages/Travel/HotelTripDetails.tsx" "@typescript-eslint/no-deprecated/MenuItemWithTopDescription" 3 "../../src/pages/Travel/MyTripsPage.tsx" "no-restricted-imports" 1 "../../src/pages/Travel/TravelDotLinkWebview.tsx" "no-restricted-imports" 1 @@ -1375,6 +1543,7 @@ "../../src/pages/workspace/accounting/dualentry/DualEntryExistingConnectionsPage.tsx" "@typescript-eslint/no-deprecated/MenuItem" 1 "../../src/pages/workspace/accounting/dualentry/DualEntryExistingConnectionsPage.tsx" "no-restricted-imports" 1 "../../src/pages/workspace/accounting/dualentry/export/DualEntryExportPage.tsx" "@typescript-eslint/no-unsafe-type-assertion" 1 +"../../src/pages/workspace/accounting/ExactOnlineWaitlistButton.tsx" "rulesdir/no-onyx-loading-status" 4 "../../src/pages/workspace/accounting/intacct/advanced/DynamicSageIntacctAccountingMethodPage.tsx" "@typescript-eslint/no-unsafe-type-assertion" 1 "../../src/pages/workspace/accounting/intacct/DynamicSageIntacctPrerequisitesPage.tsx" "no-restricted-imports" 1 "../../src/pages/workspace/accounting/intacct/EnterSageIntacctCredentialsPage.tsx" "no-restricted-imports" 1 @@ -1402,7 +1571,9 @@ "../../src/pages/workspace/accounting/netsuite/import/NetSuiteImportCustomersOrProjectsPage.tsx" "rulesdir/no-default-id-values" 1 "../../src/pages/workspace/accounting/netsuite/import/NetSuiteImportCustomFieldEdit.tsx" "@typescript-eslint/no-unsafe-type-assertion" 12 "../../src/pages/workspace/accounting/netsuite/import/NetSuiteImportCustomFieldNew/NetSuiteCustomListSelectorPage.tsx" "no-restricted-imports" 1 +"../../src/pages/workspace/accounting/netsuite/import/NetSuiteImportCustomFieldNew/NetSuiteImportAddCustomListPage.tsx" "rulesdir/no-onyx-loading-status" 1 "../../src/pages/workspace/accounting/netsuite/import/NetSuiteImportCustomFieldNew/NetSuiteImportAddCustomSegmentContent.tsx" "@typescript-eslint/no-unsafe-type-assertion" 1 +"../../src/pages/workspace/accounting/netsuite/import/NetSuiteImportCustomFieldNew/NetSuiteImportAddCustomSegmentPage.tsx" "rulesdir/no-onyx-loading-status" 1 "../../src/pages/workspace/accounting/netsuite/import/NetSuiteImportCustomFieldNew/NetSuiteMenuWithTopDescriptionForm.tsx" "@typescript-eslint/no-deprecated/MenuItemWithTopDescription" 1 "../../src/pages/workspace/accounting/netsuite/import/NetSuiteImportCustomFieldNew/subPages/ChooseSegmentTypeStep.tsx" "@typescript-eslint/no-unsafe-type-assertion" 1 "../../src/pages/workspace/accounting/netsuite/import/NetSuiteImportCustomFieldNew/subPages/ConfirmCustomSegmentList.tsx" "@typescript-eslint/no-unsafe-type-assertion" 2 @@ -1477,6 +1648,8 @@ "../../src/pages/workspace/accounting/xero/XeroTaxesConfigurationPage.tsx" "no-restricted-syntax" 4 "../../src/pages/workspace/accounting/xero/XeroTaxesConfigurationPage.tsx" "rulesdir/no-default-id-values" 1 "../../src/pages/workspace/accounting/xero/XeroTrackingCategoryConfigurationPage.tsx" "@typescript-eslint/no-unsafe-type-assertion" 2 +"../../src/pages/workspace/archiveWorkspace/ArchiveWorkspaceFlow.tsx" "rulesdir/no-onyx-loading-status" 1 +"../../src/pages/workspace/archiveWorkspace/UnarchiveWorkspaceFlow.tsx" "rulesdir/no-onyx-loading-status" 1 "../../src/pages/workspace/categories/CategoryGLCodePage.tsx" "no-restricted-imports" 1 "../../src/pages/workspace/categories/CategoryPayrollCodePage.tsx" "no-restricted-imports" 1 "../../src/pages/workspace/categories/CategorySettingsPage.tsx" "@typescript-eslint/no-deprecated/MenuItem" 1 @@ -1494,6 +1667,7 @@ "../../src/pages/workspace/categories/DynamicEditCategoryPage.tsx" "no-restricted-imports" 1 "../../src/pages/workspace/categories/DynamicExpenseLimitTypeSelectorPage.tsx" "no-restricted-imports" 1 "../../src/pages/workspace/categories/ImportedCategoriesPage.tsx" "no-restricted-imports" 1 +"../../src/pages/workspace/categories/ImportedCategoriesPage.tsx" "rulesdir/no-onyx-loading-status" 1 "../../src/pages/workspace/categories/WorkspaceCategoriesPage.tsx" "no-restricted-imports" 1 "../../src/pages/workspace/categories/WorkspaceCategoriesPage.tsx" "react-hooks/set-state-in-effect" 1 "../../src/pages/workspace/companyCards/addNew/AmexCustomFeed.tsx" "no-restricted-imports" 1 @@ -1502,7 +1676,9 @@ "../../src/pages/workspace/companyCards/addNew/CardTypeStep.tsx" "no-restricted-imports" 1 "../../src/pages/workspace/companyCards/addNew/CompanyCardLayoutNamePage.tsx" "no-restricted-imports" 1 "../../src/pages/workspace/companyCards/addNew/CompanyCardsImportedPage.tsx" "no-restricted-imports" 1 +"../../src/pages/workspace/companyCards/addNew/CompanyCardsImportedPage.tsx" "rulesdir/no-onyx-loading-status" 2 "../../src/pages/workspace/companyCards/addNew/DetailsStep.tsx" "no-restricted-imports" 1 +"../../src/pages/workspace/companyCards/addNew/DynamicAddNewCardPage.tsx" "rulesdir/no-onyx-loading-status" 1 "../../src/pages/workspace/companyCards/addNew/ImportFromFileStep.tsx" "no-restricted-imports" 1 "../../src/pages/workspace/companyCards/addNew/PlaidConnectionStep.tsx" "no-restricted-imports" 1 "../../src/pages/workspace/companyCards/addNew/SelectBankStep.tsx" "no-restricted-imports" 1 @@ -1510,6 +1686,7 @@ "../../src/pages/workspace/companyCards/addNew/SelectCountryStep.tsx" "no-restricted-imports" 1 "../../src/pages/workspace/companyCards/addNew/SelectFeedType.tsx" "no-restricted-imports" 1 "../../src/pages/workspace/companyCards/assignCard/CardNameStep.tsx" "no-restricted-imports" 1 +"../../src/pages/workspace/companyCards/assignCard/TransactionStartDateStep.tsx" "rulesdir/no-onyx-loading-status" 1 "../../src/pages/workspace/companyCards/BankConnection/index.native.tsx" "no-restricted-imports" 1 "../../src/pages/workspace/companyCards/BankConnection/index.tsx" "no-restricted-imports" 1 "../../src/pages/workspace/companyCards/BankConnection/index.tsx" "react-hooks/set-state-in-effect" 1 @@ -1517,15 +1694,21 @@ "../../src/pages/workspace/companyCards/DynamicWorkspaceCompanyCardDetailsPage.tsx" "@typescript-eslint/no-deprecated/MenuItemWithTopDescription" 1 "../../src/pages/workspace/companyCards/DynamicWorkspaceCompanyCardDetailsPage.tsx" "@typescript-eslint/no-unsafe-type-assertion" 1 "../../src/pages/workspace/companyCards/DynamicWorkspaceCompanyCardDetailsPage.tsx" "no-restricted-imports" 1 +"../../src/pages/workspace/companyCards/DynamicWorkspaceCompanyCardDetailsPage.tsx" "rulesdir/no-onyx-loading-status" 2 "../../src/pages/workspace/companyCards/WorkspaceCompanyCardAddWorkEmailPage.tsx" "@typescript-eslint/no-unsafe-type-assertion" 2 "../../src/pages/workspace/companyCards/WorkspaceCompanyCardAddWorkEmailPage.tsx" "no-restricted-imports" 1 "../../src/pages/workspace/companyCards/WorkspaceCompanyCardEditCardNamePage.tsx" "no-restricted-imports" 1 +"../../src/pages/workspace/companyCards/WorkspaceCompanyCardEditCardNamePage.tsx" "rulesdir/no-onyx-loading-status" 1 "../../src/pages/workspace/companyCards/WorkspaceCompanyCardFeedSelectorPage.tsx" "@typescript-eslint/no-unsafe-type-assertion" 2 "../../src/pages/workspace/companyCards/WorkspaceCompanyCardFeedSelectorPage.tsx" "no-restricted-imports" 1 +"../../src/pages/workspace/companyCards/WorkspaceCompanyCardsBulkEditTransactionStartDatePage.tsx" "rulesdir/no-onyx-loading-status" 1 "../../src/pages/workspace/companyCards/WorkspaceCompanyCardsErrorConfirmation.tsx" "@typescript-eslint/no-unsafe-type-assertion" 1 +"../../src/pages/workspace/companyCards/WorkspaceCompanyCardsPage.tsx" "rulesdir/no-onyx-loading-status" 1 "../../src/pages/workspace/companyCards/WorkspaceCompanyCardsSettingsFeedNamePage.tsx" "no-restricted-imports" 1 +"../../src/pages/workspace/companyCards/WorkspaceCompanyCardsSettingsFeedNamePage.tsx" "rulesdir/no-onyx-loading-status" 2 "../../src/pages/workspace/companyCards/WorkspaceCompanyCardsSettingsPage.tsx" "@typescript-eslint/no-unsafe-type-assertion" 1 "../../src/pages/workspace/companyCards/WorkspaceCompanyCardsSettingsPage.tsx" "no-restricted-imports" 1 +"../../src/pages/workspace/companyCards/WorkspaceCompanyCardStatementCloseDatePage.tsx" "rulesdir/no-onyx-loading-status" 2 "../../src/pages/workspace/companyCards/WorkspaceCompanyCardStatementCloseDateSelectionList/index.tsx" "@typescript-eslint/no-deprecated/MenuItemWithTopDescription" 1 "../../src/pages/workspace/companyCards/WorkspaceCompanyCardStatementCloseDateSelectionList/index.tsx" "no-restricted-imports" 1 "../../src/pages/workspace/companyCards/WorkspaceVerifyWorkAccountPage.tsx" "@typescript-eslint/no-unsafe-type-assertion" 2 @@ -1537,9 +1720,12 @@ "../../src/pages/workspace/connections/ConnectionsMergeProviderCard.tsx" "@typescript-eslint/no-deprecated/RowMenuItem" 1 "../../src/pages/workspace/connections/ConnectionsReceiptPartnersPage.tsx" "@typescript-eslint/no-deprecated/MenuItem" 1 "../../src/pages/workspace/copyPolicySettings/CopyPolicySettingsConfirmPage.tsx" "no-restricted-imports" 1 +"../../src/pages/workspace/copyPolicySettings/CopyPolicySettingsConfirmPage.tsx" "rulesdir/no-onyx-loading-status" 1 "../../src/pages/workspace/copyPolicySettings/CopyPolicySettingsSelectFeaturesPage.tsx" "no-restricted-imports" 1 "../../src/pages/workspace/copyPolicySettings/CopyPolicySettingsSelectWorkspacesPage.tsx" "no-restricted-imports" 1 "../../src/pages/workspace/copyPolicySettings/CopyPolicySettingsUpgradePage.tsx" "no-restricted-imports" 1 +"../../src/pages/workspace/copyPolicySettings/CopyPolicySettingsUpgradePage.tsx" "rulesdir/no-onyx-loading-status" 1 +"../../src/pages/workspace/deleteWorkspace/DeleteWorkspaceFlow.tsx" "rulesdir/no-onyx-loading-status" 1 "../../src/pages/workspace/distanceRates/CreateDistanceRatePage.tsx" "no-restricted-imports" 1 "../../src/pages/workspace/distanceRates/PolicyCommuterExclusionsPage.tsx" "@typescript-eslint/no-deprecated/MenuItemWithTopDescription" 1 "../../src/pages/workspace/distanceRates/PolicyCommuterExclusionsPage.tsx" "no-restricted-imports" 1 @@ -1554,12 +1740,15 @@ "../../src/pages/workspace/distanceRates/PolicyDistanceRateTaxReclaimableEditPage.tsx" "no-restricted-imports" 1 "../../src/pages/workspace/distanceRates/PolicyDistanceRateUnitPage.tsx" "no-restricted-imports" 1 "../../src/pages/workspace/downgrade/DynamicPayAndDowngradePage.tsx" "no-restricted-imports" 1 +"../../src/pages/workspace/downgrade/DynamicPayAndDowngradePage.tsx" "rulesdir/no-onyx-loading-status" 1 "../../src/pages/workspace/downgrade/DynamicWorkspaceDowngradePage.tsx" "no-restricted-imports" 1 "../../src/pages/workspace/duplicate/WorkspaceDuplicateForm.tsx" "no-restricted-imports" 1 "../../src/pages/workspace/duplicate/WorkspaceDuplicateSelectFeaturesForm.tsx" "no-restricted-imports" 1 "../../src/pages/workspace/duplicate/WorkspaceDuplicateSelectFeaturesForm.tsx" "react-hooks/set-state-in-effect" 1 "../../src/pages/workspace/DynamicWorkspaceConfirmationPage.tsx" "@typescript-eslint/no-unsafe-type-assertion" 1 +"../../src/pages/workspace/DynamicWorkspaceInviteMessageRolePage.tsx" "rulesdir/no-onyx-loading-status" 1 "../../src/pages/workspace/DynamicWorkspaceInvitePage.tsx" "no-restricted-imports" 1 +"../../src/pages/workspace/DynamicWorkspaceInvitePage.tsx" "rulesdir/no-onyx-loading-status" 1 "../../src/pages/workspace/DynamicWorkspaceOverviewPlanTypePage.tsx" "@typescript-eslint/no-unsafe-type-assertion" 2 "../../src/pages/workspace/DynamicWorkspaceOverviewPlanTypePage.tsx" "no-restricted-imports" 1 "../../src/pages/workspace/DynamicWorkspaceOverviewPlanTypePage.tsx" "react-hooks/set-state-in-effect" 1 @@ -1571,11 +1760,13 @@ "../../src/pages/workspace/expensifyCard/DynamicWorkspaceExpensifyCardDetailsPage.tsx" "@typescript-eslint/no-deprecated/MenuItem" 1 "../../src/pages/workspace/expensifyCard/DynamicWorkspaceExpensifyCardDetailsPage.tsx" "@typescript-eslint/no-deprecated/MenuItemWithTopDescription" 1 "../../src/pages/workspace/expensifyCard/DynamicWorkspaceExpensifyCardDetailsPage.tsx" "no-restricted-imports" 1 +"../../src/pages/workspace/expensifyCard/DynamicWorkspaceExpensifyCardDetailsPage.tsx" "rulesdir/no-onyx-loading-status" 1 "../../src/pages/workspace/expensifyCard/DynamicWorkspaceSettlementAccountPage.tsx" "no-restricted-imports" 1 "../../src/pages/workspace/expensifyCard/issueNew/CardTypeStep.tsx" "@typescript-eslint/no-deprecated/MenuItem" 2 "../../src/pages/workspace/expensifyCard/issueNew/LimitTypeStep.tsx" "@typescript-eslint/no-unsafe-type-assertion" 1 "../../src/pages/workspace/expensifyCard/issueNew/spendRules/SetSpendRulesStep.tsx" "@typescript-eslint/no-unsafe-type-assertion" 1 "../../src/pages/workspace/expensifyCard/issueNew/spendRules/SpendRuleSelectionPage.tsx" "no-restricted-imports" 1 +"../../src/pages/workspace/expensifyCard/issueNew/spendRules/SpendRuleSelectionPage.tsx" "rulesdir/no-onyx-loading-status" 1 "../../src/pages/workspace/expensifyCard/WorkspaceCardSettingsPage.tsx" "no-restricted-imports" 1 "../../src/pages/workspace/expensifyCard/WorkspaceExpensifyCardAddWorkEmailPage.tsx" "no-restricted-imports" 1 "../../src/pages/workspace/expensifyCard/WorkspaceExpensifyCardBankAccounts.tsx" "@typescript-eslint/no-deprecated/MenuItem" 1 @@ -1588,6 +1779,7 @@ "../../src/pages/workspace/fields/FieldsAddListValuePage.tsx" "no-restricted-imports" 1 "../../src/pages/workspace/fields/FieldsEditValuePage.tsx" "no-restricted-imports" 1 "../../src/pages/workspace/fields/FieldsInitialListValuePage.tsx" "no-restricted-imports" 1 +"../../src/pages/workspace/fields/FieldsInitialListValuePage.tsx" "rulesdir/no-onyx-loading-status" 1 "../../src/pages/workspace/fields/FieldsInitialValuePage.tsx" "no-restricted-imports" 1 "../../src/pages/workspace/fields/FieldsListValuesPage.tsx" "no-restricted-imports" 1 "../../src/pages/workspace/fields/FieldsSettingsPage.tsx" "no-restricted-imports" 1 @@ -1612,17 +1804,23 @@ "../../src/pages/workspace/members/ImportedMembersConfirmationPage.tsx" "no-restricted-imports" 1 "../../src/pages/workspace/members/ImportedMembersConfirmationPage.tsx" "react-hooks/refs" 7 "../../src/pages/workspace/members/ImportedMembersPage.tsx" "no-restricted-imports" 1 +"../../src/pages/workspace/members/ImportedMembersPage.tsx" "rulesdir/no-onyx-loading-status" 1 "../../src/pages/workspace/members/ImportMembersPage.tsx" "no-restricted-imports" 1 "../../src/pages/workspace/members/ImportMembersPage.tsx" "no-restricted-syntax" 1 "../../src/pages/workspace/members/ImportMembersPage.tsx" "rulesdir/no-default-id-values" 1 "../../src/pages/workspace/members/WorkspaceInviteMessageComponent.tsx" "@typescript-eslint/no-unsafe-type-assertion" 1 "../../src/pages/workspace/members/WorkspaceInviteMessageComponent.tsx" "no-restricted-imports" 1 "../../src/pages/workspace/members/WorkspaceInviteMessageComponent.tsx" "react-hooks/set-state-in-effect" 1 +"../../src/pages/workspace/members/WorkspaceInviteMessageComponent.tsx" "rulesdir/no-onyx-loading-status" 1 "../../src/pages/workspace/members/WorkspaceMemberCustomFieldPage.tsx" "no-restricted-imports" 1 "../../src/pages/workspace/members/WorkspaceMemberDetailsPage.tsx" "@typescript-eslint/no-deprecated/MenuItem" 1 "../../src/pages/workspace/members/WorkspaceMemberDetailsPage.tsx" "@typescript-eslint/no-deprecated/MenuItemWithTopDescription" 2 "../../src/pages/workspace/members/WorkspaceMemberDetailsPage.tsx" "@typescript-eslint/no-unsafe-type-assertion" 3 "../../src/pages/workspace/members/WorkspaceMemberDetailsPage.tsx" "no-restricted-imports" 1 +"../../src/pages/workspace/members/WorkspaceMemberDisplayNamePage.tsx" "rulesdir/no-onyx-loading-status" 1 +"../../src/pages/workspace/members/WorkspaceMembersChangeOfficeLocationPage.tsx" "rulesdir/no-onyx-loading-status" 1 +"../../src/pages/workspace/members/WorkspaceMembersChangeWorkArrangementPage.tsx" "rulesdir/no-onyx-loading-status" 1 +"../../src/pages/workspace/members/WorkspaceMembersRolePage.tsx" "rulesdir/no-onyx-loading-status" 1 "../../src/pages/workspace/members/WorkspaceOwnerChangeCheck.tsx" "react-hooks/set-state-in-effect" 1 "../../src/pages/workspace/members/WorkspaceOwnerPaymentCardForm.tsx" "react-hooks/set-state-in-effect" 2 "../../src/pages/workspace/merge/MergeConnectionsPageBase.tsx" "no-restricted-imports" 1 @@ -1634,6 +1832,7 @@ "../../src/pages/workspace/perDiem/EditPerDiemDestinationPage.tsx" "no-restricted-imports" 1 "../../src/pages/workspace/perDiem/EditPerDiemSubratePage.tsx" "no-restricted-imports" 1 "../../src/pages/workspace/perDiem/ImportedPerDiemPage.tsx" "no-restricted-imports" 1 +"../../src/pages/workspace/perDiem/ImportedPerDiemPage.tsx" "rulesdir/no-onyx-loading-status" 1 "../../src/pages/workspace/perDiem/WorkspacePerDiemDetailsPage.tsx" "no-restricted-imports" 1 "../../src/pages/workspace/perDiem/WorkspacePerDiemPage.tsx" "no-restricted-imports" 1 "../../src/pages/workspace/perDiem/WorkspacePerDiemSettingsPage.tsx" "no-restricted-imports" 1 @@ -1653,23 +1852,31 @@ "../../src/pages/workspace/rules/ExpenseReportRulesSection.tsx" "@typescript-eslint/no-deprecated/MenuItemWithTopDescription" 3 "../../src/pages/workspace/rules/FlagForReviewRules/FlagForReviewRulePageBase.tsx" "@typescript-eslint/no-deprecated/MenuItemWithTopDescription" 1 "../../src/pages/workspace/rules/IndividualExpenseRulesSectionRevamp.tsx" "@typescript-eslint/no-deprecated/MenuItem" 1 +"../../src/pages/workspace/rules/MerchantRules/AddMerchantRulePage.tsx" "rulesdir/no-onyx-loading-status" 1 "../../src/pages/workspace/rules/MerchantRules/ExpenseDefaultTypePage.tsx" "@typescript-eslint/no-deprecated/MenuItem" 1 +"../../src/pages/workspace/rules/MerchantRules/ImportedMerchantRulesPage.tsx" "rulesdir/no-onyx-loading-status" 1 "../../src/pages/workspace/rules/MerchantRules/MerchantRulePageBase.tsx" "@typescript-eslint/no-deprecated/MenuItemWithTopDescription" 1 +"../../src/pages/workspace/rules/MerchantRules/MerchantRulePageBase.tsx" "rulesdir/no-onyx-loading-status" 1 "../../src/pages/workspace/rules/MerchantTypeRules/MerchantTypeRulePageBase.tsx" "@typescript-eslint/no-deprecated/MenuItemWithTopDescription" 1 "../../src/pages/workspace/rules/RulesNewPage.tsx" "@typescript-eslint/no-deprecated/MenuItem" 1 "../../src/pages/workspace/rules/SpendRules/SpendRulePageBase.tsx" "@typescript-eslint/no-deprecated/MenuItemWithTopDescription" 1 "../../src/pages/workspace/tags/DynamicEditTagPage.tsx" "no-restricted-imports" 1 "../../src/pages/workspace/tags/DynamicTagApproverPage.tsx" "no-restricted-imports" 1 "../../src/pages/workspace/tags/DynamicTagGLCodePage.tsx" "no-restricted-imports" 1 +"../../src/pages/workspace/tags/DynamicTagGLCodePage.tsx" "rulesdir/no-onyx-loading-status" 1 "../../src/pages/workspace/tags/DynamicTagSettingsPage.tsx" "@typescript-eslint/no-deprecated/MenuItemWithTopDescription" 1 "../../src/pages/workspace/tags/DynamicTagSettingsPage.tsx" "no-restricted-imports" 1 "../../src/pages/workspace/tags/DynamicWorkspaceEditTagsPage.tsx" "no-restricted-imports" 1 "../../src/pages/workspace/tags/DynamicWorkspaceViewTagsPage.tsx" "@typescript-eslint/no-deprecated/MenuItemWithTopDescription" 1 "../../src/pages/workspace/tags/DynamicWorkspaceViewTagsPage.tsx" "no-restricted-imports" 1 "../../src/pages/workspace/tags/ImportedMultiLevelTagsPage.tsx" "no-restricted-imports" 1 +"../../src/pages/workspace/tags/ImportedMultiLevelTagsPage.tsx" "rulesdir/no-onyx-loading-status" 1 "../../src/pages/workspace/tags/ImportedTagsPage.tsx" "no-restricted-imports" 1 +"../../src/pages/workspace/tags/ImportedTagsPage.tsx" "rulesdir/no-onyx-loading-status" 1 "../../src/pages/workspace/tags/ImportMultiLevelTagsSettingsPage.tsx" "no-restricted-imports" 1 +"../../src/pages/workspace/tags/ImportMultiLevelTagsSettingsPage.tsx" "rulesdir/no-onyx-loading-status" 1 "../../src/pages/workspace/tags/ImportTagsOptionsPage.tsx" "no-restricted-imports" 1 +"../../src/pages/workspace/tags/ImportTagsPage.tsx" "rulesdir/no-onyx-loading-status" 1 "../../src/pages/workspace/tags/WorkspaceCreateTagPage.tsx" "no-restricted-imports" 1 "../../src/pages/workspace/tags/WorkspaceTagsPage.tsx" "@typescript-eslint/no-unsafe-type-assertion" 3 "../../src/pages/workspace/tags/WorkspaceTagsPage.tsx" "no-restricted-imports" 1 @@ -1687,6 +1894,7 @@ "../../src/pages/workspace/taxes/WorkspaceTaxesSettingsPage.tsx" "no-restricted-imports" 1 "../../src/pages/workspace/taxes/WorkspaceTaxesSettingsWorkspaceCurrency.tsx" "no-restricted-imports" 1 "../../src/pages/workspace/timeTracking/WorkspaceTimeTrackingDefaultRatePage.tsx" "no-restricted-imports" 1 +"../../src/pages/workspace/timeTracking/WorkspaceTimeTrackingDefaultRatePage.tsx" "rulesdir/no-onyx-loading-status" 1 "../../src/pages/workspace/travel/PolicyTravelPage.tsx" "no-restricted-imports" 1 "../../src/pages/workspace/travel/WorkspaceTravelBillingExportPage.tsx" "no-restricted-imports" 1 "../../src/pages/workspace/travel/WorkspaceTravelBillingFeedSelectorPage.tsx" "no-restricted-imports" 1 @@ -1699,13 +1907,18 @@ "../../src/pages/workspace/upgrade/WorkspaceUpgradePage.tsx" "no-restricted-imports" 2 "../../src/pages/workspace/vendors/WorkspaceVendorsPage.tsx" "no-restricted-imports" 1 "../../src/pages/workspace/withPolicy.tsx" "@typescript-eslint/no-unsafe-type-assertion" 3 +"../../src/pages/workspace/withPolicy.tsx" "rulesdir/no-onyx-loading-status" 1 "../../src/pages/workspace/withPolicyAndFullscreenLoading.tsx" "@typescript-eslint/no-unsafe-type-assertion" 1 "../../src/pages/workspace/withPolicyConnections.tsx" "@typescript-eslint/no-unsafe-type-assertion" 1 "../../src/pages/workspace/workflows/approvals/ApprovalWorkflowEditor.tsx" "@typescript-eslint/no-deprecated/MenuItemWithTopDescription" 2 +"../../src/pages/workspace/workflows/approvals/DynamicWorkspaceWorkflowsApprovalsExpensesFromPage.tsx" "rulesdir/no-onyx-loading-status" 1 "../../src/pages/workspace/workflows/approvals/WorkspaceWorkflowsApprovalsApprovalLimitPage.tsx" "@typescript-eslint/no-deprecated/MenuItemWithTopDescription" 2 "../../src/pages/workspace/workflows/approvals/WorkspaceWorkflowsApprovalsApprovalLimitPage.tsx" "no-restricted-imports" 1 +"../../src/pages/workspace/workflows/approvals/WorkspaceWorkflowsApprovalsApproverPage.tsx" "rulesdir/no-onyx-loading-status" 1 "../../src/pages/workspace/workflows/approvals/WorkspaceWorkflowsApprovalsCreatePage.tsx" "no-restricted-imports" 1 "../../src/pages/workspace/workflows/approvals/WorkspaceWorkflowsApprovalsEditPage.tsx" "no-restricted-imports" 1 +"../../src/pages/workspace/workflows/approvals/WorkspaceWorkflowsApprovalsEditPage.tsx" "rulesdir/no-onyx-loading-status" 1 +"../../src/pages/workspace/workflows/approvals/WorkspaceWorkflowsApprovalsOverLimitApproverPage.tsx" "rulesdir/no-onyx-loading-status" 1 "../../src/pages/workspace/workflows/tabs/WorkflowsPaymentsTab.tsx" "@typescript-eslint/no-deprecated/MenuItem" 1 "../../src/pages/workspace/workflows/tabs/WorkflowsPaymentsTab.tsx" "@typescript-eslint/no-unsafe-type-assertion" 2 "../../src/pages/workspace/workflows/WorkspaceAutoReportingFrequencyPage.tsx" "@typescript-eslint/no-unsafe-type-assertion" 2 @@ -1715,8 +1928,10 @@ "../../src/pages/workspace/workflows/WorkspaceWorkflowsCurrencyConversionFeesPage.tsx" "no-restricted-imports" 1 "../../src/pages/workspace/workflows/WorkspaceWorkflowsPayerPage.tsx" "no-restricted-imports" 1 "../../src/pages/workspace/WorkspaceConfirmationOwnerSelectorPage.tsx" "no-restricted-imports" 1 +"../../src/pages/workspace/WorkspaceConfirmationOwnerSelectorPage.tsx" "rulesdir/no-onyx-loading-status" 1 "../../src/pages/workspace/WorkspaceConfirmationSuccessPage.tsx" "no-restricted-imports" 1 "../../src/pages/workspace/WorkspaceInitialPage.tsx" "no-restricted-imports" 1 +"../../src/pages/workspace/WorkspaceJoinUserPage.tsx" "rulesdir/no-onyx-loading-status" 1 "../../src/pages/workspace/WorkspaceMembersPage.tsx" "no-restricted-imports" 1 "../../src/pages/workspace/WorkspaceMoreFeaturesPage/index.tsx" "no-restricted-imports" 1 "../../src/pages/workspace/WorkspaceNamePage.tsx" "no-restricted-imports" 1 diff --git a/eslint-plugin-local-rules/no-onyx-loading-status.js b/eslint-plugin-local-rules/no-onyx-loading-status.js new file mode 100644 index 000000000000..3b48be4506ec --- /dev/null +++ b/eslint-plugin-local-rules/no-onyx-loading-status.js @@ -0,0 +1,132 @@ +const name = 'no-onyx-loading-status'; + +const meta = { + type: 'problem', + docs: { + description: 'Disallow `isLoadingOnyxValue` and reads of `status` from `useOnyx` results, because Onyx is dropping per-key loading status.', + recommended: 'error', + }, + schema: [], + messages: { + isLoadingOnyxValueUsage: + 'Do not use `isLoadingOnyxValue`. Onyx is dropping per-key loading status from `useOnyx`. Read the value directly and treat `undefined` as no data (https://github.com/Expensify/App/issues/104583).', + statusRead: + 'Do not read `status` from a `useOnyx` result. Onyx is dropping per-key loading status. Read the value directly and treat `undefined` as no data (https://github.com/Expensify/App/issues/104583).', + }, +}; + +const USE_ONYX_IDENTIFIER = 'useOnyx'; +const USE_ONYX_HOOK_PATH_SUFFIX = 'hooks/useOnyx'; +const STATUS_PROPERTY = 'status'; +const IS_LOADING_ONYX_VALUE_PATH_SUFFIX = 'types/utils/isLoadingOnyxValue'; + +/** + * @param {import('estree').MemberExpression | import('estree').Property} node + * @returns {string | undefined} + */ +function getStaticKeyName(node) { + const key = node.type === 'MemberExpression' ? node.property : node.key; + if (!node.computed) { + return key.type === 'Identifier' ? key.name : undefined; + } + if (key.type === 'Literal') { + return typeof key.value === 'string' ? key.value : undefined; + } + if (key.type === 'TemplateLiteral' && key.expressions.length === 0 && key.quasis.length === 1) { + return key.quasis[0].value.cooked; + } + return undefined; +} + +/** + * @param {import('estree').Pattern} pattern + * @returns {import('estree').Property | undefined} + */ +function findStatusProperty(pattern) { + if (pattern.type !== 'ObjectPattern') { + return undefined; + } + return pattern.properties.find((property) => property.type === 'Property' && getStaticKeyName(property) === STATUS_PROPERTY); +} + +/** + * @param {import('eslint').Rule.RuleContext} context + * @returns {import('eslint').Rule.RuleListener} + */ +function create(context) { + // Local names `useOnyx` is called by in this file, so aliased imports like `{useOnyx as useOnyxWithoutSnapshots}` are checked too + const useOnyxNames = new Set([USE_ONYX_IDENTIFIER]); + + /** + * Reports `metadata.status`, `metadata?.status` and `const {status} = metadata` for a variable holding `useOnyx` result metadata. + * + * @param {import('eslint').Scope.Variable} variable + */ + function reportStatusReads(variable) { + for (const reference of variable.references) { + const identifier = reference.identifier; + const parent = identifier.parent; + if (parent.type === 'MemberExpression' && parent.object === identifier && getStaticKeyName(parent) === STATUS_PROPERTY) { + context.report({node: parent, messageId: 'statusRead'}); + continue; + } + if (parent.type === 'VariableDeclarator' && parent.init === identifier) { + const statusProperty = findStatusProperty(parent.id); + if (statusProperty) { + context.report({node: statusProperty, messageId: 'statusRead'}); + } + } + } + } + + return { + ImportDeclaration(node) { + if (typeof node.source.value !== 'string') { + return; + } + const source = node.source.value; + for (const specifier of node.specifiers) { + const isNamedUseOnyx = specifier.type === 'ImportSpecifier' && specifier.imported.type === 'Identifier' && specifier.imported.name === USE_ONYX_IDENTIFIER; + const isDefaultUseOnyxHook = specifier.type === 'ImportDefaultSpecifier' && source.endsWith(USE_ONYX_HOOK_PATH_SUFFIX); + if (isNamedUseOnyx || isDefaultUseOnyxHook) { + useOnyxNames.add(specifier.local.name); + } + } + if (!source.endsWith(IS_LOADING_ONYX_VALUE_PATH_SUFFIX)) { + return; + } + for (const variable of context.sourceCode.getDeclaredVariables(node)) { + for (const reference of variable.references) { + context.report({node: reference.identifier, messageId: 'isLoadingOnyxValueUsage'}); + } + } + }, + + VariableDeclarator(node) { + if (node.id.type !== 'ArrayPattern' || node.init?.type !== 'CallExpression') { + return; + } + const callee = node.init.callee; + if (callee.type !== 'Identifier' || !useOnyxNames.has(callee.name)) { + return; + } + const metadataPattern = node.id.elements.at(1); + if (!metadataPattern) { + return; + } + if (metadataPattern.type === 'Identifier') { + const variable = context.sourceCode.getDeclaredVariables(node).find((declaredVariable) => declaredVariable.name === metadataPattern.name); + if (variable) { + reportStatusReads(variable); + } + return; + } + const statusProperty = findStatusProperty(metadataPattern); + if (statusProperty) { + context.report({node: statusProperty, messageId: 'statusRead'}); + } + }, + }; +} + +export {name, meta, create}; diff --git a/tests/unit/NoOnyxLoadingStatusRuleTest.ts b/tests/unit/NoOnyxLoadingStatusRuleTest.ts new file mode 100644 index 000000000000..b574b7210104 --- /dev/null +++ b/tests/unit/NoOnyxLoadingStatusRuleTest.ts @@ -0,0 +1,99 @@ +import type {Rule} from 'eslint'; + +import {RuleTester} from 'eslint'; +import {parser as tsParser} from 'typescript-eslint'; + +type LocalRuleModule = Rule.RuleModule & { + name: string; +}; + +function isLocalRuleModule(ruleModule: unknown): ruleModule is LocalRuleModule { + if (typeof ruleModule !== 'object' || ruleModule === null) { + return false; + } + + const ruleName: unknown = Reflect.get(ruleModule, 'name'); + const create: unknown = Reflect.get(ruleModule, 'create'); + const meta: unknown = Reflect.get(ruleModule, 'meta'); + + return typeof ruleName === 'string' && typeof create === 'function' && typeof meta === 'object' && meta !== null; +} + +const ruleModule: unknown = require('../../eslint-plugin-local-rules/no-onyx-loading-status'); + +if (!isLocalRuleModule(ruleModule)) { + throw new TypeError('Expected no-onyx-loading-status to export an ESLint rule module.'); +} + +const tsRuleTester = new RuleTester({ + languageOptions: { + ecmaVersion: 2022, + sourceType: 'module', + parser: tsParser, + parserOptions: { + ecmaFeatures: { + jsx: true, + }, + }, + }, +}); + +describe('no-onyx-loading-status', () => { + tsRuleTester.run(ruleModule.name, ruleModule, { + valid: [ + 'const [session] = useOnyx(ONYXKEYS.SESSION);', + 'const [session, sessionMetadata] = useOnyx(ONYXKEYS.SESSION); doSomething(sessionMetadata);', + 'const [session, {sourceValue}] = useOnyx(ONYXKEYS.SESSION);', + "const results = await Promise.allSettled(promises); const isFulfilled = results[0].status === 'fulfilled';", + "const [first, second] = useSomethingElse(); const isLoaded = second.status === 'loaded';", + 'const response = await fetch(url); const isOk = response.status === 200;', + ], + invalid: [ + { + code: "import isLoadingOnyxValue from './types/utils/isLoadingOnyxValue'; const isLoading = isLoadingOnyxValue(sessionMetadata);", + errors: [{messageId: 'isLoadingOnyxValueUsage'}], + }, + { + code: "import isLoadingOnyxValue from '@src/types/utils/isLoadingOnyxValue'; const a = isLoadingOnyxValue(sessionMetadata); const b = isLoadingOnyxValue(policyMetadata, reportMetadata);", + errors: [{messageId: 'isLoadingOnyxValueUsage'}, {messageId: 'isLoadingOnyxValueUsage'}], + }, + { + code: "import {useOnyx as useOnyxWithoutSnapshots} from 'react-native-onyx'; const [policies, policiesMetadata] = useOnyxWithoutSnapshots(ONYXKEYS.COLLECTION.POLICY); const isLoading = policiesMetadata.status === 'loading';", + errors: [{messageId: 'statusRead'}], + }, + { + code: "import useOnyxValue from '@hooks/useOnyx'; const [session, {status}] = useOnyxValue(ONYXKEYS.SESSION);", + errors: [{messageId: 'statusRead'}], + }, + { + code: "const [session, sessionMetadata] = useOnyx(ONYXKEYS.SESSION); const isLoading = sessionMetadata.status === 'loading';", + errors: [{messageId: 'statusRead'}], + }, + { + code: "const [, cardFeedsResult] = useOnyx(ONYXKEYS.COLLECTION.SHARED_NVP_PRIVATE_DOMAIN_MEMBER); const isLoading = cardFeedsResult?.status === 'loading';", + errors: [{messageId: 'statusRead'}], + }, + { + code: "const [session, sessionMetadata] = useOnyx(ONYXKEYS.SESSION); const isLoading = sessionMetadata['status'] === 'loading';", + errors: [{messageId: 'statusRead'}], + }, + { + code: 'const [value, {status}] = useOnyx(onyxKey);', + errors: [{messageId: 'statusRead'}], + }, + { + code: 'const [recentWaypoints, {status: recentWaypointsStatus}] = useOnyx(ONYXKEYS.NVP_RECENT_WAYPOINTS);', + errors: [{messageId: 'statusRead'}], + }, + { + code: 'const [session, sessionMetadata] = useOnyx(ONYXKEYS.SESSION); const {status} = sessionMetadata;', + errors: [{messageId: 'statusRead'}], + }, + { + // Reported per read, so the seatbelt count is per read too. + code: 'const [draft, draftMetadata] = useOnyx(ONYXKEYS.DRAFT); useEffect(() => { if (draftMetadata.status !== "loaded") { return; } }, [draft, draftMetadata.status]);', + errors: [{messageId: 'statusRead'}, {messageId: 'statusRead'}], + }, + ], + }); +});