From 99e1503832a6320fa20aa91827f2d7e269b47793 Mon Sep 17 00:00:00 2001 From: mkzie2 Date: Tue, 24 Dec 2024 11:29:21 +0700 Subject: [PATCH 1/8] refactor buildOptimisticTransaction --- src/libs/TransactionUtils/index.ts | 70 +++++--- src/libs/actions/IOU.ts | 265 ++++++++++++++--------------- tests/actions/IOUTest.ts | 16 +- tests/unit/IOUUtilsTest.ts | 48 +++++- tests/unit/ReportUtilsTest.ts | 8 +- tests/unit/TransactionUtilsTest.ts | 11 +- 6 files changed, 249 insertions(+), 169 deletions(-) diff --git a/src/libs/TransactionUtils/index.ts b/src/libs/TransactionUtils/index.ts index 8bc1dd7356cb..bb938f26a7a2 100644 --- a/src/libs/TransactionUtils/index.ts +++ b/src/libs/TransactionUtils/index.ts @@ -33,6 +33,34 @@ import type DeepValueOf from '@src/types/utils/DeepValueOf'; import {isEmptyObject} from '@src/types/utils/EmptyObject'; import getDistanceInMeters from './getDistanceInMeters'; +type TransactionParams = { + amount: number; + currency: string; + reportID: string; + comment?: string; + attendees?: Attendee[]; + created?: string; + merchant?: string; + receipt?: OnyxEntry; + category?: string; + tag?: string; + taxCode?: string; + taxAmount?: number; + billable?: boolean; + pendingFields?: Partial<{[K in TransactionPendingFieldsKey]: ValueOf}>; + reimbursable?: boolean; +}; + +type BuildOptimisticTransactionParams = { + source?: string; + originalTransactionID?: string; + filename?: string; + existingTransactionID?: string; + existingTransaction?: OnyxEntry; + policy?: OnyxEntry; + transactionParams: TransactionParams; +}; + let allTransactions: OnyxCollection = {}; Onyx.connect({ key: ONYXKEYS.COLLECTION.TRANSACTION, @@ -130,29 +158,25 @@ function isManualRequest(transaction: Transaction): boolean { * @param [existingTransactionID] When creating a distance expense, an empty transaction has already been created with a transactionID. In that case, the transaction here needs to have * it's transactionID match what was already generated. */ -function buildOptimisticTransaction( - amount: number, - currency: string, - reportID: string, - comment = '', - attendees: Attendee[] = [], - created = '', - source = '', - originalTransactionID = '', - merchant = '', - receipt?: OnyxEntry, - filename = '', - existingTransactionID: string | null = null, - category = '', - tag = '', - taxCode = '', - taxAmount = 0, - billable = false, - pendingFields: Partial<{[K in TransactionPendingFieldsKey]: ValueOf}> | undefined = undefined, - reimbursable = true, - existingTransaction: OnyxEntry | undefined = undefined, - policy: OnyxEntry = undefined, -): Transaction { +function buildOptimisticTransaction(params: BuildOptimisticTransactionParams): Transaction { + const {source = '', originalTransactionID = '', existingTransactionID, existingTransaction, filename = '', policy, transactionParams} = params; + const { + amount, + currency, + reportID, + comment = '', + attendees = [], + created = '', + merchant = '', + receipt, + category = '', + tag = '', + taxCode = '', + taxAmount = 0, + billable = false, + pendingFields, + reimbursable = true, + } = transactionParams; // transactionIDs are random, positive, 64-bit numeric strings. // Because JS can only handle 53-bit numbers, transactionIDs are strings in the front-end (just like reportActionID) const transactionID = existingTransactionID ?? NumberUtils.rand64(); diff --git a/src/libs/actions/IOU.ts b/src/libs/actions/IOU.ts index 46da4f283945..134c0890bd46 100644 --- a/src/libs/actions/IOU.ts +++ b/src/libs/actions/IOU.ts @@ -2122,25 +2122,23 @@ function getSendInvoiceInformation( receiptObject.state = receipt.state ?? CONST.IOU.RECEIPT_STATE.SCANREADY; filename = receipt.name; } - const optimisticTransaction = TransactionUtils.buildOptimisticTransaction( - amount, - currency, - optimisticInvoiceReport.reportID, - trimmedComment, - [], - created, - '', - '', - merchant, - receiptObject, + const optimisticTransaction = TransactionUtils.buildOptimisticTransaction({ filename, - undefined, - category, - tag, - taxCode, - taxAmount, - billable, - ); + transactionParams: { + amount, + currency, + reportID: optimisticInvoiceReport.reportID, + comment: trimmedComment, + created, + merchant, + receipt: receiptObject, + category, + tag, + taxCode, + taxAmount, + billable, + }, + }); const optimisticPolicyRecentlyUsedCategories = Category.buildOptimisticPolicyRecentlyUsedCategories(optimisticInvoiceReport.policyID, category); const optimisticPolicyRecentlyUsedTags = Tag.buildOptimisticPolicyRecentlyUsedTags(optimisticInvoiceReport.policyID, tag); @@ -2290,29 +2288,27 @@ function getMoneyRequestInformation(moneyRequestInformation: MoneyRequestInforma // STEP 3: Build an optimistic transaction with the receipt const isDistanceRequest = existingTransaction && existingTransaction.iouRequestType === CONST.IOU.REQUEST_TYPE.DISTANCE; - let optimisticTransaction = TransactionUtils.buildOptimisticTransaction( - ReportUtils.isExpenseReport(iouReport) ? -amount : amount, - currency, - iouReport.reportID, - comment, - attendees, - created, - '', - '', - merchant, - receipt, - '', + let optimisticTransaction = TransactionUtils.buildOptimisticTransaction({ existingTransactionID, - category, - tag, - taxCode, - ReportUtils.isExpenseReport(iouReport) ? -(taxAmount ?? 0) : taxAmount, - billable, - isDistanceRequest ? {waypoints: CONST.RED_BRICK_ROAD_PENDING_ACTION.ADD} : undefined, - undefined, existingTransaction, policy, - ); + transactionParams: { + amount: ReportUtils.isExpenseReport(iouReport) ? -amount : amount, + currency, + reportID: iouReport.reportID, + comment, + attendees, + created, + merchant, + receipt, + category, + tag, + taxCode, + taxAmount: ReportUtils.isExpenseReport(iouReport) ? -(taxAmount ?? 0) : taxAmount, + billable, + pendingFields: isDistanceRequest ? {waypoints: CONST.RED_BRICK_ROAD_PENDING_ACTION.ADD} : undefined, + }, + }); const optimisticPolicyRecentlyUsedCategories = Category.buildOptimisticPolicyRecentlyUsedCategories(iouReport.policyID, category); const optimisticPolicyRecentlyUsedTags = Tag.buildOptimisticPolicyRecentlyUsedTags(iouReport.policyID, tag); @@ -2549,29 +2545,28 @@ function getTrackExpenseInformation( filename = existingTransaction?.filename; } const isDistanceRequest = existingTransaction && existingTransaction.iouRequestType === CONST.IOU.REQUEST_TYPE.DISTANCE; - let optimisticTransaction = TransactionUtils.buildOptimisticTransaction( - ReportUtils.isExpenseReport(iouReport) ? -amount : amount, - currency, - shouldUseMoneyReport && iouReport ? iouReport.reportID : '-1', - comment, - [], - created, - '', - '', - merchant, - receiptObject, + let optimisticTransaction = TransactionUtils.buildOptimisticTransaction({ filename, - existingTransactionID ?? null, - category, - tag, - taxCode, - taxAmount, - billable, - isDistanceRequest ? {waypoints: CONST.RED_BRICK_ROAD_PENDING_ACTION.ADD} : undefined, - false, + existingTransactionID, existingTransaction, policy, - ); + transactionParams: { + amount: ReportUtils.isExpenseReport(iouReport) ? -amount : amount, + currency, + reportID: shouldUseMoneyReport && iouReport ? iouReport.reportID : '-1', + comment, + created, + merchant, + receipt: receiptObject, + category, + tag, + taxCode, + taxAmount, + billable, + pendingFields: isDistanceRequest ? {waypoints: CONST.RED_BRICK_ROAD_PENDING_ACTION.ADD} : undefined, + reimbursable: false, + }, + }); // If there is an existing transaction (which is the case for distance requests), then the data from the existing transaction // needs to be manually merged into the optimistic transaction. This is because buildOnyxDataForMoneyRequest() uses `Onyx.set()` for the transaction @@ -4248,28 +4243,24 @@ function createSplitsAndOnyxData( const existingTransaction = allTransactionDrafts[`${ONYXKEYS.COLLECTION.TRANSACTION_DRAFT}${CONST.IOU.OPTIMISTIC_TRANSACTION_ID}`]; const isDistanceRequest = existingTransaction && existingTransaction.iouRequestType === CONST.IOU.REQUEST_TYPE.DISTANCE; - let splitTransaction = TransactionUtils.buildOptimisticTransaction( - amount, - currency, - CONST.REPORT.SPLIT_REPORTID, - comment, - [], - created, - '', - '', - merchant || Localize.translateLocal('iou.expense'), - receipt, - undefined, - undefined, - category, - tag, - taxCode, - taxAmount, - billable, - isDistanceRequest ? {waypoints: CONST.RED_BRICK_ROAD_PENDING_ACTION.ADD} : undefined, - undefined, + let splitTransaction = TransactionUtils.buildOptimisticTransaction({ existingTransaction, - ); + transactionParams: { + amount, + currency, + reportID: CONST.REPORT.SPLIT_REPORTID, + comment, + created, + merchant: merchant || Localize.translateLocal('iou.expense'), + receipt, + category, + tag, + taxCode, + taxAmount, + billable, + pendingFields: isDistanceRequest ? {waypoints: CONST.RED_BRICK_ROAD_PENDING_ACTION.ADD} : undefined, + }, + }); // Important data is set on the draft distance transaction, such as the iouRequestType marking it as a distance request, so merge it into the optimistic split transaction if (isDistanceRequest) { @@ -4492,25 +4483,23 @@ function createSplitsAndOnyxData( } // STEP 3: Build optimistic transaction - const oneOnOneTransaction = TransactionUtils.buildOptimisticTransaction( - ReportUtils.isExpenseReport(oneOnOneIOUReport) ? -splitAmount : splitAmount, - currency, - oneOnOneIOUReport.reportID, - comment, - [], - created, - CONST.IOU.TYPE.SPLIT, - splitTransaction.transactionID, - merchant || Localize.translateLocal('iou.expense'), - undefined, - undefined, - undefined, - category, - tag, - taxCode, - ReportUtils.isExpenseReport(oneOnOneIOUReport) ? -splitTaxAmount : splitTaxAmount, - billable, - ); + const oneOnOneTransaction = TransactionUtils.buildOptimisticTransaction({ + source: CONST.IOU.TYPE.SPLIT, + originalTransactionID: splitTransaction.transactionID, + transactionParams: { + amount: ReportUtils.isExpenseReport(oneOnOneIOUReport) ? -splitAmount : splitAmount, + currency, + reportID: oneOnOneIOUReport.reportID, + comment, + created, + merchant: merchant || Localize.translateLocal('iou.expense'), + category, + tag, + taxCode, + taxAmount: ReportUtils.isExpenseReport(oneOnOneIOUReport) ? -splitTaxAmount : splitTaxAmount, + billable, + }, + }); // STEP 4: Build optimistic reportActions. We need: // 1. CREATED action for the chatReport @@ -4847,25 +4836,22 @@ function startSplitBill({ const receiptObject: Receipt = {state, source}; // ReportID is -2 (aka "deleted") on the group transaction - const splitTransaction = TransactionUtils.buildOptimisticTransaction( - 0, - currency, - CONST.REPORT.SPLIT_REPORTID, - comment, - [], - '', - '', - '', - CONST.TRANSACTION.PARTIAL_TRANSACTION_MERCHANT, - receiptObject, + const splitTransaction = TransactionUtils.buildOptimisticTransaction({ filename, - undefined, - category, - tag, - taxCode, - taxAmount, - billable, - ); + transactionParams: { + amount: 0, + currency, + reportID: CONST.REPORT.SPLIT_REPORTID, + comment, + merchant: CONST.TRANSACTION.PARTIAL_TRANSACTION_MERCHANT, + receipt: receiptObject, + category, + tag, + taxCode, + taxAmount, + billable, + }, + }); // Note: The created action must be optimistically generated before the IOU action so there's no chance that the created action appears after the IOU action in the chat const splitChatCreatedReportAction = ReportUtils.buildOptimisticCreatedReportAction(currentUserEmailForIOUSplit); @@ -5258,25 +5244,25 @@ function completeSplitBill(chatReportID: string, reportAction: OnyxTypes.ReportA oneOnOneIOUReport = IOUUtils.updateIOUOwnerAndTotal(oneOnOneIOUReport, sessionAccountID, splitAmount, currency ?? ''); } - const oneOnOneTransaction = TransactionUtils.buildOptimisticTransaction( - isPolicyExpenseChat ? -splitAmount : splitAmount, - currency ?? '', - oneOnOneIOUReport?.reportID ?? '-1', - updatedTransaction?.comment?.comment, - [], - updatedTransaction?.modifiedCreated, - CONST.IOU.TYPE.SPLIT, - transactionID, - updatedTransaction?.modifiedMerchant, - {...updatedTransaction?.receipt, state: CONST.IOU.RECEIPT_STATE.OPEN}, - updatedTransaction?.filename, - undefined, - updatedTransaction?.category, - updatedTransaction?.tag, - updatedTransaction?.taxCode, - isPolicyExpenseChat ? -splitTaxAmount : splitAmount, - updatedTransaction?.billable, - ); + const oneOnOneTransaction = TransactionUtils.buildOptimisticTransaction({ + source: CONST.IOU.TYPE.SPLIT, + originalTransactionID: transactionID, + filename: updatedTransaction?.filename, + transactionParams: { + amount: isPolicyExpenseChat ? -splitAmount : splitAmount, + currency: currency ?? '', + reportID: oneOnOneIOUReport?.reportID ?? '-1', + comment: updatedTransaction?.comment?.comment, + created: updatedTransaction?.modifiedCreated, + merchant: updatedTransaction?.modifiedMerchant, + receipt: {...updatedTransaction?.receipt, state: CONST.IOU.RECEIPT_STATE.OPEN}, + category: updatedTransaction?.category, + tag: updatedTransaction?.tag, + taxCode: updatedTransaction?.taxCode, + taxAmount: isPolicyExpenseChat ? -splitTaxAmount : splitAmount, + billable: updatedTransaction?.billable, + }, + }); const [oneOnOneCreatedActionForChat, oneOnOneCreatedActionForIOU, oneOnOneIOUAction, optimisticTransactionThread, optimisticCreatedActionForTransactionThread] = ReportUtils.buildOptimisticMoneyRequestEntities( @@ -6269,7 +6255,14 @@ function getSendMoneyParams( } const optimisticIOUReport = ReportUtils.buildOptimisticIOUReport(recipientAccountID, managerID, amount, chatReport.reportID, currency, true); - const optimisticTransaction = TransactionUtils.buildOptimisticTransaction(amount, currency, optimisticIOUReport.reportID, comment); + const optimisticTransaction = TransactionUtils.buildOptimisticTransaction({ + transactionParams: { + amount, + currency, + reportID: optimisticIOUReport.reportID, + comment, + }, + }); const optimisticTransactionData: OnyxUpdate = { onyxMethod: Onyx.METHOD.SET, key: `${ONYXKEYS.COLLECTION.TRANSACTION}${optimisticTransaction.transactionID}`, diff --git a/tests/actions/IOUTest.ts b/tests/actions/IOUTest.ts index 49e1150f1a57..25f5ecfbf950 100644 --- a/tests/actions/IOUTest.ts +++ b/tests/actions/IOUTest.ts @@ -3407,8 +3407,20 @@ describe('actions/IOU', () => { test('Resolving duplicates of two transaction by keeping one of them should properly set the other one on hold even if the transaction thread reports do not exist in onyx', () => { // Given two duplicate transactions const iouReport = ReportUtils.buildOptimisticIOUReport(1, 2, 100, '1', 'USD'); - const transaction1 = TransactionUtils.buildOptimisticTransaction(100, 'USD', iouReport.reportID); - const transaction2 = TransactionUtils.buildOptimisticTransaction(100, 'USD', iouReport.reportID); + const transaction1 = TransactionUtils.buildOptimisticTransaction({ + transactionParams: { + amount: 100, + currency: 'USD', + reportID: iouReport.reportID, + }, + }); + const transaction2 = TransactionUtils.buildOptimisticTransaction({ + transactionParams: { + amount: 100, + currency: 'USD', + reportID: iouReport.reportID, + }, + }); const transactionCollectionDataSet: TransactionCollectionDataSet = { [`${ONYXKEYS.COLLECTION.TRANSACTION}${transaction1.transactionID}`]: transaction1, [`${ONYXKEYS.COLLECTION.TRANSACTION}${transaction2.transactionID}`]: transaction2, diff --git a/tests/unit/IOUUtilsTest.ts b/tests/unit/IOUUtilsTest.ts index 7031045e3f05..6eb96b57c804 100644 --- a/tests/unit/IOUUtilsTest.ts +++ b/tests/unit/IOUUtilsTest.ts @@ -28,8 +28,20 @@ describe('IOUUtils', () => { test('Submitting an expense offline in a different currency will show the pending conversion message', () => { const iouReport = ReportUtils.buildOptimisticIOUReport(1, 2, 100, '1', 'USD'); - const usdPendingTransaction = TransactionUtils.buildOptimisticTransaction(100, 'USD', iouReport.reportID); - const aedPendingTransaction = TransactionUtils.buildOptimisticTransaction(100, 'AED', iouReport.reportID); + const usdPendingTransaction = TransactionUtils.buildOptimisticTransaction({ + transactionParams: { + amount: 100, + currency: 'USD', + reportID: iouReport.reportID, + }, + }); + const aedPendingTransaction = TransactionUtils.buildOptimisticTransaction({ + transactionParams: { + amount: 100, + currency: 'AED', + reportID: iouReport.reportID, + }, + }); const MergeQueries: TransactionCollectionDataSet = {}; MergeQueries[`${ONYXKEYS.COLLECTION.TRANSACTION}${usdPendingTransaction.transactionID}`] = usdPendingTransaction; MergeQueries[`${ONYXKEYS.COLLECTION.TRANSACTION}${aedPendingTransaction.transactionID}`] = aedPendingTransaction; @@ -42,8 +54,20 @@ describe('IOUUtils', () => { test('Submitting an expense online in a different currency will not show the pending conversion message', () => { const iouReport = ReportUtils.buildOptimisticIOUReport(2, 3, 100, '1', 'USD'); - const usdPendingTransaction = TransactionUtils.buildOptimisticTransaction(100, 'USD', iouReport.reportID); - const aedPendingTransaction = TransactionUtils.buildOptimisticTransaction(100, 'AED', iouReport.reportID); + const usdPendingTransaction = TransactionUtils.buildOptimisticTransaction({ + transactionParams: { + amount: 100, + currency: 'USD', + reportID: iouReport.reportID, + }, + }); + const aedPendingTransaction = TransactionUtils.buildOptimisticTransaction({ + transactionParams: { + amount: 100, + currency: 'AED', + reportID: iouReport.reportID, + }, + }); const MergeQueries: TransactionCollectionDataSet = {}; MergeQueries[`${ONYXKEYS.COLLECTION.TRANSACTION}${usdPendingTransaction.transactionID}`] = { @@ -150,14 +174,26 @@ describe('isValidMoneyRequestType', () => { describe('Check valid amount for IOU/Expense request', () => { test('IOU amount should be positive', () => { const iouReport = ReportUtils.buildOptimisticIOUReport(1, 2, 100, '1', 'USD'); - const iouTransaction = TransactionUtils.buildOptimisticTransaction(100, 'USD', iouReport.reportID); + const iouTransaction = TransactionUtils.buildOptimisticTransaction({ + transactionParams: { + amount: 100, + currency: 'USD', + reportID: iouReport.reportID, + }, + }); const iouAmount = TransactionUtils.getAmount(iouTransaction, false, false); expect(iouAmount).toBeGreaterThan(0); }); test('Expense amount should be negative', () => { const expenseReport = ReportUtils.buildOptimisticExpenseReport('212', '123', 100, 122, 'USD'); - const expenseTransaction = TransactionUtils.buildOptimisticTransaction(100, 'USD', expenseReport.reportID); + const expenseTransaction = TransactionUtils.buildOptimisticTransaction({ + transactionParams: { + amount: 100, + currency: 'USD', + reportID: expenseReport.reportID, + }, + }); const expenseAmount = TransactionUtils.getAmount(expenseTransaction, true, false); expect(expenseAmount).toBeLessThan(0); }); diff --git a/tests/unit/ReportUtilsTest.ts b/tests/unit/ReportUtilsTest.ts index e1eda3171355..5cbe0f3e4546 100644 --- a/tests/unit/ReportUtilsTest.ts +++ b/tests/unit/ReportUtilsTest.ts @@ -1215,7 +1215,13 @@ describe('ReportUtils', () => { it('should return true when the report has outstanding violations', async () => { const expenseReport = ReportUtils.buildOptimisticExpenseReport('212', '123', 100, 122, 'USD'); - const expenseTransaction = TransactionUtils.buildOptimisticTransaction(100, 'USD', expenseReport.reportID); + const expenseTransaction = TransactionUtils.buildOptimisticTransaction({ + transactionParams: { + amount: 100, + currency: 'USD', + reportID: expenseReport.reportID, + }, + }); const expenseCreatedAction1 = ReportUtils.buildOptimisticIOUReportAction( 'create', 100, diff --git a/tests/unit/TransactionUtilsTest.ts b/tests/unit/TransactionUtilsTest.ts index a6c847e5f7f4..293ff589eedb 100644 --- a/tests/unit/TransactionUtilsTest.ts +++ b/tests/unit/TransactionUtilsTest.ts @@ -11,7 +11,16 @@ function generateTransaction(values: Partial = {}): Transaction { const comment = ''; const attendees: Attendee[] = []; const created = '2023-10-01'; - const baseValues = TransactionUtils.buildOptimisticTransaction(amount, currency, reportID, comment, attendees, created); + const baseValues = TransactionUtils.buildOptimisticTransaction({ + transactionParams: { + amount, + currency, + reportID, + comment, + attendees, + created, + }, + }); return {...baseValues, ...values}; } From 7db66953173ffa3a46c24423767b902bc5992faf Mon Sep 17 00:00:00 2001 From: mkzie2 Date: Thu, 26 Dec 2024 15:03:56 +0700 Subject: [PATCH 2/8] fix lint --- tests/unit/ReportUtilsTest.ts | 30 +++++++++++++++++++++--------- 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/tests/unit/ReportUtilsTest.ts b/tests/unit/ReportUtilsTest.ts index 5cbe0f3e4546..8b69f8da028a 100644 --- a/tests/unit/ReportUtilsTest.ts +++ b/tests/unit/ReportUtilsTest.ts @@ -545,7 +545,10 @@ describe('ReportUtils', () => { parentReportID: '101', policyID: paidPolicy.id, }; - const moneyRequestOptions = ReportUtils.temporary_getMoneyRequestOptions(report, paidPolicy, [currentUserAccountID, participantsAccountIDs.at(0) ?? -1]); + const moneyRequestOptions = ReportUtils.temporary_getMoneyRequestOptions(report, paidPolicy, [ + currentUserAccountID, + participantsAccountIDs.at(0) ?? CONST.DEFAULT_NUMBER_ID, + ]); expect(moneyRequestOptions.length).toBe(0); }); }); @@ -558,7 +561,10 @@ describe('ReportUtils', () => { ...LHNTestUtils.getFakeReport(), chatType, }; - const moneyRequestOptions = ReportUtils.temporary_getMoneyRequestOptions(report, undefined, [currentUserAccountID, participantsAccountIDs.at(0) ?? -1]); + const moneyRequestOptions = ReportUtils.temporary_getMoneyRequestOptions(report, undefined, [ + currentUserAccountID, + participantsAccountIDs.at(0) ?? CONST.DEFAULT_NUMBER_ID, + ]); return moneyRequestOptions.length === 1 && moneyRequestOptions.includes(CONST.IOU.TYPE.SPLIT); }); expect(onlyHaveSplitOption).toBe(true); @@ -605,7 +611,7 @@ describe('ReportUtils', () => { statusNum: CONST.REPORT.STATUS_NUM.SUBMITTED, managerID: currentUserAccountID, }; - const moneyRequestOptions = ReportUtils.temporary_getMoneyRequestOptions(report, undefined, [currentUserAccountID, participantsAccountIDs.at(0) ?? -1]); + const moneyRequestOptions = ReportUtils.temporary_getMoneyRequestOptions(report, undefined, [currentUserAccountID, participantsAccountIDs.at(0) ?? CONST.DEFAULT_NUMBER_ID]); expect(moneyRequestOptions.length).toBe(1); expect(moneyRequestOptions.includes(CONST.IOU.TYPE.SUBMIT)).toBe(true); }); @@ -618,7 +624,7 @@ describe('ReportUtils', () => { statusNum: CONST.REPORT.STATUS_NUM.SUBMITTED, managerID: currentUserAccountID, }; - const moneyRequestOptions = ReportUtils.temporary_getMoneyRequestOptions(report, undefined, [currentUserAccountID, participantsAccountIDs.at(0) ?? -1]); + const moneyRequestOptions = ReportUtils.temporary_getMoneyRequestOptions(report, undefined, [currentUserAccountID, participantsAccountIDs.at(0) ?? CONST.DEFAULT_NUMBER_ID]); expect(moneyRequestOptions.length).toBe(1); expect(moneyRequestOptions.includes(CONST.IOU.TYPE.SUBMIT)).toBe(true); }); @@ -667,7 +673,10 @@ describe('ReportUtils', () => { outputCurrency: '', isPolicyExpenseChatEnabled: false, } as const; - const moneyRequestOptions = ReportUtils.temporary_getMoneyRequestOptions(report, paidPolicy, [currentUserAccountID, participantsAccountIDs.at(0) ?? -1]); + const moneyRequestOptions = ReportUtils.temporary_getMoneyRequestOptions(report, paidPolicy, [ + currentUserAccountID, + participantsAccountIDs.at(0) ?? CONST.DEFAULT_NUMBER_ID, + ]); expect(moneyRequestOptions.length).toBe(2); expect(moneyRequestOptions.includes(CONST.IOU.TYPE.SUBMIT)).toBe(true); expect(moneyRequestOptions.includes(CONST.IOU.TYPE.TRACK)).toBe(true); @@ -682,7 +691,7 @@ describe('ReportUtils', () => { statusNum: CONST.REPORT.STATUS_NUM.SUBMITTED, managerID: currentUserAccountID, }; - const moneyRequestOptions = ReportUtils.temporary_getMoneyRequestOptions(report, undefined, [currentUserAccountID, participantsAccountIDs.at(0) ?? -1]); + const moneyRequestOptions = ReportUtils.temporary_getMoneyRequestOptions(report, undefined, [currentUserAccountID, participantsAccountIDs.at(0) ?? CONST.DEFAULT_NUMBER_ID]); expect(moneyRequestOptions.length).toBe(1); expect(moneyRequestOptions.includes(CONST.IOU.TYPE.SUBMIT)).toBe(true); }); @@ -695,7 +704,7 @@ describe('ReportUtils', () => { statusNum: CONST.REPORT.STATUS_NUM.SUBMITTED, managerID: currentUserAccountID, }; - const moneyRequestOptions = ReportUtils.temporary_getMoneyRequestOptions(report, undefined, [currentUserAccountID, participantsAccountIDs.at(0) ?? -1]); + const moneyRequestOptions = ReportUtils.temporary_getMoneyRequestOptions(report, undefined, [currentUserAccountID, participantsAccountIDs.at(0) ?? CONST.DEFAULT_NUMBER_ID]); expect(moneyRequestOptions.length).toBe(1); expect(moneyRequestOptions.includes(CONST.IOU.TYPE.SUBMIT)).toBe(true); }); @@ -738,7 +747,10 @@ describe('ReportUtils', () => { managerID: currentUserAccountID, ownerAccountID: currentUserAccountID, }; - const moneyRequestOptions = ReportUtils.temporary_getMoneyRequestOptions(report, paidPolicy, [currentUserAccountID, participantsAccountIDs.at(0) ?? -1]); + const moneyRequestOptions = ReportUtils.temporary_getMoneyRequestOptions(report, paidPolicy, [ + currentUserAccountID, + participantsAccountIDs.at(0) ?? CONST.DEFAULT_NUMBER_ID, + ]); expect(moneyRequestOptions.length).toBe(2); expect(moneyRequestOptions.includes(CONST.IOU.TYPE.SUBMIT)).toBe(true); expect(moneyRequestOptions.includes(CONST.IOU.TYPE.TRACK)).toBe(true); @@ -752,7 +764,7 @@ describe('ReportUtils', () => { ...LHNTestUtils.getFakeReport(), type: CONST.REPORT.TYPE.CHAT, }; - const moneyRequestOptions = ReportUtils.temporary_getMoneyRequestOptions(report, undefined, [currentUserAccountID, participantsAccountIDs.at(0) ?? -1]); + const moneyRequestOptions = ReportUtils.temporary_getMoneyRequestOptions(report, undefined, [currentUserAccountID, participantsAccountIDs.at(0) ?? CONST.DEFAULT_NUMBER_ID]); expect(moneyRequestOptions.length).toBe(3); expect(moneyRequestOptions.includes(CONST.IOU.TYPE.SPLIT)).toBe(true); expect(moneyRequestOptions.includes(CONST.IOU.TYPE.SUBMIT)).toBe(true); From 07660f1c797837e015e22cf0a3bf6f737f56f988 Mon Sep 17 00:00:00 2001 From: mkzie2 Date: Thu, 26 Dec 2024 15:06:43 +0700 Subject: [PATCH 3/8] remove empty string --- tests/unit/ReportUtilsTest.ts | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/tests/unit/ReportUtilsTest.ts b/tests/unit/ReportUtilsTest.ts index 8b69f8da028a..c42c85d6a623 100644 --- a/tests/unit/ReportUtilsTest.ts +++ b/tests/unit/ReportUtilsTest.ts @@ -563,7 +563,7 @@ describe('ReportUtils', () => { }; const moneyRequestOptions = ReportUtils.temporary_getMoneyRequestOptions(report, undefined, [ currentUserAccountID, - participantsAccountIDs.at(0) ?? CONST.DEFAULT_NUMBER_ID, + participantsAccountIDs.at(0) CONST.DEFAULT_NUMBER_ID, ]); return moneyRequestOptions.length === 1 && moneyRequestOptions.includes(CONST.IOU.TYPE.SPLIT); }); @@ -611,7 +611,7 @@ describe('ReportUtils', () => { statusNum: CONST.REPORT.STATUS_NUM.SUBMITTED, managerID: currentUserAccountID, }; - const moneyRequestOptions = ReportUtils.temporary_getMoneyRequestOptions(report, undefined, [currentUserAccountID, participantsAccountIDs.at(0) ?? CONST.DEFAULT_NUMBER_ID]); + const moneyRequestOptions = ReportUtils.temporary_getMoneyRequestOptions(report, undefined, [currentUserAccountID, participantsAccountIDs.at(0) CONST.DEFAULT_NUMBER_ID]); expect(moneyRequestOptions.length).toBe(1); expect(moneyRequestOptions.includes(CONST.IOU.TYPE.SUBMIT)).toBe(true); }); @@ -624,7 +624,7 @@ describe('ReportUtils', () => { statusNum: CONST.REPORT.STATUS_NUM.SUBMITTED, managerID: currentUserAccountID, }; - const moneyRequestOptions = ReportUtils.temporary_getMoneyRequestOptions(report, undefined, [currentUserAccountID, participantsAccountIDs.at(0) ?? CONST.DEFAULT_NUMBER_ID]); + const moneyRequestOptions = ReportUtils.temporary_getMoneyRequestOptions(report, undefined, [currentUserAccountID, participantsAccountIDs.at(0) CONST.DEFAULT_NUMBER_ID]); expect(moneyRequestOptions.length).toBe(1); expect(moneyRequestOptions.includes(CONST.IOU.TYPE.SUBMIT)).toBe(true); }); @@ -675,7 +675,7 @@ describe('ReportUtils', () => { } as const; const moneyRequestOptions = ReportUtils.temporary_getMoneyRequestOptions(report, paidPolicy, [ currentUserAccountID, - participantsAccountIDs.at(0) ?? CONST.DEFAULT_NUMBER_ID, + participantsAccountIDs.at(0) CONST.DEFAULT_NUMBER_ID, ]); expect(moneyRequestOptions.length).toBe(2); expect(moneyRequestOptions.includes(CONST.IOU.TYPE.SUBMIT)).toBe(true); @@ -691,7 +691,7 @@ describe('ReportUtils', () => { statusNum: CONST.REPORT.STATUS_NUM.SUBMITTED, managerID: currentUserAccountID, }; - const moneyRequestOptions = ReportUtils.temporary_getMoneyRequestOptions(report, undefined, [currentUserAccountID, participantsAccountIDs.at(0) ?? CONST.DEFAULT_NUMBER_ID]); + const moneyRequestOptions = ReportUtils.temporary_getMoneyRequestOptions(report, undefined, [currentUserAccountID, participantsAccountIDs.at(0) CONST.DEFAULT_NUMBER_ID]); expect(moneyRequestOptions.length).toBe(1); expect(moneyRequestOptions.includes(CONST.IOU.TYPE.SUBMIT)).toBe(true); }); @@ -704,7 +704,7 @@ describe('ReportUtils', () => { statusNum: CONST.REPORT.STATUS_NUM.SUBMITTED, managerID: currentUserAccountID, }; - const moneyRequestOptions = ReportUtils.temporary_getMoneyRequestOptions(report, undefined, [currentUserAccountID, participantsAccountIDs.at(0) ?? CONST.DEFAULT_NUMBER_ID]); + const moneyRequestOptions = ReportUtils.temporary_getMoneyRequestOptions(report, undefined, [currentUserAccountID, participantsAccountIDs.at(0) CONST.DEFAULT_NUMBER_ID]); expect(moneyRequestOptions.length).toBe(1); expect(moneyRequestOptions.includes(CONST.IOU.TYPE.SUBMIT)).toBe(true); }); @@ -749,7 +749,7 @@ describe('ReportUtils', () => { }; const moneyRequestOptions = ReportUtils.temporary_getMoneyRequestOptions(report, paidPolicy, [ currentUserAccountID, - participantsAccountIDs.at(0) ?? CONST.DEFAULT_NUMBER_ID, + participantsAccountIDs.at(0) CONST.DEFAULT_NUMBER_ID, ]); expect(moneyRequestOptions.length).toBe(2); expect(moneyRequestOptions.includes(CONST.IOU.TYPE.SUBMIT)).toBe(true); @@ -764,7 +764,7 @@ describe('ReportUtils', () => { ...LHNTestUtils.getFakeReport(), type: CONST.REPORT.TYPE.CHAT, }; - const moneyRequestOptions = ReportUtils.temporary_getMoneyRequestOptions(report, undefined, [currentUserAccountID, participantsAccountIDs.at(0) ?? CONST.DEFAULT_NUMBER_ID]); + const moneyRequestOptions = ReportUtils.temporary_getMoneyRequestOptions(report, undefined, [currentUserAccountID, participantsAccountIDs.at(0) CONST.DEFAULT_NUMBER_ID]); expect(moneyRequestOptions.length).toBe(3); expect(moneyRequestOptions.includes(CONST.IOU.TYPE.SPLIT)).toBe(true); expect(moneyRequestOptions.includes(CONST.IOU.TYPE.SUBMIT)).toBe(true); @@ -914,7 +914,7 @@ describe('ReportUtils', () => { const reportActionCollectionDataSet = toCollectionDataSet( ONYXKEYS.COLLECTION.REPORT_ACTIONS, reportActions.map((reportAction) => ({[reportAction.reportActionID]: reportAction})), - (actions) => Object.values(actions).at(0)?.reportActionID ?? '', + (actions) => Object.values(actions).at(0)?.reportActionID, ); Onyx.multiSet({ ...reportCollectionDataSet, From d44c9c8bf27d1ac17ffc37a34af03328c5fc574a Mon Sep 17 00:00:00 2001 From: mkzie2 Date: Thu, 26 Dec 2024 15:19:51 +0700 Subject: [PATCH 4/8] fix error --- tests/unit/ReportUtilsTest.ts | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/tests/unit/ReportUtilsTest.ts b/tests/unit/ReportUtilsTest.ts index c42c85d6a623..986bd7811f5a 100644 --- a/tests/unit/ReportUtilsTest.ts +++ b/tests/unit/ReportUtilsTest.ts @@ -563,7 +563,7 @@ describe('ReportUtils', () => { }; const moneyRequestOptions = ReportUtils.temporary_getMoneyRequestOptions(report, undefined, [ currentUserAccountID, - participantsAccountIDs.at(0) CONST.DEFAULT_NUMBER_ID, + participantsAccountIDs.at(0) ?? CONST.DEFAULT_NUMBER_ID, ]); return moneyRequestOptions.length === 1 && moneyRequestOptions.includes(CONST.IOU.TYPE.SPLIT); }); @@ -611,7 +611,7 @@ describe('ReportUtils', () => { statusNum: CONST.REPORT.STATUS_NUM.SUBMITTED, managerID: currentUserAccountID, }; - const moneyRequestOptions = ReportUtils.temporary_getMoneyRequestOptions(report, undefined, [currentUserAccountID, participantsAccountIDs.at(0) CONST.DEFAULT_NUMBER_ID]); + const moneyRequestOptions = ReportUtils.temporary_getMoneyRequestOptions(report, undefined, [currentUserAccountID, participantsAccountIDs.at(0) ?? CONST.DEFAULT_NUMBER_ID]); expect(moneyRequestOptions.length).toBe(1); expect(moneyRequestOptions.includes(CONST.IOU.TYPE.SUBMIT)).toBe(true); }); @@ -624,7 +624,7 @@ describe('ReportUtils', () => { statusNum: CONST.REPORT.STATUS_NUM.SUBMITTED, managerID: currentUserAccountID, }; - const moneyRequestOptions = ReportUtils.temporary_getMoneyRequestOptions(report, undefined, [currentUserAccountID, participantsAccountIDs.at(0) CONST.DEFAULT_NUMBER_ID]); + const moneyRequestOptions = ReportUtils.temporary_getMoneyRequestOptions(report, undefined, [currentUserAccountID, participantsAccountIDs.at(0) ?? CONST.DEFAULT_NUMBER_ID]); expect(moneyRequestOptions.length).toBe(1); expect(moneyRequestOptions.includes(CONST.IOU.TYPE.SUBMIT)).toBe(true); }); @@ -675,7 +675,7 @@ describe('ReportUtils', () => { } as const; const moneyRequestOptions = ReportUtils.temporary_getMoneyRequestOptions(report, paidPolicy, [ currentUserAccountID, - participantsAccountIDs.at(0) CONST.DEFAULT_NUMBER_ID, + participantsAccountIDs.at(0) ?? CONST.DEFAULT_NUMBER_ID, ]); expect(moneyRequestOptions.length).toBe(2); expect(moneyRequestOptions.includes(CONST.IOU.TYPE.SUBMIT)).toBe(true); @@ -691,7 +691,7 @@ describe('ReportUtils', () => { statusNum: CONST.REPORT.STATUS_NUM.SUBMITTED, managerID: currentUserAccountID, }; - const moneyRequestOptions = ReportUtils.temporary_getMoneyRequestOptions(report, undefined, [currentUserAccountID, participantsAccountIDs.at(0) CONST.DEFAULT_NUMBER_ID]); + const moneyRequestOptions = ReportUtils.temporary_getMoneyRequestOptions(report, undefined, [currentUserAccountID, participantsAccountIDs.at(0) ?? CONST.DEFAULT_NUMBER_ID]); expect(moneyRequestOptions.length).toBe(1); expect(moneyRequestOptions.includes(CONST.IOU.TYPE.SUBMIT)).toBe(true); }); @@ -704,7 +704,7 @@ describe('ReportUtils', () => { statusNum: CONST.REPORT.STATUS_NUM.SUBMITTED, managerID: currentUserAccountID, }; - const moneyRequestOptions = ReportUtils.temporary_getMoneyRequestOptions(report, undefined, [currentUserAccountID, participantsAccountIDs.at(0) CONST.DEFAULT_NUMBER_ID]); + const moneyRequestOptions = ReportUtils.temporary_getMoneyRequestOptions(report, undefined, [currentUserAccountID, participantsAccountIDs.at(0) ?? CONST.DEFAULT_NUMBER_ID]); expect(moneyRequestOptions.length).toBe(1); expect(moneyRequestOptions.includes(CONST.IOU.TYPE.SUBMIT)).toBe(true); }); @@ -749,7 +749,7 @@ describe('ReportUtils', () => { }; const moneyRequestOptions = ReportUtils.temporary_getMoneyRequestOptions(report, paidPolicy, [ currentUserAccountID, - participantsAccountIDs.at(0) CONST.DEFAULT_NUMBER_ID, + participantsAccountIDs.at(0) ?? CONST.DEFAULT_NUMBER_ID, ]); expect(moneyRequestOptions.length).toBe(2); expect(moneyRequestOptions.includes(CONST.IOU.TYPE.SUBMIT)).toBe(true); @@ -764,7 +764,7 @@ describe('ReportUtils', () => { ...LHNTestUtils.getFakeReport(), type: CONST.REPORT.TYPE.CHAT, }; - const moneyRequestOptions = ReportUtils.temporary_getMoneyRequestOptions(report, undefined, [currentUserAccountID, participantsAccountIDs.at(0) CONST.DEFAULT_NUMBER_ID]); + const moneyRequestOptions = ReportUtils.temporary_getMoneyRequestOptions(report, undefined, [currentUserAccountID, participantsAccountIDs.at(0) ?? CONST.DEFAULT_NUMBER_ID]); expect(moneyRequestOptions.length).toBe(3); expect(moneyRequestOptions.includes(CONST.IOU.TYPE.SPLIT)).toBe(true); expect(moneyRequestOptions.includes(CONST.IOU.TYPE.SUBMIT)).toBe(true); From be4b9dc64381f58060cfc61b7324b34cb6b13b93 Mon Sep 17 00:00:00 2001 From: mkzie2 Date: Mon, 30 Dec 2024 15:54:09 +0700 Subject: [PATCH 5/8] fix error --- tests/ui/LHNItemsPresence.tsx | 8 +++++++- tests/unit/ReportUtilsTest.ts | 8 +++++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/tests/ui/LHNItemsPresence.tsx b/tests/ui/LHNItemsPresence.tsx index 162711b85499..56aaafe1f80d 100644 --- a/tests/ui/LHNItemsPresence.tsx +++ b/tests/ui/LHNItemsPresence.tsx @@ -420,7 +420,13 @@ describe('SidebarLinksData', () => { // Given the SidebarLinks are rendered LHNTestUtils.getDefaultRenderedSidebarLinks(); const expenseReport = ReportUtils.buildOptimisticExpenseReport('212', '123', 100, 122, 'USD'); - const expenseTransaction = TransactionUtils.buildOptimisticTransaction(100, 'USD', expenseReport.reportID); + const expenseTransaction = TransactionUtils.buildOptimisticTransaction({ + transactionParams: { + amount: 100, + currency: 'USD', + reportID: expenseReport.reportID, + }, + }); const expenseCreatedAction = ReportUtils.buildOptimisticIOUReportAction( 'create', 100, diff --git a/tests/unit/ReportUtilsTest.ts b/tests/unit/ReportUtilsTest.ts index 899ce72e6747..bc3d5baa4bff 100644 --- a/tests/unit/ReportUtilsTest.ts +++ b/tests/unit/ReportUtilsTest.ts @@ -1475,7 +1475,13 @@ describe('ReportUtils', () => { it('should return false when the report is the single transaction thread', async () => { const expenseReport = ReportUtils.buildOptimisticExpenseReport('212', '123', 100, 122, 'USD'); - const expenseTransaction = TransactionUtils.buildOptimisticTransaction(100, 'USD', expenseReport.reportID); + const expenseTransaction = TransactionUtils.buildOptimisticTransaction({ + transactionParams: { + amount: 100, + currency: 'USD', + reportID: expenseReport.reportID, + }, + }); const expenseCreatedAction = ReportUtils.buildOptimisticIOUReportAction( 'create', 100, From faecf16bbef4ea456d330d20aeba560e2ac5746b Mon Sep 17 00:00:00 2001 From: mkzie2 Date: Mon, 30 Dec 2024 16:01:53 +0700 Subject: [PATCH 6/8] merge main --- tests/ui/GroupChatNameTests.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/ui/GroupChatNameTests.tsx b/tests/ui/GroupChatNameTests.tsx index fc383efe4e28..e6863d9b906e 100644 --- a/tests/ui/GroupChatNameTests.tsx +++ b/tests/ui/GroupChatNameTests.tsx @@ -68,6 +68,7 @@ function signInAndGetApp(reportName = '', participantAccountIDs?: number[]): Pro // Render the App and sign in as a test user. render(); + const participants: Record = {}; participantAccountIDs?.forEach((id) => { participants[id] = { From 70569d3cc423cd8b0b8bd7bf816ee3cd0e1ce4b0 Mon Sep 17 00:00:00 2001 From: mkzie2 Date: Mon, 30 Dec 2024 16:02:03 +0700 Subject: [PATCH 7/8] fix lint --- tests/ui/GroupChatNameTests.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/ui/GroupChatNameTests.tsx b/tests/ui/GroupChatNameTests.tsx index e6863d9b906e..fc383efe4e28 100644 --- a/tests/ui/GroupChatNameTests.tsx +++ b/tests/ui/GroupChatNameTests.tsx @@ -68,7 +68,6 @@ function signInAndGetApp(reportName = '', participantAccountIDs?: number[]): Pro // Render the App and sign in as a test user. render(); - const participants: Record = {}; participantAccountIDs?.forEach((id) => { participants[id] = { From ad0136cd1e011e0a8fdf16d2db97a12715bb19b8 Mon Sep 17 00:00:00 2001 From: mkzie2 Date: Tue, 31 Dec 2024 16:11:21 +0700 Subject: [PATCH 8/8] move source and file name to transaction params --- src/libs/TransactionUtils/index.ts | 8 +++++--- src/libs/actions/IOU.ts | 12 ++++++------ 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/src/libs/TransactionUtils/index.ts b/src/libs/TransactionUtils/index.ts index c268f1ee8eae..1aa5f5fe101e 100644 --- a/src/libs/TransactionUtils/index.ts +++ b/src/libs/TransactionUtils/index.ts @@ -49,12 +49,12 @@ type TransactionParams = { billable?: boolean; pendingFields?: Partial<{[K in TransactionPendingFieldsKey]: ValueOf}>; reimbursable?: boolean; + source?: string; + filename?: string; }; type BuildOptimisticTransactionParams = { - source?: string; originalTransactionID?: string; - filename?: string; existingTransactionID?: string; existingTransaction?: OnyxEntry; policy?: OnyxEntry; @@ -159,7 +159,7 @@ function isManualRequest(transaction: Transaction): boolean { * it's transactionID match what was already generated. */ function buildOptimisticTransaction(params: BuildOptimisticTransactionParams): Transaction { - const {source = '', originalTransactionID = '', existingTransactionID, existingTransaction, filename = '', policy, transactionParams} = params; + const {originalTransactionID = '', existingTransactionID, existingTransaction, policy, transactionParams} = params; const { amount, currency, @@ -176,6 +176,8 @@ function buildOptimisticTransaction(params: BuildOptimisticTransactionParams): T billable = false, pendingFields, reimbursable = true, + source = '', + filename = '', } = transactionParams; // transactionIDs are random, positive, 64-bit numeric strings. // Because JS can only handle 53-bit numbers, transactionIDs are strings in the front-end (just like reportActionID) diff --git a/src/libs/actions/IOU.ts b/src/libs/actions/IOU.ts index 328a8b606baa..405976ab425c 100644 --- a/src/libs/actions/IOU.ts +++ b/src/libs/actions/IOU.ts @@ -2145,7 +2145,6 @@ function getSendInvoiceInformation( filename = receipt.name; } const optimisticTransaction = TransactionUtils.buildOptimisticTransaction({ - filename, transactionParams: { amount, currency, @@ -2159,6 +2158,7 @@ function getSendInvoiceInformation( taxCode, taxAmount, billable, + filename, }, }); @@ -2568,7 +2568,6 @@ function getTrackExpenseInformation( } const isDistanceRequest = existingTransaction && existingTransaction.iouRequestType === CONST.IOU.REQUEST_TYPE.DISTANCE; let optimisticTransaction = TransactionUtils.buildOptimisticTransaction({ - filename, existingTransactionID, existingTransaction, policy, @@ -2587,6 +2586,7 @@ function getTrackExpenseInformation( billable, pendingFields: isDistanceRequest ? {waypoints: CONST.RED_BRICK_ROAD_PENDING_ACTION.ADD} : undefined, reimbursable: false, + filename, }, }); @@ -4499,7 +4499,6 @@ function createSplitsAndOnyxData( // STEP 3: Build optimistic transaction const oneOnOneTransaction = TransactionUtils.buildOptimisticTransaction({ - source: CONST.IOU.TYPE.SPLIT, originalTransactionID: splitTransaction.transactionID, transactionParams: { amount: ReportUtils.isExpenseReport(oneOnOneIOUReport) ? -splitAmount : splitAmount, @@ -4513,6 +4512,7 @@ function createSplitsAndOnyxData( taxCode, taxAmount: ReportUtils.isExpenseReport(oneOnOneIOUReport) ? -splitTaxAmount : splitTaxAmount, billable, + source: CONST.IOU.TYPE.SPLIT, }, }); @@ -4852,7 +4852,6 @@ function startSplitBill({ // ReportID is -2 (aka "deleted") on the group transaction const splitTransaction = TransactionUtils.buildOptimisticTransaction({ - filename, transactionParams: { amount: 0, currency, @@ -4865,6 +4864,7 @@ function startSplitBill({ taxCode, taxAmount, billable, + filename, }, }); @@ -5260,9 +5260,7 @@ function completeSplitBill(chatReportID: string, reportAction: OnyxTypes.ReportA } const oneOnOneTransaction = TransactionUtils.buildOptimisticTransaction({ - source: CONST.IOU.TYPE.SPLIT, originalTransactionID: transactionID, - filename: updatedTransaction?.filename, transactionParams: { amount: isPolicyExpenseChat ? -splitAmount : splitAmount, currency: currency ?? '', @@ -5276,6 +5274,8 @@ function completeSplitBill(chatReportID: string, reportAction: OnyxTypes.ReportA taxCode: updatedTransaction?.taxCode, taxAmount: isPolicyExpenseChat ? -splitTaxAmount : splitAmount, billable: updatedTransaction?.billable, + source: CONST.IOU.TYPE.SPLIT, + filename: updatedTransaction?.filename, }, });