woocommerce-paypal-payments/modules/ppcp-axo-block/resources/js/hooks/usePayPalCommerceGateway.js

47 lines
1.5 KiB
JavaScript
Raw Normal View History

import { useState, useEffect } from '@wordpress/element';
import { log } from '../../../../ppcp-axo/resources/js/Helper/Debug';
2024-10-07 15:42:01 +02:00
/**
* Custom hook to load and manage the PayPal Commerce Gateway configuration.
*
* @param {Object} initialConfig - Initial configuration object.
* @return {Object} An object containing the loaded config and a boolean indicating if it's loaded.
*/
const usePayPalCommerceGateway = ( initialConfig ) => {
const [ isConfigLoaded, setIsConfigLoaded ] = useState( false );
const [ ppcpConfig, setPpcpConfig ] = useState( initialConfig );
useEffect( () => {
2024-10-07 15:42:01 +02:00
/**
* Function to load the PayPal Commerce Gateway configuration.
*/
const loadConfig = () => {
if ( typeof window.PayPalCommerceGateway !== 'undefined' ) {
setPpcpConfig( window.PayPalCommerceGateway );
setIsConfigLoaded( true );
} else {
log( 'PayPal Commerce Gateway config not loaded.', 'error' );
}
};
2024-10-07 15:42:01 +02:00
// Check if the DOM is still loading
if ( document.readyState === 'loading' ) {
2024-10-07 15:42:01 +02:00
// If it's loading, add an event listener for when the DOM is fully loaded
document.addEventListener( 'DOMContentLoaded', loadConfig );
} else {
2024-10-07 15:42:01 +02:00
// If it's already loaded, call the loadConfig function immediately
loadConfig();
}
2024-10-07 15:42:01 +02:00
// Cleanup function to remove the event listener
return () => {
document.removeEventListener( 'DOMContentLoaded', loadConfig );
};
}, [] );
2024-10-07 15:42:01 +02:00
// Return the loaded configuration and the loading status
return { isConfigLoaded, ppcpConfig };
};
export default usePayPalCommerceGateway;