@libreapps/commerce 7.5.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/.turbo/turbo-build.log +4 -0
- package/CHANGELOG.md +13 -0
- package/LICENSE.md +21 -0
- package/components/Icons.tsx +35 -0
- package/components/add-to-cart-widget.tsx +183 -0
- package/components/buy/buy-card.tsx +259 -0
- package/components/buy/carousel-buy-card.tsx +242 -0
- package/components/buy/multi-family/all-variants-carousel.tsx +261 -0
- package/components/buy/multi-family/family-carousel/index.tsx +77 -0
- package/components/buy/multi-family/family-carousel/slide.tsx +83 -0
- package/components/buy/multi-family/family-carousel/state.ts +87 -0
- package/components/buy/multi-family/index.ts +2 -0
- package/components/buy/single-family-selector.tsx +90 -0
- package/components/buy/title-and-byline.tsx +25 -0
- package/components/cart/cart-panel/cart-line-item.tsx +76 -0
- package/components/cart/cart-panel/index.tsx +154 -0
- package/components/cart/cart-panel/promo-code.tsx +109 -0
- package/components/cart/cart-panel/total-area.tsx +60 -0
- package/components/checkout/payment-step-form/card-icon-row.tsx +26 -0
- package/components/checkout/payment-step-form/card-icons/amex.tsx +32 -0
- package/components/checkout/payment-step-form/card-icons/diners-club.tsx +13 -0
- package/components/checkout/payment-step-form/card-icons/discover.tsx +25 -0
- package/components/checkout/payment-step-form/card-icons/jcb.tsx +26 -0
- package/components/checkout/payment-step-form/card-icons/mastercard.tsx +27 -0
- package/components/checkout/payment-step-form/card-icons/visa.tsx +25 -0
- package/components/checkout/payment-step-form/cc-button.tsx +17 -0
- package/components/checkout/payment-step-form/contact-form.tsx +50 -0
- package/components/checkout/payment-step-form/crypto-icons/btc.tsx +11 -0
- package/components/checkout/payment-step-form/crypto-icons/eth.tsx +20 -0
- package/components/checkout/payment-step-form/crypto-icons/usdt.tsx +13 -0
- package/components/checkout/payment-step-form/index.tsx +122 -0
- package/components/checkout/payment-step-form/methods/bank-transfer.tsx +79 -0
- package/components/checkout/payment-step-form/methods/card.tsx +232 -0
- package/components/checkout/payment-step-form/methods/crypto.tsx +227 -0
- package/components/checkout/payment-step-form/methods/index.ts +23 -0
- package/components/checkout/shipping-step-form.tsx +175 -0
- package/components/index.ts +11 -0
- package/components/item/product-card.tsx +48 -0
- package/components/item-selector/button.tsx +188 -0
- package/components/item-selector/carousel/index.tsx +197 -0
- package/components/item-selector/carousel/slider.tsx +40 -0
- package/components/item-selector/index.ts +5 -0
- package/components/item-selector/quantity-indicator.tsx +48 -0
- package/components/node-tabs/index.tsx +91 -0
- package/components/node-tabs/node-image.tsx +31 -0
- package/dist/components/Icons.d.ts +18 -0
- package/dist/components/Icons.js +19 -0
- package/dist/components/Icons.js.map +1 -0
- package/dist/components/add-to-cart-widget.d.ts +11 -0
- package/dist/components/add-to-cart-widget.js +85 -0
- package/dist/components/add-to-cart-widget.js.map +1 -0
- package/dist/components/buy/buy-card.d.ts +30 -0
- package/dist/components/buy/buy-card.js +109 -0
- package/dist/components/buy/buy-card.js.map +1 -0
- package/dist/components/buy/carousel-buy-card.d.ts +12 -0
- package/dist/components/buy/carousel-buy-card.js +94 -0
- package/dist/components/buy/carousel-buy-card.js.map +1 -0
- package/dist/components/buy/multi-family/all-variants-carousel.d.ts +4 -0
- package/dist/components/buy/multi-family/all-variants-carousel.js +115 -0
- package/dist/components/buy/multi-family/all-variants-carousel.js.map +1 -0
- package/dist/components/buy/multi-family/family-carousel/index.d.ts +4 -0
- package/dist/components/buy/multi-family/family-carousel/index.js +27 -0
- package/dist/components/buy/multi-family/family-carousel/index.js.map +1 -0
- package/dist/components/buy/multi-family/family-carousel/slide.d.ts +11 -0
- package/dist/components/buy/multi-family/family-carousel/slide.js +35 -0
- package/dist/components/buy/multi-family/family-carousel/slide.js.map +1 -0
- package/dist/components/buy/multi-family/family-carousel/state.d.ts +20 -0
- package/dist/components/buy/multi-family/family-carousel/state.js +59 -0
- package/dist/components/buy/multi-family/family-carousel/state.js.map +1 -0
- package/dist/components/buy/multi-family/index.d.ts +2 -0
- package/dist/components/buy/multi-family/index.js +3 -0
- package/dist/components/buy/multi-family/index.js.map +1 -0
- package/dist/components/buy/single-family-selector.d.ts +15 -0
- package/dist/components/buy/single-family-selector.js +28 -0
- package/dist/components/buy/single-family-selector.js.map +1 -0
- package/dist/components/buy/title-and-byline.d.ts +8 -0
- package/dist/components/buy/title-and-byline.js +7 -0
- package/dist/components/buy/title-and-byline.js.map +1 -0
- package/dist/components/cart/cart-panel/cart-line-item.d.ts +11 -0
- package/dist/components/cart/cart-panel/cart-line-item.js +25 -0
- package/dist/components/cart/cart-panel/cart-line-item.js.map +1 -0
- package/dist/components/cart/cart-panel/index.d.ts +19 -0
- package/dist/components/cart/cart-panel/index.js +65 -0
- package/dist/components/cart/cart-panel/index.js.map +1 -0
- package/dist/components/cart/cart-panel/promo-code.d.ts +4 -0
- package/dist/components/cart/cart-panel/promo-code.js +62 -0
- package/dist/components/cart/cart-panel/promo-code.js.map +1 -0
- package/dist/components/cart/cart-panel/total-area.d.ts +7 -0
- package/dist/components/cart/cart-panel/total-area.js +14 -0
- package/dist/components/cart/cart-panel/total-area.js.map +1 -0
- package/dist/components/checkout/payment-step-form/card-icon-row.d.ts +2 -0
- package/dist/components/checkout/payment-step-form/card-icon-row.js +14 -0
- package/dist/components/checkout/payment-step-form/card-icon-row.js.map +1 -0
- package/dist/components/checkout/payment-step-form/card-icons/amex.d.ts +4 -0
- package/dist/components/checkout/payment-step-form/card-icons/amex.js +6 -0
- package/dist/components/checkout/payment-step-form/card-icons/amex.js.map +1 -0
- package/dist/components/checkout/payment-step-form/card-icons/diners-club.d.ts +4 -0
- package/dist/components/checkout/payment-step-form/card-icons/diners-club.js +6 -0
- package/dist/components/checkout/payment-step-form/card-icons/diners-club.js.map +1 -0
- package/dist/components/checkout/payment-step-form/card-icons/discover.d.ts +4 -0
- package/dist/components/checkout/payment-step-form/card-icons/discover.js +6 -0
- package/dist/components/checkout/payment-step-form/card-icons/discover.js.map +1 -0
- package/dist/components/checkout/payment-step-form/card-icons/jcb.d.ts +4 -0
- package/dist/components/checkout/payment-step-form/card-icons/jcb.js +6 -0
- package/dist/components/checkout/payment-step-form/card-icons/jcb.js.map +1 -0
- package/dist/components/checkout/payment-step-form/card-icons/mastercard.d.ts +4 -0
- package/dist/components/checkout/payment-step-form/card-icons/mastercard.js +6 -0
- package/dist/components/checkout/payment-step-form/card-icons/mastercard.js.map +1 -0
- package/dist/components/checkout/payment-step-form/card-icons/visa.d.ts +4 -0
- package/dist/components/checkout/payment-step-form/card-icons/visa.js +6 -0
- package/dist/components/checkout/payment-step-form/card-icons/visa.js.map +1 -0
- package/dist/components/checkout/payment-step-form/cc-button.d.ts +3 -0
- package/dist/components/checkout/payment-step-form/cc-button.js +6 -0
- package/dist/components/checkout/payment-step-form/cc-button.js.map +1 -0
- package/dist/components/checkout/payment-step-form/contact-form.d.ts +5 -0
- package/dist/components/checkout/payment-step-form/contact-form.js +6 -0
- package/dist/components/checkout/payment-step-form/contact-form.js.map +1 -0
- package/dist/components/checkout/payment-step-form/crypto-icons/btc.d.ts +4 -0
- package/dist/components/checkout/payment-step-form/crypto-icons/btc.js +6 -0
- package/dist/components/checkout/payment-step-form/crypto-icons/btc.js.map +1 -0
- package/dist/components/checkout/payment-step-form/crypto-icons/eth.d.ts +4 -0
- package/dist/components/checkout/payment-step-form/crypto-icons/eth.js +6 -0
- package/dist/components/checkout/payment-step-form/crypto-icons/eth.js.map +1 -0
- package/dist/components/checkout/payment-step-form/crypto-icons/usdt.d.ts +4 -0
- package/dist/components/checkout/payment-step-form/crypto-icons/usdt.js +6 -0
- package/dist/components/checkout/payment-step-form/crypto-icons/usdt.js.map +1 -0
- package/dist/components/checkout/payment-step-form/index.d.ts +4 -0
- package/dist/components/checkout/payment-step-form/index.js +77 -0
- package/dist/components/checkout/payment-step-form/index.js.map +1 -0
- package/dist/components/checkout/payment-step-form/methods/bank-transfer.d.ts +4 -0
- package/dist/components/checkout/payment-step-form/methods/bank-transfer.js +24 -0
- package/dist/components/checkout/payment-step-form/methods/bank-transfer.js.map +1 -0
- package/dist/components/checkout/payment-step-form/methods/card.d.ts +4 -0
- package/dist/components/checkout/payment-step-form/methods/card.js +160 -0
- package/dist/components/checkout/payment-step-form/methods/card.js.map +1 -0
- package/dist/components/checkout/payment-step-form/methods/crypto.d.ts +9 -0
- package/dist/components/checkout/payment-step-form/methods/crypto.js +137 -0
- package/dist/components/checkout/payment-step-form/methods/crypto.js.map +1 -0
- package/dist/components/checkout/payment-step-form/methods/index.d.ts +6 -0
- package/dist/components/checkout/payment-step-form/methods/index.js +21 -0
- package/dist/components/checkout/payment-step-form/methods/index.js.map +1 -0
- package/dist/components/checkout/shipping-step-form.d.ts +3 -0
- package/dist/components/checkout/shipping-step-form.js +53 -0
- package/dist/components/checkout/shipping-step-form.js.map +1 -0
- package/dist/components/index.d.ts +8 -0
- package/dist/components/index.js +9 -0
- package/dist/components/index.js.map +1 -0
- package/dist/components/item/product-card.d.ts +7 -0
- package/dist/components/item/product-card.js +9 -0
- package/dist/components/item/product-card.js.map +1 -0
- package/dist/components/item-selector/button.d.ts +4 -0
- package/dist/components/item-selector/button.js +47 -0
- package/dist/components/item-selector/button.js.map +1 -0
- package/dist/components/item-selector/carousel/index.d.ts +12 -0
- package/dist/components/item-selector/carousel/index.js +74 -0
- package/dist/components/item-selector/carousel/index.js.map +1 -0
- package/dist/components/item-selector/carousel/slider.d.ts +8 -0
- package/dist/components/item-selector/carousel/slider.js +12 -0
- package/dist/components/item-selector/carousel/slider.js.map +1 -0
- package/dist/components/item-selector/index.d.ts +2 -0
- package/dist/components/item-selector/index.js +3 -0
- package/dist/components/item-selector/index.js.map +1 -0
- package/dist/components/item-selector/quantity-indicator.d.ts +9 -0
- package/dist/components/item-selector/quantity-indicator.js +16 -0
- package/dist/components/item-selector/quantity-indicator.js.map +1 -0
- package/dist/components/node-tabs/index.d.ts +14 -0
- package/dist/components/node-tabs/index.js +42 -0
- package/dist/components/node-tabs/index.js.map +1 -0
- package/dist/components/node-tabs/node-image.d.ts +6 -0
- package/dist/components/node-tabs/node-image.js +13 -0
- package/dist/components/node-tabs/node-image.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -0
- package/dist/service/context.d.ts +8 -0
- package/dist/service/context.js +19 -0
- package/dist/service/context.js.map +1 -0
- package/dist/service/debug.d.ts +10 -0
- package/dist/service/debug.js +30 -0
- package/dist/service/debug.js.map +1 -0
- package/dist/service/impls/standalone/actual-line-item.d.ts +40 -0
- package/dist/service/impls/standalone/actual-line-item.js +84 -0
- package/dist/service/impls/standalone/actual-line-item.js.map +1 -0
- package/dist/service/impls/standalone/get-instance.d.ts +2 -0
- package/dist/service/impls/standalone/get-instance.js +39 -0
- package/dist/service/impls/standalone/get-instance.js.map +1 -0
- package/dist/service/impls/standalone/index.d.ts +67 -0
- package/dist/service/impls/standalone/index.js +416 -0
- package/dist/service/impls/standalone/index.js.map +1 -0
- package/dist/service/impls/standalone/order/firebase.d.ts +2 -0
- package/dist/service/impls/standalone/order/firebase.js +13 -0
- package/dist/service/impls/standalone/order/firebase.js.map +1 -0
- package/dist/service/impls/standalone/order/index.d.ts +24 -0
- package/dist/service/impls/standalone/order/index.js +61 -0
- package/dist/service/impls/standalone/order/index.js.map +1 -0
- package/dist/service/impls/standalone/persistence.d.ts +4 -0
- package/dist/service/impls/standalone/persistence.js +22 -0
- package/dist/service/impls/standalone/persistence.js.map +1 -0
- package/dist/service/path-utils.d.ts +7 -0
- package/dist/service/path-utils.js +16 -0
- package/dist/service/path-utils.js.map +1 -0
- package/dist/service/sep.d.ts +6 -0
- package/dist/service/sep.js +6 -0
- package/dist/service/sep.js.map +1 -0
- package/dist/types/category-node.d.ts +36 -0
- package/dist/types/category-node.js +2 -0
- package/dist/types/category-node.js.map +1 -0
- package/dist/types/checkout.d.ts +33 -0
- package/dist/types/checkout.js +2 -0
- package/dist/types/checkout.js.map +1 -0
- package/dist/types/commerce-config.d.ts +11 -0
- package/dist/types/commerce-config.js +2 -0
- package/dist/types/commerce-config.js.map +1 -0
- package/dist/types/commerce-service.d.ts +109 -0
- package/dist/types/commerce-service.js +2 -0
- package/dist/types/commerce-service.js.map +1 -0
- package/dist/types/family.d.ts +16 -0
- package/dist/types/family.js +2 -0
- package/dist/types/family.js.map +1 -0
- package/dist/types/index.d.ts +13 -0
- package/dist/types/index.js +8 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/item-selector.d.ts +72 -0
- package/dist/types/item-selector.js +2 -0
- package/dist/types/item-selector.js.map +1 -0
- package/dist/types/line-item.d.ts +14 -0
- package/dist/types/line-item.js +2 -0
- package/dist/types/line-item.js.map +1 -0
- package/dist/types/multi-family-selector-props.d.ts +16 -0
- package/dist/types/multi-family-selector-props.js +2 -0
- package/dist/types/multi-family-selector-props.js.map +1 -0
- package/dist/types/product.d.ts +15 -0
- package/dist/types/product.js +2 -0
- package/dist/types/product.js.map +1 -0
- package/dist/types/promo.d.ts +7 -0
- package/dist/types/promo.js +2 -0
- package/dist/types/promo.js.map +1 -0
- package/dist/types/selection-ui-specifier.d.ts +40 -0
- package/dist/types/selection-ui-specifier.js +2 -0
- package/dist/types/selection-ui-specifier.js.map +1 -0
- package/dist/types/string-mutator.d.ts +9 -0
- package/dist/types/string-mutator.js +2 -0
- package/dist/types/string-mutator.js.map +1 -0
- package/dist/types/token-separators.d.ts +6 -0
- package/dist/types/token-separators.js +2 -0
- package/dist/types/token-separators.js.map +1 -0
- package/dist/util/analytics.d.ts +9 -0
- package/dist/util/analytics.js +10 -0
- package/dist/util/analytics.js.map +1 -0
- package/dist/util/countries.d.ts +7 -0
- package/dist/util/countries.js +197 -0
- package/dist/util/countries.js.map +1 -0
- package/dist/util/error.d.ts +1 -0
- package/dist/util/error.js +22 -0
- package/dist/util/error.js.map +1 -0
- package/dist/util/index.d.ts +15 -0
- package/dist/util/index.js +54 -0
- package/dist/util/index.js.map +1 -0
- package/dist/util/item-selector-options-accessor.d.ts +3 -0
- package/dist/util/item-selector-options-accessor.js +27 -0
- package/dist/util/item-selector-options-accessor.js.map +1 -0
- package/dist/util/line-item-ref.d.ts +8 -0
- package/dist/util/line-item-ref.js +15 -0
- package/dist/util/line-item-ref.js.map +1 -0
- package/dist/util/multi-family-selector-options-accessor.d.ts +3 -0
- package/dist/util/multi-family-selector-options-accessor.js +11 -0
- package/dist/util/multi-family-selector-options-accessor.js.map +1 -0
- package/dist/util/obs-string-mutator.d.ts +8 -0
- package/dist/util/obs-string-mutator.js +15 -0
- package/dist/util/obs-string-mutator.js.map +1 -0
- package/dist/util/product-media-accessor.d.ts +29 -0
- package/dist/util/product-media-accessor.js +22 -0
- package/dist/util/product-media-accessor.js.map +1 -0
- package/dist/util/promo-codes.d.ts +3 -0
- package/dist/util/promo-codes.js +100 -0
- package/dist/util/promo-codes.js.map +1 -0
- package/dist/util/selection-ui-specifiers.d.ts +3 -0
- package/dist/util/selection-ui-specifiers.js +24 -0
- package/dist/util/selection-ui-specifiers.js.map +1 -0
- package/dist/util/square-payment.d.ts +7 -0
- package/dist/util/square-payment.js +37 -0
- package/dist/util/square-payment.js.map +1 -0
- package/dist/util/use-sync-sku-param-w-current-item.d.ts +2 -0
- package/dist/util/use-sync-sku-param-w-current-item.js +61 -0
- package/dist/util/use-sync-sku-param-w-current-item.js.map +1 -0
- package/index.ts +13 -0
- package/libreapps-ui.d.ts +108 -0
- package/package.json +67 -0
- package/service/context.tsx +45 -0
- package/service/debug.ts +41 -0
- package/service/impls/standalone/actual-line-item.ts +136 -0
- package/service/impls/standalone/get-instance.ts +64 -0
- package/service/impls/standalone/index.ts +579 -0
- package/service/impls/standalone/order/firebase.ts +14 -0
- package/service/impls/standalone/order/index.ts +129 -0
- package/service/impls/standalone/persistence.ts +33 -0
- package/service/path-utils.ts +26 -0
- package/service/sep.ts +7 -0
- package/tsconfig.json +17 -0
- package/types/README.md +2 -0
- package/types/category-node.ts +50 -0
- package/types/checkout.ts +47 -0
- package/types/commerce-config.ts +13 -0
- package/types/commerce-service.ts +128 -0
- package/types/family.ts +26 -0
- package/types/index.ts +15 -0
- package/types/item-selector.ts +97 -0
- package/types/line-item.ts +29 -0
- package/types/multi-family-selector-props.ts +20 -0
- package/types/product.ts +21 -0
- package/types/promo.ts +10 -0
- package/types/selection-ui-specifier.ts +52 -0
- package/types/string-mutator.ts +14 -0
- package/types/token-separators.ts +7 -0
- package/util/analytics.ts +21 -0
- package/util/countries.ts +196 -0
- package/util/error.ts +34 -0
- package/util/index.ts +71 -0
- package/util/item-selector-options-accessor.ts +35 -0
- package/util/line-item-ref.ts +23 -0
- package/util/multi-family-selector-options-accessor.ts +15 -0
- package/util/obs-string-mutator.ts +22 -0
- package/util/product-media-accessor.ts +58 -0
- package/util/promo-codes.ts +106 -0
- package/util/selection-ui-specifiers.ts +30 -0
- package/util/square-payment.ts +50 -0
- package/util/use-sync-sku-param-w-current-item.ts +88 -0
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import type { Promo } from '../types'
|
|
2
|
+
|
|
3
|
+
const referallCodeDiscountedSkus = [
|
|
4
|
+
'LXM-CR-B-ABT', 'LXM-CR-B-GM', 'LXM-CR-F-CC', 'LXM-CR-F-IC', 'LXM-CR-E-24G', 'LXM-CR-E-SS', 'LXM-CR-S-RT', // credit cards
|
|
5
|
+
'LXM-VL-GN', 'LXM-VL-VL', 'LXM-VL-MI', 'LXM-VL-NA', // validators
|
|
6
|
+
'LXM-PS-PS', // pass
|
|
7
|
+
'LXM-AG-B-1_OZ', // silver
|
|
8
|
+
]
|
|
9
|
+
|
|
10
|
+
const PROMO_CODES: Promo[] = [
|
|
11
|
+
{
|
|
12
|
+
type: 'percent',
|
|
13
|
+
code: 'ANGEL',
|
|
14
|
+
value: 22
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
type: 'percent',
|
|
18
|
+
code: 'NASSER',
|
|
19
|
+
value: 11.11
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
type: 'percent',
|
|
23
|
+
code: 'ROSEY',
|
|
24
|
+
value: 20
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
type: 'percent',
|
|
28
|
+
code: 'IYKYK',
|
|
29
|
+
value: 11.1
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
type: 'percent',
|
|
33
|
+
code: 'GENESIS',
|
|
34
|
+
value: 99,
|
|
35
|
+
skus: ['LXM-PS-PS']
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
type: 'percent',
|
|
39
|
+
code: 'ANTJE',
|
|
40
|
+
value: 33.3,
|
|
41
|
+
skus: referallCodeDiscountedSkus
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
type: 'percent',
|
|
45
|
+
code: 'ASHLEY',
|
|
46
|
+
value: 33.3,
|
|
47
|
+
skus: referallCodeDiscountedSkus
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
type: 'percent',
|
|
51
|
+
code: 'CALE',
|
|
52
|
+
value: 33.3,
|
|
53
|
+
skus: referallCodeDiscountedSkus
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
type: 'percent',
|
|
57
|
+
code: 'DARA',
|
|
58
|
+
value: 33.3,
|
|
59
|
+
skus: referallCodeDiscountedSkus
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
type: 'percent',
|
|
63
|
+
code: 'KENJI',
|
|
64
|
+
value: 33.3,
|
|
65
|
+
skus: referallCodeDiscountedSkus
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
type: 'percent',
|
|
69
|
+
code: 'MAJOR',
|
|
70
|
+
value: 33.3,
|
|
71
|
+
skus: referallCodeDiscountedSkus
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
type: 'percent',
|
|
75
|
+
code: 'CYRUS',
|
|
76
|
+
value: 33.3,
|
|
77
|
+
skus: referallCodeDiscountedSkus
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
type: 'percent',
|
|
81
|
+
code: 'STOBIE',
|
|
82
|
+
value: 33.3,
|
|
83
|
+
skus: referallCodeDiscountedSkus
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
type: 'percent',
|
|
87
|
+
code: 'SKYLER',
|
|
88
|
+
value: 33.3,
|
|
89
|
+
skus: referallCodeDiscountedSkus
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
type: 'percent',
|
|
93
|
+
code: 'ZEEKAY',
|
|
94
|
+
value: 33.3,
|
|
95
|
+
skus: referallCodeDiscountedSkus
|
|
96
|
+
}
|
|
97
|
+
]
|
|
98
|
+
|
|
99
|
+
// TODO: implement a real API call
|
|
100
|
+
const getPromoFromApi = async (code: string) => {
|
|
101
|
+
return PROMO_CODES.find(promo => promo.code === code)
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
export {
|
|
105
|
+
getPromoFromApi as default
|
|
106
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { SelectionUISpecifier } from '../types'
|
|
2
|
+
import sep from '../service/sep'
|
|
3
|
+
|
|
4
|
+
const DEFAULT = {
|
|
5
|
+
multiFamily: {
|
|
6
|
+
type: 'all-variants-carousel'
|
|
7
|
+
},
|
|
8
|
+
singleFamily: { type: 'carousel' }
|
|
9
|
+
} satisfies SelectionUISpecifier
|
|
10
|
+
|
|
11
|
+
const map = new Map<string, SelectionUISpecifier>()
|
|
12
|
+
|
|
13
|
+
// key: first two tokens of path
|
|
14
|
+
export const initSelectionUI = (v: Record<string, SelectionUISpecifier>) => {
|
|
15
|
+
|
|
16
|
+
// Might have multiple calls client and server side
|
|
17
|
+
if (map.size > 0) {
|
|
18
|
+
map.clear()
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
for (let [key, value] of Object.entries(v)) {
|
|
22
|
+
map.set(key, value)
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export const getSelectionUISpecifier = (skuPath: string): SelectionUISpecifier => {
|
|
27
|
+
const key = skuPath.split(sep.tok).slice(0, 2).join(sep.tok)
|
|
28
|
+
const result = map.get(key)
|
|
29
|
+
return result ?? DEFAULT
|
|
30
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
// Payment processing - requires API endpoint
|
|
2
|
+
// For static builds, this will call an external payment API
|
|
3
|
+
|
|
4
|
+
// https://developer.squareup.com/blog/online-payments-with-square-and-react/
|
|
5
|
+
declare global {
|
|
6
|
+
interface BigInt {
|
|
7
|
+
toJSON(): string;
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
BigInt.prototype.toJSON = function() { return this.toString(); }
|
|
12
|
+
|
|
13
|
+
const processPayment = async (sourceId: string, amount: number, verificationToken: string) => {
|
|
14
|
+
// For static builds, payments should be processed via an API endpoint
|
|
15
|
+
// Check if we're in a browser environment
|
|
16
|
+
if (typeof window !== 'undefined') {
|
|
17
|
+
// Client-side: call the payment API
|
|
18
|
+
try {
|
|
19
|
+
const response = await fetch('/api/payment', {
|
|
20
|
+
method: 'POST',
|
|
21
|
+
headers: {
|
|
22
|
+
'Content-Type': 'application/json',
|
|
23
|
+
},
|
|
24
|
+
body: JSON.stringify({
|
|
25
|
+
sourceId,
|
|
26
|
+
amount,
|
|
27
|
+
verificationToken
|
|
28
|
+
})
|
|
29
|
+
})
|
|
30
|
+
|
|
31
|
+
if (!response.ok) {
|
|
32
|
+
console.error('Payment API error:', response.statusText)
|
|
33
|
+
return null
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
return await response.json()
|
|
37
|
+
} catch (error) {
|
|
38
|
+
console.error('Error processing payment:', error)
|
|
39
|
+
return null
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
// Server-side (for SSR builds only, not static export)
|
|
44
|
+
console.warn('Server-side payment processing not available in static export')
|
|
45
|
+
return null
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
export {
|
|
49
|
+
processPayment as default
|
|
50
|
+
}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
"use client"
|
|
2
|
+
import { useEffect } from 'react'
|
|
3
|
+
import { reaction } from 'mobx'
|
|
4
|
+
|
|
5
|
+
import {
|
|
6
|
+
useQueryState,
|
|
7
|
+
parseAsString,
|
|
8
|
+
parseAsBoolean,
|
|
9
|
+
} from 'next-usequerystate'
|
|
10
|
+
|
|
11
|
+
import { useCommerce } from '../service/context'
|
|
12
|
+
import type { SelectedPaths } from '../types'
|
|
13
|
+
import sep from '../service/sep'
|
|
14
|
+
|
|
15
|
+
const PLEASE_SELECT_FACETS = 'Please select an option from each group.'
|
|
16
|
+
|
|
17
|
+
const useSyncSkuParamWithCurrentItem = (
|
|
18
|
+
familyLevel: number,
|
|
19
|
+
setMessage: (m: string | undefined) => void,
|
|
20
|
+
setLoading?: (l: boolean) => void
|
|
21
|
+
) => {
|
|
22
|
+
|
|
23
|
+
const cmmc = useCommerce()
|
|
24
|
+
|
|
25
|
+
const [skuParam, setSkuParam] = useQueryState('sku',
|
|
26
|
+
parseAsString.withDefault('').withOptions({ clearOnDefault: true })
|
|
27
|
+
)
|
|
28
|
+
|
|
29
|
+
const [addParam, setAddParam] = useQueryState('add',
|
|
30
|
+
parseAsBoolean.withDefault(false).withOptions({ clearOnDefault: true })
|
|
31
|
+
)
|
|
32
|
+
|
|
33
|
+
useEffect(() => {
|
|
34
|
+
|
|
35
|
+
return reaction(() => ({
|
|
36
|
+
specifiedCat: cmmc.selectedFamilies.length === 1 ? cmmc.selectedFamilies[0] : undefined,
|
|
37
|
+
currentItem: cmmc.currentItem
|
|
38
|
+
}),
|
|
39
|
+
({specifiedCat, currentItem}) => {
|
|
40
|
+
//console.log("REACTION: " + `CAT ID: ${family?.id} SKU: ${item?.sku}`)
|
|
41
|
+
if (currentItem) {
|
|
42
|
+
// if we set the currentItem w sku, then user selects other facets
|
|
43
|
+
if (specifiedCat && currentItem.familyId != specifiedCat.id ) {
|
|
44
|
+
cmmc.setCurrentItem(specifiedCat.products[0].sku)
|
|
45
|
+
}
|
|
46
|
+
setSkuParam(cmmc.currentItem!.sku)
|
|
47
|
+
}
|
|
48
|
+
else if (specifiedCat) {
|
|
49
|
+
cmmc.setCurrentItem(specifiedCat.products[0].sku)
|
|
50
|
+
setSkuParam(cmmc.currentItem!.sku)
|
|
51
|
+
}
|
|
52
|
+
})
|
|
53
|
+
}, [])
|
|
54
|
+
|
|
55
|
+
useEffect(() => {
|
|
56
|
+
|
|
57
|
+
const setCurrentFamilyFromSku = (sku: string) => {
|
|
58
|
+
const toks: string[] = sku.split(sep.tok)
|
|
59
|
+
const fv: SelectedPaths = {}
|
|
60
|
+
// TODO: confirm that extra trailing nonsense tokens won't break selectPaths()
|
|
61
|
+
for (let i = 1; i < familyLevel; i++) {
|
|
62
|
+
if (i in toks) {
|
|
63
|
+
fv[i] = [toks[i]]
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
cmmc.selectPaths(fv)
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
// setCI returns true if it's a recognized sku
|
|
70
|
+
if (skuParam && cmmc.setCurrentItem(skuParam)) {
|
|
71
|
+
if (addParam) {
|
|
72
|
+
if (cmmc.currentItem!.quantity === 0) {
|
|
73
|
+
cmmc.currentItem!.increment()
|
|
74
|
+
}
|
|
75
|
+
setAddParam(false)
|
|
76
|
+
}
|
|
77
|
+
setCurrentFamilyFromSku(skuParam)
|
|
78
|
+
setMessage(undefined)
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
setMessage(PLEASE_SELECT_FACETS)
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
setLoading && setLoading(false)
|
|
85
|
+
}, [skuParam])
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
export default useSyncSkuParamWithCurrentItem
|