[accelerator] keep checkout locked until request completes
This commit is contained in:
		
							parent
							
								
									464fabf137
								
							
						
					
					
						commit
						f49152d09d
					
				| @ -156,7 +156,7 @@ export class AccelerateCheckout implements OnInit, OnDestroy { | |||||||
|         this.accelerateError = null; |         this.accelerateError = null; | ||||||
|         this.timePaid = 0; |         this.timePaid = 0; | ||||||
|         this.btcpayInvoiceFailed = false; |         this.btcpayInvoiceFailed = false; | ||||||
|         this.moveToStep('summary'); |         this.moveToStep('summary', true); | ||||||
|       } else { |       } else { | ||||||
|         this.auth = auth; |         this.auth = auth; | ||||||
|       } |       } | ||||||
| @ -165,11 +165,11 @@ export class AccelerateCheckout implements OnInit, OnDestroy { | |||||||
| 
 | 
 | ||||||
|     const urlParams = new URLSearchParams(window.location.search); |     const urlParams = new URLSearchParams(window.location.search); | ||||||
|     if (urlParams.get('cash_request_id')) { // Redirected from cashapp
 |     if (urlParams.get('cash_request_id')) { // Redirected from cashapp
 | ||||||
|       this.moveToStep('processing'); |       this.moveToStep('processing', true); | ||||||
|       this.insertSquare(); |       this.insertSquare(); | ||||||
|       this.setupSquare(); |       this.setupSquare(); | ||||||
|     } else { |     } else { | ||||||
|       this.moveToStep('summary'); |       this.moveToStep('summary', true); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     this.conversionsSubscription = this.stateService.conversions$.subscribe( |     this.conversionsSubscription = this.stateService.conversions$.subscribe( | ||||||
| @ -194,14 +194,17 @@ export class AccelerateCheckout implements OnInit, OnDestroy { | |||||||
|     } |     } | ||||||
|     if (changes.accelerating && this.accelerating) { |     if (changes.accelerating && this.accelerating) { | ||||||
|       if (this.step === 'processing' || this.step === 'paid') { |       if (this.step === 'processing' || this.step === 'paid') { | ||||||
|         this.moveToStep('success'); |         this.moveToStep('success', true); | ||||||
|       } else { // Edge case where the transaction gets accelerated by someone else or on another session
 |       } else { // Edge case where the transaction gets accelerated by someone else or on another session
 | ||||||
|         this.closeModal(); |         this.closeModal(); | ||||||
|       } |       } | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   moveToStep(step: CheckoutStep): void { |   moveToStep(step: CheckoutStep, force: boolean = false): void { | ||||||
|  |     if (this.isCheckoutLocked > 0 && !force) { | ||||||
|  |       return; | ||||||
|  |     } | ||||||
|     this.processing = false; |     this.processing = false; | ||||||
|     this._step = step; |     this._step = step; | ||||||
|     if (this.timeoutTimer) { |     if (this.timeoutTimer) { | ||||||
| @ -244,7 +247,7 @@ export class AccelerateCheckout implements OnInit, OnDestroy { | |||||||
| 
 | 
 | ||||||
|   closeModal(): void { |   closeModal(): void { | ||||||
|     this.completed.emit(true); |     this.completed.emit(true); | ||||||
|     this.moveToStep('summary'); |     this.moveToStep('summary', true); | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   /** |   /** | ||||||
| @ -395,7 +398,7 @@ export class AccelerateCheckout implements OnInit, OnDestroy { | |||||||
|         this.audioService.playSound('ascend-chime-cartoon'); |         this.audioService.playSound('ascend-chime-cartoon'); | ||||||
|         this.showSuccess = true; |         this.showSuccess = true; | ||||||
|         this.estimateSubscription.unsubscribe(); |         this.estimateSubscription.unsubscribe(); | ||||||
|         this.moveToStep('paid'); |         this.moveToStep('paid', true); | ||||||
|       }, |       }, | ||||||
|       error: (response) => { |       error: (response) => { | ||||||
|         this.processing = false; |         this.processing = false; | ||||||
| @ -505,6 +508,9 @@ export class AccelerateCheckout implements OnInit, OnDestroy { | |||||||
|           } |           } | ||||||
|           this.loadingApplePay = false; |           this.loadingApplePay = false; | ||||||
|           applePayButton.addEventListener('click', async event => { |           applePayButton.addEventListener('click', async event => { | ||||||
|  |             if (this.isCheckoutLocked > 0 || this.isTokenizing > 0) { | ||||||
|  |               return; | ||||||
|  |             } | ||||||
|             event.preventDefault(); |             event.preventDefault(); | ||||||
|             try { |             try { | ||||||
|               // lock the checkout UI and show a loading spinner until the square modals are finished
 |               // lock the checkout UI and show a loading spinner until the square modals are finished
 | ||||||
| @ -540,16 +546,16 @@ export class AccelerateCheckout implements OnInit, OnDestroy { | |||||||
|                     setTimeout(() => { |                     setTimeout(() => { | ||||||
|                       this.isTokenizing--; |                       this.isTokenizing--; | ||||||
|                       this.isCheckoutLocked--; |                       this.isCheckoutLocked--; | ||||||
|                       this.moveToStep('paid'); |                       this.moveToStep('paid', true); | ||||||
|                     }, 1000); |                     }, 1000); | ||||||
|                   }, |                   }, | ||||||
|                   error: (response) => { |                   error: (response) => { | ||||||
|                     this.processing = false; |                     this.processing = false; | ||||||
|                     this.accelerateError = response.error; |                     this.accelerateError = response.error; | ||||||
|                     this.isTokenizing--; |  | ||||||
|                     this.isCheckoutLocked--; |  | ||||||
|                     if (!(response.status === 403 && response.error === 'not_available')) { |                     if (!(response.status === 403 && response.error === 'not_available')) { | ||||||
|                       setTimeout(() => { |                       setTimeout(() => { | ||||||
|  |                         this.isTokenizing--; | ||||||
|  |                         this.isCheckoutLocked--; | ||||||
|                         // Reset everything by reloading the page :D, can be improved
 |                         // Reset everything by reloading the page :D, can be improved
 | ||||||
|                         const urlParams = new URLSearchParams(window.location.search); |                         const urlParams = new URLSearchParams(window.location.search); | ||||||
|                         window.location.assign(window.location.toString().replace(`?cash_request_id=${urlParams.get('cash_request_id')}`, ``)); |                         window.location.assign(window.location.toString().replace(`?cash_request_id=${urlParams.get('cash_request_id')}`, ``)); | ||||||
| @ -620,6 +626,9 @@ export class AccelerateCheckout implements OnInit, OnDestroy { | |||||||
|         this.loadingGooglePay = false; |         this.loadingGooglePay = false; | ||||||
| 
 | 
 | ||||||
|         document.getElementById('google-pay-button').addEventListener('click', async event => { |         document.getElementById('google-pay-button').addEventListener('click', async event => { | ||||||
|  |           if (this.isCheckoutLocked > 0 || this.isTokenizing > 0) { | ||||||
|  |             return; | ||||||
|  |           } | ||||||
|           event.preventDefault(); |           event.preventDefault(); | ||||||
|           try { |           try { | ||||||
|             // lock the checkout UI and show a loading spinner until the square modals are finished
 |             // lock the checkout UI and show a loading spinner until the square modals are finished
 | ||||||
| @ -655,15 +664,15 @@ export class AccelerateCheckout implements OnInit, OnDestroy { | |||||||
|               ).subscribe({ |               ).subscribe({ | ||||||
|                 next: () => { |                 next: () => { | ||||||
|                   this.processing = false; |                   this.processing = false; | ||||||
|                   this.isTokenizing--; |  | ||||||
|                   this.isCheckoutLocked--; |  | ||||||
|                   this.apiService.logAccelerationRequest$(this.tx.txid).subscribe(); |                   this.apiService.logAccelerationRequest$(this.tx.txid).subscribe(); | ||||||
|                   this.audioService.playSound('ascend-chime-cartoon'); |                   this.audioService.playSound('ascend-chime-cartoon'); | ||||||
|                   if (this.googlePay) { |                   if (this.googlePay) { | ||||||
|                     this.googlePay.destroy(); |                     this.googlePay.destroy(); | ||||||
|                   } |                   } | ||||||
|                   setTimeout(() => { |                   setTimeout(() => { | ||||||
|                     this.moveToStep('paid'); |                     this.isTokenizing--; | ||||||
|  |                     this.isCheckoutLocked--; | ||||||
|  |                     this.moveToStep('paid', true); | ||||||
|                   }, 1000); |                   }, 1000); | ||||||
|                 }, |                 }, | ||||||
|                 error: (response) => { |                 error: (response) => { | ||||||
| @ -760,7 +769,7 @@ export class AccelerateCheckout implements OnInit, OnDestroy { | |||||||
|                   this.cashAppPay.destroy(); |                   this.cashAppPay.destroy(); | ||||||
|                 } |                 } | ||||||
|                 setTimeout(() => { |                 setTimeout(() => { | ||||||
|                   this.moveToStep('paid'); |                   this.moveToStep('paid', true); | ||||||
|                   if (window.history.replaceState) { |                   if (window.history.replaceState) { | ||||||
|                     const urlParams = new URLSearchParams(window.location.search); |                     const urlParams = new URLSearchParams(window.location.search); | ||||||
|                     window.history.replaceState(null, null, window.location.toString().replace(`?cash_request_id=${urlParams.get('cash_request_id')}`, '')); |                     window.history.replaceState(null, null, window.location.toString().replace(`?cash_request_id=${urlParams.get('cash_request_id')}`, '')); | ||||||
| @ -834,7 +843,7 @@ export class AccelerateCheckout implements OnInit, OnDestroy { | |||||||
|     this.apiService.logAccelerationRequest$(this.tx.txid).subscribe(); |     this.apiService.logAccelerationRequest$(this.tx.txid).subscribe(); | ||||||
|     this.audioService.playSound('ascend-chime-cartoon'); |     this.audioService.playSound('ascend-chime-cartoon'); | ||||||
|     this.estimateSubscription.unsubscribe(); |     this.estimateSubscription.unsubscribe(); | ||||||
|     this.moveToStep('paid'); |     this.moveToStep('paid', true); | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   isLoggedIn(): boolean { |   isLoggedIn(): boolean { | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user