diff --git a/packages/plugin-ecommerce/src/react/provider/index.tsx b/packages/plugin-ecommerce/src/react/provider/index.tsx index bf12e972c0d..df0f7a99ec8 100644 --- a/packages/plugin-ecommerce/src/react/provider/index.tsx +++ b/packages/plugin-ecommerce/src/react/provider/index.tsx @@ -40,6 +40,7 @@ const defaultContext: EcommerceContextType = { incrementItem: async () => {}, initiatePayment: async () => {}, paymentMethods: [], + refreshCart: async () => {}, removeItem: async () => {}, setCurrency: () => {}, updateAddress: async () => {}, @@ -212,6 +213,12 @@ export const EcommerceProvider: React.FC = ({ [baseAPIURL, cartQuery, cartsSlug], ) + const refreshCart = useCallback(async () => { + if (!cartID) {return} + const updatedCart = await getCart(cartID) + setCart(updatedCart) + }, [cartID, getCart]) + const deleteCart = useCallback( async (cartID: DefaultDocumentIDType) => { const response = await fetch(`${baseAPIURL}/${cartsSlug}/${cartID}`, { @@ -802,6 +809,7 @@ export const EcommerceProvider: React.FC = ({ incrementItem, initiatePayment, paymentMethods, + refreshCart, removeItem, selectedPaymentMethod, setCurrency, @@ -864,13 +872,22 @@ export const useCurrency = () => { } export function useCart() { - const { addItem, cart, clearCart, decrementItem, incrementItem, removeItem } = useEcommerce() + const { addItem, cart, clearCart, decrementItem, incrementItem, refreshCart, removeItem } = + useEcommerce() if (!addItem) { throw new Error('useCart must be used within an EcommerceProvider') } - return { addItem, cart: cart as T, clearCart, decrementItem, incrementItem, removeItem } + return { + addItem, + cart: cart as T, + clearCart, + decrementItem, + incrementItem, + refreshCart, + removeItem, + } } export const usePayments = () => { diff --git a/packages/plugin-ecommerce/src/types/index.ts b/packages/plugin-ecommerce/src/types/index.ts index d9111061d4c..d0b4aab7bc5 100644 --- a/packages/plugin-ecommerce/src/types/index.ts +++ b/packages/plugin-ecommerce/src/types/index.ts @@ -864,6 +864,10 @@ export type EcommerceContextType }, ) => Promise paymentMethods: PaymentAdapterClient[] + /** + * Refresh the cart. + */ + refreshCart: () => Promise /** * Remove an item from the cart by its index ID. */