Skip to content

Commit 349ed79

Browse files
fix IOU confirm participant go back
1 parent e7220b4 commit 349ed79

File tree

1 file changed

+33
-18
lines changed

1 file changed

+33
-18
lines changed

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

+33-18
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@ import {
2626
} from '@userActions/IOU';
2727
import CONST from '@src/CONST';
2828
import ONYXKEYS from '@src/ONYXKEYS';
29-
import type {Route} from '@src/ROUTES';
3029
import ROUTES from '@src/ROUTES';
3130
import type SCREENS from '@src/SCREENS';
3231
import type {Participant} from '@src/types/onyx/IOU';
@@ -109,6 +108,19 @@ function IOURequestStepParticipants({
109108
resetDraftTransactionsCustomUnit(transactionID);
110109
}, [isFocused, isMovingTransactionFromTrackExpense, transactionID]);
111110

111+
const waitForKeyboardDismiss = useCallback(
112+
(callback: () => void) => {
113+
if (isAndroidNative || isMobileSafari) {
114+
KeyboardUtils.dismiss().then(() => {
115+
callback();
116+
});
117+
} else {
118+
callback();
119+
}
120+
},
121+
[isAndroidNative, isMobileSafari],
122+
);
123+
112124
const trackExpense = useCallback(() => {
113125
// If coming from the combined submit/track flow and the user proceeds to just track the expense,
114126
// we will use the track IOU type in the confirmation flow.
@@ -120,8 +132,16 @@ function IOURequestStepParticipants({
120132
setCustomUnitRateID(transactionID, rateID);
121133
setMoneyRequestParticipantsFromReport(transactionID, selfDMReport);
122134
const iouConfirmationPageRoute = ROUTES.MONEY_REQUEST_STEP_CONFIRMATION.getRoute(action, CONST.IOU.TYPE.TRACK, transactionID, selfDMReportID);
123-
Navigation.navigate(iouConfirmationPageRoute);
124-
}, [action, selfDMReport, selfDMReportID, transactionID]);
135+
waitForKeyboardDismiss(() => {
136+
// If the backTo parameter is set, we should navigate back to the confirmation screen that is already on the stack.
137+
if (backTo) {
138+
// We don't want to compare params because we just changed the participants.
139+
Navigation.goBack(iouConfirmationPageRoute, {compareParams: false});
140+
} else {
141+
Navigation.navigate(iouConfirmationPageRoute);
142+
}
143+
});
144+
}, [action, backTo, selfDMReport, selfDMReportID, transactionID, waitForKeyboardDismiss]);
125145

126146
const addParticipant = useCallback(
127147
(val: Participant[]) => {
@@ -159,19 +179,6 @@ function IOURequestStepParticipants({
159179
[iouType, reportID, trackExpense, transactionID, isMovingTransactionFromTrackExpense],
160180
);
161181

162-
const handleNavigation = useCallback(
163-
(route: Route) => {
164-
if (isAndroidNative || isMobileSafari) {
165-
KeyboardUtils.dismiss().then(() => {
166-
Navigation.navigate(route);
167-
});
168-
} else {
169-
Navigation.navigate(route);
170-
}
171-
},
172-
[isAndroidNative, isMobileSafari],
173-
);
174-
175182
const goToNextStep = useCallback(() => {
176183
const isCategorizing = action === CONST.IOU.ACTION.CATEGORIZE;
177184
const isShareAction = action === CONST.IOU.ACTION.SHARE;
@@ -202,8 +209,16 @@ function IOURequestStepParticipants({
202209
? ROUTES.MONEY_REQUEST_STEP_CATEGORY.getRoute(action, iouType, transactionID, selectedReportID.current || reportID, iouConfirmationPageRoute)
203210
: iouConfirmationPageRoute;
204211

205-
handleNavigation(route);
206-
}, [action, participants, iouType, transaction, transactionID, reportID, handleNavigation]);
212+
waitForKeyboardDismiss(() => {
213+
// If the backTo parameter is set, we should navigate back to the confirmation screen that is already on the stack.
214+
if (backTo) {
215+
// We don't want to compare params because we just changed the participants.
216+
Navigation.goBack(route, {compareParams: false});
217+
} else {
218+
Navigation.navigate(route);
219+
}
220+
});
221+
}, [action, participants, iouType, transaction, transactionID, reportID, waitForKeyboardDismiss, backTo]);
207222

208223
const navigateBack = useCallback(() => {
209224
if (backTo) {

0 commit comments

Comments
 (0)