woocommerce/plugins/woocommerce-blocks/assets/js/base/hooks/shipping/use-shipping-rates.js

41 lines
1.5 KiB
JavaScript

/**
* External dependencies
*/
import { useSelect } from '@wordpress/data';
import { CART_STORE_KEY as storeKey } from '@woocommerce/block-data';
/**
* Internal dependencies
*/
import { useStoreCart } from '../cart/use-store-cart';
import { useShippingAddress } from '../shipping/use-shipping-address';
/**
* This is a custom hook that is wired up to the `wc/store/cart/shipping-rates` route.
* Given a a set of default fields keys, this will handle shipping form state and load
* new rates when certain fields change.
*
* @return {Object} This hook will return an object with three properties:
* - {Boolean} shippingRatesLoading A boolean indicating whether the shipping
* rates are still loading or not.
* - {Function} setShippingAddress An function that optimistically
* update shipping address and dispatches async rate fetching.
* - {Object} shippingAddress An object containing shipping address.
* - {Object} shippingAddress True when address data exists.
*/
export const useShippingRates = () => {
const { cartErrors, shippingRates } = useStoreCart();
const { shippingAddress, setShippingAddress } = useShippingAddress();
const shippingRatesLoading = useSelect(
( select ) => select( storeKey ).areShippingRatesLoading(),
[]
);
return {
shippingRates,
shippingAddress,
setShippingAddress,
shippingRatesLoading,
shippingRatesErrors: cartErrors,
hasShippingAddress: !! shippingAddress.country,
};
};