Skip to content

Commit 5217d69

Browse files
authored
feat(EMI-3002): reset payment params on submit (#16485)
* reset params on submit and error * fix tests * add setupFutureUsage to initial params * update test
1 parent 0e3a1e7 commit 5217d69

File tree

2 files changed

+35
-10
lines changed

2 files changed

+35
-10
lines changed

src/Apps/Order2/Routes/Checkout/Components/PaymentStep/Order2PaymentForm.tsx

Lines changed: 32 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,7 @@ export const Order2PaymentForm: React.FC<Order2PaymentFormProps> = ({
101101

102102
const options: StripeElementsOptions = {
103103
mode: "payment",
104+
setupFutureUsage: "off_session",
104105
paymentMethodOptions: {
105106
us_bank_account: {
106107
verification_method: "instant",
@@ -372,9 +373,31 @@ const PaymentFormContent: React.FC<PaymentFormContentProps> = ({
372373
)
373374
}
374375

376+
const resetElementsToInitialParams = () => {
377+
elements.update({
378+
mode: "payment",
379+
paymentMethodOptions: {
380+
us_bank_account: {
381+
verification_method: "instant",
382+
financial_connections: {
383+
permissions: ["payment_method", "balances", "ownership"],
384+
prefetch: ["balances"],
385+
},
386+
},
387+
},
388+
setupFutureUsage: "off_session",
389+
// @ts-ignore Stripe type issue
390+
captureMethod: null,
391+
// @ts-ignore Stripe type issue
392+
paymentMethodTypes: null,
393+
onBehalfOf: order.seller?.merchantAccount?.externalId,
394+
})
395+
}
396+
375397
const handleError = (error: { message?: string | JSX.Element }) => {
376398
setErrorMessage(error.message || defaultErrorMessage)
377399
setIsSubmittingToStripe(false)
400+
resetElementsToInitialParams()
378401
}
379402

380403
const handleSubmit = async event => {
@@ -403,8 +426,6 @@ const PaymentFormContent: React.FC<PaymentFormContentProps> = ({
403426
if (selectedPaymentMethod === "stripe-card") {
404427
elements.update({
405428
captureMethod: "manual",
406-
setupFutureUsage: "off_session",
407-
mode: "payment",
408429
// @ts-ignore Stripe type issue
409430
paymentMethodOptions: null,
410431
})
@@ -413,16 +434,16 @@ const PaymentFormContent: React.FC<PaymentFormContentProps> = ({
413434
captureMethod: "automatic",
414435
setupFutureUsage: null,
415436
mode: "setup",
416-
payment_method_types: ["us_bank_account"],
437+
paymentMethodTypes: ["us_bank_account"],
417438
// @ts-ignore Stripe type issue
418-
on_behalf_of: null,
439+
onBehalfOf: null,
419440
})
420441
} else if (selectedPaymentMethod === "stripe-sepa") {
421442
elements.update({
422443
captureMethod: "automatic",
423444
setupFutureUsage: null,
424445
mode: "setup",
425-
payment_method_types: ["sepa_debit"],
446+
paymentMethodTypes: ["sepa_debit"],
426447
})
427448
}
428449

@@ -501,9 +522,11 @@ const PaymentFormContent: React.FC<PaymentFormContentProps> = ({
501522
} catch (error) {
502523
logger.error("Error while updating order payment method", error)
503524
handleError({ message: defaultErrorMessage })
525+
return
504526
} finally {
505527
setPaymentComplete()
506528
setIsSubmittingToStripe(false)
529+
resetElementsToInitialParams()
507530
}
508531
}
509532

@@ -532,8 +555,10 @@ const PaymentFormContent: React.FC<PaymentFormContentProps> = ({
532555
} catch (error) {
533556
logger.error("Error while updating order payment method", error)
534557
handleError({ message: defaultErrorMessage })
558+
return
535559
} finally {
536560
setIsSubmittingToStripe(false)
561+
resetElementsToInitialParams()
537562
// Resets for the PaymentCompletedView
538563
setSavedPaymentMethod({ savedPaymentMethod: null })
539564
setConfirmationToken({ confirmationToken: null })
@@ -577,8 +602,10 @@ const PaymentFormContent: React.FC<PaymentFormContentProps> = ({
577602
} catch (error) {
578603
logger.error("Error while updating order payment method", error)
579604
handleError({ message: defaultErrorMessage })
605+
return
580606
} finally {
581607
setIsSubmittingToStripe(false)
608+
resetElementsToInitialParams()
582609
setSavedPaymentMethod({
583610
savedPaymentMethod: selectedSavedPaymentMethod,
584611
})

src/Apps/Order2/Routes/Checkout/Components/PaymentStep/__tests__/Order2PaymentForm.jest.tsx

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -319,8 +319,6 @@ describe("Order2PaymentForm", () => {
319319

320320
expect(mockElements.update).toHaveBeenCalledWith({
321321
captureMethod: "manual",
322-
setupFutureUsage: "off_session",
323-
mode: "payment",
324322
paymentMethodOptions: null,
325323
})
326324
})
@@ -347,8 +345,8 @@ describe("Order2PaymentForm", () => {
347345
captureMethod: "automatic",
348346
setupFutureUsage: null,
349347
mode: "setup",
350-
payment_method_types: ["us_bank_account"],
351-
on_behalf_of: null,
348+
paymentMethodTypes: ["us_bank_account"],
349+
onBehalfOf: null,
352350
})
353351
})
354352

@@ -378,7 +376,7 @@ describe("Order2PaymentForm", () => {
378376
captureMethod: "automatic",
379377
setupFutureUsage: null,
380378
mode: "setup",
381-
payment_method_types: ["sepa_debit"],
379+
paymentMethodTypes: ["sepa_debit"],
382380
})
383381
})
384382
})

0 commit comments

Comments
 (0)