Skip to content

Commit 4d41b83

Browse files
committed
Revert "Merge pull request Expensify#63931 from callstack-internal/VickyStash/feature/58828-stop-creating-optimistic-transaction-4"
This reverts commit 7208e29, reversing changes made to 8ab3cc2.
1 parent dccb6ea commit 4d41b83

25 files changed

Lines changed: 244 additions & 519 deletions

src/CONST/index.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -890,7 +890,6 @@ const CONST = {
890890
EMPTY_ARRAY,
891891
EMPTY_OBJECT,
892892
DEFAULT_NUMBER_ID,
893-
FAKE_REPORT_ID: 'FAKE_REPORT_ID',
894893
USE_EXPENSIFY_URL,
895894
EXPENSIFY_URL,
896895
EXPENSIFY_MOBILE_URL,

src/ONYXKEYS.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -548,8 +548,8 @@ const ONYXKEYS = {
548548
/** Is unreported transactions loading */
549549
IS_LOADING_UNREPORTED_TRANSACTIONS: 'isLoadingUnreportedTransactions',
550550

551-
/** List of transaction IDs used when navigating to prev/next transaction when viewing it in RHP */
552-
TRANSACTION_THREAD_NAVIGATION_TRANSACTION_IDS: 'transactionThreadNavigationTransactionIDs',
551+
/** List of transaction thread IDs used when navigating to prev/next transaction when viewing it in RHP */
552+
TRANSACTION_THREAD_NAVIGATION_REPORT_IDS: 'transactionThreadNavigationReportIDs',
553553

554554
/** Timestamp of the last login on iOS */
555555
NVP_LAST_ECASH_IOS_LOGIN: 'nvp_lastECashIOSLogin',
@@ -1212,7 +1212,7 @@ type OnyxValuesMapping = {
12121212
[ONYXKEYS.NVP_LAST_ECASH_ANDROID_LOGIN]: string;
12131213
[ONYXKEYS.NVP_LAST_IPHONE_LOGIN]: string;
12141214
[ONYXKEYS.NVP_LAST_ANDROID_LOGIN]: string;
1215-
[ONYXKEYS.TRANSACTION_THREAD_NAVIGATION_TRANSACTION_IDS]: string[];
1215+
[ONYXKEYS.TRANSACTION_THREAD_NAVIGATION_REPORT_IDS]: string[];
12161216
[ONYXKEYS.ONBOARDING_USER_REPORTED_INTEGRATION]: OnboardingAccounting;
12171217
[ONYXKEYS.HYBRID_APP]: OnyxTypes.HybridApp;
12181218
};

src/ROUTES.ts

Lines changed: 5 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -90,14 +90,12 @@ const ROUTES = {
9090
backTo,
9191
moneyRequestReportActionID,
9292
transactionID,
93-
iouReportID,
9493
}: {
9594
reportID: string | undefined;
9695
reportActionID?: string;
9796
backTo?: string;
9897
moneyRequestReportActionID?: string;
9998
transactionID?: string;
100-
iouReportID?: string;
10199
}) => {
102100
if (!reportID) {
103101
Log.warn('Invalid reportID is used to build the SEARCH_REPORT route');
@@ -114,10 +112,6 @@ const ROUTES = {
114112
queryParams.push(`moneyRequestReportActionID=${moneyRequestReportActionID}`);
115113
}
116114

117-
if (iouReportID) {
118-
queryParams.push(`iouReportID=${iouReportID}`);
119-
}
120-
121115
const queryString = queryParams.length > 0 ? (`${baseRoute}?${queryParams.join('&')}` as const) : baseRoute;
122116
return getUrlWithBackToParam(queryString, backTo);
123117
},
@@ -392,19 +386,10 @@ const ROUTES = {
392386
REPORT: 'r',
393387
REPORT_WITH_ID: {
394388
route: 'r/:reportID?/:reportActionID?',
395-
getRoute: (
396-
reportID: string | undefined,
397-
reportActionID?: string,
398-
referrer?: string,
399-
moneyRequestReportActionID?: string,
400-
transactionID?: string,
401-
backTo?: string,
402-
iouReportID?: string,
403-
) => {
389+
getRoute: (reportID: string | undefined, reportActionID?: string, referrer?: string, moneyRequestReportActionID?: string, transactionID?: string, backTo?: string) => {
404390
if (!reportID) {
405391
Log.warn('Invalid reportID is used to build the REPORT_WITH_ID route');
406392
}
407-
408393
const baseRoute = reportActionID ? (`r/${reportID}/${reportActionID}` as const) : (`r/${reportID}` as const);
409394

410395
const queryParams: string[] = [];
@@ -418,10 +403,6 @@ const ROUTES = {
418403
queryParams.push(`transactionID=${transactionID}`);
419404
}
420405

421-
if (iouReportID) {
422-
queryParams.push(`iouReportID=${iouReportID}`);
423-
}
424-
425406
const queryString = queryParams.length > 0 ? `?${queryParams.join('&')}` : '';
426407

427408
return getUrlWithBackToParam(`${baseRoute}${queryString}` as const, backTo);
@@ -599,15 +580,10 @@ const ROUTES = {
599580
},
600581
MONEY_REQUEST_HOLD_REASON: {
601582
route: ':type/edit/reason/:transactionID?/:searchHash?',
602-
getRoute: (type: ValueOf<typeof CONST.POLICY.TYPE>, transactionID: string, reportID: string | undefined, backTo: string, searchHash?: number) => {
603-
let route = searchHash
604-
? (`${type as string}/edit/reason/${transactionID}/${searchHash}/?backTo=${backTo}` as const)
605-
: (`${type as string}/edit/reason/${transactionID}/?backTo=${backTo}` as const);
606-
607-
if (reportID) {
608-
route = `${route}&reportID=${reportID}` as const;
609-
}
610-
583+
getRoute: (type: ValueOf<typeof CONST.POLICY.TYPE>, transactionID: string, reportID: string, backTo: string, searchHash?: number) => {
584+
const route = searchHash
585+
? (`${type as string}/edit/reason/${transactionID}/${searchHash}/?backTo=${backTo}&reportID=${reportID}` as const)
586+
: (`${type as string}/edit/reason/${transactionID}/?backTo=${backTo}&reportID=${reportID}` as const);
611587
return route;
612588
},
613589
},

src/components/MoneyRequestHeader.tsx

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -301,12 +301,7 @@ function MoneyRequestHeader({report, parentReportAction, policy, onBackButtonPre
301301
)}
302302
</View>
303303
)}
304-
{shouldDisplayTransactionNavigation && !!transaction && (
305-
<MoneyRequestReportTransactionsNavigation
306-
currentTransactionID={transaction.transactionID}
307-
parentReport={parentReport}
308-
/>
309-
)}
304+
{shouldDisplayTransactionNavigation && <MoneyRequestReportTransactionsNavigation currentReportID={reportID} />}
310305
</HeaderWithBackButton>
311306
{shouldUseNarrowLayout && (
312307
<View style={[styles.flexRow, styles.gap2, styles.pb3, styles.ph5, styles.w100, styles.alignItemsCenter, styles.justifyContentCenter]}>

src/components/MoneyRequestReportView/MoneyRequestReportTransactionList.tsx

Lines changed: 12 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -17,23 +17,21 @@ import useResponsiveLayout from '@hooks/useResponsiveLayout';
1717
import useStyleUtils from '@hooks/useStyleUtils';
1818
import useThemeStyles from '@hooks/useThemeStyles';
1919
import {turnOnMobileSelectionMode} from '@libs/actions/MobileSelectionMode';
20-
import {setActiveTransactionIDs} from '@libs/actions/TransactionThreadNavigation';
20+
import {setActiveTransactionThreadIDs} from '@libs/actions/TransactionThreadNavigation';
2121
import {convertToDisplayString} from '@libs/CurrencyUtils';
22+
import {getThreadReportIDsForTransactions} from '@libs/MoneyRequestReportUtils';
2223
import {navigationRef} from '@libs/Navigation/Navigation';
23-
import {getIOUActionForTransactionID, getOriginalMessage, isMoneyRequestAction} from '@libs/ReportActionsUtils';
24-
import {generateReportID, getMoneyRequestSpendBreakdown} from '@libs/ReportUtils';
24+
import {getIOUActionForTransactionID} from '@libs/ReportActionsUtils';
25+
import {getMoneyRequestSpendBreakdown} from '@libs/ReportUtils';
2526
import {compareValues, getColumnsToShow, isTransactionAmountTooLong, isTransactionTaxAmountTooLong} from '@libs/SearchUIUtils';
2627
import {getTransactionPendingAction, isTransactionPendingDelete} from '@libs/TransactionUtils';
2728
import shouldShowTransactionYear from '@libs/TransactionUtils/shouldShowTransactionYear';
2829
import Navigation from '@navigation/Navigation';
29-
import type {ReportsSplitNavigatorParamList} from '@navigation/types';
3030
import variables from '@styles/variables';
3131
import CONST from '@src/CONST';
3232
import type {TranslationPaths} from '@src/languages/types';
3333
import NAVIGATORS from '@src/NAVIGATORS';
34-
import type {Route} from '@src/ROUTES';
3534
import ROUTES from '@src/ROUTES';
36-
import type SCREENS from '@src/SCREENS';
3735
import type * as OnyxTypes from '@src/types/onyx';
3836
import MoneyRequestReportTableHeader from './MoneyRequestReportTableHeader';
3937
import MoneyRequestReportTotalSpend from './MoneyRequestReportTotalSpend';
@@ -82,8 +80,6 @@ type SortedTransactions = {
8280
sortOrder: SortOrder;
8381
};
8482

85-
type ReportScreenNavigationProps = ReportsSplitNavigatorParamList[typeof SCREENS.REPORT];
86-
8783
const isSortableColumnName = (key: unknown): key is SortableColumnName => !!sortableColumnNames.find((val) => val === key);
8884

8985
const getTransactionKey = (transaction: OnyxTypes.Transaction, key: SortableColumnName) => {
@@ -172,26 +168,18 @@ function MoneyRequestReportTransactionList({
172168
const navigateToTransaction = useCallback(
173169
(activeTransactionID: string) => {
174170
const iouAction = getIOUActionForTransactionID(reportActions, activeTransactionID);
175-
const reportIDToNavigate = iouAction?.childReportID ?? generateReportID();
176-
177-
const backTo = Navigation.getActiveRoute() as Route;
178-
179-
const routeParams = {
180-
reportID: reportIDToNavigate,
181-
backTo,
182-
} as ReportScreenNavigationProps;
183-
184-
if (!iouAction?.childReportID) {
185-
routeParams.moneyRequestReportActionID = iouAction?.reportActionID;
186-
routeParams.transactionID = activeTransactionID;
187-
routeParams.iouReportID = isMoneyRequestAction(iouAction) ? getOriginalMessage(iouAction)?.IOUReportID : undefined;
171+
const reportIDToNavigate = iouAction?.childReportID;
172+
if (!reportIDToNavigate) {
173+
return;
188174
}
189175

176+
const backTo = Navigation.getActiveRoute();
177+
190178
// Single transaction report will open in RHP, and we need to find every other report ID for the rest of transactions
191179
// to display prev/next arrows in RHP for navigation
192-
const sortedSiblingTransactionIDs = sortedTransactions.map((transaction) => transaction.transactionID);
193-
setActiveTransactionIDs(sortedSiblingTransactionIDs).then(() => {
194-
Navigation.navigate(ROUTES.SEARCH_REPORT.getRoute(routeParams));
180+
const sortedSiblingTransactionReportIDs = getThreadReportIDsForTransactions(reportActions, sortedTransactions);
181+
setActiveTransactionThreadIDs(sortedSiblingTransactionReportIDs).then(() => {
182+
Navigation.navigate(ROUTES.SEARCH_REPORT.getRoute({reportID: reportIDToNavigate, backTo}));
195183
});
196184
},
197185
[reportActions, sortedTransactions],

src/components/MoneyRequestReportView/MoneyRequestReportTransactionsNavigation.tsx

Lines changed: 19 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -1,43 +1,36 @@
11
import {findFocusedRoute} from '@react-navigation/native';
22
import React, {useEffect, useMemo} from 'react';
3-
import type {OnyxEntry} from 'react-native-onyx';
43
import PrevNextButtons from '@components/PrevNextButtons';
54
import useOnyx from '@hooks/useOnyx';
6-
import {clearActiveTransactionIDs} from '@libs/actions/TransactionThreadNavigation';
7-
import {getIOUActionForTransactionID} from '@libs/ReportActionsUtils';
8-
import {generateReportID} from '@libs/ReportUtils';
5+
import {clearActiveTransactionThreadIDs} from '@libs/actions/TransactionThreadNavigation';
96
import Navigation from '@navigation/Navigation';
107
import navigationRef from '@navigation/navigationRef';
118
import ONYXKEYS from '@src/ONYXKEYS';
129
import ROUTES from '@src/ROUTES';
1310
import SCREENS from '@src/SCREENS';
14-
import type {Report} from '@src/types/onyx';
1511
import getEmptyArray from '@src/types/utils/getEmptyArray';
1612

1713
type MoneyRequestReportRHPNavigationButtonsProps = {
18-
currentTransactionID: string;
19-
parentReport: OnyxEntry<Report>;
14+
currentReportID: string;
2015
};
2116

22-
function MoneyRequestReportTransactionsNavigation({currentTransactionID, parentReport}: MoneyRequestReportRHPNavigationButtonsProps) {
23-
const [transactionIDsList = getEmptyArray<string>()] = useOnyx(ONYXKEYS.TRANSACTION_THREAD_NAVIGATION_TRANSACTION_IDS, {
17+
function MoneyRequestReportTransactionsNavigation({currentReportID}: MoneyRequestReportRHPNavigationButtonsProps) {
18+
const [reportIDsList = getEmptyArray<string>()] = useOnyx(ONYXKEYS.TRANSACTION_THREAD_NAVIGATION_REPORT_IDS, {
2419
canBeMissing: true,
2520
});
26-
const [reportActions] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${parentReport?.reportID}`, {canEvict: false, canBeMissing: true});
27-
const reportActionsArray = Object.values(reportActions ?? {});
2821

29-
const {prevTransactionID, nextTransactionID} = useMemo(() => {
30-
if (!transactionIDsList || transactionIDsList.length < 2) {
22+
const {prevReportID, nextReportID} = useMemo(() => {
23+
if (!reportIDsList || reportIDsList.length < 2) {
3124
return {prevReportID: undefined, nextReportID: undefined};
3225
}
3326

34-
const currentReportIndex = transactionIDsList.findIndex((id) => id === currentTransactionID);
27+
const currentReportIndex = reportIDsList.findIndex((id) => id === currentReportID);
3528

36-
const prevID = currentReportIndex > 0 ? transactionIDsList.at(currentReportIndex - 1) : undefined;
37-
const nextID = currentReportIndex <= transactionIDsList.length - 1 ? transactionIDsList.at(currentReportIndex + 1) : undefined;
29+
const prevID = currentReportIndex > 0 ? reportIDsList.at(currentReportIndex - 1) : undefined;
30+
const nextID = currentReportIndex <= reportIDsList.length - 1 ? reportIDsList.at(currentReportIndex + 1) : undefined;
3831

39-
return {prevTransactionID: prevID, nextTransactionID: nextID};
40-
}, [currentTransactionID, transactionIDsList]);
32+
return {prevReportID: prevID, nextReportID: nextID};
33+
}, [currentReportID, reportIDsList]);
4134

4235
/**
4336
* We clear the sibling transactionThreadIDs when unmounting this component
@@ -49,49 +42,27 @@ function MoneyRequestReportTransactionsNavigation({currentTransactionID, parentR
4942
if (focusedRoute?.name === SCREENS.SEARCH.REPORT_RHP) {
5043
return;
5144
}
52-
clearActiveTransactionIDs();
45+
clearActiveTransactionThreadIDs();
5346
};
5447
}, []);
5548

56-
if (transactionIDsList.length < 2) {
49+
if (reportIDsList.length < 2) {
5750
return;
5851
}
5952

60-
const navigateToReportByTransactionID = (transactionID: string | undefined) => {
61-
if (!transactionID) {
62-
return;
63-
}
64-
65-
const backTo = Navigation.getActiveRoute();
66-
const action = getIOUActionForTransactionID(Object.values(reportActionsArray), transactionID);
67-
68-
if (action?.childReportID) {
69-
Navigation.navigate(ROUTES.SEARCH_REPORT.getRoute({reportID: action.childReportID, backTo}), {forceReplace: true});
70-
} else {
71-
const transactionThreadReportID = generateReportID();
72-
Navigation.navigate(
73-
ROUTES.SEARCH_REPORT.getRoute({
74-
reportID: transactionThreadReportID,
75-
backTo,
76-
moneyRequestReportActionID: action?.reportActionID,
77-
transactionID,
78-
iouReportID: parentReport?.reportID,
79-
}),
80-
);
81-
}
82-
};
83-
8453
return (
8554
<PrevNextButtons
86-
isPrevButtonDisabled={!prevTransactionID}
87-
isNextButtonDisabled={!nextTransactionID}
55+
isPrevButtonDisabled={!prevReportID}
56+
isNextButtonDisabled={!nextReportID}
8857
onNext={(e) => {
58+
const backTo = Navigation.getActiveRoute();
8959
e?.preventDefault();
90-
navigateToReportByTransactionID(nextTransactionID);
60+
Navigation.navigate(ROUTES.SEARCH_REPORT.getRoute({reportID: nextReportID, backTo}), {forceReplace: true});
9161
}}
9262
onPrevious={(e) => {
63+
const backTo = Navigation.getActiveRoute();
9364
e?.preventDefault();
94-
navigateToReportByTransactionID(prevTransactionID);
65+
Navigation.navigate(ROUTES.SEARCH_REPORT.getRoute({reportID: prevReportID, backTo}), {forceReplace: true});
9566
}}
9667
/>
9768
);

src/components/ReportActionItem/MoneyRequestAction.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ function MoneyRequestAction({
119119
const transactionID = isMoneyRequestAction(action) ? getOriginalMessage(action)?.IOUTransactionID : CONST.DEFAULT_NUMBER_ID;
120120
if (!action?.childReportID && transactionID && action.reportActionID) {
121121
const optimisticReportID = generateReportID();
122-
Navigation.navigate(ROUTES.REPORT_WITH_ID.getRoute(optimisticReportID, undefined, undefined, action.reportActionID, transactionID, Navigation.getActiveRoute(), requestReportID));
122+
Navigation.navigate(ROUTES.REPORT_WITH_ID.getRoute(optimisticReportID, undefined, undefined, action.reportActionID, transactionID, Navigation.getActiveRoute()));
123123
return;
124124
}
125125

src/components/Search/index.tsx

Lines changed: 18 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ import Log from '@libs/Log';
2525
import isSearchTopmostFullScreenRoute from '@libs/Navigation/helpers/isSearchTopmostFullScreenRoute';
2626
import type {PlatformStackNavigationProp} from '@libs/Navigation/PlatformStackNavigation/types';
2727
import Performance from '@libs/Performance';
28-
import {getIOUActionForTransactionID, getOriginalMessage, getReportAction, isExportIntegrationAction, isIntegrationMessageAction, isMoneyRequestAction} from '@libs/ReportActionsUtils';
28+
import {getIOUActionForTransactionID, isExportIntegrationAction, isIntegrationMessageAction} from '@libs/ReportActionsUtils';
2929
import {canEditFieldOfMoneyRequest, generateReportID} from '@libs/ReportUtils';
3030
import {buildCannedSearchQuery, buildSearchQueryString} from '@libs/SearchQueryUtils';
3131
import {
@@ -476,26 +476,6 @@ function Search({queryJSON, searchResults, onSearchListScroll, contentContainerS
476476

477477
const isFromSelfDM = item.reportID === CONST.REPORT.UNREPORTED_REPORT_ID;
478478
const isTransactionItem = isTransactionListItemType(item);
479-
const backTo = Navigation.getActiveRoute();
480-
481-
// If we're trying to open a legacy transaction without a transaction thread, let's create the thread and navigate the user
482-
if (isTransactionItem && item.transactionThreadReportID === CONST.REPORT.UNREPORTED_REPORT_ID) {
483-
const transactionThreadReportID = generateReportID();
484-
const reportAction = getReportAction(item.reportID, item.moneyRequestReportActionID);
485-
const iouReportID = isMoneyRequestAction(reportAction) ? getOriginalMessage(reportAction)?.IOUReportID : undefined;
486-
487-
updateSearchResultsWithTransactionThreadReportID(hash, item.transactionID, transactionThreadReportID);
488-
Navigation.navigate(
489-
ROUTES.SEARCH_REPORT.getRoute({
490-
reportID: transactionThreadReportID,
491-
backTo,
492-
moneyRequestReportActionID: item.moneyRequestReportActionID,
493-
transactionID: item.transactionID,
494-
iouReportID,
495-
}),
496-
);
497-
return;
498-
}
499479

500480
const reportID =
501481
isTransactionItem && (!item.isFromOneTransactionReport || isFromSelfDM) && item.transactionThreadReportID !== CONST.REPORT.UNREPORTED_REPORT_ID
@@ -509,11 +489,28 @@ function Search({queryJSON, searchResults, onSearchListScroll, contentContainerS
509489
Performance.markStart(CONST.TIMING.OPEN_REPORT_SEARCH);
510490
Timing.start(CONST.TIMING.OPEN_REPORT_SEARCH);
511491

492+
const backTo = Navigation.getActiveRoute();
493+
512494
if (isTransactionGroupListItemType(item)) {
513495
Navigation.navigate(ROUTES.SEARCH_MONEY_REQUEST_REPORT.getRoute({reportID, backTo}));
514496
return;
515497
}
516498

499+
// If we're trying to open a legacy transaction without a transaction thread, let's create the thread and navigate the user
500+
if (isTransactionItem && reportID === CONST.REPORT.UNREPORTED_REPORT_ID) {
501+
const generatedReportID = generateReportID();
502+
updateSearchResultsWithTransactionThreadReportID(hash, item.transactionID, generatedReportID);
503+
Navigation.navigate(
504+
ROUTES.SEARCH_REPORT.getRoute({
505+
reportID: generatedReportID,
506+
backTo,
507+
moneyRequestReportActionID: item.moneyRequestReportActionID,
508+
transactionID: item.transactionID,
509+
}),
510+
);
511+
return;
512+
}
513+
517514
if (isReportActionListItemType(item)) {
518515
const reportActionID = item.reportActionID;
519516
Navigation.navigate(ROUTES.SEARCH_REPORT.getRoute({reportID, reportActionID, backTo}));

0 commit comments

Comments
 (0)