function slideInAndOutContent(trigger, triggerContent) {
const collapseToggle = document.querySelector( trigger );
const orderReviewText = document.querySelector( '.ast-order-review-toggle-text' );
if( collapseToggle ) {
collapseToggle.addEventListener( 'click', function( e ) {
const collapseContentWrapper = document.querySelector( triggerContent );
const collapseContent = collapseContentWrapper.querySelector('*');
if( collapseContentWrapper ) {
if( ! e.currentTarget.classList.contains( 'active' ) ) {
if( collapseContent ) {
e.currentTarget.classList.add( 'active' );
collapseContentWrapper.style.display = 'block';
collapseContentWrapper.style.maxHeight = `${collapseContent.clientHeight}px`;
if( orderReviewText ) {
orderReviewText.textContent = astraAddon.order_review_toggle_texts.toggle_hide_text;
const mobileOrderReviewWrap = document.querySelector( '#ast-order-review-content' );
const desktopOrderReviewWrap = document.querySelector( '#order_review' );
// Update checkout when shipping methods changes.
['change','select.shipping_method, input[name^="shipping_method"]'].forEach( event =>
mobileOrderReviewWrap.addEventListener( event, function () {
/**
* Uncheck all shipping radio buttons of desktop. Those will be auto updated by update_checkout action.
* While performing the update checkout, it searches for the selected shipping method in whole page.
*/
desktopOrderReviewWrap.querySelectorAll(
'input[name^="shipping_method"][type="radio"]:checked'
).forEach( checkedInput => {
checkedInput.removeAttribute( 'checked' );
} );
document.querySelector( 'body' ).dispatchEvent( new CustomEvent( "update_checkout", { "detail": { update_shipping_method: true } }) );
} )
);
}
}
} else {
e.currentTarget.classList.remove( 'active' );
collapseContentWrapper.style.maxHeight = 0;
setTimeout(() => {
collapseContentWrapper.style.display = 'none';
}, 300);
if( orderReviewText ) {
orderReviewText.textContent = astraAddon.order_review_toggle_texts.toggle_show_text;
}
}
}
} )
}
}
let xhrCountEmail = 0;
let delayTimerEmail;
function validateInlineEmail() {
const emailInput = document.querySelector( '#billing_email' );
if( emailInput ) {
// Email or username value.
const emailText = emailInput.value;
if ( 'undefined' === typeof emailText || astraAddon.is_logged_in ) {
return;
}
const createAccountSection = document.querySelector( '.ast-create-account-section' );
const loginLabel = document.querySelector( '.woocommerce-billing-fields__customer-login-label' );
const validationMsgWrap = document.querySelector( '.ast-email-validation-block' );
const isLoginActive = document.querySelector( '#ast-customer-login-url' );
if ( '' !== emailText ) {
if( validationMsgWrap ) {
validationMsgWrap.remove();
}
clearTimeout( delayTimerEmail );
const seqNumber = ++xhrCountEmail;
delayTimerEmail = setTimeout( async function () {
let xhrRequest = new XMLHttpRequest();
xhrRequest.open( 'POST', astra.ajax_url, true );
// Send the proper header information along with the request
xhrRequest.setRequestHeader( "Content-Type", "application/x-www-form-urlencoded" );
xhrRequest.send( 'action=astra_woo_check_user_exist&user_name_email=' + emailText + '&security=' + astraAddon.check_user_exist_nonce );
xhrRequest.onload = function () {
if ( xhrRequest.readyState == XMLHttpRequest.DONE ) { // XMLHttpRequest.DONE == 4
if ( 200 <= xhrRequest.status || 400 <= xhrRequest.status ) {
document.cookie = "ast_modern_checkout_useremail=" + emailText;
const jsonResponse = JSON.parse(xhrRequest.responseText);
if ( seqNumber !== xhrCountEmail ) {
return;
}
if( validationMsgWrap ) {
validationMsgWrap.remove();
}
if (
jsonResponse.data.success &&
isLoginActive &&
isLoginActive.classList.contains( 'active' )
) {
emailInput.insertAdjacentHTML(
'afterend',
'' +
astraAddon.user_validation_msgs
.success_msg +
''
);
return;
}
if ( jsonResponse.data.success ) {
if ( jsonResponse.data.is_login_allowed ) {
emailInput.insertAdjacentHTML(
'afterend',
'' +
astraAddon.user_validation_msgs
.success_msg +
''
);
if( isLoginActive && ! isLoginActive.classList.contains( 'active' ) ) {
isLoginActive.click();
}
}
if( createAccountSection ) {
createAccountSection.style.display = 'none';
}
if( loginLabel ) {
loginLabel.style.display = 'block';
}
} else {
if( isLoginActive && isLoginActive.classList.contains( 'active' ) ) {
isLoginActive.click();
}
if( createAccountSection ) {
const createAccountCheckbox = createAccountSection.querySelector( '.create-account label.checkbox' );
// LearnDash fix.
if( createAccountCheckbox ) {
createAccountCheckbox.style.display = 'block';
}
createAccountSection.style.display = 'block';
}
if( loginLabel && '' == emailText ){
loginLabel.style.display = 'none';
}
}
}
}
}
}, 300 );
} else {
if( isLoginActive && isLoginActive.classList.contains( 'active' ) ) {
isLoginActive.click();
}
if( validationMsgWrap ) {
validationMsgWrap.style.display = 'none';
}
if( loginLabel ) {
loginLabel.style.display = 'block';
}
if( createAccountSection ) {
createAccountSection.style.display = 'none';
}
}
}
return false;
}
function supportNativeEmailFunctionality() {
const emailInput = document.querySelector( '#billing_email' );
if( emailInput ) {
// Email or username value.
const emailText = emailInput.value;
if ( 'undefined' === typeof emailText || astraAddon.is_logged_in ) {
return;
}
const createAccountSection = document.querySelector( '.ast-create-account-section' );
if ( createAccountSection ) {
if ( '' !== emailText ) {
createAccountSection.style.display = 'block';
} else {
createAccountSection.style.display = 'none';
}
}
}
return false;
}
function woocommerceUserLogin() {
const loginButton = document.querySelector( '.ast-customer-login-section__login-button' );
if( ! loginButton ) {
return;
}
loginButton.addEventListener( 'click' , function() {
const emailAddress = document.querySelector( '#billing_email' );
const password = document.querySelector( '#billing_password' );
if( ! emailAddress && password ) {
return;
}
let xhrRequest = new XMLHttpRequest();
xhrRequest.open( 'POST', astra.ajax_url, true );
// Send the proper header information along with the request
xhrRequest.setRequestHeader( "Content-Type", "application/x-www-form-urlencoded" );
// Fix: AST-3495 - Added "encodeURIComponent" so that can we encode the special symbols in payload.
xhrRequest.send( 'action=astra_woocommerce_login_user&user_name_email=' + encodeURIComponent( emailAddress.value ) + '&password=' + encodeURIComponent( password.value ) + '&security=' + encodeURIComponent( astraAddon.woocommerce_login_nonce ) );
xhrRequest.onload = function () {
if ( xhrRequest.readyState == XMLHttpRequest.DONE ) { // XMLHttpRequest.DONE == 4
if ( 200 <= xhrRequest.status || 400 <= xhrRequest.status ) {
const jsonResponse = JSON.parse(xhrRequest.responseText);
if( jsonResponse.data.success ) {
location.reload();
} else {
const customerInfoNotice = document.querySelector( '.ast-customer-info__notice' );
if( customerInfoNotice ) {
customerInfoNotice.classList.add('active');
customerInfoNotice.innerHTML = DOMPurify.sanitize( jsonResponse.data.error );
}
}
}
}
}
} );
}
document.addEventListener("DOMContentLoaded", function (event) {
const body = document.querySelector('body');
if (!astraAddon.cartflows_version && body && body.classList.contains('woocommerce-checkout')) {
const isNotWPComPackage = astraAddon.is_complete_package;
const emailInput = document.querySelector('#billing_email');
if (emailInput) {
if (isNotWPComPackage) {
emailInput.addEventListener('input', validateInlineEmail);
validateInlineEmail();
} else {
emailInput.addEventListener('input', supportNativeEmailFunctionality);
supportNativeEmailFunctionality();
}
}
if (body && !body.classList.contains('ast-woo-two-step-modern-checkout')) {
slideInAndOutContent('#ast-order-review-toggle', '#ast-order-review-content');
}
if (isNotWPComPackage) {
slideInAndOutContent('#ast-customer-login-url', '#ast-customer-login-section');
woocommerceUserLogin();
}
}
});