@@ -52,7 +52,7 @@ import NAVIGATORS from '@src/NAVIGATORS';
5252import ONYXKEYS from '@src/ONYXKEYS' ;
5353import ROUTES from '@src/ROUTES' ;
5454import SCREENS from '@src/SCREENS' ;
55- import type { ReportAction } from '@src/types/onyx' ;
55+ import type { OutstandingReportsByPolicyIDDerivedValue , ReportAction } from '@src/types/onyx' ;
5656import type SearchResults from '@src/types/onyx/SearchResults' ;
5757import { isEmptyObject } from '@src/types/utils/EmptyObject' ;
5858import { useSearchContext } from './SearchContext' ;
@@ -69,7 +69,11 @@ type SearchProps = {
6969 isMobileSelectionModeEnabled : boolean ;
7070} ;
7171
72- function mapTransactionItemToSelectedEntry ( item : TransactionListItemType , reportActions : ReportAction [ ] ) : [ string , SelectedTransactionInfo ] {
72+ function mapTransactionItemToSelectedEntry (
73+ item : TransactionListItemType ,
74+ reportActions : ReportAction [ ] ,
75+ outstandingReportsByPolicyID ?: OutstandingReportsByPolicyIDDerivedValue ,
76+ ) : [ string , SelectedTransactionInfo ] {
7377 return [
7478 item . keyForList ,
7579 {
@@ -78,7 +82,13 @@ function mapTransactionItemToSelectedEntry(item: TransactionListItemType, report
7882 canHold : item . canHold ,
7983 isHeld : isOnHold ( item ) ,
8084 canUnhold : item . canUnhold ,
81- canChangeReport : canEditFieldOfMoneyRequest ( getIOUActionForTransactionID ( reportActions , item . transactionID ) , CONST . EDIT_REQUEST_FIELD . REPORT ) ,
85+ canChangeReport : canEditFieldOfMoneyRequest (
86+ getIOUActionForTransactionID ( reportActions , item . transactionID ) ,
87+ CONST . EDIT_REQUEST_FIELD . REPORT ,
88+ undefined ,
89+ undefined ,
90+ outstandingReportsByPolicyID ,
91+ ) ,
8292 action : item . action ,
8393 reportID : item . reportID ,
8494 policyID : item . policyID ,
@@ -118,7 +128,12 @@ function mapToItemWithAdditionalInfo(item: SearchListItem, selectedTransactions:
118128 } ;
119129}
120130
121- function prepareTransactionsList ( item : TransactionListItemType , selectedTransactions : SelectedTransactions , reportActions : ReportAction [ ] ) {
131+ function prepareTransactionsList (
132+ item : TransactionListItemType ,
133+ selectedTransactions : SelectedTransactions ,
134+ reportActions : ReportAction [ ] ,
135+ outstandingReportsByPolicyID ?: OutstandingReportsByPolicyIDDerivedValue ,
136+ ) {
122137 if ( selectedTransactions [ item . keyForList ] ?. isSelected ) {
123138 const { [ item . keyForList ] : omittedTransaction , ...transactions } = selectedTransactions ;
124139
@@ -133,7 +148,13 @@ function prepareTransactionsList(item: TransactionListItemType, selectedTransact
133148 canHold : item . canHold ,
134149 isHeld : isOnHold ( item ) ,
135150 canUnhold : item . canUnhold ,
136- canChangeReport : canEditFieldOfMoneyRequest ( getIOUActionForTransactionID ( reportActions , item . transactionID ) , CONST . EDIT_REQUEST_FIELD . REPORT ) ,
151+ canChangeReport : canEditFieldOfMoneyRequest (
152+ getIOUActionForTransactionID ( reportActions , item . transactionID ) ,
153+ CONST . EDIT_REQUEST_FIELD . REPORT ,
154+ undefined ,
155+ undefined ,
156+ outstandingReportsByPolicyID ,
157+ ) ,
137158 action : item . action ,
138159 reportID : item . reportID ,
139160 policyID : item . policyID ,
@@ -168,6 +189,7 @@ function Search({queryJSON, searchResults, onSearchListScroll, contentContainerS
168189 const [ transactions ] = useOnyx ( ONYXKEYS . COLLECTION . TRANSACTION , { canBeMissing : true } ) ;
169190 const previousTransactions = usePrevious ( transactions ) ;
170191 const [ reportActions ] = useOnyx ( ONYXKEYS . COLLECTION . REPORT_ACTIONS , { canBeMissing : true } ) ;
192+ const [ outstandingReportsByPolicyID ] = useOnyx ( ONYXKEYS . DERIVED . OUTSTANDING_REPORTS_BY_POLICY_ID , { canBeMissing : true } ) ;
171193
172194 const [ archivedReportsIdSet = new Set < string > ( ) ] = useOnyx ( ONYXKEYS . COLLECTION . REPORT_NAME_VALUE_PAIRS , {
173195 canBeMissing : true ,
@@ -394,7 +416,13 @@ function Search({queryJSON, searchResults, onSearchListScroll, contentContainerS
394416 canHold : transaction . canHold ,
395417 isHeld : isOnHold ( transaction ) ,
396418 canUnhold : transaction . canUnhold ,
397- canChangeReport : canEditFieldOfMoneyRequest ( getIOUActionForTransactionID ( reportActionsArray , transaction . transactionID ) , CONST . EDIT_REQUEST_FIELD . REPORT ) ,
419+ canChangeReport : canEditFieldOfMoneyRequest (
420+ getIOUActionForTransactionID ( reportActionsArray , transaction . transactionID ) ,
421+ CONST . EDIT_REQUEST_FIELD . REPORT ,
422+ undefined ,
423+ undefined ,
424+ outstandingReportsByPolicyID ,
425+ ) ,
398426 // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing
399427 isSelected : areAllMatchingItemsSelected || selectedTransactions [ transaction . transactionID ] . isSelected ,
400428 canDelete : transaction . canDelete ,
@@ -417,7 +445,13 @@ function Search({queryJSON, searchResults, onSearchListScroll, contentContainerS
417445 canHold : transaction . canHold ,
418446 isHeld : isOnHold ( transaction ) ,
419447 canUnhold : transaction . canUnhold ,
420- canChangeReport : canEditFieldOfMoneyRequest ( getIOUActionForTransactionID ( reportActionsArray , transaction . transactionID ) , CONST . EDIT_REQUEST_FIELD . REPORT ) ,
448+ canChangeReport : canEditFieldOfMoneyRequest (
449+ getIOUActionForTransactionID ( reportActionsArray , transaction . transactionID ) ,
450+ CONST . EDIT_REQUEST_FIELD . REPORT ,
451+ undefined ,
452+ undefined ,
453+ outstandingReportsByPolicyID ,
454+ ) ,
421455 // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing
422456 isSelected : areAllMatchingItemsSelected || selectedTransactions [ transaction . transactionID ] . isSelected ,
423457 canDelete : transaction . canDelete ,
@@ -435,7 +469,7 @@ function Search({queryJSON, searchResults, onSearchListScroll, contentContainerS
435469
436470 isRefreshingSelection . current = true ;
437471 // eslint-disable-next-line react-compiler/react-compiler, react-hooks/exhaustive-deps
438- } , [ data , setSelectedTransactions , areAllMatchingItemsSelected , isFocused ] ) ;
472+ } , [ data , setSelectedTransactions , areAllMatchingItemsSelected , isFocused , outstandingReportsByPolicyID ] ) ;
439473
440474 useEffect ( ( ) => {
441475 if ( ! isSearchResultsEmpty || prevIsSearchResultEmpty ) {
@@ -495,7 +529,7 @@ function Search({queryJSON, searchResults, onSearchListScroll, contentContainerS
495529 if ( isTransactionPendingDelete ( item ) ) {
496530 return ;
497531 }
498- setSelectedTransactions ( prepareTransactionsList ( item , selectedTransactions , reportActionsArray ) , data ) ;
532+ setSelectedTransactions ( prepareTransactionsList ( item , selectedTransactions , reportActionsArray , outstandingReportsByPolicyID ) , data ) ;
499533 return ;
500534 }
501535
@@ -514,13 +548,15 @@ function Search({queryJSON, searchResults, onSearchListScroll, contentContainerS
514548 {
515549 ...selectedTransactions ,
516550 ...Object . fromEntries (
517- item . transactions . filter ( ( t ) => ! isTransactionPendingDelete ( t ) ) . map ( ( transactionItem ) => mapTransactionItemToSelectedEntry ( transactionItem , reportActionsArray ) ) ,
551+ item . transactions
552+ . filter ( ( t ) => ! isTransactionPendingDelete ( t ) )
553+ . map ( ( transactionItem ) => mapTransactionItemToSelectedEntry ( transactionItem , reportActionsArray , outstandingReportsByPolicyID ) ) ,
518554 ) ,
519555 } ,
520556 data ,
521557 ) ;
522558 } ,
523- [ data , reportActionsArray , selectedTransactions , setSelectedTransactions ] ,
559+ [ data , reportActionsArray , selectedTransactions , outstandingReportsByPolicyID , setSelectedTransactions ] ,
524560 ) ;
525561
526562 const openReport = useCallback (
@@ -651,7 +687,9 @@ function Search({queryJSON, searchResults, onSearchListScroll, contentContainerS
651687 setSelectedTransactions (
652688 Object . fromEntries (
653689 ( data as TransactionGroupListItemType [ ] ) . flatMap ( ( item ) =>
654- item . transactions . filter ( ( t ) => ! isTransactionPendingDelete ( t ) ) . map ( ( transactionItem ) => mapTransactionItemToSelectedEntry ( transactionItem , reportActionsArray ) ) ,
690+ item . transactions
691+ . filter ( ( t ) => ! isTransactionPendingDelete ( t ) )
692+ . map ( ( transactionItem ) => mapTransactionItemToSelectedEntry ( transactionItem , reportActionsArray , outstandingReportsByPolicyID ) ) ,
655693 ) ,
656694 ) ,
657695 data ,
@@ -664,11 +702,11 @@ function Search({queryJSON, searchResults, onSearchListScroll, contentContainerS
664702 Object . fromEntries (
665703 ( data as TransactionListItemType [ ] )
666704 . filter ( ( t ) => ! isTransactionPendingDelete ( t ) )
667- . map ( ( transactionItem ) => mapTransactionItemToSelectedEntry ( transactionItem , reportActionsArray ) ) ,
705+ . map ( ( transactionItem ) => mapTransactionItemToSelectedEntry ( transactionItem , reportActionsArray , outstandingReportsByPolicyID ) ) ,
668706 ) ,
669707 data ,
670708 ) ;
671- } , [ clearSelectedTransactions , data , groupBy , reportActionsArray , selectedTransactions , setSelectedTransactions ] ) ;
709+ } , [ clearSelectedTransactions , data , groupBy , reportActionsArray , selectedTransactions , setSelectedTransactions , outstandingReportsByPolicyID ] ) ;
672710
673711 const onLayout = useCallback ( ( ) => handleSelectionListScroll ( sortedSelectedData , searchListRef . current ) , [ handleSelectionListScroll , sortedSelectedData ] ) ;
674712
0 commit comments