mirror of
https://github.com/mempool/mempool.git
synced 2025-03-13 11:36:07 +01:00
[accelerator] avoid duplicated accel request with double click
This commit is contained in:
parent
31469ad361
commit
3e78b636d6
1 changed files with 31 additions and 2 deletions
|
@ -75,6 +75,7 @@ export class AccelerateCheckout implements OnInit, OnDestroy {
|
||||||
@Output() changeMode = new EventEmitter<boolean>();
|
@Output() changeMode = new EventEmitter<boolean>();
|
||||||
|
|
||||||
calculating = true;
|
calculating = true;
|
||||||
|
processing = false;
|
||||||
selectedOption: 'wait' | 'accel';
|
selectedOption: 'wait' | 'accel';
|
||||||
cantPayReason = '';
|
cantPayReason = '';
|
||||||
quoteError = ''; // error fetching estimate or initial data
|
quoteError = ''; // error fetching estimate or initial data
|
||||||
|
@ -378,9 +379,10 @@ export class AccelerateCheckout implements OnInit, OnDestroy {
|
||||||
* Account-based acceleration request
|
* Account-based acceleration request
|
||||||
*/
|
*/
|
||||||
accelerateWithMempoolAccount(): void {
|
accelerateWithMempoolAccount(): void {
|
||||||
if (!this.canPay || this.calculating) {
|
if (!this.canPay || this.calculating || this.processing) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
this.processing = true;
|
||||||
if (this.accelerationSubscription) {
|
if (this.accelerationSubscription) {
|
||||||
this.accelerationSubscription.unsubscribe();
|
this.accelerationSubscription.unsubscribe();
|
||||||
}
|
}
|
||||||
|
@ -390,6 +392,7 @@ export class AccelerateCheckout implements OnInit, OnDestroy {
|
||||||
this.accelerationUUID
|
this.accelerationUUID
|
||||||
).subscribe({
|
).subscribe({
|
||||||
next: () => {
|
next: () => {
|
||||||
|
this.processing = false;
|
||||||
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.showSuccess = true;
|
this.showSuccess = true;
|
||||||
|
@ -397,6 +400,7 @@ export class AccelerateCheckout implements OnInit, OnDestroy {
|
||||||
this.moveToStep('paid');
|
this.moveToStep('paid');
|
||||||
},
|
},
|
||||||
error: (response) => {
|
error: (response) => {
|
||||||
|
this.processing = false;
|
||||||
this.accelerateError = response.error;
|
this.accelerateError = response.error;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -466,10 +470,14 @@ export class AccelerateCheckout implements OnInit, OnDestroy {
|
||||||
* APPLE PAY
|
* APPLE PAY
|
||||||
*/
|
*/
|
||||||
async requestApplePayPayment(): Promise<void> {
|
async requestApplePayPayment(): Promise<void> {
|
||||||
|
if (this.processing) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
if (this.conversionsSubscription) {
|
if (this.conversionsSubscription) {
|
||||||
this.conversionsSubscription.unsubscribe();
|
this.conversionsSubscription.unsubscribe();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this.processing = true;
|
||||||
this.conversionsSubscription = this.stateService.conversions$.subscribe(
|
this.conversionsSubscription = this.stateService.conversions$.subscribe(
|
||||||
async (conversions) => {
|
async (conversions) => {
|
||||||
this.conversions = conversions;
|
this.conversions = conversions;
|
||||||
|
@ -494,6 +502,7 @@ export class AccelerateCheckout implements OnInit, OnDestroy {
|
||||||
console.error(`Unable to find apple pay button id='apple-pay-button'`);
|
console.error(`Unable to find apple pay button id='apple-pay-button'`);
|
||||||
// Try again
|
// Try again
|
||||||
setTimeout(this.requestApplePayPayment.bind(this), 500);
|
setTimeout(this.requestApplePayPayment.bind(this), 500);
|
||||||
|
this.processing = false;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
this.loadingApplePay = false;
|
this.loadingApplePay = false;
|
||||||
|
@ -505,6 +514,7 @@ export class AccelerateCheckout implements OnInit, OnDestroy {
|
||||||
if (!card || !card.brand || !card.expMonth || !card.expYear || !card.last4) {
|
if (!card || !card.brand || !card.expMonth || !card.expYear || !card.last4) {
|
||||||
console.error(`Cannot retreive payment card details`);
|
console.error(`Cannot retreive payment card details`);
|
||||||
this.accelerateError = 'apple_pay_no_card_details';
|
this.accelerateError = 'apple_pay_no_card_details';
|
||||||
|
this.processing = false;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const cardTag = md5(`${card.brand}${card.expMonth}${card.expYear}${card.last4}`.toLowerCase());
|
const cardTag = md5(`${card.brand}${card.expMonth}${card.expYear}${card.last4}`.toLowerCase());
|
||||||
|
@ -516,6 +526,7 @@ export class AccelerateCheckout implements OnInit, OnDestroy {
|
||||||
this.accelerationUUID
|
this.accelerationUUID
|
||||||
).subscribe({
|
).subscribe({
|
||||||
next: () => {
|
next: () => {
|
||||||
|
this.processing = false;
|
||||||
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.applePay) {
|
if (this.applePay) {
|
||||||
|
@ -526,6 +537,7 @@ export class AccelerateCheckout implements OnInit, OnDestroy {
|
||||||
}, 1000);
|
}, 1000);
|
||||||
},
|
},
|
||||||
error: (response) => {
|
error: (response) => {
|
||||||
|
this.processing = false;
|
||||||
this.accelerateError = response.error;
|
this.accelerateError = response.error;
|
||||||
if (!(response.status === 403 && response.error === 'not_available')) {
|
if (!(response.status === 403 && response.error === 'not_available')) {
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
|
@ -537,6 +549,7 @@ export class AccelerateCheckout implements OnInit, OnDestroy {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
|
this.processing = false;
|
||||||
let errorMessage = `Tokenization failed with status: ${tokenResult.status}`;
|
let errorMessage = `Tokenization failed with status: ${tokenResult.status}`;
|
||||||
if (tokenResult.errors) {
|
if (tokenResult.errors) {
|
||||||
errorMessage += ` and errors: ${JSON.stringify(
|
errorMessage += ` and errors: ${JSON.stringify(
|
||||||
|
@ -547,6 +560,7 @@ export class AccelerateCheckout implements OnInit, OnDestroy {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
|
this.processing = false;
|
||||||
console.error(e);
|
console.error(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -557,10 +571,14 @@ export class AccelerateCheckout implements OnInit, OnDestroy {
|
||||||
* GOOGLE PAY
|
* GOOGLE PAY
|
||||||
*/
|
*/
|
||||||
async requestGooglePayPayment(): Promise<void> {
|
async requestGooglePayPayment(): Promise<void> {
|
||||||
|
if (this.processing) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
if (this.conversionsSubscription) {
|
if (this.conversionsSubscription) {
|
||||||
this.conversionsSubscription.unsubscribe();
|
this.conversionsSubscription.unsubscribe();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this.processing = true;
|
||||||
this.conversionsSubscription = this.stateService.conversions$.subscribe(
|
this.conversionsSubscription = this.stateService.conversions$.subscribe(
|
||||||
async (conversions) => {
|
async (conversions) => {
|
||||||
this.conversions = conversions;
|
this.conversions = conversions;
|
||||||
|
@ -595,6 +613,7 @@ export class AccelerateCheckout implements OnInit, OnDestroy {
|
||||||
if (!card || !card.brand || !card.expMonth || !card.expYear || !card.last4) {
|
if (!card || !card.brand || !card.expMonth || !card.expYear || !card.last4) {
|
||||||
console.error(`Cannot retreive payment card details`);
|
console.error(`Cannot retreive payment card details`);
|
||||||
this.accelerateError = 'apple_pay_no_card_details';
|
this.accelerateError = 'apple_pay_no_card_details';
|
||||||
|
this.processing = false;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const cardTag = md5(`${card.brand}${card.expMonth}${card.expYear}${card.last4}`.toLowerCase());
|
const cardTag = md5(`${card.brand}${card.expMonth}${card.expYear}${card.last4}`.toLowerCase());
|
||||||
|
@ -606,6 +625,7 @@ export class AccelerateCheckout implements OnInit, OnDestroy {
|
||||||
this.accelerationUUID
|
this.accelerationUUID
|
||||||
).subscribe({
|
).subscribe({
|
||||||
next: () => {
|
next: () => {
|
||||||
|
this.processing = false;
|
||||||
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) {
|
||||||
|
@ -616,6 +636,7 @@ export class AccelerateCheckout implements OnInit, OnDestroy {
|
||||||
}, 1000);
|
}, 1000);
|
||||||
},
|
},
|
||||||
error: (response) => {
|
error: (response) => {
|
||||||
|
this.processing = false;
|
||||||
this.accelerateError = response.error;
|
this.accelerateError = response.error;
|
||||||
if (!(response.status === 403 && response.error === 'not_available')) {
|
if (!(response.status === 403 && response.error === 'not_available')) {
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
|
@ -627,6 +648,7 @@ export class AccelerateCheckout implements OnInit, OnDestroy {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
|
this.processing = false;
|
||||||
let errorMessage = `Tokenization failed with status: ${tokenResult.status}`;
|
let errorMessage = `Tokenization failed with status: ${tokenResult.status}`;
|
||||||
if (tokenResult.errors) {
|
if (tokenResult.errors) {
|
||||||
errorMessage += ` and errors: ${JSON.stringify(
|
errorMessage += ` and errors: ${JSON.stringify(
|
||||||
|
@ -644,10 +666,14 @@ export class AccelerateCheckout implements OnInit, OnDestroy {
|
||||||
* CASHAPP
|
* CASHAPP
|
||||||
*/
|
*/
|
||||||
async requestCashAppPayment(): Promise<void> {
|
async requestCashAppPayment(): Promise<void> {
|
||||||
|
if (this.processing) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
if (this.conversionsSubscription) {
|
if (this.conversionsSubscription) {
|
||||||
this.conversionsSubscription.unsubscribe();
|
this.conversionsSubscription.unsubscribe();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this.processing = true;
|
||||||
this.conversionsSubscription = this.stateService.conversions$.subscribe(
|
this.conversionsSubscription = this.stateService.conversions$.subscribe(
|
||||||
async (conversions) => {
|
async (conversions) => {
|
||||||
this.conversions = conversions;
|
this.conversions = conversions;
|
||||||
|
@ -678,6 +704,7 @@ export class AccelerateCheckout implements OnInit, OnDestroy {
|
||||||
this.cashAppPay.addEventListener('ontokenization', event => {
|
this.cashAppPay.addEventListener('ontokenization', event => {
|
||||||
const { tokenResult, error } = event.detail;
|
const { tokenResult, error } = event.detail;
|
||||||
if (error) {
|
if (error) {
|
||||||
|
this.processing = false;
|
||||||
this.accelerateError = error;
|
this.accelerateError = error;
|
||||||
} else if (tokenResult.status === 'OK') {
|
} else if (tokenResult.status === 'OK') {
|
||||||
this.servicesApiService.accelerateWithCashApp$(
|
this.servicesApiService.accelerateWithCashApp$(
|
||||||
|
@ -688,6 +715,7 @@ export class AccelerateCheckout implements OnInit, OnDestroy {
|
||||||
this.accelerationUUID
|
this.accelerationUUID
|
||||||
).subscribe({
|
).subscribe({
|
||||||
next: () => {
|
next: () => {
|
||||||
|
this.processing = false;
|
||||||
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.cashAppPay) {
|
if (this.cashAppPay) {
|
||||||
|
@ -702,6 +730,7 @@ export class AccelerateCheckout implements OnInit, OnDestroy {
|
||||||
}, 1000);
|
}, 1000);
|
||||||
},
|
},
|
||||||
error: (response) => {
|
error: (response) => {
|
||||||
|
this.processing = false;
|
||||||
this.accelerateError = response.error;
|
this.accelerateError = response.error;
|
||||||
if (!(response.status === 403 && response.error === 'not_available')) {
|
if (!(response.status === 403 && response.error === 'not_available')) {
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
|
|
Loading…
Add table
Reference in a new issue