@payloadcms/plugin-ecommerce 3.68.0-internal.2b8df4a → 3.68.0-internal.35482da

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -367,7 +367,8 @@ export const EcommerceProvider = ({ addressesSlug = 'addresses', api, cartsSlug
367
367
  ] : [];
368
368
  if (existingItemIndex !== -1) {
369
369
  // If the item exists, increment its quantity
370
- updatedItems[existingItemIndex].quantity = updatedItems[existingItemIndex].quantity + 1; // Increment by 1
370
+ updatedItems[existingItemIndex].quantity = updatedItems[existingItemIndex].quantity + 1 // Increment by 1
371
+ ;
371
372
  // Update the cart with the new items
372
373
  await updateCart(cartID, {
373
374
  items: updatedItems
@@ -420,7 +421,8 @@ export const EcommerceProvider = ({ addressesSlug = 'addresses', api, cartsSlug
420
421
  ] : [];
421
422
  if (existingItemIndex !== -1) {
422
423
  // If the item exists, decrement its quantity
423
- updatedItems[existingItemIndex].quantity = updatedItems[existingItemIndex].quantity - 1; // Decrement by 1
424
+ updatedItems[existingItemIndex].quantity = updatedItems[existingItemIndex].quantity - 1 // Decrement by 1
425
+ ;
424
426
  // If the quantity reaches 0, remove the item from the cart
425
427
  if (updatedItems[existingItemIndex].quantity <= 0) {
426
428
  updatedItems.splice(existingItemIndex, 1);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/react/provider/index.tsx"],"sourcesContent":["'use client'\nimport type { DefaultDocumentIDType, TypedUser } from 'payload'\n\nimport { deepMergeSimple } from 'payload/shared'\nimport * as qs from 'qs-esm'\nimport React, {\n createContext,\n use,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n useTransition,\n} from 'react'\n\nimport type {\n AddressesCollection,\n CartItem,\n CartsCollection,\n ContextProps,\n Currency,\n EcommerceContextType,\n} from '../../types/index.js'\n\nconst defaultContext: EcommerceContextType = {\n addItem: async () => {},\n clearCart: async () => {},\n confirmOrder: async () => {},\n createAddress: async () => {},\n currenciesConfig: {\n defaultCurrency: 'USD',\n supportedCurrencies: [\n {\n code: 'USD',\n decimals: 2,\n label: 'US Dollar',\n symbol: '$',\n },\n ],\n },\n currency: {\n code: 'USD',\n decimals: 2,\n label: 'US Dollar',\n symbol: '$',\n },\n decrementItem: async () => {},\n incrementItem: async () => {},\n initiatePayment: async () => {},\n isLoading: false,\n paymentMethods: [],\n removeItem: async () => {},\n setCurrency: () => {},\n updateAddress: async () => {},\n}\n\nconst EcommerceContext = createContext<EcommerceContextType>(defaultContext)\n\nconst defaultLocalStorage = {\n key: 'cart',\n}\n\nexport const EcommerceProvider: React.FC<ContextProps> = ({\n addressesSlug = 'addresses',\n api,\n cartsSlug = 'carts',\n children,\n currenciesConfig = {\n defaultCurrency: 'USD',\n supportedCurrencies: [\n {\n code: 'USD',\n decimals: 2,\n label: 'US Dollar',\n symbol: '$',\n },\n ],\n },\n customersSlug = 'users',\n debug = false,\n paymentMethods = [],\n syncLocalStorage = true,\n}) => {\n const localStorageConfig =\n syncLocalStorage && typeof syncLocalStorage === 'object'\n ? {\n ...defaultLocalStorage,\n ...syncLocalStorage,\n }\n : defaultLocalStorage\n\n const { apiRoute = '/api', cartsFetchQuery = {}, serverURL = '' } = api || {}\n const baseAPIURL = `${serverURL}${apiRoute}`\n\n const [isLoading, startTransition] = useTransition()\n\n const [user, setUser] = useState<null | TypedUser>(null)\n\n const [addresses, setAddresses] = useState<AddressesCollection[]>()\n\n const hasRendered = useRef(false)\n\n /**\n * The ID of the cart associated with the current session.\n * This is used to identify the cart in the database or local storage.\n * It can be null if no cart has been created yet.\n */\n const [cartID, setCartID] = useState<DefaultDocumentIDType>()\n /**\n * The secret for accessing guest carts without authentication.\n * This is generated when a guest user creates a cart.\n */\n const [cartSecret, setCartSecret] = useState<string | undefined>(undefined)\n const [cart, setCart] = useState<CartsCollection>()\n\n const [selectedCurrency, setSelectedCurrency] = useState<Currency>(\n () =>\n currenciesConfig.supportedCurrencies.find(\n (c) => c.code === currenciesConfig.defaultCurrency,\n )!,\n )\n\n const [selectedPaymentMethod, setSelectedPaymentMethod] = useState<null | string>(null)\n\n const cartQuery = useMemo(() => {\n const priceField = `priceIn${selectedCurrency.code}`\n\n const baseQuery = {\n depth: 0,\n populate: {\n products: {\n [priceField]: true,\n },\n variants: {\n options: true,\n [priceField]: true,\n },\n },\n select: {\n items: true,\n subtotal: true,\n },\n }\n\n return deepMergeSimple(baseQuery, cartsFetchQuery)\n }, [selectedCurrency.code, cartsFetchQuery])\n\n const createCart = useCallback(\n async (initialData: Record<string, unknown>) => {\n const query = qs.stringify(cartQuery)\n\n const response = await fetch(`${baseAPIURL}/${cartsSlug}?${query}`, {\n body: JSON.stringify({\n ...initialData,\n currency: selectedCurrency.code,\n customer: user?.id,\n }),\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json',\n },\n method: 'POST',\n })\n\n if (!response.ok) {\n const errorText = await response.text()\n throw new Error(`Failed to create cart: ${errorText}`)\n }\n\n const data = await response.json()\n\n if (data.error) {\n throw new Error(`Cart creation error: ${data.error}`)\n }\n\n // Store the secret for guest cart access\n if (!user && data.doc?.secret) {\n setCartSecret(data.doc.secret)\n }\n\n return data.doc as CartsCollection\n },\n [baseAPIURL, cartQuery, cartsSlug, selectedCurrency.code, user],\n )\n\n const getCart = useCallback(\n async (cartID: DefaultDocumentIDType, options?: { secret?: string }) => {\n const secret = options?.secret\n\n // Build query params with secret if provided\n const queryParams = {\n ...cartQuery,\n ...(secret ? { secret } : {}),\n }\n const query = qs.stringify(queryParams)\n\n const response = await fetch(`${baseAPIURL}/${cartsSlug}/${cartID}?${query}`, {\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json',\n },\n method: 'GET',\n })\n\n if (!response.ok) {\n const errorText = await response.text()\n throw new Error(`Failed to fetch cart: ${errorText}`)\n }\n\n const data = await response.json()\n\n if (data.error) {\n throw new Error(`Cart fetch error: ${data.error}`)\n }\n\n return data as CartsCollection\n },\n [baseAPIURL, cartQuery, cartsSlug],\n )\n\n const updateCart = useCallback(\n async (cartID: DefaultDocumentIDType, data: Partial<CartsCollection>) => {\n // Build query params with secret if provided\n const queryParams = {\n ...cartQuery,\n ...(cartSecret ? { secret: cartSecret } : {}),\n }\n const query = qs.stringify(queryParams)\n\n const response = await fetch(`${baseAPIURL}/${cartsSlug}/${cartID}?${query}`, {\n body: JSON.stringify(data),\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json',\n },\n method: 'PATCH',\n })\n\n if (!response.ok) {\n const errorText = await response.text()\n throw new Error(`Failed to update cart: ${errorText}`)\n }\n\n const updatedCart = await response.json()\n\n setCart(updatedCart.doc as CartsCollection)\n },\n [baseAPIURL, cartQuery, cartsSlug, cartSecret],\n )\n\n const deleteCart = useCallback(\n async (cartID: DefaultDocumentIDType) => {\n // Build query params with secret if provided\n const queryParams = cartSecret ? { secret: cartSecret } : {}\n const query = qs.stringify(queryParams)\n const url = `${baseAPIURL}/${cartsSlug}/${cartID}${query ? `?${query}` : ''}`\n\n const response = await fetch(url, {\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json',\n },\n method: 'DELETE',\n })\n\n if (!response.ok) {\n const errorText = await response.text()\n throw new Error(`Failed to delete cart: ${errorText}`)\n }\n\n setCart(undefined)\n setCartID(undefined)\n setCartSecret(undefined)\n },\n [baseAPIURL, cartsSlug, cartSecret],\n )\n\n // Persist cart ID and secret to localStorage\n useEffect(() => {\n if (hasRendered.current) {\n if (syncLocalStorage) {\n if (cartID) {\n localStorage.setItem(localStorageConfig.key, cartID as string)\n } else {\n localStorage.removeItem(localStorageConfig.key)\n }\n\n if (cartSecret) {\n localStorage.setItem(`${localStorageConfig.key}_secret`, cartSecret)\n } else {\n localStorage.removeItem(`${localStorageConfig.key}_secret`)\n }\n }\n }\n }, [cartID, cartSecret, localStorageConfig.key, syncLocalStorage])\n\n const addItem: EcommerceContextType['addItem'] = useCallback(\n async (item, quantity = 1) => {\n return new Promise<void>((resolve) => {\n startTransition(async () => {\n if (cartID) {\n const existingCart = await getCart(cartID, { secret: cartSecret })\n\n if (!existingCart) {\n // console.error(`Cart with ID \"${cartID}\" not found`)\n\n setCartID(undefined)\n setCart(undefined)\n return\n }\n\n // Check if the item already exists in the cart\n const existingItemIndex =\n existingCart.items?.findIndex((cartItem: CartItem) => {\n const productID =\n typeof cartItem.product === 'object' ? cartItem.product.id : item.product\n const variantID =\n cartItem.variant && typeof cartItem.variant === 'object'\n ? cartItem.variant.id\n : item.variant\n\n return (\n productID === item.product &&\n (item.variant && variantID ? variantID === item.variant : true)\n )\n }) ?? -1\n\n let updatedItems = existingCart.items ? [...existingCart.items] : []\n\n if (existingItemIndex !== -1) {\n // If the item exists, update its quantity\n updatedItems[existingItemIndex].quantity =\n updatedItems[existingItemIndex].quantity + quantity\n\n // Update the cart with the new items\n await updateCart(cartID, {\n items: updatedItems,\n })\n } else {\n // If the item does not exist, add it to the cart\n updatedItems = [...(existingCart.items ?? []), { ...item, quantity }]\n }\n\n // Update the cart with the new items\n await updateCart(cartID, {\n items: updatedItems,\n })\n } else {\n // If no cartID exists, create a new cart\n const newCart = await createCart({ items: [{ ...item, quantity }] })\n\n setCartID(newCart.id)\n setCart(newCart)\n }\n resolve()\n })\n })\n },\n [cartID, cartSecret, createCart, getCart, startTransition, updateCart],\n )\n\n const removeItem: EcommerceContextType['removeItem'] = useCallback(\n async (targetID) => {\n return new Promise<void>((resolve) => {\n startTransition(async () => {\n if (!cartID) {\n resolve()\n return\n }\n\n const existingCart = await getCart(cartID, { secret: cartSecret })\n\n if (!existingCart) {\n // console.error(`Cart with ID \"${cartID}\" not found`)\n setCartID(undefined)\n setCart(undefined)\n resolve()\n return\n }\n\n // Check if the item already exists in the cart\n const existingItemIndex =\n existingCart.items?.findIndex((cartItem: CartItem) => cartItem.id === targetID) ?? -1\n\n if (existingItemIndex !== -1) {\n // If the item exists, remove it from the cart\n const updatedItems = existingCart.items ? [...existingCart.items] : []\n updatedItems.splice(existingItemIndex, 1)\n\n // Update the cart with the new items\n await updateCart(cartID, {\n items: updatedItems,\n })\n }\n resolve()\n })\n })\n },\n [cartID, cartSecret, getCart, startTransition, updateCart],\n )\n\n const incrementItem: EcommerceContextType['incrementItem'] = useCallback(\n async (targetID) => {\n return new Promise<void>((resolve) => {\n startTransition(async () => {\n if (!cartID) {\n resolve()\n return\n }\n\n const existingCart = await getCart(cartID, { secret: cartSecret })\n\n if (!existingCart) {\n // console.error(`Cart with ID \"${cartID}\" not found`)\n setCartID(undefined)\n setCart(undefined)\n resolve()\n return\n }\n\n // Check if the item already exists in the cart\n const existingItemIndex =\n existingCart.items?.findIndex((cartItem: CartItem) => cartItem.id === targetID) ?? -1\n\n let updatedItems = existingCart.items ? [...existingCart.items] : []\n\n if (existingItemIndex !== -1) {\n // If the item exists, increment its quantity\n updatedItems[existingItemIndex].quantity = updatedItems[existingItemIndex].quantity + 1 // Increment by 1\n // Update the cart with the new items\n await updateCart(cartID, {\n items: updatedItems,\n })\n } else {\n // If the item does not exist, add it to the cart with quantity 1\n updatedItems = [...(existingCart.items ?? []), { product: targetID, quantity: 1 }]\n // Update the cart with the new items\n await updateCart(cartID, {\n items: updatedItems,\n })\n }\n resolve()\n })\n })\n },\n [cartID, cartSecret, getCart, startTransition, updateCart],\n )\n\n const decrementItem: EcommerceContextType['decrementItem'] = useCallback(\n async (targetID) => {\n return new Promise<void>((resolve) => {\n startTransition(async () => {\n if (!cartID) {\n resolve()\n return\n }\n\n const existingCart = await getCart(cartID, { secret: cartSecret })\n\n if (!existingCart) {\n // console.error(`Cart with ID \"${cartID}\" not found`)\n setCartID(undefined)\n setCart(undefined)\n resolve()\n return\n }\n\n // Check if the item already exists in the cart\n const existingItemIndex =\n existingCart.items?.findIndex((cartItem: CartItem) => cartItem.id === targetID) ?? -1\n\n const updatedItems = existingCart.items ? [...existingCart.items] : []\n\n if (existingItemIndex !== -1) {\n // If the item exists, decrement its quantity\n updatedItems[existingItemIndex].quantity = updatedItems[existingItemIndex].quantity - 1 // Decrement by 1\n\n // If the quantity reaches 0, remove the item from the cart\n if (updatedItems[existingItemIndex].quantity <= 0) {\n updatedItems.splice(existingItemIndex, 1)\n }\n\n // Update the cart with the new items\n await updateCart(cartID, {\n items: updatedItems,\n })\n }\n resolve()\n })\n })\n },\n [cartID, cartSecret, getCart, startTransition, updateCart],\n )\n\n const clearCart: EcommerceContextType['clearCart'] = useCallback(async () => {\n return new Promise<void>((resolve) => {\n startTransition(async () => {\n if (cartID) {\n await deleteCart(cartID)\n }\n resolve()\n })\n })\n }, [cartID, deleteCart, startTransition])\n\n const setCurrency: EcommerceContextType['setCurrency'] = useCallback(\n (currency) => {\n if (selectedCurrency.code === currency) {\n return\n }\n\n const foundCurrency = currenciesConfig.supportedCurrencies.find((c) => c.code === currency)\n if (!foundCurrency) {\n throw new Error(`Currency with code \"${currency}\" not found in config`)\n }\n\n setSelectedCurrency(foundCurrency)\n },\n [currenciesConfig.supportedCurrencies, selectedCurrency.code],\n )\n\n const initiatePayment = useCallback<EcommerceContextType['initiatePayment']>(\n async (paymentMethodID, options) => {\n const paymentMethod = paymentMethods.find((method) => method.name === paymentMethodID)\n\n if (!paymentMethod) {\n throw new Error(`Payment method with ID \"${paymentMethodID}\" not found`)\n }\n\n if (!cartID) {\n throw new Error(`No cart is provided.`)\n }\n\n setSelectedPaymentMethod(paymentMethodID)\n\n if (paymentMethod.initiatePayment) {\n const fetchURL = `${baseAPIURL}/payments/${paymentMethodID}/initiate`\n\n const data = {\n cartID,\n currency: selectedCurrency.code,\n }\n\n try {\n const response = await fetch(fetchURL, {\n body: JSON.stringify({\n ...data,\n ...(options?.additionalData || {}),\n }),\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json',\n },\n method: 'POST',\n })\n\n if (!response.ok) {\n const responseError = await response.text()\n throw new Error(responseError)\n }\n\n const responseData = await response.json()\n\n if (responseData.error) {\n throw new Error(responseData.error)\n }\n\n return responseData\n } catch (error) {\n if (debug) {\n // eslint-disable-next-line no-console\n console.error('Error initiating payment:', error)\n }\n throw new Error(error instanceof Error ? error.message : 'Failed to initiate payment')\n }\n } else {\n throw new Error(`Payment method \"${paymentMethodID}\" does not support payment initiation`)\n }\n },\n [baseAPIURL, cartID, debug, paymentMethods, selectedCurrency.code],\n )\n\n const confirmOrder = useCallback<EcommerceContextType['initiatePayment']>(\n async (paymentMethodID, options) => {\n if (!cartID) {\n throw new Error(`Cart is empty.`)\n }\n\n const paymentMethod = paymentMethods.find((pm) => pm.name === paymentMethodID)\n\n if (!paymentMethod) {\n throw new Error(`Payment method with ID \"${paymentMethodID}\" not found`)\n }\n\n if (paymentMethod.confirmOrder) {\n const fetchURL = `${baseAPIURL}/payments/${paymentMethodID}/confirm-order`\n\n const data = {\n cartID,\n currency: selectedCurrency.code,\n }\n\n const response = await fetch(fetchURL, {\n body: JSON.stringify({\n ...data,\n ...(options?.additionalData || {}),\n }),\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json',\n },\n method: 'POST',\n })\n\n if (!response.ok) {\n const responseError = await response.text()\n throw new Error(responseError)\n }\n\n const responseData = await response.json()\n\n if (responseData.error) {\n throw new Error(responseData.error)\n }\n\n return responseData\n } else {\n throw new Error(`Payment method \"${paymentMethodID}\" does not support order confirmation`)\n }\n },\n [baseAPIURL, cartID, paymentMethods, selectedCurrency.code],\n )\n\n const getUser = useCallback(async () => {\n try {\n const query = qs.stringify({\n depth: 0,\n select: {\n id: true,\n carts: true,\n },\n })\n\n const response = await fetch(`${baseAPIURL}/${customersSlug}/me?${query}`, {\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json',\n },\n method: 'GET',\n })\n\n if (!response.ok) {\n const errorText = await response.text()\n throw new Error(`Failed to fetch user: ${errorText}`)\n }\n\n const userData = await response.json()\n\n if (userData.error) {\n throw new Error(`User fetch error: ${userData.error}`)\n }\n\n if (userData.user) {\n setUser(userData.user as TypedUser)\n return userData.user as TypedUser\n }\n } catch (error) {\n if (debug) {\n // eslint-disable-next-line no-console\n console.error('Error fetching user:', error)\n }\n setUser(null)\n throw new Error(\n `Failed to fetch user: ${error instanceof Error ? error.message : 'Unknown error'}`,\n )\n }\n }, [baseAPIURL, customersSlug, debug])\n\n const getAddresses = useCallback(async () => {\n if (!user) {\n return\n }\n\n try {\n const query = qs.stringify({\n depth: 0,\n limit: 0,\n pagination: false,\n })\n\n const response = await fetch(`${baseAPIURL}/${addressesSlug}?${query}`, {\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json',\n },\n method: 'GET',\n })\n\n if (!response.ok) {\n const errorText = await response.text()\n\n throw new Error(errorText)\n }\n\n const data = await response.json()\n\n if (data.error) {\n throw new Error(`Address fetch error: ${data.error}`)\n }\n\n if (data.docs && data.docs.length > 0) {\n setAddresses(data.docs)\n }\n } catch (error) {\n if (debug) {\n // eslint-disable-next-line no-console\n console.error('Error fetching addresses:', error)\n }\n setAddresses(undefined)\n throw new Error(\n `Failed to fetch addresses: ${error instanceof Error ? error.message : 'Unknown error'}`,\n )\n }\n }, [user, baseAPIURL, addressesSlug, debug])\n\n const updateAddress = useCallback<EcommerceContextType['updateAddress']>(\n async (addressID, address) => {\n if (!user) {\n throw new Error('User must be logged in to update or create an address')\n }\n\n try {\n const response = await fetch(`${baseAPIURL}/${addressesSlug}/${addressID}`, {\n body: JSON.stringify(address),\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json',\n },\n method: 'PATCH',\n })\n\n if (!response.ok) {\n const errorText = await response.text()\n throw new Error(`Failed to update or create address: ${errorText}`)\n }\n\n const data = await response.json()\n\n if (data.error) {\n throw new Error(`Address update/create error: ${data.error}`)\n }\n\n // Refresh addresses after updating or creating\n await getAddresses()\n } catch (error) {\n if (debug) {\n // eslint-disable-next-line no-console\n console.error('Error updating or creating address:', error)\n }\n\n throw new Error(\n `Failed to update or create address: ${error instanceof Error ? error.message : 'Unknown error'}`,\n )\n }\n },\n [user, baseAPIURL, addressesSlug, getAddresses, debug],\n )\n\n const createAddress = useCallback<EcommerceContextType['createAddress']>(\n async (address) => {\n if (!user) {\n throw new Error('User must be logged in to update or create an address')\n }\n\n try {\n const response = await fetch(`${baseAPIURL}/${addressesSlug}`, {\n body: JSON.stringify(address),\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json',\n },\n method: 'POST',\n })\n\n if (!response.ok) {\n const errorText = await response.text()\n throw new Error(`Failed to update or create address: ${errorText}`)\n }\n\n const data = await response.json()\n\n if (data.error) {\n throw new Error(`Address update/create error: ${data.error}`)\n }\n\n // Refresh addresses after updating or creating\n await getAddresses()\n } catch (error) {\n if (debug) {\n // eslint-disable-next-line no-console\n console.error('Error updating or creating address:', error)\n }\n\n throw new Error(\n `Failed to update or create address: ${error instanceof Error ? error.message : 'Unknown error'}`,\n )\n }\n },\n [user, baseAPIURL, addressesSlug, getAddresses, debug],\n )\n\n // If localStorage is enabled, restore cart from storage\n useEffect(() => {\n if (!hasRendered.current) {\n if (syncLocalStorage) {\n const storedCartID = localStorage.getItem(localStorageConfig.key)\n const storedSecret = localStorage.getItem(`${localStorageConfig.key}_secret`)\n\n if (storedCartID) {\n getCart(storedCartID, { secret: storedSecret || undefined })\n .then((fetchedCart) => {\n setCart(fetchedCart)\n setCartID(storedCartID as DefaultDocumentIDType)\n if (storedSecret) {\n setCartSecret(storedSecret)\n }\n })\n .catch((_) => {\n // console.error('Error fetching cart from localStorage:', error)\n // If there's an error fetching the cart, clear it from localStorage\n localStorage.removeItem(localStorageConfig.key)\n localStorage.removeItem(`${localStorageConfig.key}_secret`)\n setCartID(undefined)\n setCart(undefined)\n setCartSecret(undefined)\n })\n }\n }\n\n hasRendered.current = true\n\n void getUser().then((user) => {\n if (user && user.cart?.docs && user.cart.docs.length > 0) {\n // If the user has carts, we can set the cartID to the first cart\n const cartID =\n typeof user.cart.docs[0] === 'object' ? user.cart.docs[0].id : user.cart.docs[0]\n\n if (cartID) {\n getCart(cartID)\n .then((fetchedCart) => {\n setCart(fetchedCart)\n setCartID(cartID)\n })\n .catch((error) => {\n if (debug) {\n // eslint-disable-next-line no-console\n console.error('Error fetching user cart:', error)\n }\n\n setCart(undefined)\n setCartID(undefined)\n\n throw new Error(`Failed to fetch user cart: ${error.message}`)\n })\n }\n }\n })\n }\n }, [debug, getAddresses, getCart, getUser, localStorageConfig.key, syncLocalStorage])\n\n useEffect(() => {\n if (user) {\n // If the user is logged in, fetch their addresses\n void getAddresses()\n } else {\n // If no user is logged in, clear addresses\n setAddresses(undefined)\n }\n }, [getAddresses, user])\n\n return (\n <EcommerceContext\n value={{\n addItem,\n addresses,\n cart,\n clearCart,\n confirmOrder,\n createAddress,\n currenciesConfig,\n currency: selectedCurrency,\n decrementItem,\n incrementItem,\n initiatePayment,\n isLoading,\n paymentMethods,\n removeItem,\n selectedPaymentMethod,\n setCurrency,\n updateAddress,\n }}\n >\n {children}\n </EcommerceContext>\n )\n}\n\nexport const useEcommerce = () => {\n const context = use(EcommerceContext)\n\n if (!context) {\n throw new Error('useEcommerce must be used within an EcommerceProvider')\n }\n\n return context\n}\n\nexport const useCurrency = () => {\n const { currenciesConfig, currency, setCurrency } = useEcommerce()\n\n const formatCurrency = useCallback(\n (value?: null | number, options?: { currency?: Currency }): string => {\n if (value === undefined || value === null) {\n return ''\n }\n\n const currencyToUse = options?.currency || currency\n\n if (!currencyToUse) {\n return value.toString()\n }\n\n if (value === 0) {\n return `${currencyToUse.symbol}0.${'0'.repeat(currencyToUse.decimals)}`\n }\n\n // Convert from base value (e.g., cents) to decimal value (e.g., dollars)\n const decimalValue = value / Math.pow(10, currencyToUse.decimals)\n\n // Format with the correct number of decimal places\n return `${currencyToUse.symbol}${decimalValue.toFixed(currencyToUse.decimals)}`\n },\n [currency],\n )\n\n if (!currency) {\n throw new Error('useCurrency must be used within an EcommerceProvider')\n }\n\n return {\n currency,\n formatCurrency,\n setCurrency,\n supportedCurrencies: currenciesConfig.supportedCurrencies,\n }\n}\n\nexport function useCart<T extends CartsCollection>() {\n const { addItem, cart, clearCart, decrementItem, incrementItem, isLoading, removeItem } =\n useEcommerce()\n\n if (!addItem) {\n throw new Error('useCart must be used within an EcommerceProvider')\n }\n\n return {\n addItem,\n cart: cart as T,\n clearCart,\n decrementItem,\n incrementItem,\n isLoading,\n removeItem,\n }\n}\n\nexport const usePayments = () => {\n const { confirmOrder, initiatePayment, isLoading, paymentMethods, selectedPaymentMethod } =\n useEcommerce()\n\n if (!initiatePayment) {\n throw new Error('usePayments must be used within an EcommerceProvider')\n }\n\n return { confirmOrder, initiatePayment, isLoading, paymentMethods, selectedPaymentMethod }\n}\n\nexport function useAddresses<T extends AddressesCollection>() {\n const { addresses, createAddress, isLoading, updateAddress } = useEcommerce()\n\n if (!createAddress) {\n throw new Error('usePayments must be used within an EcommerceProvider')\n }\n\n return { addresses: addresses as T[], createAddress, isLoading, updateAddress }\n}\n"],"names":["deepMergeSimple","qs","React","createContext","use","useCallback","useEffect","useMemo","useRef","useState","useTransition","defaultContext","addItem","clearCart","confirmOrder","createAddress","currenciesConfig","defaultCurrency","supportedCurrencies","code","decimals","label","symbol","currency","decrementItem","incrementItem","initiatePayment","isLoading","paymentMethods","removeItem","setCurrency","updateAddress","EcommerceContext","defaultLocalStorage","key","EcommerceProvider","addressesSlug","api","cartsSlug","children","customersSlug","debug","syncLocalStorage","localStorageConfig","apiRoute","cartsFetchQuery","serverURL","baseAPIURL","startTransition","user","setUser","addresses","setAddresses","hasRendered","cartID","setCartID","cartSecret","setCartSecret","undefined","cart","setCart","selectedCurrency","setSelectedCurrency","find","c","selectedPaymentMethod","setSelectedPaymentMethod","cartQuery","priceField","baseQuery","depth","populate","products","variants","options","select","items","subtotal","createCart","initialData","query","stringify","response","fetch","body","JSON","customer","id","credentials","headers","method","ok","errorText","text","Error","data","json","error","doc","secret","getCart","queryParams","updateCart","updatedCart","deleteCart","url","current","localStorage","setItem","item","quantity","Promise","resolve","existingCart","existingItemIndex","findIndex","cartItem","productID","product","variantID","variant","updatedItems","newCart","targetID","splice","foundCurrency","paymentMethodID","paymentMethod","name","fetchURL","additionalData","responseError","responseData","console","message","pm","getUser","carts","userData","getAddresses","limit","pagination","docs","length","addressID","address","storedCartID","getItem","storedSecret","then","fetchedCart","catch","_","value","useEcommerce","context","useCurrency","formatCurrency","currencyToUse","toString","repeat","decimalValue","Math","pow","toFixed","useCart","usePayments","useAddresses"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/react/provider/index.tsx"],"sourcesContent":["'use client'\nimport type { DefaultDocumentIDType, TypedUser } from 'payload'\n\nimport { deepMergeSimple } from 'payload/shared'\nimport * as qs from 'qs-esm'\nimport React, {\n createContext,\n use,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n useTransition,\n} from 'react'\n\nimport type {\n AddressesCollection,\n CartItem,\n CartsCollection,\n ContextProps,\n Currency,\n EcommerceContextType,\n} from '../../types/index.js'\n\nconst defaultContext: EcommerceContextType = {\n addItem: async () => {},\n clearCart: async () => {},\n confirmOrder: async () => {},\n createAddress: async () => {},\n currenciesConfig: {\n defaultCurrency: 'USD',\n supportedCurrencies: [\n {\n code: 'USD',\n decimals: 2,\n label: 'US Dollar',\n symbol: '$',\n },\n ],\n },\n currency: {\n code: 'USD',\n decimals: 2,\n label: 'US Dollar',\n symbol: '$',\n },\n decrementItem: async () => {},\n incrementItem: async () => {},\n initiatePayment: async () => {},\n isLoading: false,\n paymentMethods: [],\n removeItem: async () => {},\n setCurrency: () => {},\n updateAddress: async () => {},\n}\n\nconst EcommerceContext = createContext<EcommerceContextType>(defaultContext)\n\nconst defaultLocalStorage = {\n key: 'cart',\n}\n\nexport const EcommerceProvider: React.FC<ContextProps> = ({\n addressesSlug = 'addresses',\n api,\n cartsSlug = 'carts',\n children,\n currenciesConfig = {\n defaultCurrency: 'USD',\n supportedCurrencies: [\n {\n code: 'USD',\n decimals: 2,\n label: 'US Dollar',\n symbol: '$',\n },\n ],\n },\n customersSlug = 'users',\n debug = false,\n paymentMethods = [],\n syncLocalStorage = true,\n}) => {\n const localStorageConfig =\n syncLocalStorage && typeof syncLocalStorage === 'object'\n ? {\n ...defaultLocalStorage,\n ...syncLocalStorage,\n }\n : defaultLocalStorage\n\n const { apiRoute = '/api', cartsFetchQuery = {}, serverURL = '' } = api || {}\n const baseAPIURL = `${serverURL}${apiRoute}`\n\n const [isLoading, startTransition] = useTransition()\n\n const [user, setUser] = useState<null | TypedUser>(null)\n\n const [addresses, setAddresses] = useState<AddressesCollection[]>()\n\n const hasRendered = useRef(false)\n\n /**\n * The ID of the cart associated with the current session.\n * This is used to identify the cart in the database or local storage.\n * It can be null if no cart has been created yet.\n */\n const [cartID, setCartID] = useState<DefaultDocumentIDType>()\n /**\n * The secret for accessing guest carts without authentication.\n * This is generated when a guest user creates a cart.\n */\n const [cartSecret, setCartSecret] = useState<string | undefined>(undefined)\n const [cart, setCart] = useState<CartsCollection>()\n\n const [selectedCurrency, setSelectedCurrency] = useState<Currency>(\n () =>\n currenciesConfig.supportedCurrencies.find(\n (c) => c.code === currenciesConfig.defaultCurrency,\n )!,\n )\n\n const [selectedPaymentMethod, setSelectedPaymentMethod] = useState<null | string>(null)\n\n const cartQuery = useMemo(() => {\n const priceField = `priceIn${selectedCurrency.code}`\n\n const baseQuery = {\n depth: 0,\n populate: {\n products: {\n [priceField]: true,\n },\n variants: {\n options: true,\n [priceField]: true,\n },\n },\n select: {\n items: true,\n subtotal: true,\n },\n }\n\n return deepMergeSimple(baseQuery, cartsFetchQuery)\n }, [selectedCurrency.code, cartsFetchQuery])\n\n const createCart = useCallback(\n async (initialData: Record<string, unknown>) => {\n const query = qs.stringify(cartQuery)\n\n const response = await fetch(`${baseAPIURL}/${cartsSlug}?${query}`, {\n body: JSON.stringify({\n ...initialData,\n currency: selectedCurrency.code,\n customer: user?.id,\n }),\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json',\n },\n method: 'POST',\n })\n\n if (!response.ok) {\n const errorText = await response.text()\n throw new Error(`Failed to create cart: ${errorText}`)\n }\n\n const data = await response.json()\n\n if (data.error) {\n throw new Error(`Cart creation error: ${data.error}`)\n }\n\n // Store the secret for guest cart access\n if (!user && data.doc?.secret) {\n setCartSecret(data.doc.secret)\n }\n\n return data.doc as CartsCollection\n },\n [baseAPIURL, cartQuery, cartsSlug, selectedCurrency.code, user],\n )\n\n const getCart = useCallback(\n async (cartID: DefaultDocumentIDType, options?: { secret?: string }) => {\n const secret = options?.secret\n\n // Build query params with secret if provided\n const queryParams = {\n ...cartQuery,\n ...(secret ? { secret } : {}),\n }\n const query = qs.stringify(queryParams)\n\n const response = await fetch(`${baseAPIURL}/${cartsSlug}/${cartID}?${query}`, {\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json',\n },\n method: 'GET',\n })\n\n if (!response.ok) {\n const errorText = await response.text()\n throw new Error(`Failed to fetch cart: ${errorText}`)\n }\n\n const data = await response.json()\n\n if (data.error) {\n throw new Error(`Cart fetch error: ${data.error}`)\n }\n\n return data as CartsCollection\n },\n [baseAPIURL, cartQuery, cartsSlug],\n )\n\n const updateCart = useCallback(\n async (cartID: DefaultDocumentIDType, data: Partial<CartsCollection>) => {\n // Build query params with secret if provided\n const queryParams = {\n ...cartQuery,\n ...(cartSecret ? { secret: cartSecret } : {}),\n }\n const query = qs.stringify(queryParams)\n\n const response = await fetch(`${baseAPIURL}/${cartsSlug}/${cartID}?${query}`, {\n body: JSON.stringify(data),\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json',\n },\n method: 'PATCH',\n })\n\n if (!response.ok) {\n const errorText = await response.text()\n throw new Error(`Failed to update cart: ${errorText}`)\n }\n\n const updatedCart = await response.json()\n\n setCart(updatedCart.doc as CartsCollection)\n },\n [baseAPIURL, cartQuery, cartsSlug, cartSecret],\n )\n\n const deleteCart = useCallback(\n async (cartID: DefaultDocumentIDType) => {\n // Build query params with secret if provided\n const queryParams = cartSecret ? { secret: cartSecret } : {}\n const query = qs.stringify(queryParams)\n const url = `${baseAPIURL}/${cartsSlug}/${cartID}${query ? `?${query}` : ''}`\n\n const response = await fetch(url, {\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json',\n },\n method: 'DELETE',\n })\n\n if (!response.ok) {\n const errorText = await response.text()\n throw new Error(`Failed to delete cart: ${errorText}`)\n }\n\n setCart(undefined)\n setCartID(undefined)\n setCartSecret(undefined)\n },\n [baseAPIURL, cartsSlug, cartSecret],\n )\n\n // Persist cart ID and secret to localStorage\n useEffect(() => {\n if (hasRendered.current) {\n if (syncLocalStorage) {\n if (cartID) {\n localStorage.setItem(localStorageConfig.key, cartID as string)\n } else {\n localStorage.removeItem(localStorageConfig.key)\n }\n\n if (cartSecret) {\n localStorage.setItem(`${localStorageConfig.key}_secret`, cartSecret)\n } else {\n localStorage.removeItem(`${localStorageConfig.key}_secret`)\n }\n }\n }\n }, [cartID, cartSecret, localStorageConfig.key, syncLocalStorage])\n\n const addItem: EcommerceContextType['addItem'] = useCallback(\n async (item, quantity = 1) => {\n return new Promise<void>((resolve) => {\n startTransition(async () => {\n if (cartID) {\n const existingCart = await getCart(cartID, { secret: cartSecret })\n\n if (!existingCart) {\n // console.error(`Cart with ID \"${cartID}\" not found`)\n\n setCartID(undefined)\n setCart(undefined)\n return\n }\n\n // Check if the item already exists in the cart\n const existingItemIndex =\n existingCart.items?.findIndex((cartItem: CartItem) => {\n const productID =\n typeof cartItem.product === 'object' ? cartItem.product.id : item.product\n const variantID =\n cartItem.variant && typeof cartItem.variant === 'object'\n ? cartItem.variant.id\n : item.variant\n\n return (\n productID === item.product &&\n (item.variant && variantID ? variantID === item.variant : true)\n )\n }) ?? -1\n\n let updatedItems = existingCart.items ? [...existingCart.items] : []\n\n if (existingItemIndex !== -1) {\n // If the item exists, update its quantity\n updatedItems[existingItemIndex].quantity =\n updatedItems[existingItemIndex].quantity + quantity\n\n // Update the cart with the new items\n await updateCart(cartID, {\n items: updatedItems,\n })\n } else {\n // If the item does not exist, add it to the cart\n updatedItems = [...(existingCart.items ?? []), { ...item, quantity }]\n }\n\n // Update the cart with the new items\n await updateCart(cartID, {\n items: updatedItems,\n })\n } else {\n // If no cartID exists, create a new cart\n const newCart = await createCart({ items: [{ ...item, quantity }] })\n\n setCartID(newCart.id)\n setCart(newCart)\n }\n resolve()\n })\n })\n },\n [cartID, cartSecret, createCart, getCart, startTransition, updateCart],\n )\n\n const removeItem: EcommerceContextType['removeItem'] = useCallback(\n async (targetID) => {\n return new Promise<void>((resolve) => {\n startTransition(async () => {\n if (!cartID) {\n resolve()\n return\n }\n\n const existingCart = await getCart(cartID, { secret: cartSecret })\n\n if (!existingCart) {\n // console.error(`Cart with ID \"${cartID}\" not found`)\n setCartID(undefined)\n setCart(undefined)\n resolve()\n return\n }\n\n // Check if the item already exists in the cart\n const existingItemIndex =\n existingCart.items?.findIndex((cartItem: CartItem) => cartItem.id === targetID) ?? -1\n\n if (existingItemIndex !== -1) {\n // If the item exists, remove it from the cart\n const updatedItems = existingCart.items ? [...existingCart.items] : []\n updatedItems.splice(existingItemIndex, 1)\n\n // Update the cart with the new items\n await updateCart(cartID, {\n items: updatedItems,\n })\n }\n resolve()\n })\n })\n },\n [cartID, cartSecret, getCart, startTransition, updateCart],\n )\n\n const incrementItem: EcommerceContextType['incrementItem'] = useCallback(\n async (targetID) => {\n return new Promise<void>((resolve) => {\n startTransition(async () => {\n if (!cartID) {\n resolve()\n return\n }\n\n const existingCart = await getCart(cartID, { secret: cartSecret })\n\n if (!existingCart) {\n // console.error(`Cart with ID \"${cartID}\" not found`)\n setCartID(undefined)\n setCart(undefined)\n resolve()\n return\n }\n\n // Check if the item already exists in the cart\n const existingItemIndex =\n existingCart.items?.findIndex((cartItem: CartItem) => cartItem.id === targetID) ?? -1\n\n let updatedItems = existingCart.items ? [...existingCart.items] : []\n\n if (existingItemIndex !== -1) {\n // If the item exists, increment its quantity\n updatedItems[existingItemIndex].quantity = updatedItems[existingItemIndex].quantity + 1 // Increment by 1\n // Update the cart with the new items\n await updateCart(cartID, {\n items: updatedItems,\n })\n } else {\n // If the item does not exist, add it to the cart with quantity 1\n updatedItems = [...(existingCart.items ?? []), { product: targetID, quantity: 1 }]\n // Update the cart with the new items\n await updateCart(cartID, {\n items: updatedItems,\n })\n }\n resolve()\n })\n })\n },\n [cartID, cartSecret, getCart, startTransition, updateCart],\n )\n\n const decrementItem: EcommerceContextType['decrementItem'] = useCallback(\n async (targetID) => {\n return new Promise<void>((resolve) => {\n startTransition(async () => {\n if (!cartID) {\n resolve()\n return\n }\n\n const existingCart = await getCart(cartID, { secret: cartSecret })\n\n if (!existingCart) {\n // console.error(`Cart with ID \"${cartID}\" not found`)\n setCartID(undefined)\n setCart(undefined)\n resolve()\n return\n }\n\n // Check if the item already exists in the cart\n const existingItemIndex =\n existingCart.items?.findIndex((cartItem: CartItem) => cartItem.id === targetID) ?? -1\n\n const updatedItems = existingCart.items ? [...existingCart.items] : []\n\n if (existingItemIndex !== -1) {\n // If the item exists, decrement its quantity\n updatedItems[existingItemIndex].quantity = updatedItems[existingItemIndex].quantity - 1 // Decrement by 1\n\n // If the quantity reaches 0, remove the item from the cart\n if (updatedItems[existingItemIndex].quantity <= 0) {\n updatedItems.splice(existingItemIndex, 1)\n }\n\n // Update the cart with the new items\n await updateCart(cartID, {\n items: updatedItems,\n })\n }\n resolve()\n })\n })\n },\n [cartID, cartSecret, getCart, startTransition, updateCart],\n )\n\n const clearCart: EcommerceContextType['clearCart'] = useCallback(async () => {\n return new Promise<void>((resolve) => {\n startTransition(async () => {\n if (cartID) {\n await deleteCart(cartID)\n }\n resolve()\n })\n })\n }, [cartID, deleteCart, startTransition])\n\n const setCurrency: EcommerceContextType['setCurrency'] = useCallback(\n (currency) => {\n if (selectedCurrency.code === currency) {\n return\n }\n\n const foundCurrency = currenciesConfig.supportedCurrencies.find((c) => c.code === currency)\n if (!foundCurrency) {\n throw new Error(`Currency with code \"${currency}\" not found in config`)\n }\n\n setSelectedCurrency(foundCurrency)\n },\n [currenciesConfig.supportedCurrencies, selectedCurrency.code],\n )\n\n const initiatePayment = useCallback<EcommerceContextType['initiatePayment']>(\n async (paymentMethodID, options) => {\n const paymentMethod = paymentMethods.find((method) => method.name === paymentMethodID)\n\n if (!paymentMethod) {\n throw new Error(`Payment method with ID \"${paymentMethodID}\" not found`)\n }\n\n if (!cartID) {\n throw new Error(`No cart is provided.`)\n }\n\n setSelectedPaymentMethod(paymentMethodID)\n\n if (paymentMethod.initiatePayment) {\n const fetchURL = `${baseAPIURL}/payments/${paymentMethodID}/initiate`\n\n const data = {\n cartID,\n currency: selectedCurrency.code,\n }\n\n try {\n const response = await fetch(fetchURL, {\n body: JSON.stringify({\n ...data,\n ...(options?.additionalData || {}),\n }),\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json',\n },\n method: 'POST',\n })\n\n if (!response.ok) {\n const responseError = await response.text()\n throw new Error(responseError)\n }\n\n const responseData = await response.json()\n\n if (responseData.error) {\n throw new Error(responseData.error)\n }\n\n return responseData\n } catch (error) {\n if (debug) {\n // eslint-disable-next-line no-console\n console.error('Error initiating payment:', error)\n }\n throw new Error(error instanceof Error ? error.message : 'Failed to initiate payment')\n }\n } else {\n throw new Error(`Payment method \"${paymentMethodID}\" does not support payment initiation`)\n }\n },\n [baseAPIURL, cartID, debug, paymentMethods, selectedCurrency.code],\n )\n\n const confirmOrder = useCallback<EcommerceContextType['initiatePayment']>(\n async (paymentMethodID, options) => {\n if (!cartID) {\n throw new Error(`Cart is empty.`)\n }\n\n const paymentMethod = paymentMethods.find((pm) => pm.name === paymentMethodID)\n\n if (!paymentMethod) {\n throw new Error(`Payment method with ID \"${paymentMethodID}\" not found`)\n }\n\n if (paymentMethod.confirmOrder) {\n const fetchURL = `${baseAPIURL}/payments/${paymentMethodID}/confirm-order`\n\n const data = {\n cartID,\n currency: selectedCurrency.code,\n }\n\n const response = await fetch(fetchURL, {\n body: JSON.stringify({\n ...data,\n ...(options?.additionalData || {}),\n }),\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json',\n },\n method: 'POST',\n })\n\n if (!response.ok) {\n const responseError = await response.text()\n throw new Error(responseError)\n }\n\n const responseData = await response.json()\n\n if (responseData.error) {\n throw new Error(responseData.error)\n }\n\n return responseData\n } else {\n throw new Error(`Payment method \"${paymentMethodID}\" does not support order confirmation`)\n }\n },\n [baseAPIURL, cartID, paymentMethods, selectedCurrency.code],\n )\n\n const getUser = useCallback(async () => {\n try {\n const query = qs.stringify({\n depth: 0,\n select: {\n id: true,\n carts: true,\n },\n })\n\n const response = await fetch(`${baseAPIURL}/${customersSlug}/me?${query}`, {\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json',\n },\n method: 'GET',\n })\n\n if (!response.ok) {\n const errorText = await response.text()\n throw new Error(`Failed to fetch user: ${errorText}`)\n }\n\n const userData = await response.json()\n\n if (userData.error) {\n throw new Error(`User fetch error: ${userData.error}`)\n }\n\n if (userData.user) {\n setUser(userData.user as TypedUser)\n return userData.user as TypedUser\n }\n } catch (error) {\n if (debug) {\n // eslint-disable-next-line no-console\n console.error('Error fetching user:', error)\n }\n setUser(null)\n throw new Error(\n `Failed to fetch user: ${error instanceof Error ? error.message : 'Unknown error'}`,\n )\n }\n }, [baseAPIURL, customersSlug, debug])\n\n const getAddresses = useCallback(async () => {\n if (!user) {\n return\n }\n\n try {\n const query = qs.stringify({\n depth: 0,\n limit: 0,\n pagination: false,\n })\n\n const response = await fetch(`${baseAPIURL}/${addressesSlug}?${query}`, {\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json',\n },\n method: 'GET',\n })\n\n if (!response.ok) {\n const errorText = await response.text()\n\n throw new Error(errorText)\n }\n\n const data = await response.json()\n\n if (data.error) {\n throw new Error(`Address fetch error: ${data.error}`)\n }\n\n if (data.docs && data.docs.length > 0) {\n setAddresses(data.docs)\n }\n } catch (error) {\n if (debug) {\n // eslint-disable-next-line no-console\n console.error('Error fetching addresses:', error)\n }\n setAddresses(undefined)\n throw new Error(\n `Failed to fetch addresses: ${error instanceof Error ? error.message : 'Unknown error'}`,\n )\n }\n }, [user, baseAPIURL, addressesSlug, debug])\n\n const updateAddress = useCallback<EcommerceContextType['updateAddress']>(\n async (addressID, address) => {\n if (!user) {\n throw new Error('User must be logged in to update or create an address')\n }\n\n try {\n const response = await fetch(`${baseAPIURL}/${addressesSlug}/${addressID}`, {\n body: JSON.stringify(address),\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json',\n },\n method: 'PATCH',\n })\n\n if (!response.ok) {\n const errorText = await response.text()\n throw new Error(`Failed to update or create address: ${errorText}`)\n }\n\n const data = await response.json()\n\n if (data.error) {\n throw new Error(`Address update/create error: ${data.error}`)\n }\n\n // Refresh addresses after updating or creating\n await getAddresses()\n } catch (error) {\n if (debug) {\n // eslint-disable-next-line no-console\n console.error('Error updating or creating address:', error)\n }\n\n throw new Error(\n `Failed to update or create address: ${error instanceof Error ? error.message : 'Unknown error'}`,\n )\n }\n },\n [user, baseAPIURL, addressesSlug, getAddresses, debug],\n )\n\n const createAddress = useCallback<EcommerceContextType['createAddress']>(\n async (address) => {\n if (!user) {\n throw new Error('User must be logged in to update or create an address')\n }\n\n try {\n const response = await fetch(`${baseAPIURL}/${addressesSlug}`, {\n body: JSON.stringify(address),\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json',\n },\n method: 'POST',\n })\n\n if (!response.ok) {\n const errorText = await response.text()\n throw new Error(`Failed to update or create address: ${errorText}`)\n }\n\n const data = await response.json()\n\n if (data.error) {\n throw new Error(`Address update/create error: ${data.error}`)\n }\n\n // Refresh addresses after updating or creating\n await getAddresses()\n } catch (error) {\n if (debug) {\n // eslint-disable-next-line no-console\n console.error('Error updating or creating address:', error)\n }\n\n throw new Error(\n `Failed to update or create address: ${error instanceof Error ? error.message : 'Unknown error'}`,\n )\n }\n },\n [user, baseAPIURL, addressesSlug, getAddresses, debug],\n )\n\n // If localStorage is enabled, restore cart from storage\n useEffect(() => {\n if (!hasRendered.current) {\n if (syncLocalStorage) {\n const storedCartID = localStorage.getItem(localStorageConfig.key)\n const storedSecret = localStorage.getItem(`${localStorageConfig.key}_secret`)\n\n if (storedCartID) {\n getCart(storedCartID, { secret: storedSecret || undefined })\n .then((fetchedCart) => {\n setCart(fetchedCart)\n setCartID(storedCartID as DefaultDocumentIDType)\n if (storedSecret) {\n setCartSecret(storedSecret)\n }\n })\n .catch((_) => {\n // console.error('Error fetching cart from localStorage:', error)\n // If there's an error fetching the cart, clear it from localStorage\n localStorage.removeItem(localStorageConfig.key)\n localStorage.removeItem(`${localStorageConfig.key}_secret`)\n setCartID(undefined)\n setCart(undefined)\n setCartSecret(undefined)\n })\n }\n }\n\n hasRendered.current = true\n\n void getUser().then((user) => {\n if (user && user.cart?.docs && user.cart.docs.length > 0) {\n // If the user has carts, we can set the cartID to the first cart\n const cartID =\n typeof user.cart.docs[0] === 'object' ? user.cart.docs[0].id : user.cart.docs[0]\n\n if (cartID) {\n getCart(cartID)\n .then((fetchedCart) => {\n setCart(fetchedCart)\n setCartID(cartID)\n })\n .catch((error) => {\n if (debug) {\n // eslint-disable-next-line no-console\n console.error('Error fetching user cart:', error)\n }\n\n setCart(undefined)\n setCartID(undefined)\n\n throw new Error(`Failed to fetch user cart: ${error.message}`)\n })\n }\n }\n })\n }\n }, [debug, getAddresses, getCart, getUser, localStorageConfig.key, syncLocalStorage])\n\n useEffect(() => {\n if (user) {\n // If the user is logged in, fetch their addresses\n void getAddresses()\n } else {\n // If no user is logged in, clear addresses\n setAddresses(undefined)\n }\n }, [getAddresses, user])\n\n return (\n <EcommerceContext\n value={{\n addItem,\n addresses,\n cart,\n clearCart,\n confirmOrder,\n createAddress,\n currenciesConfig,\n currency: selectedCurrency,\n decrementItem,\n incrementItem,\n initiatePayment,\n isLoading,\n paymentMethods,\n removeItem,\n selectedPaymentMethod,\n setCurrency,\n updateAddress,\n }}\n >\n {children}\n </EcommerceContext>\n )\n}\n\nexport const useEcommerce = () => {\n const context = use(EcommerceContext)\n\n if (!context) {\n throw new Error('useEcommerce must be used within an EcommerceProvider')\n }\n\n return context\n}\n\nexport const useCurrency = () => {\n const { currenciesConfig, currency, setCurrency } = useEcommerce()\n\n const formatCurrency = useCallback(\n (value?: null | number, options?: { currency?: Currency }): string => {\n if (value === undefined || value === null) {\n return ''\n }\n\n const currencyToUse = options?.currency || currency\n\n if (!currencyToUse) {\n return value.toString()\n }\n\n if (value === 0) {\n return `${currencyToUse.symbol}0.${'0'.repeat(currencyToUse.decimals)}`\n }\n\n // Convert from base value (e.g., cents) to decimal value (e.g., dollars)\n const decimalValue = value / Math.pow(10, currencyToUse.decimals)\n\n // Format with the correct number of decimal places\n return `${currencyToUse.symbol}${decimalValue.toFixed(currencyToUse.decimals)}`\n },\n [currency],\n )\n\n if (!currency) {\n throw new Error('useCurrency must be used within an EcommerceProvider')\n }\n\n return {\n currency,\n formatCurrency,\n setCurrency,\n supportedCurrencies: currenciesConfig.supportedCurrencies,\n }\n}\n\nexport function useCart<T extends CartsCollection>() {\n const { addItem, cart, clearCart, decrementItem, incrementItem, isLoading, removeItem } =\n useEcommerce()\n\n if (!addItem) {\n throw new Error('useCart must be used within an EcommerceProvider')\n }\n\n return {\n addItem,\n cart: cart as T,\n clearCart,\n decrementItem,\n incrementItem,\n isLoading,\n removeItem,\n }\n}\n\nexport const usePayments = () => {\n const { confirmOrder, initiatePayment, isLoading, paymentMethods, selectedPaymentMethod } =\n useEcommerce()\n\n if (!initiatePayment) {\n throw new Error('usePayments must be used within an EcommerceProvider')\n }\n\n return { confirmOrder, initiatePayment, isLoading, paymentMethods, selectedPaymentMethod }\n}\n\nexport function useAddresses<T extends AddressesCollection>() {\n const { addresses, createAddress, isLoading, updateAddress } = useEcommerce()\n\n if (!createAddress) {\n throw new Error('usePayments must be used within an EcommerceProvider')\n }\n\n return { addresses: addresses as T[], createAddress, isLoading, updateAddress }\n}\n"],"names":["deepMergeSimple","qs","React","createContext","use","useCallback","useEffect","useMemo","useRef","useState","useTransition","defaultContext","addItem","clearCart","confirmOrder","createAddress","currenciesConfig","defaultCurrency","supportedCurrencies","code","decimals","label","symbol","currency","decrementItem","incrementItem","initiatePayment","isLoading","paymentMethods","removeItem","setCurrency","updateAddress","EcommerceContext","defaultLocalStorage","key","EcommerceProvider","addressesSlug","api","cartsSlug","children","customersSlug","debug","syncLocalStorage","localStorageConfig","apiRoute","cartsFetchQuery","serverURL","baseAPIURL","startTransition","user","setUser","addresses","setAddresses","hasRendered","cartID","setCartID","cartSecret","setCartSecret","undefined","cart","setCart","selectedCurrency","setSelectedCurrency","find","c","selectedPaymentMethod","setSelectedPaymentMethod","cartQuery","priceField","baseQuery","depth","populate","products","variants","options","select","items","subtotal","createCart","initialData","query","stringify","response","fetch","body","JSON","customer","id","credentials","headers","method","ok","errorText","text","Error","data","json","error","doc","secret","getCart","queryParams","updateCart","updatedCart","deleteCart","url","current","localStorage","setItem","item","quantity","Promise","resolve","existingCart","existingItemIndex","findIndex","cartItem","productID","product","variantID","variant","updatedItems","newCart","targetID","splice","foundCurrency","paymentMethodID","paymentMethod","name","fetchURL","additionalData","responseError","responseData","console","message","pm","getUser","carts","userData","getAddresses","limit","pagination","docs","length","addressID","address","storedCartID","getItem","storedSecret","then","fetchedCart","catch","_","value","useEcommerce","context","useCurrency","formatCurrency","currencyToUse","toString","repeat","decimalValue","Math","pow","toFixed","useCart","usePayments","useAddresses"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@payloadcms/plugin-ecommerce",
3
- "version": "3.68.0-internal.2b8df4a",
3
+ "version": "3.68.0-internal.35482da",
4
4
  "description": "Ecommerce plugin for Payload",
5
5
  "keywords": [
6
6
  "payload",
@@ -69,8 +69,8 @@
69
69
  ],
70
70
  "dependencies": {
71
71
  "qs-esm": "7.0.2",
72
- "@payloadcms/ui": "3.68.0-internal.2b8df4a",
73
- "@payloadcms/translations": "3.68.0-internal.2b8df4a"
72
+ "@payloadcms/translations": "3.68.0-internal.35482da",
73
+ "@payloadcms/ui": "3.68.0-internal.35482da"
74
74
  },
75
75
  "devDependencies": {
76
76
  "@types/json-schema": "7.0.15",
@@ -78,13 +78,13 @@
78
78
  "@types/react-dom": "19.2.1",
79
79
  "stripe": "18.3.0",
80
80
  "@payloadcms/eslint-config": "3.28.0",
81
- "@payloadcms/next": "3.68.0-internal.2b8df4a",
82
- "payload": "3.68.0-internal.2b8df4a"
81
+ "@payloadcms/next": "3.68.0-internal.35482da",
82
+ "payload": "3.68.0-internal.35482da"
83
83
  },
84
84
  "peerDependencies": {
85
85
  "react": "^19.0.1 || ^19.1.2 || ^19.2.1",
86
86
  "react-dom": "^19.0.1 || ^19.1.2 || ^19.2.1",
87
- "payload": "3.68.0-internal.2b8df4a"
87
+ "payload": "3.68.0-internal.35482da"
88
88
  },
89
89
  "publishConfig": {
90
90
  "registry": "https://registry.npmjs.org/"