woocommerce-paypal-payments/modules/ppcp-blocks/resources/js/Components/card-fields.js

108 lines
2.5 KiB
JavaScript
Raw Normal View History

2024-07-12 12:58:34 +02:00
import { useEffect, useState } from '@wordpress/element';
2024-05-20 16:37:11 +02:00
2024-05-15 17:37:02 +02:00
import {
2024-07-12 12:58:34 +02:00
PayPalScriptProvider,
PayPalCardFieldsProvider,
PayPalCardFieldsForm,
} from '@paypal/react-paypal-js';
2024-05-15 17:37:02 +02:00
2024-07-12 12:58:34 +02:00
import { CheckoutHandler } from './checkout-handler';
import {
createOrder,
onApprove,
createVaultSetupToken,
onApproveSavePayment,
} from '../card-fields-config';
2024-07-12 12:58:34 +02:00
import { cartHasSubscriptionProducts } from '../Helper/Subscription';
2024-04-17 16:20:42 +02:00
2024-07-12 12:58:34 +02:00
export function CardFields( {
config,
eventRegistration,
emitResponse,
} ) {
const { onPaymentSetup } = eventRegistration;
const { responseTypes } = emitResponse;
2024-04-17 17:35:30 +02:00
2024-07-12 12:58:34 +02:00
const [ cardFieldsForm, setCardFieldsForm ] = useState();
const getCardFieldsForm = ( cardFieldsForm ) => {
setCardFieldsForm( cardFieldsForm );
};
2024-05-20 16:37:11 +02:00
2024-07-12 12:58:34 +02:00
const getSavePayment = ( savePayment ) => {
localStorage.setItem( 'ppcp-save-card-payment', savePayment );
};
2024-07-12 12:58:34 +02:00
const hasSubscriptionProducts = cartHasSubscriptionProducts(
config.scriptData
);
useEffect( () => {
localStorage.removeItem( 'ppcp-save-card-payment' );
2024-07-12 12:58:34 +02:00
if ( hasSubscriptionProducts ) {
localStorage.setItem( 'ppcp-save-card-payment', 'true' );
}
}, [ hasSubscriptionProducts ] );
2024-07-12 12:58:34 +02:00
useEffect(
() =>
onPaymentSetup( () => {
async function handlePaymentProcessing() {
await cardFieldsForm.submit().catch( ( error ) => {
return {
type: responseTypes.ERROR,
};
} );
2024-07-12 12:58:34 +02:00
return {
type: responseTypes.SUCCESS,
};
}
2024-05-20 16:37:11 +02:00
2024-07-12 12:58:34 +02:00
return handlePaymentProcessing();
} ),
[ onPaymentSetup, cardFieldsForm ]
);
2024-05-20 16:37:11 +02:00
2024-07-12 12:58:34 +02:00
return (
<>
<PayPalScriptProvider
options={ {
clientId: config.scriptData.client_id,
components: 'card-fields',
dataNamespace: 'ppcp-block-card-fields',
} }
>
<PayPalCardFieldsProvider
createVaultSetupToken={
config.scriptData.is_free_trial_cart
? createVaultSetupToken
: undefined
}
createOrder={
config.scriptData.is_free_trial_cart
? undefined
: createOrder
}
onApprove={
config.scriptData.is_free_trial_cart
? onApproveSavePayment
: onApprove
}
2024-07-12 12:58:34 +02:00
onError={ ( err ) => {
console.error( err );
} }
>
<PayPalCardFieldsForm />
<CheckoutHandler
getCardFieldsForm={ getCardFieldsForm }
getSavePayment={ getSavePayment }
hasSubscriptionProducts={ hasSubscriptionProducts }
saveCardText={ config.save_card_text }
is_vaulting_enabled={ config.is_vaulting_enabled }
/>
</PayPalCardFieldsProvider>
</PayPalScriptProvider>
</>
);
2024-04-17 16:20:42 +02:00
}