Skip to content

Commit e243425

Browse files
authored
Merge pull request #38197 from nkdengineer/fix/38141
Add optimistic created action for iou report and create created action for chat report
2 parents 886be54 + 3538559 commit e243425

File tree

3 files changed

+54
-49
lines changed

3 files changed

+54
-49
lines changed

src/libs/API/parameters/SendMoneyParams.ts

+1
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ type SendMoneyParams = {
99
newIOUReportDetails: string;
1010
createdReportActionID: string;
1111
reportPreviewReportActionID: string;
12+
createdIOUReportActionID: string;
1213
transactionThreadReportID: string;
1314
createdReportActionIDForThread: string;
1415
};

src/libs/ReportUtils.ts

+9-7
Original file line numberDiff line numberDiff line change
@@ -4123,10 +4123,11 @@ function buildTransactionThread(reportAction: OnyxEntry<ReportAction | Optimisti
41234123
/**
41244124
* Build optimistic money request entities:
41254125
*
4126-
* 1. CREATED action for the iouReport
4127-
* 2. IOU action for the iouReport linked to the transaction thread via `childReportID`
4128-
* 3. Transaction Thread linked to the IOU action via `parentReportActionID`
4129-
* 4. CREATED action for the Transaction Thread
4126+
* 1. CREATED action for the chatReport
4127+
* 2. CREATED action for the iouReport
4128+
* 3. IOU action for the iouReport linked to the transaction thread via `childReportID`
4129+
* 4. Transaction Thread linked to the IOU action via `parentReportActionID`
4130+
* 5. CREATED action for the Transaction Thread
41304131
*/
41314132
function buildOptimisticMoneyRequestEntities(
41324133
iouReport: Report,
@@ -4142,10 +4143,11 @@ function buildOptimisticMoneyRequestEntities(
41424143
isSendMoneyFlow = false,
41434144
receipt: Receipt = {},
41444145
isOwnPolicyExpenseChat = false,
4145-
): [OptimisticCreatedReportAction, OptimisticIOUReportAction, OptimisticChatReport, OptimisticCreatedReportAction] {
4146-
const iouActionCreationTime = DateUtils.getDBTime();
4146+
): [OptimisticCreatedReportAction, OptimisticCreatedReportAction, OptimisticIOUReportAction, OptimisticChatReport, OptimisticCreatedReportAction] {
4147+
const createdActionForChat = buildOptimisticCreatedReportAction(payeeEmail);
41474148

41484149
// The `CREATED` action must be optimistically generated before the IOU action so that it won't appear after the IOU action in the chat.
4150+
const iouActionCreationTime = DateUtils.getDBTime();
41494151
const createdActionForIOUReport = buildOptimisticCreatedReportAction(payeeEmail, DateUtils.subtractMillisecondsFromDateTime(iouActionCreationTime, 1));
41504152
const iouAction = buildOptimisticIOUReportAction(
41514153
type,
@@ -4170,7 +4172,7 @@ function buildOptimisticMoneyRequestEntities(
41704172
// The IOU action and the transactionThread are co-dependent as parent-child, so we need to link them together
41714173
iouAction.childReportID = transactionThread.reportID;
41724174

4173-
return [createdActionForIOUReport, iouAction, transactionThread, createdActionForTransactionThread];
4175+
return [createdActionForChat, createdActionForIOUReport, iouAction, transactionThread, createdActionForTransactionThread];
41744176
}
41754177

41764178
function isUnread(report: OnyxEntry<Report>): boolean {

src/libs/actions/IOU.ts

+44-42
Original file line numberDiff line numberDiff line change
@@ -1114,22 +1114,22 @@ function getMoneyRequestInformation(
11141114
// 4. The transaction thread, which requires the iouAction, and CREATED action for the transaction thread
11151115
// 5. REPORTPREVIEW action for the chatReport
11161116
// Note: The CREATED action for the IOU report must be optimistically generated before the IOU action so there's no chance that it appears after the IOU action in the chat
1117-
const optimisticCreatedActionForChat = ReportUtils.buildOptimisticCreatedReportAction(payeeEmail);
1118-
const [optimisticCreatedActionForIOUReport, iouAction, optimisticTransactionThread, optimisticCreatedActionForTransactionThread] = ReportUtils.buildOptimisticMoneyRequestEntities(
1119-
iouReport,
1120-
CONST.IOU.REPORT_ACTION_TYPE.CREATE,
1121-
amount,
1122-
currency,
1123-
comment,
1124-
payeeEmail,
1125-
[participant],
1126-
optimisticTransaction.transactionID,
1127-
undefined,
1128-
false,
1129-
false,
1130-
receiptObject,
1131-
false,
1132-
);
1117+
const [optimisticCreatedActionForChat, optimisticCreatedActionForIOUReport, iouAction, optimisticTransactionThread, optimisticCreatedActionForTransactionThread] =
1118+
ReportUtils.buildOptimisticMoneyRequestEntities(
1119+
iouReport,
1120+
CONST.IOU.REPORT_ACTION_TYPE.CREATE,
1121+
amount,
1122+
currency,
1123+
comment,
1124+
payeeEmail,
1125+
[participant],
1126+
optimisticTransaction.transactionID,
1127+
undefined,
1128+
false,
1129+
false,
1130+
receiptObject,
1131+
false,
1132+
);
11331133

11341134
let reportPreviewAction = shouldCreateNewMoneyRequestReport ? null : ReportActionsUtils.getReportPreviewAction(chatReport.reportID, iouReport.reportID);
11351135
if (reportPreviewAction) {
@@ -2522,17 +2522,17 @@ function createSplitsAndOnyxData(
25222522
// 3. IOU action for the iouReport
25232523
// 4. Transaction Thread and the CREATED action for it
25242524
// 5. REPORTPREVIEW action for the chatReport
2525-
const oneOnOneCreatedActionForChat = ReportUtils.buildOptimisticCreatedReportAction(currentUserEmailForIOUSplit);
2526-
const [oneOnOneCreatedActionForIOU, oneOnOneIOUAction, optimisticTransactionThread, optimisticCreatedActionForTransactionThread] = ReportUtils.buildOptimisticMoneyRequestEntities(
2527-
oneOnOneIOUReport,
2528-
CONST.IOU.REPORT_ACTION_TYPE.CREATE,
2529-
splitAmount,
2530-
currency,
2531-
comment,
2532-
currentUserEmailForIOUSplit,
2533-
[participant],
2534-
oneOnOneTransaction.transactionID,
2535-
);
2525+
const [oneOnOneCreatedActionForChat, oneOnOneCreatedActionForIOU, oneOnOneIOUAction, optimisticTransactionThread, optimisticCreatedActionForTransactionThread] =
2526+
ReportUtils.buildOptimisticMoneyRequestEntities(
2527+
oneOnOneIOUReport,
2528+
CONST.IOU.REPORT_ACTION_TYPE.CREATE,
2529+
splitAmount,
2530+
currency,
2531+
comment,
2532+
currentUserEmailForIOUSplit,
2533+
[participant],
2534+
oneOnOneTransaction.transactionID,
2535+
);
25362536

25372537
// Add optimistic personal details for new participants
25382538
const oneOnOnePersonalDetailListAction: OnyxTypes.PersonalDetailsList = shouldCreateOptimisticPersonalDetails
@@ -3173,18 +3173,18 @@ function completeSplitBill(chatReportID: string, reportAction: OnyxTypes.ReportA
31733173
updatedTransaction.billable,
31743174
);
31753175

3176-
const oneOnOneCreatedActionForChat = ReportUtils.buildOptimisticCreatedReportAction(currentUserEmailForIOUSplit);
3177-
const [oneOnOneCreatedActionForIOU, oneOnOneIOUAction, optimisticTransactionThread, optimisticCreatedActionForTransactionThread] = ReportUtils.buildOptimisticMoneyRequestEntities(
3178-
oneOnOneIOUReport,
3179-
CONST.IOU.REPORT_ACTION_TYPE.CREATE,
3180-
splitAmount,
3181-
currency ?? '',
3182-
updatedTransaction.comment.comment ?? '',
3183-
currentUserEmailForIOUSplit,
3184-
[participant],
3185-
oneOnOneTransaction.transactionID,
3186-
undefined,
3187-
);
3176+
const [oneOnOneCreatedActionForChat, oneOnOneCreatedActionForIOU, oneOnOneIOUAction, optimisticTransactionThread, optimisticCreatedActionForTransactionThread] =
3177+
ReportUtils.buildOptimisticMoneyRequestEntities(
3178+
oneOnOneIOUReport,
3179+
CONST.IOU.REPORT_ACTION_TYPE.CREATE,
3180+
splitAmount,
3181+
currency ?? '',
3182+
updatedTransaction.comment.comment ?? '',
3183+
currentUserEmailForIOUSplit,
3184+
[participant],
3185+
oneOnOneTransaction.transactionID,
3186+
undefined,
3187+
);
31883188

31893189
let oneOnOneReportPreviewAction = ReportActionsUtils.getReportPreviewAction(oneOnOneChatReport?.reportID ?? '', oneOnOneIOUReport?.reportID ?? '');
31903190
if (oneOnOneReportPreviewAction) {
@@ -4070,7 +4070,7 @@ function getSendMoneyParams(
40704070
value: optimisticTransaction,
40714071
};
40724072

4073-
const [optimisticCreatedActionForIOUReport, optimisticIOUReportAction, optimisticTransactionThread, optimisticCreatedActionForTransactionThread] =
4073+
const [optimisticCreatedActionForChat, optimisticCreatedActionForIOUReport, optimisticIOUReportAction, optimisticTransactionThread, optimisticCreatedActionForTransactionThread] =
40744074
ReportUtils.buildOptimisticMoneyRequestEntities(
40754075
optimisticIOUReport,
40764076
CONST.IOU.REPORT_ACTION_TYPE.PAY,
@@ -4137,6 +4137,7 @@ function getSendMoneyParams(
41374137
onyxMethod: Onyx.METHOD.MERGE,
41384138
key: `${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${optimisticIOUReport.reportID}`,
41394139
value: {
4140+
[optimisticCreatedActionForIOUReport.reportActionID]: optimisticCreatedActionForIOUReport,
41404141
[optimisticIOUReportAction.reportActionID]: {
41414142
...(optimisticIOUReportAction as OnyxTypes.ReportAction),
41424143
pendingAction: CONST.RED_BRICK_ROAD_PENDING_ACTION.ADD,
@@ -4269,7 +4270,7 @@ function getSendMoneyParams(
42694270

42704271
if (optimisticChatReportActionsData.value) {
42714272
// Add an optimistic created action to the optimistic chat reportActions data
4272-
optimisticChatReportActionsData.value[optimisticCreatedActionForIOUReport.reportActionID] = optimisticCreatedActionForIOUReport;
4273+
optimisticChatReportActionsData.value[optimisticCreatedActionForChat.reportActionID] = optimisticCreatedActionForChat;
42734274
}
42744275
} else {
42754276
failureData.push({
@@ -4306,8 +4307,9 @@ function getSendMoneyParams(
43064307
paymentMethodType,
43074308
transactionID: optimisticTransaction.transactionID,
43084309
newIOUReportDetails,
4309-
createdReportActionID: isNewChat ? optimisticCreatedActionForIOUReport.reportActionID : '0',
4310+
createdReportActionID: isNewChat ? optimisticCreatedActionForChat.reportActionID : '0',
43104311
reportPreviewReportActionID: reportPreviewAction.reportActionID,
4312+
createdIOUReportActionID: optimisticCreatedActionForIOUReport.reportActionID,
43114313
transactionThreadReportID: optimisticTransactionThread.reportID,
43124314
createdReportActionIDForThread: optimisticCreatedActionForTransactionThread.reportActionID,
43134315
},

0 commit comments

Comments
 (0)