@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,62 @@
|
|
|
1
|
+
import { inventoryField } from '../../fields/inventoryField.js';
|
|
2
|
+
import { pricesField } from '../../fields/pricesField.js';
|
|
3
|
+
import { variantsFields } from '../../fields/variantsFields.js';
|
|
4
|
+
export const createProductsCollection = (props)=>{
|
|
5
|
+
const { access, currenciesConfig, enableVariants = false, inventory = true, variantsSlug = 'variants', variantTypesSlug = 'variantTypes' } = props || {};
|
|
6
|
+
const fields = [
|
|
7
|
+
...inventory ? [
|
|
8
|
+
inventoryField({
|
|
9
|
+
overrides: {
|
|
10
|
+
admin: {
|
|
11
|
+
condition: ({ enableVariants })=>!enableVariants
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
})
|
|
15
|
+
] : [],
|
|
16
|
+
...enableVariants ? variantsFields({
|
|
17
|
+
variantsSlug,
|
|
18
|
+
variantTypesSlug
|
|
19
|
+
}) : [],
|
|
20
|
+
...currenciesConfig ? [
|
|
21
|
+
...pricesField({
|
|
22
|
+
currenciesConfig
|
|
23
|
+
})
|
|
24
|
+
] : []
|
|
25
|
+
];
|
|
26
|
+
const baseConfig = {
|
|
27
|
+
slug: 'products',
|
|
28
|
+
access: {
|
|
29
|
+
create: access.isAdmin,
|
|
30
|
+
delete: access.isAdmin,
|
|
31
|
+
read: access.adminOrPublishedStatus,
|
|
32
|
+
update: access.isAdmin
|
|
33
|
+
},
|
|
34
|
+
admin: {
|
|
35
|
+
defaultColumns: [
|
|
36
|
+
...currenciesConfig ? [
|
|
37
|
+
'prices'
|
|
38
|
+
] : [],
|
|
39
|
+
...enableVariants ? [
|
|
40
|
+
'variants'
|
|
41
|
+
] : []
|
|
42
|
+
],
|
|
43
|
+
group: 'Ecommerce'
|
|
44
|
+
},
|
|
45
|
+
fields,
|
|
46
|
+
labels: {
|
|
47
|
+
plural: ({ t })=>// @ts-expect-error - translations are not typed in plugins yet
|
|
48
|
+
t('plugin-ecommerce:products'),
|
|
49
|
+
singular: ({ t })=>// @ts-expect-error - translations are not typed in plugins yet
|
|
50
|
+
t('plugin-ecommerce:product')
|
|
51
|
+
},
|
|
52
|
+
trash: true,
|
|
53
|
+
versions: {
|
|
54
|
+
drafts: {
|
|
55
|
+
autosave: true
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
return baseConfig;
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
//# sourceMappingURL=createProductsCollection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/collections/products/createProductsCollection.ts"],"sourcesContent":["import type { CollectionConfig } from 'payload'\n\nimport type { AccessConfig, CurrenciesConfig, InventoryConfig } from '../../types/index.js'\n\nimport { inventoryField } from '../../fields/inventoryField.js'\nimport { pricesField } from '../../fields/pricesField.js'\nimport { variantsFields } from '../../fields/variantsFields.js'\n\ntype Props = {\n access: Pick<AccessConfig, 'adminOrPublishedStatus' | 'isAdmin'>\n currenciesConfig: CurrenciesConfig\n enableVariants?: boolean\n /**\n * Adds in an inventory field to the product and its variants. This is useful for tracking inventory levels.\n * Defaults to true.\n */\n inventory?: boolean | InventoryConfig\n /**\n * Slug of the variants collection, defaults to 'variants'.\n */\n variantsSlug?: string\n /**\n * Slug of the variant types collection, defaults to 'variantTypes'.\n */\n variantTypesSlug?: string\n}\n\nexport const createProductsCollection: (props: Props) => CollectionConfig = (props) => {\n const {\n access,\n currenciesConfig,\n enableVariants = false,\n inventory = true,\n variantsSlug = 'variants',\n variantTypesSlug = 'variantTypes',\n } = props || {}\n\n const fields = [\n ...(inventory\n ? [\n inventoryField({\n overrides: {\n admin: {\n condition: ({ enableVariants }) => !enableVariants,\n },\n },\n }),\n ]\n : []),\n ...(enableVariants ? variantsFields({ variantsSlug, variantTypesSlug }) : []),\n ...(currenciesConfig ? [...pricesField({ currenciesConfig })] : []),\n ]\n\n const baseConfig: CollectionConfig = {\n slug: 'products',\n access: {\n create: access.isAdmin,\n delete: access.isAdmin,\n read: access.adminOrPublishedStatus,\n update: access.isAdmin,\n },\n admin: {\n defaultColumns: [\n ...(currenciesConfig ? ['prices'] : []),\n ...(enableVariants ? ['variants'] : []),\n ],\n group: 'Ecommerce',\n },\n fields,\n labels: {\n plural: ({ t }) =>\n // @ts-expect-error - translations are not typed in plugins yet\n t('plugin-ecommerce:products'),\n singular: ({ t }) =>\n // @ts-expect-error - translations are not typed in plugins yet\n t('plugin-ecommerce:product'),\n },\n trash: true,\n versions: {\n drafts: {\n autosave: true,\n },\n },\n }\n\n return baseConfig\n}\n"],"names":["inventoryField","pricesField","variantsFields","createProductsCollection","props","access","currenciesConfig","enableVariants","inventory","variantsSlug","variantTypesSlug","fields","overrides","admin","condition","baseConfig","slug","create","isAdmin","delete","read","adminOrPublishedStatus","update","defaultColumns","group","labels","plural","t","singular","trash","versions","drafts","autosave"],"mappings":"AAIA,SAASA,cAAc,QAAQ,iCAAgC;AAC/D,SAASC,WAAW,QAAQ,8BAA6B;AACzD,SAASC,cAAc,QAAQ,iCAAgC;AAqB/D,OAAO,MAAMC,2BAA+D,CAACC;IAC3E,MAAM,EACJC,MAAM,EACNC,gBAAgB,EAChBC,iBAAiB,KAAK,EACtBC,YAAY,IAAI,EAChBC,eAAe,UAAU,EACzBC,mBAAmB,cAAc,EAClC,GAAGN,SAAS,CAAC;IAEd,MAAMO,SAAS;WACTH,YACA;YACER,eAAe;gBACbY,WAAW;oBACTC,OAAO;wBACLC,WAAW,CAAC,EAAEP,cAAc,EAAE,GAAK,CAACA;oBACtC;gBACF;YACF;SACD,GACD,EAAE;WACFA,iBAAiBL,eAAe;YAAEO;YAAcC;QAAiB,KAAK,EAAE;WACxEJ,mBAAmB;eAAIL,YAAY;gBAAEK;YAAiB;SAAG,GAAG,EAAE;KACnE;IAED,MAAMS,aAA+B;QACnCC,MAAM;QACNX,QAAQ;YACNY,QAAQZ,OAAOa,OAAO;YACtBC,QAAQd,OAAOa,OAAO;YACtBE,MAAMf,OAAOgB,sBAAsB;YACnCC,QAAQjB,OAAOa,OAAO;QACxB;QACAL,OAAO;YACLU,gBAAgB;mBACVjB,mBAAmB;oBAAC;iBAAS,GAAG,EAAE;mBAClCC,iBAAiB;oBAAC;iBAAW,GAAG,EAAE;aACvC;YACDiB,OAAO;QACT;QACAb;QACAc,QAAQ;YACNC,QAAQ,CAAC,EAAEC,CAAC,EAAE,GACZ,+DAA+D;gBAC/DA,EAAE;YACJC,UAAU,CAAC,EAAED,CAAC,EAAE,GACd,+DAA+D;gBAC/DA,EAAE;QACN;QACAE,OAAO;QACPC,UAAU;YACRC,QAAQ;gBACNC,UAAU;YACZ;QACF;IACF;IAEA,OAAOjB;AACT,EAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createTransactionsCollection.d.ts","sourceRoot":"","sources":["../../../src/collections/transactions/createTransactionsCollection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAEtD,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAO1F,KAAK,KAAK,GAAG;IACX,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE,SAAS,CAAC,CAAA;IACrC;;OAEG;IACH,aAAa,CAAC,EAAE,KAAK,EAAE,CAAA;IACvB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,gBAAgB,CAAC,EAAE,gBAAgB,CAAA;IACnC;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB;;OAEG;IACH,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,cAAc,CAAC,EAAE,cAAc,EAAE,CAAA;IACjC;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB,CAAA;AAED,eAAO,MAAM,4BAA4B,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,gBA+K5D,CAAA"}
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
import { amountField } from '../../fields/amountField.js';
|
|
2
|
+
import { cartItemsField } from '../../fields/cartItemsField.js';
|
|
3
|
+
import { currencyField } from '../../fields/currencyField.js';
|
|
4
|
+
import { statusField } from '../../fields/statusField.js';
|
|
5
|
+
export const createTransactionsCollection = (props)=>{
|
|
6
|
+
const { access, addressFields, cartsSlug = 'carts', currenciesConfig, customersSlug = 'users', enableVariants = false, ordersSlug = 'orders', paymentMethods, productsSlug = 'products', 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
|
+
...paymentMethods?.length && paymentMethods.length > 0 ? [
|
|
30
|
+
{
|
|
31
|
+
name: 'paymentMethod',
|
|
32
|
+
type: 'select',
|
|
33
|
+
label: ({ t })=>// @ts-expect-error - translations are not typed in plugins yet
|
|
34
|
+
t('plugin-ecommerce:paymentMethod'),
|
|
35
|
+
options: paymentMethods.map((method)=>({
|
|
36
|
+
label: method.label ?? method.name,
|
|
37
|
+
value: method.name
|
|
38
|
+
}))
|
|
39
|
+
},
|
|
40
|
+
...paymentMethods.map((method)=>method.group) || []
|
|
41
|
+
] : []
|
|
42
|
+
],
|
|
43
|
+
label: ({ t })=>// @ts-expect-error - translations are not typed in plugins yet
|
|
44
|
+
t('plugin-ecommerce:transactionDetails')
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
fields: [
|
|
48
|
+
...addressFields ? [
|
|
49
|
+
{
|
|
50
|
+
name: 'billingAddress',
|
|
51
|
+
type: 'group',
|
|
52
|
+
fields: addressFields,
|
|
53
|
+
label: ({ t })=>// @ts-expect-error - translations are not typed in plugins yet
|
|
54
|
+
t('plugin-ecommerce:billingAddress')
|
|
55
|
+
}
|
|
56
|
+
] : []
|
|
57
|
+
],
|
|
58
|
+
label: ({ t })=>// @ts-expect-error - translations are not typed in plugins yet
|
|
59
|
+
t('plugin-ecommerce:billing')
|
|
60
|
+
}
|
|
61
|
+
]
|
|
62
|
+
},
|
|
63
|
+
statusField({
|
|
64
|
+
overrides: {
|
|
65
|
+
admin: {
|
|
66
|
+
position: 'sidebar'
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}),
|
|
70
|
+
{
|
|
71
|
+
name: 'customer',
|
|
72
|
+
type: 'relationship',
|
|
73
|
+
admin: {
|
|
74
|
+
position: 'sidebar'
|
|
75
|
+
},
|
|
76
|
+
label: ({ t })=>// @ts-expect-error - translations are not typed in plugins yet
|
|
77
|
+
t('plugin-ecommerce:customer'),
|
|
78
|
+
relationTo: customersSlug
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
name: 'customerEmail',
|
|
82
|
+
type: 'email',
|
|
83
|
+
admin: {
|
|
84
|
+
position: 'sidebar'
|
|
85
|
+
},
|
|
86
|
+
label: ({ t })=>// @ts-expect-error - translations are not typed in plugins yet
|
|
87
|
+
t('plugin-ecommerce:customerEmail')
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
name: 'order',
|
|
91
|
+
type: 'relationship',
|
|
92
|
+
admin: {
|
|
93
|
+
position: 'sidebar'
|
|
94
|
+
},
|
|
95
|
+
label: ({ t })=>// @ts-expect-error - translations are not typed in plugins yet
|
|
96
|
+
t('plugin-ecommerce:order'),
|
|
97
|
+
relationTo: ordersSlug
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
name: 'cart',
|
|
101
|
+
type: 'relationship',
|
|
102
|
+
admin: {
|
|
103
|
+
position: 'sidebar'
|
|
104
|
+
},
|
|
105
|
+
relationTo: cartsSlug
|
|
106
|
+
},
|
|
107
|
+
...currenciesConfig ? [
|
|
108
|
+
{
|
|
109
|
+
type: 'row',
|
|
110
|
+
admin: {
|
|
111
|
+
position: 'sidebar'
|
|
112
|
+
},
|
|
113
|
+
fields: [
|
|
114
|
+
amountField({
|
|
115
|
+
currenciesConfig
|
|
116
|
+
}),
|
|
117
|
+
currencyField({
|
|
118
|
+
currenciesConfig
|
|
119
|
+
})
|
|
120
|
+
]
|
|
121
|
+
}
|
|
122
|
+
] : []
|
|
123
|
+
];
|
|
124
|
+
const baseConfig = {
|
|
125
|
+
slug: 'transactions',
|
|
126
|
+
access: {
|
|
127
|
+
create: access.isAdmin,
|
|
128
|
+
delete: access.isAdmin,
|
|
129
|
+
read: access.isAdmin,
|
|
130
|
+
update: access.isAdmin
|
|
131
|
+
},
|
|
132
|
+
admin: {
|
|
133
|
+
defaultColumns: [
|
|
134
|
+
'createdAt',
|
|
135
|
+
'customer',
|
|
136
|
+
'order',
|
|
137
|
+
'amount',
|
|
138
|
+
'status'
|
|
139
|
+
],
|
|
140
|
+
description: ({ t })=>// @ts-expect-error - translations are not typed in plugins yet
|
|
141
|
+
t('plugin-ecommerce:transactionsCollectionDescription'),
|
|
142
|
+
group: 'Ecommerce'
|
|
143
|
+
},
|
|
144
|
+
fields,
|
|
145
|
+
labels: {
|
|
146
|
+
plural: ({ t })=>// @ts-expect-error - translations are not typed in plugins yet
|
|
147
|
+
t('plugin-ecommerce:transactions'),
|
|
148
|
+
singular: ({ t })=>// @ts-expect-error - translations are not typed in plugins yet
|
|
149
|
+
t('plugin-ecommerce:transaction')
|
|
150
|
+
}
|
|
151
|
+
};
|
|
152
|
+
return {
|
|
153
|
+
...baseConfig
|
|
154
|
+
};
|
|
155
|
+
};
|
|
156
|
+
|
|
157
|
+
//# sourceMappingURL=createTransactionsCollection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/collections/transactions/createTransactionsCollection.ts"],"sourcesContent":["import type { CollectionConfig, Field } from 'payload'\n\nimport type { AccessConfig, CurrenciesConfig, PaymentAdapter } from '../../types/index.js'\n\nimport { amountField } from '../../fields/amountField.js'\nimport { cartItemsField } from '../../fields/cartItemsField.js'\nimport { currencyField } from '../../fields/currencyField.js'\nimport { statusField } from '../../fields/statusField.js'\n\ntype Props = {\n access: Pick<AccessConfig, 'isAdmin'>\n /**\n * Array of fields used for capturing the billing address.\n */\n addressFields?: Field[]\n /**\n * Slug of the carts collection, defaults to 'carts'.\n */\n cartsSlug?: string\n currenciesConfig?: CurrenciesConfig\n /**\n * Slug of the customers collection, defaults to 'users'.\n */\n customersSlug?: string\n /**\n * Enable variants in the transactions collection.\n */\n enableVariants?: boolean\n /**\n * Slug of the orders collection, defaults to 'orders'.\n */\n ordersSlug?: string\n paymentMethods?: PaymentAdapter[]\n /**\n * Slug of the products collection, defaults to 'products'.\n */\n productsSlug?: string\n /**\n * Slug of the variants collection, defaults to 'variants'.\n */\n variantsSlug?: string\n}\n\nexport const createTransactionsCollection: (props: Props) => CollectionConfig = (props) => {\n const {\n access,\n addressFields,\n cartsSlug = 'carts',\n currenciesConfig,\n customersSlug = 'users',\n enableVariants = false,\n ordersSlug = 'orders',\n paymentMethods,\n productsSlug = 'products',\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 ...(paymentMethods?.length && paymentMethods.length > 0\n ? [\n {\n name: 'paymentMethod',\n type: 'select',\n label: ({ t }) =>\n // @ts-expect-error - translations are not typed in plugins yet\n t('plugin-ecommerce:paymentMethod'),\n options: paymentMethods.map((method) => ({\n label: method.label ?? method.name,\n value: method.name,\n })),\n } as Field,\n ...(paymentMethods.map((method) => method.group) || []),\n ]\n : []),\n ],\n label: ({ t }) =>\n // @ts-expect-error - translations are not typed in plugins yet\n t('plugin-ecommerce:transactionDetails'),\n },\n {\n fields: [\n ...(addressFields\n ? [\n {\n name: 'billingAddress',\n type: 'group',\n fields: addressFields,\n label: ({ t }) =>\n // @ts-expect-error - translations are not typed in plugins yet\n t('plugin-ecommerce:billingAddress'),\n } as Field,\n ]\n : []),\n ],\n label: ({ t }) =>\n // @ts-expect-error - translations are not typed in plugins yet\n t('plugin-ecommerce:billing'),\n },\n ],\n },\n statusField({\n overrides: {\n admin: {\n position: 'sidebar',\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: 'order',\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:order'),\n relationTo: ordersSlug,\n },\n {\n name: 'cart',\n type: 'relationship',\n admin: {\n position: 'sidebar',\n },\n relationTo: cartsSlug,\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: 'transactions',\n access: {\n create: access.isAdmin,\n delete: access.isAdmin,\n read: access.isAdmin,\n update: access.isAdmin,\n },\n admin: {\n defaultColumns: ['createdAt', 'customer', 'order', 'amount', 'status'],\n description: ({ t }) =>\n // @ts-expect-error - translations are not typed in plugins yet\n t('plugin-ecommerce:transactionsCollectionDescription'),\n group: 'Ecommerce',\n },\n fields,\n labels: {\n plural: ({ t }) =>\n // @ts-expect-error - translations are not typed in plugins yet\n t('plugin-ecommerce:transactions'),\n singular: ({ t }) =>\n // @ts-expect-error - translations are not typed in plugins yet\n t('plugin-ecommerce:transaction'),\n },\n }\n\n return { ...baseConfig }\n}\n"],"names":["amountField","cartItemsField","currencyField","statusField","createTransactionsCollection","props","access","addressFields","cartsSlug","currenciesConfig","customersSlug","enableVariants","ordersSlug","paymentMethods","productsSlug","variantsSlug","fields","type","tabs","overrides","name","label","t","labels","plural","singular","length","options","map","method","value","group","admin","position","relationTo","baseConfig","slug","create","isAdmin","delete","read","update","defaultColumns","description"],"mappings":"AAIA,SAASA,WAAW,QAAQ,8BAA6B;AACzD,SAASC,cAAc,QAAQ,iCAAgC;AAC/D,SAASC,aAAa,QAAQ,gCAA+B;AAC7D,SAASC,WAAW,QAAQ,8BAA6B;AAoCzD,OAAO,MAAMC,+BAAmE,CAACC;IAC/E,MAAM,EACJC,MAAM,EACNC,aAAa,EACbC,YAAY,OAAO,EACnBC,gBAAgB,EAChBC,gBAAgB,OAAO,EACvBC,iBAAiB,KAAK,EACtBC,aAAa,QAAQ,EACrBC,cAAc,EACdC,eAAe,UAAU,EACzBC,eAAe,UAAU,EAC1B,GAAGV,SAAS,CAAC;IAEd,MAAMW,SAAkB;QACtB;YACEC,MAAM;YACNC,MAAM;gBACJ;oBACEF,QAAQ;wBACNf,eAAe;4BACbU;4BACAQ,WAAW;gCACTC,MAAM;gCACNC,OAAO,CAAC,EAAEC,CAAC,EAAE,GACX,+DAA+D;oCAC/DA,EAAE;gCACJC,QAAQ;oCACNC,QAAQ,CAAC,EAAEF,CAAC,EAAE,GACZ,+DAA+D;wCAC/DA,EAAE;oCACJG,UAAU,CAAC,EAAEH,CAAC,EAAE,GACd,+DAA+D;wCAC/DA,EAAE;gCACN;4BACF;4BACAR;4BACAC;wBACF;2BACIF,gBAAgBa,UAAUb,eAAea,MAAM,GAAG,IAClD;4BACE;gCACEN,MAAM;gCACNH,MAAM;gCACNI,OAAO,CAAC,EAAEC,CAAC,EAAE,GACX,+DAA+D;oCAC/DA,EAAE;gCACJK,SAASd,eAAee,GAAG,CAAC,CAACC,SAAY,CAAA;wCACvCR,OAAOQ,OAAOR,KAAK,IAAIQ,OAAOT,IAAI;wCAClCU,OAAOD,OAAOT,IAAI;oCACpB,CAAA;4BACF;+BACIP,eAAee,GAAG,CAAC,CAACC,SAAWA,OAAOE,KAAK,KAAK,EAAE;yBACvD,GACD,EAAE;qBACP;oBACDV,OAAO,CAAC,EAAEC,CAAC,EAAE,GACX,+DAA+D;wBAC/DA,EAAE;gBACN;gBACA;oBACEN,QAAQ;2BACFT,gBACA;4BACE;gCACEa,MAAM;gCACNH,MAAM;gCACND,QAAQT;gCACRc,OAAO,CAAC,EAAEC,CAAC,EAAE,GACX,+DAA+D;oCAC/DA,EAAE;4BACN;yBACD,GACD,EAAE;qBACP;oBACDD,OAAO,CAAC,EAAEC,CAAC,EAAE,GACX,+DAA+D;wBAC/DA,EAAE;gBACN;aACD;QACH;QACAnB,YAAY;YACVgB,WAAW;gBACTa,OAAO;oBACLC,UAAU;gBACZ;YACF;QACF;QACA;YACEb,MAAM;YACNH,MAAM;YACNe,OAAO;gBACLC,UAAU;YACZ;YACAZ,OAAO,CAAC,EAAEC,CAAC,EAAE,GACX,+DAA+D;gBAC/DA,EAAE;YACJY,YAAYxB;QACd;QACA;YACEU,MAAM;YACNH,MAAM;YACNe,OAAO;gBACLC,UAAU;YACZ;YACAZ,OAAO,CAAC,EAAEC,CAAC,EAAE,GACX,+DAA+D;gBAC/DA,EAAE;QACN;QACA;YACEF,MAAM;YACNH,MAAM;YACNe,OAAO;gBACLC,UAAU;YACZ;YACAZ,OAAO,CAAC,EAAEC,CAAC,EAAE,GACX,+DAA+D;gBAC/DA,EAAE;YACJY,YAAYtB;QACd;QACA;YACEQ,MAAM;YACNH,MAAM;YACNe,OAAO;gBACLC,UAAU;YACZ;YACAC,YAAY1B;QACd;WACIC,mBACA;YACE;gBACEQ,MAAM;gBACNe,OAAO;oBACLC,UAAU;gBACZ;gBACAjB,QAAQ;oBACNhB,YAAY;wBACVS;oBACF;oBACAP,cAAc;wBACZO;oBACF;iBACD;YACH;SACD,GACD,EAAE;KACP;IAED,MAAM0B,aAA+B;QACnCC,MAAM;QACN9B,QAAQ;YACN+B,QAAQ/B,OAAOgC,OAAO;YACtBC,QAAQjC,OAAOgC,OAAO;YACtBE,MAAMlC,OAAOgC,OAAO;YACpBG,QAAQnC,OAAOgC,OAAO;QACxB;QACAN,OAAO;YACLU,gBAAgB;gBAAC;gBAAa;gBAAY;gBAAS;gBAAU;aAAS;YACtEC,aAAa,CAAC,EAAErB,CAAC,EAAE,GACjB,+DAA+D;gBAC/DA,EAAE;YACJS,OAAO;QACT;QACAf;QACAO,QAAQ;YACNC,QAAQ,CAAC,EAAEF,CAAC,EAAE,GACZ,+DAA+D;gBAC/DA,EAAE;YACJG,UAAU,CAAC,EAAEH,CAAC,EAAE,GACd,+DAA+D;gBAC/DA,EAAE;QACN;IACF;IAEA,OAAO;QAAE,GAAGa,UAAU;IAAC;AACzB,EAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createVariantOptionsCollection.d.ts","sourceRoot":"","sources":["../../../src/collections/variants/createVariantOptionsCollection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAS,MAAM,SAAS,CAAA;AAEtD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAExD,KAAK,KAAK,GAAG;IACX,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE,SAAS,GAAG,cAAc,CAAC,CAAA;IACtD;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAC1B,CAAA;AAED,eAAO,MAAM,8BAA8B,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,gBAqD9D,CAAA"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
export const createVariantOptionsCollection = (props)=>{
|
|
2
|
+
const { access, variantTypesSlug = 'variantTypes' } = props || {};
|
|
3
|
+
const fields = [
|
|
4
|
+
{
|
|
5
|
+
name: 'variantType',
|
|
6
|
+
type: 'relationship',
|
|
7
|
+
admin: {
|
|
8
|
+
readOnly: true
|
|
9
|
+
},
|
|
10
|
+
relationTo: variantTypesSlug,
|
|
11
|
+
required: true
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
name: 'label',
|
|
15
|
+
type: 'text',
|
|
16
|
+
required: true
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
name: 'value',
|
|
20
|
+
type: 'text',
|
|
21
|
+
admin: {
|
|
22
|
+
description: 'should be defaulted or dynamic based on label'
|
|
23
|
+
},
|
|
24
|
+
required: true
|
|
25
|
+
}
|
|
26
|
+
];
|
|
27
|
+
const baseConfig = {
|
|
28
|
+
slug: 'variantOptions',
|
|
29
|
+
access: {
|
|
30
|
+
create: access.isAdmin,
|
|
31
|
+
delete: access.isAdmin,
|
|
32
|
+
read: access.publicAccess,
|
|
33
|
+
update: access.isAdmin
|
|
34
|
+
},
|
|
35
|
+
admin: {
|
|
36
|
+
group: false,
|
|
37
|
+
useAsTitle: 'label'
|
|
38
|
+
},
|
|
39
|
+
fields,
|
|
40
|
+
labels: {
|
|
41
|
+
plural: ({ t })=>// @ts-expect-error - translations are not typed in plugins yet
|
|
42
|
+
t('plugin-ecommerce:variantOptions'),
|
|
43
|
+
singular: ({ t })=>// @ts-expect-error - translations are not typed in plugins yet
|
|
44
|
+
t('plugin-ecommerce:variantOption')
|
|
45
|
+
},
|
|
46
|
+
trash: true
|
|
47
|
+
};
|
|
48
|
+
return {
|
|
49
|
+
...baseConfig
|
|
50
|
+
};
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
//# sourceMappingURL=createVariantOptionsCollection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/collections/variants/createVariantOptionsCollection.ts"],"sourcesContent":["import type { CollectionConfig, Field } from 'payload'\n\nimport type { AccessConfig } from '../../types/index.js'\n\ntype Props = {\n access: Pick<AccessConfig, 'isAdmin' | 'publicAccess'>\n /**\n * Slug of the variant types collection, defaults to 'variantTypes'.\n */\n variantTypesSlug?: string\n}\n\nexport const createVariantOptionsCollection: (props: Props) => CollectionConfig = (props) => {\n const { access, variantTypesSlug = 'variantTypes' } = props || {}\n\n const fields: Field[] = [\n {\n name: 'variantType',\n type: 'relationship',\n admin: {\n readOnly: true,\n },\n relationTo: variantTypesSlug,\n required: true,\n },\n {\n name: 'label',\n type: 'text',\n required: true,\n },\n {\n name: 'value',\n type: 'text',\n admin: {\n description: 'should be defaulted or dynamic based on label',\n },\n required: true,\n },\n ]\n\n const baseConfig: CollectionConfig = {\n slug: 'variantOptions',\n access: {\n create: access.isAdmin,\n delete: access.isAdmin,\n read: access.publicAccess,\n update: access.isAdmin,\n },\n admin: {\n group: false,\n useAsTitle: 'label',\n },\n fields,\n labels: {\n plural: ({ t }) =>\n // @ts-expect-error - translations are not typed in plugins yet\n t('plugin-ecommerce:variantOptions'),\n singular: ({ t }) =>\n // @ts-expect-error - translations are not typed in plugins yet\n t('plugin-ecommerce:variantOption'),\n },\n trash: true,\n }\n\n return { ...baseConfig }\n}\n"],"names":["createVariantOptionsCollection","props","access","variantTypesSlug","fields","name","type","admin","readOnly","relationTo","required","description","baseConfig","slug","create","isAdmin","delete","read","publicAccess","update","group","useAsTitle","labels","plural","t","singular","trash"],"mappings":"AAYA,OAAO,MAAMA,iCAAqE,CAACC;IACjF,MAAM,EAAEC,MAAM,EAAEC,mBAAmB,cAAc,EAAE,GAAGF,SAAS,CAAC;IAEhE,MAAMG,SAAkB;QACtB;YACEC,MAAM;YACNC,MAAM;YACNC,OAAO;gBACLC,UAAU;YACZ;YACAC,YAAYN;YACZO,UAAU;QACZ;QACA;YACEL,MAAM;YACNC,MAAM;YACNI,UAAU;QACZ;QACA;YACEL,MAAM;YACNC,MAAM;YACNC,OAAO;gBACLI,aAAa;YACf;YACAD,UAAU;QACZ;KACD;IAED,MAAME,aAA+B;QACnCC,MAAM;QACNX,QAAQ;YACNY,QAAQZ,OAAOa,OAAO;YACtBC,QAAQd,OAAOa,OAAO;YACtBE,MAAMf,OAAOgB,YAAY;YACzBC,QAAQjB,OAAOa,OAAO;QACxB;QACAR,OAAO;YACLa,OAAO;YACPC,YAAY;QACd;QACAjB;QACAkB,QAAQ;YACNC,QAAQ,CAAC,EAAEC,CAAC,EAAE,GACZ,+DAA+D;gBAC/DA,EAAE;YACJC,UAAU,CAAC,EAAED,CAAC,EAAE,GACd,+DAA+D;gBAC/DA,EAAE;QACN;QACAE,OAAO;IACT;IAEA,OAAO;QAAE,GAAGd,UAAU;IAAC;AACzB,EAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createVariantTypesCollection.d.ts","sourceRoot":"","sources":["../../../src/collections/variants/createVariantTypesCollection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAS,MAAM,SAAS,CAAA;AAEtD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAExD,KAAK,KAAK,GAAG;IACX,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE,SAAS,GAAG,cAAc,CAAC,CAAA;IACtD;;OAEG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAA;CAC5B,CAAA;AAED,eAAO,MAAM,4BAA4B,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,gBAiD5D,CAAA"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
export const createVariantTypesCollection = (props)=>{
|
|
2
|
+
const { access, variantOptionsSlug = 'variantOptions' } = props || {};
|
|
3
|
+
const fields = [
|
|
4
|
+
{
|
|
5
|
+
name: 'label',
|
|
6
|
+
type: 'text',
|
|
7
|
+
required: true
|
|
8
|
+
},
|
|
9
|
+
{
|
|
10
|
+
name: 'name',
|
|
11
|
+
type: 'text',
|
|
12
|
+
required: true
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
name: 'options',
|
|
16
|
+
type: 'join',
|
|
17
|
+
collection: variantOptionsSlug,
|
|
18
|
+
maxDepth: 2,
|
|
19
|
+
on: 'variantType',
|
|
20
|
+
orderable: true
|
|
21
|
+
}
|
|
22
|
+
];
|
|
23
|
+
const baseConfig = {
|
|
24
|
+
slug: 'variantTypes',
|
|
25
|
+
access: {
|
|
26
|
+
create: access.isAdmin,
|
|
27
|
+
delete: access.isAdmin,
|
|
28
|
+
read: access.publicAccess,
|
|
29
|
+
update: access.isAdmin
|
|
30
|
+
},
|
|
31
|
+
admin: {
|
|
32
|
+
group: false,
|
|
33
|
+
useAsTitle: 'label'
|
|
34
|
+
},
|
|
35
|
+
fields,
|
|
36
|
+
labels: {
|
|
37
|
+
plural: ({ t })=>// @ts-expect-error - translations are not typed in plugins yet
|
|
38
|
+
t('plugin-ecommerce:variantTypes'),
|
|
39
|
+
singular: ({ t })=>// @ts-expect-error - translations are not typed in plugins yet
|
|
40
|
+
t('plugin-ecommerce:variantType')
|
|
41
|
+
},
|
|
42
|
+
trash: true
|
|
43
|
+
};
|
|
44
|
+
return {
|
|
45
|
+
...baseConfig
|
|
46
|
+
};
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
//# sourceMappingURL=createVariantTypesCollection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/collections/variants/createVariantTypesCollection.ts"],"sourcesContent":["import type { CollectionConfig, Field } from 'payload'\n\nimport type { AccessConfig } from '../../types/index.js'\n\ntype Props = {\n access: Pick<AccessConfig, 'isAdmin' | 'publicAccess'>\n /**\n * Slug of the variant options collection, defaults to 'variantOptions'.\n */\n variantOptionsSlug?: string\n}\n\nexport const createVariantTypesCollection: (props: Props) => CollectionConfig = (props) => {\n const { access, variantOptionsSlug = 'variantOptions' } = props || {}\n\n const fields: Field[] = [\n {\n name: 'label',\n type: 'text',\n required: true,\n },\n {\n name: 'name',\n type: 'text',\n required: true,\n },\n {\n name: 'options',\n type: 'join',\n collection: variantOptionsSlug,\n maxDepth: 2,\n on: 'variantType',\n orderable: true,\n },\n ]\n\n const baseConfig: CollectionConfig = {\n slug: 'variantTypes',\n access: {\n create: access.isAdmin,\n delete: access.isAdmin,\n read: access.publicAccess,\n update: access.isAdmin,\n },\n admin: {\n group: false,\n useAsTitle: 'label',\n },\n fields,\n labels: {\n plural: ({ t }) =>\n // @ts-expect-error - translations are not typed in plugins yet\n t('plugin-ecommerce:variantTypes'),\n singular: ({ t }) =>\n // @ts-expect-error - translations are not typed in plugins yet\n t('plugin-ecommerce:variantType'),\n },\n trash: true,\n }\n\n return { ...baseConfig }\n}\n"],"names":["createVariantTypesCollection","props","access","variantOptionsSlug","fields","name","type","required","collection","maxDepth","on","orderable","baseConfig","slug","create","isAdmin","delete","read","publicAccess","update","admin","group","useAsTitle","labels","plural","t","singular","trash"],"mappings":"AAYA,OAAO,MAAMA,+BAAmE,CAACC;IAC/E,MAAM,EAAEC,MAAM,EAAEC,qBAAqB,gBAAgB,EAAE,GAAGF,SAAS,CAAC;IAEpE,MAAMG,SAAkB;QACtB;YACEC,MAAM;YACNC,MAAM;YACNC,UAAU;QACZ;QACA;YACEF,MAAM;YACNC,MAAM;YACNC,UAAU;QACZ;QACA;YACEF,MAAM;YACNC,MAAM;YACNE,YAAYL;YACZM,UAAU;YACVC,IAAI;YACJC,WAAW;QACb;KACD;IAED,MAAMC,aAA+B;QACnCC,MAAM;QACNX,QAAQ;YACNY,QAAQZ,OAAOa,OAAO;YACtBC,QAAQd,OAAOa,OAAO;YACtBE,MAAMf,OAAOgB,YAAY;YACzBC,QAAQjB,OAAOa,OAAO;QACxB;QACAK,OAAO;YACLC,OAAO;YACPC,YAAY;QACd;QACAlB;QACAmB,QAAQ;YACNC,QAAQ,CAAC,EAAEC,CAAC,EAAE,GACZ,+DAA+D;gBAC/DA,EAAE;YACJC,UAAU,CAAC,EAAED,CAAC,EAAE,GACd,+DAA+D;gBAC/DA,EAAE;QACN;QACAE,OAAO;IACT;IAEA,OAAO;QAAE,GAAGf,UAAU;IAAC;AACzB,EAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"beforeChange.d.ts","sourceRoot":"","sources":["../../../../../src/collections/variants/createVariantsCollection/hooks/beforeChange.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,SAAS,CAAA;AAEzD,KAAK,KAAK,GAAG;IACX,YAAY,EAAE,MAAM,CAAA;IACpB,kBAAkB,EAAE,MAAM,CAAA;CAC3B,CAAA;AAED,eAAO,MAAM,8BAA8B,EAAE,CAAC,IAAI,EAAE,KAAK,KAAK,0BA2C3D,CAAA"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
export const variantsCollectionBeforeChange = ({ productsSlug, variantOptionsSlug })=>async ({ data, req })=>{
|
|
2
|
+
if (data?.options?.length && data.options.length > 0) {
|
|
3
|
+
const titleArray = [];
|
|
4
|
+
const productID = data.product;
|
|
5
|
+
const product = await req.payload.findByID({
|
|
6
|
+
id: productID,
|
|
7
|
+
collection: productsSlug,
|
|
8
|
+
depth: 0,
|
|
9
|
+
select: {
|
|
10
|
+
title: true,
|
|
11
|
+
variantTypes: true
|
|
12
|
+
}
|
|
13
|
+
});
|
|
14
|
+
if (product.title && typeof product.title === 'string') {
|
|
15
|
+
titleArray.push(product.title);
|
|
16
|
+
}
|
|
17
|
+
for (const option of data.options){
|
|
18
|
+
const variantOption = await req.payload.findByID({
|
|
19
|
+
id: option,
|
|
20
|
+
collection: variantOptionsSlug,
|
|
21
|
+
depth: 0,
|
|
22
|
+
select: {
|
|
23
|
+
label: true
|
|
24
|
+
}
|
|
25
|
+
});
|
|
26
|
+
if (!variantOption) {
|
|
27
|
+
continue;
|
|
28
|
+
}
|
|
29
|
+
if (variantOption.label && typeof variantOption.label === 'string') {
|
|
30
|
+
titleArray.push(variantOption.label);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
data.title = titleArray.join(' — ');
|
|
34
|
+
}
|
|
35
|
+
return data;
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
//# sourceMappingURL=beforeChange.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../src/collections/variants/createVariantsCollection/hooks/beforeChange.ts"],"sourcesContent":["import type { CollectionBeforeChangeHook } from 'payload'\n\ntype Props = {\n productsSlug: string\n variantOptionsSlug: string\n}\n\nexport const variantsCollectionBeforeChange: (args: Props) => CollectionBeforeChangeHook =\n ({ productsSlug, variantOptionsSlug }) =>\n async ({ data, req }) => {\n if (data?.options?.length && data.options.length > 0) {\n const titleArray: string[] = []\n const productID = data.product\n const product = await req.payload.findByID({\n id: productID,\n collection: productsSlug,\n depth: 0,\n select: {\n title: true,\n variantTypes: true,\n },\n })\n\n if (product.title && typeof product.title === 'string') {\n titleArray.push(product.title)\n }\n\n for (const option of data.options) {\n const variantOption = await req.payload.findByID({\n id: option,\n collection: variantOptionsSlug,\n depth: 0,\n select: {\n label: true,\n },\n })\n\n if (!variantOption) {\n continue\n }\n\n if (variantOption.label && typeof variantOption.label === 'string') {\n titleArray.push(variantOption.label)\n }\n }\n\n data.title = titleArray.join(' — ')\n }\n\n return data\n }\n"],"names":["variantsCollectionBeforeChange","productsSlug","variantOptionsSlug","data","req","options","length","titleArray","productID","product","payload","findByID","id","collection","depth","select","title","variantTypes","push","option","variantOption","label","join"],"mappings":"AAOA,OAAO,MAAMA,iCACX,CAAC,EAAEC,YAAY,EAAEC,kBAAkB,EAAE,GACrC,OAAO,EAAEC,IAAI,EAAEC,GAAG,EAAE;QAClB,IAAID,MAAME,SAASC,UAAUH,KAAKE,OAAO,CAACC,MAAM,GAAG,GAAG;YACpD,MAAMC,aAAuB,EAAE;YAC/B,MAAMC,YAAYL,KAAKM,OAAO;YAC9B,MAAMA,UAAU,MAAML,IAAIM,OAAO,CAACC,QAAQ,CAAC;gBACzCC,IAAIJ;gBACJK,YAAYZ;gBACZa,OAAO;gBACPC,QAAQ;oBACNC,OAAO;oBACPC,cAAc;gBAChB;YACF;YAEA,IAAIR,QAAQO,KAAK,IAAI,OAAOP,QAAQO,KAAK,KAAK,UAAU;gBACtDT,WAAWW,IAAI,CAACT,QAAQO,KAAK;YAC/B;YAEA,KAAK,MAAMG,UAAUhB,KAAKE,OAAO,CAAE;gBACjC,MAAMe,gBAAgB,MAAMhB,IAAIM,OAAO,CAACC,QAAQ,CAAC;oBAC/CC,IAAIO;oBACJN,YAAYX;oBACZY,OAAO;oBACPC,QAAQ;wBACNM,OAAO;oBACT;gBACF;gBAEA,IAAI,CAACD,eAAe;oBAClB;gBACF;gBAEA,IAAIA,cAAcC,KAAK,IAAI,OAAOD,cAAcC,KAAK,KAAK,UAAU;oBAClEd,WAAWW,IAAI,CAACE,cAAcC,KAAK;gBACrC;YACF;YAEAlB,KAAKa,KAAK,GAAGT,WAAWe,IAAI,CAAC;QAC/B;QAEA,OAAOnB;IACT,EAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validateOptions.d.ts","sourceRoot":"","sources":["../../../../../src/collections/variants/createVariantsCollection/hooks/validateOptions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAEvC,KAAK,KAAK,GAAG;IACX,sBAAsB,CAAC,EAAE,MAAM,CAAA;CAChC,CAAA;AAED,eAAO,MAAM,eAAe,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,KAAK,QAoE9C,CAAA"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
export const validateOptions = (props)=>async (values, { data, req })=>{
|
|
2
|
+
const { productsCollectionSlug = 'products' } = props || {};
|
|
3
|
+
const { t } = req;
|
|
4
|
+
if (!values || values.length === 0) {
|
|
5
|
+
// @ts-expect-error - TODO: Fix types
|
|
6
|
+
return t('ecommerce:variantOptionsRequired');
|
|
7
|
+
}
|
|
8
|
+
const productID = data.product;
|
|
9
|
+
if (!productID) {
|
|
10
|
+
// @ts-expect-error - TODO: Fix types
|
|
11
|
+
return t('ecommerce:productRequired');
|
|
12
|
+
}
|
|
13
|
+
const product = await req.payload.findByID({
|
|
14
|
+
id: productID,
|
|
15
|
+
collection: productsCollectionSlug,
|
|
16
|
+
depth: 1,
|
|
17
|
+
joins: {
|
|
18
|
+
variants: {
|
|
19
|
+
where: {
|
|
20
|
+
deletedAt: {
|
|
21
|
+
exists: false
|
|
22
|
+
},
|
|
23
|
+
...data.id && {
|
|
24
|
+
id: {
|
|
25
|
+
not_equals: data.id
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
},
|
|
31
|
+
select: {
|
|
32
|
+
variants: true,
|
|
33
|
+
variantTypes: true
|
|
34
|
+
},
|
|
35
|
+
user: req.user
|
|
36
|
+
});
|
|
37
|
+
// @ts-expect-error - TODO: Fix types
|
|
38
|
+
const variants = product.variants?.docs ?? [];
|
|
39
|
+
// @ts-expect-error - TODO: Fix types
|
|
40
|
+
if (values.length < product?.variantTypes?.length) {
|
|
41
|
+
// @ts-expect-error - TODO: Fix types
|
|
42
|
+
return t('ecommerce:variantOptionsRequiredAll');
|
|
43
|
+
}
|
|
44
|
+
if (variants.length > 0) {
|
|
45
|
+
const existingOptions = [];
|
|
46
|
+
variants.forEach((variant)=>{
|
|
47
|
+
existingOptions.push(variant.options);
|
|
48
|
+
});
|
|
49
|
+
const exists = existingOptions.some((combo)=>combo.length === values.length && combo.every((val)=>values.includes(val)));
|
|
50
|
+
if (exists) {
|
|
51
|
+
// @ts-expect-error - TODO: Fix types
|
|
52
|
+
return t('ecommerce:variantOptionsAlreadyExists');
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
return true;
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
//# sourceMappingURL=validateOptions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../src/collections/variants/createVariantsCollection/hooks/validateOptions.ts"],"sourcesContent":["import type { Validate } from 'payload'\n\ntype Props = {\n productsCollectionSlug?: string\n}\n\nexport const validateOptions: (props?: Props) => Validate =\n (props) =>\n async (values, { data, req }) => {\n const { productsCollectionSlug = 'products' } = props || {}\n const { t } = req\n\n if (!values || values.length === 0) {\n // @ts-expect-error - TODO: Fix types\n return t('ecommerce:variantOptionsRequired')\n }\n\n const productID = data.product\n\n if (!productID) {\n // @ts-expect-error - TODO: Fix types\n return t('ecommerce:productRequired')\n }\n\n const product = await req.payload.findByID({\n id: productID,\n collection: productsCollectionSlug,\n depth: 1,\n joins: {\n variants: {\n where: {\n deletedAt: { exists: false },\n ...(data.id && {\n id: {\n not_equals: data.id, // exclude the current variant from the search\n },\n }),\n },\n },\n },\n select: {\n variants: true,\n variantTypes: true,\n },\n user: req.user,\n })\n\n // @ts-expect-error - TODO: Fix types\n const variants = product.variants?.docs ?? []\n\n // @ts-expect-error - TODO: Fix types\n if (values.length < product?.variantTypes?.length) {\n // @ts-expect-error - TODO: Fix types\n return t('ecommerce:variantOptionsRequiredAll')\n }\n\n if (variants.length > 0) {\n const existingOptions: (number | string)[][] = []\n\n variants.forEach((variant: any) => {\n existingOptions.push(variant.options)\n })\n\n const exists = existingOptions.some(\n (combo) => combo.length === values.length && combo.every((val) => values.includes(val)),\n )\n\n if (exists) {\n // @ts-expect-error - TODO: Fix types\n return t('ecommerce:variantOptionsAlreadyExists')\n }\n }\n\n return true\n }\n"],"names":["validateOptions","props","values","data","req","productsCollectionSlug","t","length","productID","product","payload","findByID","id","collection","depth","joins","variants","where","deletedAt","exists","not_equals","select","variantTypes","user","docs","existingOptions","forEach","variant","push","options","some","combo","every","val","includes"],"mappings":"AAMA,OAAO,MAAMA,kBACX,CAACC,QACD,OAAOC,QAAQ,EAAEC,IAAI,EAAEC,GAAG,EAAE;QAC1B,MAAM,EAAEC,yBAAyB,UAAU,EAAE,GAAGJ,SAAS,CAAC;QAC1D,MAAM,EAAEK,CAAC,EAAE,GAAGF;QAEd,IAAI,CAACF,UAAUA,OAAOK,MAAM,KAAK,GAAG;YAClC,qCAAqC;YACrC,OAAOD,EAAE;QACX;QAEA,MAAME,YAAYL,KAAKM,OAAO;QAE9B,IAAI,CAACD,WAAW;YACd,qCAAqC;YACrC,OAAOF,EAAE;QACX;QAEA,MAAMG,UAAU,MAAML,IAAIM,OAAO,CAACC,QAAQ,CAAC;YACzCC,IAAIJ;YACJK,YAAYR;YACZS,OAAO;YACPC,OAAO;gBACLC,UAAU;oBACRC,OAAO;wBACLC,WAAW;4BAAEC,QAAQ;wBAAM;wBAC3B,GAAIhB,KAAKS,EAAE,IAAI;4BACbA,IAAI;gCACFQ,YAAYjB,KAAKS,EAAE;4BACrB;wBACF,CAAC;oBACH;gBACF;YACF;YACAS,QAAQ;gBACNL,UAAU;gBACVM,cAAc;YAChB;YACAC,MAAMnB,IAAImB,IAAI;QAChB;QAEA,qCAAqC;QACrC,MAAMP,WAAWP,QAAQO,QAAQ,EAAEQ,QAAQ,EAAE;QAE7C,qCAAqC;QACrC,IAAItB,OAAOK,MAAM,GAAGE,SAASa,cAAcf,QAAQ;YACjD,qCAAqC;YACrC,OAAOD,EAAE;QACX;QAEA,IAAIU,SAAST,MAAM,GAAG,GAAG;YACvB,MAAMkB,kBAAyC,EAAE;YAEjDT,SAASU,OAAO,CAAC,CAACC;gBAChBF,gBAAgBG,IAAI,CAACD,QAAQE,OAAO;YACtC;YAEA,MAAMV,SAASM,gBAAgBK,IAAI,CACjC,CAACC,QAAUA,MAAMxB,MAAM,KAAKL,OAAOK,MAAM,IAAIwB,MAAMC,KAAK,CAAC,CAACC,MAAQ/B,OAAOgC,QAAQ,CAACD;YAGpF,IAAId,QAAQ;gBACV,qCAAqC;gBACrC,OAAOb,EAAE;YACX;QACF;QAEA,OAAO;IACT,EAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/collections/variants/createVariantsCollection/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAS,MAAM,SAAS,CAAA;AAEtD,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AAO9F,KAAK,KAAK,GAAG;IACX,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE,wBAAwB,GAAG,SAAS,CAAC,CAAA;IAChE,gBAAgB,CAAC,EAAE,gBAAgB,CAAA;IACnC;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,GAAG,eAAe,CAAA;IACrC;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB;;OAEG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAC1B,CAAA;AAED,eAAO,MAAM,wBAAwB,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,gBA0GxD,CAAA"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import { inventoryField } from '../../../fields/inventoryField.js';
|
|
2
|
+
import { pricesField } from '../../../fields/pricesField.js';
|
|
3
|
+
import { variantsCollectionBeforeChange as beforeChange } from './hooks/beforeChange.js';
|
|
4
|
+
import { validateOptions } from './hooks/validateOptions.js';
|
|
5
|
+
export const createVariantsCollection = (props)=>{
|
|
6
|
+
const { access, currenciesConfig, inventory = true, productsSlug = 'products', variantOptionsSlug = 'variantOptions', variantTypesSlug = 'variantTypes' } = props || {};
|
|
7
|
+
const { supportedCurrencies } = currenciesConfig || {};
|
|
8
|
+
const fields = [
|
|
9
|
+
{
|
|
10
|
+
name: 'title',
|
|
11
|
+
type: 'text',
|
|
12
|
+
admin: {
|
|
13
|
+
description: 'Used for administrative purposes, not shown to customers. This is populated by default.'
|
|
14
|
+
}
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
name: 'product',
|
|
18
|
+
type: 'relationship',
|
|
19
|
+
admin: {
|
|
20
|
+
position: 'sidebar',
|
|
21
|
+
readOnly: true
|
|
22
|
+
},
|
|
23
|
+
relationTo: productsSlug,
|
|
24
|
+
required: true
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
// This might need to be a custom component, to show a selector for each variant that is
|
|
28
|
+
// enabled on the parent product
|
|
29
|
+
// - separate select inputs, each showing only a specific variant (w/ options)
|
|
30
|
+
// - it will save data to the DB as IDs in this relationship field
|
|
31
|
+
// and needs a validate function as well which enforces that the options are fully specified, and accurate
|
|
32
|
+
name: 'options',
|
|
33
|
+
type: 'relationship',
|
|
34
|
+
admin: {
|
|
35
|
+
components: {
|
|
36
|
+
Field: {
|
|
37
|
+
path: '@payloadcms/plugin-ecommerce/rsc#VariantOptionsSelector'
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
},
|
|
41
|
+
custom: {
|
|
42
|
+
productsSlug,
|
|
43
|
+
variantTypesSlug
|
|
44
|
+
},
|
|
45
|
+
hasMany: true,
|
|
46
|
+
label: 'Variant options',
|
|
47
|
+
relationTo: variantOptionsSlug,
|
|
48
|
+
required: true,
|
|
49
|
+
validate: validateOptions({
|
|
50
|
+
productsCollectionSlug: productsSlug
|
|
51
|
+
})
|
|
52
|
+
},
|
|
53
|
+
...inventory ? [
|
|
54
|
+
inventoryField()
|
|
55
|
+
] : []
|
|
56
|
+
];
|
|
57
|
+
if (supportedCurrencies?.length && supportedCurrencies.length > 0) {
|
|
58
|
+
const currencyOptions = [];
|
|
59
|
+
supportedCurrencies.forEach((currency)=>{
|
|
60
|
+
currencyOptions.push(currency.code);
|
|
61
|
+
});
|
|
62
|
+
if (currenciesConfig) {
|
|
63
|
+
fields.push(...pricesField({
|
|
64
|
+
currenciesConfig
|
|
65
|
+
}));
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
const baseConfig = {
|
|
69
|
+
slug: 'variants',
|
|
70
|
+
access: {
|
|
71
|
+
create: access.isAdmin,
|
|
72
|
+
delete: access.isAdmin,
|
|
73
|
+
read: access.adminOrPublishedStatus,
|
|
74
|
+
update: access.isAdmin
|
|
75
|
+
},
|
|
76
|
+
admin: {
|
|
77
|
+
description: ({ t })=>// @ts-expect-error - translations are not typed in plugins yet
|
|
78
|
+
t('plugin-ecommerce:variantsCollectionDescription'),
|
|
79
|
+
group: false,
|
|
80
|
+
useAsTitle: 'title'
|
|
81
|
+
},
|
|
82
|
+
fields,
|
|
83
|
+
hooks: {
|
|
84
|
+
beforeChange: [
|
|
85
|
+
beforeChange({
|
|
86
|
+
productsSlug,
|
|
87
|
+
variantOptionsSlug
|
|
88
|
+
})
|
|
89
|
+
]
|
|
90
|
+
},
|
|
91
|
+
labels: {
|
|
92
|
+
plural: ({ t })=>// @ts-expect-error - translations are not typed in plugins yet
|
|
93
|
+
t('plugin-ecommerce:variants'),
|
|
94
|
+
singular: ({ t })=>// @ts-expect-error - translations are not typed in plugins yet
|
|
95
|
+
t('plugin-ecommerce:variant')
|
|
96
|
+
},
|
|
97
|
+
trash: true,
|
|
98
|
+
versions: {
|
|
99
|
+
drafts: {
|
|
100
|
+
autosave: true
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
};
|
|
104
|
+
return baseConfig;
|
|
105
|
+
};
|
|
106
|
+
|
|
107
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/collections/variants/createVariantsCollection/index.ts"],"sourcesContent":["import type { CollectionConfig, Field } from 'payload'\n\nimport type { AccessConfig, CurrenciesConfig, InventoryConfig } from '../../../types/index.js'\n\nimport { inventoryField } from '../../../fields/inventoryField.js'\nimport { pricesField } from '../../../fields/pricesField.js'\nimport { variantsCollectionBeforeChange as beforeChange } from './hooks/beforeChange.js'\nimport { validateOptions } from './hooks/validateOptions.js'\n\ntype Props = {\n access: Pick<AccessConfig, 'adminOrPublishedStatus' | 'isAdmin'>\n currenciesConfig?: CurrenciesConfig\n /**\n * Enables inventory tracking for variants. Defaults to true.\n */\n inventory?: boolean | InventoryConfig\n /**\n * Slug of the products collection, defaults to 'products'.\n */\n productsSlug?: string\n /**\n * Slug of the variant options collection, defaults to 'variantOptions'.\n */\n variantOptionsSlug?: string\n /**\n * Slug of the variant types collection, defaults to 'variantTypes'.\n */\n variantTypesSlug?: string\n}\n\nexport const createVariantsCollection: (props: Props) => CollectionConfig = (props) => {\n const {\n access,\n currenciesConfig,\n inventory = true,\n productsSlug = 'products',\n variantOptionsSlug = 'variantOptions',\n variantTypesSlug = 'variantTypes',\n } = props || {}\n const { supportedCurrencies } = currenciesConfig || {}\n\n const fields: Field[] = [\n {\n name: 'title',\n type: 'text',\n admin: {\n description:\n 'Used for administrative purposes, not shown to customers. This is populated by default.',\n },\n },\n {\n name: 'product',\n type: 'relationship',\n admin: {\n position: 'sidebar',\n readOnly: true,\n },\n relationTo: productsSlug,\n required: true,\n },\n {\n // This might need to be a custom component, to show a selector for each variant that is\n // enabled on the parent product\n // - separate select inputs, each showing only a specific variant (w/ options)\n // - it will save data to the DB as IDs in this relationship field\n // and needs a validate function as well which enforces that the options are fully specified, and accurate\n name: 'options',\n type: 'relationship',\n admin: {\n components: {\n Field: {\n path: '@payloadcms/plugin-ecommerce/rsc#VariantOptionsSelector',\n },\n },\n },\n custom: {\n productsSlug,\n variantTypesSlug,\n },\n hasMany: true,\n label: 'Variant options',\n relationTo: variantOptionsSlug,\n required: true,\n validate: validateOptions({ productsCollectionSlug: productsSlug }),\n },\n ...(inventory ? [inventoryField()] : []),\n ]\n\n if (supportedCurrencies?.length && supportedCurrencies.length > 0) {\n const currencyOptions: string[] = []\n\n supportedCurrencies.forEach((currency) => {\n currencyOptions.push(currency.code)\n })\n\n if (currenciesConfig) {\n fields.push(...pricesField({ currenciesConfig }))\n }\n }\n\n const baseConfig: CollectionConfig = {\n slug: 'variants',\n access: {\n create: access.isAdmin,\n delete: access.isAdmin,\n read: access.adminOrPublishedStatus,\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:variantsCollectionDescription'),\n group: false,\n useAsTitle: 'title',\n },\n fields,\n hooks: {\n beforeChange: [beforeChange({ productsSlug, variantOptionsSlug })],\n },\n labels: {\n plural: ({ t }) =>\n // @ts-expect-error - translations are not typed in plugins yet\n t('plugin-ecommerce:variants'),\n singular: ({ t }) =>\n // @ts-expect-error - translations are not typed in plugins yet\n t('plugin-ecommerce:variant'),\n },\n trash: true,\n versions: {\n drafts: {\n autosave: true,\n },\n },\n }\n\n return baseConfig\n}\n"],"names":["inventoryField","pricesField","variantsCollectionBeforeChange","beforeChange","validateOptions","createVariantsCollection","props","access","currenciesConfig","inventory","productsSlug","variantOptionsSlug","variantTypesSlug","supportedCurrencies","fields","name","type","admin","description","position","readOnly","relationTo","required","components","Field","path","custom","hasMany","label","validate","productsCollectionSlug","length","currencyOptions","forEach","currency","push","code","baseConfig","slug","create","isAdmin","delete","read","adminOrPublishedStatus","update","t","group","useAsTitle","hooks","labels","plural","singular","trash","versions","drafts","autosave"],"mappings":"AAIA,SAASA,cAAc,QAAQ,oCAAmC;AAClE,SAASC,WAAW,QAAQ,iCAAgC;AAC5D,SAASC,kCAAkCC,YAAY,QAAQ,0BAAyB;AACxF,SAASC,eAAe,QAAQ,6BAA4B;AAuB5D,OAAO,MAAMC,2BAA+D,CAACC;IAC3E,MAAM,EACJC,MAAM,EACNC,gBAAgB,EAChBC,YAAY,IAAI,EAChBC,eAAe,UAAU,EACzBC,qBAAqB,gBAAgB,EACrCC,mBAAmB,cAAc,EAClC,GAAGN,SAAS,CAAC;IACd,MAAM,EAAEO,mBAAmB,EAAE,GAAGL,oBAAoB,CAAC;IAErD,MAAMM,SAAkB;QACtB;YACEC,MAAM;YACNC,MAAM;YACNC,OAAO;gBACLC,aACE;YACJ;QACF;QACA;YACEH,MAAM;YACNC,MAAM;YACNC,OAAO;gBACLE,UAAU;gBACVC,UAAU;YACZ;YACAC,YAAYX;YACZY,UAAU;QACZ;QACA;YACE,wFAAwF;YACxF,gCAAgC;YAChC,8EAA8E;YAC9E,kEAAkE;YAClE,0GAA0G;YAC1GP,MAAM;YACNC,MAAM;YACNC,OAAO;gBACLM,YAAY;oBACVC,OAAO;wBACLC,MAAM;oBACR;gBACF;YACF;YACAC,QAAQ;gBACNhB;gBACAE;YACF;YACAe,SAAS;YACTC,OAAO;YACPP,YAAYV;YACZW,UAAU;YACVO,UAAUzB,gBAAgB;gBAAE0B,wBAAwBpB;YAAa;QACnE;WACID,YAAY;YAACT;SAAiB,GAAG,EAAE;KACxC;IAED,IAAIa,qBAAqBkB,UAAUlB,oBAAoBkB,MAAM,GAAG,GAAG;QACjE,MAAMC,kBAA4B,EAAE;QAEpCnB,oBAAoBoB,OAAO,CAAC,CAACC;YAC3BF,gBAAgBG,IAAI,CAACD,SAASE,IAAI;QACpC;QAEA,IAAI5B,kBAAkB;YACpBM,OAAOqB,IAAI,IAAIlC,YAAY;gBAAEO;YAAiB;QAChD;IACF;IAEA,MAAM6B,aAA+B;QACnCC,MAAM;QACN/B,QAAQ;YACNgC,QAAQhC,OAAOiC,OAAO;YACtBC,QAAQlC,OAAOiC,OAAO;YACtBE,MAAMnC,OAAOoC,sBAAsB;YACnCC,QAAQrC,OAAOiC,OAAO;QACxB;QACAvB,OAAO;YACLC,aAAa,CAAC,EAAE2B,CAAC,EAAE,GACjB,+DAA+D;gBAC/DA,EAAE;YACJC,OAAO;YACPC,YAAY;QACd;QACAjC;QACAkC,OAAO;YACL7C,cAAc;gBAACA,aAAa;oBAAEO;oBAAcC;gBAAmB;aAAG;QACpE;QACAsC,QAAQ;YACNC,QAAQ,CAAC,EAAEL,CAAC,EAAE,GACZ,+DAA+D;gBAC/DA,EAAE;YACJM,UAAU,CAAC,EAAEN,CAAC,EAAE,GACd,+DAA+D;gBAC/DA,EAAE;QACN;QACAO,OAAO;QACPC,UAAU;YACRC,QAAQ;gBACNC,UAAU;YACZ;QACF;IACF;IAEA,OAAOlB;AACT,EAAC"}
|