Skip to content

Commit 6714e6f

Browse files
rlinozOSBotify
authored andcommitted
Merge pull request #82132 from Expensify/revert-80480-revert-80286-revert-76595-fix/76050
[CP Staging] Revert "Update create transaction Manual flow to ask for merchant after asking for amount v2" (cherry picked from commit 2a67ba2) (cherry-picked to staging by lakchote)
1 parent a8e823c commit 6714e6f

File tree

4 files changed

+14
-97
lines changed

4 files changed

+14
-97
lines changed

src/libs/IOUUtils.ts

Lines changed: 2 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,14 @@ import CONST from '@src/CONST';
55
import ROUTES from '@src/ROUTES';
66
import type {OnyxInputOrEntry, PersonalDetails, Policy, Report} from '@src/types/onyx';
77
import type {Attendee, Participant} from '@src/types/onyx/IOU';
8-
import type Transaction from '@src/types/onyx/Transaction';
98
import SafeString from '@src/utils/SafeString';
109
import type {IOURequestType} from './actions/IOU';
1110
import {getCurrencyUnit} from './CurrencyUtils';
1211
import Navigation from './Navigation/Navigation';
1312
import Performance from './Performance';
1413
import {isPaidGroupPolicy} from './PolicyUtils';
15-
import {getReportTransactions, isExpenseReport, isPolicyExpenseChat as isPolicyExpenseChatUtils} from './ReportUtils';
16-
import {getCurrency, getTagArrayFromName, isMerchantMissing, isScanRequest} from './TransactionUtils';
14+
import {getReportTransactions} from './ReportUtils';
15+
import {getCurrency, getTagArrayFromName} from './TransactionUtils';
1716

