Merge pull request #2623 from woocommerce/fix-cannot-find-FastlaneCardComponent-container-error

Axo Blocks: Check whether the Card Element container exists before trying to render it
This commit is contained in:
Danny Dudzic 2024-09-25 15:40:11 +02:00 committed by GitHub
commit 3d51663ab9
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -1,10 +1,12 @@
import { useEffect, useCallback } from '@wordpress/element'; import { useEffect, useCallback, useState } from '@wordpress/element';
import { useSelect } from '@wordpress/data'; import { useSelect } from '@wordpress/data';
import { __ } from '@wordpress/i18n'; import { __ } from '@wordpress/i18n';
import { Card } from '../Card'; import { Card } from '../Card';
import { STORE_NAME } from '../../stores/axoStore'; import { STORE_NAME } from '../../stores/axoStore';
export const Payment = ( { fastlaneSdk, card, onPaymentLoad } ) => { export const Payment = ( { fastlaneSdk, card, onPaymentLoad } ) => {
const [ isCardElementReady, setIsCardElementReady ] = useState( false );
const isGuest = useSelect( ( select ) => const isGuest = useSelect( ( select ) =>
select( STORE_NAME ).getIsGuest() select( STORE_NAME ).getIsGuest()
); );
@ -14,14 +16,26 @@ export const Payment = ( { fastlaneSdk, card, onPaymentLoad } ) => {
); );
const loadPaymentComponent = useCallback( async () => { const loadPaymentComponent = useCallback( async () => {
if ( isGuest && isEmailLookupCompleted ) { if ( isGuest && isEmailLookupCompleted && isCardElementReady ) {
const paymentComponent = await fastlaneSdk.FastlaneCardComponent( const paymentComponent = await fastlaneSdk.FastlaneCardComponent(
{} {}
); );
paymentComponent.render( `#fastlane-card` ); paymentComponent.render( `#fastlane-card` );
onPaymentLoad( paymentComponent ); onPaymentLoad( paymentComponent );
} }
}, [ isGuest, isEmailLookupCompleted, fastlaneSdk, onPaymentLoad ] ); }, [
isGuest,
isEmailLookupCompleted,
isCardElementReady,
fastlaneSdk,
onPaymentLoad,
] );
useEffect( () => {
if ( isGuest && isEmailLookupCompleted ) {
setIsCardElementReady( true );
}
}, [ isGuest, isEmailLookupCompleted ] );
useEffect( () => { useEffect( () => {
loadPaymentComponent(); loadPaymentComponent();