mirror of
https://github.com/woocommerce/woocommerce-paypal-payments.git
synced 2025-08-31 04:58:28 +08:00
148 lines
5.3 KiB
JavaScript
148 lines
5.3 KiB
JavaScript
document.addEventListener(
|
|
'DOMContentLoaded',
|
|
() => {
|
|
const resubscribeBtn = jQuery(PayPalCommerceGatewayWebhooksStatus.resubscribe.button);
|
|
|
|
resubscribeBtn.click(async () => {
|
|
resubscribeBtn.prop('disabled', true);
|
|
|
|
const response = await fetch(
|
|
PayPalCommerceGatewayWebhooksStatus.resubscribe.endpoint,
|
|
{
|
|
method: 'POST',
|
|
headers: {
|
|
'content-type': 'application/json'
|
|
},
|
|
body: JSON.stringify(
|
|
{
|
|
nonce: PayPalCommerceGatewayWebhooksStatus.resubscribe.nonce,
|
|
}
|
|
)
|
|
}
|
|
);
|
|
|
|
const reportError = error => {
|
|
const msg = PayPalCommerceGatewayWebhooksStatus.resubscribe.failureMessage + ' ' + error;
|
|
alert(msg);
|
|
}
|
|
|
|
if (!response.ok) {
|
|
try {
|
|
const result = await response.json();
|
|
reportError(result.data);
|
|
} catch (exc) {
|
|
console.error(exc);
|
|
reportError(response.status);
|
|
}
|
|
}
|
|
|
|
window.location.reload();
|
|
});
|
|
|
|
function sleep(ms) {
|
|
return new Promise(resolve => setTimeout(resolve, ms));
|
|
}
|
|
|
|
const simulateBtn = jQuery(PayPalCommerceGatewayWebhooksStatus.simulation.start.button);
|
|
simulateBtn.click(async () => {
|
|
simulateBtn.prop('disabled', true);
|
|
|
|
try {
|
|
const response = await fetch(
|
|
PayPalCommerceGatewayWebhooksStatus.simulation.start.endpoint,
|
|
{
|
|
method: 'POST',
|
|
headers: {
|
|
'content-type': 'application/json'
|
|
},
|
|
body: JSON.stringify(
|
|
{
|
|
nonce: PayPalCommerceGatewayWebhooksStatus.simulation.start.nonce,
|
|
}
|
|
)
|
|
}
|
|
);
|
|
|
|
const reportError = error => {
|
|
const msg = PayPalCommerceGatewayWebhooksStatus.simulation.start.failureMessage + ' ' + error;
|
|
alert(msg);
|
|
};
|
|
|
|
if (!response.ok) {
|
|
try {
|
|
const result = await response.json();
|
|
reportError(result.data);
|
|
} catch (exc) {
|
|
console.error(exc);
|
|
reportError(response.status);
|
|
}
|
|
|
|
return;
|
|
}
|
|
|
|
const showStatus = html => {
|
|
let statusBlock = simulateBtn.siblings('.ppcp-webhooks-status-text');
|
|
if (!statusBlock.length) {
|
|
statusBlock = jQuery('<div class="ppcp-webhooks-status-text"></div>').insertAfter(simulateBtn);
|
|
}
|
|
statusBlock.html(html);
|
|
};
|
|
|
|
simulateBtn.siblings('.description').hide();
|
|
|
|
showStatus(
|
|
PayPalCommerceGatewayWebhooksStatus.simulation.state.waitingMessage +
|
|
'<span class="spinner is-active" style="float: none;"></span>'
|
|
);
|
|
|
|
const delay = 2000;
|
|
const retriesBeforeErrorMessage = 15;
|
|
const maxRetries = 30;
|
|
|
|
for (let i = 0; i < maxRetries; i++) {
|
|
await sleep(delay);
|
|
|
|
const stateResponse = await fetch(
|
|
PayPalCommerceGatewayWebhooksStatus.simulation.state.endpoint,
|
|
{
|
|
method: 'GET',
|
|
}
|
|
);
|
|
|
|
try {
|
|
const result = await stateResponse.json();
|
|
|
|
if (!stateResponse.ok || !result.success) {
|
|
console.error('Simulation state query failed: ' + result.data);
|
|
continue;
|
|
}
|
|
|
|
const state = result.data.state;
|
|
if (state === PayPalCommerceGatewayWebhooksStatus.simulation.state.successState) {
|
|
showStatus(
|
|
'<span class="success">' +
|
|
'✔️ ' +
|
|
PayPalCommerceGatewayWebhooksStatus.simulation.state.successMessage +
|
|
'</span>'
|
|
);
|
|
return;
|
|
}
|
|
} catch (exc) {
|
|
console.error(exc);
|
|
}
|
|
|
|
if (i === retriesBeforeErrorMessage) {
|
|
showStatus(
|
|
'<span class="error">' +
|
|
PayPalCommerceGatewayWebhooksStatus.simulation.state.tooLongDelayMessage +
|
|
'</span>'
|
|
);
|
|
}
|
|
}
|
|
|
|
} finally {
|
|
simulateBtn.prop('disabled', false);
|
|
}
|
|
});
|
|
}
|
|
);
|