1817
function navigateToStartMoneyRequestStep(requestType: IOURequestType, iouType: IOUType, transactionID: string, reportID: string, iouAction?: IOUAction): void {
1918
if (iouAction === CONST.IOU.ACTION.CATEGORIZE || iouAction === CONST.IOU.ACTION.SUBMIT || iouAction === CONST.IOU.ACTION.SHARE) {
@@ -325,34 +324,6 @@ function formatCurrentUserToAttendee(currentUser?: PersonalDetails, reportID?: s
325324
return [initialAttendee];
326325
}
327326

328-
/**
329-
* Checks if merchant is required and missing for a transaction.
330-
* Merchant is required for policy expense chats, expense requests, or when any participant is a policy expense chat.
331-
* For scan requests, merchant is not required unless it's a split bill being edited.
332-
*
333-
* @param transaction - The transaction to check
334-
* @param report - The report associated with the transaction
335-
* @param isEditingSplitBill - Whether this is editing a split bill
336-
* @returns true if merchant is required and missing, false otherwise
337-
*/
338-
function shouldRequireMerchant(transaction: OnyxInputOrEntry<Transaction> | undefined, report: OnyxInputOrEntry<Report> | undefined, isEditingSplitBill = false): boolean {
339-
if (!transaction) {
340-
return false;
341-
}
342-
343-
if (!isMerchantMissing(transaction)) {
344-
return false;
345-
}
346-
347-
// For scan requests, merchant is not required unless it's a split bill being edited
348-
if (isScanRequest(transaction) && !isEditingSplitBill) {
349-
return false;
350-
}
351-
352-
// Check if merchant is required based on report type and participants
353-
return !!(isPolicyExpenseChatUtils(report) || isExpenseReport(report) || transaction?.participants?.some((participant) => !!participant.isPolicyExpenseChat));
354-
}
355-
356327
function navigateToConfirmationPage(
357328
iouType: IOUType,
358329
transactionID: string,
@@ -421,7 +392,6 @@ export {
421392
formatCurrentUserToAttendee,
422393
navigateToParticipantPage,
423394
shouldShowReceiptEmptyState,
424-
shouldRequireMerchant,
425395
navigateToConfirmationPage,
426396
calculateDefaultReimbursable,
427397
};

src/pages/iou/request/step/IOURequestStepAmount.tsx

Lines changed: 2 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ import useShowNotFoundPageInIOUStep from '@hooks/useShowNotFoundPageInIOUStep';
2121
import {setTransactionReport} from '@libs/actions/Transaction';
2222
import {convertToBackendAmount} from '@libs/CurrencyUtils';
2323
import getNonEmptyStringOnyxID from '@libs/getNonEmptyStringOnyxID';
24-
import {calculateDefaultReimbursable, isMovingTransactionFromTrackExpense, navigateToConfirmationPage, navigateToParticipantPage, shouldRequireMerchant} from '@libs/IOUUtils';
24+
import {calculateDefaultReimbursable, isMovingTransactionFromTrackExpense, navigateToConfirmationPage, navigateToParticipantPage} from '@libs/IOUUtils';
2525
import Navigation from '@libs/Navigation/Navigation';
2626
import {getParticipantsOption, getReportOption} from '@libs/OptionsListUtils';
2727
import {getPolicyExpenseChat, getReportOrDraftReport, getTransactionDetails, isMoneyRequestReport, isPolicyExpenseChat, isSelfDM, shouldEnableNegative} from '@libs/ReportUtils';
@@ -307,14 +307,8 @@ function IOURequestStepAmount({
307307
setSplitShares(transaction, amountInSmallestCurrencyUnits, selectedCurrency || CONST.CURRENCY.USD, participantAccountIDs);
308308
}
309309
setMoneyRequestParticipantsFromReport(transactionID, report, currentUserPersonalDetails.accountID).then(() => {
310-
// If merchant is required and missing, navigate to merchant step first
311-
if (shouldRequireMerchant(transaction, report, isEditingSplitBill)) {
312-
Navigation.navigate(ROUTES.MONEY_REQUEST_STEP_MERCHANT.getRoute(action, CONST.IOU.TYPE.SUBMIT, transactionID, reportID, undefined, reportActionID));
313-
return;
314-
}
315310
navigateToConfirmationPage(iouType, transactionID, reportID, backToReport);
316311
});
317-
318312
return;
319313
}
320314

@@ -330,11 +324,7 @@ function IOURequestStepAmount({
330324
const resetToDefaultWorkspace = () => {
331325
setTransactionReport(transactionID, {reportID: transactionReportID}, true);
332326
setMoneyRequestParticipantsFromReport(transactionID, targetReport, currentUserPersonalDetails.accountID).then(() => {
333-
if (transactionReportID === CONST.REPORT.UNREPORTED_REPORT_ID) {
334-
Navigation.navigate(ROUTES.MONEY_REQUEST_STEP_CONFIRMATION.getRoute(CONST.IOU.ACTION.CREATE, iouTypeTrackOrSubmit, transactionID, targetReport?.reportID));
335-
return;
336-
}
337-
Navigation.navigate(ROUTES.MONEY_REQUEST_STEP_MERCHANT.getRoute(action, CONST.IOU.TYPE.SUBMIT, transactionID, targetReport?.reportID, undefined, reportActionID));
327+
Navigation.navigate(ROUTES.MONEY_REQUEST_STEP_CONFIRMATION.getRoute(CONST.IOU.ACTION.CREATE, iouTypeTrackOrSubmit, transactionID, targetReport?.reportID));
338328
});
339329
};
340330

@@ -356,10 +346,6 @@ function IOURequestStepAmount({
356346
const chatReportID = selectedReport?.chatReportID ?? selectedReport?.reportID;
357347

358348
Navigation.setNavigationActionToMicrotaskQueue(() => {
359-
if (shouldRequireMerchant(transaction, selectedReport, isEditingSplitBill)) {
360-
Navigation.navigate(ROUTES.MONEY_REQUEST_STEP_MERCHANT.getRoute(CONST.IOU.ACTION.CREATE, navigationIOUType, transactionID, chatReportID, undefined, reportActionID));
361-
return;
362-
}
363349
Navigation.navigate(ROUTES.MONEY_REQUEST_STEP_CONFIRMATION.getRoute(CONST.IOU.ACTION.CREATE, navigationIOUType, transactionID, chatReportID));
364350
});
365351
} else {

src/pages/iou/request/step/IOURequestStepMerchant.tsx

Lines changed: 3 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
import {useFocusEffect} from '@react-navigation/native';
2-
import React, {useCallback, useEffect, useMemo, useRef, useState} from 'react';
1+
import React, {useCallback, useEffect, useRef, useState} from 'react';
32
import {InteractionManager, View} from 'react-native';
43
import FormProvider from '@components/Form/FormProvider';
54
import InputWrapper from '@components/Form/InputWrapper';
@@ -22,7 +21,6 @@ import {setMoneyRequestMerchant, updateMoneyRequestMerchant} from '@userActions/
2221
import {setDraftSplitTransaction} from '@userActions/IOU/Split';
2322
import CONST from '@src/CONST';
2423
import ONYXKEYS from '@src/ONYXKEYS';
25-
import ROUTES from '@src/ROUTES';
2624
import type SCREENS from '@src/SCREENS';
2725
import INPUT_IDS from '@src/types/form/MoneyRequestMerchantForm';
2826
import {isEmptyObject} from '@src/types/utils/EmptyObject';
@@ -71,35 +69,19 @@ function IOURequestStepMerchant({
7169
const {isBetaEnabled} = usePermissions();
7270
const isASAPSubmitBetaEnabled = isBetaEnabled(CONST.BETAS.ASAP_SUBMIT);
7371

74-
const isMerchantRequired = useMemo(() => {
75-
if (isEditing) {
76-
return isPolicyExpenseChat(report) || isExpenseRequest(report);
77-
}
78-
return transaction?.participants?.some((participant) => !!participant.isPolicyExpenseChat);
79-
}, [isEditing, report, transaction?.participants]);
72+
const isMerchantRequired = isPolicyExpenseChat(report) || isExpenseRequest(report) || transaction?.participants?.some((participant) => !!participant.isPolicyExpenseChat);
8073

8174
const navigateBack = useCallback(() => {
8275
Navigation.goBack(backTo);
8376
}, [backTo]);
8477

85-
useFocusEffect(
86-
useCallback(() => {
87-
setIsSaved(false);
88-
setCurrentMerchant(initialMerchant);
89-
}, [initialMerchant]),
90-
);
91-
9278
useEffect(() => {
9379
if (!isSaved || !shouldNavigateAfterSaveRef.current) {
9480
return;
9581
}
9682
shouldNavigateAfterSaveRef.current = false;
97-
if (!isEditing && !backTo) {
98-
Navigation.navigate(ROUTES.MONEY_REQUEST_STEP_CONFIRMATION.getRoute(action, iouType, transactionID, reportID, undefined, undefined, Navigation.getActiveRoute()));
99-
return;
100-
}
10183
navigateBack();
102-
}, [isSaved, navigateBack, action, iouType, transactionID, reportID, backTo, isEditing]);
84+
}, [isSaved, navigateBack]);
10385

10486
const validate = useCallback(
10587
(value: FormOnyxValues<typeof ONYXKEYS.FORMS.MONEY_REQUEST_MERCHANT_FORM>) => {
@@ -183,7 +165,6 @@ function IOURequestStepMerchant({
183165
inputID={INPUT_IDS.MONEY_REQUEST_MERCHANT}
184166
name={INPUT_IDS.MONEY_REQUEST_MERCHANT}
185167
defaultValue={initialMerchant}
186-
value={currentMerchant}
187168
onValueChange={updateMerchantRef}
188169
label={translate('common.merchant')}
189170
accessibilityLabel={translate('common.merchant')}

src/pages/iou/request/step/IOURequestStepParticipants.tsx

Lines changed: 7 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ import {isPaidGroupPolicy} from '@libs/PolicyUtils';
2222
import {findSelfDMReportID, generateReportID, isInvoiceRoomWithID} from '@libs/ReportUtils';
2323
import {shouldRestrictUserBillableActions} from '@libs/SubscriptionUtils';
2424
import {endSpan} from '@libs/telemetry/activeSpans';
25-
import {getRequestType, hasRoute, isCorporateCardTransaction, isDistanceRequest, isMerchantMissing, isPerDiemRequest} from '@libs/TransactionUtils';
25+
import {getRequestType, hasRoute, isCorporateCardTransaction, isDistanceRequest, isPerDiemRequest} from '@libs/TransactionUtils';
2626
import MoneyRequestParticipantsSelector from '@pages/iou/request/MoneyRequestParticipantsSelector';
2727
import {
2828
navigateToStartStepIfScanFileCannotBeRead,
@@ -38,7 +38,6 @@ import {createDraftWorkspace} from '@userActions/Policy/Policy';
3838
import CONST from '@src/CONST';
3939
import ONYXKEYS from '@src/ONYXKEYS';
4040
import ROUTES from '@src/ROUTES';
41-
import type {Route} from '@src/ROUTES';
4241
import type SCREENS from '@src/SCREENS';
4342
import type {Policy} from '@src/types/onyx';
4443
import type {Participant} from '@src/types/onyx/IOU';
@@ -89,7 +88,6 @@ function IOURequestStepParticipants({
8988

9089
// We need to set selectedReportID if user has navigated back from confirmation page and navigates to confirmation page with already selected participant
9190
const selectedReportID = useRef<string>(participants?.length === 1 ? (participants.at(0)?.reportID ?? reportID) : reportID);
92-
const selectedParticipants = useRef<Participant[]>(participants);
9391
const numberOfParticipants = useRef(participants?.length ?? 0);
9492
const iouRequestType = getRequestType(initialTransaction);
9593
const isSplitRequest = iouType === CONST.IOU.TYPE.SPLIT;
@@ -223,7 +221,6 @@ function IOURequestStepParticipants({
223221
(val: Participant[]) => {
224222
HttpUtils.cancelPendingRequests(READ_COMMANDS.SEARCH_FOR_REPORTS);
225223

226-
selectedParticipants.current = val;
227224
const firstParticipant = val.at(0);
228225

229226
if (firstParticipant?.isSelfDM && !isSplitRequest) {
@@ -338,9 +335,6 @@ function IOURequestStepParticipants({
338335
return;
339336
}
340337

341-
const firstParticipant = selectedParticipants.current?.at(0);
342-
const isMerchantRequired = !!firstParticipant?.isPolicyExpenseChat && isMerchantMissing(initialTransaction) && iouRequestType === CONST.IOU.REQUEST_TYPE.MANUAL;
343-
344338
const iouConfirmationPageRoute = ROUTES.MONEY_REQUEST_STEP_CONFIRMATION.getRoute(
345339
action,
346340
iouType === CONST.IOU.TYPE.CREATE || iouType === CONST.IOU.TYPE.TRACK ? CONST.IOU.TYPE.SUBMIT : iouType,
@@ -351,34 +345,21 @@ function IOURequestStepParticipants({
351345
action === CONST.IOU.ACTION.SHARE ? Navigation.getActiveRoute() : undefined,
352346
);
353347

354-
let route: Route = iouConfirmationPageRoute;
355-
356-
if (isCategorizing) {
357-
route = ROUTES.MONEY_REQUEST_STEP_CATEGORY.getRoute(action, iouType, initialTransactionID, selectedReportID.current || reportID, iouConfirmationPageRoute);
358-
} else if (isMerchantRequired) {
359-
route = ROUTES.MONEY_REQUEST_STEP_MERCHANT.getRoute(
360-
action,
361-
iouType === CONST.IOU.TYPE.CREATE || iouType === CONST.IOU.TYPE.TRACK ? CONST.IOU.TYPE.SUBMIT : iouType,
362-
initialTransactionID,
363-
newReportID,
364-
);
365-
}
348+
const route = isCategorizing
349+
? ROUTES.MONEY_REQUEST_STEP_CATEGORY.getRoute(action, iouType, initialTransactionID, selectedReportID.current || reportID, iouConfirmationPageRoute)
350+
: iouConfirmationPageRoute;
366351

367352
Performance.markStart(CONST.TIMING.OPEN_CREATE_EXPENSE_APPROVE);
368353
waitForKeyboardDismiss(() => {
369354
// If the backTo parameter is set, we should navigate back to the confirmation screen that is already on the stack.
370355
// We wrap navigation in setNavigationActionToMicrotaskQueue so that data loading in Onyx and navigation do not occur simultaneously, which resets the amount to 0.
371356
// More information can be found here: https://github.com/Expensify/App/issues/73728
372357
Navigation.setNavigationActionToMicrotaskQueue(() => {
373-
if (backTo && !isMerchantRequired) {
358+
if (backTo) {
374359
// We don't want to compare params because we just changed the participants.
375360
Navigation.goBack(route, {compareParams: false});
376361
} else {
377-
// If the merchant step is required and the backTo parameter is set, we need to go back the the confirmation screen first and then navigate to the merchant page with forceReplace to remove this screen from the stack
378-
if (isMerchantRequired && backTo) {
379-
Navigation.goBack();
380-
}
381-
Navigation.navigate(route, {forceReplace: isMerchantRequired && !!backTo});
362+
Navigation.navigate(route);
382363
}
383364
});
384365
});
@@ -388,15 +369,14 @@ function IOURequestStepParticipants({
388369
participants,
389370
iouType,
390371
initialTransaction,
391-
iouRequestType,
392372
initialTransactionID,
373+
reportID,
393374
waitForKeyboardDismiss,
394375
transactions,
395376
isMovingTransactionFromTrackExpense,
396377
allPolicies,
397378
policyForMovingExpenses,
398379
introSelected,
399-
reportID,
400380
backTo,
401381
selfDMReportID,
402382
],

0 commit comments

Comments
 (0)