@@ -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 } )
0 commit comments