@payloadcms/plugin-ecommerce 3.57.0-internal.f26caed → 3.58.0-canary.4
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.
- package/dist/collections/addresses/createAddressesCollection.d.ts +1 -1
- package/dist/collections/addresses/createAddressesCollection.d.ts.map +1 -1
- package/dist/collections/addresses/createAddressesCollection.js +1 -0
- package/dist/collections/addresses/createAddressesCollection.js.map +1 -1
- package/dist/collections/addresses/defaultCountries.d.ts +1 -1
- package/dist/collections/addresses/defaultCountries.d.ts.map +1 -1
- package/dist/collections/addresses/defaultCountries.js.map +1 -1
- package/dist/collections/addresses/hooks/beforeChange.d.ts +1 -1
- package/dist/collections/addresses/hooks/beforeChange.d.ts.map +1 -1
- package/dist/collections/addresses/hooks/beforeChange.js.map +1 -1
- package/dist/collections/carts/createCartsCollection.d.ts +1 -1
- package/dist/collections/carts/createCartsCollection.d.ts.map +1 -1
- package/dist/collections/carts/createCartsCollection.js.map +1 -1
- package/dist/collections/orders/createOrdersCollection.d.ts +1 -1
- package/dist/collections/orders/createOrdersCollection.d.ts.map +1 -1
- package/dist/collections/orders/createOrdersCollection.js.map +1 -1
- package/dist/collections/products/createProductsCollection.d.ts +1 -1
- package/dist/collections/products/createProductsCollection.d.ts.map +1 -1
- package/dist/collections/products/createProductsCollection.js.map +1 -1
- package/dist/collections/transactions/createTransactionsCollection.d.ts +1 -1
- package/dist/collections/transactions/createTransactionsCollection.d.ts.map +1 -1
- package/dist/collections/transactions/createTransactionsCollection.js.map +1 -1
- package/dist/collections/variants/createVariantOptionsCollection.d.ts +1 -1
- package/dist/collections/variants/createVariantOptionsCollection.d.ts.map +1 -1
- package/dist/collections/variants/createVariantOptionsCollection.js.map +1 -1
- package/dist/collections/variants/createVariantTypesCollection.d.ts +1 -1
- package/dist/collections/variants/createVariantTypesCollection.d.ts.map +1 -1
- package/dist/collections/variants/createVariantTypesCollection.js.map +1 -1
- package/dist/collections/variants/createVariantsCollection/index.d.ts +1 -1
- package/dist/collections/variants/createVariantsCollection/index.d.ts.map +1 -1
- package/dist/collections/variants/createVariantsCollection/index.js.map +1 -1
- package/dist/currencies/index.d.ts +1 -1
- package/dist/currencies/index.d.ts.map +1 -1
- package/dist/currencies/index.js.map +1 -1
- package/dist/endpoints/confirmOrder.d.ts +1 -1
- package/dist/endpoints/confirmOrder.d.ts.map +1 -1
- package/dist/endpoints/confirmOrder.js.map +1 -1
- package/dist/endpoints/initiatePayment.d.ts +1 -1
- package/dist/endpoints/initiatePayment.d.ts.map +1 -1
- package/dist/endpoints/initiatePayment.js.map +1 -1
- package/dist/exports/types.d.ts +2 -1
- package/dist/exports/types.d.ts.map +1 -1
- package/dist/exports/types.js.map +1 -1
- package/dist/fields/amountField.d.ts +1 -1
- package/dist/fields/amountField.d.ts.map +1 -1
- package/dist/fields/amountField.js.map +1 -1
- package/dist/fields/cartItemsField.d.ts +1 -1
- package/dist/fields/cartItemsField.d.ts.map +1 -1
- package/dist/fields/cartItemsField.js.map +1 -1
- package/dist/fields/currencyField.d.ts +1 -1
- package/dist/fields/currencyField.d.ts.map +1 -1
- package/dist/fields/currencyField.js.map +1 -1
- package/dist/fields/pricesField.d.ts +1 -1
- package/dist/fields/pricesField.d.ts.map +1 -1
- package/dist/fields/pricesField.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +13 -3
- package/dist/index.js.map +1 -1
- package/dist/payments/adapters/stripe/confirmOrder.d.ts +1 -1
- package/dist/payments/adapters/stripe/confirmOrder.d.ts.map +1 -1
- package/dist/payments/adapters/stripe/confirmOrder.js.map +1 -1
- package/dist/payments/adapters/stripe/index.d.ts +1 -1
- package/dist/payments/adapters/stripe/index.d.ts.map +1 -1
- package/dist/payments/adapters/stripe/index.js.map +1 -1
- package/dist/payments/adapters/stripe/initiatePayment.d.ts +1 -1
- package/dist/payments/adapters/stripe/initiatePayment.d.ts.map +1 -1
- package/dist/payments/adapters/stripe/initiatePayment.js.map +1 -1
- package/dist/react/provider/index.d.ts +15 -10
- package/dist/react/provider/index.d.ts.map +1 -1
- package/dist/react/provider/index.js +21 -22
- package/dist/react/provider/index.js.map +1 -1
- package/dist/react/provider/utilities.d.ts +1 -1
- package/dist/react/provider/utilities.d.ts.map +1 -1
- package/dist/react/provider/utilities.js.map +1 -1
- package/dist/translations/en.d.ts.map +1 -1
- package/dist/translations/en.js +1 -0
- package/dist/translations/en.js.map +1 -1
- package/dist/{types.d.ts → types/index.d.ts} +177 -2
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +3 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/utilities.d.ts +36 -0
- package/dist/types/utilities.d.ts.map +1 -0
- package/dist/types/utilities.js +3 -0
- package/dist/types/utilities.js.map +1 -0
- package/dist/ui/PriceCell/index.d.ts +1 -1
- package/dist/ui/PriceCell/index.d.ts.map +1 -1
- package/dist/ui/PriceCell/index.js.map +1 -1
- package/dist/ui/PriceInput/FormattedInput.d.ts +1 -1
- package/dist/ui/PriceInput/FormattedInput.d.ts.map +1 -1
- package/dist/ui/PriceInput/FormattedInput.js.map +1 -1
- package/dist/ui/PriceInput/index.d.ts +1 -1
- package/dist/ui/PriceInput/index.d.ts.map +1 -1
- package/dist/ui/PriceInput/index.js.map +1 -1
- package/dist/ui/PriceRowLabel/index.d.ts +1 -1
- package/dist/ui/PriceRowLabel/index.d.ts.map +1 -1
- package/dist/ui/PriceRowLabel/index.js.map +1 -1
- package/dist/ui/utilities.d.ts +1 -1
- package/dist/ui/utilities.d.ts.map +1 -1
- package/dist/ui/utilities.js.map +1 -1
- package/dist/utilities/defaultProductsValidation.d.ts +1 -1
- package/dist/utilities/defaultProductsValidation.d.ts.map +1 -1
- package/dist/utilities/defaultProductsValidation.js.map +1 -1
- package/dist/utilities/getCollectionSlugMap.d.ts +1 -1
- package/dist/utilities/getCollectionSlugMap.d.ts.map +1 -1
- package/dist/utilities/getCollectionSlugMap.js +5 -4
- package/dist/utilities/getCollectionSlugMap.js.map +1 -1
- package/dist/utilities/pushTypeScriptProperties.d.ts +10 -0
- package/dist/utilities/pushTypeScriptProperties.d.ts.map +1 -0
- package/dist/utilities/pushTypeScriptProperties.js +37 -0
- package/dist/utilities/pushTypeScriptProperties.js.map +1 -0
- package/dist/utilities/sanitizePluginConfig.d.ts +1 -1
- package/dist/utilities/sanitizePluginConfig.d.ts.map +1 -1
- package/dist/utilities/sanitizePluginConfig.js.map +1 -1
- package/package.json +8 -7
- package/dist/react/provider/types.d.ts +0 -172
- package/dist/react/provider/types.d.ts.map +0 -1
- package/dist/react/provider/types.js +0 -3
- package/dist/react/provider/types.js.map +0 -1
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js +0 -3
- package/dist/types.js.map +0 -1
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import type { DefaultDocumentIDType
|
|
1
|
+
import type { DefaultDocumentIDType } from 'payload';
|
|
2
2
|
import React from 'react';
|
|
3
|
-
import type { Currency } from '../../types.js';
|
|
4
|
-
import type { ContextProps, EcommerceContext as EcommerceContextType } from './types.js';
|
|
3
|
+
import type { AddressesCollection, CartsCollection, ContextProps, Currency, EcommerceContextType } from '../../types/index.js';
|
|
5
4
|
export declare const EcommerceProvider: React.FC<ContextProps>;
|
|
6
5
|
export declare const useEcommerce: () => EcommerceContextType;
|
|
7
6
|
export declare const useCurrency: () => {
|
|
@@ -12,12 +11,12 @@ export declare const useCurrency: () => {
|
|
|
12
11
|
setCurrency: (currency: string) => void;
|
|
13
12
|
supportedCurrencies: Currency[];
|
|
14
13
|
};
|
|
15
|
-
export declare
|
|
14
|
+
export declare function useCart<T extends CartsCollection>(): {
|
|
16
15
|
addItem: (item: {
|
|
17
16
|
product: DefaultDocumentIDType;
|
|
18
17
|
variant?: DefaultDocumentIDType;
|
|
19
18
|
}, quantity?: number) => Promise<void>;
|
|
20
|
-
cart:
|
|
19
|
+
cart: T;
|
|
21
20
|
clearCart: () => Promise<void>;
|
|
22
21
|
decrementItem: (item: DefaultDocumentIDType) => Promise<void>;
|
|
23
22
|
incrementItem: (item: DefaultDocumentIDType) => Promise<void>;
|
|
@@ -30,12 +29,18 @@ export declare const usePayments: () => {
|
|
|
30
29
|
initiatePayment: (paymentMethodID: string, options?: {
|
|
31
30
|
additionalData: Record<string, unknown>;
|
|
32
31
|
}) => Promise<unknown>;
|
|
33
|
-
paymentMethods: import("../../types.js").PaymentAdapterClient[];
|
|
32
|
+
paymentMethods: import("../../types/index.js").PaymentAdapterClient[];
|
|
34
33
|
selectedPaymentMethod: string | null | undefined;
|
|
35
34
|
};
|
|
36
|
-
export declare
|
|
37
|
-
addresses:
|
|
38
|
-
createAddress: (data: Partial<
|
|
39
|
-
|
|
35
|
+
export declare function useAddresses<T extends AddressesCollection>(): {
|
|
36
|
+
addresses: T[];
|
|
37
|
+
createAddress: (data: Partial<{
|
|
38
|
+
[key: string]: any;
|
|
39
|
+
id: DefaultDocumentIDType;
|
|
40
|
+
}>) => Promise<void>;
|
|
41
|
+
updateAddress: (addressID: DefaultDocumentIDType, data: Partial<{
|
|
42
|
+
[key: string]: any;
|
|
43
|
+
id: DefaultDocumentIDType;
|
|
44
|
+
}>) => Promise<void>;
|
|
40
45
|
};
|
|
41
46
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/react/provider/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,qBAAqB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/react/provider/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,qBAAqB,EAAa,MAAM,SAAS,CAAA;AAI/D,OAAO,KAAgF,MAAM,OAAO,CAAA;AAEpG,OAAO,KAAK,EACV,mBAAmB,EAEnB,eAAe,EACf,YAAY,EACZ,QAAQ,EACR,oBAAoB,EACrB,MAAM,sBAAsB,CAAA;AAuC7B,eAAO,MAAM,iBAAiB,EAAE,KAAK,CAAC,EAAE,CAAC,YAAY,CAwvBpD,CAAA;AAED,eAAO,MAAM,YAAY,4BAQxB,CAAA;AAED,eAAO,MAAM,WAAW;;6BAIX,IAAI,GAAG,MAAM,YAAY;QAAE,QAAQ,CAAC,EAAE,QAAQ,CAAA;KAAE,KAAG,MAAM;;;CAkCrE,CAAA;AAED,wBAAgB,OAAO,CAAC,CAAC,SAAS,eAAe;;;;;UAOf,CAAC;;;;;EAClC;AAED,eAAO,MAAM,WAAW;;;;;;;;;CAQvB,CAAA;AAED,wBAAgB,YAAY,CAAC,CAAC,SAAS,mBAAmB;eAOvB,CAAC,EAAE;;;;;;;;;EACrC"}
|
|
@@ -62,7 +62,6 @@ export const EcommerceProvider = ({ addressesSlug = 'addresses', api, cartsSlug
|
|
|
62
62
|
* This is used to identify the cart in the database or local storage.
|
|
63
63
|
* It can be null if no cart has been created yet.
|
|
64
64
|
*/ const [cartID, setCartID] = useState();
|
|
65
|
-
// @ts-ignore
|
|
66
65
|
const [cart, setCart] = useState();
|
|
67
66
|
const [selectedCurrency, setSelectedCurrency] = useState(()=>currenciesConfig.supportedCurrencies.find((c)=>c.code === currenciesConfig.defaultCurrency));
|
|
68
67
|
const [selectedPaymentMethod, setSelectedPaymentMethod] = useState(null);
|
|
@@ -202,14 +201,14 @@ export const EcommerceProvider = ({ addressesSlug = 'addresses', api, cartsSlug
|
|
|
202
201
|
return;
|
|
203
202
|
}
|
|
204
203
|
// Check if the item already exists in the cart
|
|
205
|
-
const existingItemIndex = existingCart.items
|
|
204
|
+
const existingItemIndex = existingCart.items?.findIndex((cartItem)=>{
|
|
206
205
|
const productID = typeof cartItem.product === 'object' ? cartItem.product.id : item.product;
|
|
207
206
|
const variantID = cartItem.variant && typeof cartItem.variant === 'object' ? cartItem.variant.id : item.variant;
|
|
208
207
|
return productID === item.product && (item.variant && variantID ? variantID === item.variant : true);
|
|
209
|
-
});
|
|
210
|
-
let updatedItems = [
|
|
208
|
+
}) ?? -1;
|
|
209
|
+
let updatedItems = existingCart.items ? [
|
|
211
210
|
...existingCart.items
|
|
212
|
-
];
|
|
211
|
+
] : [];
|
|
213
212
|
if (existingItemIndex !== -1) {
|
|
214
213
|
// If the item exists, update its quantity
|
|
215
214
|
updatedItems[existingItemIndex].quantity = updatedItems[existingItemIndex].quantity + quantity;
|
|
@@ -220,7 +219,7 @@ export const EcommerceProvider = ({ addressesSlug = 'addresses', api, cartsSlug
|
|
|
220
219
|
} else {
|
|
221
220
|
// If the item does not exist, add it to the cart
|
|
222
221
|
updatedItems = [
|
|
223
|
-
...existingCart.items,
|
|
222
|
+
...existingCart.items ?? [],
|
|
224
223
|
{
|
|
225
224
|
...item,
|
|
226
225
|
quantity
|
|
@@ -262,12 +261,12 @@ export const EcommerceProvider = ({ addressesSlug = 'addresses', api, cartsSlug
|
|
|
262
261
|
return;
|
|
263
262
|
}
|
|
264
263
|
// Check if the item already exists in the cart
|
|
265
|
-
const existingItemIndex = existingCart.items
|
|
264
|
+
const existingItemIndex = existingCart.items?.findIndex((cartItem)=>cartItem.id === targetID) ?? -1;
|
|
266
265
|
if (existingItemIndex !== -1) {
|
|
267
266
|
// If the item exists, remove it from the cart
|
|
268
|
-
const updatedItems = [
|
|
267
|
+
const updatedItems = existingCart.items ? [
|
|
269
268
|
...existingCart.items
|
|
270
|
-
];
|
|
269
|
+
] : [];
|
|
271
270
|
updatedItems.splice(existingItemIndex, 1);
|
|
272
271
|
// Update the cart with the new items
|
|
273
272
|
await updateCart(cartID, {
|
|
@@ -291,10 +290,10 @@ export const EcommerceProvider = ({ addressesSlug = 'addresses', api, cartsSlug
|
|
|
291
290
|
return;
|
|
292
291
|
}
|
|
293
292
|
// Check if the item already exists in the cart
|
|
294
|
-
const existingItemIndex = existingCart.items
|
|
295
|
-
let updatedItems = [
|
|
293
|
+
const existingItemIndex = existingCart.items?.findIndex((cartItem)=>cartItem.id === targetID) ?? -1;
|
|
294
|
+
let updatedItems = existingCart.items ? [
|
|
296
295
|
...existingCart.items
|
|
297
|
-
];
|
|
296
|
+
] : [];
|
|
298
297
|
if (existingItemIndex !== -1) {
|
|
299
298
|
// If the item exists, increment its quantity
|
|
300
299
|
updatedItems[existingItemIndex].quantity = updatedItems[existingItemIndex].quantity + 1 // Increment by 1
|
|
@@ -306,7 +305,7 @@ export const EcommerceProvider = ({ addressesSlug = 'addresses', api, cartsSlug
|
|
|
306
305
|
} else {
|
|
307
306
|
// If the item does not exist, add it to the cart with quantity 1
|
|
308
307
|
updatedItems = [
|
|
309
|
-
...existingCart.items,
|
|
308
|
+
...existingCart.items ?? [],
|
|
310
309
|
{
|
|
311
310
|
product: targetID,
|
|
312
311
|
quantity: 1
|
|
@@ -334,10 +333,10 @@ export const EcommerceProvider = ({ addressesSlug = 'addresses', api, cartsSlug
|
|
|
334
333
|
return;
|
|
335
334
|
}
|
|
336
335
|
// Check if the item already exists in the cart
|
|
337
|
-
const existingItemIndex = existingCart.items
|
|
338
|
-
const updatedItems = [
|
|
336
|
+
const existingItemIndex = existingCart.items?.findIndex((cartItem)=>cartItem.id === targetID) ?? -1;
|
|
337
|
+
const updatedItems = existingCart.items ? [
|
|
339
338
|
...existingCart.items
|
|
340
|
-
];
|
|
339
|
+
] : [];
|
|
341
340
|
if (existingItemIndex !== -1) {
|
|
342
341
|
// If the item exists, decrement its quantity
|
|
343
342
|
updatedItems[existingItemIndex].quantity = updatedItems[existingItemIndex].quantity - 1 // Decrement by 1
|
|
@@ -749,20 +748,20 @@ export const useCurrency = ()=>{
|
|
|
749
748
|
supportedCurrencies: currenciesConfig.supportedCurrencies
|
|
750
749
|
};
|
|
751
750
|
};
|
|
752
|
-
export
|
|
751
|
+
export function useCart() {
|
|
753
752
|
const { addItem, cart, clearCart, decrementItem, incrementItem, removeItem } = useEcommerce();
|
|
754
753
|
if (!addItem) {
|
|
755
754
|
throw new Error('useCart must be used within an EcommerceProvider');
|
|
756
755
|
}
|
|
757
756
|
return {
|
|
758
757
|
addItem,
|
|
759
|
-
cart,
|
|
758
|
+
cart: cart,
|
|
760
759
|
clearCart,
|
|
761
760
|
decrementItem,
|
|
762
761
|
incrementItem,
|
|
763
762
|
removeItem
|
|
764
763
|
};
|
|
765
|
-
}
|
|
764
|
+
}
|
|
766
765
|
export const usePayments = ()=>{
|
|
767
766
|
const { confirmOrder, initiatePayment, paymentMethods, selectedPaymentMethod } = useEcommerce();
|
|
768
767
|
if (!initiatePayment) {
|
|
@@ -775,16 +774,16 @@ export const usePayments = ()=>{
|
|
|
775
774
|
selectedPaymentMethod
|
|
776
775
|
};
|
|
777
776
|
};
|
|
778
|
-
export
|
|
777
|
+
export function useAddresses() {
|
|
779
778
|
const { addresses, createAddress, updateAddress } = useEcommerce();
|
|
780
779
|
if (!createAddress) {
|
|
781
780
|
throw new Error('usePayments must be used within an EcommerceProvider');
|
|
782
781
|
}
|
|
783
782
|
return {
|
|
784
|
-
addresses,
|
|
783
|
+
addresses: addresses,
|
|
785
784
|
createAddress,
|
|
786
785
|
updateAddress
|
|
787
786
|
};
|
|
788
|
-
}
|
|
787
|
+
}
|
|
789
788
|
|
|
790
789
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/react/provider/index.tsx"],"sourcesContent":["'use client'\nimport type { DefaultDocumentIDType, TypedCollection, TypedUser } from 'payload'\n\nimport { deepMergeSimple } from 'payload/shared'\nimport * as qs from 'qs-esm'\nimport React, { createContext, use, useCallback, useEffect, useMemo, useRef, useState } from 'react'\n\nimport type { CartItem, Currency } from '../../types.js'\nimport type { ContextProps, EcommerceContext as EcommerceContextType } from './types.js'\n\n// eslint-disable-next-line @typescript-eslint/consistent-type-imports\ntype GeneratedTypes = import('payload').GeneratedTypes\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 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 [user, setUser] = useState<null | TypedUser>(null)\n\n const [addresses, setAddresses] = useState<TypedCollection['addresses'][]>()\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 // @ts-ignore\n const [cart, setCart] = useState<GeneratedTypes['collections']['carts']>()\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 return data.doc as TypedCollection['carts']\n },\n [baseAPIURL, cartQuery, cartsSlug, selectedCurrency.code, user?.id],\n )\n\n const getCart = useCallback(\n async (cartID: DefaultDocumentIDType) => {\n const query = qs.stringify(cartQuery)\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 if (!response.ok) {\n const errorText = await response.text()\n throw new Error(`Failed to fetch cart: ${errorText}`)\n }\n const data = await response.json()\n if (data.error) {\n throw new Error(`Cart fetch error: ${data.error}`)\n }\n\n return data as TypedCollection['carts']\n },\n [baseAPIURL, cartQuery, cartsSlug],\n )\n\n const updateCart = useCallback(\n async (cartID: DefaultDocumentIDType, data: Partial<TypedCollection['carts']>) => {\n const query = qs.stringify(cartQuery)\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 setCart(updatedCart.doc as TypedCollection['carts'])\n },\n [baseAPIURL, cartQuery, cartsSlug],\n )\n\n const deleteCart = useCallback(\n async (cartID: DefaultDocumentIDType) => {\n const response = await fetch(`${baseAPIURL}/${cartsSlug}/${cartID}`, {\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 update cart: ${errorText}`)\n }\n\n setCart(undefined)\n setCartID(undefined)\n },\n [baseAPIURL, cartsSlug],\n )\n\n useEffect(() => {\n if (hasRendered.current) {\n if (syncLocalStorage && cartID) {\n localStorage.setItem(localStorageConfig.key, cartID as string)\n }\n }\n }, [cartID, localStorageConfig.key, syncLocalStorage])\n\n const addItem: EcommerceContextType['addItem'] = useCallback(\n async (item, quantity = 1) => {\n if (cartID) {\n const existingCart = await getCart(cartID)\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 = 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 })\n\n let updatedItems = [...existingCart.items]\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 },\n [cartID, createCart, getCart, updateCart],\n )\n\n const removeItem: EcommerceContextType['removeItem'] = useCallback(\n async (targetID) => {\n if (!cartID) {\n return\n }\n\n const existingCart = await getCart(cartID)\n\n if (!existingCart) {\n // console.error(`Cart with ID \"${cartID}\" not found`)\n setCartID(undefined)\n setCart(undefined)\n return\n }\n\n // Check if the item already exists in the cart\n const existingItemIndex = existingCart.items.findIndex(\n (cartItem: CartItem) => cartItem.id === targetID,\n )\n\n if (existingItemIndex !== -1) {\n // If the item exists, remove it from the cart\n const updatedItems = [...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 },\n [cartID, getCart, updateCart],\n )\n\n const incrementItem: EcommerceContextType['incrementItem'] = useCallback(\n async (targetID) => {\n if (!cartID) {\n return\n }\n\n const existingCart = await getCart(cartID)\n\n if (!existingCart) {\n // console.error(`Cart with ID \"${cartID}\" not found`)\n setCartID(undefined)\n setCart(undefined)\n return\n }\n\n // Check if the item already exists in the cart\n const existingItemIndex = existingCart.items.findIndex(\n (cartItem: CartItem) => cartItem.id === targetID,\n )\n\n let updatedItems = [...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 },\n [cartID, getCart, updateCart],\n )\n\n const decrementItem: EcommerceContextType['decrementItem'] = useCallback(\n async (targetID) => {\n if (!cartID) {\n return\n }\n\n const existingCart = await getCart(cartID)\n\n if (!existingCart) {\n // console.error(`Cart with ID \"${cartID}\" not found`)\n setCartID(undefined)\n setCart(undefined)\n return\n }\n\n // Check if the item already exists in the cart\n const existingItemIndex = existingCart.items.findIndex(\n (cartItem: CartItem) => cartItem.id === targetID,\n )\n\n const updatedItems = [...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 },\n [cartID, getCart, updateCart],\n )\n\n const clearCart: EcommerceContextType['clearCart'] = useCallback(async () => {\n if (cartID) {\n await deleteCart(cartID)\n }\n }, [cartID, deleteCart])\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, we can add logic to persist the cart state\n useEffect(() => {\n if (!hasRendered.current) {\n if (syncLocalStorage) {\n const storedCart = localStorage.getItem(localStorageConfig.key)\n if (storedCart) {\n getCart(storedCart)\n .then((fetchedCart) => {\n setCart(fetchedCart)\n setCartID(storedCart as DefaultDocumentIDType)\n })\n .catch((_) => {\n // console.error('Error fetching cart from localStorage:', error)\n // If there's an error fetching the cart, we can clear it from localStorage\n localStorage.removeItem(localStorageConfig.key)\n setCartID(undefined)\n setCart(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 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 const useCart = () => {\n const { addItem, cart, clearCart, decrementItem, incrementItem, removeItem } = useEcommerce()\n\n if (!addItem) {\n throw new Error('useCart must be used within an EcommerceProvider')\n }\n\n return { addItem, cart, clearCart, decrementItem, incrementItem, removeItem }\n}\n\nexport const usePayments = () => {\n const { confirmOrder, initiatePayment, paymentMethods, selectedPaymentMethod } = useEcommerce()\n\n if (!initiatePayment) {\n throw new Error('usePayments must be used within an EcommerceProvider')\n }\n\n return { confirmOrder, initiatePayment, paymentMethods, selectedPaymentMethod }\n}\n\nexport const useAddresses = () => {\n const { addresses, createAddress, updateAddress } = useEcommerce()\n\n if (!createAddress) {\n throw new Error('usePayments must be used within an EcommerceProvider')\n }\n\n return { addresses, createAddress, updateAddress }\n}\n"],"names":["deepMergeSimple","qs","React","createContext","use","useCallback","useEffect","useMemo","useRef","useState","defaultContext","addItem","clearCart","confirmOrder","createAddress","currenciesConfig","defaultCurrency","supportedCurrencies","code","decimals","label","symbol","currency","decrementItem","incrementItem","initiatePayment","paymentMethods","removeItem","setCurrency","updateAddress","EcommerceContext","defaultLocalStorage","key","EcommerceProvider","addressesSlug","api","cartsSlug","children","customersSlug","debug","syncLocalStorage","localStorageConfig","apiRoute","cartsFetchQuery","serverURL","baseAPIURL","user","setUser","addresses","setAddresses","hasRendered","cartID","setCartID","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","getCart","updateCart","updatedCart","deleteCart","undefined","current","localStorage","setItem","item","quantity","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","storedCart","getItem","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, { createContext, use, useCallback, useEffect, useMemo, useRef, useState } 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 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 [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 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 return data.doc as CartsCollection\n },\n [baseAPIURL, cartQuery, cartsSlug, selectedCurrency.code, user?.id],\n )\n\n const getCart = useCallback(\n async (cartID: DefaultDocumentIDType) => {\n const query = qs.stringify(cartQuery)\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 if (!response.ok) {\n const errorText = await response.text()\n throw new Error(`Failed to fetch cart: ${errorText}`)\n }\n const data = await response.json()\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 const query = qs.stringify(cartQuery)\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],\n )\n\n const deleteCart = useCallback(\n async (cartID: DefaultDocumentIDType) => {\n const response = await fetch(`${baseAPIURL}/${cartsSlug}/${cartID}`, {\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 update cart: ${errorText}`)\n }\n\n setCart(undefined)\n setCartID(undefined)\n },\n [baseAPIURL, cartsSlug],\n )\n\n useEffect(() => {\n if (hasRendered.current) {\n if (syncLocalStorage && cartID) {\n localStorage.setItem(localStorageConfig.key, cartID as string)\n }\n }\n }, [cartID, localStorageConfig.key, syncLocalStorage])\n\n const addItem: EcommerceContextType['addItem'] = useCallback(\n async (item, quantity = 1) => {\n if (cartID) {\n const existingCart = await getCart(cartID)\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 },\n [cartID, createCart, getCart, updateCart],\n )\n\n const removeItem: EcommerceContextType['removeItem'] = useCallback(\n async (targetID) => {\n if (!cartID) {\n return\n }\n\n const existingCart = await getCart(cartID)\n\n if (!existingCart) {\n // console.error(`Cart with ID \"${cartID}\" not found`)\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) => 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 },\n [cartID, getCart, updateCart],\n )\n\n const incrementItem: EcommerceContextType['incrementItem'] = useCallback(\n async (targetID) => {\n if (!cartID) {\n return\n }\n\n const existingCart = await getCart(cartID)\n\n if (!existingCart) {\n // console.error(`Cart with ID \"${cartID}\" not found`)\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) => 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 },\n [cartID, getCart, updateCart],\n )\n\n const decrementItem: EcommerceContextType['decrementItem'] = useCallback(\n async (targetID) => {\n if (!cartID) {\n return\n }\n\n const existingCart = await getCart(cartID)\n\n if (!existingCart) {\n // console.error(`Cart with ID \"${cartID}\" not found`)\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) => 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 },\n [cartID, getCart, updateCart],\n )\n\n const clearCart: EcommerceContextType['clearCart'] = useCallback(async () => {\n if (cartID) {\n await deleteCart(cartID)\n }\n }, [cartID, deleteCart])\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, we can add logic to persist the cart state\n useEffect(() => {\n if (!hasRendered.current) {\n if (syncLocalStorage) {\n const storedCart = localStorage.getItem(localStorageConfig.key)\n if (storedCart) {\n getCart(storedCart)\n .then((fetchedCart) => {\n setCart(fetchedCart)\n setCartID(storedCart as DefaultDocumentIDType)\n })\n .catch((_) => {\n // console.error('Error fetching cart from localStorage:', error)\n // If there's an error fetching the cart, we can clear it from localStorage\n localStorage.removeItem(localStorageConfig.key)\n setCartID(undefined)\n setCart(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 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, removeItem } = useEcommerce()\n\n if (!addItem) {\n throw new Error('useCart must be used within an EcommerceProvider')\n }\n\n return { addItem, cart: cart as T, clearCart, decrementItem, incrementItem, removeItem }\n}\n\nexport const usePayments = () => {\n const { confirmOrder, initiatePayment, paymentMethods, selectedPaymentMethod } = useEcommerce()\n\n if (!initiatePayment) {\n throw new Error('usePayments must be used within an EcommerceProvider')\n }\n\n return { confirmOrder, initiatePayment, paymentMethods, selectedPaymentMethod }\n}\n\nexport function useAddresses<T extends AddressesCollection>() {\n const { addresses, createAddress, 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, updateAddress }\n}\n"],"names":["deepMergeSimple","qs","React","createContext","use","useCallback","useEffect","useMemo","useRef","useState","defaultContext","addItem","clearCart","confirmOrder","createAddress","currenciesConfig","defaultCurrency","supportedCurrencies","code","decimals","label","symbol","currency","decrementItem","incrementItem","initiatePayment","paymentMethods","removeItem","setCurrency","updateAddress","EcommerceContext","defaultLocalStorage","key","EcommerceProvider","addressesSlug","api","cartsSlug","children","customersSlug","debug","syncLocalStorage","localStorageConfig","apiRoute","cartsFetchQuery","serverURL","baseAPIURL","user","setUser","addresses","setAddresses","hasRendered","cartID","setCartID","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","getCart","updateCart","updatedCart","deleteCart","undefined","current","localStorage","setItem","item","quantity","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","storedCart","getItem","then","fetchedCart","catch","_","value","useEcommerce","context","useCurrency","formatCurrency","currencyToUse","toString","repeat","decimalValue","Math","pow","toFixed","useCart","usePayments","useAddresses"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utilities.d.ts","sourceRoot":"","sources":["../../../src/react/provider/utilities.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"utilities.d.ts","sourceRoot":"","sources":["../../../src/react/provider/utilities.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAA;AAEpD;;GAEG;AACH,eAAO,MAAM,oBAAoB,6BAG9B;IACD,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,QAAQ,CAAA;CACnB,KAAG,MAUH,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/react/provider/utilities.ts"],"sourcesContent":["import type { Currency } from '../../types.js'\n\n/**\n * Convert base value to display value with decimal point (e.g., 2500 to $25.00)\n */\nexport const convertFromBaseValue = ({\n baseValue,\n currency,\n}: {\n baseValue: number\n currency: Currency\n}): string => {\n if (!currency) {\n return baseValue.toString()\n }\n\n // Convert from base value (e.g., cents) to decimal value (e.g., dollars)\n const decimalValue = baseValue / Math.pow(10, currency.decimals)\n\n // Format with the correct number of decimal places\n return decimalValue.toFixed(currency.decimals)\n}\n"],"names":["convertFromBaseValue","baseValue","currency","toString","decimalValue","Math","pow","decimals","toFixed"],"mappings":"AAEA;;CAEC,GACD,OAAO,MAAMA,uBAAuB,CAAC,EACnCC,SAAS,EACTC,QAAQ,EAIT;IACC,IAAI,CAACA,UAAU;QACb,OAAOD,UAAUE,QAAQ;IAC3B;IAEA,yEAAyE;IACzE,MAAMC,eAAeH,YAAYI,KAAKC,GAAG,CAAC,IAAIJ,SAASK,QAAQ;IAE/D,mDAAmD;IACnD,OAAOH,aAAaI,OAAO,CAACN,SAASK,QAAQ;AAC/C,EAAC"}
|
|
1
|
+
{"version":3,"sources":["../../../src/react/provider/utilities.ts"],"sourcesContent":["import type { Currency } from '../../types/index.js'\n\n/**\n * Convert base value to display value with decimal point (e.g., 2500 to $25.00)\n */\nexport const convertFromBaseValue = ({\n baseValue,\n currency,\n}: {\n baseValue: number\n currency: Currency\n}): string => {\n if (!currency) {\n return baseValue.toString()\n }\n\n // Convert from base value (e.g., cents) to decimal value (e.g., dollars)\n const decimalValue = baseValue / Math.pow(10, currency.decimals)\n\n // Format with the correct number of decimal places\n return decimalValue.toFixed(currency.decimals)\n}\n"],"names":["convertFromBaseValue","baseValue","currency","toString","decimalValue","Math","pow","decimals","toFixed"],"mappings":"AAEA;;CAEC,GACD,OAAO,MAAMA,uBAAuB,CAAC,EACnCC,SAAS,EACTC,QAAQ,EAIT;IACC,IAAI,CAACA,UAAU;QACb,OAAOD,UAAUE,QAAQ;IAC3B;IAEA,yEAAyE;IACzE,MAAMC,eAAeH,YAAYI,KAAKC,GAAG,CAAC,IAAIJ,SAASK,QAAQ;IAE/D,mDAAmD;IACnD,OAAOH,aAAaI,OAAO,CAACN,SAASK,QAAQ;AAC/C,EAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"en.d.ts","sourceRoot":"","sources":["../../src/translations/en.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAA;AAEzE,eAAO,MAAM,EAAE,EAAE,
|
|
1
|
+
{"version":3,"file":"en.d.ts","sourceRoot":"","sources":["../../src/translations/en.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAA;AAEzE,eAAO,MAAM,EAAE,EAAE,yBA6FhB,CAAA"}
|
package/dist/translations/en.js
CHANGED
|
@@ -8,6 +8,7 @@ export const en = {
|
|
|
8
8
|
addressCompany: 'Company',
|
|
9
9
|
addressCountry: 'Country',
|
|
10
10
|
addresses: 'Addresses',
|
|
11
|
+
addressesCollectionDescription: 'Addresses are associated with customers are used to prefill shipping and billing when placing orders.',
|
|
11
12
|
addressFirstName: 'First name',
|
|
12
13
|
addressLastName: 'Last name',
|
|
13
14
|
addressLine1: 'Address 1',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/translations/en.ts"],"sourcesContent":["import type { GenericTranslationsObject } from '@payloadcms/translations'\n\nexport const en: GenericTranslationsObject = {\n $schema: './translation-schema.json',\n 'plugin-ecommerce': {\n abandoned: 'Abandoned',\n active: 'Active',\n address: 'Address',\n addressCity: 'City',\n addressCompany: 'Company',\n addressCountry: 'Country',\n addresses: 'Addresses',\n addressFirstName: 'First name',\n addressLastName: 'Last name',\n addressLine1: 'Address 1',\n addressLine2: 'Address 2',\n addressPhone: 'Phone',\n addressPostalCode: 'Postal code',\n addressState: 'State',\n addressTitle: 'Title',\n amount: 'Amount',\n availableVariants: 'Available variants',\n billing: 'Billing',\n billingAddress: 'Billing address',\n cancelled: 'Cancelled',\n cart: 'Cart',\n carts: 'Carts',\n cartsCollectionDescription:\n \"Carts represent a customer's selection of products they intend to purchase. They are related to a customer where possible and guest users do not have a customer attached.\",\n completed: 'Completed',\n currency: 'Currency',\n currencyNotSet: 'Currency not set.',\n customer: 'Customer',\n customerEmail: 'Customer email',\n customers: 'Customers',\n enableCurrencyPrice: `Enable {{currency}} price`,\n enableVariants: 'Enable variants',\n expired: 'Expired',\n failed: 'Failed',\n inventory: 'Inventory',\n item: 'Item',\n items: 'Items',\n open: 'Open',\n order: 'Order',\n orderDetails: 'Order Details',\n orders: 'Orders',\n ordersCollectionDescription:\n \"Orders represent a customer's intent to purchase products from your store. They include details such as the products ordered, quantities, prices, customer information, and order status.\",\n paymentMethod: 'Payment method',\n paymentMethods: 'Payment methods',\n pending: 'Pending',\n price: 'Price',\n priceIn: 'Price ({{currency}})',\n priceNotSet: 'Price not set.',\n prices: 'Prices',\n priceSetInVariants: 'Price set in variants.',\n processing: 'Processing',\n product: 'Product',\n productPriceDescription:\n 'This price will also be used for sorting and filtering products. If you have variants enabled then you can enter the lowest or average price to help with search and filtering, but this price will not be used for checkout.',\n productRequired: 'A product is required.',\n products: 'Products',\n purchased: 'Purchased',\n purchasedAt: 'Purchased at',\n quantity: 'Quantity',\n refunded: 'Refunded',\n shipping: 'Shipping',\n shippingAddress: 'Shipping address',\n status: 'Status',\n subtotal: 'Subtotal',\n succeeded: 'Succeeded',\n transaction: 'Transaction',\n transactionDetails: 'Transaction Details',\n transactions: 'Transactions',\n transactionsCollectionDescription:\n 'Transactions represent payment attempts made for an order. An order can have multiple transactions associated with it, such as an initial payment attempt and subsequent refunds or adjustments.',\n variant: 'Variant',\n variantOption: 'Variant Option',\n variantOptions: 'Variant Options',\n variantOptionsAlreadyExists:\n 'This variant combo is already in use by another variant. Please select different options.',\n variantOptionsCollectionDescription:\n 'Variant options define the options a variant type can have, such as red or white for colors.',\n variantOptionsRequired: 'Variant options are required.',\n variantOptionsRequiredAll: 'All variant options are required.',\n variants: 'Variants',\n variantsCollectionDescription:\n \"Product variants allow you to offer different versions of a product, such as size or color variations. They refrence a product's variant options based on the variant types approved.\",\n variantType: 'Variant Type',\n variantTypes: 'Variant Types',\n variantTypesCollectionDescription:\n 'Variant types are used to define the different types of variants your products can have, such as size or color. Each variant type can have multiple options associated with it.',\n },\n}\n"],"names":["en","$schema","abandoned","active","address","addressCity","addressCompany","addressCountry","addresses","addressFirstName","addressLastName","addressLine1","addressLine2","addressPhone","addressPostalCode","addressState","addressTitle","amount","availableVariants","billing","billingAddress","cancelled","cart","carts","cartsCollectionDescription","completed","currency","currencyNotSet","customer","customerEmail","customers","enableCurrencyPrice","enableVariants","expired","failed","inventory","item","items","open","order","orderDetails","orders","ordersCollectionDescription","paymentMethod","paymentMethods","pending","price","priceIn","priceNotSet","prices","priceSetInVariants","processing","product","productPriceDescription","productRequired","products","purchased","purchasedAt","quantity","refunded","shipping","shippingAddress","status","subtotal","succeeded","transaction","transactionDetails","transactions","transactionsCollectionDescription","variant","variantOption","variantOptions","variantOptionsAlreadyExists","variantOptionsCollectionDescription","variantOptionsRequired","variantOptionsRequiredAll","variants","variantsCollectionDescription","variantType","variantTypes","variantTypesCollectionDescription"],"mappings":"AAEA,OAAO,MAAMA,KAAgC;IAC3CC,SAAS;IACT,oBAAoB;QAClBC,WAAW;QACXC,QAAQ;QACRC,SAAS;QACTC,aAAa;QACbC,gBAAgB;QAChBC,gBAAgB;QAChBC,WAAW;QACXC,kBAAkB;QAClBC,iBAAiB;QACjBC,cAAc;QACdC,cAAc;QACdC,cAAc;QACdC,mBAAmB;QACnBC,cAAc;QACdC,cAAc;QACdC,QAAQ;QACRC,mBAAmB;QACnBC,SAAS;QACTC,gBAAgB;QAChBC,WAAW;QACXC,MAAM;QACNC,OAAO;QACPC,4BACE;QACFC,WAAW;QACXC,UAAU;QACVC,gBAAgB;QAChBC,UAAU;QACVC,eAAe;QACfC,WAAW;QACXC,qBAAqB,CAAC,yBAAyB,CAAC;QAChDC,gBAAgB;QAChBC,SAAS;QACTC,QAAQ;QACRC,WAAW;QACXC,MAAM;QACNC,OAAO;QACPC,MAAM;QACNC,OAAO;QACPC,cAAc;QACdC,QAAQ;QACRC,6BACE;QACFC,eAAe;QACfC,gBAAgB;QAChBC,SAAS;QACTC,OAAO;QACPC,SAAS;QACTC,aAAa;QACbC,QAAQ;QACRC,oBAAoB;QACpBC,YAAY;QACZC,SAAS;QACTC,yBACE;QACFC,iBAAiB;QACjBC,UAAU;QACVC,WAAW;QACXC,aAAa;QACbC,UAAU;QACVC,UAAU;QACVC,UAAU;QACVC,iBAAiB;QACjBC,QAAQ;QACRC,UAAU;QACVC,WAAW;QACXC,aAAa;QACbC,oBAAoB;QACpBC,cAAc;QACdC,mCACE;QACFC,SAAS;QACTC,eAAe;QACfC,gBAAgB;QAChBC,6BACE;QACFC,qCACE;QACFC,wBAAwB;QACxBC,2BAA2B;QAC3BC,UAAU;QACVC,+BACE;QACFC,aAAa;QACbC,cAAc;QACdC,mCACE;IACJ;AACF,EAAC"}
|
|
1
|
+
{"version":3,"sources":["../../src/translations/en.ts"],"sourcesContent":["import type { GenericTranslationsObject } from '@payloadcms/translations'\n\nexport const en: GenericTranslationsObject = {\n $schema: './translation-schema.json',\n 'plugin-ecommerce': {\n abandoned: 'Abandoned',\n active: 'Active',\n address: 'Address',\n addressCity: 'City',\n addressCompany: 'Company',\n addressCountry: 'Country',\n addresses: 'Addresses',\n addressesCollectionDescription:\n 'Addresses are associated with customers are used to prefill shipping and billing when placing orders.',\n addressFirstName: 'First name',\n addressLastName: 'Last name',\n addressLine1: 'Address 1',\n addressLine2: 'Address 2',\n addressPhone: 'Phone',\n addressPostalCode: 'Postal code',\n addressState: 'State',\n addressTitle: 'Title',\n amount: 'Amount',\n availableVariants: 'Available variants',\n billing: 'Billing',\n billingAddress: 'Billing address',\n cancelled: 'Cancelled',\n cart: 'Cart',\n carts: 'Carts',\n cartsCollectionDescription:\n \"Carts represent a customer's selection of products they intend to purchase. They are related to a customer where possible and guest users do not have a customer attached.\",\n completed: 'Completed',\n currency: 'Currency',\n currencyNotSet: 'Currency not set.',\n customer: 'Customer',\n customerEmail: 'Customer email',\n customers: 'Customers',\n enableCurrencyPrice: `Enable {{currency}} price`,\n enableVariants: 'Enable variants',\n expired: 'Expired',\n failed: 'Failed',\n inventory: 'Inventory',\n item: 'Item',\n items: 'Items',\n open: 'Open',\n order: 'Order',\n orderDetails: 'Order Details',\n orders: 'Orders',\n ordersCollectionDescription:\n \"Orders represent a customer's intent to purchase products from your store. They include details such as the products ordered, quantities, prices, customer information, and order status.\",\n paymentMethod: 'Payment method',\n paymentMethods: 'Payment methods',\n pending: 'Pending',\n price: 'Price',\n priceIn: 'Price ({{currency}})',\n priceNotSet: 'Price not set.',\n prices: 'Prices',\n priceSetInVariants: 'Price set in variants.',\n processing: 'Processing',\n product: 'Product',\n productPriceDescription:\n 'This price will also be used for sorting and filtering products. If you have variants enabled then you can enter the lowest or average price to help with search and filtering, but this price will not be used for checkout.',\n productRequired: 'A product is required.',\n products: 'Products',\n purchased: 'Purchased',\n purchasedAt: 'Purchased at',\n quantity: 'Quantity',\n refunded: 'Refunded',\n shipping: 'Shipping',\n shippingAddress: 'Shipping address',\n status: 'Status',\n subtotal: 'Subtotal',\n succeeded: 'Succeeded',\n transaction: 'Transaction',\n transactionDetails: 'Transaction Details',\n transactions: 'Transactions',\n transactionsCollectionDescription:\n 'Transactions represent payment attempts made for an order. An order can have multiple transactions associated with it, such as an initial payment attempt and subsequent refunds or adjustments.',\n variant: 'Variant',\n variantOption: 'Variant Option',\n variantOptions: 'Variant Options',\n variantOptionsAlreadyExists:\n 'This variant combo is already in use by another variant. Please select different options.',\n variantOptionsCollectionDescription:\n 'Variant options define the options a variant type can have, such as red or white for colors.',\n variantOptionsRequired: 'Variant options are required.',\n variantOptionsRequiredAll: 'All variant options are required.',\n variants: 'Variants',\n variantsCollectionDescription:\n \"Product variants allow you to offer different versions of a product, such as size or color variations. They refrence a product's variant options based on the variant types approved.\",\n variantType: 'Variant Type',\n variantTypes: 'Variant Types',\n variantTypesCollectionDescription:\n 'Variant types are used to define the different types of variants your products can have, such as size or color. Each variant type can have multiple options associated with it.',\n },\n}\n"],"names":["en","$schema","abandoned","active","address","addressCity","addressCompany","addressCountry","addresses","addressesCollectionDescription","addressFirstName","addressLastName","addressLine1","addressLine2","addressPhone","addressPostalCode","addressState","addressTitle","amount","availableVariants","billing","billingAddress","cancelled","cart","carts","cartsCollectionDescription","completed","currency","currencyNotSet","customer","customerEmail","customers","enableCurrencyPrice","enableVariants","expired","failed","inventory","item","items","open","order","orderDetails","orders","ordersCollectionDescription","paymentMethod","paymentMethods","pending","price","priceIn","priceNotSet","prices","priceSetInVariants","processing","product","productPriceDescription","productRequired","products","purchased","purchasedAt","quantity","refunded","shipping","shippingAddress","status","subtotal","succeeded","transaction","transactionDetails","transactions","transactionsCollectionDescription","variant","variantOption","variantOptions","variantOptionsAlreadyExists","variantOptionsCollectionDescription","variantOptionsRequired","variantOptionsRequiredAll","variants","variantsCollectionDescription","variantType","variantTypes","variantTypesCollectionDescription"],"mappings":"AAEA,OAAO,MAAMA,KAAgC;IAC3CC,SAAS;IACT,oBAAoB;QAClBC,WAAW;QACXC,QAAQ;QACRC,SAAS;QACTC,aAAa;QACbC,gBAAgB;QAChBC,gBAAgB;QAChBC,WAAW;QACXC,gCACE;QACFC,kBAAkB;QAClBC,iBAAiB;QACjBC,cAAc;QACdC,cAAc;QACdC,cAAc;QACdC,mBAAmB;QACnBC,cAAc;QACdC,cAAc;QACdC,QAAQ;QACRC,mBAAmB;QACnBC,SAAS;QACTC,gBAAgB;QAChBC,WAAW;QACXC,MAAM;QACNC,OAAO;QACPC,4BACE;QACFC,WAAW;QACXC,UAAU;QACVC,gBAAgB;QAChBC,UAAU;QACVC,eAAe;QACfC,WAAW;QACXC,qBAAqB,CAAC,yBAAyB,CAAC;QAChDC,gBAAgB;QAChBC,SAAS;QACTC,QAAQ;QACRC,WAAW;QACXC,MAAM;QACNC,OAAO;QACPC,MAAM;QACNC,OAAO;QACPC,cAAc;QACdC,QAAQ;QACRC,6BACE;QACFC,eAAe;QACfC,gBAAgB;QAChBC,SAAS;QACTC,OAAO;QACPC,SAAS;QACTC,aAAa;QACbC,QAAQ;QACRC,oBAAoB;QACpBC,YAAY;QACZC,SAAS;QACTC,yBACE;QACFC,iBAAiB;QACjBC,UAAU;QACVC,WAAW;QACXC,aAAa;QACbC,UAAU;QACVC,UAAU;QACVC,UAAU;QACVC,iBAAiB;QACjBC,QAAQ;QACRC,UAAU;QACVC,WAAW;QACXC,aAAa;QACbC,oBAAoB;QACpBC,cAAc;QACdC,mCACE;QACFC,SAAS;QACTC,eAAe;QACfC,gBAAgB;QAChBC,6BACE;QACFC,qCACE;QACFC,wBAAwB;QACxBC,2BAA2B;QAC3BC,UAAU;QACVC,+BACE;QACFC,aAAa;QACbC,cAAc;QACdC,mCACE;IACJ;AACF,EAAC"}
|