Skip to content

Commit 708a6f8

Browse files
mountinyOSBotify
authored andcommitted
Merge pull request #75890 from Expensify/revert-71199-fix/expense-not-greyed-out-offline-delete
[CP Staging] Revert "fix:(search) update optimistic transactions pending action in search snapshot" (cherry picked from commit 43da5d3) (cherry-picked to staging by mountiny)
1 parent 45040e1 commit 708a6f8

File tree

10 files changed

+139
-383
lines changed

10 files changed

+139
-383
lines changed

src/components/MoneyRequestHeader.tsx

Lines changed: 15 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import useCurrentUserPersonalDetails from '@hooks/useCurrentUserPersonalDetails'
88
import useDeleteTransactions from '@hooks/useDeleteTransactions';
99
import useDuplicateTransactionsAndViolations from '@hooks/useDuplicateTransactionsAndViolations';
1010
import useGetIOUReportFromReportAction from '@hooks/useGetIOUReportFromReportAction';
11-
import {useMemoizedLazyExpensifyIcons} from '@hooks/useLazyAsset';
1211
import useLoadingBarVisibility from '@hooks/useLoadingBarVisibility';
1312
import useLocalize from '@hooks/useLocalize';
1413
import useOnyx from '@hooks/useOnyx';
@@ -60,6 +59,7 @@ import HeaderWithBackButton from './HeaderWithBackButton';
6059
import HoldOrRejectEducationalModal from './HoldOrRejectEducationalModal';
6160
import HoldSubmitterEducationalModal from './HoldSubmitterEducationalModal';
6261
import Icon from './Icon';
62+
import * as Expensicons from './Icon/Expensicons';
6363
import LoadingBar from './LoadingBar';
6464
import type {MoneyRequestHeaderStatusBarProps} from './MoneyRequestHeaderStatusBar';
6565
import MoneyRequestHeaderStatusBar from './MoneyRequestHeaderStatusBar';
@@ -108,7 +108,6 @@ function MoneyRequestHeader({report, parentReportAction, policy, onBackButtonPre
108108
> | null>(null);
109109
const [dismissedRejectUseExplanation] = useOnyx(ONYXKEYS.NVP_DISMISSED_REJECT_USE_EXPLANATION, {canBeMissing: true});
110110
const [dismissedHoldUseExplanation] = useOnyx(ONYXKEYS.NVP_DISMISSED_HOLD_USE_EXPLANATION, {canBeMissing: true});
111-
const [allSnapshots] = useOnyx(ONYXKEYS.COLLECTION.SNAPSHOT, {canBeMissing: true});
112111
const shouldShowLoadingBar = useLoadingBarVisibility();
113112
const styles = useThemeStyles();
114113
const theme = useTheme();
@@ -155,37 +154,24 @@ function MoneyRequestHeader({report, parentReportAction, policy, onBackButtonPre
155154
/>
156155
);
157156

158-
const expensifyIcons = useMemoizedLazyExpensifyIcons([
159-
'Stopwatch',
160-
'Hourglass',
161-
'Flag',
162-
'CreditCardHourglass',
163-
'ReceiptScan',
164-
'ArrowSplit',
165-
'ArrowCollapse',
166-
'Info',
167-
'Trashcan',
168-
'ThumbsDown',
169-
]);
170-
171157
const getStatusBarProps: () => MoneyRequestHeaderStatusBarProps | undefined = () => {
172158
if (isOnHold) {
173-
return {icon: getStatusIcon(expensifyIcons.Stopwatch), description: translate('iou.expenseOnHold')};
159+
return {icon: getStatusIcon(Expensicons.Stopwatch), description: translate('iou.expenseOnHold')};
174160
}
175161
if (isMarkAsResolvedAction(parentReport, transactionViolations, policy)) {
176-
return {icon: getStatusIcon(expensifyIcons.Hourglass), description: translate('iou.reject.rejectedStatus')};
162+
return {icon: getStatusIcon(Expensicons.Hourglass), description: translate('iou.reject.rejectedStatus')};
177163
}
178164

179165
if (isDuplicate) {
180-
return {icon: getStatusIcon(expensifyIcons.Flag), description: translate('iou.expenseDuplicate')};
166+
return {icon: getStatusIcon(Expensicons.Flag), description: translate('iou.expenseDuplicate')};
181167
}
182168

183169
if (isExpensifyCardTransaction(transaction) && isPending(transaction)) {
184-
return {icon: getStatusIcon(expensifyIcons.CreditCardHourglass), description: translate('iou.transactionPendingDescription')};
170+
return {icon: getStatusIcon(Expensicons.CreditCardHourglass), description: translate('iou.transactionPendingDescription')};
185171
}
186172
if (shouldShowBrokenConnectionViolation) {
187173
return {
188-
icon: getStatusIcon(expensifyIcons.Hourglass),
174+
icon: getStatusIcon(Expensicons.Hourglass),
189175
description: (
190176
<BrokenConnectionDescription
191177
transactionID={transaction?.transactionID}
@@ -196,10 +182,10 @@ function MoneyRequestHeader({report, parentReportAction, policy, onBackButtonPre
196182
};
197183
}
198184
if (hasPendingRTERViolation) {
199-
return {icon: getStatusIcon(expensifyIcons.Hourglass), description: translate('iou.pendingMatchWithCreditCardDescription')};
185+
return {icon: getStatusIcon(Expensicons.Hourglass), description: translate('iou.pendingMatchWithCreditCardDescription')};
200186
}
201187
if (isScanning(transaction)) {
202-
return {icon: getStatusIcon(expensifyIcons.ReceiptScan), description: translate('iou.receiptScanInProgressDescription')};
188+
return {icon: getStatusIcon(Expensicons.ReceiptScan), description: translate('iou.receiptScanInProgressDescription')};
203189
}
204190
};
205191

@@ -308,7 +294,7 @@ function MoneyRequestHeader({report, parentReportAction, policy, onBackButtonPre
308294
const secondaryActionsImplementation: Record<ValueOf<typeof CONST.REPORT.TRANSACTION_SECONDARY_ACTIONS>, DropdownOption<ValueOf<typeof CONST.REPORT.TRANSACTION_SECONDARY_ACTIONS>>> = {
309295
[CONST.REPORT.TRANSACTION_SECONDARY_ACTIONS.HOLD]: {
310296
text: translate('iou.hold'),
311-
icon: expensifyIcons.Stopwatch,
297+
icon: Expensicons.Stopwatch,
312298
value: CONST.REPORT.TRANSACTION_SECONDARY_ACTIONS.HOLD,
313299
onSelected: () => {
314300
if (!parentReportAction) {
@@ -333,7 +319,7 @@ function MoneyRequestHeader({report, parentReportAction, policy, onBackButtonPre
333319
},
334320
[CONST.REPORT.TRANSACTION_SECONDARY_ACTIONS.REMOVE_HOLD]: {
335321
text: translate('iou.unhold'),
336-
icon: expensifyIcons.Stopwatch,
322+
icon: Expensicons.Stopwatch,
337323
value: CONST.REPORT.TRANSACTION_SECONDARY_ACTIONS.REMOVE_HOLD,
338324
onSelected: () => {
339325
if (!parentReportAction) {
@@ -345,15 +331,15 @@ function MoneyRequestHeader({report, parentReportAction, policy, onBackButtonPre
345331
},
346332
[CONST.REPORT.TRANSACTION_SECONDARY_ACTIONS.SPLIT]: {
347333
text: isExpenseSplit ? translate('iou.editSplits') : translate('iou.split'),
348-
icon: expensifyIcons.ArrowSplit,
334+
icon: Expensicons.ArrowSplit,
349335
value: CONST.REPORT.SECONDARY_ACTIONS.SPLIT,
350336
onSelected: () => {
351337
initSplitExpense(allTransactions, allReports, transaction);
352338
},
353339
},
354340
[CONST.REPORT.TRANSACTION_SECONDARY_ACTIONS.MERGE]: {
355341
text: translate('common.merge'),
356-
icon: expensifyIcons.ArrowCollapse,
342+
icon: Expensicons.ArrowCollapse,
357343
value: CONST.REPORT.TRANSACTION_SECONDARY_ACTIONS.MERGE,
358344
onSelected: () => {
359345
if (!transaction) {
@@ -367,22 +353,22 @@ function MoneyRequestHeader({report, parentReportAction, policy, onBackButtonPre
367353
[CONST.REPORT.TRANSACTION_SECONDARY_ACTIONS.VIEW_DETAILS]: {
368354
value: CONST.REPORT.SECONDARY_ACTIONS.VIEW_DETAILS,
369355
text: translate('iou.viewDetails'),
370-
icon: expensifyIcons.Info,
356+
icon: Expensicons.Info,
371357
onSelected: () => {
372358
navigateToDetailsPage(report, Navigation.getActiveRoute());
373359
},
374360
},
375361
[CONST.REPORT.TRANSACTION_SECONDARY_ACTIONS.DELETE]: {
376362
text: translate('common.delete'),
377-
icon: expensifyIcons.Trashcan,
363+
icon: Expensicons.Trashcan,
378364
value: CONST.REPORT.SECONDARY_ACTIONS.DELETE,
379365
onSelected: () => {
380366
setIsDeleteModalVisible(true);
381367
},
382368
},
383369
[CONST.REPORT.TRANSACTION_SECONDARY_ACTIONS.REJECT]: {
384370
text: translate('common.reject'),
385-
icon: expensifyIcons.ThumbsDown,
371+
icon: Expensicons.ThumbsDown,
386372
value: CONST.REPORT.TRANSACTION_SECONDARY_ACTIONS.REJECT,
387373
onSelected: () => {
388374
if (dismissedRejectUseExplanation) {
@@ -498,7 +484,6 @@ function MoneyRequestHeader({report, parentReportAction, policy, onBackButtonPre
498484
isSingleTransactionView: true,
499485
isChatReportArchived: isParentReportArchived,
500486
isChatIOUReportArchived,
501-
allSnapshots,
502487
});
503488
} else {
504489
deleteTransactions([transaction.transactionID], duplicateTransactions, duplicateTransactionViolations, currentSearchHash, true);

src/hooks/useDeleteTransactions.ts

Lines changed: 8 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@ type UseDeleteTransactionsParams = {
2727
function useDeleteTransactions({report, reportActions, policy}: UseDeleteTransactionsParams) {
2828
const [allTransactions] = useOnyx(ONYXKEYS.COLLECTION.TRANSACTION, {canBeMissing: false});
2929
const [allReports] = useOnyx(ONYXKEYS.COLLECTION.REPORT, {canBeMissing: true});
30-
const [allSnapshots] = useOnyx(ONYXKEYS.COLLECTION.SNAPSHOT, {canBeMissing: true});
3130
const [policyCategories] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY_CATEGORIES}${getNonEmptyStringOnyxID(report?.policyID)}`, {canBeMissing: true});
3231
const [allPolicyRecentlyUsedCategories] = useOnyx(ONYXKEYS.COLLECTION.POLICY_RECENTLY_USED_CATEGORIES, {canBeMissing: true});
3332
const [allReportNameValuePairs] = useOnyx(ONYXKEYS.COLLECTION.REPORT_NAME_VALUE_PAIRS, {canBeMissing: true});
@@ -137,19 +136,18 @@ function useDeleteTransactions({report, reportActions, policy}: UseDeleteTransac
137136
const chatReport = allReports?.[`${ONYXKEYS.COLLECTION.REPORT}${iouReport?.chatReportID}`];
138137
const chatIOUReportID = chatReport?.reportID;
139138
const isChatIOUReportArchived = archivedReportsIdSet.has(`${ONYXKEYS.COLLECTION.REPORT_NAME_VALUE_PAIRS}${chatIOUReportID}`);
140-
deleteMoneyRequest({
139+
deleteMoneyRequest(
141140
transactionID,
142-
reportAction: action,
143-
transactions: duplicateTransactions,
144-
violations: duplicateTransactionViolations,
141+
action,
142+
duplicateTransactions,
143+
duplicateTransactionViolations,
145144
iouReport,
146145
chatReport,
147146
isChatIOUReportArchived,
148-
allSnapshots,
149147
isSingleTransactionView,
150-
transactionIDsPendingDeletion: deletedTransactionIDs,
151-
selectedTransactionIDs: transactionIDs,
152-
});
148+
deletedTransactionIDs,
149+
transactionIDs,
150+
);
153151
deletedTransactionIDs.push(transactionID);
154152
if (action.childReportID) {
155153
deletedTransactionThreadReportIDs.add(action.childReportID);
@@ -158,19 +156,7 @@ function useDeleteTransactions({report, reportActions, policy}: UseDeleteTransac
158156

159157
return Array.from(deletedTransactionThreadReportIDs);
160158
},
161-
[
162-
reportActions,
163-
allTransactions,
164-
allReports,
165-
report,
166-
allReportNameValuePairs,
167-
allPolicyRecentlyUsedCategories,
168-
policyCategories,
169-
policy,
170-
archivedReportsIdSet,
171-
isBetaEnabled,
172-
allSnapshots,
173-
],
159+
[reportActions, allTransactions, allReports, report, allReportNameValuePairs, allPolicyRecentlyUsedCategories, policyCategories, policy, archivedReportsIdSet, isBetaEnabled],
174160
);
175161

176162
return {

src/libs/ReportUtils.ts

Lines changed: 17 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@ import type {NotificationPreference, Participants, Participant as ReportParticip
7575
import type {Message, OldDotReportAction, ReportActions} from '@src/types/onyx/ReportAction';
7676
import type {PendingChatMember} from '@src/types/onyx/ReportMetadata';
7777
import type {OnyxData} from '@src/types/onyx/Request';
78+
import type {SearchTransaction} from '@src/types/onyx/SearchResults';
7879
import type {Comment, TransactionChanges, WaypointCollection} from '@src/types/onyx/Transaction';
7980
import type {FileObject} from '@src/types/utils/Attachment';
8081
import {isEmptyObject} from '@src/types/utils/EmptyObject';
@@ -924,7 +925,7 @@ type GetReportNameParams = {
924925
parentReportActionParam?: OnyxInputOrEntry<ReportAction>;
925926
personalDetails?: Partial<PersonalDetailsList>;
926927
invoiceReceiverPolicy?: OnyxEntry<Policy>;
927-
transactions?: Transaction[];
928+
transactions?: SearchTransaction[];
928929
reports?: Report[];
929930
policies?: Policy[];
930931
isReportArchived?: boolean;
@@ -2246,7 +2247,7 @@ function findLastAccessedReport(ignoreDomainRooms: boolean, openOnAdminRoom = fa
22462247
/**
22472248
* Whether the provided report has expenses
22482249
*/
2249-
function hasExpenses(reportID?: string, transactions?: Transaction[] | Array<OnyxEntry<Transaction>>): boolean {
2250+
function hasExpenses(reportID?: string, transactions?: SearchTransaction[] | Array<OnyxEntry<Transaction>>): boolean {
22502251
if (transactions) {
22512252
return !!transactions?.find((transaction) => transaction?.reportID === reportID);
22522253
}
@@ -2256,7 +2257,7 @@ function hasExpenses(reportID?: string, transactions?: Transaction[] | Array<Ony
22562257
/**
22572258
* Whether the provided report is a closed expense report with no expenses
22582259
*/
2259-
function isClosedExpenseReportWithNoExpenses(report: OnyxEntry<Report>, transactions?: Transaction[] | Array<OnyxEntry<Transaction>>): boolean {
2260+
function isClosedExpenseReportWithNoExpenses(report: OnyxEntry<Report>, transactions?: SearchTransaction[] | Array<OnyxEntry<Transaction>>): boolean {
22602261
if (!report?.statusNum || report.statusNum !== CONST.REPORT.STATUS_NUM.CLOSED || !isExpenseReport(report)) {
22612262
return false;
22622263
}
@@ -4482,7 +4483,7 @@ function canEditMoneyRequest(
44824483
isChatReportArchived = false,
44834484
report?: OnyxInputOrEntry<Report>,
44844485
policy?: OnyxEntry<Policy>,
4485-
linkedTransaction?: OnyxEntry<Transaction> | Transaction,
4486+
linkedTransaction?: OnyxEntry<Transaction> | SearchTransaction,
44864487
): boolean {
44874488
const isDeleted = isDeletedAction(reportAction);
44884489

@@ -4624,7 +4625,7 @@ function canEditFieldOfMoneyRequest(
46244625
isDeleteAction?: boolean,
46254626
isChatReportArchived = false,
46264627
outstandingReportsByPolicyID?: OutstandingReportsByPolicyIDDerivedValue,
4627-
linkedTransaction?: OnyxEntry<Transaction> | Transaction,
4628+
linkedTransaction?: OnyxEntry<Transaction> | SearchTransaction,
46284629
report?: OnyxInputOrEntry<Report>,
46294630
policy?: OnyxEntry<Policy>,
46304631
): boolean {
@@ -4906,7 +4907,7 @@ function areAllRequestsBeingSmartScanned(iouReportID: string | undefined, report
49064907
*
49074908
* NOTE: This method is only meant to be used inside this action file. Do not export and use it elsewhere. Use useOnyx instead.
49084909
*/
4909-
function getLinkedTransaction(reportAction: OnyxEntry<ReportAction | OptimisticIOUReportAction>, transactions?: Transaction[]): OnyxEntry<Transaction> | Transaction {
4910+
function getLinkedTransaction(reportAction: OnyxEntry<ReportAction | OptimisticIOUReportAction>, transactions?: SearchTransaction[]): OnyxEntry<Transaction> | SearchTransaction {
49104911
let transactionID: string | undefined;
49114912

49124913
if (isMoneyRequestAction(reportAction)) {
@@ -4961,7 +4962,7 @@ function getTransactionReportName({
49614962
reports,
49624963
}: {
49634964
reportAction: OnyxEntry<ReportAction | OptimisticIOUReportAction>;
4964-
transactions?: Transaction[];
4965+
transactions?: SearchTransaction[];
49654966
reports?: Report[];
49664967
}): string {
49674968
if (isReversedTransaction(reportAction)) {
@@ -5594,7 +5595,7 @@ function getReportName(
55945595
personalDetails?: Partial<PersonalDetailsList>,
55955596
invoiceReceiverPolicy?: OnyxEntry<Policy>,
55965597
reportAttributes?: ReportAttributesDerivedValue['reports'],
5597-
transactions?: Transaction[],
5598+
transactions?: SearchTransaction[],
55985599
isReportArchived?: boolean,
55995600
reports?: Report[],
56005601
policies?: Policy[],
@@ -8903,7 +8904,7 @@ function hasViolations(
89038904
reportID: string | undefined,
89048905
transactionViolations: OnyxCollection<TransactionViolation[]>,
89058906
shouldShowInReview?: boolean,
8906-
reportTransactions?: Transaction[],
8907+
reportTransactions?: SearchTransaction[],
89078908
): boolean {
89088909
const transactions = reportTransactions ?? getReportTransactions(reportID);
89098910
return transactions.some((transaction) => hasViolation(transaction, transactionViolations, shouldShowInReview));
@@ -8916,7 +8917,7 @@ function hasWarningTypeViolations(
89168917
reportID: string | undefined,
89178918
transactionViolations: OnyxCollection<TransactionViolation[]>,
89188919
shouldShowInReview?: boolean,
8919-
reportTransactions?: Transaction[],
8920+
reportTransactions?: SearchTransaction[],
89208921
): boolean {
89218922
const transactions = reportTransactions ?? getReportTransactions(reportID);
89228923
return transactions.some((transaction) => hasWarningTypeViolation(transaction, transactionViolations, shouldShowInReview));
@@ -8949,7 +8950,7 @@ function hasNoticeTypeViolations(
89498950
reportID: string | undefined,
89508951
transactionViolations: OnyxCollection<TransactionViolation[]>,
89518952
shouldShowInReview?: boolean,
8952-
reportTransactions?: Transaction[],
8953+
reportTransactions?: SearchTransaction[],
89538954
): boolean {
89548955
const transactions = reportTransactions ?? getReportTransactions(reportID);
89558956
return transactions.some((transaction) => hasNoticeTypeViolation(transaction, transactionViolations, shouldShowInReview));
@@ -8958,7 +8959,7 @@ function hasNoticeTypeViolations(
89588959
/**
89598960
* Checks to see if a report contains any type of violation
89608961
*/
8961-
function hasAnyViolations(reportID: string | undefined, transactionViolations: OnyxCollection<TransactionViolation[]>, reportTransactions?: Transaction[]) {
8962+
function hasAnyViolations(reportID: string | undefined, transactionViolations: OnyxCollection<TransactionViolation[]>, reportTransactions?: SearchTransaction[]) {
89628963
return (
89638964
hasViolations(reportID, transactionViolations, undefined, reportTransactions) ||
89648965
hasNoticeTypeViolations(reportID, transactionViolations, true, reportTransactions) ||
@@ -8982,12 +8983,12 @@ function shouldBlockSubmitDueToStrictPolicyRules(
89828983
reportID: string | undefined,
89838984
transactionViolations: OnyxCollection<TransactionViolation[]>,
89848985
areStrictPolicyRulesEnabled: boolean,
8985-
reportTransactions?: Transaction[],
8986+
reportTransactions?: Transaction[] | SearchTransaction[],
89868987
) {
89878988
if (!areStrictPolicyRulesEnabled) {
89888989
return false;
89898990
}
8990-
return hasAnyViolations(reportID, transactionViolations, reportTransactions);
8991+
return hasAnyViolations(reportID, transactionViolations, reportTransactions as SearchTransaction[]);
89918992
}
89928993

89938994
type ReportErrorsAndReportActionThatRequiresAttention = {
@@ -10340,7 +10341,7 @@ function getAllHeldTransactions(iouReportID?: string): Transaction[] {
1034010341
/**
1034110342
* Check if Report has any held expenses
1034210343
*/
10343-
function hasHeldExpenses(iouReportID?: string, allReportTransactions?: Transaction[]): boolean {
10344+
function hasHeldExpenses(iouReportID?: string, allReportTransactions?: SearchTransaction[]): boolean {
1034410345
const iouReportTransactions = getReportTransactions(iouReportID);
1034510346
const transactions = allReportTransactions ?? iouReportTransactions;
1034610347
return transactions.some((transaction) => isOnHoldTransactionUtils(transaction));
@@ -10349,7 +10350,7 @@ function hasHeldExpenses(iouReportID?: string, allReportTransactions?: Transacti
1034910350
/**
1035010351
* Check if all expenses in the Report are on hold
1035110352
*/
10352-
function hasOnlyHeldExpenses(iouReportID?: string, allReportTransactions?: Transaction[]): boolean {
10353+
function hasOnlyHeldExpenses(iouReportID?: string, allReportTransactions?: SearchTransaction[]): boolean {
1035310354
const transactionsByIouReportID = getReportTransactions(iouReportID);
1035410355
const reportTransactions = allReportTransactions ?? transactionsByIouReportID;
1035510356
return reportTransactions.length > 0 && !reportTransactions.some((transaction) => !isOnHoldTransactionUtils(transaction));

src/libs/SearchUIUtils.ts

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2510,16 +2510,6 @@ function getColumnsToShow(
25102510
return columns;
25112511
}
25122512

2513-
type OnyxSnapshotKey = `${typeof ONYXKEYS.COLLECTION.SNAPSHOT}${string}`;
2514-
2515-
function getSnapshotKeys(allSnapshots: OnyxCollection<OnyxTypes.SearchResults>) {
2516-
if (!allSnapshots) {
2517-
return [];
2518-
}
2519-
2520-
return Object.keys(allSnapshots || {}) as OnyxSnapshotKey[];
2521-
}
2522-
25232513
export {
25242514
getSuggestedSearches,
25252515
getListItem,
@@ -2561,6 +2551,5 @@ export {
25612551
getActionOptions,
25622552
getColumnsToShow,
25632553
getHasOptions,
2564-
getSnapshotKeys,
25652554
};
25662555
export type {SavedSearchMenuItem, SearchTypeMenuSection, SearchTypeMenuItem, SearchDateModifier, SearchDateModifierLower, SearchKey, ArchivedReportsIDSet};

0 commit comments

Comments
 (0)