@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,37 @@
|
|
|
1
|
+
@layer payload-default {
|
|
2
|
+
.variantOptionsSelector {
|
|
3
|
+
margin-top: calc(var(--spacing-field) * 2);
|
|
4
|
+
margin-bottom: calc(var(--spacing-field) * 2);
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
.variantOptionsSelectorHeading {
|
|
8
|
+
font-size: calc(var(--base) * 1);
|
|
9
|
+
font-weight: 500;
|
|
10
|
+
color: var(--color-text);
|
|
11
|
+
margin-bottom: calc(var(--base) * 0.5);
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
.variantOptionsSelectorItem {
|
|
15
|
+
display: flex;
|
|
16
|
+
flex-direction: column;
|
|
17
|
+
gap: 0;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
.variantOptionsSelectorList {
|
|
21
|
+
display: flex;
|
|
22
|
+
flex-direction: column;
|
|
23
|
+
gap: calc(var(--base) * 0.75);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
.variantOptionsSelectorError {
|
|
27
|
+
position: relative;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
.variantOptionsSelectorErrorWrapper {
|
|
31
|
+
&.showError {
|
|
32
|
+
border-radius: 2px;
|
|
33
|
+
outline: 1px solid var(--theme-error-400);
|
|
34
|
+
outline-offset: 2px;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ui/VariantOptionsSelector/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAA;AAKrD,OAAO,aAAa,CAAA;AAGpB,KAAK,KAAK,GAAG,EAAE,GAAG,sBAAsB,CAAA;AAExC,eAAO,MAAM,sBAAsB,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CA8ElD,CAAA"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { FieldLabel } from '@payloadcms/ui';
|
|
3
|
+
import { ErrorBox } from './ErrorBox.js';
|
|
4
|
+
import './index.css';
|
|
5
|
+
import { OptionsSelect } from './OptionsSelect.js';
|
|
6
|
+
export const VariantOptionsSelector = async (props)=>{
|
|
7
|
+
const { clientField, data, field, path, req, user } = props;
|
|
8
|
+
const { label } = clientField;
|
|
9
|
+
// Get collection slugs from field custom prop, with defaults for backwards compatibility
|
|
10
|
+
const productsSlug = field.custom?.productsSlug || 'products';
|
|
11
|
+
const variantTypesSlug = field.custom?.variantTypesSlug || 'variantTypes';
|
|
12
|
+
const product = await req.payload.findByID({
|
|
13
|
+
id: data.product,
|
|
14
|
+
collection: productsSlug,
|
|
15
|
+
depth: 0,
|
|
16
|
+
draft: true,
|
|
17
|
+
select: {
|
|
18
|
+
variants: true,
|
|
19
|
+
variantTypes: true
|
|
20
|
+
},
|
|
21
|
+
user
|
|
22
|
+
});
|
|
23
|
+
// @ts-expect-error - TODO: Fix types
|
|
24
|
+
const existingVariantOptions = product.variants?.docs?.map((variant)=>variant.options) ?? [];
|
|
25
|
+
const variantTypeIDs = product.variantTypes;
|
|
26
|
+
const variantTypes = [];
|
|
27
|
+
// Need to get the variant types separately so that the options are populated
|
|
28
|
+
// @ts-expect-error - TODO: Fix types
|
|
29
|
+
if (variantTypeIDs?.length && variantTypeIDs.length > 0) {
|
|
30
|
+
// @ts-expect-error - TODO: Fix types
|
|
31
|
+
for (const variantTypeID of variantTypeIDs){
|
|
32
|
+
const variantType = await req.payload.findByID({
|
|
33
|
+
id: variantTypeID,
|
|
34
|
+
collection: variantTypesSlug,
|
|
35
|
+
depth: 1,
|
|
36
|
+
joins: {
|
|
37
|
+
options: {
|
|
38
|
+
sort: 'value'
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
if (variantType) {
|
|
43
|
+
variantTypes.push(variantType);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return /*#__PURE__*/ _jsxs("div", {
|
|
48
|
+
className: "variantOptionsSelector",
|
|
49
|
+
children: [
|
|
50
|
+
/*#__PURE__*/ _jsx("div", {
|
|
51
|
+
className: "variantOptionsSelectorHeading",
|
|
52
|
+
children: /*#__PURE__*/ _jsx(FieldLabel, {
|
|
53
|
+
as: "span",
|
|
54
|
+
label: label
|
|
55
|
+
})
|
|
56
|
+
}),
|
|
57
|
+
/*#__PURE__*/ _jsx(ErrorBox, {
|
|
58
|
+
existingOptions: existingVariantOptions,
|
|
59
|
+
path: path,
|
|
60
|
+
children: /*#__PURE__*/ _jsx("div", {
|
|
61
|
+
className: "variantOptionsSelectorList",
|
|
62
|
+
children: variantTypes.map((type)=>{
|
|
63
|
+
// @ts-expect-error - TODO: Fix types
|
|
64
|
+
const options = type.options.docs.map((option)=>({
|
|
65
|
+
label: option.label,
|
|
66
|
+
value: option.id
|
|
67
|
+
}));
|
|
68
|
+
return /*#__PURE__*/ _jsx(OptionsSelect, {
|
|
69
|
+
field: clientField,
|
|
70
|
+
label: type.label || type.name,
|
|
71
|
+
options: options,
|
|
72
|
+
path: path
|
|
73
|
+
}, type.name);
|
|
74
|
+
})
|
|
75
|
+
})
|
|
76
|
+
})
|
|
77
|
+
]
|
|
78
|
+
});
|
|
79
|
+
};
|
|
80
|
+
|
|
81
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/ui/VariantOptionsSelector/index.tsx"],"sourcesContent":["import type { SelectFieldServerProps } from 'payload'\n\nimport { FieldLabel } from '@payloadcms/ui'\n\nimport { ErrorBox } from './ErrorBox.js'\nimport './index.css'\nimport { OptionsSelect } from './OptionsSelect.js'\n\ntype Props = {} & SelectFieldServerProps\n\nexport const VariantOptionsSelector: React.FC<Props> = async (props) => {\n const { clientField, data, field, path, req, user } = props\n const { label } = clientField\n\n // Get collection slugs from field custom prop, with defaults for backwards compatibility\n const productsSlug = (field.custom?.productsSlug as string) || 'products'\n const variantTypesSlug = (field.custom?.variantTypesSlug as string) || 'variantTypes'\n\n const product = await req.payload.findByID({\n id: data.product,\n collection: productsSlug,\n depth: 0,\n draft: true,\n select: {\n variants: true,\n variantTypes: true,\n },\n user,\n })\n\n // @ts-expect-error - TODO: Fix types\n const existingVariantOptions = product.variants?.docs?.map((variant) => variant.options) ?? []\n\n const variantTypeIDs = product.variantTypes\n\n const variantTypes = []\n\n // Need to get the variant types separately so that the options are populated\n // @ts-expect-error - TODO: Fix types\n if (variantTypeIDs?.length && variantTypeIDs.length > 0) {\n // @ts-expect-error - TODO: Fix types\n for (const variantTypeID of variantTypeIDs) {\n const variantType = await req.payload.findByID({\n id: variantTypeID,\n collection: variantTypesSlug,\n depth: 1,\n joins: {\n options: {\n sort: 'value',\n },\n },\n })\n\n if (variantType) {\n variantTypes.push(variantType)\n }\n }\n }\n\n return (\n <div className=\"variantOptionsSelector\">\n <div className=\"variantOptionsSelectorHeading\">\n <FieldLabel as=\"span\" label={label} />\n </div>\n\n <ErrorBox existingOptions={existingVariantOptions} path={path}>\n <div className=\"variantOptionsSelectorList\">\n {variantTypes.map((type) => {\n // @ts-expect-error - TODO: Fix types\n const options = type.options.docs.map((option) => ({\n label: option.label,\n value: option.id,\n }))\n\n return (\n <OptionsSelect\n field={clientField}\n key={type.name}\n label={type.label || type.name}\n options={options}\n path={path}\n />\n )\n })}\n </div>\n </ErrorBox>\n </div>\n )\n}\n"],"names":["FieldLabel","ErrorBox","OptionsSelect","VariantOptionsSelector","props","clientField","data","field","path","req","user","label","productsSlug","custom","variantTypesSlug","product","payload","findByID","id","collection","depth","draft","select","variants","variantTypes","existingVariantOptions","docs","map","variant","options","variantTypeIDs","length","variantTypeID","variantType","joins","sort","push","div","className","as","existingOptions","type","option","value","name"],"mappings":";AAEA,SAASA,UAAU,QAAQ,iBAAgB;AAE3C,SAASC,QAAQ,QAAQ,gBAAe;AACxC,OAAO,cAAa;AACpB,SAASC,aAAa,QAAQ,qBAAoB;AAIlD,OAAO,MAAMC,yBAA0C,OAAOC;IAC5D,MAAM,EAAEC,WAAW,EAAEC,IAAI,EAAEC,KAAK,EAAEC,IAAI,EAAEC,GAAG,EAAEC,IAAI,EAAE,GAAGN;IACtD,MAAM,EAAEO,KAAK,EAAE,GAAGN;IAElB,yFAAyF;IACzF,MAAMO,eAAe,AAACL,MAAMM,MAAM,EAAED,gBAA2B;IAC/D,MAAME,mBAAmB,AAACP,MAAMM,MAAM,EAAEC,oBAA+B;IAEvE,MAAMC,UAAU,MAAMN,IAAIO,OAAO,CAACC,QAAQ,CAAC;QACzCC,IAAIZ,KAAKS,OAAO;QAChBI,YAAYP;QACZQ,OAAO;QACPC,OAAO;QACPC,QAAQ;YACNC,UAAU;YACVC,cAAc;QAChB;QACAd;IACF;IAEA,qCAAqC;IACrC,MAAMe,yBAAyBV,QAAQQ,QAAQ,EAAEG,MAAMC,IAAI,CAACC,UAAYA,QAAQC,OAAO,KAAK,EAAE;IAE9F,MAAMC,iBAAiBf,QAAQS,YAAY;IAE3C,MAAMA,eAAe,EAAE;IAEvB,6EAA6E;IAC7E,qCAAqC;IACrC,IAAIM,gBAAgBC,UAAUD,eAAeC,MAAM,GAAG,GAAG;QACvD,qCAAqC;QACrC,KAAK,MAAMC,iBAAiBF,eAAgB;YAC1C,MAAMG,cAAc,MAAMxB,IAAIO,OAAO,CAACC,QAAQ,CAAC;gBAC7CC,IAAIc;gBACJb,YAAYL;gBACZM,OAAO;gBACPc,OAAO;oBACLL,SAAS;wBACPM,MAAM;oBACR;gBACF;YACF;YAEA,IAAIF,aAAa;gBACfT,aAAaY,IAAI,CAACH;YACpB;QACF;IACF;IAEA,qBACE,MAACI;QAAIC,WAAU;;0BACb,KAACD;gBAAIC,WAAU;0BACb,cAAA,KAACtC;oBAAWuC,IAAG;oBAAO5B,OAAOA;;;0BAG/B,KAACV;gBAASuC,iBAAiBf;gBAAwBjB,MAAMA;0BACvD,cAAA,KAAC6B;oBAAIC,WAAU;8BACZd,aAAaG,GAAG,CAAC,CAACc;wBACjB,qCAAqC;wBACrC,MAAMZ,UAAUY,KAAKZ,OAAO,CAACH,IAAI,CAACC,GAAG,CAAC,CAACe,SAAY,CAAA;gCACjD/B,OAAO+B,OAAO/B,KAAK;gCACnBgC,OAAOD,OAAOxB,EAAE;4BAClB,CAAA;wBAEA,qBACE,KAAChB;4BACCK,OAAOF;4BAEPM,OAAO8B,KAAK9B,KAAK,IAAI8B,KAAKG,IAAI;4BAC9Bf,SAASA;4BACTrB,MAAMA;2BAHDiC,KAAKG,IAAI;oBAMpB;;;;;AAKV,EAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utilities.d.ts","sourceRoot":"","sources":["../../src/ui/utilities.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAEjD;;GAEG;AACH,eAAO,MAAM,kBAAkB,gCAG5B;IACD,QAAQ,EAAE,QAAQ,CAAA;IAClB,YAAY,EAAE,MAAM,CAAA;CACrB,KAAG,MAaH,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,oBAAoB,6BAG9B;IACD,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,QAAQ,CAAA;CACnB,KAAG,MAUH,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,WAAW,qCAIrB;IACD,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,QAAQ,CAAA;IAClB,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB,KAAG,MAQH,CAAA"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Convert display value with decimal point to base value (e.g., $25.00 to 2500)
|
|
3
|
+
*/ export const convertToBaseValue = ({ currency, displayValue })=>{
|
|
4
|
+
if (!currency) {
|
|
5
|
+
return parseFloat(displayValue);
|
|
6
|
+
}
|
|
7
|
+
// Remove currency symbol and any non-numeric characters except decimal
|
|
8
|
+
const cleanValue = displayValue.replace(currency.symbol, '').replace(/[^0-9.]/g, '');
|
|
9
|
+
// Parse the clean value to a float
|
|
10
|
+
const floatValue = parseFloat(cleanValue || '0');
|
|
11
|
+
// Convert to the base value (e.g., cents for USD)
|
|
12
|
+
return Math.round(floatValue * Math.pow(10, currency.decimals));
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* Convert base value to display value with decimal point (e.g., 2500 to $25.00)
|
|
16
|
+
*/ export const convertFromBaseValue = ({ baseValue, currency })=>{
|
|
17
|
+
if (!currency) {
|
|
18
|
+
return baseValue.toString();
|
|
19
|
+
}
|
|
20
|
+
// Convert from base value (e.g., cents) to decimal value (e.g., dollars)
|
|
21
|
+
const decimalValue = baseValue / Math.pow(10, currency.decimals);
|
|
22
|
+
// Format with the correct number of decimal places
|
|
23
|
+
return decimalValue.toFixed(currency.decimals);
|
|
24
|
+
};
|
|
25
|
+
/**
|
|
26
|
+
* Format a base value as a locale-aware currency string using the Intl API.
|
|
27
|
+
*
|
|
28
|
+
* @example formatPrice({ baseValue: 2500, currency: USD }) // "$25.00"
|
|
29
|
+
* @example formatPrice({ baseValue: 2500, currency: EUR, locale: 'de' }) // "25,00 €"
|
|
30
|
+
*/ export const formatPrice = ({ baseValue, currency, locale = 'en' })=>{
|
|
31
|
+
return new Intl.NumberFormat(locale, {
|
|
32
|
+
currency: currency.code,
|
|
33
|
+
currencyDisplay: currency.symbolDisplay ?? 'symbol',
|
|
34
|
+
maximumFractionDigits: currency.decimals,
|
|
35
|
+
minimumFractionDigits: currency.decimals,
|
|
36
|
+
style: 'currency'
|
|
37
|
+
}).format(baseValue / Math.pow(10, currency.decimals));
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
//# sourceMappingURL=utilities.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/ui/utilities.ts"],"sourcesContent":["import type { Currency } from '../types/index.js'\n\n/**\n * Convert display value with decimal point to base value (e.g., $25.00 to 2500)\n */\nexport const convertToBaseValue = ({\n currency,\n displayValue,\n}: {\n currency: Currency\n displayValue: string\n}): number => {\n if (!currency) {\n return parseFloat(displayValue)\n }\n\n // Remove currency symbol and any non-numeric characters except decimal\n const cleanValue = displayValue.replace(currency.symbol, '').replace(/[^0-9.]/g, '')\n\n // Parse the clean value to a float\n const floatValue = parseFloat(cleanValue || '0')\n\n // Convert to the base value (e.g., cents for USD)\n return Math.round(floatValue * Math.pow(10, currency.decimals))\n}\n\n/**\n * Convert base value to display value with decimal point (e.g., 2500 to $25.00)\n */\nexport const convertFromBaseValue = ({\n baseValue,\n currency,\n}: {\n baseValue: number\n currency: Currency\n}): string => {\n if (!currency) {\n return baseValue.toString()\n }\n\n // Convert from base value (e.g., cents) to decimal value (e.g., dollars)\n const decimalValue = baseValue / Math.pow(10, currency.decimals)\n\n // Format with the correct number of decimal places\n return decimalValue.toFixed(currency.decimals)\n}\n\n/**\n * Format a base value as a locale-aware currency string using the Intl API.\n *\n * @example formatPrice({ baseValue: 2500, currency: USD }) // \"$25.00\"\n * @example formatPrice({ baseValue: 2500, currency: EUR, locale: 'de' }) // \"25,00 €\"\n */\nexport const formatPrice = ({\n baseValue,\n currency,\n locale = 'en',\n}: {\n baseValue: number\n currency: Currency\n locale?: string\n}): string => {\n return new Intl.NumberFormat(locale, {\n currency: currency.code,\n currencyDisplay: currency.symbolDisplay ?? 'symbol',\n maximumFractionDigits: currency.decimals,\n minimumFractionDigits: currency.decimals,\n style: 'currency',\n }).format(baseValue / Math.pow(10, currency.decimals))\n}\n"],"names":["convertToBaseValue","currency","displayValue","parseFloat","cleanValue","replace","symbol","floatValue","Math","round","pow","decimals","convertFromBaseValue","baseValue","toString","decimalValue","toFixed","formatPrice","locale","Intl","NumberFormat","code","currencyDisplay","symbolDisplay","maximumFractionDigits","minimumFractionDigits","style","format"],"mappings":"AAEA;;CAEC,GACD,OAAO,MAAMA,qBAAqB,CAAC,EACjCC,QAAQ,EACRC,YAAY,EAIb;IACC,IAAI,CAACD,UAAU;QACb,OAAOE,WAAWD;IACpB;IAEA,uEAAuE;IACvE,MAAME,aAAaF,aAAaG,OAAO,CAACJ,SAASK,MAAM,EAAE,IAAID,OAAO,CAAC,YAAY;IAEjF,mCAAmC;IACnC,MAAME,aAAaJ,WAAWC,cAAc;IAE5C,kDAAkD;IAClD,OAAOI,KAAKC,KAAK,CAACF,aAAaC,KAAKE,GAAG,CAAC,IAAIT,SAASU,QAAQ;AAC/D,EAAC;AAED;;CAEC,GACD,OAAO,MAAMC,uBAAuB,CAAC,EACnCC,SAAS,EACTZ,QAAQ,EAIT;IACC,IAAI,CAACA,UAAU;QACb,OAAOY,UAAUC,QAAQ;IAC3B;IAEA,yEAAyE;IACzE,MAAMC,eAAeF,YAAYL,KAAKE,GAAG,CAAC,IAAIT,SAASU,QAAQ;IAE/D,mDAAmD;IACnD,OAAOI,aAAaC,OAAO,CAACf,SAASU,QAAQ;AAC/C,EAAC;AAED;;;;;CAKC,GACD,OAAO,MAAMM,cAAc,CAAC,EAC1BJ,SAAS,EACTZ,QAAQ,EACRiB,SAAS,IAAI,EAKd;IACC,OAAO,IAAIC,KAAKC,YAAY,CAACF,QAAQ;QACnCjB,UAAUA,SAASoB,IAAI;QACvBC,iBAAiBrB,SAASsB,aAAa,IAAI;QAC3CC,uBAAuBvB,SAASU,QAAQ;QACxCc,uBAAuBxB,SAASU,QAAQ;QACxCe,OAAO;IACT,GAAGC,MAAM,CAACd,YAAYL,KAAKE,GAAG,CAAC,IAAIT,SAASU,QAAQ;AACtD,EAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"accessComposition.d.ts","sourceRoot":"","sources":["../../src/utilities/accessComposition.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAS,MAAM,SAAS,CAAA;AAI5C;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,QAAQ,uBAAwB,MAAM,EAAE,KAAG,MA0BvD,CAAA;AAED;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,SAAS,uBAAwB,MAAM,EAAE,KAAG,MA0BxD,CAAA;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,WAAW,cACX,CAAC,CAAC,IAAI,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,OAAO,kBAC7B,MAAM,aACZ,MAAM,KACf,MAQF,CAAA"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { combineWhereConstraints } from 'payload/shared';
|
|
2
|
+
/**
|
|
3
|
+
* Combines multiple access functions with OR logic.
|
|
4
|
+
*
|
|
5
|
+
* Logic:
|
|
6
|
+
* - If ANY function returns `true` → return `true` (full access, short-circuit)
|
|
7
|
+
* - If ALL functions return `false` → return `false` (no access)
|
|
8
|
+
* - If any functions return `Where` queries → combine them with OR logic
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```ts
|
|
12
|
+
* const canCreate = or(
|
|
13
|
+
* isAdmin,
|
|
14
|
+
* isAuthenticated,
|
|
15
|
+
* conditional(allowGuestAccess, isGuest)
|
|
16
|
+
* )
|
|
17
|
+
* ```
|
|
18
|
+
*/ export const accessOR = (...accessFunctions)=>{
|
|
19
|
+
return async (args)=>{
|
|
20
|
+
const whereQueries = [];
|
|
21
|
+
for (const access of accessFunctions){
|
|
22
|
+
const result = await access(args);
|
|
23
|
+
// Short-circuit on true - full access granted
|
|
24
|
+
if (result === true) {
|
|
25
|
+
return true;
|
|
26
|
+
}
|
|
27
|
+
// Collect Where queries for combination (must be an object, not null/undefined/false)
|
|
28
|
+
if (result && typeof result === 'object') {
|
|
29
|
+
whereQueries.push(result);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
// If we have Where queries, combine them with OR
|
|
33
|
+
if (whereQueries.length > 0) {
|
|
34
|
+
return combineWhereConstraints(whereQueries, 'or');
|
|
35
|
+
}
|
|
36
|
+
// All checkers returned false - no access
|
|
37
|
+
return false;
|
|
38
|
+
};
|
|
39
|
+
};
|
|
40
|
+
/**
|
|
41
|
+
* Combines multiple access functions with AND logic.
|
|
42
|
+
*
|
|
43
|
+
* Logic:
|
|
44
|
+
* - If ANY function returns `false` → return `false` (no access, short-circuit)
|
|
45
|
+
* - If ALL functions return `true` → return `true` (full access)
|
|
46
|
+
* - If any functions return `Where` queries → combine them with AND logic
|
|
47
|
+
*
|
|
48
|
+
* @example
|
|
49
|
+
* ```ts
|
|
50
|
+
* const canUpdate = and(
|
|
51
|
+
* isAuthenticated,
|
|
52
|
+
* isDocumentOwner
|
|
53
|
+
* )
|
|
54
|
+
* ```
|
|
55
|
+
*/ export const accessAND = (...accessFunctions)=>{
|
|
56
|
+
return async (args)=>{
|
|
57
|
+
const whereQueries = [];
|
|
58
|
+
for (const access of accessFunctions){
|
|
59
|
+
const result = await access(args);
|
|
60
|
+
// Short-circuit on false - no access
|
|
61
|
+
if (result === false) {
|
|
62
|
+
return false;
|
|
63
|
+
}
|
|
64
|
+
// Collect Where queries for combination (must be an object, not null/undefined/true)
|
|
65
|
+
if (result !== true && result && typeof result === 'object') {
|
|
66
|
+
whereQueries.push(result);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
// If we have Where queries, combine them with AND
|
|
70
|
+
if (whereQueries.length > 0) {
|
|
71
|
+
return combineWhereConstraints(whereQueries, 'and');
|
|
72
|
+
}
|
|
73
|
+
// All checkers returned true - full access
|
|
74
|
+
return true;
|
|
75
|
+
};
|
|
76
|
+
};
|
|
77
|
+
/**
|
|
78
|
+
* Conditionally applies an access function based on a boolean condition or function.
|
|
79
|
+
*
|
|
80
|
+
* Useful for feature flags and plugin configuration.
|
|
81
|
+
*
|
|
82
|
+
* @param condition - Boolean or function to determine which function to use
|
|
83
|
+
* @param checker - Access function to use if condition is true
|
|
84
|
+
* @param fallback - Access function to use if condition is false (defaults to denying access)
|
|
85
|
+
*
|
|
86
|
+
* @example
|
|
87
|
+
* ```ts
|
|
88
|
+
* const canCreate = or(
|
|
89
|
+
* isAdmin,
|
|
90
|
+
* conditional(allowGuestCarts, isGuest)
|
|
91
|
+
* )
|
|
92
|
+
* ```
|
|
93
|
+
*/ export const conditional = (condition, accessFunction, fallback = ()=>false)=>{
|
|
94
|
+
return async (args)=>{
|
|
95
|
+
const shouldApply = typeof condition === 'function' ? condition(args) : condition;
|
|
96
|
+
if (shouldApply) {
|
|
97
|
+
return accessFunction(args);
|
|
98
|
+
}
|
|
99
|
+
return fallback(args);
|
|
100
|
+
};
|
|
101
|
+
};
|
|
102
|
+
|
|
103
|
+
//# sourceMappingURL=accessComposition.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/utilities/accessComposition.ts"],"sourcesContent":["import type { Access, Where } from 'payload'\n\nimport { combineWhereConstraints } from 'payload/shared'\n\n/**\n * Combines multiple access functions with OR logic.\n *\n * Logic:\n * - If ANY function returns `true` → return `true` (full access, short-circuit)\n * - If ALL functions return `false` → return `false` (no access)\n * - If any functions return `Where` queries → combine them with OR logic\n *\n * @example\n * ```ts\n * const canCreate = or(\n * isAdmin,\n * isAuthenticated,\n * conditional(allowGuestAccess, isGuest)\n * )\n * ```\n */\nexport const accessOR = (...accessFunctions: Access[]): Access => {\n return async (args) => {\n const whereQueries: Where[] = []\n\n for (const access of accessFunctions) {\n const result = await access(args)\n\n // Short-circuit on true - full access granted\n if (result === true) {\n return true\n }\n\n // Collect Where queries for combination (must be an object, not null/undefined/false)\n if (result && typeof result === 'object') {\n whereQueries.push(result)\n }\n }\n\n // If we have Where queries, combine them with OR\n if (whereQueries.length > 0) {\n return combineWhereConstraints(whereQueries, 'or')\n }\n\n // All checkers returned false - no access\n return false\n }\n}\n\n/**\n * Combines multiple access functions with AND logic.\n *\n * Logic:\n * - If ANY function returns `false` → return `false` (no access, short-circuit)\n * - If ALL functions return `true` → return `true` (full access)\n * - If any functions return `Where` queries → combine them with AND logic\n *\n * @example\n * ```ts\n * const canUpdate = and(\n * isAuthenticated,\n * isDocumentOwner\n * )\n * ```\n */\nexport const accessAND = (...accessFunctions: Access[]): Access => {\n return async (args) => {\n const whereQueries: Where[] = []\n\n for (const access of accessFunctions) {\n const result = await access(args)\n\n // Short-circuit on false - no access\n if (result === false) {\n return false\n }\n\n // Collect Where queries for combination (must be an object, not null/undefined/true)\n if (result !== true && result && typeof result === 'object') {\n whereQueries.push(result)\n }\n }\n\n // If we have Where queries, combine them with AND\n if (whereQueries.length > 0) {\n return combineWhereConstraints(whereQueries, 'and')\n }\n\n // All checkers returned true - full access\n return true\n }\n}\n\n/**\n * Conditionally applies an access function based on a boolean condition or function.\n *\n * Useful for feature flags and plugin configuration.\n *\n * @param condition - Boolean or function to determine which function to use\n * @param checker - Access function to use if condition is true\n * @param fallback - Access function to use if condition is false (defaults to denying access)\n *\n * @example\n * ```ts\n * const canCreate = or(\n * isAdmin,\n * conditional(allowGuestCarts, isGuest)\n * )\n * ```\n */\nexport const conditional = (\n condition: ((args: any) => boolean) | boolean,\n accessFunction: Access,\n fallback: Access = () => false,\n): Access => {\n return async (args) => {\n const shouldApply = typeof condition === 'function' ? condition(args) : condition\n if (shouldApply) {\n return accessFunction(args)\n }\n return fallback(args)\n }\n}\n"],"names":["combineWhereConstraints","accessOR","accessFunctions","args","whereQueries","access","result","push","length","accessAND","conditional","condition","accessFunction","fallback","shouldApply"],"mappings":"AAEA,SAASA,uBAAuB,QAAQ,iBAAgB;AAExD;;;;;;;;;;;;;;;;CAgBC,GACD,OAAO,MAAMC,WAAW,CAAC,GAAGC;IAC1B,OAAO,OAAOC;QACZ,MAAMC,eAAwB,EAAE;QAEhC,KAAK,MAAMC,UAAUH,gBAAiB;YACpC,MAAMI,SAAS,MAAMD,OAAOF;YAE5B,8CAA8C;YAC9C,IAAIG,WAAW,MAAM;gBACnB,OAAO;YACT;YAEA,sFAAsF;YACtF,IAAIA,UAAU,OAAOA,WAAW,UAAU;gBACxCF,aAAaG,IAAI,CAACD;YACpB;QACF;QAEA,iDAAiD;QACjD,IAAIF,aAAaI,MAAM,GAAG,GAAG;YAC3B,OAAOR,wBAAwBI,cAAc;QAC/C;QAEA,0CAA0C;QAC1C,OAAO;IACT;AACF,EAAC;AAED;;;;;;;;;;;;;;;CAeC,GACD,OAAO,MAAMK,YAAY,CAAC,GAAGP;IAC3B,OAAO,OAAOC;QACZ,MAAMC,eAAwB,EAAE;QAEhC,KAAK,MAAMC,UAAUH,gBAAiB;YACpC,MAAMI,SAAS,MAAMD,OAAOF;YAE5B,qCAAqC;YACrC,IAAIG,WAAW,OAAO;gBACpB,OAAO;YACT;YAEA,qFAAqF;YACrF,IAAIA,WAAW,QAAQA,UAAU,OAAOA,WAAW,UAAU;gBAC3DF,aAAaG,IAAI,CAACD;YACpB;QACF;QAEA,kDAAkD;QAClD,IAAIF,aAAaI,MAAM,GAAG,GAAG;YAC3B,OAAOR,wBAAwBI,cAAc;QAC/C;QAEA,2CAA2C;QAC3C,OAAO;IACT;AACF,EAAC;AAED;;;;;;;;;;;;;;;;CAgBC,GACD,OAAO,MAAMM,cAAc,CACzBC,WACAC,gBACAC,WAAmB,IAAM,KAAK;IAE9B,OAAO,OAAOV;QACZ,MAAMW,cAAc,OAAOH,cAAc,aAAaA,UAAUR,QAAQQ;QACxE,IAAIG,aAAa;YACf,OAAOF,eAAeT;QACxB;QACA,OAAOU,SAASV;IAClB;AACF,EAAC"}
|