diff --git a/src/components/ReportActionItem/MoneyRequestPreview/MoneyRequestPreviewContent.tsx b/src/components/ReportActionItem/MoneyRequestPreview/MoneyRequestPreviewContent.tsx index 4a8a8398744a..62c1ed22b42c 100644 --- a/src/components/ReportActionItem/MoneyRequestPreview/MoneyRequestPreviewContent.tsx +++ b/src/components/ReportActionItem/MoneyRequestPreview/MoneyRequestPreviewContent.tsx @@ -300,7 +300,11 @@ function MoneyRequestPreviewContent({ // Clear the draft before selecting a different expense to prevent merging fields from the previous expense // (e.g., category, tag, tax) that may be not enabled/available in the new expense's policy. Transaction.abandonReviewDuplicateTransactions(); - const comparisonResult = TransactionUtils.compareDuplicateTransactionFields(reviewingTransactionID, transaction?.reportID ?? ''); + const comparisonResult = TransactionUtils.compareDuplicateTransactionFields( + reviewingTransactionID, + transaction?.reportID ?? '', + transaction?.transactionID ?? reviewingTransactionID, + ); Transaction.setReviewDuplicatesKey({...comparisonResult.keep, duplicates, transactionID: transaction?.transactionID ?? '', reportID: transaction?.reportID}); if ('merchant' in comparisonResult.change) { diff --git a/src/libs/TransactionUtils/index.ts b/src/libs/TransactionUtils/index.ts index e7eea51c7755..d9f7d3a9c712 100644 --- a/src/libs/TransactionUtils/index.ts +++ b/src/libs/TransactionUtils/index.ts @@ -1044,10 +1044,10 @@ function removeSettledAndApprovedTransactions(transactionIDs: string[]) { * 6. It returns the 'keep' and 'change' objects. */ -function compareDuplicateTransactionFields(transactionID: string, reportID: string): {keep: Partial; change: FieldsToChange} { - const transactionViolations = allTransactionViolations?.[`${ONYXKEYS.COLLECTION.TRANSACTION_VIOLATIONS}${transactionID}`]; +function compareDuplicateTransactionFields(reviewingTransactionID: string, reportID: string, selectedTransactionID?: string): {keep: Partial; change: FieldsToChange} { + const transactionViolations = allTransactionViolations?.[`${ONYXKEYS.COLLECTION.TRANSACTION_VIOLATIONS}${reviewingTransactionID}`]; const duplicates = transactionViolations?.find((violation) => violation.name === CONST.VIOLATIONS.DUPLICATED_TRANSACTION)?.data?.duplicates ?? []; - const transactions = removeSettledAndApprovedTransactions([transactionID, ...duplicates]).map((item) => getTransaction(item)); + const transactions = removeSettledAndApprovedTransactions([reviewingTransactionID, ...duplicates]).map((item) => getTransaction(item)); // eslint-disable-next-line @typescript-eslint/no-explicit-any const keep: Record = {}; // eslint-disable-next-line @typescript-eslint/no-explicit-any @@ -1100,6 +1100,14 @@ function compareDuplicateTransactionFields(transactionID: string, reportID: stri } } + // The comment object needs to be stored only when selecting a specific transaction to keep. + // It contains details such as 'customUnit' and 'waypoints,' which remain unchanged during the review steps + // but are essential for displaying complete information on the confirmation page. + if (selectedTransactionID) { + const selectedTransaction = transactions.find((t) => t?.transactionID === selectedTransactionID); + keep.comment = selectedTransaction?.comment ?? {}; + } + for (const fieldName in fieldsToCompare) { if (Object.prototype.hasOwnProperty.call(fieldsToCompare, fieldName)) { const keys = fieldsToCompare[fieldName]; @@ -1196,7 +1204,7 @@ function buildNewTransactionAfterReviewingDuplicates(reviewDuplicateTransaction: ...restReviewDuplicateTransaction, modifiedMerchant: reviewDuplicateTransaction?.merchant, merchant: reviewDuplicateTransaction?.merchant, - comment: {comment: reviewDuplicateTransaction?.description}, + comment: {...reviewDuplicateTransaction?.comment, comment: reviewDuplicateTransaction?.description}, }; } diff --git a/src/types/onyx/ReviewDuplicates.ts b/src/types/onyx/ReviewDuplicates.ts index 6c5ccbd93481..721275b198bc 100644 --- a/src/types/onyx/ReviewDuplicates.ts +++ b/src/types/onyx/ReviewDuplicates.ts @@ -1,3 +1,5 @@ +import type {Comment} from './Transaction'; + /** * Model of review duplicates request */ @@ -29,6 +31,9 @@ type ReviewDuplicates = { /** Description which user want to keep */ description: string; + /** NVPs of the transaction that we want to keep */ + comment: Comment; + /** Whether the transaction is reimbursable */ reimbursable: boolean;