diff --git a/modules/ppcp-axo-block/resources/css/gateway.scss b/modules/ppcp-axo-block/resources/css/gateway.scss index 543217bc1..f7c3b8fe9 100644 --- a/modules/ppcp-axo-block/resources/css/gateway.scss +++ b/modules/ppcp-axo-block/resources/css/gateway.scss @@ -128,6 +128,10 @@ align-items: start; } + #email { + align-self: center; + } + &.wc-block-axo-is-authenticated .wc-block-components-text-input { gap: 14px 0; } @@ -139,7 +143,7 @@ .wc-block-axo-email-submit-button-container { grid-area: button; - align-self: start; + align-self: center; } .wc-block-checkout-axo-block-watermark-container { @@ -221,4 +225,6 @@ a.wc-block-axo-change-link{ } } - +#shipping-fields .wc-block-components-checkout-step__heading { + display: flex; +} diff --git a/modules/ppcp-axo-block/resources/js/components/AddressCard.js b/modules/ppcp-axo-block/resources/js/components/AddressCard.js new file mode 100644 index 000000000..e91c3defe --- /dev/null +++ b/modules/ppcp-axo-block/resources/js/components/AddressCard.js @@ -0,0 +1,68 @@ +import { __ } from '@wordpress/i18n'; + +const AddressCard = ( { address, onEdit, isExpanded } ) => { + const formatAddress = ( addressData ) => { + const { + first_name, + last_name, + company, + address_1, + address_2, + city, + state, + postcode, + country, + } = addressData; + const formattedAddress = [ + `${ first_name } ${ last_name }`, + company, + address_1, + address_2, + city, + state, + postcode, + country, + ].filter( Boolean ); + + return formattedAddress; + }; + + const formattedAddress = formatAddress( address ); + + return ( +
+
+ { formattedAddress.map( ( line, index ) => ( + + { line } + + ) ) } + { address.phone && ( +
+ { address.phone } +
+ ) } +
+ { onEdit && ( + + ) } +
+ ); +}; + +export default AddressCard; diff --git a/modules/ppcp-axo-block/resources/js/components/CreditCard.js b/modules/ppcp-axo-block/resources/js/components/CreditCard.js index dddd19f00..1844ac031 100644 --- a/modules/ppcp-axo-block/resources/js/components/CreditCard.js +++ b/modules/ppcp-axo-block/resources/js/components/CreditCard.js @@ -11,14 +11,8 @@ const cardIcons = { UNIONPAY: 'unionpay-light.svg', }; -export const CreditCard = ( { - card, - shippingAddress, - fastlaneSdk, - showWatermark = true, -} ) => { - const { brand, lastDigits, expiry } = card?.paymentSource?.card ?? {}; - const { fullName } = shippingAddress?.name ?? {}; +export const CreditCard = ( { card, fastlaneSdk, showWatermark = true } ) => { + const { brand, lastDigits, expiry, name } = card?.paymentSource?.card ?? {}; const cardLogo = useMemo( () => { return cardIcons[ brand ] ? ( @@ -48,7 +42,7 @@ export const CreditCard = ( { { cardLogo }
- { fullName } + { name } { formattedExpiry }{ ' ' }
diff --git a/modules/ppcp-axo-block/resources/js/components/Payment.js b/modules/ppcp-axo-block/resources/js/components/Payment.js index 2ee826f09..5598e1da1 100644 --- a/modules/ppcp-axo-block/resources/js/components/Payment.js +++ b/modules/ppcp-axo-block/resources/js/components/Payment.js @@ -6,7 +6,6 @@ import { STORE_NAME } from '../stores/axoStore'; export const Payment = ( { fastlaneSdk, card, - shippingAddress, onPaymentLoad, } ) => { const isGuest = useSelect( ( select ) => @@ -32,9 +31,7 @@ export const Payment = ( {
) : ( diff --git a/modules/ppcp-axo-block/resources/js/helpers/addressManager.js b/modules/ppcp-axo-block/resources/js/helpers/addressManager.js new file mode 100644 index 000000000..351f7ab88 --- /dev/null +++ b/modules/ppcp-axo-block/resources/js/helpers/addressManager.js @@ -0,0 +1,58 @@ +import { useState, useEffect, createRoot } from '@wordpress/element'; +import AddressCard from '../components/AddressCard'; +import { useCustomerData } from '../hooks/useCustomerData'; + +const AddressManager = ( { onChangeShippingAddressClick } ) => { + const [ isEditing, setIsEditing ] = useState( false ); + const { shippingAddress } = useCustomerData(); + + useEffect( () => { + const injectAddressCard = () => { + const shippingForm = document.querySelector( + '#shipping.wc-block-components-address-form' + ); + if ( + shippingForm && + ! document.querySelector( + '.wc-block-components-axo-address-card' + ) + ) { + const cardWrapper = document.createElement( 'div' ); + cardWrapper.className = 'wc-block-components-axo-address-card'; + shippingForm.parentNode.insertBefore( + cardWrapper, + shippingForm + ); + + const root = createRoot( cardWrapper ); + root.render( + { + setIsEditing( ! isEditing ); + onChangeShippingAddressClick(); + } } + isExpanded={ isEditing } + /> + ); + } + }; + + if ( shippingAddress ) { + injectAddressCard(); + } + + return () => { + const cardWrapper = document.querySelector( + '.wc-block-components-axo-address-card' + ); + if ( cardWrapper ) { + cardWrapper.remove(); + } + }; + }, [ shippingAddress, isEditing, onChangeShippingAddressClick ] ); + + return null; +}; + +export default AddressManager; diff --git a/modules/ppcp-axo-block/resources/js/helpers/fieldHelpers.js b/modules/ppcp-axo-block/resources/js/helpers/fieldHelpers.js index aa6c36e62..04b2ce2a9 100644 --- a/modules/ppcp-axo-block/resources/js/helpers/fieldHelpers.js +++ b/modules/ppcp-axo-block/resources/js/helpers/fieldHelpers.js @@ -1,4 +1,5 @@ export const snapshotFields = ( shippingAddress, billingAddress ) => { + console.log( 'Attempting to snapshot fields' ); if ( ! shippingAddress || ! billingAddress ) { console.warn( 'Shipping or billing address is missing:', { shippingAddress, @@ -8,29 +9,59 @@ export const snapshotFields = ( shippingAddress, billingAddress ) => { const originalData = { shippingAddress, billingAddress }; console.log( 'Snapshot data:', originalData ); - localStorage.setItem( - 'axoOriginalCheckoutFields', - JSON.stringify( originalData ) - ); - console.log( 'Original fields saved to localStorage', originalData ); + try { + localStorage.setItem( + 'axoOriginalCheckoutFields', + JSON.stringify( originalData ) + ); + console.log( 'Original fields saved to localStorage', originalData ); + } catch ( error ) { + console.error( 'Error saving to localStorage:', error ); + } }; export const restoreOriginalFields = ( updateShippingAddress, updateBillingAddress ) => { - const savedData = localStorage.getItem( 'axoOriginalCheckoutFields' ); - console.log( 'Data retrieved from localStorage:', savedData ); + console.log( 'Attempting to restore original fields' ); + let savedData; + try { + savedData = localStorage.getItem( 'axoOriginalCheckoutFields' ); + console.log( 'Data retrieved from localStorage:', savedData ); + } catch ( error ) { + console.error( 'Error retrieving from localStorage:', error ); + } if ( savedData ) { - const parsedData = JSON.parse( savedData ); - if ( parsedData.shippingAddress ) { - updateShippingAddress( parsedData.shippingAddress ); + try { + const parsedData = JSON.parse( savedData ); + console.log( 'Parsed data:', parsedData ); + if ( parsedData.shippingAddress ) { + console.log( + 'Restoring shipping address:', + parsedData.shippingAddress + ); + updateShippingAddress( parsedData.shippingAddress ); + } else { + console.warn( 'No shipping address found in saved data' ); + } + if ( parsedData.billingAddress ) { + console.log( + 'Restoring billing address:', + parsedData.billingAddress + ); + updateBillingAddress( parsedData.billingAddress ); + } else { + console.warn( 'No billing address found in saved data' ); + } + console.log( + 'Original fields restored from localStorage', + parsedData + ); + } catch ( error ) { + console.error( 'Error parsing saved data:', error ); } - if ( parsedData.billingAddress ) { - updateBillingAddress( parsedData.billingAddress ); - } - console.log( 'Original fields restored from localStorage', parsedData ); } else { console.warn( 'No data found in localStorage under axoOriginalCheckoutFields' @@ -43,10 +74,15 @@ export const populateWooFields = ( setWooShippingAddress, setWooBillingAddress ) => { + console.log( + 'Populating WooCommerce fields with profile data:', + profileData + ); + // Save shipping address const { address, name, phoneNumber } = profileData.shippingAddress; - setWooShippingAddress( { + const shippingAddress = { first_name: name.firstName, last_name: name.lastName, address_1: address.addressLine1, @@ -56,12 +92,15 @@ export const populateWooFields = ( postcode: address.postalCode, country: address.countryCode, phone: phoneNumber.nationalNumber, - } ); + }; + + console.log( 'Setting WooCommerce shipping address:', shippingAddress ); + setWooShippingAddress( shippingAddress ); // Save billing address const billingData = profileData.card.paymentSource.card.billingAddress; - setWooBillingAddress( { + const billingAddress = { first_name: profileData.name.firstName, last_name: profileData.name.lastName, address_1: billingData.addressLine1, @@ -70,5 +109,8 @@ export const populateWooFields = ( state: billingData.adminArea1, postcode: billingData.postalCode, country: billingData.countryCode, - } ); + }; + + console.log( 'Setting WooCommerce billing address:', billingAddress ); + setWooBillingAddress( billingAddress ); }; diff --git a/modules/ppcp-axo-block/resources/js/helpers/shippingChangeButtonManager.js b/modules/ppcp-axo-block/resources/js/helpers/shippingChangeButtonManager.js index fc93bd675..3ea9c41a7 100644 --- a/modules/ppcp-axo-block/resources/js/helpers/shippingChangeButtonManager.js +++ b/modules/ppcp-axo-block/resources/js/helpers/shippingChangeButtonManager.js @@ -1,62 +1,54 @@ -import { createElement, useEffect, createRoot } from '@wordpress/element'; +import { useEffect, createRoot } from '@wordpress/element'; -const ShippingChangeButton = ( { onChangeShippingAddressClick } ) => - createElement( - 'a', - { - className: - 'wc-block-checkout-axo-block-card__edit wc-block-axo-change-link', - role: 'button', - onClick: ( event ) => { - event.preventDefault(); - onChangeShippingAddressClick(); - }, - }, - 'Choose a different shipping address' - ); +const ShippingChangeButton = ( { onChangeShippingAddressClick } ) => ( + { + event.preventDefault(); + onChangeShippingAddressClick(); + } } + > + Choose a different shipping address + +); const ShippingChangeButtonManager = ( { onChangeShippingAddressClick } ) => { useEffect( () => { - const shippingTitle = document.querySelector( - '#shipping-fields h2.wc-block-components-title' + const shippingHeading = document.querySelector( + '#shipping-fields .wc-block-components-checkout-step__heading' ); - if ( shippingTitle ) { - if ( - ! shippingTitle.nextElementSibling?.classList?.contains( - 'wc-block-checkout-axo-block-card__edit' - ) - ) { - const buttonContainer = document.createElement( 'span' ); - shippingTitle.parentNode.insertBefore( - buttonContainer, - shippingTitle.nextSibling - ); + if ( + shippingHeading && + ! shippingHeading.querySelector( + '.wc-block-checkout-axo-block-card__edit' + ) + ) { + const spanElement = document.createElement( 'span' ); + spanElement.className = 'wc-block-checkout-axo-block-card__edit'; + shippingHeading.appendChild( spanElement ); - const root = createRoot( buttonContainer ); - root.render( - createElement( ShippingChangeButton, { - onChangeShippingAddressClick, - } ) - ); - } - } - - return () => { - const button = document.querySelector( - '#shipping-fields .wc-block-checkout-axo-block-card__edit' + const root = createRoot( spanElement ); + root.render( + ); - if ( button && button.parentNode ) { - button.parentNode.remove(); - } - }; + + return () => { + root.unmount(); + spanElement.remove(); + }; + } }, [ onChangeShippingAddressClick ] ); return null; }; export const injectShippingChangeButton = ( onChangeShippingAddressClick ) => { - // Check if the button already exists const existingButton = document.querySelector( '#shipping-fields .wc-block-checkout-axo-block-card__edit' ); @@ -65,9 +57,9 @@ export const injectShippingChangeButton = ( onChangeShippingAddressClick ) => { const container = document.createElement( 'div' ); document.body.appendChild( container ); createRoot( container ).render( - createElement( ShippingChangeButtonManager, { - onChangeShippingAddressClick, - } ) + ); } else { console.log( @@ -77,11 +69,12 @@ export const injectShippingChangeButton = ( onChangeShippingAddressClick ) => { }; export const removeShippingChangeButton = () => { - const button = document.querySelector( + const span = document.querySelector( '#shipping-fields .wc-block-checkout-axo-block-card__edit' ); - if ( button && button.parentNode ) { - button.parentNode.remove(); + if ( span ) { + createRoot( span ).unmount(); + span.remove(); } }; diff --git a/modules/ppcp-axo-block/resources/js/helpers/watermarkHelpers.js b/modules/ppcp-axo-block/resources/js/helpers/watermarkHelpers.js index 6a59ffbc9..5a15a5d68 100644 --- a/modules/ppcp-axo-block/resources/js/helpers/watermarkHelpers.js +++ b/modules/ppcp-axo-block/resources/js/helpers/watermarkHelpers.js @@ -8,7 +8,11 @@ let watermarkReference = { root: null, }; -const WatermarkManager = ( { fastlaneSdk, isLoaded } ) => { +console.log( 'WatermarkManager module loaded' ); + +const WatermarkManager = ( { fastlaneSdk } ) => { + console.log( 'WatermarkManager rendering', { fastlaneSdk } ); + const isGuest = useSelect( ( select ) => select( STORE_NAME ).getIsGuest() ); @@ -19,18 +23,30 @@ const WatermarkManager = ( { fastlaneSdk, isLoaded } ) => { select( STORE_NAME ).isAxoScriptLoaded() ); + console.log( 'WatermarkManager state', { + isGuest, + isAxoActive, + isAxoScriptLoaded, + } ); + useEffect( () => { + console.log( 'WatermarkManager useEffect triggered' ); + const createWatermark = () => { + console.log( 'Creating watermark' ); const textInputContainer = document.querySelector( '.wp-block-woocommerce-checkout-contact-information-block .wc-block-components-text-input' ); if ( textInputContainer && ! watermarkReference.container ) { - const emailInput = textInputContainer.querySelector( - 'input[type="email"]' + console.log( + 'Text input container found, creating watermark container' ); + const emailInput = + textInputContainer.querySelector( 'input[id="email"]' ); if ( emailInput ) { + console.log( 'Email input found, setting up watermark' ); watermarkReference.container = document.createElement( 'div' ); watermarkReference.container.setAttribute( @@ -50,7 +66,9 @@ const WatermarkManager = ( { fastlaneSdk, isLoaded } ) => { } if ( watermarkReference.root ) { + console.log( 'Rendering watermark content' ); if ( ! isAxoActive && ! isAxoScriptLoaded ) { + console.log( 'Rendering spinner' ); watermarkReference.root.render( createElement( 'span', { className: 'wc-block-components-spinner', @@ -58,6 +76,7 @@ const WatermarkManager = ( { fastlaneSdk, isLoaded } ) => { } ) ); } else if ( isAxoActive ) { + console.log( 'Rendering FastlaneWatermark' ); watermarkReference.root.render( createElement( FastlaneWatermark, { fastlaneSdk, @@ -66,12 +85,14 @@ const WatermarkManager = ( { fastlaneSdk, isLoaded } ) => { } ) ); } else { + console.log( 'Rendering null content' ); watermarkReference.root.render( null ); } } }; const removeWatermark = () => { + console.log( 'Removing watermark' ); if ( watermarkReference.root ) { watermarkReference.root.unmount(); } @@ -90,27 +111,32 @@ const WatermarkManager = ( { fastlaneSdk, isLoaded } ) => { } } watermarkReference = { container: null, root: null }; + console.log( 'Watermark removed' ); }; if ( isAxoActive || ( ! isAxoActive && ! isAxoScriptLoaded ) ) { + console.log( 'Conditions met, creating watermark' ); createWatermark(); } else { + console.log( 'Conditions not met, removing watermark' ); removeWatermark(); } return removeWatermark; - }, [ fastlaneSdk, isGuest, isAxoActive, isLoaded, isAxoScriptLoaded ] ); + }, [ fastlaneSdk, isGuest, isAxoActive, isAxoScriptLoaded ] ); return null; }; export const setupWatermark = ( fastlaneSdk ) => { + console.log( 'Setting up watermark', { fastlaneSdk } ); const container = document.createElement( 'div' ); document.body.appendChild( container ); const root = createRoot( container ); root.render( createElement( WatermarkManager, { fastlaneSdk } ) ); return () => { + console.log( 'Cleaning up watermark setup' ); root.unmount(); if ( container && container.parentNode ) { container.parentNode.removeChild( container ); @@ -119,6 +145,7 @@ export const setupWatermark = ( fastlaneSdk ) => { }; export const removeWatermark = () => { + console.log( 'Removing watermark (external call)' ); if ( watermarkReference.root ) { watermarkReference.root.unmount(); } @@ -137,6 +164,7 @@ export const removeWatermark = () => { } } watermarkReference = { container: null, root: null }; + console.log( 'Watermark removed (external call)' ); }; export default WatermarkManager; diff --git a/modules/ppcp-axo-block/resources/js/hooks/useAxoBlockManager.js b/modules/ppcp-axo-block/resources/js/hooks/useAxoBlockManager.js index e8c002d43..815470898 100644 --- a/modules/ppcp-axo-block/resources/js/hooks/useAxoBlockManager.js +++ b/modules/ppcp-axo-block/resources/js/hooks/useAxoBlockManager.js @@ -1,39 +1,49 @@ -import { useEffect, useState } from '@wordpress/element'; +import { useEffect, useRef, useState } from '@wordpress/element'; import Fastlane from '../../../../ppcp-axo/resources/js/Connection/Fastlane'; import { log } from '../../../../ppcp-axo/resources/js/Helper/Debug'; const useAxoBlockManager = ( axoConfig, ppcpConfig ) => { const [ fastlaneSdk, setFastlaneSdk ] = useState( null ); - const [ initialized, setInitialized ] = useState( false ); + const initializingRef = useRef( false ); + const configRef = useRef( { axoConfig, ppcpConfig } ); useEffect( () => { const initFastlane = async () => { - log( 'Init Fastlane' ); - - if ( initialized ) { + if ( initializingRef.current || fastlaneSdk ) { return; } - setInitialized( true ); + initializingRef.current = true; + log( 'Init Fastlane' ); - const fastlane = new Fastlane(); + try { + const fastlane = new Fastlane(); - if ( axoConfig.environment.is_sandbox ) { - window.localStorage.setItem( 'axoEnv', 'sandbox' ); + if ( configRef.current.axoConfig.environment.is_sandbox ) { + window.localStorage.setItem( 'axoEnv', 'sandbox' ); + } + + await fastlane.connect( { + locale: configRef.current.ppcpConfig.locale, + styles: configRef.current.ppcpConfig.styles, + } ); + + fastlane.setLocale( 'en_us' ); + + setFastlaneSdk( fastlane ); + } catch ( error ) { + console.error( 'Failed to initialize Fastlane:', error ); + } finally { + initializingRef.current = false; } - - await fastlane.connect( { - locale: ppcpConfig.locale, - styles: ppcpConfig.styles, - } ); - - fastlane.setLocale( 'en_us' ); - - setFastlaneSdk( fastlane ); }; initFastlane(); - }, [ axoConfig, ppcpConfig, initialized ] ); + }, [] ); + + useEffect( () => { + configRef.current = { axoConfig, ppcpConfig }; + }, [ axoConfig, ppcpConfig ] ); return fastlaneSdk; }; diff --git a/modules/ppcp-axo-block/resources/js/hooks/useCustomerData.js b/modules/ppcp-axo-block/resources/js/hooks/useCustomerData.js index b1e43389b..1d513f0d1 100644 --- a/modules/ppcp-axo-block/resources/js/hooks/useCustomerData.js +++ b/modules/ppcp-axo-block/resources/js/hooks/useCustomerData.js @@ -1,16 +1,42 @@ +import { useCallback, useMemo } from '@wordpress/element'; import { useDispatch, useSelect } from '@wordpress/data'; export const useCustomerData = () => { const customerData = useSelect( ( select ) => select( 'wc/store/cart' ).getCustomerData() ); - const { setShippingAddress, setBillingAddress } = - useDispatch( 'wc/store/cart' ); - return { - shippingAddress: customerData.shippingAddress, - billingAddress: customerData.billingAddress, - setShippingAddress, - setBillingAddress, - }; + const { + setShippingAddress: setShippingAddressDispatch, + setBillingAddress: setBillingAddressDispatch, + } = useDispatch( 'wc/store/cart' ); + + const setShippingAddress = useCallback( + ( address ) => { + setShippingAddressDispatch( address ); + }, + [ setShippingAddressDispatch ] + ); + + const setBillingAddress = useCallback( + ( address ) => { + setBillingAddressDispatch( address ); + }, + [ setBillingAddressDispatch ] + ); + + return useMemo( + () => ( { + shippingAddress: customerData.shippingAddress, + billingAddress: customerData.billingAddress, + setShippingAddress, + setBillingAddress, + } ), + [ + customerData.shippingAddress, + customerData.billingAddress, + setShippingAddress, + setBillingAddress, + ] + ); }; diff --git a/modules/ppcp-axo-block/resources/js/hooks/useUserInfoChange.js b/modules/ppcp-axo-block/resources/js/hooks/useUserInfoChange.js index f5ddc1571..6592884b8 100644 --- a/modules/ppcp-axo-block/resources/js/hooks/useUserInfoChange.js +++ b/modules/ppcp-axo-block/resources/js/hooks/useUserInfoChange.js @@ -34,7 +34,7 @@ export const useShippingAddressChange = ( }, [ fastlaneSdk, setShippingAddress, setWooShippingAddress ] ); }; -export const useCardChange = ( fastlaneSdk, setCard ) => { +export const useCardChange = ( fastlaneSdk, setCard, setWooBillingAddress ) => { return useCallback( async () => { if ( fastlaneSdk ) { const { selectionChanged, selectedCard } = @@ -42,6 +42,27 @@ export const useCardChange = ( fastlaneSdk, setCard ) => { if ( selectionChanged ) { setCard( selectedCard ); console.log( 'Selected card changed:', selectedCard ); + console.log( 'Setting new billing details:', selectedCard ); + const { name, billingAddress } = + selectedCard.paymentSource.card; + + // Split the full name into first and last name + const nameParts = name.split( ' ' ); + const firstName = nameParts[ 0 ]; + const lastName = nameParts.slice( 1 ).join( ' ' ); + + setWooBillingAddress( { + first_name: firstName, + last_name: lastName, + address_1: billingAddress.addressLine1, + address_2: billingAddress.addressLine2 || '', + city: billingAddress.adminArea2, + state: billingAddress.adminArea1, + postcode: billingAddress.postalCode, + country: billingAddress.countryCode, + } ); + + console.log( 'Billing address updated:', billingAddress ); } } }, [ fastlaneSdk, setCard ] ); diff --git a/modules/ppcp-axo-block/resources/js/index.js b/modules/ppcp-axo-block/resources/js/index.js index b94d74763..34e556d65 100644 --- a/modules/ppcp-axo-block/resources/js/index.js +++ b/modules/ppcp-axo-block/resources/js/index.js @@ -1,5 +1,5 @@ -import { useCallback, useEffect, useState, useRef } from '@wordpress/element'; -import { useSelect, useDispatch } from '@wordpress/data'; +import { useCallback, useEffect, useState } from '@wordpress/element'; +import { useDispatch } from '@wordpress/data'; import { registerPaymentMethod } from '@woocommerce/blocks-registry'; @@ -43,6 +43,7 @@ if ( typeof window.PayPalCommerceGateway === 'undefined' ) { const axoConfig = window.wc_ppcp_axo; const Axo = () => { + console.log( 'Axo component rendering' ); const [ paypalLoaded, setPaypalLoaded ] = useState( false ); const [ shippingAddress, setShippingAddress ] = useState( null ); const [ card, setCard ] = useState( null ); @@ -51,7 +52,6 @@ const Axo = () => { const { setIsAxoActive, setIsGuest, setIsAxoScriptLoaded } = useDispatch( STORE_NAME ); - // Access WooCommerce customer data const { shippingAddress: wooShippingAddress, billingAddress: wooBillingAddress, @@ -60,12 +60,14 @@ const Axo = () => { } = useCustomerData(); useEffect( () => { + console.log( 'Initializing class toggles' ); initializeClassToggles(); }, [] ); useEffect( () => { + console.log( 'Setting up cleanup for WooCommerce fields' ); return () => { - // Restore WooCommerce fields + console.log( 'Cleaning up: Restoring WooCommerce fields' ); restoreOriginalFields( updateWooShippingAddress, updateWooBillingAddress @@ -73,30 +75,39 @@ const Axo = () => { }; }, [ updateWooShippingAddress, updateWooBillingAddress ] ); - const { - setShippingAddress: setWooShippingAddress, - setBillingAddress: setWooBillingAddress, - } = useCustomerData(); - useEffect( () => { if ( ! paypalLoaded ) { + console.log( 'Loading PayPal script' ); loadPaypalScript( ppcpConfig, () => { + console.log( 'PayPal script loaded' ); setPaypalLoaded( true ); } ); } }, [ paypalLoaded, ppcpConfig ] ); + const { + setShippingAddress: setWooShippingAddress, + setBillingAddress: setWooBillingAddress, + } = useCustomerData(); + const onChangeShippingAddressClick = useShippingAddressChange( fastlaneSdk, setShippingAddress, updateWooShippingAddress ); - - const onChangeCardButtonClick = useCardChange( fastlaneSdk, setCard ); + const onChangeCardButtonClick = useCardChange( + fastlaneSdk, + setCard, + updateWooBillingAddress + ); useEffect( () => { + console.log( 'Setting up Axo functionality' ); setupWatermark( fastlaneSdk ); if ( paypalLoaded && fastlaneSdk ) { + console.log( + 'PayPal loaded and FastlaneSDK available, setting up email functionality' + ); setIsAxoScriptLoaded( true ); setIsAxoActive( true ); const emailLookupHandler = createEmailLookupHandler( @@ -127,52 +138,40 @@ const Axo = () => { ] ); useEffect( () => { + console.log( 'Setting up cleanup for Axo component' ); return () => { + console.log( 'Cleaning up Axo component' ); setIsAxoActive( false ); setIsGuest( true ); - removeShippingChangeButton(); removeCardChangeButton(); removeWatermark(); - }; - }, [ - setIsAxoActive, - setIsGuest, - updateWooShippingAddress, - updateWooBillingAddress, - ] ); - - useEffect( () => { - return () => { - setIsAxoActive( false ); - setIsGuest( true ); - - removeShippingChangeButton(); - removeCardChangeButton(); - removeWatermark(); - if ( isEmailFunctionalitySetup() ) { + console.log( 'Removing email functionality' ); removeEmailFunctionality(); } }; }, [] ); - const handlePaymentLoad = useCallback( - ( paymentComponent ) => { - console.log( 'Payment component loaded', paymentComponent ); - }, - [] // Empty dependency array to avoid re-creating the function on every render - ); + const handlePaymentLoad = useCallback( ( paymentComponent ) => { + console.log( 'Payment component loaded', paymentComponent ); + }, [] ); const handleChange = ( selectedCard ) => { + console.log( 'Card selection changed', selectedCard ); setCard( selectedCard ); }; + console.log( 'Rendering Axo component', { + fastlaneSdk, + card, + shippingAddress, + } ); + return fastlaneSdk ? ( , edit:

This is Axo Blocks in the editor

, ariaLabel: ppcpConfig.title, - canMakePayment: () => true, + canMakePayment: () => { + console.log( 'Checking if payment can be made' ); + return true; + }, supports: { showSavedCards: true, features: ppcpConfig.supports, }, } ); +console.log( 'Axo module loaded' ); + export default Axo;