@@ -26,14 +26,12 @@ import useStyleUtils from '@hooks/useStyleUtils';
2626import useThemeStyles from '@hooks/useThemeStyles' ;
2727import { turnOnMobileSelectionMode } from '@libs/actions/MobileSelectionMode' ;
2828import { setOptimisticTransactionThread } from '@libs/actions/Report' ;
29- import { getReportLayoutGroupBy } from '@libs/actions/ReportLayout' ;
3029import { setActiveTransactionIDs } from '@libs/actions/TransactionThreadNavigation' ;
3130import { convertToDisplayString } from '@libs/CurrencyUtils' ;
3231import FS from '@libs/Fullstory' ;
3332import { navigationRef } from '@libs/Navigation/Navigation' ;
3433import Parser from '@libs/Parser' ;
3534import { getIOUActionForTransactionID } from '@libs/ReportActionsUtils' ;
36- import { groupTransactionsByCategory , groupTransactionsByTag } from '@libs/ReportLayoutUtils' ;
3735import {
3836 canAddTransaction ,
3937 getAddExpenseDropdownOptions ,
@@ -66,7 +64,6 @@ import ONYXKEYS from '@src/ONYXKEYS';
6664import ROUTES from '@src/ROUTES' ;
6765import type SCREENS from '@src/SCREENS' ;
6866import type * as OnyxTypes from '@src/types/onyx' ;
69- import MoneyRequestReportGroupHeader from './MoneyRequestReportGroupHeader' ;
7067import MoneyRequestReportTableHeader from './MoneyRequestReportTableHeader' ;
7168import MoneyRequestReportTotalSpend from './MoneyRequestReportTotalSpend' ;
7269import MoneyRequestReportTransactionItem from './MoneyRequestReportTransactionItem' ;
@@ -169,7 +166,6 @@ function MoneyRequestReportTransactionList({
169166 const { markReportIDAsExpense} = useContext ( WideRHPContext ) ;
170167 const [ isModalVisible , setIsModalVisible ] = useState ( false ) ;
171168 const [ selectedTransactionID , setSelectedTransactionID ] = useState < string > ( '' ) ;
172- const [ reportLayoutGroupBy ] = useOnyx ( ONYXKEYS . NVP_REPORT_LAYOUT_GROUP_BY , { canBeMissing : true } ) ;
173169 const { reportPendingAction} = getReportOfflinePendingActionAndErrors ( report ) ;
174170
175171 const { totalDisplaySpend, nonReimbursableSpend, reimbursableSpend} = getMoneyRequestSpendBreakdown ( report ) ;
@@ -234,51 +230,6 @@ function MoneyRequestReportTransactionList({
234230
235231 const isTransactionSelected = useCallback ( ( transactionID : string ) => selectedTransactionIDs . includes ( transactionID ) , [ selectedTransactionIDs ] ) ;
236232
237- // Toggle all transactions in a group
238- const toggleGroupSelection = useCallback (
239- ( groupTransactions : OnyxTypes . Transaction [ ] ) => {
240- const groupTransactionIDs = groupTransactions . filter ( ( t ) => ! isTransactionPendingDelete ( t ) ) . map ( ( t ) => t . transactionID ) ;
241- const allSelected = groupTransactionIDs . every ( ( id ) => selectedTransactionIDs . includes ( id ) ) ;
242-
243- let newSelectedTransactionIDs = selectedTransactionIDs ;
244- if ( allSelected ) {
245- // Deselect all transactions in the group
246- newSelectedTransactionIDs = selectedTransactionIDs . filter ( ( id ) => ! groupTransactionIDs . includes ( id ) ) ;
247- } else {
248- // Select all transactions in the group
249- const idsToAdd = groupTransactionIDs . filter ( ( id ) => ! selectedTransactionIDs . includes ( id ) ) ;
250- newSelectedTransactionIDs = [ ...selectedTransactionIDs , ...idsToAdd ] ;
251- }
252- setSelectedTransactions ( newSelectedTransactionIDs ) ;
253- } ,
254- [ selectedTransactionIDs , setSelectedTransactions ] ,
255- ) ;
256-
257- // Check if all transactions in a group are selected
258- const isGroupSelected = useCallback (
259- ( groupTransactions : OnyxTypes . Transaction [ ] ) => {
260- const groupTransactionIDs = groupTransactions . filter ( ( t ) => ! isTransactionPendingDelete ( t ) ) . map ( ( t ) => t . transactionID ) ;
261- if ( groupTransactionIDs . length === 0 ) {
262- return false ;
263- }
264- return groupTransactionIDs . every ( ( id ) => selectedTransactionIDs . includes ( id ) ) ;
265- } ,
266- [ selectedTransactionIDs ] ,
267- ) ;
268-
269- // Check if some (but not all) transactions in a group are selected
270- const isGroupIndeterminate = useCallback (
271- ( groupTransactions : OnyxTypes . Transaction [ ] ) => {
272- const groupTransactionIDs = groupTransactions . filter ( ( t ) => ! isTransactionPendingDelete ( t ) ) . map ( ( t ) => t . transactionID ) ;
273- if ( groupTransactionIDs . length === 0 ) {
274- return false ;
275- }
276- const selectedCount = groupTransactionIDs . filter ( ( id ) => selectedTransactionIDs . includes ( id ) ) . length ;
277- return selectedCount > 0 && selectedCount < groupTransactionIDs . length ;
278- } ,
279- [ selectedTransactionIDs ] ,
280- ) ;
281-
282233 useFocusEffect (
283234 useCallback ( ( ) => {
284235 return ( ) => {
@@ -306,18 +257,6 @@ function MoneyRequestReportTransactionList({
306257 } ) ) ;
307258 } , [ newTransactions , sortBy , sortOrder , transactions , localeCompare , report ] ) ;
308259
309- // Get the current group-by preference
310- const currentGroupBy = getReportLayoutGroupBy ( reportLayoutGroupBy ) ;
311-
312- // Group transactions based on user preference
313- const groupedTransactions = useMemo ( ( ) => {
314- if ( currentGroupBy === CONST . REPORT_LAYOUT . GROUP_BY . TAG ) {
315- return groupTransactionsByTag ( sortedTransactions , report , localeCompare ) ;
316- }
317- // Default to grouping by category
318- return groupTransactionsByCategory ( sortedTransactions , report , localeCompare ) ;
319- } , [ sortedTransactions , currentGroupBy , report , localeCompare ] ) ;
320-
321260 const columnsToShow = useMemo ( ( ) => {
322261 const columns = getColumnsToShow ( currentUserDetails ?. accountID , transactions , true ) ;
323262 return ( Object . keys ( columns ) as SearchColumnType [ ] ) . filter ( ( column ) => columns [ column ] ) ;
@@ -469,50 +408,28 @@ function MoneyRequestReportTransactionList({
469408 ) }
470409 </ View >
471410 ) }
472- < View style = { [ listHorizontalPadding , styles . pb4 ] } >
473- { groupedTransactions . map ( ( group ) => {
474- const groupTransactionsWithHighlight = group . transactions . map ( ( transaction ) => {
475- const originalTransaction = sortedTransactions . find ( ( t ) => t . transactionID === transaction . transactionID ) ;
476- return originalTransaction ?? transaction ;
477- } ) ;
478-
411+ < View style = { [ listHorizontalPadding , styles . gap2 , styles . pb4 ] } >
412+ { sortedTransactions . map ( ( transaction ) => {
479413 return (
480- < View key = { group . groupKey } >
481- < MoneyRequestReportGroupHeader
482- group = { group }
483- currency = { report ?. currency ?? '' }
484- isGroupedByTag = { currentGroupBy === CONST . REPORT_LAYOUT . GROUP_BY . TAG }
485- isSelectionModeEnabled = { isMobileSelectionModeEnabled }
486- isSelected = { isGroupSelected ( group . transactions ) }
487- isIndeterminate = { isGroupIndeterminate ( group . transactions ) }
488- onToggleSelection = { ( ) => toggleGroupSelection ( group . transactions ) }
489- />
490- < View style = { styles . gap2 } >
491- { groupTransactionsWithHighlight . map ( ( transaction ) => {
492- return (
493- < MoneyRequestReportTransactionItem
494- key = { transaction . transactionID }
495- transaction = { transaction }
496- violations = { filteredViolations ?. [ `${ ONYXKEYS . COLLECTION . TRANSACTION_VIOLATIONS } ${ transaction . transactionID } ` ] }
497- columns = { columnsToShow }
498- report = { report }
499- isSelectionModeEnabled = { isMobileSelectionModeEnabled }
500- toggleTransaction = { toggleTransaction }
501- isSelected = { isTransactionSelected ( transaction . transactionID ) }
502- handleOnPress = { handleOnPress }
503- handleLongPress = { handleLongPress }
504- dateColumnSize = { dateColumnSize }
505- amountColumnSize = { amountColumnSize }
506- taxAmountColumnSize = { taxAmountColumnSize }
507- // if we add few new transactions, then we need to scroll to the first one
508- scrollToNewTransaction = { transaction . transactionID === newTransactions ?. at ( 0 ) ?. transactionID ? scrollToNewTransaction : undefined }
509- forwardedFSClass = { transactionItemFSClass }
510- onArrowRightPress = { handleArrowRightPress }
511- />
512- ) ;
513- } ) }
514- </ View >
515- </ View >
414+ < MoneyRequestReportTransactionItem
415+ key = { transaction . transactionID }
416+ transaction = { transaction }
417+ violations = { filteredViolations ?. [ `${ ONYXKEYS . COLLECTION . TRANSACTION_VIOLATIONS } ${ transaction . transactionID } ` ] }
418+ columns = { columnsToShow }
419+ report = { report }
420+ isSelectionModeEnabled = { isMobileSelectionModeEnabled }
421+ toggleTransaction = { toggleTransaction }
422+ isSelected = { isTransactionSelected ( transaction . transactionID ) }
423+ handleOnPress = { handleOnPress }
424+ handleLongPress = { handleLongPress }
425+ dateColumnSize = { dateColumnSize }
426+ amountColumnSize = { amountColumnSize }
427+ taxAmountColumnSize = { taxAmountColumnSize }
428+ // if we add few new transactions, then we need to scroll to the first one
429+ scrollToNewTransaction = { transaction . transactionID === newTransactions ?. at ( 0 ) ?. transactionID ? scrollToNewTransaction : undefined }
430+ forwardedFSClass = { transactionItemFSClass }
431+ onArrowRightPress = { handleArrowRightPress }
432+ />
516433 ) ;
517434 } ) }
518435 </ View >
0 commit comments