diff --git a/packages/plugin-ecommerce/src/react/provider/index.tsx b/packages/plugin-ecommerce/src/react/provider/index.tsx index 311ccf58e91..422c05872ca 100644 --- a/packages/plugin-ecommerce/src/react/provider/index.tsx +++ b/packages/plugin-ecommerce/src/react/provider/index.tsx @@ -50,6 +50,7 @@ const defaultContext: EcommerceContextType = { initiatePayment: async () => {}, isLoading: false, paymentMethods: [], + refreshCart: async () => {}, removeItem: async () => {}, setCurrency: () => {}, updateAddress: async () => {}, @@ -249,6 +250,12 @@ export const EcommerceProvider: React.FC = ({ [baseAPIURL, cartQuery, cartsSlug, cartSecret], ) + const refreshCart = useCallback(async () => { + if (!cartID) {return} + const updatedCart = await getCart(cartID) + setCart(updatedCart) + }, [cartID, getCart]) + const deleteCart = useCallback( async (cartID: DefaultDocumentIDType) => { // Build query params with secret if provided @@ -895,6 +902,7 @@ export const EcommerceProvider: React.FC = ({ initiatePayment, isLoading, paymentMethods, + refreshCart, removeItem, selectedPaymentMethod, setCurrency, @@ -957,8 +965,7 @@ export const useCurrency = () => { } export function useCart() { - const { addItem, cart, clearCart, decrementItem, incrementItem, isLoading, removeItem } = - useEcommerce() + const { addItem, cart, clearCart, decrementItem, incrementItem, refreshCart, isLoading, removeItem } = useEcommerce() if (!addItem) { throw new Error('useCart must be used within an EcommerceProvider') @@ -970,6 +977,7 @@ export function useCart() { clearCart, decrementItem, incrementItem, + refreshCart, isLoading, removeItem, } diff --git a/packages/plugin-ecommerce/src/types/index.ts b/packages/plugin-ecommerce/src/types/index.ts index 2ffaf38f1df..caf55c687b1 100644 --- a/packages/plugin-ecommerce/src/types/index.ts +++ b/packages/plugin-ecommerce/src/types/index.ts @@ -882,6 +882,10 @@ export type EcommerceContextType Promise /** * Remove an item from the cart by its index ID. */