From 1faa94b10cd7e42637248ec0045e6d10b49a1cc2 Mon Sep 17 00:00:00 2001 From: Ana Margarida Silva Date: Tue, 13 Jun 2023 15:28:17 +0100 Subject: [PATCH 1/4] fix: send money IOU problem --- src/libs/OptionsListUtils.js | 2 +- src/libs/UserUtils.js | 2 +- src/libs/actions/IOU.js | 20 ++++++++++++++++++++ 3 files changed, 22 insertions(+), 2 deletions(-) diff --git a/src/libs/OptionsListUtils.js b/src/libs/OptionsListUtils.js index 97f6cf8e4a97..c7379656bbb1 100644 --- a/src/libs/OptionsListUtils.js +++ b/src/libs/OptionsListUtils.js @@ -479,7 +479,7 @@ function createOption(accountIDs, personalDetails, report, reportActions = {}, { reportName = ReportUtils.getReportName(report); } else { reportName = ReportUtils.getDisplayNameForParticipant(accountIDs[0]); - result.keyForList = accountIDs[0]; + result.keyForList = String(accountIDs[0]); result.alternateText = ''; } diff --git a/src/libs/UserUtils.js b/src/libs/UserUtils.js index a0e356de8330..4202856c3e75 100644 --- a/src/libs/UserUtils.js +++ b/src/libs/UserUtils.js @@ -213,7 +213,7 @@ function getSmallSizeAvatar(avatarURL, accountID) { * @returns {Number} */ function generateAccountID() { - return (Math.floor(Math.random() * 2 ** 21) * 2 ** 32 + Math.floor(Math.random() * 2 ** 32)); + return Math.floor(Math.random() * 2 ** 21) * 2 ** 32 + Math.floor(Math.random() * 2 ** 32); } export { diff --git a/src/libs/actions/IOU.js b/src/libs/actions/IOU.js index 170734ec72cb..193ee03698bc 100644 --- a/src/libs/actions/IOU.js +++ b/src/libs/actions/IOU.js @@ -15,6 +15,7 @@ import * as OptionsListUtils from '../OptionsListUtils'; import DateUtils from '../DateUtils'; import TransactionUtils from '../TransactionUtils'; import * as ErrorUtils from '../ErrorUtils'; +import * as UserUtils from '../UserUtils'; const chatReports = {}; const iouReports = {}; @@ -937,6 +938,8 @@ function getSendMoneyParams(report, amount, currency, comment, paymentMethodType }, ]; + let optimisticPersonalDetailListData = {}; + // Now, let's add the data we need just when we are creating a new chat report if (isNewChat) { // Change the method to set for new reports because it doesn't exist yet, is faster, @@ -962,6 +965,20 @@ function getSendMoneyParams(report, amount, currency, comment, paymentMethodType }, }); + // Add optimistic personal details for recipient + optimisticPersonalDetailListData = { + onyxMethod: Onyx.METHOD.MERGE, + key: ONYXKEYS.PERSONAL_DETAILS_LIST, + value: { + [recipient.accountID]: { + accountID: recipient.accountID, + avatar: UserUtils.getDefaultAvatarURL(recipient.accountID), + displayName: recipient.displayName || recipient.login, + login: recipient.login, + }, + }, + }; + // Add an optimistic created action to the optimistic reportActions data optimisticReportActionsData.value[optimisticCreatedAction.reportActionID] = optimisticCreatedAction; @@ -970,6 +987,9 @@ function getSendMoneyParams(report, amount, currency, comment, paymentMethodType } const optimisticData = [optimisticChatReportData, optimisticIOUReportData, optimisticReportActionsData, optimisticTransactionData]; + if (!_.isEmpty(optimisticPersonalDetailListData)) { + optimisticData.push(optimisticPersonalDetailListData); + } return { params: { From c840d822d3c6f33380682c132ab1240d62c81306 Mon Sep 17 00:00:00 2001 From: Ana Margarida Silva Date: Tue, 13 Jun 2023 15:52:32 +0100 Subject: [PATCH 2/4] fix: use recipientAccountID --- src/libs/actions/IOU.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/libs/actions/IOU.js b/src/libs/actions/IOU.js index 193ee03698bc..e3b6c9b1bd69 100644 --- a/src/libs/actions/IOU.js +++ b/src/libs/actions/IOU.js @@ -970,8 +970,8 @@ function getSendMoneyParams(report, amount, currency, comment, paymentMethodType onyxMethod: Onyx.METHOD.MERGE, key: ONYXKEYS.PERSONAL_DETAILS_LIST, value: { - [recipient.accountID]: { - accountID: recipient.accountID, + [recipientAccountID]: { + accountID: recipientAccountID, avatar: UserUtils.getDefaultAvatarURL(recipient.accountID), displayName: recipient.displayName || recipient.login, login: recipient.login, From a166ad7d62892d0734d5cd9f6078004a6b5f33a5 Mon Sep 17 00:00:00 2001 From: Ana Margarida Silva Date: Tue, 13 Jun 2023 17:27:40 +0100 Subject: [PATCH 3/4] fix: same fix for request money and split bill --- src/libs/actions/IOU.js | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/src/libs/actions/IOU.js b/src/libs/actions/IOU.js index e3b6c9b1bd69..7a0f698d019c 100644 --- a/src/libs/actions/IOU.js +++ b/src/libs/actions/IOU.js @@ -52,6 +52,7 @@ function buildOnyxDataForMoneyRequest( chatCreatedAction, iouCreatedAction, iouAction, + optimisticPersonalDetailListAction, reportPreviewAction, isNewChatReport, isNewIOUReport, @@ -105,6 +106,14 @@ function buildOnyxDataForMoneyRequest( }, ]; + if (isNewChatReport && !_.isEmpty(optimisticPersonalDetailListAction)) { + optimisticData.push({ + onyxMethod: Onyx.METHOD.MERGE, + key: ONYXKEYS.PERSONAL_DETAILS_LIST, + value: optimisticPersonalDetailListAction, + }); + } + const successData = [ ...(isNewChatReport ? [ @@ -327,6 +336,15 @@ function requestMoney(report, amount, currency, payeeEmail, payeeAccountID, part '', iouReport.reportID, ); + // Add optimistic personal details for participant + const optimisticPersonalDetailListAction = { + [payerAccountID]: { + accountID: payerAccountID, + avatar: UserUtils.getDefaultAvatarURL(payerAccountID), + displayName: participant.displayName || payerEmail, + login: participant.login, + }, + }; let isNewReportPreviewAction = false; let reportPreviewAction = isNewIOUReport ? null : ReportActionsUtils.getReportPreviewAction(chatReport.reportID, iouReport.reportID); @@ -343,6 +361,7 @@ function requestMoney(report, amount, currency, payeeEmail, payeeAccountID, part optimisticCreatedActionForChat, optimisticCreatedActionForIOU, optimisticIOUAction, + optimisticPersonalDetailListAction, reportPreviewAction, isNewChatReport, isNewIOUReport, @@ -564,6 +583,15 @@ function createSplitsAndOnyxData(participants, currentUserLogin, currentUserAcco '', oneOnOneIOUReport.reportID, ); + // Add optimistic personal details for new participants + const oneOnOnePersonalDetailListAction = { + [accountID]: { + accountID, + avatar: UserUtils.getDefaultAvatarURL(accountID), + displayName: participant.displayName || email, + login: participant.login, + }, + }; let isNewOneOnOneReportPreviewAction = false; let oneOnOneReportPreviewAction = ReportActionsUtils.getReportPreviewAction(oneOnOneChatReport.reportID, oneOnOneIOUReport.reportID); @@ -580,6 +608,7 @@ function createSplitsAndOnyxData(participants, currentUserLogin, currentUserAcco oneOnOneCreatedActionForChat, oneOnOneCreatedActionForIOU, oneOnOneIOUAction, + oneOnOnePersonalDetailListAction, oneOnOneReportPreviewAction, isNewOneOnOneChatReport, isNewOneOnOneIOUReport, @@ -1027,6 +1056,12 @@ function getPayMoneyRequestParams(chatReport, iouReport, recipient, paymentMetho iouReport.reportID, true, ); + const optimisticPersonalDetailsListAction = { + accountID: Number(recipient.accountID), + avatar: UserUtils.getDefaultAvatarURL(Number(recipient.accountID)), + displayName: recipient.displayName || recipient.login, + login: recipient.login, + }; const optimisticData = [ { @@ -1073,6 +1108,11 @@ function getPayMoneyRequestParams(chatReport, iouReport, recipient, paymentMetho key: ONYXKEYS.NVP_LAST_PAYMENT_METHOD, value: {[iouReport.policyID]: paymentMethodType}, }, + { + onyxMethod: Onyx.METHOD.MERGE, + key: ONYXKEYS.PERSONAL_DETAILS_LIST, + value: optimisticPersonalDetailsListAction, + }, ]; const successData = [ From b7844c368771ac4d2a8217a6e6602000ad9948f6 Mon Sep 17 00:00:00 2001 From: Ana Margarida Silva Date: Wed, 14 Jun 2023 09:44:35 +0100 Subject: [PATCH 4/4] refactor: newline before comment --- src/libs/actions/IOU.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/libs/actions/IOU.js b/src/libs/actions/IOU.js index 7a0f698d019c..5ccb7b022cea 100644 --- a/src/libs/actions/IOU.js +++ b/src/libs/actions/IOU.js @@ -336,6 +336,7 @@ function requestMoney(report, amount, currency, payeeEmail, payeeAccountID, part '', iouReport.reportID, ); + // Add optimistic personal details for participant const optimisticPersonalDetailListAction = { [payerAccountID]: { @@ -583,6 +584,7 @@ function createSplitsAndOnyxData(participants, currentUserLogin, currentUserAcco '', oneOnOneIOUReport.reportID, ); + // Add optimistic personal details for new participants const oneOnOnePersonalDetailListAction = { [accountID]: {