2021-01-27 14:53:45 -05:00
|
|
|
// Onboarding.
|
|
|
|
const ppcp_onboarding = {
|
|
|
|
BUTTON_SELECTOR: '[data-paypal-onboard-button]',
|
|
|
|
PAYPAL_JS_ID: 'ppcp-onboarding-paypal-js',
|
|
|
|
_timeout: false,
|
|
|
|
|
|
|
|
init: function() {
|
|
|
|
document.addEventListener('DOMContentLoaded', this.reload);
|
|
|
|
},
|
|
|
|
|
|
|
|
reload: function() {
|
|
|
|
const buttons = document.querySelectorAll(ppcp_onboarding.BUTTON_SELECTOR);
|
|
|
|
|
|
|
|
if (0 === buttons.length) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2022-01-14 14:02:33 +02:00
|
|
|
// Add event listeners to buttons preventing link clicking if PayPal init failed.
|
2021-01-27 14:53:45 -05:00
|
|
|
buttons.forEach(
|
|
|
|
(element) => {
|
|
|
|
if (element.hasAttribute('data-ppcp-button-initialized')) {
|
|
|
|
return;
|
2020-08-31 09:37:15 +03:00
|
|
|
}
|
2021-01-27 14:53:45 -05:00
|
|
|
|
|
|
|
element.addEventListener(
|
|
|
|
'click',
|
|
|
|
(e) => {
|
|
|
|
if (!element.hasAttribute('data-ppcp-button-initialized') || 'undefined' === typeof window.PAYPAL) {
|
|
|
|
e.preventDefault();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
);
|
|
|
|
}
|
|
|
|
);
|
|
|
|
|
|
|
|
// Clear any previous PayPal scripts.
|
|
|
|
[ppcp_onboarding.PAYPAL_JS_ID, 'signup-js', 'biz-js'].forEach(
|
|
|
|
(scriptID) => {
|
|
|
|
const scriptTag = document.getElementById(scriptID);
|
|
|
|
|
|
|
|
if (scriptTag) {
|
|
|
|
scriptTag.parentNode.removeChild(scriptTag);
|
|
|
|
}
|
|
|
|
|
|
|
|
if ('undefined' !== typeof window.PAYPAL) {
|
|
|
|
delete window.PAYPAL;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
);
|
|
|
|
|
|
|
|
// Load PayPal scripts.
|
|
|
|
const paypalScriptTag = document.createElement('script');
|
|
|
|
paypalScriptTag.id = ppcp_onboarding.PAYPAL_JS_ID;
|
|
|
|
paypalScriptTag.src = PayPalCommerceGatewayOnboarding.paypal_js_url;
|
|
|
|
document.body.append(paypalScriptTag);
|
|
|
|
|
|
|
|
if (ppcp_onboarding._timeout) {
|
|
|
|
clearTimeout(ppcp_onboarding._timeout);
|
2020-08-31 09:37:15 +03:00
|
|
|
}
|
2021-01-27 14:53:45 -05:00
|
|
|
|
|
|
|
ppcp_onboarding._timeout = setTimeout(
|
|
|
|
() => {
|
|
|
|
buttons.forEach((element) => { element.setAttribute('data-ppcp-button-initialized', 'true'); });
|
|
|
|
|
|
|
|
if ('undefined' !== window.PAYPAL.apps.Signup) {
|
|
|
|
window.PAYPAL.apps.Signup.render();
|
|
|
|
}
|
|
|
|
},
|
|
|
|
1000
|
|
|
|
);
|
|
|
|
},
|
|
|
|
|
|
|
|
loginSeller: function(env, authCode, sharedId) {
|
|
|
|
fetch(
|
|
|
|
PayPalCommerceGatewayOnboarding.endpoint,
|
|
|
|
{
|
|
|
|
method: 'POST',
|
|
|
|
headers: {
|
|
|
|
'content-type': 'application/json'
|
|
|
|
},
|
|
|
|
body: JSON.stringify(
|
|
|
|
{
|
|
|
|
authCode: authCode,
|
|
|
|
sharedId: sharedId,
|
|
|
|
nonce: PayPalCommerceGatewayOnboarding.nonce,
|
|
|
|
env: env
|
|
|
|
}
|
|
|
|
)
|
|
|
|
}
|
|
|
|
);
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
function ppcp_onboarding_sandboxCallback(...args) {
|
|
|
|
return ppcp_onboarding.loginSeller('sandbox', ...args);
|
|
|
|
}
|
|
|
|
|
|
|
|
function ppcp_onboarding_productionCallback(...args) {
|
|
|
|
return ppcp_onboarding.loginSeller('production', ...args);
|
2020-08-31 09:37:15 +03:00
|
|
|
}
|
2020-09-24 09:58:28 +03:00
|
|
|
|
2020-09-25 09:19:43 +03:00
|
|
|
/**
|
|
|
|
* Toggles the credential input fields.
|
|
|
|
*
|
|
|
|
* @param forProduction
|
|
|
|
*/
|
|
|
|
const credentialToggle = (forProduction) => {
|
|
|
|
|
|
|
|
const sandboxClassSelectors = [
|
2020-09-29 12:48:02 +03:00
|
|
|
'#field-ppcp_disconnect_sandbox',
|
2020-09-25 09:19:43 +03:00
|
|
|
'#field-merchant_email_sandbox',
|
|
|
|
'#field-merchant_id_sandbox',
|
|
|
|
'#field-client_id_sandbox',
|
|
|
|
'#field-client_secret_sandbox',
|
|
|
|
];
|
|
|
|
const productionClassSelectors = [
|
2020-09-29 12:48:02 +03:00
|
|
|
'#field-ppcp_disconnect_production',
|
2020-09-25 09:19:43 +03:00
|
|
|
'#field-merchant_email_production',
|
|
|
|
'#field-merchant_id_production',
|
|
|
|
'#field-client_id_production',
|
|
|
|
'#field-client_secret_production',
|
|
|
|
];
|
|
|
|
|
|
|
|
const selectors = forProduction ? productionClassSelectors : sandboxClassSelectors;
|
|
|
|
document.querySelectorAll(selectors.join()).forEach(
|
|
|
|
(element) => {element.classList.toggle('show')}
|
|
|
|
)
|
2020-10-01 10:00:21 +03:00
|
|
|
};
|
2020-09-25 09:19:43 +03:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Toggles the visibility of the sandbox/production input fields.
|
|
|
|
*
|
|
|
|
* @param showProduction
|
|
|
|
*/
|
|
|
|
const toggleSandboxProduction = (showProduction) => {
|
|
|
|
const productionDisplaySelectors = [
|
|
|
|
'#field-credentials_production_heading',
|
|
|
|
];
|
|
|
|
const productionClassSelectors = [
|
2020-09-29 12:48:02 +03:00
|
|
|
|
|
|
|
'#field-ppcp_disconnect_production',
|
2020-09-25 09:19:43 +03:00
|
|
|
'#field-merchant_email_production',
|
|
|
|
'#field-merchant_id_production',
|
|
|
|
'#field-client_id_production',
|
|
|
|
'#field-client_secret_production',
|
|
|
|
];
|
|
|
|
const sandboxDisplaySelectors = [
|
|
|
|
'#field-credentials_sandbox_heading',
|
|
|
|
];
|
|
|
|
const sandboxClassSelectors = [
|
2020-09-29 12:48:02 +03:00
|
|
|
'#field-ppcp_disconnect_sandbox',
|
2020-09-25 09:19:43 +03:00
|
|
|
'#field-merchant_email_sandbox',
|
|
|
|
'#field-merchant_id_sandbox',
|
|
|
|
'#field-client_id_sandbox',
|
|
|
|
'#field-client_secret_sandbox',
|
|
|
|
];
|
|
|
|
|
2020-09-24 13:40:43 +03:00
|
|
|
if (showProduction) {
|
2020-09-25 09:19:43 +03:00
|
|
|
document.querySelectorAll(productionDisplaySelectors.join()).forEach(
|
|
|
|
(element) => {element.style.display = ''}
|
2020-10-01 10:00:21 +03:00
|
|
|
);
|
2020-09-25 09:19:43 +03:00
|
|
|
document.querySelectorAll(sandboxDisplaySelectors.join()).forEach(
|
|
|
|
(element) => {element.style.display = 'none'}
|
2020-10-01 10:00:21 +03:00
|
|
|
);
|
2020-09-25 11:58:30 +03:00
|
|
|
document.querySelectorAll(productionClassSelectors.join()).forEach(
|
|
|
|
(element) => {element.classList.remove('hide')}
|
2020-10-01 10:00:21 +03:00
|
|
|
);
|
2020-09-25 09:19:43 +03:00
|
|
|
document.querySelectorAll(sandboxClassSelectors.join()).forEach(
|
2020-09-25 11:58:30 +03:00
|
|
|
(element) => {
|
2020-10-01 10:00:21 +03:00
|
|
|
element.classList.remove('show');
|
|
|
|
element.classList.add('hide');
|
2020-09-25 11:58:30 +03:00
|
|
|
}
|
2020-10-01 10:00:21 +03:00
|
|
|
);
|
2020-09-24 13:40:43 +03:00
|
|
|
return;
|
2020-09-24 09:58:28 +03:00
|
|
|
}
|
2020-09-25 09:19:43 +03:00
|
|
|
document.querySelectorAll(productionDisplaySelectors.join()).forEach(
|
|
|
|
(element) => {element.style.display = 'none'}
|
2020-10-01 10:00:21 +03:00
|
|
|
);
|
2020-09-25 09:19:43 +03:00
|
|
|
document.querySelectorAll(sandboxDisplaySelectors.join()).forEach(
|
|
|
|
(element) => {element.style.display = ''}
|
2020-10-01 10:00:21 +03:00
|
|
|
);
|
2020-09-25 11:58:30 +03:00
|
|
|
|
|
|
|
document.querySelectorAll(sandboxClassSelectors.join()).forEach(
|
|
|
|
(element) => {element.classList.remove('hide')}
|
2020-10-01 10:00:21 +03:00
|
|
|
);
|
2020-09-25 09:19:43 +03:00
|
|
|
document.querySelectorAll(productionClassSelectors.join()).forEach(
|
2020-09-25 11:58:30 +03:00
|
|
|
(element) => {
|
2020-10-01 10:00:21 +03:00
|
|
|
element.classList.remove('show');
|
|
|
|
element.classList.add('hide');
|
2020-09-25 11:58:30 +03:00
|
|
|
}
|
2020-09-25 09:19:43 +03:00
|
|
|
)
|
2020-10-01 10:00:21 +03:00
|
|
|
};
|
2020-09-24 09:58:28 +03:00
|
|
|
|
2022-01-14 14:02:33 +02:00
|
|
|
const updateOptionsState = () => {
|
|
|
|
const cardsChk = document.querySelector('#ppcp-onboarding-accept-cards');
|
|
|
|
|
|
|
|
document.querySelectorAll('#ppcp-onboarding-dcc-options input').forEach(input => {
|
|
|
|
input.disabled = !cardsChk.checked;
|
|
|
|
});
|
|
|
|
|
|
|
|
const basicRb = document.querySelector('#ppcp-onboarding-dcc-basic');
|
|
|
|
|
|
|
|
const isExpress = !cardsChk.checked || basicRb.checked;
|
|
|
|
|
|
|
|
const expressButtonSelectors = [
|
|
|
|
'#field-ppcp_onboarding_production_express',
|
|
|
|
'#field-ppcp_onboarding_sandbox_express',
|
|
|
|
];
|
|
|
|
const ppcpButtonSelectors = [
|
|
|
|
'#field-ppcp_onboarding_production_ppcp',
|
|
|
|
'#field-ppcp_onboarding_sandbox_ppcp',
|
|
|
|
];
|
|
|
|
|
|
|
|
document.querySelectorAll(expressButtonSelectors.join()).forEach(
|
|
|
|
element => element.style.display = isExpress ? '' : 'none'
|
|
|
|
);
|
|
|
|
document.querySelectorAll(ppcpButtonSelectors.join()).forEach(
|
|
|
|
element => element.style.display = !isExpress ? '' : 'none'
|
|
|
|
);
|
|
|
|
};
|
|
|
|
|
2020-09-29 12:48:02 +03:00
|
|
|
const disconnect = (event) => {
|
|
|
|
event.preventDefault();
|
|
|
|
const fields = event.target.classList.contains('production') ? [
|
|
|
|
'#field-merchant_email_production input',
|
|
|
|
'#field-merchant_id_production input',
|
|
|
|
'#field-client_id_production input',
|
|
|
|
'#field-client_secret_production input',
|
|
|
|
] : [
|
|
|
|
'#field-merchant_email_sandbox input',
|
|
|
|
'#field-merchant_id_sandbox input',
|
|
|
|
'#field-client_id_sandbox input',
|
|
|
|
'#field-client_secret_sandbox input',
|
|
|
|
];
|
|
|
|
|
|
|
|
document.querySelectorAll(fields.join()).forEach(
|
|
|
|
(element) => {
|
|
|
|
element.value = '';
|
|
|
|
}
|
|
|
|
);
|
|
|
|
document.querySelector('.woocommerce-save-button').click();
|
2020-10-01 10:00:21 +03:00
|
|
|
};
|
2020-09-29 12:48:02 +03:00
|
|
|
|
2020-09-24 09:58:28 +03:00
|
|
|
(() => {
|
|
|
|
const sandboxSwitchElement = document.querySelector('#ppcp-sandbox_on');
|
|
|
|
if (sandboxSwitchElement) {
|
2020-09-25 09:19:43 +03:00
|
|
|
toggleSandboxProduction(! sandboxSwitchElement.checked);
|
2020-09-24 09:58:28 +03:00
|
|
|
}
|
2020-09-24 12:50:35 +03:00
|
|
|
|
2020-09-29 12:48:02 +03:00
|
|
|
document.querySelectorAll('.ppcp-disconnect').forEach(
|
|
|
|
(button) => {
|
|
|
|
button.addEventListener(
|
|
|
|
'click',
|
|
|
|
disconnect
|
|
|
|
);
|
|
|
|
}
|
|
|
|
);
|
|
|
|
|
2021-01-27 14:53:45 -05:00
|
|
|
if (sandboxSwitchElement) {
|
|
|
|
sandboxSwitchElement.addEventListener(
|
|
|
|
'click',
|
|
|
|
(event) => {
|
|
|
|
const value = event.target.checked;
|
|
|
|
|
|
|
|
toggleSandboxProduction( ! value );
|
|
|
|
|
2022-01-14 14:02:33 +02:00
|
|
|
// Prevent a possibly dirty form arising from this particular checkbox.
|
2021-01-27 14:53:45 -05:00
|
|
|
event.preventDefault();
|
|
|
|
event.stopPropagation();
|
|
|
|
setTimeout( () => {
|
|
|
|
event.target.checked = value;
|
|
|
|
}, 1
|
|
|
|
);
|
|
|
|
}
|
|
|
|
);
|
|
|
|
}
|
2020-09-24 12:50:35 +03:00
|
|
|
|
2022-01-14 14:02:33 +02:00
|
|
|
document.querySelectorAll('.ppcp-onboarding-options input').forEach(
|
|
|
|
(element) => {
|
|
|
|
element.addEventListener('click', updateOptionsState);
|
|
|
|
}
|
|
|
|
);
|
|
|
|
|
|
|
|
updateOptionsState();
|
|
|
|
|
|
|
|
document.querySelectorAll('#field-toggle_manual_input button').forEach(
|
|
|
|
(button) => {
|
|
|
|
button.addEventListener(
|
|
|
|
'click',
|
|
|
|
(event) => {
|
|
|
|
event.preventDefault();
|
|
|
|
|
|
|
|
const isProduction = ! sandboxSwitchElement.checked;
|
|
|
|
toggleSandboxProduction(isProduction);
|
|
|
|
credentialToggle(isProduction);
|
|
|
|
}
|
|
|
|
)
|
|
|
|
}
|
|
|
|
);
|
2020-09-25 09:19:43 +03:00
|
|
|
|
2021-01-27 14:53:45 -05:00
|
|
|
// Onboarding buttons.
|
|
|
|
ppcp_onboarding.init();
|
2020-10-15 15:42:49 -03:00
|
|
|
})();
|