mirror of
https://github.com/woocommerce/woocommerce-paypal-payments.git
synced 2025-09-01 07:02:48 +08:00
Add address card toggling
This commit is contained in:
parent
96c566321a
commit
f77aae6b90
4 changed files with 93 additions and 5 deletions
|
@ -1,3 +1,5 @@
|
||||||
|
import { dispatch } from '@wordpress/data';
|
||||||
|
|
||||||
export const snapshotFields = ( shippingAddress, billingAddress ) => {
|
export const snapshotFields = ( shippingAddress, billingAddress ) => {
|
||||||
console.log( 'Attempting to snapshot fields' );
|
console.log( 'Attempting to snapshot fields' );
|
||||||
if ( ! shippingAddress || ! billingAddress ) {
|
if ( ! shippingAddress || ! billingAddress ) {
|
||||||
|
@ -74,11 +76,16 @@ export const populateWooFields = (
|
||||||
setWooShippingAddress,
|
setWooShippingAddress,
|
||||||
setWooBillingAddress
|
setWooBillingAddress
|
||||||
) => {
|
) => {
|
||||||
|
const CHECKOUT_STORE_KEY = 'wc/store/checkout';
|
||||||
|
|
||||||
console.log(
|
console.log(
|
||||||
'Populating WooCommerce fields with profile data:',
|
'Populating WooCommerce fields with profile data:',
|
||||||
profileData
|
profileData
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// Disable the 'Use same address for billing' checkbox
|
||||||
|
dispatch( CHECKOUT_STORE_KEY ).__internalSetUseShippingAsBilling( false );
|
||||||
|
|
||||||
// Save shipping address
|
// Save shipping address
|
||||||
const { address, name, phoneNumber } = profileData.shippingAddress;
|
const { address, name, phoneNumber } = profileData.shippingAddress;
|
||||||
|
|
||||||
|
@ -113,4 +120,7 @@ export const populateWooFields = (
|
||||||
|
|
||||||
console.log( 'Setting WooCommerce billing address:', billingAddress );
|
console.log( 'Setting WooCommerce billing address:', billingAddress );
|
||||||
setWooBillingAddress( billingAddress );
|
setWooBillingAddress( billingAddress );
|
||||||
|
|
||||||
|
dispatch( CHECKOUT_STORE_KEY ).setEditingShippingAddress( false );
|
||||||
|
dispatch( CHECKOUT_STORE_KEY ).setEditingBillingAddress( false );
|
||||||
};
|
};
|
||||||
|
|
|
@ -0,0 +1,44 @@
|
||||||
|
import { useCallback } from '@wordpress/element';
|
||||||
|
import { useDispatch, useSelect } from '@wordpress/data';
|
||||||
|
|
||||||
|
const CHECKOUT_STORE_KEY = 'wc/store/checkout';
|
||||||
|
|
||||||
|
export const useAddressEditing = () => {
|
||||||
|
const { isEditingShippingAddress, isEditingBillingAddress } = useSelect(
|
||||||
|
( select ) => {
|
||||||
|
const store = select( CHECKOUT_STORE_KEY );
|
||||||
|
return {
|
||||||
|
isEditingShippingAddress: store.getEditingShippingAddress(),
|
||||||
|
isEditingBillingAddress: store.getEditingBillingAddress(),
|
||||||
|
};
|
||||||
|
},
|
||||||
|
[]
|
||||||
|
);
|
||||||
|
|
||||||
|
const { setEditingShippingAddress, setEditingBillingAddress } =
|
||||||
|
useDispatch( CHECKOUT_STORE_KEY );
|
||||||
|
|
||||||
|
const setShippingAddressEditing = useCallback(
|
||||||
|
( isEditing ) => {
|
||||||
|
setEditingShippingAddress( isEditing );
|
||||||
|
},
|
||||||
|
[ setEditingShippingAddress ]
|
||||||
|
);
|
||||||
|
|
||||||
|
const setBillingAddressEditing = useCallback(
|
||||||
|
( isEditing ) => {
|
||||||
|
console.log( 'Setting billing address editing to:', isEditing );
|
||||||
|
setEditingBillingAddress( isEditing );
|
||||||
|
},
|
||||||
|
[ setEditingBillingAddress ]
|
||||||
|
);
|
||||||
|
|
||||||
|
return {
|
||||||
|
isEditingShippingAddress,
|
||||||
|
isEditingBillingAddress,
|
||||||
|
setShippingAddressEditing,
|
||||||
|
setBillingAddressEditing,
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
export default useAddressEditing;
|
|
@ -1,6 +1,9 @@
|
||||||
import { useCallback } from '@wordpress/element';
|
import { useCallback } from '@wordpress/element';
|
||||||
|
import { useAddressEditing } from './useAddressEditing';
|
||||||
|
|
||||||
export const useCardChange = ( fastlaneSdk, setCard, setWooBillingAddress ) => {
|
export const useCardChange = ( fastlaneSdk, setCard, setWooBillingAddress ) => {
|
||||||
|
const { setBillingAddressEditing } = useAddressEditing();
|
||||||
|
|
||||||
return useCallback( async () => {
|
return useCallback( async () => {
|
||||||
if ( fastlaneSdk ) {
|
if ( fastlaneSdk ) {
|
||||||
const { selectionChanged, selectedCard } =
|
const { selectionChanged, selectedCard } =
|
||||||
|
@ -17,7 +20,7 @@ export const useCardChange = ( fastlaneSdk, setCard, setWooBillingAddress ) => {
|
||||||
const firstName = nameParts[ 0 ];
|
const firstName = nameParts[ 0 ];
|
||||||
const lastName = nameParts.slice( 1 ).join( ' ' );
|
const lastName = nameParts.slice( 1 ).join( ' ' );
|
||||||
|
|
||||||
setWooBillingAddress( {
|
const newBillingAddress = {
|
||||||
first_name: firstName,
|
first_name: firstName,
|
||||||
last_name: lastName,
|
last_name: lastName,
|
||||||
address_1: billingAddress.addressLine1,
|
address_1: billingAddress.addressLine1,
|
||||||
|
@ -26,12 +29,25 @@ export const useCardChange = ( fastlaneSdk, setCard, setWooBillingAddress ) => {
|
||||||
state: billingAddress.adminArea1,
|
state: billingAddress.adminArea1,
|
||||||
postcode: billingAddress.postalCode,
|
postcode: billingAddress.postalCode,
|
||||||
country: billingAddress.countryCode,
|
country: billingAddress.countryCode,
|
||||||
|
};
|
||||||
|
|
||||||
|
await new Promise( ( resolve ) => {
|
||||||
|
setWooBillingAddress( newBillingAddress );
|
||||||
|
resolve();
|
||||||
} );
|
} );
|
||||||
|
|
||||||
console.log( 'Billing address updated:', billingAddress );
|
await new Promise( ( resolve ) => {
|
||||||
|
setBillingAddressEditing( false );
|
||||||
|
resolve();
|
||||||
|
} );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}, [ fastlaneSdk, setCard ] );
|
}, [
|
||||||
|
fastlaneSdk,
|
||||||
|
setCard,
|
||||||
|
setWooBillingAddress,
|
||||||
|
setBillingAddressEditing,
|
||||||
|
] );
|
||||||
};
|
};
|
||||||
|
|
||||||
export default useCardChange;
|
export default useCardChange;
|
||||||
|
|
|
@ -1,10 +1,13 @@
|
||||||
import { useCallback } from '@wordpress/element';
|
import { useCallback } from '@wordpress/element';
|
||||||
|
import { useAddressEditing } from './useAddressEditing';
|
||||||
|
|
||||||
export const useShippingAddressChange = (
|
export const useShippingAddressChange = (
|
||||||
fastlaneSdk,
|
fastlaneSdk,
|
||||||
setShippingAddress,
|
setShippingAddress,
|
||||||
setWooShippingAddress
|
setWooShippingAddress
|
||||||
) => {
|
) => {
|
||||||
|
const { setShippingAddressEditing } = useAddressEditing();
|
||||||
|
|
||||||
return useCallback( async () => {
|
return useCallback( async () => {
|
||||||
if ( fastlaneSdk ) {
|
if ( fastlaneSdk ) {
|
||||||
const { selectionChanged, selectedAddress } =
|
const { selectionChanged, selectedAddress } =
|
||||||
|
@ -18,7 +21,7 @@ export const useShippingAddressChange = (
|
||||||
|
|
||||||
const { address, name, phoneNumber } = selectedAddress;
|
const { address, name, phoneNumber } = selectedAddress;
|
||||||
|
|
||||||
setWooShippingAddress( {
|
const newShippingAddress = {
|
||||||
first_name: name.firstName,
|
first_name: name.firstName,
|
||||||
last_name: name.lastName,
|
last_name: name.lastName,
|
||||||
address_1: address.addressLine1,
|
address_1: address.addressLine1,
|
||||||
|
@ -28,10 +31,25 @@ export const useShippingAddressChange = (
|
||||||
postcode: address.postalCode,
|
postcode: address.postalCode,
|
||||||
country: address.countryCode,
|
country: address.countryCode,
|
||||||
phone: phoneNumber.nationalNumber,
|
phone: phoneNumber.nationalNumber,
|
||||||
|
};
|
||||||
|
|
||||||
|
await new Promise( ( resolve ) => {
|
||||||
|
setWooShippingAddress( newShippingAddress );
|
||||||
|
resolve();
|
||||||
|
} );
|
||||||
|
|
||||||
|
await new Promise( ( resolve ) => {
|
||||||
|
setShippingAddressEditing( false );
|
||||||
|
resolve();
|
||||||
} );
|
} );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}, [ fastlaneSdk, setShippingAddress, setWooShippingAddress ] );
|
}, [
|
||||||
|
fastlaneSdk,
|
||||||
|
setShippingAddress,
|
||||||
|
setWooShippingAddress,
|
||||||
|
setShippingAddressEditing,
|
||||||
|
] );
|
||||||
};
|
};
|
||||||
|
|
||||||
export default useShippingAddressChange;
|
export default useShippingAddressChange;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue