157 lines
4.3 KiB
JavaScript
157 lines
4.3 KiB
JavaScript
jQuery( function ( $ ) {
|
|
|
|
const CONFIG = window.wpoIpsPeppol || {};
|
|
|
|
// Visibility toggles
|
|
function togglePeppolFields() {
|
|
const mode = ( CONFIG && CONFIG.visibilityMode ) ? CONFIG.visibilityMode : 'always';
|
|
|
|
let rows = $();
|
|
|
|
if ( mode === 'toggle' ) {
|
|
rows = $( '.wpo-ips-peppol-conditional' ).closest( '.form-row' );
|
|
const checkbox = $( '#peppol_invoice' );
|
|
|
|
if ( ! checkbox.length ) {
|
|
return;
|
|
}
|
|
|
|
rows.toggle( checkbox.is( ':checked' ) );
|
|
return;
|
|
}
|
|
|
|
if ( mode === 'company' ) {
|
|
rows = $( '.wpo-ips-peppol-company-conditional' ).closest( '.form-row' );
|
|
const company = $( '#billing_company' );
|
|
|
|
if ( ! company.length ) {
|
|
return;
|
|
}
|
|
|
|
rows.toggle( $.trim( company.val() ).length > 0 );
|
|
return;
|
|
}
|
|
}
|
|
|
|
togglePeppolFields();
|
|
|
|
$( document ).on( 'change', '#peppol_invoice', togglePeppolFields );
|
|
$( document ).on( 'input change', '#billing_company', togglePeppolFields );
|
|
|
|
|
|
// Endpoint derivation
|
|
if ( ! CONFIG.endpoint_derivation ) {
|
|
return;
|
|
}
|
|
|
|
const COUNTRY_SELECTOR = CONFIG.billing_country_selector || '#billing_country';
|
|
const VAT_SELECTOR = CONFIG.vat_field_selector || '';
|
|
const ENDPOINT_WRAPPER_SELECTOR = CONFIG.peppol_input_wrapper_selector || '';
|
|
const ENDPOINT_SELECTOR = ENDPOINT_WRAPPER_SELECTOR ? ( ENDPOINT_WRAPPER_SELECTOR + ' input' ) : '';
|
|
|
|
function getValue( selector ) {
|
|
const el = document.querySelector( selector );
|
|
return el ? String( el.value || '' ).trim() : '';
|
|
}
|
|
|
|
const engine = window.WPO_IPS_PeppolEndpointDerivation.init( CONFIG, {
|
|
getBillingCountry() {
|
|
return getValue( COUNTRY_SELECTOR );
|
|
},
|
|
|
|
getEndpointNodes() {
|
|
const nodes = {
|
|
wrapper: ENDPOINT_WRAPPER_SELECTOR ? document.querySelector( ENDPOINT_WRAPPER_SELECTOR ) : null,
|
|
endpoint: ENDPOINT_SELECTOR ? document.querySelector( ENDPOINT_SELECTOR ) : null,
|
|
};
|
|
|
|
engine.log( 'getEndpointNodes', {
|
|
wrapperSelector: ENDPOINT_WRAPPER_SELECTOR,
|
|
endpointSelector: ENDPOINT_SELECTOR,
|
|
wrapperFound: !! nodes.wrapper,
|
|
endpointFound: !! nodes.endpoint,
|
|
currentValue: nodes.endpoint ? String( nodes.endpoint.value || '' ) : '',
|
|
} );
|
|
|
|
return nodes;
|
|
},
|
|
|
|
appendOverrideLink( wrapper, endpoint, link ) {
|
|
if ( endpoint && endpoint.parentNode ) {
|
|
endpoint.insertAdjacentElement( 'afterend', link );
|
|
} else {
|
|
wrapper.appendChild( link );
|
|
}
|
|
},
|
|
|
|
// Fetch fallback if wp.apiFetch not present.
|
|
fetchEndpoint( billingCountry, vatValue ) {
|
|
engine.log( 'fetchEndpoint', {
|
|
billingCountry: billingCountry,
|
|
vatValue: vatValue,
|
|
hasApiFetch: !! window.wp?.apiFetch,
|
|
hasWpApiSettingsRoot: !! window.wpApiSettings?.root,
|
|
route: CONFIG.peppol_autofill_endpoint_route,
|
|
} );
|
|
|
|
const apiFetch = window.wp?.apiFetch;
|
|
if ( apiFetch ) {
|
|
return apiFetch( {
|
|
path: CONFIG.peppol_autofill_endpoint_route,
|
|
method: 'POST',
|
|
data: {
|
|
billing_country: String( billingCountry || '' ).toUpperCase(),
|
|
vat: String( vatValue || '' ),
|
|
},
|
|
} );
|
|
}
|
|
|
|
const root = window.wpApiSettings?.root ? String( window.wpApiSettings.root ) : '';
|
|
const nonce = window.wpApiSettings?.nonce ? String( window.wpApiSettings.nonce ) : '';
|
|
|
|
if ( root ) {
|
|
const path = String( CONFIG.peppol_autofill_endpoint_route || '' ).replace( /^\//, '' );
|
|
const url = root.replace( /\/$/, '' ) + '/' + path;
|
|
|
|
return $.ajax( {
|
|
url,
|
|
method: 'POST',
|
|
dataType: 'json',
|
|
data: {
|
|
billing_country: String( billingCountry || '' ).toUpperCase(),
|
|
vat: String( vatValue || '' ),
|
|
},
|
|
beforeSend: function ( xhr ) {
|
|
if ( nonce ) xhr.setRequestHeader( 'X-WP-Nonce', nonce );
|
|
},
|
|
} );
|
|
}
|
|
|
|
return $.Deferred().resolve( null ).promise();
|
|
},
|
|
} );
|
|
|
|
$( document ).on( 'input change', COUNTRY_SELECTOR + ', ' + VAT_SELECTOR, function () {
|
|
engine.log( 'input/change event', {
|
|
target: this && this.name ? this.name : ( this && this.id ? this.id : '' ),
|
|
country: getValue( COUNTRY_SELECTOR ),
|
|
vat: VAT_SELECTOR ? getValue( VAT_SELECTOR ) : '',
|
|
} );
|
|
|
|
engine.schedule( 'input' );
|
|
} );
|
|
|
|
$( document.body ).on( 'updated_checkout updated_shipping_method', function ( event ) {
|
|
engine.log( 'wc event', {
|
|
type: event && event.type ? event.type : '',
|
|
} );
|
|
|
|
engine.schedule( 'wc-updated' );
|
|
} );
|
|
|
|
engine.log( 'init schedule' );
|
|
|
|
engine.schedule( 'init' );
|
|
|
|
} );
|