From d5ca3e37b5451745463047ca992e1c27a774312b Mon Sep 17 00:00:00 2001 From: Rajat Parashar Date: Thu, 4 Dec 2025 22:37:15 +0530 Subject: [PATCH 1/5] Split bill quick action refactor --- src/libs/actions/IOU.ts | 15 +++++++++++++-- .../request/step/IOURequestStepConfirmation.tsx | 4 ++++ .../iou/request/step/IOURequestStepDistance.tsx | 3 +++ .../request/step/IOURequestStepDistanceManual.tsx | 3 +++ .../request/step/IOURequestStepDistanceMap.tsx | 3 +++ 5 files changed, 26 insertions(+), 2 deletions(-) diff --git a/src/libs/actions/IOU.ts b/src/libs/actions/IOU.ts index af74b91af515..1166ef0926c6 100644 --- a/src/libs/actions/IOU.ts +++ b/src/libs/actions/IOU.ts @@ -611,6 +611,8 @@ type CreateDistanceRequestInformation = { backToReport?: string; isASAPSubmitBetaEnabled: boolean; transactionViolations: OnyxCollection; + quickAction: OnyxEntry; + }; type CreateSplitsTransactionParams = Omit & { @@ -628,6 +630,7 @@ type CreateSplitsAndOnyxDataParams = { policyRecentlyUsedCategories?: OnyxEntry; isASAPSubmitBetaEnabled: boolean; transactionViolations: OnyxCollection; + quickAction: OnyxEntry; }; type TrackExpenseTransactionParams = { @@ -6990,6 +6993,7 @@ function createSplitsAndOnyxData({ policyRecentlyUsedCategories, isASAPSubmitBetaEnabled, transactionViolations, + quickAction }: CreateSplitsAndOnyxDataParams): SplitsAndOnyxData { const currentUserEmailForIOUSplit = addSMSDomainIfPhoneNumber(currentUserLogin); const participantAccountIDs = participants.map((participant) => Number(participant.accountID)); @@ -7072,7 +7076,7 @@ function createSplitsAndOnyxData({ value: { action: iouRequestType === CONST.IOU.REQUEST_TYPE.DISTANCE ? CONST.QUICK_ACTIONS.SPLIT_DISTANCE : CONST.QUICK_ACTIONS.SPLIT_MANUAL, chatReportID: splitChatReport.reportID, - isFirstQuickAction: isEmptyObject(deprecatedQuickAction), + isFirstQuickAction: isEmptyObject(quickAction), }, }, existingSplitChatReport @@ -7156,7 +7160,7 @@ function createSplitsAndOnyxData({ { onyxMethod: Onyx.METHOD.SET, key: ONYXKEYS.NVP_QUICK_ACTION_GLOBAL_CREATE, - value: deprecatedQuickAction ?? null, + value: quickAction ?? null, }, ]; @@ -7480,6 +7484,7 @@ type SplitBillActionsParams = { policyRecentlyUsedCategories?: OnyxEntry; isASAPSubmitBetaEnabled: boolean; transactionViolations: OnyxCollection; + quickAction: OnyxEntry; }; /** @@ -7507,6 +7512,7 @@ function splitBill({ policyRecentlyUsedCategories, isASAPSubmitBetaEnabled, transactionViolations, + quickAction, }: SplitBillActionsParams) { const parsedComment = getParsedComment(comment); const {splitData, splits, onyxData} = createSplitsAndOnyxData({ @@ -7532,6 +7538,7 @@ function splitBill({ policyRecentlyUsedCategories, isASAPSubmitBetaEnabled, transactionViolations, + quickAction, }); const parameters: SplitBillParams = { @@ -7590,6 +7597,7 @@ function splitBillAndOpenReport({ policyRecentlyUsedCategories, isASAPSubmitBetaEnabled, transactionViolations, + quickAction, }: SplitBillActionsParams) { const parsedComment = getParsedComment(comment); const {splitData, splits, onyxData} = createSplitsAndOnyxData({ @@ -7615,6 +7623,7 @@ function splitBillAndOpenReport({ }, policyRecentlyUsedCategories, transactionViolations, + quickAction, }); const parameters: SplitBillParams = { @@ -8324,6 +8333,7 @@ function createDistanceRequest(distanceRequestInformation: CreateDistanceRequest backToReport, isASAPSubmitBetaEnabled, transactionViolations, + quickAction, } = distanceRequestInformation; const {policy, policyCategories, policyTagList, policyRecentlyUsedCategories} = policyParams; const parsedComment = getParsedComment(transactionParams.comment); @@ -8392,6 +8402,7 @@ function createDistanceRequest(distanceRequestInformation: CreateDistanceRequest policyRecentlyUsedCategories, isASAPSubmitBetaEnabled, transactionViolations, + quickAction, }); onyxData = splitOnyxData; diff --git a/src/pages/iou/request/step/IOURequestStepConfirmation.tsx b/src/pages/iou/request/step/IOURequestStepConfirmation.tsx index f49fb7d21911..b3b28d7ef04a 100644 --- a/src/pages/iou/request/step/IOURequestStepConfirmation.tsx +++ b/src/pages/iou/request/step/IOURequestStepConfirmation.tsx @@ -805,6 +805,7 @@ function IOURequestStepConfirmation({ backToReport, isASAPSubmitBetaEnabled, transactionViolations, + quickAction, }); }, [ @@ -825,6 +826,7 @@ function IOURequestStepConfirmation({ backToReport, isASAPSubmitBetaEnabled, transactionViolations, + quickAction, ], ); @@ -920,6 +922,7 @@ function IOURequestStepConfirmation({ policyRecentlyUsedCategories, isASAPSubmitBetaEnabled, transactionViolations, + quickAction, }); } return; @@ -948,6 +951,7 @@ function IOURequestStepConfirmation({ policyRecentlyUsedCategories, isASAPSubmitBetaEnabled, transactionViolations, + quickAction, }); } return; diff --git a/src/pages/iou/request/step/IOURequestStepDistance.tsx b/src/pages/iou/request/step/IOURequestStepDistance.tsx index 688e36f090fd..ab1a86fdad86 100644 --- a/src/pages/iou/request/step/IOURequestStepDistance.tsx +++ b/src/pages/iou/request/step/IOURequestStepDistance.tsx @@ -93,6 +93,7 @@ function IOURequestStepDistance({ const defaultExpensePolicy = useDefaultExpensePolicy(); const [skipConfirmation] = useOnyx(`${ONYXKEYS.COLLECTION.SKIP_CONFIRMATION}${transactionID}`, {canBeMissing: false}); const [lastSelectedDistanceRates] = useOnyx(ONYXKEYS.NVP_LAST_SELECTED_DISTANCE_RATES, {canBeMissing: true}); + const [quickAction] = useOnyx(ONYXKEYS.NVP_QUICK_ACTION_GLOBAL_CREATE, {canBeMissing: true}); const [optimisticWaypoints, setOptimisticWaypoints] = useState(null); const waypoints = useMemo( () => @@ -379,6 +380,7 @@ function IOURequestStepDistance({ backToReport, isASAPSubmitBetaEnabled, transactionViolations, + quickAction, }); return; } @@ -446,6 +448,7 @@ function IOURequestStepDistance({ reportID, transactionViolations, currentUserPersonalDetails.accountID, + quickAction, ]); const getError = () => { diff --git a/src/pages/iou/request/step/IOURequestStepDistanceManual.tsx b/src/pages/iou/request/step/IOURequestStepDistanceManual.tsx index a71aae95daf5..734fb4dff11a 100644 --- a/src/pages/iou/request/step/IOURequestStepDistanceManual.tsx +++ b/src/pages/iou/request/step/IOURequestStepDistanceManual.tsx @@ -87,6 +87,7 @@ function IOURequestStepDistanceManual({ const [lastSelectedDistanceRates] = useOnyx(ONYXKEYS.NVP_LAST_SELECTED_DISTANCE_RATES, {canBeMissing: true}); const [reportAttributesDerived] = useOnyx(ONYXKEYS.DERIVED.REPORT_ATTRIBUTES, {canBeMissing: true, selector: reportsSelector}); const [transactionViolations] = useOnyx(ONYXKEYS.COLLECTION.TRANSACTION_VIOLATIONS, {canBeMissing: true}); + const [quickAction] = useOnyx(ONYXKEYS.NVP_QUICK_ACTION_GLOBAL_CREATE, {canBeMissing: true}); const isEditing = action === CONST.IOU.ACTION.EDIT; const isCreatingNewRequest = !(backTo || isEditing); @@ -248,6 +249,7 @@ function IOURequestStepDistanceManual({ backToReport, isASAPSubmitBetaEnabled, transactionViolations, + quickAction, }); return; } @@ -313,6 +315,7 @@ function IOURequestStepDistanceManual({ personalPolicy?.autoReporting, transactionViolations, currentUserPersonalDetails.accountID, + quickAction, ], ); diff --git a/src/pages/iou/request/step/IOURequestStepDistanceMap.tsx b/src/pages/iou/request/step/IOURequestStepDistanceMap.tsx index 39d642525d04..fe08ffe11b80 100644 --- a/src/pages/iou/request/step/IOURequestStepDistanceMap.tsx +++ b/src/pages/iou/request/step/IOURequestStepDistanceMap.tsx @@ -94,6 +94,7 @@ function IOURequestStepDistanceMap({ const defaultExpensePolicy = useDefaultExpensePolicy(); const [skipConfirmation] = useOnyx(`${ONYXKEYS.COLLECTION.SKIP_CONFIRMATION}${transactionID}`, {canBeMissing: false}); const [lastSelectedDistanceRates] = useOnyx(ONYXKEYS.NVP_LAST_SELECTED_DISTANCE_RATES, {canBeMissing: true}); + const [quickAction] = useOnyx(ONYXKEYS.NVP_QUICK_ACTION_GLOBAL_CREATE, {canBeMissing: true}); const [transactionViolations] = useOnyx(ONYXKEYS.COLLECTION.TRANSACTION_VIOLATIONS, {canBeMissing: true}); const [optimisticWaypoints, setOptimisticWaypoints] = useState(null); const waypoints = useMemo( @@ -381,6 +382,7 @@ function IOURequestStepDistanceMap({ backToReport, isASAPSubmitBetaEnabled, transactionViolations, + quickAction, }); return; } @@ -448,6 +450,7 @@ function IOURequestStepDistanceMap({ reportID, transactionViolations, currentUserPersonalDetails.accountID, + quickAction, ]); const getError = () => { From 55d4ff98ed93a3a51b87d9c6f2d77e42508f8c1b Mon Sep 17 00:00:00 2001 From: Rajat Parashar Date: Thu, 4 Dec 2025 22:44:53 +0530 Subject: [PATCH 2/5] more refactors --- src/libs/actions/IOU.ts | 7 +++++-- src/pages/iou/request/step/IOURequestStepConfirmation.tsx | 1 + .../iou/request/step/IOURequestStepScan/index.native.tsx | 2 ++ src/pages/iou/request/step/IOURequestStepScan/index.tsx | 2 ++ 4 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/libs/actions/IOU.ts b/src/libs/actions/IOU.ts index 1166ef0926c6..f527434eedc5 100644 --- a/src/libs/actions/IOU.ts +++ b/src/libs/actions/IOU.ts @@ -763,6 +763,7 @@ type StartSplitBilActionParams = { taxAmount: number; shouldPlaySound?: boolean; policyRecentlyUsedCategories?: OnyxEntry; + quickAction: OnyxEntry; }; type UpdateSplitTransactionsParams = { @@ -7678,6 +7679,7 @@ function startSplitBill({ taxAmount = 0, shouldPlaySound = true, policyRecentlyUsedCategories, + quickAction, }: StartSplitBilActionParams) { const currentUserEmailForIOUSplit = addSMSDomainIfPhoneNumber(currentUserLogin); const participantAccountIDs = participants.map((participant) => Number(participant.accountID)); @@ -7742,7 +7744,7 @@ function startSplitBill({ value: { action: CONST.QUICK_ACTIONS.SPLIT_SCAN, chatReportID: splitChatReport.reportID, - isFirstQuickAction: isEmptyObject(deprecatedQuickAction), + isFirstQuickAction: isEmptyObject(quickAction), }, }, existingSplitChatReport @@ -7824,7 +7826,7 @@ function startSplitBill({ { onyxMethod: Onyx.METHOD.SET, key: ONYXKEYS.NVP_QUICK_ACTION_GLOBAL_CREATE, - value: deprecatedQuickAction ?? null, + value: quickAction ?? null, }, ]; @@ -7842,6 +7844,7 @@ function startSplitBill({ currency, taxCode, taxAmount, + quickAction, }; if (existingSplitChatReport) { diff --git a/src/pages/iou/request/step/IOURequestStepConfirmation.tsx b/src/pages/iou/request/step/IOURequestStepConfirmation.tsx index b3b28d7ef04a..84f3e61ab78c 100644 --- a/src/pages/iou/request/step/IOURequestStepConfirmation.tsx +++ b/src/pages/iou/request/step/IOURequestStepConfirmation.tsx @@ -891,6 +891,7 @@ function IOURequestStepConfirmation({ taxAmount: transactionTaxAmount, shouldPlaySound: index === transactions.length - 1, policyRecentlyUsedCategories, + quickAction, }); } } diff --git a/src/pages/iou/request/step/IOURequestStepScan/index.native.tsx b/src/pages/iou/request/step/IOURequestStepScan/index.native.tsx index 8bee5fe465e5..509c39dba68d 100644 --- a/src/pages/iou/request/step/IOURequestStepScan/index.native.tsx +++ b/src/pages/iou/request/step/IOURequestStepScan/index.native.tsx @@ -122,6 +122,7 @@ function IOURequestStepScan({ const [skipConfirmation] = useOnyx(`${ONYXKEYS.COLLECTION.SKIP_CONFIRMATION}${initialTransactionID}`, {canBeMissing: true}); const defaultExpensePolicy = useDefaultExpensePolicy(); const [dismissedProductTraining] = useOnyx(ONYXKEYS.NVP_DISMISSED_PRODUCT_TRAINING, {canBeMissing: true}); + const [quickAction] = useOnyx(ONYXKEYS.NVP_QUICK_ACTION_GLOBAL_CREATE, {canBeMissing: true}); const [reportAttributesDerived] = useOnyx(ONYXKEYS.DERIVED.REPORT_ATTRIBUTES, {canBeMissing: true, selector: reportsSelector}); const lazyIllustrations = useMemoizedLazyIllustrations(['MultiScan', 'Hand', 'Shutter']); const lazyIcons = useMemoizedLazyExpensifyIcons(['Bolt', 'Gallery', 'ReceiptMultiple', 'boltSlash']); @@ -440,6 +441,7 @@ function IOURequestStepScan({ currency: initialTransaction?.currency ?? 'USD', taxCode: transactionTaxCode, taxAmount: transactionTaxAmount, + quickAction, }); return; } diff --git a/src/pages/iou/request/step/IOURequestStepScan/index.tsx b/src/pages/iou/request/step/IOURequestStepScan/index.tsx index d2b8387f59e1..a8852a90f6af 100644 --- a/src/pages/iou/request/step/IOURequestStepScan/index.tsx +++ b/src/pages/iou/request/step/IOURequestStepScan/index.tsx @@ -124,6 +124,7 @@ function IOURequestStepScan({ const [skipConfirmation] = useOnyx(`${ONYXKEYS.COLLECTION.SKIP_CONFIRMATION}${initialTransactionID}`, {canBeMissing: true}); const defaultExpensePolicy = useDefaultExpensePolicy(); const [dismissedProductTraining] = useOnyx(ONYXKEYS.NVP_DISMISSED_PRODUCT_TRAINING, {canBeMissing: true}); + const [quickAction] = useOnyx(ONYXKEYS.NVP_QUICK_ACTION_GLOBAL_CREATE, {canBeMissing: true}); const [reportAttributesDerived] = useOnyx(ONYXKEYS.DERIVED.REPORT_ATTRIBUTES, {canBeMissing: true, selector: reportsSelector}); const lazyIllustrations = useMemoizedLazyIllustrations(['MultiScan', 'Hand', 'ReceiptUpload', 'Shutter']); const lazyIcons = useMemoizedLazyExpensifyIcons(['Bolt', 'Gallery', 'ReceiptMultiple', 'boltSlash', 'ReplaceReceipt', 'SmartScan']); @@ -501,6 +502,7 @@ function IOURequestStepScan({ currency: initialTransaction?.currency ?? 'USD', taxCode: transactionTaxCode, taxAmount: transactionTaxAmount, + quickAction, }); return; } From a123a65ee6e34a671dcd81607cdb47596bdee40e Mon Sep 17 00:00:00 2001 From: Rajat Parashar Date: Mon, 8 Dec 2025 23:37:39 +0530 Subject: [PATCH 3/5] Pass deps --- .../request/step/IOURequestStepConfirmation.tsx | 15 ++++++++------- .../step/IOURequestStepScan/index.native.tsx | 7 ++++--- .../iou/request/step/IOURequestStepScan/index.tsx | 7 ++++--- 3 files changed, 16 insertions(+), 13 deletions(-) diff --git a/src/pages/iou/request/step/IOURequestStepConfirmation.tsx b/src/pages/iou/request/step/IOURequestStepConfirmation.tsx index 16ad766e9b4f..a32e104d9384 100644 --- a/src/pages/iou/request/step/IOURequestStepConfirmation.tsx +++ b/src/pages/iou/request/step/IOURequestStepConfirmation.tsx @@ -1068,9 +1068,9 @@ function IOURequestStepConfirmation({ [ iouType, transaction, - transactions, isDistanceRequest, isMovingTransactionFromTrackExpense, + isUnreported, receiptFiles, isCategorizingTrackExpense, isSharingTrackExpense, @@ -1079,21 +1079,22 @@ function IOURequestStepConfirmation({ createDistanceRequest, currentUserPersonalDetails.login, currentUserPersonalDetails.accountID, + transactions, report, transactionTaxCode, transactionTaxAmount, + policyRecentlyUsedCategories, + quickAction, + isASAPSubmitBetaEnabled, + transactionViolations, + receiverParticipantAccountID, + existingInvoiceReport, policy, policyTags, policyCategories, - policyRecentlyUsedCategories, trackExpense, userLocation, submitPerDiemExpense, - existingInvoiceReport, - isUnreported, - isASAPSubmitBetaEnabled, - receiverParticipantAccountID, - transactionViolations, ], ); diff --git a/src/pages/iou/request/step/IOURequestStepScan/index.native.tsx b/src/pages/iou/request/step/IOURequestStepScan/index.native.tsx index 509c39dba68d..d1fbafe24393 100644 --- a/src/pages/iou/request/step/IOURequestStepScan/index.native.tsx +++ b/src/pages/iou/request/step/IOURequestStepScan/index.native.tsx @@ -533,21 +533,22 @@ function IOURequestStepScan({ initialTransaction?.reportID, reportNameValuePairs, iouType, - personalPolicy?.autoReporting, defaultExpensePolicy, report, initialTransactionID, navigateToConfirmationPage, + currentUserPersonalDetails.accountID, + currentUserPersonalDetails?.login, shouldSkipConfirmation, personalDetails, reportAttributesDerived, createTransaction, - currentUserPersonalDetails?.login, - currentUserPersonalDetails.accountID, reportID, transactionTaxCode, transactionTaxAmount, + quickAction, policy, + personalPolicy?.autoReporting, selfDMReportID, ], ); diff --git a/src/pages/iou/request/step/IOURequestStepScan/index.tsx b/src/pages/iou/request/step/IOURequestStepScan/index.tsx index 57d93ba89332..2de8c7d4ab56 100644 --- a/src/pages/iou/request/step/IOURequestStepScan/index.tsx +++ b/src/pages/iou/request/step/IOURequestStepScan/index.tsx @@ -592,21 +592,22 @@ function IOURequestStepScan({ initialTransaction?.reportID, reportNameValuePairs, iouType, - personalPolicy?.autoReporting, defaultExpensePolicy, report, initialTransactionID, navigateToConfirmationPage, + currentUserPersonalDetails.accountID, + currentUserPersonalDetails?.login, shouldSkipConfirmation, personalDetails, reportAttributesDerived, createTransaction, - currentUserPersonalDetails?.login, - currentUserPersonalDetails.accountID, reportID, transactionTaxCode, transactionTaxAmount, + quickAction, policy, + personalPolicy?.autoReporting, selfDMReportID, ], ); From 9c8c8bf399c6be773297764b345d662baf660876 Mon Sep 17 00:00:00 2001 From: Rajat Parashar Date: Tue, 9 Dec 2025 00:03:19 +0530 Subject: [PATCH 4/5] fix tests --- tests/actions/IOUTest.ts | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/tests/actions/IOUTest.ts b/tests/actions/IOUTest.ts index 84ca9b66982c..bed78945a6f3 100644 --- a/tests/actions/IOUTest.ts +++ b/tests/actions/IOUTest.ts @@ -2196,6 +2196,7 @@ describe('actions/IOU', () => { }, isASAPSubmitBetaEnabled: false, transactionViolations: {}, + quickAction: undefined, }); expect(notifyNewAction).toHaveBeenCalledTimes(0); }); @@ -2215,6 +2216,7 @@ describe('actions/IOU', () => { }, isASAPSubmitBetaEnabled: false, transactionViolations: {}, + quickAction: undefined, }); expect(notifyNewAction).toHaveBeenCalledTimes(1); }); @@ -2389,6 +2391,7 @@ describe('actions/IOU', () => { existingSplitChatReportID: '', isASAPSubmitBetaEnabled: false, transactionViolations: {}, + quickAction: undefined, }, ); return waitForBatchedUpdates(); @@ -2723,6 +2726,7 @@ describe('actions/IOU', () => { existingSplitChatReportID: workspaceReportID, isASAPSubmitBetaEnabled: false, transactionViolations: {}, + quickAction: undefined, }); await waitForBatchedUpdates(); @@ -2772,6 +2776,7 @@ describe('actions/IOU', () => { existingSplitChatReportID: reportID, isASAPSubmitBetaEnabled: false, transactionViolations: {}, + quickAction: undefined, }); await waitForBatchedUpdates(); @@ -2788,6 +2793,7 @@ describe('actions/IOU', () => { existingSplitChatReportID: reportID, isASAPSubmitBetaEnabled: false, transactionViolations: {}, + quickAction: undefined, }); await waitForBatchedUpdates(); @@ -2843,6 +2849,7 @@ describe('actions/IOU', () => { comment: '', isASAPSubmitBetaEnabled: false, transactionViolations: {}, + quickAction: undefined, }); await waitForBatchedUpdates(); @@ -2888,6 +2895,7 @@ describe('actions/IOU', () => { existingSplitChatReportID: reportID, isASAPSubmitBetaEnabled: false, transactionViolations: {}, + quickAction: undefined, }); await waitForBatchedUpdates(); @@ -2930,6 +2938,7 @@ describe('actions/IOU', () => { tag: undefined, taxCode: '', taxAmount: 0, + quickAction: undefined, }); await waitForBatchedUpdates(); From efba11ec49b04590bdb0c5310311ccef7d11b8f0 Mon Sep 17 00:00:00 2001 From: Rajat Parashar Date: Tue, 9 Dec 2025 15:24:02 +0530 Subject: [PATCH 5/5] Update tests --- src/libs/actions/IOU.ts | 3 +- tests/actions/IOUTest.ts | 92 +++++++++++++++++++++++++++++++++++++++- 2 files changed, 92 insertions(+), 3 deletions(-) diff --git a/src/libs/actions/IOU.ts b/src/libs/actions/IOU.ts index d977d9b86051..973bd9132e2c 100644 --- a/src/libs/actions/IOU.ts +++ b/src/libs/actions/IOU.ts @@ -611,7 +611,6 @@ type CreateDistanceRequestInformation = { isASAPSubmitBetaEnabled: boolean; transactionViolations: OnyxCollection; quickAction: OnyxEntry; - }; type CreateSplitsTransactionParams = Omit & { @@ -6979,7 +6978,7 @@ function createSplitsAndOnyxData({ policyRecentlyUsedCategories, isASAPSubmitBetaEnabled, transactionViolations, - quickAction + quickAction, }: CreateSplitsAndOnyxDataParams): SplitsAndOnyxData { const currentUserEmailForIOUSplit = addSMSDomainIfPhoneNumber(currentUserLogin); const participantAccountIDs = participants.map((participant) => Number(participant.accountID)); diff --git a/tests/actions/IOUTest.ts b/tests/actions/IOUTest.ts index bed78945a6f3..0b99d4308ef1 100644 --- a/tests/actions/IOUTest.ts +++ b/tests/actions/IOUTest.ts @@ -2220,8 +2220,52 @@ describe('actions/IOU', () => { }); expect(notifyNewAction).toHaveBeenCalledTimes(1); }); - }); + it('correctly sets quickAction', async () => { + createDistanceRequest({ + report: {reportID: '123', type: CONST.REPORT.TYPE.EXPENSE}, + iouType: CONST.IOU.TYPE.SPLIT, + participants: [], + transactionParams: { + amount: 1, + attendees: [], + currency: CONST.CURRENCY.USD, + + created: '', + merchant: '', + comment: '', + validWaypoints: {}, + }, + isASAPSubmitBetaEnabled: false, + transactionViolations: {}, + quickAction: undefined, + }); + await waitForBatchedUpdates(); + expect(await getOnyxValue(ONYXKEYS.NVP_QUICK_ACTION_GLOBAL_CREATE)).toHaveProperty('isFirstQuickAction', true); + createDistanceRequest({ + report: {reportID: '123', type: CONST.REPORT.TYPE.EXPENSE}, + iouType: CONST.IOU.TYPE.SPLIT, + participants: [], + transactionParams: { + amount: 1, + attendees: [], + currency: CONST.CURRENCY.USD, + created: '', + merchant: '', + comment: '', + validWaypoints: {}, + }, + isASAPSubmitBetaEnabled: false, + transactionViolations: {}, + quickAction: {action: CONST.QUICK_ACTIONS.SEND_MONEY, chatReportID: '456'}, + }); + await waitForBatchedUpdates(); + expect(await getOnyxValue(ONYXKEYS.NVP_QUICK_ACTION_GLOBAL_CREATE)).toMatchObject({ + action: CONST.QUICK_ACTIONS.SPLIT_DISTANCE, + isFirstQuickAction: false, + }); + }); + }); describe('split expense', () => { it('creates and updates new chats and IOUs as needed', () => { jest.setTimeout(10 * 1000); @@ -2754,6 +2798,52 @@ describe('actions/IOU', () => { }); }); + it('correctly sets quickAction', async () => { + // Given a expense chat with no expenses + const workspaceReportID = '1'; + await Onyx.merge(`${ONYXKEYS.COLLECTION.REPORT}${workspaceReportID}`, {reportID: workspaceReportID, isOwnPolicyExpenseChat: true}); + + splitBill({ + participants: [{reportID: workspaceReportID}], + currentUserLogin: RORY_EMAIL, + currentUserAccountID: RORY_ACCOUNT_ID, + comment: '', + amount: 100, + currency: CONST.CURRENCY.USD, + merchant: 'test', + created: '', + existingSplitChatReportID: workspaceReportID, + isASAPSubmitBetaEnabled: false, + transactionViolations: {}, + quickAction: undefined, + }); + + await waitForBatchedUpdates(); + + expect(await getOnyxValue(ONYXKEYS.NVP_QUICK_ACTION_GLOBAL_CREATE)).toHaveProperty('isFirstQuickAction', true); + + splitBill({ + participants: [{reportID: workspaceReportID}], + currentUserLogin: RORY_EMAIL, + currentUserAccountID: RORY_ACCOUNT_ID, + comment: '', + amount: 100, + currency: CONST.CURRENCY.USD, + merchant: 'test', + created: '', + existingSplitChatReportID: workspaceReportID, + isASAPSubmitBetaEnabled: false, + transactionViolations: {}, + quickAction: {action: CONST.QUICK_ACTIONS.SEND_MONEY, chatReportID: '456'}, + }); + await waitForBatchedUpdates(); + + expect(await getOnyxValue(ONYXKEYS.NVP_QUICK_ACTION_GLOBAL_CREATE)).toMatchObject({ + action: CONST.QUICK_ACTIONS.SPLIT_MANUAL, + isFirstQuickAction: false, + }); + }); + it('should update split chat report lastVisibleActionCreated to the latest IOU action when split bill in a DM', async () => { // Given a DM chat with no expenses const reportID = '1';