mirror of
https://github.com/tavo-wasd-gh/conex-builder.git
synced 2025-06-07 12:13:30 -06:00
118 lines
4.3 KiB
JavaScript
118 lines
4.3 KiB
JavaScript
function isFormValid(form) {
|
|
return form.checkValidity();
|
|
}
|
|
|
|
function removePayPalElement() {
|
|
const element = document.getElementById('paypal-button-container');
|
|
element.innerHTML = '';
|
|
element.style.display = 'none';
|
|
}
|
|
|
|
function hideDialog() {
|
|
document.getElementById('overlay').style.display = 'none';
|
|
document.getElementById('dialog').style.display = 'none';
|
|
document.getElementById('openDialogButton').style.display = 'block';
|
|
}
|
|
|
|
function renderPaypalElement() {
|
|
const element = document.getElementById('paypal-button-container');
|
|
element.innerHTML = '';
|
|
element.style.display = 'block';
|
|
|
|
paypal.Buttons({
|
|
style: {color: 'blue', shape: 'pill', label: 'pay', height: 40},
|
|
|
|
// Call your server to set up the transaction
|
|
createOrder: function(data, actions) {
|
|
return fetch('/demo/checkout/api/paypal/order/create/', {
|
|
method: 'post'
|
|
}).then(function(res) {
|
|
return res.json();
|
|
}).then(function(orderData) {
|
|
return orderData.id;
|
|
});
|
|
},
|
|
|
|
// Call your server to finalize the transaction
|
|
onApprove: function(data, actions) {
|
|
return fetch('/demo/checkout/api/paypal/order/' + data.orderID + '/capture/', {
|
|
method: 'post'
|
|
}).then(function(res) {
|
|
return res.json();
|
|
}).then(function(orderData) {
|
|
var errorDetail = Array.isArray(orderData.details) && orderData.details[0];
|
|
|
|
// (1) Recoverable INSTRUMENT_DECLINED -> call actions.restart()
|
|
if (errorDetail && errorDetail.issue === 'INSTRUMENT_DECLINED') {
|
|
return actions.restart();
|
|
}
|
|
|
|
// (2) Other non-recoverable errors -> Show a failure message
|
|
if (errorDetail) {
|
|
var msg = 'Sorry, your transaction could not be processed.';
|
|
if (errorDetail.description) msg += '\n\n' + errorDetail.description;
|
|
if (orderData.debug_id) msg += ' (' + orderData.debug_id + ')';
|
|
return alert(msg); // TODO show a prettier message
|
|
}
|
|
|
|
// (3) Successful transaction -> Show confirmation or thank you
|
|
// Grab transaction.status and transaction.id, call up php and save it in db.
|
|
// var transaction = orderData.purchase_units[0].payments.captures[0];
|
|
// alert('Transaction '+ transaction.status + ': ' + transaction.id + '\n\nSee console for all available details');
|
|
|
|
// Replace the above to show a success message within this page, e.g.
|
|
element.innerHTML = '';
|
|
element.innerHTML = '<h3>Thank you for your payment!</h3>';
|
|
document.getElementById('mainForm').submit();
|
|
});
|
|
}
|
|
}).render('#paypal-button-container');
|
|
}
|
|
|
|
document.getElementById('openDialogButton').addEventListener('click', () => {
|
|
document.getElementById('overlay').style.display = 'block';
|
|
document.getElementById('dialog').style.display = 'block';
|
|
document.getElementById('openDialogButton').style.display = 'none';
|
|
});
|
|
|
|
document.getElementById('submitDialogButton').addEventListener('click', () => {
|
|
const form = document.getElementById('mainForm');
|
|
|
|
['name', 'email', 'phone'].forEach(id => {
|
|
const input = document.createElement('input');
|
|
input.type = 'hidden';
|
|
input.name = id;
|
|
input.value = document.getElementById(id).value;
|
|
form.appendChild(input);
|
|
});
|
|
|
|
if (isFormValid(form)) {
|
|
document.getElementById('submitDialogButton').style.display = 'none';
|
|
document.getElementById('error-message').style.display = 'none';
|
|
renderPaypalElement();
|
|
} else {
|
|
document.getElementById('submitDialogButton').style.display = 'inline';
|
|
document.getElementById('error-message').style.display = 'block';
|
|
removePayPalElement();
|
|
}
|
|
|
|
// const orderIDInput = document.createElement('input');
|
|
// orderIDInput.type = 'hidden';
|
|
// orderIDInput.name = 'paypalOrderID';
|
|
// orderIDInput.value = paypalOrderID;
|
|
// form.appendChild(orderIDInput);
|
|
// form.submit();
|
|
});
|
|
|
|
document.getElementById('cancelDialogButton').addEventListener('click', () => {
|
|
hideDialog();
|
|
});
|
|
|
|
document.addEventListener('click', (event) => {
|
|
const dialog = document.getElementById('dialog');
|
|
const openDialogButton = document.getElementById('openDialogButton');
|
|
// If the click is outside the dialog and not on the openDialogButton, hide the dialog
|
|
if (!dialog.contains(event.target) && !openDialogButton.contains(event.target)) {
|
|
hideDialog();
|
|
}
|
|
});
|