import { useCallback, useMemo } from '@wordpress/element';
import { useDispatch, useSelect } from '@wordpress/data';
/**
* Custom hook to manage customer data in the WooCommerce store.
*
* @return {Object} An object containing customer addresses and setter functions.
*/
export const useCustomerData = () => {
// Fetch customer data from the WooCommerce store
const customerData = useSelect( ( select ) =>
select( 'wc/store/cart' ).getCustomerData()
);
// Get dispatch functions to update shipping and billing addresses
const {
setShippingAddress: setShippingAddressDispatch,
setBillingAddress: setBillingAddressDispatch,
} = useDispatch( 'wc/store/cart' );
// Memoized function to update shipping address
const setShippingAddress = useCallback(
( address ) => {
setShippingAddressDispatch( address );
},
[ setShippingAddressDispatch ]
);
// Memoized function to update billing address
const setBillingAddress = useCallback(
( address ) => {
setBillingAddressDispatch( address );
},
[ setBillingAddressDispatch ]
);
// Return memoized object with customer data and setter functions
return useMemo(
() => ( {
shippingAddress: customerData.shippingAddress,
billingAddress: customerData.billingAddress,
setShippingAddress,
setBillingAddress,
} ),
[
customerData.shippingAddress,
customerData.billingAddress,
setShippingAddress,
setBillingAddress,
]
);
};
export default useCustomerData;