Add address card toggling

This commit is contained in:
Daniel Dudzic 2024-09-13 22:30:04 +02:00
parent 96c566321a
commit f77aae6b90
No known key found for this signature in database
GPG key ID: 31B40D33E3465483
4 changed files with 93 additions and 5 deletions

View file

@ -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 );
}; };

View file

@ -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;

View file

@ -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;

View file

@ -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;