Skip to content

Commit cbd68df

Browse files
authored
Merge pull request Expensify#65678 from callstack-internal/fix/59441-stage-3-regressions
Stage 3 regressions
2 parents 202a1b6 + 08c4a43 commit cbd68df

4 files changed

Lines changed: 45 additions & 15 deletions

File tree

src/components/AttachmentComposerModal.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,7 @@ function AttachmentComposerModal({onConfirm, onModalShow = () => {}, onModalHide
175175
}
176176
}, [fileError, validFilesToUpload, convertFileToAttachment, getModalType]);
177177

178-
const {ErrorModal, validateFiles, PDFValidationComponent} = useFilesValidation(setValidFilesToUpload);
178+
const {ErrorModal, validateFiles, PDFValidationComponent} = useFilesValidation(setValidFilesToUpload, false);
179179

180180
const confirmAndContinue = () => {
181181
if (fileError === CONST.FILE_VALIDATION_ERRORS.MAX_FILE_LIMIT_EXCEEDED) {

src/hooks/useFilesValidation.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ type ErrorObject = {
2727
fileExtension?: string;
2828
};
2929

30-
function useFilesValidation(proceedWithFilesAction: (files: FileObject[]) => void, isValidatingReceipts = false) {
30+
function useFilesValidation(proceedWithFilesAction: (files: FileObject[]) => void, isValidatingReceipts = true) {
3131
const styles = useThemeStyles();
3232
const {translate} = useLocalize();
3333
const [isErrorModalVisible, setIsErrorModalVisible] = useState(false);

src/pages/iou/request/step/IOURequestStepScan/index.native.tsx

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,8 @@ function IOURequestStepScan({
130130
return allTransactions.filter((transaction): transaction is Transaction => !!transaction);
131131
}, [initialTransaction, initialTransactionID, optimisticTransactions]);
132132

133+
const shouldAcceptMultipleFiles = isBetaEnabled(CONST.BETAS.NEWDOT_MULTI_FILES_DRAG_AND_DROP) && !isEditing && !backTo;
134+
133135
const blinkOpacity = useSharedValue(0);
134136
const blinkStyle = useAnimatedStyle(() => ({
135137
opacity: blinkOpacity.get(),
@@ -442,8 +444,14 @@ function IOURequestStepScan({
442444

443445
// If there was no reportID, then that means the user started this flow from the global + menu
444446
// and an optimistic reportID was generated. In that case, the next step is to select the participants for this expense.
445-
if (iouType === CONST.IOU.TYPE.CREATE && isPaidGroupPolicy(activePolicy) && activePolicy?.isPolicyExpenseChatEnabled && !shouldRestrictUserBillableActions(activePolicy.id)) {
446-
const activePolicyExpenseChat = getPolicyExpenseChat(currentUserPersonalDetails.accountID, activePolicy?.id);
447+
const activePolicyExpenseChat = getPolicyExpenseChat(currentUserPersonalDetails.accountID, activePolicy?.id);
448+
if (
449+
(!initialTransaction?.participants || initialTransaction?.participants?.at(0)?.reportID === activePolicyExpenseChat?.reportID) &&
450+
iouType === CONST.IOU.TYPE.CREATE &&
451+
isPaidGroupPolicy(activePolicy) &&
452+
activePolicy?.isPolicyExpenseChatEnabled &&
453+
!shouldRestrictUserBillableActions(activePolicy.id)
454+
) {
447455
const setParticipantsPromises = files.map((receiptFile) => setMoneyRequestParticipantsFromReport(receiptFile.transactionID, activePolicyExpenseChat));
448456
Promise.all(setParticipantsPromises).then(() =>
449457
Navigation.navigate(
@@ -456,6 +464,12 @@ function IOURequestStepScan({
456464
),
457465
);
458466
} else {
467+
// If the initial transaction already has the participants selected, then we can skip the participants step and go straight to the confirmation step.
468+
if (initialTransaction?.participants && initialTransaction?.participants.length > 0) {
469+
const setParticipantsPromises = files.map((receiptFile) => setMoneyRequestParticipants(receiptFile.transactionID, initialTransaction?.participants));
470+
Promise.all(setParticipantsPromises).then(() => navigateToConfirmationPage(false, initialTransaction?.reportID));
471+
return;
472+
}
459473
navigateToParticipantPage(iouType, initialTransactionID, reportID);
460474
}
461475
},
@@ -464,16 +478,18 @@ function IOURequestStepScan({
464478
report,
465479
reportNameValuePairs,
466480
iouType,
481+
initialTransaction?.participants,
482+
initialTransaction?.currency,
483+
initialTransaction?.reportID,
467484
activePolicy,
468485
initialTransactionID,
469486
navigateToConfirmationPage,
470487
shouldSkipConfirmation,
471488
personalDetails,
472489
createTransaction,
473-
currentUserPersonalDetails.login,
490+
currentUserPersonalDetails?.login,
474491
currentUserPersonalDetails.accountID,
475492
reportID,
476-
initialTransaction?.currency,
477493
transactionTaxCode,
478494
transactionTaxAmount,
479495
policy,
@@ -532,7 +548,7 @@ function IOURequestStepScan({
532548

533549
files.forEach((file, index) => {
534550
const transaction =
535-
!isBetaEnabled(CONST.BETAS.NEWDOT_MULTI_FILES_DRAG_AND_DROP) || (index === 0 && transactions.length === 1 && !initialTransaction?.receipt)
551+
!shouldAcceptMultipleFiles || (index === 0 && transactions.length === 1 && !initialTransaction?.receipt?.source)
536552
? (initialTransaction as Partial<Transaction>)
537553
: buildOptimisticTransactionAndCreateDraft({
538554
initialTransaction: initialTransaction as Partial<Transaction>,
@@ -817,7 +833,7 @@ function IOURequestStepScan({
817833
<View style={[styles.flexRow, styles.justifyContentAround, styles.alignItemsCenter, styles.pv3]}>
818834
<AttachmentPicker
819835
onOpenPicker={() => setIsLoaderVisible(true)}
820-
fileLimit={isBetaEnabled(CONST.BETAS.NEWDOT_MULTI_FILES_DRAG_AND_DROP) ? CONST.API_ATTACHMENT_VALIDATIONS.MAX_FILE_LIMIT : 1}
836+
fileLimit={shouldAcceptMultipleFiles ? CONST.API_ATTACHMENT_VALIDATIONS.MAX_FILE_LIMIT : 1}
821837
>
822838
{({openPicker}) => (
823839
<PressableWithFeedback

src/pages/iou/request/step/IOURequestStepScan/index.tsx

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ function IOURequestStepScan({
121121
const [dismissedProductTraining] = useOnyx(ONYXKEYS.NVP_DISMISSED_PRODUCT_TRAINING, {canBeMissing: true});
122122
const isEditing = action === CONST.IOU.ACTION.EDIT;
123123
const canUseMultiScan = isBetaEnabled(CONST.BETAS.NEWDOT_MULTI_SCAN) && !isEditing && iouType !== CONST.IOU.TYPE.SPLIT && !backTo && !backToReport;
124-
const isReplacingReceipt = isEditing && hasReceipt(initialTransaction);
124+
const isReplacingReceipt = (isEditing && hasReceipt(initialTransaction)) || (!!initialTransaction?.receipt && !!backTo);
125125

126126
const [optimisticTransactions] = useOnyx(ONYXKEYS.COLLECTION.TRANSACTION_DRAFT, {
127127
selector: (items) => Object.values(items ?? {}),
@@ -317,7 +317,7 @@ function IOURequestStepScan({
317317
}, [backTo]);
318318

319319
const navigateToConfirmationPage = useCallback(
320-
(isTestTransaction = false, reportIDParam: string | undefined = undefined) => {
320+
(shouldNavigateToSubmit = false, reportIDParam: string | undefined = undefined) => {
321321
switch (iouType) {
322322
case CONST.IOU.TYPE.REQUEST:
323323
Navigation.navigate(ROUTES.MONEY_REQUEST_STEP_CONFIRMATION.getRoute(CONST.IOU.ACTION.CREATE, CONST.IOU.TYPE.SUBMIT, initialTransactionID, reportID, backToReport));
@@ -329,7 +329,7 @@ function IOURequestStepScan({
329329
Navigation.navigate(
330330
ROUTES.MONEY_REQUEST_STEP_CONFIRMATION.getRoute(
331331
CONST.IOU.ACTION.CREATE,
332-
isTestTransaction ? CONST.IOU.TYPE.SUBMIT : iouType,
332+
shouldNavigateToSubmit ? CONST.IOU.TYPE.SUBMIT : iouType,
333333
initialTransactionID,
334334
// eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing
335335
reportIDParam || reportID,
@@ -505,8 +505,14 @@ function IOURequestStepScan({
505505

506506
// If there was no reportID, then that means the user started this flow from the global + menu
507507
// and an optimistic reportID was generated. In that case, the next step is to select the participants for this expense.
508-
if (iouType === CONST.IOU.TYPE.CREATE && isPaidGroupPolicy(activePolicy) && activePolicy?.isPolicyExpenseChatEnabled && !shouldRestrictUserBillableActions(activePolicy.id)) {
509-
const activePolicyExpenseChat = getPolicyExpenseChat(currentUserPersonalDetails.accountID, activePolicy?.id);
508+
const activePolicyExpenseChat = getPolicyExpenseChat(currentUserPersonalDetails.accountID, activePolicy?.id);
509+
if (
510+
(!initialTransaction?.participants || initialTransaction?.participants?.at(0)?.reportID === activePolicyExpenseChat?.reportID) &&
511+
iouType === CONST.IOU.TYPE.CREATE &&
512+
isPaidGroupPolicy(activePolicy) &&
513+
activePolicy?.isPolicyExpenseChatEnabled &&
514+
!shouldRestrictUserBillableActions(activePolicy.id)
515+
) {
510516
const setParticipantsPromises = files.map((receiptFile) => setMoneyRequestParticipantsFromReport(receiptFile.transactionID, activePolicyExpenseChat));
511517
Promise.all(setParticipantsPromises).then(() =>
512518
Navigation.navigate(
@@ -519,6 +525,12 @@ function IOURequestStepScan({
519525
),
520526
);
521527
} else {
528+
// If the initial transaction already has the participants selected, then we can skip the participants step and go straight to the confirmation step.
529+
if (initialTransaction?.participants && initialTransaction?.participants.length > 0) {
530+
const setParticipantsPromises = files.map((receiptFile) => setMoneyRequestParticipants(receiptFile.transactionID, initialTransaction?.participants));
531+
Promise.all(setParticipantsPromises).then(() => navigateToConfirmationPage(true, initialTransaction?.reportID));
532+
return;
533+
}
522534
navigateToParticipantPage(iouType, initialTransactionID, reportID);
523535
}
524536
},
@@ -527,6 +539,9 @@ function IOURequestStepScan({
527539
report,
528540
reportNameValuePairs,
529541
iouType,
542+
initialTransaction?.participants,
543+
initialTransaction?.currency,
544+
initialTransaction?.reportID,
530545
activePolicy,
531546
initialTransactionID,
532547
navigateToConfirmationPage,
@@ -536,7 +551,6 @@ function IOURequestStepScan({
536551
currentUserPersonalDetails?.login,
537552
currentUserPersonalDetails.accountID,
538553
reportID,
539-
initialTransaction?.currency,
540554
transactionTaxCode,
541555
transactionTaxAmount,
542556
policy,
@@ -573,7 +587,7 @@ function IOURequestStepScan({
573587
files.forEach((file, index) => {
574588
const source = URL.createObjectURL(file as Blob);
575589
const transaction =
576-
!isBetaEnabled(CONST.BETAS.NEWDOT_MULTI_FILES_DRAG_AND_DROP) || (index === 0 && transactions.length === 1 && !initialTransaction?.receipt)
590+
!shouldAcceptMultipleFiles || (index === 0 && transactions.length === 1 && !initialTransaction?.receipt?.source)
577591
? (initialTransaction as Partial<Transaction>)
578592
: buildOptimisticTransactionAndCreateDraft({
579593
initialTransaction: initialTransaction as Partial<Transaction>,

0 commit comments

Comments
 (0)