laipower/wp-content/plugins/easy-digital-downloads/assets/js/frontend/checkout/utils.js

111 lines
2.9 KiB
JavaScript

/* global edd_global_vars */
/**
* Generate markup for a credit card icon based on a passed type.
*
* @param {string} type Credit card type.
* @return HTML markup.
*/
export const getCreditCardIcon = ( type ) => {
let width;
let name = type;
switch ( type ) {
case 'amex':
name = 'americanexpress';
width = 32;
break;
default:
width = 50;
break;
}
return `
<svg
width=${ width }
height=${ 32 }
class="payment-icon icon-${ name }"
role="img"
>
<use
href="#icon-${ name }"
xlink:href="#icon-${ name }">
</use>
</svg>`;
};
let ajax_tax_count = 0;
/**
* Recalulate taxes.
*
* @param {string} state State to calculate taxes for.
* @return {Promise}
*/
export function recalculateTaxes( state ) {
if ( '1' != edd_global_vars.taxes_enabled ) {
return;
} // Taxes not enabled
const $edd_cc_address = jQuery( '#edd_cc_address' );
const billing_country = $edd_cc_address.find( '#billing_country' ).val(),
card_address = $edd_cc_address.find( '#card_address' ).val(),
card_address_2 = $edd_cc_address.find( '#card_address_2' ).val(),
card_city = $edd_cc_address.find( '#card_city' ).val(),
card_state = $edd_cc_address.find( '#card_state' ).val(),
card_zip = $edd_cc_address.find( '#card_zip' ).val();
if ( ! state ) {
state = card_state;
}
const postData = {
action: 'edd_recalculate_taxes',
card_address: card_address,
card_address_2: card_address_2,
card_city: card_city,
card_zip: card_zip,
state: state,
billing_country: billing_country,
nonce: jQuery( '#edd-checkout-address-fields-nonce' ).val(),
};
jQuery( '#edd_purchase_submit [type=submit]' ).after( '<span class="edd-loading-ajax edd-recalculate-taxes-loading edd-loading"></span>' );
const current_ajax_count = ++ajax_tax_count;
return jQuery.ajax( {
type: 'POST',
data: postData,
dataType: 'json',
url: edd_global_vars.ajaxurl,
xhrFields: {
withCredentials: true,
},
success: function( tax_response ) {
// Only update tax info if this response is the most recent ajax call.
// Avoids bug with form autocomplete firing multiple ajax calls at the same time and not
// being able to predict the call response order.
if ( current_ajax_count === ajax_tax_count ) {
if ( tax_response.html ) {
jQuery( '#edd_checkout_cart_form' ).replaceWith( tax_response.html );
}
jQuery( '.edd_cart_amount' ).html( tax_response.total );
const tax_data = new Object();
tax_data.postdata = postData;
tax_data.response = tax_response;
jQuery( 'body' ).trigger( 'edd_taxes_recalculated', [ tax_data ] );
}
jQuery( '.edd-recalculate-taxes-loading' ).remove();
},
} ).fail( function( data ) {
if ( window.console && window.console.log ) {
console.log( data );
if ( current_ajax_count === ajax_tax_count ) {
jQuery( 'body' ).trigger( 'edd_taxes_recalculated', [ tax_data ] );
}
}
} );
}