mirror of
https://github.com/woocommerce/woocommerce-paypal-payments.git
synced 2025-08-31 06:52:50 +08:00
112 lines
3.2 KiB
JavaScript
112 lines
3.2 KiB
JavaScript
import { useEffect } from '@wordpress/element';
|
|
import { useDispatch } from '@wordpress/data';
|
|
import { STORE_NAME } from '../stores/axoStore';
|
|
import usePayPalScript from './usePayPalScript';
|
|
import { setupWatermark } from '../components/Watermark';
|
|
import { setupEmailFunctionality } from '../components/EmailButton';
|
|
import { createEmailLookupHandler } from '../events/emailLookupManager';
|
|
import usePhoneSyncHandler from './usePhoneSyncHandler';
|
|
import { initializeClassToggles } from '../helpers/classnamesManager';
|
|
import { snapshotFields } from '../helpers/fieldHelpers';
|
|
import useCustomerData from './useCustomerData';
|
|
import useShippingAddressChange from './useShippingAddressChange';
|
|
import useCardChange from './useCardChange';
|
|
|
|
/**
|
|
* Custom hook to set up AXO functionality.
|
|
*
|
|
* @param {string} namespace - Namespace for the PayPal script.
|
|
* @param {Object} ppcpConfig - PayPal Checkout configuration.
|
|
* @param {boolean} isConfigLoaded - Whether the PayPal config has loaded.
|
|
* @param {Object} fastlaneSdk - Fastlane SDK instance.
|
|
* @param {Object} paymentComponent - Payment component instance.
|
|
* @return {boolean} Whether PayPal script has loaded.
|
|
*/
|
|
const useAxoSetup = (
|
|
namespace,
|
|
ppcpConfig,
|
|
isConfigLoaded,
|
|
fastlaneSdk,
|
|
paymentComponent
|
|
) => {
|
|
// Get dispatch functions from the AXO store
|
|
const {
|
|
setIsAxoActive,
|
|
setIsAxoScriptLoaded,
|
|
setShippingAddress,
|
|
setCardDetails,
|
|
setCardChangeHandler,
|
|
} = useDispatch( STORE_NAME );
|
|
|
|
// Check if PayPal script has loaded
|
|
const paypalLoaded = usePayPalScript(
|
|
namespace,
|
|
ppcpConfig,
|
|
isConfigLoaded
|
|
);
|
|
|
|
// Set up card and shipping address change handlers
|
|
const onChangeCardButtonClick = useCardChange( fastlaneSdk );
|
|
const onChangeShippingAddressClick = useShippingAddressChange(
|
|
fastlaneSdk,
|
|
setShippingAddress
|
|
);
|
|
|
|
// Get customer data and setter functions
|
|
const {
|
|
shippingAddress: wooShippingAddress,
|
|
billingAddress: wooBillingAddress,
|
|
setShippingAddress: setWooShippingAddress,
|
|
setBillingAddress: setWooBillingAddress,
|
|
} = useCustomerData();
|
|
|
|
// Set up phone sync handler
|
|
usePhoneSyncHandler( paymentComponent );
|
|
|
|
// Initialize class toggles on mount
|
|
useEffect( () => {
|
|
initializeClassToggles();
|
|
}, [] );
|
|
|
|
// Set up AXO functionality when PayPal and Fastlane are loaded
|
|
useEffect( () => {
|
|
setupWatermark( fastlaneSdk );
|
|
if ( paypalLoaded && fastlaneSdk ) {
|
|
setIsAxoScriptLoaded( true );
|
|
setIsAxoActive( true );
|
|
setCardChangeHandler( onChangeCardButtonClick );
|
|
|
|
// Create and set up email lookup handler
|
|
const emailLookupHandler = createEmailLookupHandler(
|
|
fastlaneSdk,
|
|
setShippingAddress,
|
|
setCardDetails,
|
|
snapshotFields,
|
|
wooShippingAddress,
|
|
wooBillingAddress,
|
|
setWooShippingAddress,
|
|
setWooBillingAddress,
|
|
onChangeShippingAddressClick
|
|
);
|
|
setupEmailFunctionality( emailLookupHandler );
|
|
}
|
|
}, [
|
|
paypalLoaded,
|
|
fastlaneSdk,
|
|
setIsAxoActive,
|
|
setIsAxoScriptLoaded,
|
|
wooShippingAddress,
|
|
wooBillingAddress,
|
|
setWooShippingAddress,
|
|
setWooBillingAddress,
|
|
onChangeShippingAddressClick,
|
|
onChangeCardButtonClick,
|
|
setShippingAddress,
|
|
setCardDetails,
|
|
paymentComponent,
|
|
] );
|
|
|
|
return paypalLoaded;
|
|
};
|
|
|
|
export default useAxoSetup;
|