@@ -328,8 +328,52 @@ function Search({queryJSON, currentSearchResults, lastNonEmptySearchResults, onS
328328 }
329329 } , [ isFocused , data , searchResults ?. search ?. hasMoreResults , selectedTransactions , setExportMode , setShouldShowExportModeOption , shouldGroupByReports ] ) ;
330330
331+ const toggleTransaction = useCallback (
332+ ( item : SearchListItem ) => {
333+ if ( isReportActionListItemType ( item ) ) {
334+ return ;
335+ }
336+ if ( isTaskListItemType ( item ) ) {
337+ return ;
338+ }
339+ if ( isTransactionListItemType ( item ) ) {
340+ if ( ! item . keyForList ) {
341+ return ;
342+ }
343+
344+ setSelectedTransactions ( prepareTransactionsList ( item , selectedTransactions ) , data ) ;
345+ return ;
346+ }
347+
348+ if ( item . transactions . some ( ( transaction ) => selectedTransactions [ transaction . keyForList ] ?. isSelected ) ) {
349+ const reducedSelectedTransactions : SelectedTransactions = { ...selectedTransactions } ;
350+
351+ item . transactions . forEach ( ( transaction ) => {
352+ delete reducedSelectedTransactions [ transaction . keyForList ] ;
353+ } ) ;
354+
355+ setSelectedTransactions ( reducedSelectedTransactions , data ) ;
356+ return ;
357+ }
358+
359+ setSelectedTransactions (
360+ {
361+ ...selectedTransactions ,
362+ ...Object . fromEntries ( item . transactions . map ( mapTransactionItemToSelectedEntry ) ) ,
363+ } ,
364+ data ,
365+ ) ;
366+ } ,
367+ [ data , selectedTransactions , setSelectedTransactions ] ,
368+ ) ;
369+
331370 const openReport = useCallback (
332371 ( item : SearchListItem , isOpenedAsReport ?: boolean ) => {
372+ if ( selectionMode ?. isEnabled ) {
373+ toggleTransaction ( item ) ;
374+ return ;
375+ }
376+
333377 const isFromSelfDM = item . reportID === CONST . REPORT . UNREPORTED_REPORTID ;
334378 const isTransactionItem = isTransactionListItemType ( item ) ;
335379
@@ -373,7 +417,7 @@ function Search({queryJSON, currentSearchResults, lastNonEmptySearchResults, onS
373417
374418 Navigation . navigate ( ROUTES . SEARCH_REPORT . getRoute ( { reportID, backTo} ) ) ;
375419 } ,
376- [ canUseTableReportView , hash ] ,
420+ [ canUseTableReportView , hash , selectionMode ?. isEnabled , toggleTransaction ] ,
377421 ) ;
378422
379423 const onViewableItemsChanged = useCallback (
@@ -459,42 +503,6 @@ function Search({queryJSON, currentSearchResults, lastNonEmptySearchResults, onS
459503 ) ;
460504 }
461505
462- const toggleTransaction = ( item : SearchListItem ) => {
463- if ( isReportActionListItemType ( item ) ) {
464- return ;
465- }
466- if ( isTaskListItemType ( item ) ) {
467- return ;
468- }
469- if ( isTransactionListItemType ( item ) ) {
470- if ( ! item . keyForList ) {
471- return ;
472- }
473-
474- setSelectedTransactions ( prepareTransactionsList ( item , selectedTransactions ) , data ) ;
475- return ;
476- }
477-
478- if ( item . transactions . some ( ( transaction ) => selectedTransactions [ transaction . keyForList ] ?. isSelected ) ) {
479- const reducedSelectedTransactions : SelectedTransactions = { ...selectedTransactions } ;
480-
481- item . transactions . forEach ( ( transaction ) => {
482- delete reducedSelectedTransactions [ transaction . keyForList ] ;
483- } ) ;
484-
485- setSelectedTransactions ( reducedSelectedTransactions , data ) ;
486- return ;
487- }
488-
489- setSelectedTransactions (
490- {
491- ...selectedTransactions ,
492- ...Object . fromEntries ( item . transactions . map ( mapTransactionItemToSelectedEntry ) ) ,
493- } ,
494- data ,
495- ) ;
496- } ;
497-
498506 const fetchMoreResults = ( ) => {
499507 if ( ! searchResults ?. search ?. hasMoreResults || shouldShowLoadingState || shouldShowLoadingMoreItems ) {
500508 return ;
0 commit comments