woocommerce-paypal-payments/modules/ppcp-axo-block/resources/js/hooks/usePayPalScript.js
2024-10-08 00:41:30 +02:00

48 lines
1.5 KiB
JavaScript

import { useEffect } from '@wordpress/element';
import { useDispatch, useSelect } from '@wordpress/data';
import { log } from '../../../../ppcp-axo/resources/js/Helper/Debug';
import { loadPayPalScript } from '../../../../ppcp-button/resources/js/modules/Helper/PayPalScriptLoading';
import { STORE_NAME } from '../stores/axoStore';
/**
* Custom hook to load the PayPal script.
*
* @param {string} namespace - Namespace for the PayPal script.
* @param {Object} ppcpConfig - Configuration object for PayPal script.
* @param {boolean} isConfigLoaded - Whether the PayPal Commerce Gateway config is loaded.
* @return {boolean} True if the PayPal script has loaded, false otherwise.
*/
const usePayPalScript = ( namespace, ppcpConfig, isConfigLoaded ) => {
// Get dispatch functions from the AXO store
const { setIsPayPalLoaded } = useDispatch( STORE_NAME );
// Select relevant states from the AXO store
const { isPayPalLoaded } = useSelect(
( select ) => ( {
isPayPalLoaded: select( STORE_NAME ).getIsPayPalLoaded(),
} ),
[]
);
useEffect( () => {
const loadScript = async () => {
if ( ! isPayPalLoaded && isConfigLoaded ) {
try {
await loadPayPalScript( namespace, ppcpConfig );
setIsPayPalLoaded( true );
} catch ( error ) {
log(
`Error loading PayPal script for namespace: ${ namespace }. Error: ${ error }`,
'error'
);
}
}
};
loadScript();
}, [ ppcpConfig, isConfigLoaded, isPayPalLoaded ] );
return isPayPalLoaded;
};
export default usePayPalScript;