Files
2026-04-28 15:13:50 +02:00

169 lines
3.7 KiB
JavaScript

( function () {
const CONFIG = window.wpoIpsPeppol || {};
if ( ! CONFIG.endpoint_derivation ) return;
const COUNTRY_SELECTOR = CONFIG.billing_country_selector;
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() : '';
}
function getBillingCountry() {
try {
const cart = window.wp?.data?.select?.( 'wc/store/cart' );
if ( cart && typeof cart.getCustomerData === 'function' ) {
const data = cart.getCustomerData() || {};
const country =
data.billingAddress?.country
|| data.billing_address?.country
|| data.customer?.billingAddress?.country
|| data.customer?.billing_address?.country;
if ( country ) {
engine.log(
'billing country resolved from store',
country
);
return String( country ).trim();
}
}
} catch ( e ) {
engine.log(
'error reading billing country from store',
e
);
}
const fallback = getValue( COUNTRY_SELECTOR );
engine.log(
'billing country resolved from DOM',
fallback
);
return fallback;
}
const engine = window.WPO_IPS_PeppolEndpointDerivation.init( CONFIG, {
getBillingCountry,
getEndpointNodes() {
const wrapper = ENDPOINT_WRAPPER_SELECTOR
? document.querySelector( ENDPOINT_WRAPPER_SELECTOR )
: null;
const endpoint = ENDPOINT_SELECTOR
? document.querySelector( ENDPOINT_SELECTOR )
: null;
engine.log(
'getEndpointNodes',
{
wrapperSelector: ENDPOINT_WRAPPER_SELECTOR,
endpointSelector: ENDPOINT_SELECTOR,
wrapperFound: !! wrapper,
endpointFound: !! endpoint,
currentValue: endpoint ? endpoint.value : ''
}
);
return {
wrapper: wrapper,
endpoint: endpoint,
};
},
onSetFieldValue( el, newVal ) {
engine.log(
'setting endpoint value',
newVal
);
// Blocks floating label fix.
const wrapper = el.closest( '.wc-block-components-text-input' );
if ( wrapper && newVal ) {
wrapper.classList.add( 'is-active' );
} else if ( wrapper && ! newVal ) {
wrapper.classList.remove( 'is-active' );
}
},
} );
engine.log(
'engine initialized',
{
countrySelector: COUNTRY_SELECTOR,
vatSelector: VAT_SELECTOR,
endpointWrapperSelector: ENDPOINT_WRAPPER_SELECTOR,
endpointSelector: ENDPOINT_SELECTOR,
debug: CONFIG.debug
}
);
const root =
document.querySelector( '#order-fields' )
|| document.querySelector( '.wc-block-checkout' )
|| document.documentElement;
engine.log(
'mutation observer attached',
root
);
new MutationObserver( () => {
engine.log(
'mutation observed -> scheduling apply'
);
engine.schedule( 'mutation' );
} ).observe( root, { childList: true, subtree: true } );
document.addEventListener( 'input', ( e ) => {
if ( COUNTRY_SELECTOR && e.target && e.target.matches( COUNTRY_SELECTOR ) ) {
engine.log(
'country input detected',
e.target.value
);
engine.schedule( 'country-input' );
}
if ( VAT_SELECTOR && e.target && e.target.matches( VAT_SELECTOR ) ) {
engine.log(
'vat input detected',
e.target.value
);
engine.schedule( 'vat-input' );
}
} );
if ( window.wp?.data?.subscribe ) {
engine.log(
'subscribed to wp.data store'
);
window.wp.data.subscribe( () => {
engine.log(
'store change detected'
);
engine.schedule( 'store' );
} );
}
engine.log(
'initial schedule'
);
engine.schedule( 'init' );
} )();