@shadowmkj/plugin-ecommerce 3.85.1
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/LICENSE.md +22 -0
- package/README.md +3 -0
- package/dist/collections/addresses/createAddressesCollection.d.ts.map +1 -0
- package/dist/collections/addresses/createAddressesCollection.js +73 -0
- package/dist/collections/addresses/createAddressesCollection.js.map +1 -0
- package/dist/collections/addresses/defaultAddressFields.d.ts.map +1 -0
- package/dist/collections/addresses/defaultAddressFields.js +72 -0
- package/dist/collections/addresses/defaultAddressFields.js.map +1 -0
- package/dist/collections/addresses/defaultCountries.d.ts.map +1 -0
- package/dist/collections/addresses/defaultCountries.js +169 -0
- package/dist/collections/addresses/defaultCountries.js.map +1 -0
- package/dist/collections/addresses/hooks/beforeChange.d.ts.map +1 -0
- package/dist/collections/addresses/hooks/beforeChange.js +16 -0
- package/dist/collections/addresses/hooks/beforeChange.js.map +1 -0
- package/dist/collections/carts/beforeChange.d.ts.map +1 -0
- package/dist/collections/carts/beforeChange.js +49 -0
- package/dist/collections/carts/beforeChange.js.map +1 -0
- package/dist/collections/carts/createCartsCollection.d.ts.map +1 -0
- package/dist/collections/carts/createCartsCollection.js +194 -0
- package/dist/collections/carts/createCartsCollection.js.map +1 -0
- package/dist/collections/carts/endpoints/addItem.d.ts.map +1 -0
- package/dist/collections/carts/endpoints/addItem.js +54 -0
- package/dist/collections/carts/endpoints/addItem.js.map +1 -0
- package/dist/collections/carts/endpoints/clearCart.d.ts.map +1 -0
- package/dist/collections/carts/endpoints/clearCart.js +41 -0
- package/dist/collections/carts/endpoints/clearCart.js.map +1 -0
- package/dist/collections/carts/endpoints/mergeCart.d.ts.map +1 -0
- package/dist/collections/carts/endpoints/mergeCart.js +72 -0
- package/dist/collections/carts/endpoints/mergeCart.js.map +1 -0
- package/dist/collections/carts/endpoints/removeItem.d.ts.map +1 -0
- package/dist/collections/carts/endpoints/removeItem.js +51 -0
- package/dist/collections/carts/endpoints/removeItem.js.map +1 -0
- package/dist/collections/carts/endpoints/updateItem.d.ts.map +1 -0
- package/dist/collections/carts/endpoints/updateItem.js +95 -0
- package/dist/collections/carts/endpoints/updateItem.js.map +1 -0
- package/dist/collections/carts/hasCartSecretAccess.d.ts.map +1 -0
- package/dist/collections/carts/hasCartSecretAccess.js +24 -0
- package/dist/collections/carts/hasCartSecretAccess.js.map +1 -0
- package/dist/collections/carts/operations/addItem.d.ts.map +1 -0
- package/dist/collections/carts/operations/addItem.js +95 -0
- package/dist/collections/carts/operations/addItem.js.map +1 -0
- package/dist/collections/carts/operations/clearCart.d.ts.map +1 -0
- package/dist/collections/carts/operations/clearCart.js +53 -0
- package/dist/collections/carts/operations/clearCart.js.map +1 -0
- package/dist/collections/carts/operations/createRequestWithSecret.d.ts.map +1 -0
- package/dist/collections/carts/operations/createRequestWithSecret.js +21 -0
- package/dist/collections/carts/operations/createRequestWithSecret.js.map +1 -0
- package/dist/collections/carts/operations/defaultCartItemMatcher.d.ts.map +1 -0
- package/dist/collections/carts/operations/defaultCartItemMatcher.js +25 -0
- package/dist/collections/carts/operations/defaultCartItemMatcher.js.map +1 -0
- package/dist/collections/carts/operations/defaultCartItemMatcher.spec.js +358 -0
- package/dist/collections/carts/operations/defaultCartItemMatcher.spec.js.map +1 -0
- package/dist/collections/carts/operations/mergeCart.d.ts.map +1 -0
- package/dist/collections/carts/operations/mergeCart.js +144 -0
- package/dist/collections/carts/operations/mergeCart.js.map +1 -0
- package/dist/collections/carts/operations/removeItem.d.ts.map +1 -0
- package/dist/collections/carts/operations/removeItem.js +69 -0
- package/dist/collections/carts/operations/removeItem.js.map +1 -0
- package/dist/collections/carts/operations/types.d.ts.map +1 -0
- package/dist/collections/carts/operations/types.js +7 -0
- package/dist/collections/carts/operations/types.js.map +1 -0
- package/dist/collections/carts/operations/updateItem.d.ts.map +1 -0
- package/dist/collections/carts/operations/updateItem.js +110 -0
- package/dist/collections/carts/operations/updateItem.js.map +1 -0
- package/dist/collections/carts/statusBeforeRead.d.ts.map +1 -0
- package/dist/collections/carts/statusBeforeRead.js +18 -0
- package/dist/collections/carts/statusBeforeRead.js.map +1 -0
- package/dist/collections/orders/createOrdersCollection.d.ts.map +1 -0
- package/dist/collections/orders/createOrdersCollection.js +163 -0
- package/dist/collections/orders/createOrdersCollection.js.map +1 -0
- package/dist/collections/products/createProductsCollection.d.ts.map +1 -0
- package/dist/collections/products/createProductsCollection.js +62 -0
- package/dist/collections/products/createProductsCollection.js.map +1 -0
- package/dist/collections/transactions/createTransactionsCollection.d.ts.map +1 -0
- package/dist/collections/transactions/createTransactionsCollection.js +157 -0
- package/dist/collections/transactions/createTransactionsCollection.js.map +1 -0
- package/dist/collections/variants/createVariantOptionsCollection.d.ts.map +1 -0
- package/dist/collections/variants/createVariantOptionsCollection.js +53 -0
- package/dist/collections/variants/createVariantOptionsCollection.js.map +1 -0
- package/dist/collections/variants/createVariantTypesCollection.d.ts.map +1 -0
- package/dist/collections/variants/createVariantTypesCollection.js +49 -0
- package/dist/collections/variants/createVariantTypesCollection.js.map +1 -0
- package/dist/collections/variants/createVariantsCollection/hooks/beforeChange.d.ts.map +1 -0
- package/dist/collections/variants/createVariantsCollection/hooks/beforeChange.js +38 -0
- package/dist/collections/variants/createVariantsCollection/hooks/beforeChange.js.map +1 -0
- package/dist/collections/variants/createVariantsCollection/hooks/validateOptions.d.ts.map +1 -0
- package/dist/collections/variants/createVariantsCollection/hooks/validateOptions.js +58 -0
- package/dist/collections/variants/createVariantsCollection/hooks/validateOptions.js.map +1 -0
- package/dist/collections/variants/createVariantsCollection/index.d.ts.map +1 -0
- package/dist/collections/variants/createVariantsCollection/index.js +107 -0
- package/dist/collections/variants/createVariantsCollection/index.js.map +1 -0
- package/dist/currencies/index.d.ts.map +1 -0
- package/dist/currencies/index.js +20 -0
- package/dist/currencies/index.js.map +1 -0
- package/dist/endpoints/confirmOrder.d.ts.map +1 -0
- package/dist/endpoints/confirmOrder.js +150 -0
- package/dist/endpoints/confirmOrder.js.map +1 -0
- package/dist/endpoints/initiatePayment.d.ts.map +1 -0
- package/dist/endpoints/initiatePayment.js +226 -0
- package/dist/endpoints/initiatePayment.js.map +1 -0
- package/dist/exports/client/index.d.ts.map +1 -0
- package/dist/exports/client/index.js +4 -0
- package/dist/exports/client/index.js.map +1 -0
- package/dist/exports/client/react.d.ts.map +1 -0
- package/dist/exports/client/react.js +5 -0
- package/dist/exports/client/react.js.map +1 -0
- package/dist/exports/payments/cod.d.ts +2 -0
- package/dist/exports/payments/cod.d.ts.map +1 -0
- package/dist/exports/payments/cod.js +3 -0
- package/dist/exports/payments/cod.js.map +1 -0
- package/dist/exports/payments/stripe.d.ts.map +1 -0
- package/dist/exports/payments/stripe.js +3 -0
- package/dist/exports/payments/stripe.js.map +1 -0
- package/dist/exports/rsc.d.ts.map +1 -0
- package/dist/exports/rsc.js +4 -0
- package/dist/exports/rsc.js.map +1 -0
- package/dist/exports/types.d.ts.map +1 -0
- package/dist/exports/types.js +3 -0
- package/dist/exports/types.js.map +1 -0
- package/dist/fields/amountField.d.ts.map +1 -0
- package/dist/fields/amountField.js +33 -0
- package/dist/fields/amountField.js.map +1 -0
- package/dist/fields/cartItemsField.d.ts.map +1 -0
- package/dist/fields/cartItemsField.js +55 -0
- package/dist/fields/cartItemsField.js.map +1 -0
- package/dist/fields/currencyField.d.ts.map +1 -0
- package/dist/fields/currencyField.js +29 -0
- package/dist/fields/currencyField.js.map +1 -0
- package/dist/fields/inventoryField.d.ts.map +1 -0
- package/dist/fields/inventoryField.js +16 -0
- package/dist/fields/inventoryField.js.map +1 -0
- package/dist/fields/pricesField.d.ts.map +1 -0
- package/dist/fields/pricesField.js +54 -0
- package/dist/fields/pricesField.js.map +1 -0
- package/dist/fields/statusField.d.ts.map +1 -0
- package/dist/fields/statusField.js +49 -0
- package/dist/fields/statusField.js.map +1 -0
- package/dist/fields/variantsFields.d.ts.map +1 -0
- package/dist/fields/variantsFields.js +48 -0
- package/dist/fields/variantsFields.js.map +1 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +258 -0
- package/dist/index.js.map +1 -0
- package/dist/payments/adapters/cod/confirmOrder.d.ts +5 -0
- package/dist/payments/adapters/cod/confirmOrder.d.ts.map +1 -0
- package/dist/payments/adapters/cod/confirmOrder.js +83 -0
- package/dist/payments/adapters/cod/confirmOrder.js.map +1 -0
- package/dist/payments/adapters/cod/confirmOrder.spec.js +166 -0
- package/dist/payments/adapters/cod/confirmOrder.spec.js.map +1 -0
- package/dist/payments/adapters/cod/endpoints/webhooks.d.ts +5 -0
- package/dist/payments/adapters/cod/endpoints/webhooks.d.ts.map +1 -0
- package/dist/payments/adapters/cod/endpoints/webhooks.js +18 -0
- package/dist/payments/adapters/cod/endpoints/webhooks.js.map +1 -0
- package/dist/payments/adapters/cod/index.d.ts +12 -0
- package/dist/payments/adapters/cod/index.d.ts.map +1 -0
- package/dist/payments/adapters/cod/index.js +64 -0
- package/dist/payments/adapters/cod/index.js.map +1 -0
- package/dist/payments/adapters/cod/initiatePayment.d.ts +5 -0
- package/dist/payments/adapters/cod/initiatePayment.d.ts.map +1 -0
- package/dist/payments/adapters/cod/initiatePayment.js +91 -0
- package/dist/payments/adapters/cod/initiatePayment.js.map +1 -0
- package/dist/payments/adapters/stripe/confirmOrder.d.ts.map +1 -0
- package/dist/payments/adapters/stripe/confirmOrder.js +113 -0
- package/dist/payments/adapters/stripe/confirmOrder.js.map +1 -0
- package/dist/payments/adapters/stripe/confirmOrder.spec.js +166 -0
- package/dist/payments/adapters/stripe/confirmOrder.spec.js.map +1 -0
- package/dist/payments/adapters/stripe/endpoints/webhooks.d.ts.map +1 -0
- package/dist/payments/adapters/stripe/endpoints/webhooks.js +53 -0
- package/dist/payments/adapters/stripe/endpoints/webhooks.js.map +1 -0
- package/dist/payments/adapters/stripe/index.d.ts +61 -0
- package/dist/payments/adapters/stripe/index.d.ts.map +1 -0
- package/dist/payments/adapters/stripe/index.js +68 -0
- package/dist/payments/adapters/stripe/index.js.map +1 -0
- package/dist/payments/adapters/stripe/initiatePayment.d.ts.map +1 -0
- package/dist/payments/adapters/stripe/initiatePayment.js +113 -0
- package/dist/payments/adapters/stripe/initiatePayment.js.map +1 -0
- package/dist/react/provider/index.d.ts.map +1 -0
- package/dist/react/provider/index.js +1094 -0
- package/dist/react/provider/index.js.map +1 -0
- package/dist/react/provider/utilities.d.ts.map +1 -0
- package/dist/react/provider/utilities.js +13 -0
- package/dist/react/provider/utilities.js.map +1 -0
- package/dist/translations/index.d.ts.map +1 -0
- package/dist/translations/index.js +84 -0
- package/dist/translations/index.js.map +1 -0
- package/dist/translations/languages/ar.d.ts.map +1 -0
- package/dist/translations/languages/ar.js +92 -0
- package/dist/translations/languages/ar.js.map +1 -0
- package/dist/translations/languages/az.d.ts.map +1 -0
- package/dist/translations/languages/az.js +92 -0
- package/dist/translations/languages/az.js.map +1 -0
- package/dist/translations/languages/bg.d.ts.map +1 -0
- package/dist/translations/languages/bg.js +92 -0
- package/dist/translations/languages/bg.js.map +1 -0
- package/dist/translations/languages/ca.d.ts.map +1 -0
- package/dist/translations/languages/ca.js +92 -0
- package/dist/translations/languages/ca.js.map +1 -0
- package/dist/translations/languages/cs.d.ts.map +1 -0
- package/dist/translations/languages/cs.js +92 -0
- package/dist/translations/languages/cs.js.map +1 -0
- package/dist/translations/languages/da.d.ts.map +1 -0
- package/dist/translations/languages/da.js +92 -0
- package/dist/translations/languages/da.js.map +1 -0
- package/dist/translations/languages/de.d.ts.map +1 -0
- package/dist/translations/languages/de.js +92 -0
- package/dist/translations/languages/de.js.map +1 -0
- package/dist/translations/languages/en.d.ts.map +1 -0
- package/dist/translations/languages/en.js +92 -0
- package/dist/translations/languages/en.js.map +1 -0
- package/dist/translations/languages/es.d.ts.map +1 -0
- package/dist/translations/languages/es.js +92 -0
- package/dist/translations/languages/es.js.map +1 -0
- package/dist/translations/languages/et.d.ts.map +1 -0
- package/dist/translations/languages/et.js +92 -0
- package/dist/translations/languages/et.js.map +1 -0
- package/dist/translations/languages/fa.d.ts.map +1 -0
- package/dist/translations/languages/fa.js +92 -0
- package/dist/translations/languages/fa.js.map +1 -0
- package/dist/translations/languages/fr.d.ts.map +1 -0
- package/dist/translations/languages/fr.js +92 -0
- package/dist/translations/languages/fr.js.map +1 -0
- package/dist/translations/languages/he.d.ts.map +1 -0
- package/dist/translations/languages/he.js +92 -0
- package/dist/translations/languages/he.js.map +1 -0
- package/dist/translations/languages/hr.d.ts.map +1 -0
- package/dist/translations/languages/hr.js +92 -0
- package/dist/translations/languages/hr.js.map +1 -0
- package/dist/translations/languages/hu.d.ts.map +1 -0
- package/dist/translations/languages/hu.js +92 -0
- package/dist/translations/languages/hu.js.map +1 -0
- package/dist/translations/languages/hy.d.ts.map +1 -0
- package/dist/translations/languages/hy.js +92 -0
- package/dist/translations/languages/hy.js.map +1 -0
- package/dist/translations/languages/is.d.ts.map +1 -0
- package/dist/translations/languages/is.js +92 -0
- package/dist/translations/languages/is.js.map +1 -0
- package/dist/translations/languages/it.d.ts.map +1 -0
- package/dist/translations/languages/it.js +92 -0
- package/dist/translations/languages/it.js.map +1 -0
- package/dist/translations/languages/ja.d.ts.map +1 -0
- package/dist/translations/languages/ja.js +92 -0
- package/dist/translations/languages/ja.js.map +1 -0
- package/dist/translations/languages/ko.d.ts.map +1 -0
- package/dist/translations/languages/ko.js +92 -0
- package/dist/translations/languages/ko.js.map +1 -0
- package/dist/translations/languages/lt.d.ts.map +1 -0
- package/dist/translations/languages/lt.js +92 -0
- package/dist/translations/languages/lt.js.map +1 -0
- package/dist/translations/languages/my.d.ts.map +1 -0
- package/dist/translations/languages/my.js +92 -0
- package/dist/translations/languages/my.js.map +1 -0
- package/dist/translations/languages/nb.d.ts.map +1 -0
- package/dist/translations/languages/nb.js +92 -0
- package/dist/translations/languages/nb.js.map +1 -0
- package/dist/translations/languages/nl.d.ts.map +1 -0
- package/dist/translations/languages/nl.js +92 -0
- package/dist/translations/languages/nl.js.map +1 -0
- package/dist/translations/languages/pl.d.ts.map +1 -0
- package/dist/translations/languages/pl.js +92 -0
- package/dist/translations/languages/pl.js.map +1 -0
- package/dist/translations/languages/pt.d.ts.map +1 -0
- package/dist/translations/languages/pt.js +92 -0
- package/dist/translations/languages/pt.js.map +1 -0
- package/dist/translations/languages/ro.d.ts.map +1 -0
- package/dist/translations/languages/ro.js +92 -0
- package/dist/translations/languages/ro.js.map +1 -0
- package/dist/translations/languages/rs.d.ts.map +1 -0
- package/dist/translations/languages/rs.js +92 -0
- package/dist/translations/languages/rs.js.map +1 -0
- package/dist/translations/languages/rsLatin.d.ts.map +1 -0
- package/dist/translations/languages/rsLatin.js +92 -0
- package/dist/translations/languages/rsLatin.js.map +1 -0
- package/dist/translations/languages/ru.d.ts.map +1 -0
- package/dist/translations/languages/ru.js +92 -0
- package/dist/translations/languages/ru.js.map +1 -0
- package/dist/translations/languages/sk.d.ts.map +1 -0
- package/dist/translations/languages/sk.js +92 -0
- package/dist/translations/languages/sk.js.map +1 -0
- package/dist/translations/languages/sl.d.ts.map +1 -0
- package/dist/translations/languages/sl.js +92 -0
- package/dist/translations/languages/sl.js.map +1 -0
- package/dist/translations/languages/sv.d.ts.map +1 -0
- package/dist/translations/languages/sv.js +92 -0
- package/dist/translations/languages/sv.js.map +1 -0
- package/dist/translations/languages/ta.d.ts.map +1 -0
- package/dist/translations/languages/ta.js +92 -0
- package/dist/translations/languages/ta.js.map +1 -0
- package/dist/translations/languages/th.d.ts.map +1 -0
- package/dist/translations/languages/th.js +92 -0
- package/dist/translations/languages/th.js.map +1 -0
- package/dist/translations/languages/tr.d.ts.map +1 -0
- package/dist/translations/languages/tr.js +92 -0
- package/dist/translations/languages/tr.js.map +1 -0
- package/dist/translations/languages/uk.d.ts.map +1 -0
- package/dist/translations/languages/uk.js +92 -0
- package/dist/translations/languages/uk.js.map +1 -0
- package/dist/translations/languages/vi.d.ts.map +1 -0
- package/dist/translations/languages/vi.js +92 -0
- package/dist/translations/languages/vi.js.map +1 -0
- package/dist/translations/languages/zh.d.ts.map +1 -0
- package/dist/translations/languages/zh.js +92 -0
- package/dist/translations/languages/zh.js.map +1 -0
- package/dist/translations/languages/zhTw.d.ts.map +1 -0
- package/dist/translations/languages/zhTw.js +92 -0
- package/dist/translations/languages/zhTw.js.map +1 -0
- package/dist/translations/translation-schema.json +343 -0
- package/dist/translations/types.d.ts.map +1 -0
- package/dist/translations/types.js +3 -0
- package/dist/translations/types.js.map +1 -0
- 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.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.map +1 -0
- package/dist/ui/PriceCell/index.js +36 -0
- package/dist/ui/PriceCell/index.js.map +1 -0
- package/dist/ui/PriceInput/FormattedInput.d.ts.map +1 -0
- package/dist/ui/PriceInput/FormattedInput.js +147 -0
- package/dist/ui/PriceInput/FormattedInput.js.map +1 -0
- package/dist/ui/PriceInput/index.css +35 -0
- package/dist/ui/PriceInput/index.d.ts.map +1 -0
- package/dist/ui/PriceInput/index.js +21 -0
- package/dist/ui/PriceInput/index.js.map +1 -0
- package/dist/ui/PriceRowLabel/index.css +13 -0
- package/dist/ui/PriceRowLabel/index.d.ts.map +1 -0
- package/dist/ui/PriceRowLabel/index.js +66 -0
- package/dist/ui/PriceRowLabel/index.js.map +1 -0
- package/dist/ui/VariantOptionsSelector/ErrorBox.d.ts.map +1 -0
- package/dist/ui/VariantOptionsSelector/ErrorBox.js +28 -0
- package/dist/ui/VariantOptionsSelector/ErrorBox.js.map +1 -0
- package/dist/ui/VariantOptionsSelector/OptionsSelect.d.ts.map +1 -0
- package/dist/ui/VariantOptionsSelector/OptionsSelect.js +71 -0
- package/dist/ui/VariantOptionsSelector/OptionsSelect.js.map +1 -0
- package/dist/ui/VariantOptionsSelector/index.css +37 -0
- package/dist/ui/VariantOptionsSelector/index.d.ts.map +1 -0
- package/dist/ui/VariantOptionsSelector/index.js +81 -0
- package/dist/ui/VariantOptionsSelector/index.js.map +1 -0
- package/dist/ui/utilities.d.ts.map +1 -0
- package/dist/ui/utilities.js +40 -0
- package/dist/ui/utilities.js.map +1 -0
- package/dist/utilities/accessComposition.d.ts.map +1 -0
- package/dist/utilities/accessComposition.js +103 -0
- package/dist/utilities/accessComposition.js.map +1 -0
- package/dist/utilities/accessComposition.spec.js +765 -0
- package/dist/utilities/accessComposition.spec.js.map +1 -0
- package/dist/utilities/defaultProductsValidation.d.ts.map +1 -0
- package/dist/utilities/defaultProductsValidation.js +40 -0
- package/dist/utilities/defaultProductsValidation.js.map +1 -0
- package/dist/utilities/defaultProductsValidation.spec.js +384 -0
- package/dist/utilities/defaultProductsValidation.spec.js.map +1 -0
- package/dist/utilities/errorCodes.d.ts.map +1 -0
- package/dist/utilities/errorCodes.js +4 -0
- package/dist/utilities/errorCodes.js.map +1 -0
- package/dist/utilities/getCollectionSlugMap.d.ts.map +1 -0
- package/dist/utilities/getCollectionSlugMap.js +36 -0
- package/dist/utilities/getCollectionSlugMap.js.map +1 -0
- package/dist/utilities/getCollectionSlugMap.spec.js +254 -0
- package/dist/utilities/getCollectionSlugMap.spec.js.map +1 -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.map +1 -0
- package/dist/utilities/sanitizePluginConfig.js +75 -0
- package/dist/utilities/sanitizePluginConfig.js.map +1 -0
- package/dist/utilities/sanitizePluginConfig.spec.js +516 -0
- package/dist/utilities/sanitizePluginConfig.spec.js.map +1 -0
- package/package.json +114 -0
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Gets the ID from a product/variant field which can be either an ID or a populated object.
|
|
3
|
+
*/ const getItemID = (field)=>{
|
|
4
|
+
if (!field) {
|
|
5
|
+
return undefined;
|
|
6
|
+
}
|
|
7
|
+
return typeof field === 'object' ? field.id : field;
|
|
8
|
+
};
|
|
9
|
+
/**
|
|
10
|
+
* Default matcher for merge operations - compares normalized product and variant IDs.
|
|
11
|
+
*/ const defaultMergeItemMatcher = (args)=>{
|
|
12
|
+
const { existingItem, newItem } = args;
|
|
13
|
+
const existingProductID = getItemID(existingItem.product);
|
|
14
|
+
const newProductID = getItemID(newItem.product);
|
|
15
|
+
if (existingProductID !== newProductID) {
|
|
16
|
+
return false;
|
|
17
|
+
}
|
|
18
|
+
const existingVariantID = getItemID(existingItem.variant);
|
|
19
|
+
const newVariantID = getItemID(newItem.variant);
|
|
20
|
+
return existingVariantID === newVariantID;
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* Merges items from a source cart (typically a guest cart) into a target cart (typically a user's cart).
|
|
24
|
+
* Items are merged intelligently - matching items have their quantities combined.
|
|
25
|
+
* After successful merge, the source cart is deleted.
|
|
26
|
+
*
|
|
27
|
+
* @example
|
|
28
|
+
* ```ts
|
|
29
|
+
* const result = await mergeCart({
|
|
30
|
+
* payload,
|
|
31
|
+
* cartsSlug: 'carts',
|
|
32
|
+
* targetCartID: 'user-cart-123',
|
|
33
|
+
* sourceCartID: 'guest-cart-456',
|
|
34
|
+
* sourceSecret: 'abc123secret',
|
|
35
|
+
* })
|
|
36
|
+
* ```
|
|
37
|
+
*/ export const mergeCart = async (args)=>{
|
|
38
|
+
const { cartItemMatcher = defaultMergeItemMatcher, cartsSlug, payload, req, sourceCartID, sourceSecret, targetCartID } = args;
|
|
39
|
+
// Fetch the source (guest) cart with secret verification
|
|
40
|
+
// Using overrideAccess: true here because we're manually verifying the secret in the where clause
|
|
41
|
+
const sourceCart = await payload.find({
|
|
42
|
+
collection: cartsSlug,
|
|
43
|
+
depth: 0,
|
|
44
|
+
limit: 1,
|
|
45
|
+
overrideAccess: true,
|
|
46
|
+
req,
|
|
47
|
+
where: {
|
|
48
|
+
and: [
|
|
49
|
+
{
|
|
50
|
+
id: {
|
|
51
|
+
equals: sourceCartID
|
|
52
|
+
}
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
secret: {
|
|
56
|
+
equals: sourceSecret
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
]
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
if (!sourceCart.docs || sourceCart.docs.length === 0) {
|
|
63
|
+
return {
|
|
64
|
+
cart: null,
|
|
65
|
+
message: `Source cart with ID ${sourceCartID} not found or secret mismatch`,
|
|
66
|
+
success: false
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
const guestCart = sourceCart.docs[0];
|
|
70
|
+
// Fetch the target (user's) cart
|
|
71
|
+
const targetCart = await payload.findByID({
|
|
72
|
+
id: targetCartID,
|
|
73
|
+
collection: cartsSlug,
|
|
74
|
+
depth: 0,
|
|
75
|
+
overrideAccess: false,
|
|
76
|
+
req
|
|
77
|
+
});
|
|
78
|
+
if (!targetCart) {
|
|
79
|
+
return {
|
|
80
|
+
cart: null,
|
|
81
|
+
message: `Target cart with ID ${targetCartID} not found`,
|
|
82
|
+
success: false
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
const sourceItems = guestCart?.items || [];
|
|
86
|
+
const targetItems = targetCart.items || [];
|
|
87
|
+
// Merge items from source into target
|
|
88
|
+
const mergedItems = [
|
|
89
|
+
...targetItems
|
|
90
|
+
];
|
|
91
|
+
for (const sourceItem of sourceItems){
|
|
92
|
+
// Find if this item already exists in target cart
|
|
93
|
+
const existingIndex = mergedItems.findIndex((targetItem)=>cartItemMatcher({
|
|
94
|
+
existingItem: targetItem,
|
|
95
|
+
newItem: sourceItem
|
|
96
|
+
}));
|
|
97
|
+
if (existingIndex !== -1) {
|
|
98
|
+
// Item exists in target - add quantities
|
|
99
|
+
const existingItem = mergedItems[existingIndex];
|
|
100
|
+
mergedItems[existingIndex] = {
|
|
101
|
+
...existingItem,
|
|
102
|
+
quantity: existingItem.quantity + sourceItem.quantity
|
|
103
|
+
};
|
|
104
|
+
} else {
|
|
105
|
+
// Item doesn't exist in target - add it
|
|
106
|
+
// Omit the source item's array row `id` so Payload generates a new one.
|
|
107
|
+
// In SQL, array items are stored in separate tables with their own IDs,
|
|
108
|
+
// and using IDs from another cart's array would cause conflicts.
|
|
109
|
+
const { id: _omit, ...sourceItemWithoutId } = sourceItem;
|
|
110
|
+
mergedItems.push(sourceItemWithoutId);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
// Update the target cart with merged items
|
|
114
|
+
const updatedCart = await payload.update({
|
|
115
|
+
id: targetCartID,
|
|
116
|
+
collection: cartsSlug,
|
|
117
|
+
data: {
|
|
118
|
+
items: mergedItems
|
|
119
|
+
},
|
|
120
|
+
depth: 0,
|
|
121
|
+
overrideAccess: false,
|
|
122
|
+
req
|
|
123
|
+
});
|
|
124
|
+
// Delete the source (guest) cart after successful merge
|
|
125
|
+
// Using overrideAccess: true because we've already verified the secret above
|
|
126
|
+
try {
|
|
127
|
+
await payload.delete({
|
|
128
|
+
id: sourceCartID,
|
|
129
|
+
collection: cartsSlug,
|
|
130
|
+
overrideAccess: true,
|
|
131
|
+
req
|
|
132
|
+
});
|
|
133
|
+
} catch {
|
|
134
|
+
// Silently fail on delete - the merge was still successful
|
|
135
|
+
// The cart may have already been deleted or access denied
|
|
136
|
+
}
|
|
137
|
+
return {
|
|
138
|
+
cart: updatedCart,
|
|
139
|
+
message: `Merged ${sourceItems.length} items from guest cart`,
|
|
140
|
+
success: true
|
|
141
|
+
};
|
|
142
|
+
};
|
|
143
|
+
|
|
144
|
+
//# sourceMappingURL=mergeCart.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/collections/carts/operations/mergeCart.ts"],"sourcesContent":["import type { CollectionSlug, DefaultDocumentIDType, Payload, PayloadRequest } from 'payload'\n\nimport type { CartItemData, CartOperationResult } from './types.js'\n\n/**\n * Gets the ID from a product/variant field which can be either an ID or a populated object.\n */\nconst getItemID = (\n field:\n | { [key: string]: unknown; id: DefaultDocumentIDType }\n | DefaultDocumentIDType\n | null\n | undefined,\n): DefaultDocumentIDType | undefined => {\n if (!field) {\n return undefined\n }\n return typeof field === 'object' ? field.id : field\n}\n\n/**\n * Default matcher for merge operations - compares normalized product and variant IDs.\n */\nconst defaultMergeItemMatcher = (args: {\n existingItem: CartItemData\n newItem: CartItemData\n}): boolean => {\n const { existingItem, newItem } = args\n\n const existingProductID = getItemID(existingItem.product)\n const newProductID = getItemID(newItem.product)\n\n if (existingProductID !== newProductID) {\n return false\n }\n\n const existingVariantID = getItemID(existingItem.variant)\n const newVariantID = getItemID(newItem.variant)\n\n return existingVariantID === newVariantID\n}\n\nexport type MergeCartArgs = {\n /**\n * Optional custom cart item matcher function for merge operations.\n * Both items are CartItemData (existing cart items).\n */\n cartItemMatcher?: (args: { existingItem: CartItemData; newItem: CartItemData }) => boolean\n /**\n * The collection slug for carts.\n */\n cartsSlug: CollectionSlug\n /**\n * The Payload instance.\n */\n payload: Payload\n /**\n * The PayloadRequest object for transaction safety.\n */\n req?: PayloadRequest\n /**\n * The ID of the source (guest) cart to merge from.\n */\n sourceCartID: DefaultDocumentIDType\n /**\n * The secret for accessing the source guest cart.\n */\n sourceSecret: string\n /**\n * The ID of the target (user's) cart to merge into.\n */\n targetCartID: DefaultDocumentIDType\n}\n\n/**\n * Merges items from a source cart (typically a guest cart) into a target cart (typically a user's cart).\n * Items are merged intelligently - matching items have their quantities combined.\n * After successful merge, the source cart is deleted.\n *\n * @example\n * ```ts\n * const result = await mergeCart({\n * payload,\n * cartsSlug: 'carts',\n * targetCartID: 'user-cart-123',\n * sourceCartID: 'guest-cart-456',\n * sourceSecret: 'abc123secret',\n * })\n * ```\n */\nexport const mergeCart = async (args: MergeCartArgs): Promise<CartOperationResult> => {\n const {\n cartItemMatcher = defaultMergeItemMatcher,\n cartsSlug,\n payload,\n req,\n sourceCartID,\n sourceSecret,\n targetCartID,\n } = args\n\n // Fetch the source (guest) cart with secret verification\n // Using overrideAccess: true here because we're manually verifying the secret in the where clause\n const sourceCart = await payload.find({\n collection: cartsSlug,\n depth: 0,\n limit: 1,\n overrideAccess: true,\n req,\n where: {\n and: [{ id: { equals: sourceCartID } }, { secret: { equals: sourceSecret } }],\n },\n })\n\n if (!sourceCart.docs || sourceCart.docs.length === 0) {\n return {\n cart: null,\n message: `Source cart with ID ${sourceCartID} not found or secret mismatch`,\n success: false,\n }\n }\n\n const guestCart = sourceCart.docs[0]\n\n // Fetch the target (user's) cart\n const targetCart = await payload.findByID({\n id: targetCartID,\n collection: cartsSlug,\n depth: 0,\n overrideAccess: false,\n req,\n })\n\n if (!targetCart) {\n return {\n cart: null,\n message: `Target cart with ID ${targetCartID} not found`,\n success: false,\n }\n }\n\n const sourceItems: CartItemData[] = (guestCart?.items as CartItemData[]) || []\n const targetItems: CartItemData[] = (targetCart.items as CartItemData[]) || []\n\n // Merge items from source into target\n const mergedItems: CartItemData[] = [...targetItems]\n\n for (const sourceItem of sourceItems) {\n // Find if this item already exists in target cart\n const existingIndex = mergedItems.findIndex((targetItem) =>\n cartItemMatcher({ existingItem: targetItem, newItem: sourceItem }),\n )\n\n if (existingIndex !== -1) {\n // Item exists in target - add quantities\n const existingItem = mergedItems[existingIndex]!\n mergedItems[existingIndex] = {\n ...existingItem,\n quantity: existingItem.quantity + sourceItem.quantity,\n }\n } else {\n // Item doesn't exist in target - add it\n // Omit the source item's array row `id` so Payload generates a new one.\n // In SQL, array items are stored in separate tables with their own IDs,\n // and using IDs from another cart's array would cause conflicts.\n const { id: _omit, ...sourceItemWithoutId } = sourceItem\n mergedItems.push(sourceItemWithoutId as CartItemData)\n }\n }\n\n // Update the target cart with merged items\n const updatedCart = await payload.update({\n id: targetCartID,\n collection: cartsSlug,\n data: {\n items: mergedItems,\n },\n depth: 0,\n overrideAccess: false,\n req,\n })\n\n // Delete the source (guest) cart after successful merge\n // Using overrideAccess: true because we've already verified the secret above\n try {\n await payload.delete({\n id: sourceCartID,\n collection: cartsSlug,\n overrideAccess: true,\n req,\n })\n } catch {\n // Silently fail on delete - the merge was still successful\n // The cart may have already been deleted or access denied\n }\n\n return {\n cart: updatedCart,\n message: `Merged ${sourceItems.length} items from guest cart`,\n success: true,\n }\n}\n"],"names":["getItemID","field","undefined","id","defaultMergeItemMatcher","args","existingItem","newItem","existingProductID","product","newProductID","existingVariantID","variant","newVariantID","mergeCart","cartItemMatcher","cartsSlug","payload","req","sourceCartID","sourceSecret","targetCartID","sourceCart","find","collection","depth","limit","overrideAccess","where","and","equals","secret","docs","length","cart","message","success","guestCart","targetCart","findByID","sourceItems","items","targetItems","mergedItems","sourceItem","existingIndex","findIndex","targetItem","quantity","_omit","sourceItemWithoutId","push","updatedCart","update","data","delete"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"removeItem.d.ts","sourceRoot":"","sources":["../../../../src/collections/carts/operations/removeItem.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAgB,mBAAmB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAInF;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,UAAU,SAAgB,cAAc,KAAG,OAAO,CAAC,mBAAmB,CAuDlF,CAAA"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { createRequestWithSecret } from './createRequestWithSecret.js';
|
|
2
|
+
/**
|
|
3
|
+
* Removes an item from a cart by its row ID.
|
|
4
|
+
*
|
|
5
|
+
* This handler is isolated and can be used from:
|
|
6
|
+
* - Custom endpoints
|
|
7
|
+
* - Local API operations
|
|
8
|
+
* - Hooks
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```ts
|
|
12
|
+
* const result = await removeItem({
|
|
13
|
+
* payload,
|
|
14
|
+
* cartsSlug: 'carts',
|
|
15
|
+
* cartID: '123',
|
|
16
|
+
* itemID: 'item-row-id',
|
|
17
|
+
* })
|
|
18
|
+
* ```
|
|
19
|
+
*/ export const removeItem = async (args)=>{
|
|
20
|
+
const { cartID, cartsSlug, itemID, payload, req, secret } = args;
|
|
21
|
+
// Inject secret into request context for access control
|
|
22
|
+
const reqWithSecret = createRequestWithSecret(req, secret);
|
|
23
|
+
const cart = await payload.findByID({
|
|
24
|
+
id: cartID,
|
|
25
|
+
collection: cartsSlug,
|
|
26
|
+
depth: 0,
|
|
27
|
+
overrideAccess: false,
|
|
28
|
+
req: reqWithSecret
|
|
29
|
+
});
|
|
30
|
+
if (!cart) {
|
|
31
|
+
return {
|
|
32
|
+
cart: null,
|
|
33
|
+
message: `Cart with ID ${cartID} not found`,
|
|
34
|
+
success: false
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
const existingItems = cart.items || [];
|
|
38
|
+
// Find the item by its row ID
|
|
39
|
+
const itemIndex = existingItems.findIndex((item)=>item.id === itemID);
|
|
40
|
+
if (itemIndex === -1) {
|
|
41
|
+
return {
|
|
42
|
+
cart,
|
|
43
|
+
message: `Item with ID ${itemID} not found in cart`,
|
|
44
|
+
success: false
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
// Remove the item
|
|
48
|
+
const updatedItems = [
|
|
49
|
+
...existingItems
|
|
50
|
+
];
|
|
51
|
+
updatedItems.splice(itemIndex, 1);
|
|
52
|
+
const updatedCart = await payload.update({
|
|
53
|
+
id: cartID,
|
|
54
|
+
collection: cartsSlug,
|
|
55
|
+
data: {
|
|
56
|
+
items: updatedItems
|
|
57
|
+
},
|
|
58
|
+
depth: 0,
|
|
59
|
+
overrideAccess: false,
|
|
60
|
+
req: reqWithSecret
|
|
61
|
+
});
|
|
62
|
+
return {
|
|
63
|
+
cart: updatedCart,
|
|
64
|
+
message: 'Item removed from cart',
|
|
65
|
+
success: true
|
|
66
|
+
};
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
//# sourceMappingURL=removeItem.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/collections/carts/operations/removeItem.ts"],"sourcesContent":["import type { CartItemData, CartOperationResult, RemoveItemArgs } from './types.js'\n\nimport { createRequestWithSecret } from './createRequestWithSecret.js'\n\n/**\n * Removes an item from a cart by its row ID.\n *\n * This handler is isolated and can be used from:\n * - Custom endpoints\n * - Local API operations\n * - Hooks\n *\n * @example\n * ```ts\n * const result = await removeItem({\n * payload,\n * cartsSlug: 'carts',\n * cartID: '123',\n * itemID: 'item-row-id',\n * })\n * ```\n */\nexport const removeItem = async (args: RemoveItemArgs): Promise<CartOperationResult> => {\n const { cartID, cartsSlug, itemID, payload, req, secret } = args\n\n // Inject secret into request context for access control\n const reqWithSecret = createRequestWithSecret(req, secret)\n\n const cart = await payload.findByID({\n id: cartID,\n collection: cartsSlug,\n depth: 0,\n overrideAccess: false,\n req: reqWithSecret,\n })\n\n if (!cart) {\n return {\n cart: null,\n message: `Cart with ID ${cartID} not found`,\n success: false,\n }\n }\n\n const existingItems: CartItemData[] = (cart.items as CartItemData[]) || []\n\n // Find the item by its row ID\n const itemIndex = existingItems.findIndex((item) => item.id === itemID)\n\n if (itemIndex === -1) {\n return {\n cart,\n message: `Item with ID ${itemID} not found in cart`,\n success: false,\n }\n }\n\n // Remove the item\n const updatedItems = [...existingItems]\n updatedItems.splice(itemIndex, 1)\n\n const updatedCart = await payload.update({\n id: cartID,\n collection: cartsSlug,\n data: {\n items: updatedItems,\n },\n depth: 0,\n overrideAccess: false,\n req: reqWithSecret,\n })\n\n return {\n cart: updatedCart,\n message: 'Item removed from cart',\n success: true,\n }\n}\n"],"names":["createRequestWithSecret","removeItem","args","cartID","cartsSlug","itemID","payload","req","secret","reqWithSecret","cart","findByID","id","collection","depth","overrideAccess","message","success","existingItems","items","itemIndex","findIndex","item","updatedItems","splice","updatedCart","update","data"],"mappings":"AAEA,SAASA,uBAAuB,QAAQ,+BAA8B;AAEtE;;;;;;;;;;;;;;;;;CAiBC,GACD,OAAO,MAAMC,aAAa,OAAOC;IAC/B,MAAM,EAAEC,MAAM,EAAEC,SAAS,EAAEC,MAAM,EAAEC,OAAO,EAAEC,GAAG,EAAEC,MAAM,EAAE,GAAGN;IAE5D,wDAAwD;IACxD,MAAMO,gBAAgBT,wBAAwBO,KAAKC;IAEnD,MAAME,OAAO,MAAMJ,QAAQK,QAAQ,CAAC;QAClCC,IAAIT;QACJU,YAAYT;QACZU,OAAO;QACPC,gBAAgB;QAChBR,KAAKE;IACP;IAEA,IAAI,CAACC,MAAM;QACT,OAAO;YACLA,MAAM;YACNM,SAAS,CAAC,aAAa,EAAEb,OAAO,UAAU,CAAC;YAC3Cc,SAAS;QACX;IACF;IAEA,MAAMC,gBAAgC,AAACR,KAAKS,KAAK,IAAuB,EAAE;IAE1E,8BAA8B;IAC9B,MAAMC,YAAYF,cAAcG,SAAS,CAAC,CAACC,OAASA,KAAKV,EAAE,KAAKP;IAEhE,IAAIe,cAAc,CAAC,GAAG;QACpB,OAAO;YACLV;YACAM,SAAS,CAAC,aAAa,EAAEX,OAAO,kBAAkB,CAAC;YACnDY,SAAS;QACX;IACF;IAEA,kBAAkB;IAClB,MAAMM,eAAe;WAAIL;KAAc;IACvCK,aAAaC,MAAM,CAACJ,WAAW;IAE/B,MAAMK,cAAc,MAAMnB,QAAQoB,MAAM,CAAC;QACvCd,IAAIT;QACJU,YAAYT;QACZuB,MAAM;YACJR,OAAOI;QACT;QACAT,OAAO;QACPC,gBAAgB;QAChBR,KAAKE;IACP;IAEA,OAAO;QACLC,MAAMe;QACNT,SAAS;QACTC,SAAS;IACX;AACF,EAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/collections/carts/operations/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/collections/carts/operations/types.ts"],"sourcesContent":["import type { DefaultDocumentIDType, Payload, PayloadRequest } from 'payload'\n\n/**\n * Represents an item in the cart with populated or ID references.\n */\nexport type CartItemData = {\n [key: string]: unknown\n /**\n * The ID of the cart item. Array item IDs are always strings in Payload,\n * regardless of the database adapter's default ID type.\n */\n id?: string\n product: { [key: string]: unknown; id: DefaultDocumentIDType } | DefaultDocumentIDType\n quantity: number\n variant?: { [key: string]: unknown; id: DefaultDocumentIDType } | DefaultDocumentIDType\n}\n\n/**\n * Represents a new item to be added to the cart.\n */\nexport type NewCartItem = {\n [key: string]: unknown\n product: DefaultDocumentIDType\n quantity?: number\n variant?: DefaultDocumentIDType\n}\n\n/**\n * Arguments for the cart item matcher function.\n */\nexport type CartItemMatcherArgs = {\n /** The existing cart item to compare against */\n existingItem: CartItemData\n /** The new item being added */\n newItem: NewCartItem\n}\n\n/**\n * Function to determine if two cart items should be considered the same.\n * When items match, their quantities are combined instead of creating separate entries.\n */\nexport type CartItemMatcher = (args: CartItemMatcherArgs) => boolean\n\n/**\n * MongoDB-style update operator for numeric fields.\n * Supports $inc for increment/decrement operations.\n *\n * @example\n * ```ts\n * // Set quantity to 5\n * { quantity: 5 }\n *\n * // Increment quantity by 1\n * { quantity: { $inc: 1 } }\n *\n * // Decrement quantity by 2\n * { quantity: { $inc: -2 } }\n * ```\n */\nexport type NumericOperator = {\n /** Increment by this value (use negative to decrement) */\n $inc: number\n}\n\n/**\n * A field value that can be either a direct value or an operator.\n */\nexport type FieldWithOperator<T> = NumericOperator | T\n\n/**\n * Checks if a value is a NumericOperator.\n */\nexport function isNumericOperator(value: unknown): value is NumericOperator {\n return typeof value === 'object' && value !== null && '$inc' in value\n}\n\n/**\n * Base arguments for all cart operations.\n */\nexport type BaseCartOperationArgs = {\n /** The cart ID to operate on */\n cartID: DefaultDocumentIDType\n /** The carts collection slug */\n cartsSlug: string\n /** Payload instance */\n payload: Payload\n /** Optional request context for access control */\n req?: PayloadRequest\n /** Secret for guest cart access */\n secret?: string\n}\n\n/**\n * Arguments for the addItem operation.\n */\nexport type AddItemArgs = {\n /** Custom matcher function to determine item uniqueness */\n cartItemMatcher?: CartItemMatcher\n /** The item to add */\n item: NewCartItem\n /** Quantity to add (defaults to 1) */\n quantity?: number\n} & BaseCartOperationArgs\n\n/**\n * Arguments for the removeItem operation.\n */\nexport type RemoveItemArgs = {\n /**\n * The cart item row ID to remove.\n * Array item IDs are always strings in Payload, regardless of the database adapter's default ID type.\n */\n itemID: string\n} & BaseCartOperationArgs\n\n/**\n * Arguments for the updateItem operation.\n * Supports MongoDB-style operators for flexible updates.\n */\nexport type UpdateItemArgs = {\n /**\n * The cart item row ID to update.\n * Array item IDs are always strings in Payload, regardless of the database adapter's default ID type.\n */\n itemID: string\n /**\n * The quantity value or operator.\n * - Direct number: Sets the quantity to this value\n * - { $inc: n }: Increments quantity by n (use negative to decrement)\n *\n * @example\n * ```ts\n * // Set quantity to 5\n * { quantity: 5 }\n *\n * // Increment by 1\n * { quantity: { $inc: 1 } }\n *\n * // Decrement by 1\n * { quantity: { $inc: -1 } }\n * ```\n */\n quantity: FieldWithOperator<number>\n /** Whether to remove the item if quantity reaches 0 (defaults to true) */\n removeOnZero?: boolean\n} & BaseCartOperationArgs\n\n/**\n * Arguments for the clearCart operation.\n */\nexport type ClearCartArgs = BaseCartOperationArgs\n\n/**\n * Result of a cart operation.\n */\nexport type CartOperationResult<T = unknown> = {\n cart: T\n message: string\n success: boolean\n}\n"],"names":["isNumericOperator","value"],"mappings":"AAqEA;;CAEC,GACD,OAAO,SAASA,kBAAkBC,KAAc;IAC9C,OAAO,OAAOA,UAAU,YAAYA,UAAU,QAAQ,UAAUA;AAClE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"updateItem.d.ts","sourceRoot":"","sources":["../../../../src/collections/carts/operations/updateItem.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAgB,mBAAmB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAKnF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,eAAO,MAAM,UAAU,SAAgB,cAAc,KAAG,OAAO,CAAC,mBAAmB,CA8ElF,CAAA"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import { createRequestWithSecret } from './createRequestWithSecret.js';
|
|
2
|
+
import { isNumericOperator } from './types.js';
|
|
3
|
+
/**
|
|
4
|
+
* Updates an item in the cart using MongoDB-style operators.
|
|
5
|
+
*
|
|
6
|
+
* This handler is isolated and can be used from:
|
|
7
|
+
* - Custom endpoints
|
|
8
|
+
* - Local API operations
|
|
9
|
+
* - Hooks
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```ts
|
|
13
|
+
* // Set quantity to 5
|
|
14
|
+
* const result = await updateItem({
|
|
15
|
+
* payload,
|
|
16
|
+
* cartsSlug: 'carts',
|
|
17
|
+
* cartID: '123',
|
|
18
|
+
* itemID: 'item-row-id',
|
|
19
|
+
* quantity: 5,
|
|
20
|
+
* })
|
|
21
|
+
*
|
|
22
|
+
* // Increment by 1
|
|
23
|
+
* const result = await updateItem({
|
|
24
|
+
* payload,
|
|
25
|
+
* cartsSlug: 'carts',
|
|
26
|
+
* cartID: '123',
|
|
27
|
+
* itemID: 'item-row-id',
|
|
28
|
+
* quantity: { $inc: 1 },
|
|
29
|
+
* })
|
|
30
|
+
*
|
|
31
|
+
* // Decrement by 2
|
|
32
|
+
* const result = await updateItem({
|
|
33
|
+
* payload,
|
|
34
|
+
* cartsSlug: 'carts',
|
|
35
|
+
* cartID: '123',
|
|
36
|
+
* itemID: 'item-row-id',
|
|
37
|
+
* quantity: { $inc: -2 },
|
|
38
|
+
* })
|
|
39
|
+
* ```
|
|
40
|
+
*/ export const updateItem = async (args)=>{
|
|
41
|
+
const { cartID, cartsSlug, itemID, payload, quantity, removeOnZero = true, req, secret } = args;
|
|
42
|
+
// Inject secret into request context for access control
|
|
43
|
+
const reqWithSecret = createRequestWithSecret(req, secret);
|
|
44
|
+
const cart = await payload.findByID({
|
|
45
|
+
id: cartID,
|
|
46
|
+
collection: cartsSlug,
|
|
47
|
+
depth: 0,
|
|
48
|
+
overrideAccess: false,
|
|
49
|
+
req: reqWithSecret
|
|
50
|
+
});
|
|
51
|
+
if (!cart) {
|
|
52
|
+
return {
|
|
53
|
+
cart: null,
|
|
54
|
+
message: `Cart with ID ${cartID} not found`,
|
|
55
|
+
success: false
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
const existingItems = cart.items || [];
|
|
59
|
+
// Find the item by its row ID
|
|
60
|
+
const itemIndex = existingItems.findIndex((item)=>item.id === itemID);
|
|
61
|
+
if (itemIndex === -1) {
|
|
62
|
+
return {
|
|
63
|
+
cart,
|
|
64
|
+
message: `Item with ID ${itemID} not found in cart`,
|
|
65
|
+
success: false
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
const updatedItems = [
|
|
69
|
+
...existingItems
|
|
70
|
+
];
|
|
71
|
+
const existingItem = updatedItems[itemIndex];
|
|
72
|
+
const currentQuantity = existingItem.quantity;
|
|
73
|
+
// Calculate new quantity based on operator or direct value
|
|
74
|
+
let newQuantity;
|
|
75
|
+
if (isNumericOperator(quantity)) {
|
|
76
|
+
// $inc operator: add to current value
|
|
77
|
+
newQuantity = currentQuantity + quantity.$inc;
|
|
78
|
+
} else {
|
|
79
|
+
// Direct value: set to this value
|
|
80
|
+
newQuantity = quantity;
|
|
81
|
+
}
|
|
82
|
+
if (newQuantity <= 0 && removeOnZero) {
|
|
83
|
+
// Remove the item if quantity reaches 0 or below
|
|
84
|
+
updatedItems.splice(itemIndex, 1);
|
|
85
|
+
} else {
|
|
86
|
+
// Update the quantity (minimum 1 if not removing on zero)
|
|
87
|
+
updatedItems[itemIndex] = {
|
|
88
|
+
...existingItem,
|
|
89
|
+
quantity: removeOnZero ? newQuantity : Math.max(1, newQuantity)
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
const updatedCart = await payload.update({
|
|
93
|
+
id: cartID,
|
|
94
|
+
collection: cartsSlug,
|
|
95
|
+
data: {
|
|
96
|
+
items: updatedItems
|
|
97
|
+
},
|
|
98
|
+
depth: 0,
|
|
99
|
+
overrideAccess: false,
|
|
100
|
+
req: reqWithSecret
|
|
101
|
+
});
|
|
102
|
+
const wasRemoved = newQuantity <= 0 && removeOnZero;
|
|
103
|
+
return {
|
|
104
|
+
cart: updatedCart,
|
|
105
|
+
message: wasRemoved ? 'Item removed from cart' : 'Item quantity updated',
|
|
106
|
+
success: true
|
|
107
|
+
};
|
|
108
|
+
};
|
|
109
|
+
|
|
110
|
+
//# sourceMappingURL=updateItem.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/collections/carts/operations/updateItem.ts"],"sourcesContent":["import type { CartItemData, CartOperationResult, UpdateItemArgs } from './types.js'\n\nimport { createRequestWithSecret } from './createRequestWithSecret.js'\nimport { isNumericOperator } from './types.js'\n\n/**\n * Updates an item in the cart using MongoDB-style operators.\n *\n * This handler is isolated and can be used from:\n * - Custom endpoints\n * - Local API operations\n * - Hooks\n *\n * @example\n * ```ts\n * // Set quantity to 5\n * const result = await updateItem({\n * payload,\n * cartsSlug: 'carts',\n * cartID: '123',\n * itemID: 'item-row-id',\n * quantity: 5,\n * })\n *\n * // Increment by 1\n * const result = await updateItem({\n * payload,\n * cartsSlug: 'carts',\n * cartID: '123',\n * itemID: 'item-row-id',\n * quantity: { $inc: 1 },\n * })\n *\n * // Decrement by 2\n * const result = await updateItem({\n * payload,\n * cartsSlug: 'carts',\n * cartID: '123',\n * itemID: 'item-row-id',\n * quantity: { $inc: -2 },\n * })\n * ```\n */\nexport const updateItem = async (args: UpdateItemArgs): Promise<CartOperationResult> => {\n const { cartID, cartsSlug, itemID, payload, quantity, removeOnZero = true, req, secret } = args\n\n // Inject secret into request context for access control\n const reqWithSecret = createRequestWithSecret(req, secret)\n\n const cart = await payload.findByID({\n id: cartID,\n collection: cartsSlug,\n depth: 0,\n overrideAccess: false,\n req: reqWithSecret,\n })\n\n if (!cart) {\n return {\n cart: null,\n message: `Cart with ID ${cartID} not found`,\n success: false,\n }\n }\n\n const existingItems: CartItemData[] = (cart.items as CartItemData[]) || []\n\n // Find the item by its row ID\n const itemIndex = existingItems.findIndex((item) => item.id === itemID)\n\n if (itemIndex === -1) {\n return {\n cart,\n message: `Item with ID ${itemID} not found in cart`,\n success: false,\n }\n }\n\n const updatedItems = [...existingItems]\n const existingItem = updatedItems[itemIndex]!\n const currentQuantity = existingItem.quantity\n\n // Calculate new quantity based on operator or direct value\n let newQuantity: number\n if (isNumericOperator(quantity)) {\n // $inc operator: add to current value\n newQuantity = currentQuantity + quantity.$inc\n } else {\n // Direct value: set to this value\n newQuantity = quantity\n }\n\n if (newQuantity <= 0 && removeOnZero) {\n // Remove the item if quantity reaches 0 or below\n updatedItems.splice(itemIndex, 1)\n } else {\n // Update the quantity (minimum 1 if not removing on zero)\n updatedItems[itemIndex] = {\n ...existingItem,\n quantity: removeOnZero ? newQuantity : Math.max(1, newQuantity),\n }\n }\n\n const updatedCart = await payload.update({\n id: cartID,\n collection: cartsSlug,\n data: {\n items: updatedItems,\n },\n depth: 0,\n overrideAccess: false,\n req: reqWithSecret,\n })\n\n const wasRemoved = newQuantity <= 0 && removeOnZero\n\n return {\n cart: updatedCart,\n message: wasRemoved ? 'Item removed from cart' : 'Item quantity updated',\n success: true,\n }\n}\n"],"names":["createRequestWithSecret","isNumericOperator","updateItem","args","cartID","cartsSlug","itemID","payload","quantity","removeOnZero","req","secret","reqWithSecret","cart","findByID","id","collection","depth","overrideAccess","message","success","existingItems","items","itemIndex","findIndex","item","updatedItems","existingItem","currentQuantity","newQuantity","$inc","splice","Math","max","updatedCart","update","data","wasRemoved"],"mappings":"AAEA,SAASA,uBAAuB,QAAQ,+BAA8B;AACtE,SAASC,iBAAiB,QAAQ,aAAY;AAE9C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqCC,GACD,OAAO,MAAMC,aAAa,OAAOC;IAC/B,MAAM,EAAEC,MAAM,EAAEC,SAAS,EAAEC,MAAM,EAAEC,OAAO,EAAEC,QAAQ,EAAEC,eAAe,IAAI,EAAEC,GAAG,EAAEC,MAAM,EAAE,GAAGR;IAE3F,wDAAwD;IACxD,MAAMS,gBAAgBZ,wBAAwBU,KAAKC;IAEnD,MAAME,OAAO,MAAMN,QAAQO,QAAQ,CAAC;QAClCC,IAAIX;QACJY,YAAYX;QACZY,OAAO;QACPC,gBAAgB;QAChBR,KAAKE;IACP;IAEA,IAAI,CAACC,MAAM;QACT,OAAO;YACLA,MAAM;YACNM,SAAS,CAAC,aAAa,EAAEf,OAAO,UAAU,CAAC;YAC3CgB,SAAS;QACX;IACF;IAEA,MAAMC,gBAAgC,AAACR,KAAKS,KAAK,IAAuB,EAAE;IAE1E,8BAA8B;IAC9B,MAAMC,YAAYF,cAAcG,SAAS,CAAC,CAACC,OAASA,KAAKV,EAAE,KAAKT;IAEhE,IAAIiB,cAAc,CAAC,GAAG;QACpB,OAAO;YACLV;YACAM,SAAS,CAAC,aAAa,EAAEb,OAAO,kBAAkB,CAAC;YACnDc,SAAS;QACX;IACF;IAEA,MAAMM,eAAe;WAAIL;KAAc;IACvC,MAAMM,eAAeD,YAAY,CAACH,UAAU;IAC5C,MAAMK,kBAAkBD,aAAanB,QAAQ;IAE7C,2DAA2D;IAC3D,IAAIqB;IACJ,IAAI5B,kBAAkBO,WAAW;QAC/B,sCAAsC;QACtCqB,cAAcD,kBAAkBpB,SAASsB,IAAI;IAC/C,OAAO;QACL,kCAAkC;QAClCD,cAAcrB;IAChB;IAEA,IAAIqB,eAAe,KAAKpB,cAAc;QACpC,iDAAiD;QACjDiB,aAAaK,MAAM,CAACR,WAAW;IACjC,OAAO;QACL,0DAA0D;QAC1DG,YAAY,CAACH,UAAU,GAAG;YACxB,GAAGI,YAAY;YACfnB,UAAUC,eAAeoB,cAAcG,KAAKC,GAAG,CAAC,GAAGJ;QACrD;IACF;IAEA,MAAMK,cAAc,MAAM3B,QAAQ4B,MAAM,CAAC;QACvCpB,IAAIX;QACJY,YAAYX;QACZ+B,MAAM;YACJd,OAAOI;QACT;QACAT,OAAO;QACPC,gBAAgB;QAChBR,KAAKE;IACP;IAEA,MAAMyB,aAAaR,eAAe,KAAKpB;IAEvC,OAAO;QACLI,MAAMqB;QACNf,SAASkB,aAAa,2BAA2B;QACjDjB,SAAS;IACX;AACF,EAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"statusBeforeRead.d.ts","sourceRoot":"","sources":["../../../src/collections/carts/statusBeforeRead.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAExC,eAAO,MAAM,gBAAgB,EAAE,SAiB9B,CAAA"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export const statusBeforeRead = ({ data })=>{
|
|
2
|
+
if (data?.purchasedAt) {
|
|
3
|
+
return 'purchased';
|
|
4
|
+
}
|
|
5
|
+
if (data?.createdAt) {
|
|
6
|
+
const timeNow = new Date().getTime();
|
|
7
|
+
const createdAt = new Date(data.createdAt).getTime();
|
|
8
|
+
const differenceToCheck = 7 * 24 * 60 * 60 * 1000 // 7 days
|
|
9
|
+
;
|
|
10
|
+
if (timeNow - createdAt < differenceToCheck) {
|
|
11
|
+
// If the cart was created within the last 7 days, it is considered 'active'
|
|
12
|
+
return 'active';
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
return 'abandoned';
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
//# sourceMappingURL=statusBeforeRead.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/collections/carts/statusBeforeRead.ts"],"sourcesContent":["import type { FieldHook } from 'payload'\n\nexport const statusBeforeRead: FieldHook = ({ data }) => {\n if (data?.purchasedAt) {\n return 'purchased'\n }\n\n if (data?.createdAt) {\n const timeNow = new Date().getTime()\n const createdAt = new Date(data.createdAt).getTime()\n const differenceToCheck = 7 * 24 * 60 * 60 * 1000 // 7 days\n\n if (timeNow - createdAt < differenceToCheck) {\n // If the cart was created within the last 7 days, it is considered 'active'\n return 'active'\n }\n }\n\n return 'abandoned'\n}\n"],"names":["statusBeforeRead","data","purchasedAt","createdAt","timeNow","Date","getTime","differenceToCheck"],"mappings":"AAEA,OAAO,MAAMA,mBAA8B,CAAC,EAAEC,IAAI,EAAE;IAClD,IAAIA,MAAMC,aAAa;QACrB,OAAO;IACT;IAEA,IAAID,MAAME,WAAW;QACnB,MAAMC,UAAU,IAAIC,OAAOC,OAAO;QAClC,MAAMH,YAAY,IAAIE,KAAKJ,KAAKE,SAAS,EAAEG,OAAO;QAClD,MAAMC,oBAAoB,IAAI,KAAK,KAAK,KAAK,KAAK,SAAS;;QAE3D,IAAIH,UAAUD,YAAYI,mBAAmB;YAC3C,4EAA4E;YAC5E,OAAO;QACT;IACF;IAEA,OAAO;AACT,EAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createOrdersCollection.d.ts","sourceRoot":"","sources":["../../../src/collections/orders/createOrdersCollection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAEtD,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AAO1E,KAAK,KAAK,GAAG;IACX,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE,sBAAsB,GAAG,SAAS,GAAG,iBAAiB,CAAC,CAAA;IAClF;;OAEG;IACH,aAAa,CAAC,EAAE,KAAK,EAAE,CAAA;IACvB,gBAAgB,CAAC,EAAE,gBAAgB,CAAA;IACnC;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB,CAAA;AAED,eAAO,MAAM,sBAAsB,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,gBAwLtD,CAAA"}
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
import { amountField } from '../../fields/amountField.js';
|
|
2
|
+
import { cartItemsField } from '../../fields/cartItemsField.js';
|
|
3
|
+
import { currencyField } from '../../fields/currencyField.js';
|
|
4
|
+
import { accessOR } from '../../utilities/accessComposition.js';
|
|
5
|
+
export const createOrdersCollection = (props)=>{
|
|
6
|
+
const { access, addressFields, currenciesConfig, customersSlug = 'users', enableVariants = false, productsSlug = 'products', transactionsSlug = 'transactions', variantsSlug = 'variants' } = props || {};
|
|
7
|
+
const fields = [
|
|
8
|
+
{
|
|
9
|
+
type: 'tabs',
|
|
10
|
+
tabs: [
|
|
11
|
+
{
|
|
12
|
+
fields: [
|
|
13
|
+
cartItemsField({
|
|
14
|
+
enableVariants,
|
|
15
|
+
overrides: {
|
|
16
|
+
name: 'items',
|
|
17
|
+
label: ({ t })=>// @ts-expect-error - translations are not typed in plugins yet
|
|
18
|
+
t('plugin-ecommerce:items'),
|
|
19
|
+
labels: {
|
|
20
|
+
plural: ({ t })=>// @ts-expect-error - translations are not typed in plugins yet
|
|
21
|
+
t('plugin-ecommerce:items'),
|
|
22
|
+
singular: ({ t })=>// @ts-expect-error - translations are not typed in plugins yet
|
|
23
|
+
t('plugin-ecommerce:item')
|
|
24
|
+
}
|
|
25
|
+
},
|
|
26
|
+
productsSlug,
|
|
27
|
+
variantsSlug
|
|
28
|
+
})
|
|
29
|
+
],
|
|
30
|
+
label: ({ t })=>// @ts-expect-error - translations are not typed in plugins yet
|
|
31
|
+
t('plugin-ecommerce:orderDetails')
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
fields: [
|
|
35
|
+
...addressFields ? [
|
|
36
|
+
{
|
|
37
|
+
name: 'shippingAddress',
|
|
38
|
+
type: 'group',
|
|
39
|
+
fields: addressFields,
|
|
40
|
+
label: ({ t })=>// @ts-expect-error - translations are not typed in plugins yet
|
|
41
|
+
t('plugin-ecommerce:shippingAddress')
|
|
42
|
+
}
|
|
43
|
+
] : []
|
|
44
|
+
],
|
|
45
|
+
label: ({ t })=>// @ts-expect-error - translations are not typed in plugins yet
|
|
46
|
+
t('plugin-ecommerce:shipping')
|
|
47
|
+
}
|
|
48
|
+
]
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
name: 'customer',
|
|
52
|
+
type: 'relationship',
|
|
53
|
+
admin: {
|
|
54
|
+
position: 'sidebar'
|
|
55
|
+
},
|
|
56
|
+
label: ({ t })=>// @ts-expect-error - translations are not typed in plugins yet
|
|
57
|
+
t('plugin-ecommerce:customer'),
|
|
58
|
+
relationTo: customersSlug
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
name: 'customerEmail',
|
|
62
|
+
type: 'email',
|
|
63
|
+
admin: {
|
|
64
|
+
position: 'sidebar'
|
|
65
|
+
},
|
|
66
|
+
label: ({ t })=>// @ts-expect-error - translations are not typed in plugins yet
|
|
67
|
+
t('plugin-ecommerce:customerEmail')
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
name: 'transactions',
|
|
71
|
+
type: 'relationship',
|
|
72
|
+
access: {
|
|
73
|
+
create: access.adminOnlyFieldAccess,
|
|
74
|
+
read: access.adminOnlyFieldAccess,
|
|
75
|
+
update: access.adminOnlyFieldAccess
|
|
76
|
+
},
|
|
77
|
+
admin: {
|
|
78
|
+
position: 'sidebar'
|
|
79
|
+
},
|
|
80
|
+
hasMany: true,
|
|
81
|
+
label: ({ t })=>// @ts-expect-error - translations are not typed in plugins yet
|
|
82
|
+
t('plugin-ecommerce:transactions'),
|
|
83
|
+
relationTo: transactionsSlug
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
name: 'status',
|
|
87
|
+
type: 'select',
|
|
88
|
+
admin: {
|
|
89
|
+
position: 'sidebar'
|
|
90
|
+
},
|
|
91
|
+
defaultValue: 'processing',
|
|
92
|
+
interfaceName: 'OrderStatus',
|
|
93
|
+
label: ({ t })=>// @ts-expect-error - translations are not typed in plugins yet
|
|
94
|
+
t('plugin-ecommerce:status'),
|
|
95
|
+
options: [
|
|
96
|
+
{
|
|
97
|
+
// @ts-expect-error - translations are not typed in plugins yet
|
|
98
|
+
label: ({ t })=>t('plugin-ecommerce:processing'),
|
|
99
|
+
value: 'processing'
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
// @ts-expect-error - translations are not typed in plugins yet
|
|
103
|
+
label: ({ t })=>t('plugin-ecommerce:completed'),
|
|
104
|
+
value: 'completed'
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
// @ts-expect-error - translations are not typed in plugins yet
|
|
108
|
+
label: ({ t })=>t('plugin-ecommerce:cancelled'),
|
|
109
|
+
value: 'cancelled'
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
// @ts-expect-error - translations are not typed in plugins yet
|
|
113
|
+
label: ({ t })=>t('plugin-ecommerce:refunded'),
|
|
114
|
+
value: 'refunded'
|
|
115
|
+
}
|
|
116
|
+
]
|
|
117
|
+
},
|
|
118
|
+
...currenciesConfig ? [
|
|
119
|
+
{
|
|
120
|
+
type: 'row',
|
|
121
|
+
admin: {
|
|
122
|
+
position: 'sidebar'
|
|
123
|
+
},
|
|
124
|
+
fields: [
|
|
125
|
+
amountField({
|
|
126
|
+
currenciesConfig
|
|
127
|
+
}),
|
|
128
|
+
currencyField({
|
|
129
|
+
currenciesConfig
|
|
130
|
+
})
|
|
131
|
+
]
|
|
132
|
+
}
|
|
133
|
+
] : []
|
|
134
|
+
];
|
|
135
|
+
const baseConfig = {
|
|
136
|
+
slug: 'orders',
|
|
137
|
+
access: {
|
|
138
|
+
create: access.isAdmin,
|
|
139
|
+
delete: access.isAdmin,
|
|
140
|
+
read: accessOR(access.isAdmin, access.isDocumentOwner),
|
|
141
|
+
update: access.isAdmin
|
|
142
|
+
},
|
|
143
|
+
admin: {
|
|
144
|
+
description: ({ t })=>// @ts-expect-error - translations are not typed in plugins yet
|
|
145
|
+
t('plugin-ecommerce:ordersCollectionDescription'),
|
|
146
|
+
group: 'Ecommerce',
|
|
147
|
+
useAsTitle: 'createdAt'
|
|
148
|
+
},
|
|
149
|
+
fields,
|
|
150
|
+
labels: {
|
|
151
|
+
plural: ({ t })=>// @ts-expect-error - translations are not typed in plugins yet
|
|
152
|
+
t('plugin-ecommerce:orders'),
|
|
153
|
+
singular: ({ t })=>// @ts-expect-error - translations are not typed in plugins yet
|
|
154
|
+
t('plugin-ecommerce:order')
|
|
155
|
+
},
|
|
156
|
+
timestamps: true
|
|
157
|
+
};
|
|
158
|
+
return {
|
|
159
|
+
...baseConfig
|
|
160
|
+
};
|
|
161
|
+
};
|
|
162
|
+
|
|
163
|
+
//# sourceMappingURL=createOrdersCollection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/collections/orders/createOrdersCollection.ts"],"sourcesContent":["import type { CollectionConfig, Field } from 'payload'\n\nimport type { AccessConfig, CurrenciesConfig } from '../../types/index.js'\n\nimport { amountField } from '../../fields/amountField.js'\nimport { cartItemsField } from '../../fields/cartItemsField.js'\nimport { currencyField } from '../../fields/currencyField.js'\nimport { accessOR } from '../../utilities/accessComposition.js'\n\ntype Props = {\n access: Pick<AccessConfig, 'adminOnlyFieldAccess' | 'isAdmin' | 'isDocumentOwner'>\n /**\n * Array of fields used for capturing the shipping address data.\n */\n addressFields?: Field[]\n currenciesConfig?: CurrenciesConfig\n /**\n * Slug of the customers collection, defaults to 'users'.\n */\n customersSlug?: string\n enableVariants?: boolean\n /**\n * Slug of the products collection, defaults to 'products'.\n */\n productsSlug?: string\n /**\n * Slug of the transactions collection, defaults to 'transactions'.\n */\n transactionsSlug?: string\n /**\n * Slug of the variants collection, defaults to 'variants'.\n */\n variantsSlug?: string\n}\n\nexport const createOrdersCollection: (props: Props) => CollectionConfig = (props) => {\n const {\n access,\n addressFields,\n currenciesConfig,\n customersSlug = 'users',\n enableVariants = false,\n productsSlug = 'products',\n transactionsSlug = 'transactions',\n variantsSlug = 'variants',\n } = props || {}\n\n const fields: Field[] = [\n {\n type: 'tabs',\n tabs: [\n {\n fields: [\n cartItemsField({\n enableVariants,\n overrides: {\n name: 'items',\n label: ({ t }) =>\n // @ts-expect-error - translations are not typed in plugins yet\n t('plugin-ecommerce:items'),\n labels: {\n plural: ({ t }) =>\n // @ts-expect-error - translations are not typed in plugins yet\n t('plugin-ecommerce:items'),\n singular: ({ t }) =>\n // @ts-expect-error - translations are not typed in plugins yet\n t('plugin-ecommerce:item'),\n },\n },\n productsSlug,\n variantsSlug,\n }),\n ],\n label: ({ t }) =>\n // @ts-expect-error - translations are not typed in plugins yet\n t('plugin-ecommerce:orderDetails'),\n },\n {\n fields: [\n ...(addressFields\n ? [\n {\n name: 'shippingAddress',\n type: 'group',\n fields: addressFields,\n label: ({ t }) =>\n // @ts-expect-error - translations are not typed in plugins yet\n t('plugin-ecommerce:shippingAddress'),\n } as Field,\n ]\n : []),\n ],\n label: ({ t }) =>\n // @ts-expect-error - translations are not typed in plugins yet\n t('plugin-ecommerce:shipping'),\n },\n ],\n },\n {\n name: 'customer',\n type: 'relationship',\n admin: {\n position: 'sidebar',\n },\n label: ({ t }) =>\n // @ts-expect-error - translations are not typed in plugins yet\n t('plugin-ecommerce:customer'),\n relationTo: customersSlug,\n },\n {\n name: 'customerEmail',\n type: 'email',\n admin: {\n position: 'sidebar',\n },\n label: ({ t }) =>\n // @ts-expect-error - translations are not typed in plugins yet\n t('plugin-ecommerce:customerEmail'),\n },\n {\n name: 'transactions',\n type: 'relationship',\n access: {\n create: access.adminOnlyFieldAccess,\n read: access.adminOnlyFieldAccess,\n update: access.adminOnlyFieldAccess,\n },\n admin: {\n position: 'sidebar',\n },\n hasMany: true,\n label: ({ t }) =>\n // @ts-expect-error - translations are not typed in plugins yet\n t('plugin-ecommerce:transactions'),\n relationTo: transactionsSlug,\n },\n {\n name: 'status',\n type: 'select',\n admin: {\n position: 'sidebar',\n },\n defaultValue: 'processing',\n interfaceName: 'OrderStatus',\n label: ({ t }) =>\n // @ts-expect-error - translations are not typed in plugins yet\n t('plugin-ecommerce:status'),\n options: [\n {\n // @ts-expect-error - translations are not typed in plugins yet\n label: ({ t }) => t('plugin-ecommerce:processing'),\n value: 'processing',\n },\n {\n // @ts-expect-error - translations are not typed in plugins yet\n label: ({ t }) => t('plugin-ecommerce:completed'),\n value: 'completed',\n },\n {\n // @ts-expect-error - translations are not typed in plugins yet\n label: ({ t }) => t('plugin-ecommerce:cancelled'),\n value: 'cancelled',\n },\n {\n // @ts-expect-error - translations are not typed in plugins yet\n label: ({ t }) => t('plugin-ecommerce:refunded'),\n value: 'refunded',\n },\n ],\n },\n\n ...(currenciesConfig\n ? [\n {\n type: 'row',\n admin: {\n position: 'sidebar',\n },\n fields: [\n amountField({\n currenciesConfig,\n }),\n currencyField({\n currenciesConfig,\n }),\n ],\n } as Field,\n ]\n : []),\n ]\n\n const baseConfig: CollectionConfig = {\n slug: 'orders',\n access: {\n create: access.isAdmin,\n delete: access.isAdmin,\n read: accessOR(access.isAdmin, access.isDocumentOwner),\n update: access.isAdmin,\n },\n admin: {\n description: ({ t }) =>\n // @ts-expect-error - translations are not typed in plugins yet\n t('plugin-ecommerce:ordersCollectionDescription'),\n group: 'Ecommerce',\n useAsTitle: 'createdAt',\n },\n fields,\n labels: {\n plural: ({ t }) =>\n // @ts-expect-error - translations are not typed in plugins yet\n t('plugin-ecommerce:orders'),\n singular: ({ t }) =>\n // @ts-expect-error - translations are not typed in plugins yet\n t('plugin-ecommerce:order'),\n },\n timestamps: true,\n }\n\n return { ...baseConfig }\n}\n"],"names":["amountField","cartItemsField","currencyField","accessOR","createOrdersCollection","props","access","addressFields","currenciesConfig","customersSlug","enableVariants","productsSlug","transactionsSlug","variantsSlug","fields","type","tabs","overrides","name","label","t","labels","plural","singular","admin","position","relationTo","create","adminOnlyFieldAccess","read","update","hasMany","defaultValue","interfaceName","options","value","baseConfig","slug","isAdmin","delete","isDocumentOwner","description","group","useAsTitle","timestamps"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createProductsCollection.d.ts","sourceRoot":"","sources":["../../../src/collections/products/createProductsCollection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAE/C,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAM3F,KAAK,KAAK,GAAG;IACX,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE,wBAAwB,GAAG,SAAS,CAAC,CAAA;IAChE,gBAAgB,EAAE,gBAAgB,CAAA;IAClC,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,GAAG,eAAe,CAAA;IACrC;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAC1B,CAAA;AAED,eAAO,MAAM,wBAAwB,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,gBA2DxD,CAAA"}
|