Skip to content

Commit 2f55ceb

Browse files
authored
Merge pull request Expensify#76098 from TaduJR/revert-feat-CFI-Add-group-by-report-layout-feature
revert: feat: [CFI] Add group-by report layout feature
2 parents d4aa2df + 000c059 commit 2f55ceb

27 files changed

Lines changed: 22 additions & 659 deletions

File tree

src/CONST/index.ts

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1132,7 +1132,6 @@ const CONST = {
11321132
EXPORT: 'export',
11331133
PAY: 'pay',
11341134
MERGE: 'merge',
1135-
REPORT_LAYOUT: 'reportLayout',
11361135
},
11371136
PRIMARY_ACTIONS: {
11381137
SUBMIT: 'submit',
@@ -1682,12 +1681,6 @@ const CONST = {
16821681
GSD: 'gsd',
16831682
DEFAULT: 'default',
16841683
},
1685-
REPORT_LAYOUT: {
1686-
GROUP_BY: {
1687-
CATEGORY: 'mcc',
1688-
TAG: 'tag',
1689-
},
1690-
},
16911684
THEME: {
16921685
DEFAULT: 'system',
16931686
FALLBACK: 'dark',

src/ONYXKEYS.ts

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -149,9 +149,6 @@ const ONYXKEYS = {
149149
/** Contains the user preference for the LHN priority mode */
150150
NVP_PRIORITY_MODE: 'nvp_priorityMode',
151151

152-
/** Contains the user preference for report layout group-by option */
153-
NVP_REPORT_LAYOUT_GROUP_BY: 'nvp_expensify_groupByOption',
154-
155152
/** Contains the users's block expiration (if they have one) */
156153
NVP_BLOCKED_FROM_CONCIERGE: 'nvp_private_blockedFromConcierge',
157154

@@ -1147,7 +1144,6 @@ type OnyxValuesMapping = {
11471144
[ONYXKEYS.BETA_CONFIGURATION]: OnyxTypes.BetaConfiguration;
11481145
[ONYXKEYS.NVP_MUTED_PLATFORMS]: Partial<Record<Platform, true>>;
11491146
[ONYXKEYS.NVP_PRIORITY_MODE]: ValueOf<typeof CONST.PRIORITY_MODE>;
1150-
[ONYXKEYS.NVP_REPORT_LAYOUT_GROUP_BY]: string;
11511147
[ONYXKEYS.NVP_BLOCKED_FROM_CONCIERGE]: OnyxTypes.BlockedFromConcierge;
11521148
[ONYXKEYS.QUEUE_FLUSHED_DATA]: OnyxUpdate[];
11531149

src/ROUTES.ts

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -616,10 +616,6 @@ const ROUTES = {
616616
// eslint-disable-next-line no-restricted-syntax -- Legacy route generation
617617
getRoute: (reportID: string, backTo?: string) => getUrlWithBackToParam(`r/${reportID}/settings/visibility` as const, backTo),
618618
},
619-
REPORT_SETTINGS_REPORT_LAYOUT: {
620-
route: 'r/:reportID/settings/report-layout',
621-
getRoute: (reportID: string) => `r/${reportID}/settings/report-layout` as const,
622-
},
623619
REPORT_CHANGE_APPROVER: {
624620
route: 'r/:reportID/change-approver',
625621

src/SCREENS.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -386,7 +386,6 @@ const SCREENS = {
386386
NOTIFICATION_PREFERENCES: 'Report_Settings_Notification_Preferences',
387387
WRITE_CAPABILITY: 'Report_Settings_Write_Capability',
388388
VISIBILITY: 'Report_Settings_Visibility',
389-
REPORT_LAYOUT: 'Report_Settings_Report_Layout',
390389
},
391390

392391
NEW_TASK: {

src/components/MoneyReportHeader.tsx

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -226,7 +226,6 @@ function MoneyReportHeader({
226226
'Info',
227227
'Export',
228228
'Document',
229-
'Feed',
230229
] as const);
231230
const [lastDistanceExpenseType] = useOnyx(ONYXKEYS.NVP_LAST_DISTANCE_EXPENSE_TYPE, {canBeMissing: true});
232231
const {translate} = useLocalize();
@@ -1144,17 +1143,6 @@ function MoneyReportHeader({
11441143
Navigation.navigate(ROUTES.REPORT_CHANGE_APPROVER.getRoute(moneyRequestReport.reportID, Navigation.getActiveRoute()));
11451144
},
11461145
},
1147-
[CONST.REPORT.SECONDARY_ACTIONS.REPORT_LAYOUT]: {
1148-
text: translate('reportLayout.reportLayout'),
1149-
icon: expensifyIcons.Feed,
1150-
value: CONST.REPORT.SECONDARY_ACTIONS.REPORT_LAYOUT,
1151-
onSelected: () => {
1152-
if (!moneyRequestReport) {
1153-
return;
1154-
}
1155-
Navigation.navigate(ROUTES.REPORT_SETTINGS_REPORT_LAYOUT.getRoute(moneyRequestReport.reportID));
1156-
},
1157-
},
11581146
[CONST.REPORT.SECONDARY_ACTIONS.DELETE]: {
11591147
text: translate('common.delete'),
11601148
icon: expensifyIcons.Trashcan,

src/components/MoneyRequestReportView/MoneyRequestReportGroupHeader.tsx

Lines changed: 0 additions & 90 deletions
This file was deleted.

src/components/MoneyRequestReportView/MoneyRequestReportTransactionList.tsx

Lines changed: 21 additions & 104 deletions
Original file line numberDiff line numberDiff line change
@@ -26,14 +26,12 @@ import useStyleUtils from '@hooks/useStyleUtils';
2626
import useThemeStyles from '@hooks/useThemeStyles';
2727
import {turnOnMobileSelectionMode} from '@libs/actions/MobileSelectionMode';
2828
import {setOptimisticTransactionThread} from '@libs/actions/Report';
29-
import {getReportLayoutGroupBy} from '@libs/actions/ReportLayout';
3029
import {setActiveTransactionIDs} from '@libs/actions/TransactionThreadNavigation';
3130
import {convertToDisplayString} from '@libs/CurrencyUtils';
3231
import FS from '@libs/Fullstory';
3332
import {navigationRef} from '@libs/Navigation/Navigation';
3433
import Parser from '@libs/Parser';
3534
import {getIOUActionForTransactionID} from '@libs/ReportActionsUtils';
36-
import {groupTransactionsByCategory, groupTransactionsByTag} from '@libs/ReportLayoutUtils';
3735
import {
3836
canAddTransaction,
3937
getAddExpenseDropdownOptions,
@@ -66,7 +64,6 @@ import ONYXKEYS from '@src/ONYXKEYS';
6664
import ROUTES from '@src/ROUTES';
6765
import type SCREENS from '@src/SCREENS';
6866
import type * as OnyxTypes from '@src/types/onyx';
69-
import MoneyRequestReportGroupHeader from './MoneyRequestReportGroupHeader';
7067
import MoneyRequestReportTableHeader from './MoneyRequestReportTableHeader';
7168
import MoneyRequestReportTotalSpend from './MoneyRequestReportTotalSpend';
7269
import 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>

src/languages/de.ts

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -7528,18 +7528,6 @@ ${
75287528
employeeInviteMessage: ({name}: EmployeeInviteMessageParams) =>
75297529
`# ${name} hat dich eingeladen, Expensify auszuprobieren\nHey! Ich habe uns gerade *3 Monate kostenlos* gesichert, um Expensify auszuprobieren, den schnellsten Weg, um Ausgaben zu verwalten.\n\nHier ist ein *Testbeleg*, um dir zu zeigen, wie es funktioniert:`,
75307530
},
7531-
reportLayout: {
7532-
reportLayout: 'Berichtslayout',
7533-
groupByLabel: 'Gruppieren nach:',
7534-
selectGroupByOption: 'Wählen Sie aus, wie Berichtsausgaben gruppiert werden sollen',
7535-
groupHeader: ({groupName}: {groupName: string}) => `${groupName}`,
7536-
groupHeaderHint: ({action}: {action: string}) => `${action} diese Gruppe`,
7537-
selectGroup: ({groupName}: {groupName: string}) => `Alle Ausgaben in ${groupName} auswählen`,
7538-
groupBy: {
7539-
category: 'Kategorie',
7540-
tag: 'Schlagwort',
7541-
},
7542-
},
75437531
export: {
75447532
basicExport: 'Basis Export',
75457533
reportLevelExport: 'Alle Daten - Berichtsebene',

src/languages/en.ts

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6555,18 +6555,6 @@ const translations = {
65556555
allMatchingItemsSelected: 'All matching items selected',
65566556
},
65576557
},
6558-
reportLayout: {
6559-
reportLayout: 'Report layout',
6560-
groupByLabel: 'Group by:',
6561-
selectGroupByOption: 'Select how to group report expenses',
6562-
groupHeader: ({groupName}: {groupName: string}) => `${groupName}`,
6563-
groupHeaderHint: ({action}: {action: string}) => `${action} this group`,
6564-
selectGroup: ({groupName}: {groupName: string}) => `Select all expenses in ${groupName}`,
6565-
groupBy: {
6566-
category: 'Category',
6567-
tag: 'Tag',
6568-
},
6569-
},
65706558
genericErrorPage: {
65716559
title: 'Uh-oh, something went wrong!',
65726560
body: {

0 commit comments

Comments
 (0)