Skip to content

Commit 10a3755

Browse files
authored
Merge pull request Expensify#65565 from callstack-internal/VickyStash/bugfix/65252-fix-receipt-delete
[Multi-Scan] Delete the draft transaction when deleting a receipt while creating expenses in bulk with Multi-Scan
2 parents 9bde164 + 8d43bc7 commit 10a3755

2 files changed

Lines changed: 39 additions & 4 deletions

File tree

src/libs/actions/TransactionEdit.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import {format} from 'date-fns';
22
import Onyx from 'react-native-onyx';
3-
import type {Connection, OnyxEntry} from 'react-native-onyx';
3+
import type {Connection, OnyxEntry, OnyxUpdate} from 'react-native-onyx';
44
import {formatCurrentUserToAttendee} from '@libs/IOUUtils';
55
import CONST from '@src/CONST';
66
import ONYXKEYS from '@src/ONYXKEYS';
@@ -112,6 +112,10 @@ function removeDraftTransactions(shouldExcludeInitialTransaction = false) {
112112
return Onyx.multiSet(draftTransactionsSet);
113113
}
114114

115+
function updateDraftTransactions(transactionsUpdates: OnyxUpdate[]) {
116+
Onyx.update(transactionsUpdates);
117+
}
118+
115119
function removeTransactionReceipt(transactionID: string | undefined) {
116120
if (!transactionID) {
117121
return;
@@ -153,5 +157,6 @@ export {
153157
removeTransactionReceipt,
154158
removeDraftTransactions,
155159
removeDraftSplitTransaction,
160+
updateDraftTransactions,
156161
buildOptimisticTransactionAndCreateDraft,
157162
};

src/pages/iou/request/step/IOURequestStepScan/ReceiptViewModal/index.tsx

Lines changed: 33 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import React, {useCallback, useEffect, useState} from 'react';
22
import {InteractionManager} from 'react-native';
3+
import Onyx from 'react-native-onyx';
34
import AttachmentCarouselView from '@components/Attachments/AttachmentCarousel/AttachmentCarouselView';
45
import useCarouselArrows from '@components/Attachments/AttachmentCarousel/useCarouselArrows';
56
import useAttachmentErrors from '@components/Attachments/AttachmentView/useAttachmentErrors';
@@ -12,8 +13,9 @@ import useLocalize from '@hooks/useLocalize';
1213
import useOnyx from '@hooks/useOnyx';
1314
import useThemeStyles from '@hooks/useThemeStyles';
1415
import Navigation from '@libs/Navigation/Navigation';
16+
import {getTransactionOrDraftTransaction} from '@libs/TransactionUtils';
1517
import type {ReceiptFile} from '@pages/iou/request/step/IOURequestStepScan/types';
16-
import {removeTransactionReceipt} from '@userActions/TransactionEdit';
18+
import {removeDraftTransaction, removeTransactionReceipt, updateDraftTransactions} from '@userActions/TransactionEdit';
1719
import CONST from '@src/CONST';
1820
import ONYXKEYS from '@src/ONYXKEYS';
1921
import type {Route} from '@src/ROUTES';
@@ -67,11 +69,39 @@ function ReceiptViewModal({route}: ReceiptViewModalProps) {
6769
}
6870

6971
InteractionManager.runAfterInteractions(() => {
70-
removeTransactionReceipt(currentReceipt.transactionID);
72+
if (currentReceipt.transactionID === CONST.IOU.OPTIMISTIC_TRANSACTION_ID) {
73+
if (receipts.length === 1) {
74+
removeTransactionReceipt(currentReceipt.transactionID);
75+
return;
76+
}
77+
78+
const secondTransactionID = receipts.at(1)?.transactionID;
79+
const secondTransaction = secondTransactionID ? getTransactionOrDraftTransaction(secondTransactionID) : undefined;
80+
81+
if (secondTransaction) {
82+
updateDraftTransactions([
83+
{
84+
onyxMethod: Onyx.METHOD.SET,
85+
key: `${ONYXKEYS.COLLECTION.TRANSACTION_DRAFT}${CONST.IOU.OPTIMISTIC_TRANSACTION_ID}`,
86+
value: {
87+
...secondTransaction,
88+
transactionID: CONST.IOU.OPTIMISTIC_TRANSACTION_ID,
89+
},
90+
},
91+
{
92+
onyxMethod: Onyx.METHOD.MERGE,
93+
key: `${ONYXKEYS.COLLECTION.TRANSACTION_DRAFT}${secondTransactionID}`,
94+
value: null,
95+
},
96+
]);
97+
}
98+
return;
99+
}
100+
removeDraftTransaction(currentReceipt.transactionID);
71101
});
72102

73103
Navigation.goBack();
74-
}, [currentReceipt]);
104+
}, [currentReceipt, receipts]);
75105

76106
const handleCloseConfirmModal = () => {
77107
setIsDeleteReceiptConfirmModalVisible(false);

0 commit comments

Comments
 (0)