mirror of
https://github.com/woocommerce/woocommerce-paypal-payments.git
synced 2025-09-01 07:02:48 +08:00
71 lines
2.2 KiB
JavaScript
71 lines
2.2 KiB
JavaScript
import {useEffect, useState} from '@wordpress/element';
|
|
import {registerExpressPaymentMethod, registerPaymentMethod} from '@woocommerce/blocks-registry';
|
|
import {loadPaypalScript} from '../../../ppcp-button/resources/js/modules/Helper/ScriptLoading'
|
|
import ApplepayManager from "./ApplepayManager";
|
|
import {loadCustomScript} from "@paypal/paypal-js";
|
|
|
|
const ppcpData = wc.wcSettings.getSetting('ppcp-gateway_data');
|
|
const ppcpConfig = ppcpData.scriptData;
|
|
|
|
const buttonData = wc.wcSettings.getSetting('ppcp-applepay_data');
|
|
const buttonConfig = buttonData.scriptData;
|
|
|
|
if (typeof window.PayPalCommerceGateway === 'undefined') {
|
|
window.PayPalCommerceGateway = ppcpConfig;
|
|
}
|
|
|
|
//console.log('ppcpData', ppcpData);
|
|
//console.log('ppcpConfig', ppcpConfig);
|
|
//console.log('buttonData', buttonData);
|
|
//console.log('buttonConfig', buttonConfig);
|
|
|
|
const ApplePayComponent = () => {
|
|
//console.log('ApplePayComponent render');
|
|
|
|
const [bootstrapped, setBootstrapped] = useState(false);
|
|
const [paypalLoaded, setPaypalLoaded] = useState(false);
|
|
const [applePayLoaded, setApplePayLoaded] = useState(false);
|
|
|
|
const bootstrap = function () {
|
|
const manager = new ApplepayManager(buttonConfig, ppcpConfig);
|
|
manager.init();
|
|
};
|
|
|
|
useEffect(() => {
|
|
// Load ApplePay SDK
|
|
loadCustomScript({ url: buttonConfig.sdk_url }).then(() => {
|
|
setApplePayLoaded(true);
|
|
});
|
|
|
|
// Load PayPal
|
|
loadPaypalScript(ppcpConfig, () => {
|
|
setPaypalLoaded(true);
|
|
});
|
|
}, []);
|
|
|
|
useEffect(() => {
|
|
if (!bootstrapped && paypalLoaded && applePayLoaded) {
|
|
setBootstrapped(true);
|
|
bootstrap();
|
|
}
|
|
}, [paypalLoaded, applePayLoaded]);
|
|
|
|
return (
|
|
<div id={buttonConfig.button.wrapper.replace('#', '')}></div>
|
|
);
|
|
}
|
|
|
|
const features = ['products'];
|
|
let registerMethod = registerExpressPaymentMethod;
|
|
|
|
registerMethod({
|
|
name: buttonData.id,
|
|
label: <div dangerouslySetInnerHTML={{__html: buttonData.title}}/>,
|
|
content: <ApplePayComponent isEditing={false}/>,
|
|
edit: <ApplePayComponent isEditing={true}/>,
|
|
ariaLabel: buttonData.title,
|
|
canMakePayment: () => buttonData.enabled,
|
|
supports: {
|
|
features: features,
|
|
},
|
|
});
|