Add subscription support for Block Cart and Block Checkout.

This commit is contained in:
Pedro Silva 2024-01-10 18:12:01 +00:00
parent 02722a3c97
commit f3b30902db
No known key found for this signature in database
GPG key ID: E2EE20C0669D24B3
3 changed files with 151 additions and 5 deletions

View file

@ -63,7 +63,7 @@ export const paypalAddressToWc = (address) => {
* @returns {Object}
*/
export const paypalShippingToWc = (shipping) => {
const [firstName, lastName] = splitFullName(shipping.name.full_name);
const [firstName, lastName] = (shipping.name ? splitFullName(shipping.name.full_name) : ['','']);
return {
...paypalAddressToWc(shipping.address),
first_name: firstName,
@ -87,6 +87,22 @@ export const paypalPayerToWc = (payer) => {
}
}
/**
* @param {Object} subscriber
* @returns {Object}
*/
export const paypalSubscriberToWc = (subscriber) => {
const firstName = subscriber?.name?.given_name ?? '';
const lastName = subscriber?.name?.surname ?? '';
const address = subscriber.address ? paypalAddressToWc(subscriber.shipping_address.address) : {};
return {
...address,
first_name: firstName,
last_name: lastName,
email: subscriber.email_address,
}
}
/**
* @param {Object} order
* @returns {Object}
@ -130,6 +146,17 @@ export const paypalOrderToWcAddresses = (order) => {
return {billingAddress, shippingAddress};
}
/**
*
* @param subscription
* @returns {{shippingAddress: Object, billingAddress: Object}}
*/
export const paypalSubscriptionToWcAddresses = (subscription) => {
const shippingAddress = paypalSubscriberToWc(subscription.subscriber);
let billingAddress = shippingAddress;
return {billingAddress, shippingAddress};
}
/**
* Merges two WC addresses.
* The objects can contain either the WC form fields or billingAddress, shippingAddress objects.

View file

@ -0,0 +1,16 @@
/**
* @param {Object} scriptData
* @returns {Boolean}
*/
export const isPayPalSubscription = (scriptData) => {
return scriptData.data_client_id.has_subscriptions
&& scriptData.data_client_id.paypal_subscriptions_enabled;
}
/**
* @param {Object} scriptData
* @returns {Boolean}
*/
export const cartHasSubscriptionProducts = (scriptData) => {
return !! scriptData?.locations_with_subscription_product?.cart;
}