@shopify/hydrogen-react 0.0.0-next-29ed1ff → 0.0.0-next-585a03d
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/dev/AddToCartButton.js +4 -4
- package/dist/dev/AddToCartButton.js.map +1 -1
- package/dist/dev/BaseButton.js +2 -2
- package/dist/dev/BaseButton.js.map +1 -1
- package/dist/dev/BuyNowButton.js +45 -0
- package/dist/dev/BuyNowButton.js.map +1 -0
- package/dist/dev/BuyNowButton.mjs +45 -0
- package/dist/dev/BuyNowButton.mjs.map +1 -0
- package/dist/dev/CartCheckoutButton.js +3 -3
- package/dist/dev/CartCheckoutButton.js.map +1 -1
- package/dist/dev/CartProvider.js +20 -20
- package/dist/dev/CartProvider.js.map +1 -1
- package/dist/dev/Metafield.js +2 -2
- package/dist/dev/Metafield.js.map +1 -1
- package/dist/dev/ModelViewer.js +4 -4
- package/dist/dev/ModelViewer.js.map +1 -1
- package/dist/dev/ProductProvider.js +14 -14
- package/dist/dev/ProductProvider.js.map +1 -1
- package/dist/dev/ShopifyProvider.js +4 -4
- package/dist/dev/ShopifyProvider.js.map +1 -1
- package/dist/dev/Video.js +2 -2
- package/dist/dev/_virtual/index.js +5 -0
- package/dist/dev/_virtual/index.js.map +1 -0
- package/dist/dev/_virtual/index.mjs +5 -0
- package/dist/dev/_virtual/index.mjs.map +1 -0
- package/dist/dev/_virtual/use-sync-external-store-shim.development.js +5 -0
- package/dist/dev/_virtual/use-sync-external-store-shim.development.js.map +1 -0
- package/dist/dev/_virtual/use-sync-external-store-shim.development.mjs +5 -0
- package/dist/dev/_virtual/use-sync-external-store-shim.development.mjs.map +1 -0
- package/dist/dev/_virtual/use-sync-external-store-shim.production.min.js +5 -0
- package/dist/dev/_virtual/use-sync-external-store-shim.production.min.js.map +1 -0
- package/dist/dev/_virtual/use-sync-external-store-shim.production.min.mjs +5 -0
- package/dist/dev/_virtual/use-sync-external-store-shim.production.min.mjs.map +1 -0
- package/dist/dev/_virtual/with-selector.development.js +5 -0
- package/dist/dev/_virtual/with-selector.development.js.map +1 -0
- package/dist/dev/_virtual/with-selector.development.mjs +5 -0
- package/dist/dev/_virtual/with-selector.development.mjs.map +1 -0
- package/dist/dev/_virtual/with-selector.js +5 -0
- package/dist/dev/_virtual/with-selector.js.map +1 -0
- package/dist/dev/_virtual/with-selector.mjs +5 -0
- package/dist/dev/_virtual/with-selector.mjs.map +1 -0
- package/dist/dev/_virtual/with-selector.production.min.js +5 -0
- package/dist/dev/_virtual/with-selector.production.min.js.map +1 -0
- package/dist/dev/_virtual/with-selector.production.min.mjs +5 -0
- package/dist/dev/_virtual/with-selector.production.min.mjs.map +1 -0
- package/dist/dev/cart-hooks.js +2 -2
- package/dist/dev/cart-hooks.js.map +1 -1
- package/dist/dev/index.js +2 -0
- package/dist/dev/index.js.map +1 -1
- package/dist/dev/index.mjs +2 -0
- package/dist/dev/index.mjs.map +1 -1
- package/dist/dev/load-script.js +3 -3
- package/dist/dev/load-script.js.map +1 -1
- package/dist/dev/node_modules/@xstate/fsm/es/index.js +158 -0
- package/dist/dev/node_modules/@xstate/fsm/es/index.js.map +1 -0
- package/dist/dev/node_modules/@xstate/fsm/es/index.mjs +159 -0
- package/dist/dev/node_modules/@xstate/fsm/es/index.mjs.map +1 -0
- package/dist/dev/node_modules/@xstate/react/es/fsm.js +94 -0
- package/dist/dev/node_modules/@xstate/react/es/fsm.js.map +1 -0
- package/dist/dev/node_modules/@xstate/react/es/fsm.mjs +94 -0
- package/dist/dev/node_modules/@xstate/react/es/fsm.mjs.map +1 -0
- package/dist/dev/node_modules/@xstate/react/es/useConstant.js +30 -0
- package/dist/dev/node_modules/@xstate/react/es/useConstant.js.map +1 -0
- package/dist/dev/node_modules/@xstate/react/es/useConstant.mjs +12 -0
- package/dist/dev/node_modules/@xstate/react/es/useConstant.mjs.map +1 -0
- package/dist/dev/node_modules/use-isomorphic-layout-effect/dist/use-isomorphic-layout-effect.browser.esm.js +5 -0
- package/dist/dev/node_modules/use-isomorphic-layout-effect/dist/use-isomorphic-layout-effect.browser.esm.js.map +1 -0
- package/dist/dev/node_modules/use-isomorphic-layout-effect/dist/use-isomorphic-layout-effect.browser.esm.mjs +6 -0
- package/dist/dev/node_modules/use-isomorphic-layout-effect/dist/use-isomorphic-layout-effect.browser.esm.mjs.map +1 -0
- package/dist/dev/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.js +107 -0
- package/dist/dev/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.js.map +1 -0
- package/dist/dev/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.mjs +105 -0
- package/dist/dev/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.mjs.map +1 -0
- package/dist/dev/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.production.min.js +74 -0
- package/dist/dev/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.production.min.js.map +1 -0
- package/dist/dev/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.production.min.mjs +72 -0
- package/dist/dev/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.production.min.mjs.map +1 -0
- package/dist/dev/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js +138 -0
- package/dist/dev/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js.map +1 -0
- package/dist/dev/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.mjs +136 -0
- package/dist/dev/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.mjs.map +1 -0
- package/dist/dev/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.min.js +60 -0
- package/dist/dev/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.min.js.map +1 -0
- package/dist/dev/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.min.mjs +58 -0
- package/dist/dev/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.min.mjs.map +1 -0
- package/dist/dev/node_modules/use-sync-external-store/shim/index.js +21 -0
- package/dist/dev/node_modules/use-sync-external-store/shim/index.js.map +1 -0
- package/dist/dev/node_modules/use-sync-external-store/shim/index.mjs +21 -0
- package/dist/dev/node_modules/use-sync-external-store/shim/index.mjs.map +1 -0
- package/dist/dev/node_modules/use-sync-external-store/shim/with-selector.js +12 -0
- package/dist/dev/node_modules/use-sync-external-store/shim/with-selector.js.map +1 -0
- package/dist/dev/node_modules/use-sync-external-store/shim/with-selector.mjs +11 -0
- package/dist/dev/node_modules/use-sync-external-store/shim/with-selector.mjs.map +1 -0
- package/dist/dev/useCartAPIStateMachine.js +12 -12
- package/dist/dev/useCartAPIStateMachine.js.map +1 -1
- package/dist/dev/useCartAPIStateMachine.mjs +8 -8
- package/dist/dev/useCartAPIStateMachine.mjs.map +1 -1
- package/dist/dev/useCartActions.js +11 -11
- package/dist/dev/useCartActions.js.map +1 -1
- package/dist/dev/useMoney.js +5 -5
- package/dist/dev/useMoney.js.map +1 -1
- package/dist/prod/AddToCartButton.js +4 -4
- package/dist/prod/AddToCartButton.js.map +1 -1
- package/dist/prod/BaseButton.js +2 -2
- package/dist/prod/BaseButton.js.map +1 -1
- package/dist/prod/BuyNowButton.js +45 -0
- package/dist/prod/BuyNowButton.js.map +1 -0
- package/dist/prod/BuyNowButton.mjs +45 -0
- package/dist/prod/BuyNowButton.mjs.map +1 -0
- package/dist/prod/CartCheckoutButton.js +3 -3
- package/dist/prod/CartCheckoutButton.js.map +1 -1
- package/dist/prod/CartProvider.js +20 -20
- package/dist/prod/CartProvider.js.map +1 -1
- package/dist/prod/Metafield.js +2 -2
- package/dist/prod/Metafield.js.map +1 -1
- package/dist/prod/ModelViewer.js +4 -4
- package/dist/prod/ModelViewer.js.map +1 -1
- package/dist/prod/ProductProvider.js +14 -14
- package/dist/prod/ProductProvider.js.map +1 -1
- package/dist/prod/ShopifyProvider.js +4 -4
- package/dist/prod/ShopifyProvider.js.map +1 -1
- package/dist/prod/Video.js +2 -2
- package/dist/prod/_virtual/index.js +5 -0
- package/dist/prod/_virtual/index.js.map +1 -0
- package/dist/prod/_virtual/index.mjs +5 -0
- package/dist/prod/_virtual/index.mjs.map +1 -0
- package/dist/prod/_virtual/use-sync-external-store-shim.development.js +5 -0
- package/dist/prod/_virtual/use-sync-external-store-shim.development.js.map +1 -0
- package/dist/prod/_virtual/use-sync-external-store-shim.development.mjs +5 -0
- package/dist/prod/_virtual/use-sync-external-store-shim.development.mjs.map +1 -0
- package/dist/prod/_virtual/use-sync-external-store-shim.production.min.js +5 -0
- package/dist/prod/_virtual/use-sync-external-store-shim.production.min.js.map +1 -0
- package/dist/prod/_virtual/use-sync-external-store-shim.production.min.mjs +5 -0
- package/dist/prod/_virtual/use-sync-external-store-shim.production.min.mjs.map +1 -0
- package/dist/prod/_virtual/with-selector.development.js +5 -0
- package/dist/prod/_virtual/with-selector.development.js.map +1 -0
- package/dist/prod/_virtual/with-selector.development.mjs +5 -0
- package/dist/prod/_virtual/with-selector.development.mjs.map +1 -0
- package/dist/prod/_virtual/with-selector.js +5 -0
- package/dist/prod/_virtual/with-selector.js.map +1 -0
- package/dist/prod/_virtual/with-selector.mjs +5 -0
- package/dist/prod/_virtual/with-selector.mjs.map +1 -0
- package/dist/prod/_virtual/with-selector.production.min.js +5 -0
- package/dist/prod/_virtual/with-selector.production.min.js.map +1 -0
- package/dist/prod/_virtual/with-selector.production.min.mjs +5 -0
- package/dist/prod/_virtual/with-selector.production.min.mjs.map +1 -0
- package/dist/prod/cart-hooks.js +2 -2
- package/dist/prod/cart-hooks.js.map +1 -1
- package/dist/prod/index.js +2 -0
- package/dist/prod/index.js.map +1 -1
- package/dist/prod/index.mjs +2 -0
- package/dist/prod/index.mjs.map +1 -1
- package/dist/prod/load-script.js +3 -3
- package/dist/prod/load-script.js.map +1 -1
- package/dist/prod/node_modules/@xstate/fsm/es/index.js +158 -0
- package/dist/prod/node_modules/@xstate/fsm/es/index.js.map +1 -0
- package/dist/prod/node_modules/@xstate/fsm/es/index.mjs +159 -0
- package/dist/prod/node_modules/@xstate/fsm/es/index.mjs.map +1 -0
- package/dist/prod/node_modules/@xstate/react/es/fsm.js +94 -0
- package/dist/prod/node_modules/@xstate/react/es/fsm.js.map +1 -0
- package/dist/prod/node_modules/@xstate/react/es/fsm.mjs +94 -0
- package/dist/prod/node_modules/@xstate/react/es/fsm.mjs.map +1 -0
- package/dist/prod/node_modules/@xstate/react/es/useConstant.js +30 -0
- package/dist/prod/node_modules/@xstate/react/es/useConstant.js.map +1 -0
- package/dist/prod/node_modules/@xstate/react/es/useConstant.mjs +12 -0
- package/dist/prod/node_modules/@xstate/react/es/useConstant.mjs.map +1 -0
- package/dist/prod/node_modules/use-isomorphic-layout-effect/dist/use-isomorphic-layout-effect.browser.esm.js +5 -0
- package/dist/prod/node_modules/use-isomorphic-layout-effect/dist/use-isomorphic-layout-effect.browser.esm.js.map +1 -0
- package/dist/prod/node_modules/use-isomorphic-layout-effect/dist/use-isomorphic-layout-effect.browser.esm.mjs +6 -0
- package/dist/prod/node_modules/use-isomorphic-layout-effect/dist/use-isomorphic-layout-effect.browser.esm.mjs.map +1 -0
- package/dist/prod/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.js +107 -0
- package/dist/prod/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.js.map +1 -0
- package/dist/prod/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.mjs +105 -0
- package/dist/prod/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.mjs.map +1 -0
- package/dist/prod/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.production.min.js +74 -0
- package/dist/prod/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.production.min.js.map +1 -0
- package/dist/prod/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.production.min.mjs +72 -0
- package/dist/prod/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.production.min.mjs.map +1 -0
- package/dist/prod/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js +138 -0
- package/dist/prod/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js.map +1 -0
- package/dist/prod/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.mjs +136 -0
- package/dist/prod/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.mjs.map +1 -0
- package/dist/prod/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.min.js +60 -0
- package/dist/prod/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.min.js.map +1 -0
- package/dist/prod/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.min.mjs +58 -0
- package/dist/prod/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.min.mjs.map +1 -0
- package/dist/prod/node_modules/use-sync-external-store/shim/index.js +21 -0
- package/dist/prod/node_modules/use-sync-external-store/shim/index.js.map +1 -0
- package/dist/prod/node_modules/use-sync-external-store/shim/index.mjs +21 -0
- package/dist/prod/node_modules/use-sync-external-store/shim/index.mjs.map +1 -0
- package/dist/prod/node_modules/use-sync-external-store/shim/with-selector.js +12 -0
- package/dist/prod/node_modules/use-sync-external-store/shim/with-selector.js.map +1 -0
- package/dist/prod/node_modules/use-sync-external-store/shim/with-selector.mjs +11 -0
- package/dist/prod/node_modules/use-sync-external-store/shim/with-selector.mjs.map +1 -0
- package/dist/prod/useCartAPIStateMachine.js +12 -12
- package/dist/prod/useCartAPIStateMachine.js.map +1 -1
- package/dist/prod/useCartAPIStateMachine.mjs +8 -8
- package/dist/prod/useCartAPIStateMachine.mjs.map +1 -1
- package/dist/prod/useCartActions.js +11 -11
- package/dist/prod/useCartActions.js.map +1 -1
- package/dist/prod/useMoney.js +5 -5
- package/dist/prod/useMoney.js.map +1 -1
- package/dist/types/BuyNowButton.d.ts +15 -0
- package/dist/types/index.d.cts +1 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/umd/hydrogen-react.dev.js +55 -11
- package/dist/umd/hydrogen-react.dev.js.map +1 -1
- package/dist/umd/hydrogen-react.prod.js +9 -9
- package/dist/umd/hydrogen-react.prod.js.map +1 -1
- package/package.json +7 -2
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
|
|
3
|
-
const
|
|
3
|
+
const require$$0 = require("react");
|
|
4
4
|
const CartProvider = require("./CartProvider.js");
|
|
5
5
|
const ProductProvider = require("./ProductProvider.js");
|
|
6
6
|
const BaseButton = require("./BaseButton.js");
|
|
7
7
|
const jsxRuntime = require("react/jsx-runtime");
|
|
8
8
|
function AddToCartButton(props) {
|
|
9
9
|
var _a;
|
|
10
|
-
const [addingItem, setAddingItem] =
|
|
10
|
+
const [addingItem, setAddingItem] = require$$0.useState(false);
|
|
11
11
|
const {
|
|
12
12
|
variantId: explicitVariantId,
|
|
13
13
|
quantity = 1,
|
|
@@ -27,12 +27,12 @@ function AddToCartButton(props) {
|
|
|
27
27
|
} = ProductProvider.useProduct();
|
|
28
28
|
const variantId = (_a = explicitVariantId != null ? explicitVariantId : selectedVariant == null ? void 0 : selectedVariant.id) != null ? _a : "";
|
|
29
29
|
const disabled = explicitVariantId === null || variantId === "" || selectedVariant === null || addingItem || passthroughProps.disabled;
|
|
30
|
-
|
|
30
|
+
require$$0.useEffect(() => {
|
|
31
31
|
if (addingItem && status === "idle") {
|
|
32
32
|
setAddingItem(false);
|
|
33
33
|
}
|
|
34
34
|
}, [status, addingItem]);
|
|
35
|
-
const handleAddItem =
|
|
35
|
+
const handleAddItem = require$$0.useCallback(() => {
|
|
36
36
|
setAddingItem(true);
|
|
37
37
|
linesAdd([{
|
|
38
38
|
quantity,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AddToCartButton.js","sources":["../../src/AddToCartButton.tsx"],"sourcesContent":["import {useCallback, useEffect, useState} from 'react';\n\nimport {useCart} from './CartProvider.js';\nimport {useProduct} from './ProductProvider.js';\nimport {BaseButton, BaseButtonProps} from './BaseButton.js';\n\ninterface AddToCartButtonProps {\n /** An array of cart line attributes that belong to the item being added to the cart. */\n attributes?: {\n key: string;\n value: string;\n }[];\n /** The ID of the variant. */\n variantId?: string | null;\n /** The item quantity. */\n quantity?: number;\n /** The text that is announced by the screen reader when the item is being added to the cart. Used for accessibility purposes only and not displayed on the page. */\n accessibleAddingToCartLabel?: string;\n /** The selling plan ID of the subscription variant */\n sellingPlanId?: string;\n}\n\n/**\n * The `AddToCartButton` component renders a button that adds an item to the cart when pressed.\n * It must be a descendent of the `CartProvider` component.\n */\nexport function AddToCartButton<AsType extends React.ElementType = 'button'>(\n props: AddToCartButtonProps & BaseButtonProps<AsType>\n) {\n const [addingItem, setAddingItem] = useState<boolean>(false);\n const {\n variantId: explicitVariantId,\n quantity = 1,\n attributes,\n sellingPlanId,\n onClick,\n children,\n accessibleAddingToCartLabel,\n ...passthroughProps\n } = props;\n const {status, linesAdd} = useCart();\n const {selectedVariant} = useProduct();\n const variantId = explicitVariantId ?? selectedVariant?.id ?? '';\n const disabled =\n explicitVariantId === null ||\n variantId === '' ||\n selectedVariant === null ||\n addingItem ||\n passthroughProps.disabled;\n\n useEffect(() => {\n if (addingItem && status === 'idle') {\n setAddingItem(false);\n }\n }, [status, addingItem]);\n\n const handleAddItem = useCallback(() => {\n setAddingItem(true);\n linesAdd([\n {\n quantity,\n merchandiseId: variantId || '',\n attributes,\n sellingPlanId,\n },\n ]);\n }, [linesAdd, quantity, variantId, attributes, sellingPlanId]);\n\n return (\n <>\n <BaseButton\n {...passthroughProps}\n disabled={disabled}\n onClick={onClick}\n defaultOnClick={handleAddItem}\n >\n {children}\n </BaseButton>\n {accessibleAddingToCartLabel ? (\n <p\n style={{\n position: 'absolute',\n width: '1px',\n height: '1px',\n padding: '0',\n margin: '-1px',\n overflow: 'hidden',\n clip: 'rect(0, 0, 0, 0)',\n whiteSpace: 'nowrap',\n borderWidth: '0',\n }}\n role=\"alert\"\n aria-live=\"assertive\"\n >\n {addingItem ? accessibleAddingToCartLabel : null}\n </p>\n ) : null}\n </>\n );\n}\n"],"names":["AddToCartButton","props","addingItem","setAddingItem","useState","variantId","explicitVariantId","quantity","attributes","sellingPlanId","onClick","children","accessibleAddingToCartLabel","passthroughProps","status","linesAdd","useCart","selectedVariant","useProduct","id","disabled","useEffect","handleAddItem","useCallback","merchandiseId","_Fragment","_jsx","BaseButton","position","width","height","padding","margin","overflow","clip","whiteSpace","borderWidth"],"mappings":";;;;;;;AA0BO,SAASA,gBACdC,OACA;;AACA,QAAM,CAACC,YAAYC,aAAb,IAA8BC,
|
|
1
|
+
{"version":3,"file":"AddToCartButton.js","sources":["../../src/AddToCartButton.tsx"],"sourcesContent":["import {useCallback, useEffect, useState} from 'react';\n\nimport {useCart} from './CartProvider.js';\nimport {useProduct} from './ProductProvider.js';\nimport {BaseButton, BaseButtonProps} from './BaseButton.js';\n\ninterface AddToCartButtonProps {\n /** An array of cart line attributes that belong to the item being added to the cart. */\n attributes?: {\n key: string;\n value: string;\n }[];\n /** The ID of the variant. */\n variantId?: string | null;\n /** The item quantity. */\n quantity?: number;\n /** The text that is announced by the screen reader when the item is being added to the cart. Used for accessibility purposes only and not displayed on the page. */\n accessibleAddingToCartLabel?: string;\n /** The selling plan ID of the subscription variant */\n sellingPlanId?: string;\n}\n\n/**\n * The `AddToCartButton` component renders a button that adds an item to the cart when pressed.\n * It must be a descendent of the `CartProvider` component.\n */\nexport function AddToCartButton<AsType extends React.ElementType = 'button'>(\n props: AddToCartButtonProps & BaseButtonProps<AsType>\n) {\n const [addingItem, setAddingItem] = useState<boolean>(false);\n const {\n variantId: explicitVariantId,\n quantity = 1,\n attributes,\n sellingPlanId,\n onClick,\n children,\n accessibleAddingToCartLabel,\n ...passthroughProps\n } = props;\n const {status, linesAdd} = useCart();\n const {selectedVariant} = useProduct();\n const variantId = explicitVariantId ?? selectedVariant?.id ?? '';\n const disabled =\n explicitVariantId === null ||\n variantId === '' ||\n selectedVariant === null ||\n addingItem ||\n passthroughProps.disabled;\n\n useEffect(() => {\n if (addingItem && status === 'idle') {\n setAddingItem(false);\n }\n }, [status, addingItem]);\n\n const handleAddItem = useCallback(() => {\n setAddingItem(true);\n linesAdd([\n {\n quantity,\n merchandiseId: variantId || '',\n attributes,\n sellingPlanId,\n },\n ]);\n }, [linesAdd, quantity, variantId, attributes, sellingPlanId]);\n\n return (\n <>\n <BaseButton\n {...passthroughProps}\n disabled={disabled}\n onClick={onClick}\n defaultOnClick={handleAddItem}\n >\n {children}\n </BaseButton>\n {accessibleAddingToCartLabel ? (\n <p\n style={{\n position: 'absolute',\n width: '1px',\n height: '1px',\n padding: '0',\n margin: '-1px',\n overflow: 'hidden',\n clip: 'rect(0, 0, 0, 0)',\n whiteSpace: 'nowrap',\n borderWidth: '0',\n }}\n role=\"alert\"\n aria-live=\"assertive\"\n >\n {addingItem ? accessibleAddingToCartLabel : null}\n </p>\n ) : null}\n </>\n );\n}\n"],"names":["AddToCartButton","props","addingItem","setAddingItem","useState","variantId","explicitVariantId","quantity","attributes","sellingPlanId","onClick","children","accessibleAddingToCartLabel","passthroughProps","status","linesAdd","useCart","selectedVariant","useProduct","id","disabled","useEffect","handleAddItem","useCallback","merchandiseId","_Fragment","_jsx","BaseButton","position","width","height","padding","margin","overflow","clip","whiteSpace","borderWidth"],"mappings":";;;;;;;AA0BO,SAASA,gBACdC,OACA;;AACA,QAAM,CAACC,YAAYC,aAAb,IAA8BC,oBAAkB,KAAV;AACtC,QAAA;AAAA,IACJC,WAAWC;AAAAA,IACXC,WAAW;AAAA,IACXC;AAAAA,IACAC;AAAAA,IACAC;AAAAA,IACAC;AAAAA,IACAC;AAAAA,OACGC;AAAAA,EACDZ,IAAAA;AACE,QAAA;AAAA,IAACa;AAAAA,IAAQC;AAAAA,MAAYC,aAA3B,QAAA;AACM,QAAA;AAAA,IAACC;AAAAA,MAAmBC,gBAA1B,WAAA;AACMb,QAAAA,aAAYC,qDAAqBW,mDAAiBE,OAAtCb,YAA4C;AACxDc,QAAAA,WACJd,sBAAsB,QACtBD,cAAc,MACdY,oBAAoB,QACpBf,cACAW,iBAAiBO;AAEnBC,aAAAA,UAAU,MAAM;AACVnB,QAAAA,cAAcY,WAAW,QAAQ;AACnCX,oBAAc,KAAD;AAAA,IACd;AAAA,EAAA,GACA,CAACW,QAAQZ,UAAT,CAJM;AAMHoB,QAAAA,gBAAgBC,WAAAA,YAAY,MAAM;AACtCpB,kBAAc,IAAD;AACbY,aAAS,CACP;AAAA,MACER;AAAAA,MACAiB,eAAenB,aAAa;AAAA,MAC5BG;AAAAA,MACAC;AAAAA,IALK,CAAA,CAAD;AAAA,EAAA,GAQP,CAACM,UAAUR,UAAUF,WAAWG,YAAYC,aAA5C,CAV8B;AAYjC,yCACEgB,WAAAA,UAAA;AAAA,IAAA,UACE,CAAAC,2BAAA,IAACC,uBAAD;AAAA,MAAA,GACMd;AAAAA,MACJ;AAAA,MACA;AAAA,MACA,gBAAgBS;AAAAA,MAJlB;AAAA,IAAA,CADF,GASGV,8BACCc,2BAAA,IAAA,KAAA;AAAA,MACE,OAAO;AAAA,QACLE,UAAU;AAAA,QACVC,OAAO;AAAA,QACPC,QAAQ;AAAA,QACRC,SAAS;AAAA,QACTC,QAAQ;AAAA,QACRC,UAAU;AAAA,QACVC,MAAM;AAAA,QACNC,YAAY;AAAA,QACZC,aAAa;AAAA,MATR;AAAA,MAWP,MAAK;AAAA,MACL,aAAU;AAAA,MAbZ,UAeGlC,aAAaU,8BAA8B;AAAA,IAf9C,CAAA,IAiBE,IA3BN;AAAA,EAAA,CADF;AA+BD;;"}
|
package/dist/dev/BaseButton.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
|
|
3
|
-
const
|
|
3
|
+
const require$$0 = require("react");
|
|
4
4
|
const jsxRuntime = require("react/jsx-runtime");
|
|
5
5
|
function BaseButton(props) {
|
|
6
6
|
const {
|
|
@@ -11,7 +11,7 @@ function BaseButton(props) {
|
|
|
11
11
|
buttonRef,
|
|
12
12
|
...passthroughProps
|
|
13
13
|
} = props;
|
|
14
|
-
const handleOnClick =
|
|
14
|
+
const handleOnClick = require$$0.useCallback((event) => {
|
|
15
15
|
if (onClick) {
|
|
16
16
|
const clickShouldContinue = onClick(event);
|
|
17
17
|
if (typeof clickShouldContinue === "boolean" && clickShouldContinue === false || (event == null ? void 0 : event.defaultPrevented))
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BaseButton.js","sources":["../../src/BaseButton.tsx"],"sourcesContent":["import {ReactNode, Ref, useCallback} from 'react';\n\nexport interface CustomBaseButtonProps<AsType> {\n /** Provide a React element or component to render as the underlying button. Note: for accessibility compliance, almost always you should use a `button` element, or a component that renders an underlying button. */\n as?: AsType;\n /** Any ReactNode elements. */\n children: ReactNode;\n /** Click event handler. Default behaviour triggers unless prevented */\n onClick?: (\n event?: React.MouseEvent<HTMLButtonElement, MouseEvent>\n ) => void | boolean;\n /** A default onClick behavior */\n defaultOnClick?: (\n event?: React.MouseEvent<HTMLButtonElement, MouseEvent>\n ) => void | boolean;\n /** A ref to the underlying button */\n buttonRef?: Ref<HTMLButtonElement>;\n}\n\nexport type BaseButtonProps<AsType extends React.ElementType> =\n CustomBaseButtonProps<AsType> &\n Omit<\n React.ComponentPropsWithoutRef<AsType>,\n keyof CustomBaseButtonProps<AsType>\n >;\n\nexport function BaseButton<AsType extends React.ElementType = 'button'>(\n props: BaseButtonProps<AsType>\n) {\n const {\n as,\n onClick,\n defaultOnClick,\n children,\n buttonRef,\n ...passthroughProps\n } = props;\n\n const handleOnClick = useCallback(\n (event?: React.MouseEvent<HTMLButtonElement, MouseEvent>) => {\n if (onClick) {\n const clickShouldContinue = onClick(event);\n if (\n (typeof clickShouldContinue === 'boolean' &&\n clickShouldContinue === false) ||\n event?.defaultPrevented\n )\n return;\n }\n\n defaultOnClick?.(event);\n },\n [defaultOnClick, onClick]\n );\n\n const Component = as || 'button';\n\n return (\n <Component ref={buttonRef} onClick={handleOnClick} {...passthroughProps}>\n {children}\n </Component>\n );\n}\n"],"names":["BaseButton","props","as","onClick","defaultOnClick","children","buttonRef","passthroughProps","handleOnClick","useCallback","event","clickShouldContinue","defaultPrevented","Component"],"mappings":";;;;AA0BO,SAASA,WACdC,OACA;AACM,QAAA;AAAA,IACJC;AAAAA,IACAC;AAAAA,IACAC;AAAAA,IACAC;AAAAA,IACAC;AAAAA,OACGC;AAAAA,EACDN,IAAAA;AAEEO,QAAAA,gBAAgBC,
|
|
1
|
+
{"version":3,"file":"BaseButton.js","sources":["../../src/BaseButton.tsx"],"sourcesContent":["import {ReactNode, Ref, useCallback} from 'react';\n\nexport interface CustomBaseButtonProps<AsType> {\n /** Provide a React element or component to render as the underlying button. Note: for accessibility compliance, almost always you should use a `button` element, or a component that renders an underlying button. */\n as?: AsType;\n /** Any ReactNode elements. */\n children: ReactNode;\n /** Click event handler. Default behaviour triggers unless prevented */\n onClick?: (\n event?: React.MouseEvent<HTMLButtonElement, MouseEvent>\n ) => void | boolean;\n /** A default onClick behavior */\n defaultOnClick?: (\n event?: React.MouseEvent<HTMLButtonElement, MouseEvent>\n ) => void | boolean;\n /** A ref to the underlying button */\n buttonRef?: Ref<HTMLButtonElement>;\n}\n\nexport type BaseButtonProps<AsType extends React.ElementType> =\n CustomBaseButtonProps<AsType> &\n Omit<\n React.ComponentPropsWithoutRef<AsType>,\n keyof CustomBaseButtonProps<AsType>\n >;\n\nexport function BaseButton<AsType extends React.ElementType = 'button'>(\n props: BaseButtonProps<AsType>\n) {\n const {\n as,\n onClick,\n defaultOnClick,\n children,\n buttonRef,\n ...passthroughProps\n } = props;\n\n const handleOnClick = useCallback(\n (event?: React.MouseEvent<HTMLButtonElement, MouseEvent>) => {\n if (onClick) {\n const clickShouldContinue = onClick(event);\n if (\n (typeof clickShouldContinue === 'boolean' &&\n clickShouldContinue === false) ||\n event?.defaultPrevented\n )\n return;\n }\n\n defaultOnClick?.(event);\n },\n [defaultOnClick, onClick]\n );\n\n const Component = as || 'button';\n\n return (\n <Component ref={buttonRef} onClick={handleOnClick} {...passthroughProps}>\n {children}\n </Component>\n );\n}\n"],"names":["BaseButton","props","as","onClick","defaultOnClick","children","buttonRef","passthroughProps","handleOnClick","useCallback","event","clickShouldContinue","defaultPrevented","Component"],"mappings":";;;;AA0BO,SAASA,WACdC,OACA;AACM,QAAA;AAAA,IACJC;AAAAA,IACAC;AAAAA,IACAC;AAAAA,IACAC;AAAAA,IACAC;AAAAA,OACGC;AAAAA,EACDN,IAAAA;AAEEO,QAAAA,gBAAgBC,uBACpB,CAACC,UAA4D;AAC3D,QAAIP,SAAS;AACLQ,YAAAA,sBAAsBR,QAAQO,KAAD;AACnC,UACG,OAAOC,wBAAwB,aAC9BA,wBAAwB,UAC1BD,+BAAOE;AAEP;AAAA,IACH;AAEDR,qDAAiBM;AAAAA,EAAH,GAEhB,CAACN,gBAAgBD,OAAjB,CAd+B;AAiBjC,QAAMU,YAAYX,MAAM;AAExB,wCACG,WAAD;AAAA,IAAW,KAAKI;AAAAA,IAAW,SAASE;AAAAA,IAApC,GAAuDD;AAAAA,IAAvD;AAAA,EAAA,CADF;AAKD;;"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
|
|
3
|
+
const require$$0 = require("react");
|
|
4
|
+
const CartProvider = require("./CartProvider.js");
|
|
5
|
+
const BaseButton = require("./BaseButton.js");
|
|
6
|
+
const jsxRuntime = require("react/jsx-runtime");
|
|
7
|
+
function BuyNowButton(props) {
|
|
8
|
+
const {
|
|
9
|
+
cartCreate,
|
|
10
|
+
checkoutUrl
|
|
11
|
+
} = CartProvider.useCart();
|
|
12
|
+
const [loading, setLoading] = require$$0.useState(false);
|
|
13
|
+
const {
|
|
14
|
+
quantity,
|
|
15
|
+
variantId,
|
|
16
|
+
onClick,
|
|
17
|
+
attributes,
|
|
18
|
+
children,
|
|
19
|
+
...passthroughProps
|
|
20
|
+
} = props;
|
|
21
|
+
require$$0.useEffect(() => {
|
|
22
|
+
if (checkoutUrl) {
|
|
23
|
+
window.location.href = checkoutUrl;
|
|
24
|
+
}
|
|
25
|
+
}, [checkoutUrl]);
|
|
26
|
+
const handleBuyNow = require$$0.useCallback(() => {
|
|
27
|
+
setLoading(true);
|
|
28
|
+
cartCreate({
|
|
29
|
+
lines: [{
|
|
30
|
+
quantity: quantity != null ? quantity : 1,
|
|
31
|
+
merchandiseId: variantId,
|
|
32
|
+
attributes
|
|
33
|
+
}]
|
|
34
|
+
});
|
|
35
|
+
}, [cartCreate, quantity, variantId, attributes]);
|
|
36
|
+
return /* @__PURE__ */ jsxRuntime.jsx(BaseButton.BaseButton, {
|
|
37
|
+
disabled: loading != null ? loading : passthroughProps.disabled,
|
|
38
|
+
...passthroughProps,
|
|
39
|
+
onClick,
|
|
40
|
+
defaultOnClick: handleBuyNow,
|
|
41
|
+
children
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
exports.BuyNowButton = BuyNowButton;
|
|
45
|
+
//# sourceMappingURL=BuyNowButton.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BuyNowButton.js","sources":["../../src/BuyNowButton.tsx"],"sourcesContent":["import {useEffect, useState, useCallback} from 'react';\nimport {useCart} from './CartProvider.js';\nimport {BaseButton, BaseButtonProps} from './BaseButton.js';\n\ninterface BuyNowButtonProps {\n /** The item quantity. Defaults to 1. */\n quantity?: number;\n /** The ID of the variant. */\n variantId: string;\n /** An array of cart line attributes that belong to the item being added to the cart. */\n attributes?: {\n key: string;\n value: string;\n }[];\n}\n\n/** The `BuyNowButton` component renders a button that adds an item to the cart and redirects the customer to checkout. */\nexport function BuyNowButton<AsType extends React.ElementType = 'button'>(\n props: BuyNowButtonProps & BaseButtonProps<AsType>\n) {\n const {cartCreate, checkoutUrl} = useCart();\n const [loading, setLoading] = useState<boolean>(false);\n\n const {\n quantity,\n variantId,\n onClick,\n attributes,\n children,\n ...passthroughProps\n } = props;\n\n useEffect(() => {\n if (checkoutUrl) {\n window.location.href = checkoutUrl;\n }\n }, [checkoutUrl]);\n\n const handleBuyNow = useCallback(() => {\n setLoading(true);\n cartCreate({\n lines: [\n {\n quantity: quantity ?? 1,\n merchandiseId: variantId,\n attributes,\n },\n ],\n });\n }, [cartCreate, quantity, variantId, attributes]);\n\n return (\n <BaseButton\n disabled={loading ?? passthroughProps.disabled}\n {...passthroughProps}\n onClick={onClick}\n defaultOnClick={handleBuyNow}\n >\n {children}\n </BaseButton>\n );\n}\n"],"names":["BuyNowButton","props","cartCreate","checkoutUrl","useCart","loading","setLoading","useState","quantity","variantId","onClick","attributes","children","passthroughProps","useEffect","window","location","href","handleBuyNow","useCallback","lines","merchandiseId","BaseButton","disabled"],"mappings":";;;;;;AAiBO,SAASA,aACdC,OACA;AACM,QAAA;AAAA,IAACC;AAAAA,IAAYC;AAAAA,MAAeC,aAAlC,QAAA;AACA,QAAM,CAACC,SAASC,UAAV,IAAwBC,oBAAkB,KAAV;AAEhC,QAAA;AAAA,IACJC;AAAAA,IACAC;AAAAA,IACAC;AAAAA,IACAC;AAAAA,IACAC;AAAAA,OACGC;AAAAA,EACDZ,IAAAA;AAEJa,aAAAA,UAAU,MAAM;AACd,QAAIX,aAAa;AACfY,aAAOC,SAASC,OAAOd;AAAAA,IACxB;AAAA,EAAA,GACA,CAACA,WAAD,CAJM;AAMHe,QAAAA,eAAeC,WAAAA,YAAY,MAAM;AACrCb,eAAW,IAAD;AACC,eAAA;AAAA,MACTc,OAAO,CACL;AAAA,QACEZ,UAAUA,8BAAY;AAAA,QACtBa,eAAeZ;AAAAA,QACfE;AAAAA,MAAAA,CAJG;AAAA,IAAA,CADC;AAAA,KAST,CAACT,YAAYM,UAAUC,WAAWE,UAAlC,CAX6B;AAahC,wCACGW,WAAAA,YAAD;AAAA,IACE,UAAUjB,4BAAWQ,iBAAiBU;AAAAA,IADxC,GAEMV;AAAAA,IACJ;AAAA,IACA,gBAAgBK;AAAAA,IAJlB;AAAA,EAAA,CADF;AAUD;;"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { useState, useEffect, useCallback } from "react";
|
|
2
|
+
import { useCart } from "./CartProvider.mjs";
|
|
3
|
+
import { BaseButton } from "./BaseButton.mjs";
|
|
4
|
+
import { jsx } from "react/jsx-runtime";
|
|
5
|
+
function BuyNowButton(props) {
|
|
6
|
+
const {
|
|
7
|
+
cartCreate,
|
|
8
|
+
checkoutUrl
|
|
9
|
+
} = useCart();
|
|
10
|
+
const [loading, setLoading] = useState(false);
|
|
11
|
+
const {
|
|
12
|
+
quantity,
|
|
13
|
+
variantId,
|
|
14
|
+
onClick,
|
|
15
|
+
attributes,
|
|
16
|
+
children,
|
|
17
|
+
...passthroughProps
|
|
18
|
+
} = props;
|
|
19
|
+
useEffect(() => {
|
|
20
|
+
if (checkoutUrl) {
|
|
21
|
+
window.location.href = checkoutUrl;
|
|
22
|
+
}
|
|
23
|
+
}, [checkoutUrl]);
|
|
24
|
+
const handleBuyNow = useCallback(() => {
|
|
25
|
+
setLoading(true);
|
|
26
|
+
cartCreate({
|
|
27
|
+
lines: [{
|
|
28
|
+
quantity: quantity != null ? quantity : 1,
|
|
29
|
+
merchandiseId: variantId,
|
|
30
|
+
attributes
|
|
31
|
+
}]
|
|
32
|
+
});
|
|
33
|
+
}, [cartCreate, quantity, variantId, attributes]);
|
|
34
|
+
return /* @__PURE__ */ jsx(BaseButton, {
|
|
35
|
+
disabled: loading != null ? loading : passthroughProps.disabled,
|
|
36
|
+
...passthroughProps,
|
|
37
|
+
onClick,
|
|
38
|
+
defaultOnClick: handleBuyNow,
|
|
39
|
+
children
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
export {
|
|
43
|
+
BuyNowButton
|
|
44
|
+
};
|
|
45
|
+
//# sourceMappingURL=BuyNowButton.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BuyNowButton.mjs","sources":["../../src/BuyNowButton.tsx"],"sourcesContent":["import {useEffect, useState, useCallback} from 'react';\nimport {useCart} from './CartProvider.js';\nimport {BaseButton, BaseButtonProps} from './BaseButton.js';\n\ninterface BuyNowButtonProps {\n /** The item quantity. Defaults to 1. */\n quantity?: number;\n /** The ID of the variant. */\n variantId: string;\n /** An array of cart line attributes that belong to the item being added to the cart. */\n attributes?: {\n key: string;\n value: string;\n }[];\n}\n\n/** The `BuyNowButton` component renders a button that adds an item to the cart and redirects the customer to checkout. */\nexport function BuyNowButton<AsType extends React.ElementType = 'button'>(\n props: BuyNowButtonProps & BaseButtonProps<AsType>\n) {\n const {cartCreate, checkoutUrl} = useCart();\n const [loading, setLoading] = useState<boolean>(false);\n\n const {\n quantity,\n variantId,\n onClick,\n attributes,\n children,\n ...passthroughProps\n } = props;\n\n useEffect(() => {\n if (checkoutUrl) {\n window.location.href = checkoutUrl;\n }\n }, [checkoutUrl]);\n\n const handleBuyNow = useCallback(() => {\n setLoading(true);\n cartCreate({\n lines: [\n {\n quantity: quantity ?? 1,\n merchandiseId: variantId,\n attributes,\n },\n ],\n });\n }, [cartCreate, quantity, variantId, attributes]);\n\n return (\n <BaseButton\n disabled={loading ?? passthroughProps.disabled}\n {...passthroughProps}\n onClick={onClick}\n defaultOnClick={handleBuyNow}\n >\n {children}\n </BaseButton>\n );\n}\n"],"names":["BuyNowButton","props","cartCreate","checkoutUrl","useCart","loading","setLoading","useState","quantity","variantId","onClick","attributes","children","passthroughProps","useEffect","window","location","href","handleBuyNow","useCallback","lines","merchandiseId","disabled"],"mappings":";;;;AAiBO,SAASA,aACdC,OACA;AACM,QAAA;AAAA,IAACC;AAAAA,IAAYC;AAAAA,MAAeC,QAAlC;AACA,QAAM,CAACC,SAASC,UAAV,IAAwBC,SAAkB,KAAV;AAEhC,QAAA;AAAA,IACJC;AAAAA,IACAC;AAAAA,IACAC;AAAAA,IACAC;AAAAA,IACAC;AAAAA,OACGC;AAAAA,EACDZ,IAAAA;AAEJa,YAAU,MAAM;AACd,QAAIX,aAAa;AACfY,aAAOC,SAASC,OAAOd;AAAAA,IACxB;AAAA,EAAA,GACA,CAACA,WAAD,CAJM;AAMHe,QAAAA,eAAeC,YAAY,MAAM;AACrCb,eAAW,IAAD;AACC,eAAA;AAAA,MACTc,OAAO,CACL;AAAA,QACEZ,UAAUA,8BAAY;AAAA,QACtBa,eAAeZ;AAAAA,QACfE;AAAAA,MAAAA,CAJG;AAAA,IAAA,CADC;AAAA,KAST,CAACT,YAAYM,UAAUC,WAAWE,UAAlC,CAX6B;AAahC,6BACG,YAAD;AAAA,IACE,UAAUN,4BAAWQ,iBAAiBS;AAAAA,IADxC,GAEMT;AAAAA,IACJ;AAAA,IACA,gBAAgBK;AAAAA,IAJlB;AAAA,EAAA,CADF;AAUD;"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
|
|
3
|
-
const
|
|
3
|
+
const require$$0 = require("react");
|
|
4
4
|
const CartProvider = require("./CartProvider.js");
|
|
5
5
|
const BaseButton = require("./BaseButton.js");
|
|
6
6
|
const jsxRuntime = require("react/jsx-runtime");
|
|
7
7
|
function CartCheckoutButton(props) {
|
|
8
|
-
const [requestedCheckout, setRequestedCheckout] =
|
|
8
|
+
const [requestedCheckout, setRequestedCheckout] = require$$0.useState(false);
|
|
9
9
|
const {
|
|
10
10
|
status,
|
|
11
11
|
checkoutUrl
|
|
@@ -14,7 +14,7 @@ function CartCheckoutButton(props) {
|
|
|
14
14
|
children,
|
|
15
15
|
...passthroughProps
|
|
16
16
|
} = props;
|
|
17
|
-
|
|
17
|
+
require$$0.useEffect(() => {
|
|
18
18
|
if (requestedCheckout && checkoutUrl && status === "idle") {
|
|
19
19
|
window.location.href = checkoutUrl;
|
|
20
20
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CartCheckoutButton.js","sources":["../../src/CartCheckoutButton.tsx"],"sourcesContent":["import {ReactNode, useEffect, useState} from 'react';\nimport {useCart} from './CartProvider.js';\nimport {BaseButton, BaseButtonProps} from './BaseButton.js';\n\ntype PropsWeControl = 'onClick';\n\n/**\n * The `CartCheckoutButton` component renders a button that redirects to the checkout URL for the cart.\n * It must be a descendent of a `CartProvider` component.\n */\nexport function CartCheckoutButton(\n props: Omit<BaseButtonProps<'button'>, PropsWeControl> & {\n /** A `ReactNode` element. */\n children: ReactNode;\n }\n) {\n const [requestedCheckout, setRequestedCheckout] = useState(false);\n const {status, checkoutUrl} = useCart();\n const {children, ...passthroughProps} = props;\n\n useEffect(() => {\n if (requestedCheckout && checkoutUrl && status === 'idle') {\n window.location.href = checkoutUrl;\n }\n }, [requestedCheckout, status, checkoutUrl]);\n\n return (\n <BaseButton\n {...passthroughProps}\n disabled={requestedCheckout || passthroughProps.disabled}\n onClick={() => setRequestedCheckout(true)}\n >\n {children}\n </BaseButton>\n );\n}\n"],"names":["CartCheckoutButton","props","requestedCheckout","setRequestedCheckout","useState","status","checkoutUrl","useCart","children","passthroughProps","useEffect","window","location","href","BaseButton","disabled"],"mappings":";;;;;;AAUO,SAASA,mBACdC,OAIA;AACA,QAAM,CAACC,mBAAmBC,oBAApB,IAA4CC,
|
|
1
|
+
{"version":3,"file":"CartCheckoutButton.js","sources":["../../src/CartCheckoutButton.tsx"],"sourcesContent":["import {ReactNode, useEffect, useState} from 'react';\nimport {useCart} from './CartProvider.js';\nimport {BaseButton, BaseButtonProps} from './BaseButton.js';\n\ntype PropsWeControl = 'onClick';\n\n/**\n * The `CartCheckoutButton` component renders a button that redirects to the checkout URL for the cart.\n * It must be a descendent of a `CartProvider` component.\n */\nexport function CartCheckoutButton(\n props: Omit<BaseButtonProps<'button'>, PropsWeControl> & {\n /** A `ReactNode` element. */\n children: ReactNode;\n }\n) {\n const [requestedCheckout, setRequestedCheckout] = useState(false);\n const {status, checkoutUrl} = useCart();\n const {children, ...passthroughProps} = props;\n\n useEffect(() => {\n if (requestedCheckout && checkoutUrl && status === 'idle') {\n window.location.href = checkoutUrl;\n }\n }, [requestedCheckout, status, checkoutUrl]);\n\n return (\n <BaseButton\n {...passthroughProps}\n disabled={requestedCheckout || passthroughProps.disabled}\n onClick={() => setRequestedCheckout(true)}\n >\n {children}\n </BaseButton>\n );\n}\n"],"names":["CartCheckoutButton","props","requestedCheckout","setRequestedCheckout","useState","status","checkoutUrl","useCart","children","passthroughProps","useEffect","window","location","href","BaseButton","disabled"],"mappings":";;;;;;AAUO,SAASA,mBACdC,OAIA;AACA,QAAM,CAACC,mBAAmBC,oBAApB,IAA4CC,oBAAS,KAAD;AACpD,QAAA;AAAA,IAACC;AAAAA,IAAQC;AAAAA,MAAeC,aAA9B,QAAA;AACM,QAAA;AAAA,IAACC;AAAAA,OAAaC;AAAAA,EAAoBR,IAAAA;AAExCS,aAAAA,UAAU,MAAM;AACVR,QAAAA,qBAAqBI,eAAeD,WAAW,QAAQ;AACzDM,aAAOC,SAASC,OAAOP;AAAAA,IACxB;AAAA,EACA,GAAA,CAACJ,mBAAmBG,QAAQC,WAA5B,CAJM;AAMT,wCACGQ,WAAAA,YAAD;AAAA,IAAA,GACML;AAAAA,IACJ,UAAUP,qBAAqBO,iBAAiBM;AAAAA,IAChD,SAAS,MAAMZ,qBAAqB,IAAD;AAAA,IAHrC;AAAA,EAAA,CADF;AASD;;"}
|
package/dist/dev/CartProvider.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
|
|
3
|
-
const
|
|
3
|
+
const require$$0 = require("react");
|
|
4
4
|
const useCartAPIStateMachine = require("./useCartAPIStateMachine.js");
|
|
5
5
|
const cartConstants = require("./cart-constants.js");
|
|
6
6
|
const jsxRuntime = require("react/jsx-runtime");
|
|
7
|
-
const CartContext =
|
|
7
|
+
const CartContext = require$$0.createContext(null);
|
|
8
8
|
function useCart() {
|
|
9
|
-
const context =
|
|
9
|
+
const context = require$$0.useContext(CartContext);
|
|
10
10
|
if (!context) {
|
|
11
11
|
throw new Error("Expected a Cart Context, but no Cart Context was found");
|
|
12
12
|
}
|
|
@@ -39,9 +39,9 @@ function CartProvider({
|
|
|
39
39
|
var _a, _b, _c, _d, _e, _f, _g;
|
|
40
40
|
if (countryCode)
|
|
41
41
|
countryCode = countryCode.toUpperCase();
|
|
42
|
-
const [prevCountryCode, setPrevCountryCode] =
|
|
43
|
-
const [prevCustomerAccessToken, setPrevCustomerAccessToken] =
|
|
44
|
-
const customerOverridesCountryCode =
|
|
42
|
+
const [prevCountryCode, setPrevCountryCode] = require$$0.useState(countryCode);
|
|
43
|
+
const [prevCustomerAccessToken, setPrevCustomerAccessToken] = require$$0.useState(customerAccessToken);
|
|
44
|
+
const customerOverridesCountryCode = require$$0.useRef(false);
|
|
45
45
|
if (prevCountryCode !== countryCode || prevCustomerAccessToken !== customerAccessToken) {
|
|
46
46
|
setPrevCountryCode(countryCode);
|
|
47
47
|
setPrevCustomerAccessToken(customerAccessToken);
|
|
@@ -151,11 +151,11 @@ function CartProvider({
|
|
|
151
151
|
}
|
|
152
152
|
}
|
|
153
153
|
});
|
|
154
|
-
const cartReady =
|
|
154
|
+
const cartReady = require$$0.useRef(false);
|
|
155
155
|
const cartCompleted = cartState.matches("cartCompleted");
|
|
156
156
|
const countryChanged = (cartState.value === "idle" || cartState.value === "error" || cartState.value === "cartCompleted") && countryCode !== ((_c = (_b = (_a = cartState == null ? void 0 : cartState.context) == null ? void 0 : _a.cart) == null ? void 0 : _b.buyerIdentity) == null ? void 0 : _c.countryCode) && !cartState.context.errors;
|
|
157
|
-
const fetchingFromStorage =
|
|
158
|
-
|
|
157
|
+
const fetchingFromStorage = require$$0.useRef(false);
|
|
158
|
+
require$$0.useEffect(() => {
|
|
159
159
|
if (!cartReady.current && !fetchingFromStorage.current) {
|
|
160
160
|
if (!cart && storageAvailable("localStorage")) {
|
|
161
161
|
fetchingFromStorage.current = true;
|
|
@@ -177,7 +177,7 @@ function CartProvider({
|
|
|
177
177
|
cartReady.current = true;
|
|
178
178
|
}
|
|
179
179
|
}, [cart, cartReady, cartSend]);
|
|
180
|
-
|
|
180
|
+
require$$0.useEffect(() => {
|
|
181
181
|
if (!countryChanged || customerOverridesCountryCode.current)
|
|
182
182
|
return;
|
|
183
183
|
cartSend({
|
|
@@ -190,13 +190,13 @@ function CartProvider({
|
|
|
190
190
|
}
|
|
191
191
|
});
|
|
192
192
|
}, [countryCode, customerAccessToken, countryChanged, customerOverridesCountryCode, cartSend]);
|
|
193
|
-
const onCartReadySend =
|
|
193
|
+
const onCartReadySend = require$$0.useCallback((cartEvent) => {
|
|
194
194
|
if (!cartReady.current) {
|
|
195
195
|
return console.warn("Cart isn't ready yet");
|
|
196
196
|
}
|
|
197
197
|
cartSend(cartEvent);
|
|
198
198
|
}, [cartSend]);
|
|
199
|
-
|
|
199
|
+
require$$0.useEffect(() => {
|
|
200
200
|
var _a2, _b2, _c2;
|
|
201
201
|
if (((_b2 = (_a2 = cartState == null ? void 0 : cartState.context) == null ? void 0 : _a2.cart) == null ? void 0 : _b2.id) && storageAvailable("localStorage")) {
|
|
202
202
|
try {
|
|
@@ -206,7 +206,7 @@ function CartProvider({
|
|
|
206
206
|
}
|
|
207
207
|
}
|
|
208
208
|
}, [(_e = (_d = cartState == null ? void 0 : cartState.context) == null ? void 0 : _d.cart) == null ? void 0 : _e.id]);
|
|
209
|
-
|
|
209
|
+
require$$0.useEffect(() => {
|
|
210
210
|
if (cartCompleted && storageAvailable("localStorage")) {
|
|
211
211
|
try {
|
|
212
212
|
window.localStorage.removeItem(cartConstants.CART_ID_STORAGE_KEY);
|
|
@@ -215,7 +215,7 @@ function CartProvider({
|
|
|
215
215
|
}
|
|
216
216
|
}
|
|
217
217
|
}, [cartCompleted]);
|
|
218
|
-
const cartCreate =
|
|
218
|
+
const cartCreate = require$$0.useCallback((cartInput) => {
|
|
219
219
|
var _a2, _b2;
|
|
220
220
|
if (countryCode && !((_a2 = cartInput.buyerIdentity) == null ? void 0 : _a2.countryCode)) {
|
|
221
221
|
if (cartInput.buyerIdentity == null) {
|
|
@@ -235,7 +235,7 @@ function CartProvider({
|
|
|
235
235
|
});
|
|
236
236
|
}, [countryCode, customerAccessToken, onCartReadySend]);
|
|
237
237
|
const cartDisplayState = useDelayedStateUntilHydration(cartState);
|
|
238
|
-
const cartContextValue =
|
|
238
|
+
const cartContextValue = require$$0.useMemo(() => {
|
|
239
239
|
var _a2, _b2, _c2, _d2, _e2, _f2;
|
|
240
240
|
return {
|
|
241
241
|
...(_b2 = (_a2 = cartDisplayState == null ? void 0 : cartDisplayState.context) == null ? void 0 : _a2.cart) != null ? _b2 : {
|
|
@@ -341,17 +341,17 @@ function transposeStatus(status) {
|
|
|
341
341
|
}
|
|
342
342
|
}
|
|
343
343
|
function useDelayedStateUntilHydration(state) {
|
|
344
|
-
const [isPending, startTransition] =
|
|
345
|
-
const [delayedState, setDelayedState] =
|
|
346
|
-
const firstTimePending =
|
|
344
|
+
const [isPending, startTransition] = require$$0.useTransition();
|
|
345
|
+
const [delayedState, setDelayedState] = require$$0.useState(state);
|
|
346
|
+
const firstTimePending = require$$0.useRef(false);
|
|
347
347
|
if (isPending) {
|
|
348
348
|
firstTimePending.current = true;
|
|
349
349
|
}
|
|
350
|
-
const firstTimePendingFinished =
|
|
350
|
+
const firstTimePendingFinished = require$$0.useRef(false);
|
|
351
351
|
if (!isPending && firstTimePending.current) {
|
|
352
352
|
firstTimePendingFinished.current = true;
|
|
353
353
|
}
|
|
354
|
-
|
|
354
|
+
require$$0.useEffect(() => {
|
|
355
355
|
startTransition(() => {
|
|
356
356
|
if (!firstTimePendingFinished.current) {
|
|
357
357
|
setDelayedState(state);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CartProvider.js","sources":["../../src/CartProvider.tsx"],"sourcesContent":["import {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n useTransition,\n createContext,\n useContext,\n} from 'react';\nimport {\n AttributeInput,\n CartBuyerIdentityInput,\n CartInput,\n CartLineInput,\n CartLineUpdateInput,\n CountryCode,\n Cart as CartType,\n MutationCartNoteUpdateArgs,\n} from './storefront-api-types.js';\nimport {\n BuyerIdentityUpdateEvent,\n CartMachineContext,\n CartMachineEvent,\n CartMachineTypeState,\n CartWithActions,\n} from './cart-types.js';\nimport {useCartAPIStateMachine} from './useCartAPIStateMachine.js';\nimport {CART_ID_STORAGE_KEY} from './cart-constants.js';\nimport {PartialDeep} from 'type-fest';\n\nexport const CartContext = createContext<CartWithActions | null>(null);\n\n/**\n * The `useCart` hook provides access to the cart object. It must be a descendent of a `CartProvider` component.\n */\nexport function useCart() {\n const context = useContext(CartContext);\n\n if (!context) {\n throw new Error('Expected a Cart Context, but no Cart Context was found');\n }\n\n return context;\n}\n\nexport function CartProvider({\n children,\n numCartLines,\n onCreate,\n onLineAdd,\n onLineRemove,\n onLineUpdate,\n onNoteUpdate,\n onBuyerIdentityUpdate,\n onAttributesUpdate,\n onDiscountCodesUpdate,\n onCreateComplete,\n onLineAddComplete,\n onLineRemoveComplete,\n onLineUpdateComplete,\n onNoteUpdateComplete,\n onBuyerIdentityUpdateComplete,\n onAttributesUpdateComplete,\n onDiscountCodesUpdateComplete,\n data: cart,\n cartFragment = defaultCartFragment,\n customerAccessToken,\n countryCode = 'US',\n}: {\n /** Any `ReactNode` elements. */\n children: React.ReactNode;\n /** Maximum number of cart lines to fetch. Defaults to 250 cart lines. */\n numCartLines?: number;\n /** A callback that is invoked when the process to create a cart begins, but before the cart is created in the Storefront API. */\n onCreate?: () => void;\n /** A callback that is invoked when the process to add a line item to the cart begins, but before the line item is added to the Storefront API. */\n onLineAdd?: () => void;\n /** A callback that is invoked when the process to remove a line item to the cart begins, but before the line item is removed from the Storefront API. */\n onLineRemove?: () => void;\n /** A callback that is invoked when the process to update a line item in the cart begins, but before the line item is updated in the Storefront API. */\n onLineUpdate?: () => void;\n /** A callback that is invoked when the process to add or update a note in the cart begins, but before the note is added or updated in the Storefront API. */\n onNoteUpdate?: () => void;\n /** A callback that is invoked when the process to update the buyer identity begins, but before the buyer identity is updated in the Storefront API. */\n onBuyerIdentityUpdate?: () => void;\n /** A callback that is invoked when the process to update the cart attributes begins, but before the attributes are updated in the Storefront API. */\n onAttributesUpdate?: () => void;\n /** A callback that is invoked when the process to update the cart discount codes begins, but before the discount codes are updated in the Storefront API. */\n onDiscountCodesUpdate?: () => void;\n /** A callback that is invoked when the process to create a cart completes */\n onCreateComplete?: () => void;\n /** A callback that is invoked when the process to add a line item to the cart completes */\n onLineAddComplete?: () => void;\n /** A callback that is invoked when the process to remove a line item to the cart completes */\n onLineRemoveComplete?: () => void;\n /** A callback that is invoked when the process to update a line item in the cart completes */\n onLineUpdateComplete?: () => void;\n /** A callback that is invoked when the process to add or update a note in the cart completes */\n onNoteUpdateComplete?: () => void;\n /** A callback that is invoked when the process to update the buyer identity completes */\n onBuyerIdentityUpdateComplete?: () => void;\n /** A callback that is invoked when the process to update the cart attributes completes */\n onAttributesUpdateComplete?: () => void;\n /** A callback that is invoked when the process to update the cart discount codes completes */\n onDiscountCodesUpdateComplete?: () => void;\n /** An object with fields that correspond to the Storefront API's [Cart object](https://shopify.dev/api/storefront/latest/objects/cart). */\n data?: PartialDeep<CartType, {recurseIntoArrays: true}>;\n /** A fragment used to query the Storefront API's [Cart object](https://shopify.dev/api/storefront/latest/objects/cart) for all queries and mutations. A default value is used if no argument is provided. */\n cartFragment?: string;\n /** A customer access token that's accessible on the server if there's a customer login. */\n customerAccessToken?: CartBuyerIdentityInput['customerAccessToken'];\n /** The ISO country code for i18n. */\n countryCode?: CountryCode;\n}) {\n if (countryCode) countryCode = countryCode.toUpperCase() as CountryCode;\n const [prevCountryCode, setPrevCountryCode] = useState(countryCode);\n const [prevCustomerAccessToken, setPrevCustomerAccessToken] =\n useState(customerAccessToken);\n const customerOverridesCountryCode = useRef(false);\n\n if (\n prevCountryCode !== countryCode ||\n prevCustomerAccessToken !== customerAccessToken\n ) {\n setPrevCountryCode(countryCode);\n setPrevCustomerAccessToken(customerAccessToken);\n customerOverridesCountryCode.current = false;\n }\n\n const [cartState, cartSend] = useCartAPIStateMachine({\n numCartLines,\n data: cart,\n cartFragment,\n countryCode,\n onCartActionEntry(context, event) {\n try {\n switch (event.type) {\n case 'CART_CREATE':\n return onCreate?.();\n case 'CARTLINE_ADD':\n return onLineAdd?.();\n case 'CARTLINE_REMOVE':\n return onLineRemove?.();\n case 'CARTLINE_UPDATE':\n return onLineUpdate?.();\n case 'NOTE_UPDATE':\n return onNoteUpdate?.();\n case 'BUYER_IDENTITY_UPDATE':\n return onBuyerIdentityUpdate?.();\n case 'CART_ATTRIBUTES_UPDATE':\n return onAttributesUpdate?.();\n case 'DISCOUNT_CODES_UPDATE':\n return onDiscountCodesUpdate?.();\n }\n } catch (error) {\n console.error('Cart entry action failed', error);\n }\n },\n onCartActionOptimisticUI(context, event) {\n if (!context?.cart) return {cart: undefined};\n switch (event.type) {\n case 'CARTLINE_REMOVE':\n return {\n ...context,\n lastValidCart: context.cart,\n cart: {\n ...context.cart,\n lines: context?.cart?.lines?.filter(\n (line) => line?.id && !event.payload.lines.includes(line?.id)\n ),\n },\n };\n case 'CARTLINE_UPDATE':\n return {\n ...context,\n lastValidCart: context.cart,\n cart: {\n ...context.cart,\n lines: context?.cart?.lines?.map((line) => {\n const updatedLine = event.payload.lines.find(\n ({id}) => id === line?.id\n );\n\n if (updatedLine && updatedLine.quantity) {\n return {\n ...line,\n quantity: updatedLine.quantity,\n };\n }\n\n return line;\n }),\n },\n };\n }\n return {cart: context.cart ? {...context.cart} : undefined};\n },\n onCartActionComplete(context, event) {\n const cartActionEvent = event.payload.cartActionEvent;\n try {\n switch (event.type) {\n case 'RESOLVE':\n switch (cartActionEvent.type) {\n case 'CART_CREATE':\n return onCreateComplete?.();\n case 'CARTLINE_ADD':\n return onLineAddComplete?.();\n case 'CARTLINE_REMOVE':\n return onLineRemoveComplete?.();\n case 'CARTLINE_UPDATE':\n return onLineUpdateComplete?.();\n case 'NOTE_UPDATE':\n return onNoteUpdateComplete?.();\n case 'BUYER_IDENTITY_UPDATE':\n if (countryCodeNotUpdated(context, cartActionEvent)) {\n customerOverridesCountryCode.current = true;\n }\n return onBuyerIdentityUpdateComplete?.();\n case 'CART_ATTRIBUTES_UPDATE':\n return onAttributesUpdateComplete?.();\n case 'DISCOUNT_CODES_UPDATE':\n return onDiscountCodesUpdateComplete?.();\n }\n }\n } catch (error) {\n console.error('onCartActionComplete failed', error);\n }\n },\n });\n\n const cartReady = useRef(false);\n const cartCompleted = cartState.matches('cartCompleted');\n\n const countryChanged =\n (cartState.value === 'idle' ||\n cartState.value === 'error' ||\n cartState.value === 'cartCompleted') &&\n countryCode !== cartState?.context?.cart?.buyerIdentity?.countryCode &&\n !cartState.context.errors;\n\n const fetchingFromStorage = useRef(false);\n\n /**\n * Initializes cart with priority in this order:\n * 1. cart props\n * 2. localStorage cartId\n */\n useEffect(() => {\n if (!cartReady.current && !fetchingFromStorage.current) {\n if (!cart && storageAvailable('localStorage')) {\n fetchingFromStorage.current = true;\n try {\n const cartId = window.localStorage.getItem(CART_ID_STORAGE_KEY);\n if (cartId) {\n cartSend({type: 'CART_FETCH', payload: {cartId}});\n }\n } catch (error) {\n console.warn('error fetching cartId');\n console.warn(error);\n }\n }\n cartReady.current = true;\n }\n }, [cart, cartReady, cartSend]);\n\n // Update cart country code if cart and props countryCode's as different\n useEffect(() => {\n if (!countryChanged || customerOverridesCountryCode.current) return;\n cartSend({\n type: 'BUYER_IDENTITY_UPDATE',\n payload: {buyerIdentity: {countryCode, customerAccessToken}},\n });\n }, [\n countryCode,\n customerAccessToken,\n countryChanged,\n customerOverridesCountryCode,\n cartSend,\n ]);\n\n // send cart events when ready\n const onCartReadySend = useCallback(\n (cartEvent: CartMachineEvent) => {\n if (!cartReady.current) {\n return console.warn(\"Cart isn't ready yet\");\n }\n cartSend(cartEvent);\n },\n [cartSend]\n );\n\n // save cart id to local storage\n useEffect(() => {\n if (cartState?.context?.cart?.id && storageAvailable('localStorage')) {\n try {\n window.localStorage.setItem(\n CART_ID_STORAGE_KEY,\n cartState.context.cart?.id\n );\n } catch (error) {\n console.warn('Failed to save cartId to localStorage', error);\n }\n }\n }, [cartState?.context?.cart?.id]);\n\n // delete cart from local storage if cart fetched has been completed\n useEffect(() => {\n if (cartCompleted && storageAvailable('localStorage')) {\n try {\n window.localStorage.removeItem(CART_ID_STORAGE_KEY);\n } catch (error) {\n console.warn('Failed to delete cartId from localStorage', error);\n }\n }\n }, [cartCompleted]);\n\n const cartCreate = useCallback(\n (cartInput: CartInput) => {\n if (countryCode && !cartInput.buyerIdentity?.countryCode) {\n if (cartInput.buyerIdentity == null) {\n cartInput.buyerIdentity = {};\n }\n cartInput.buyerIdentity.countryCode = countryCode;\n }\n\n if (\n customerAccessToken &&\n !cartInput.buyerIdentity?.customerAccessToken\n ) {\n if (cartInput.buyerIdentity == null) {\n cartInput.buyerIdentity = {};\n }\n cartInput.buyerIdentity.customerAccessToken = customerAccessToken;\n }\n onCartReadySend({\n type: 'CART_CREATE',\n payload: cartInput,\n });\n },\n [countryCode, customerAccessToken, onCartReadySend]\n );\n\n // Delays the cart state in the context if the page is hydrating\n // preventing suspense boundary errors.\n const cartDisplayState = useDelayedStateUntilHydration(cartState);\n\n const cartContextValue = useMemo<CartWithActions>(() => {\n return {\n ...(cartDisplayState?.context?.cart ?? {lines: [], attributes: []}),\n status: transposeStatus(cartDisplayState.value),\n error: cartDisplayState?.context?.errors,\n totalQuantity: cartDisplayState?.context?.cart?.totalQuantity ?? 0,\n cartCreate,\n linesAdd(lines: CartLineInput[]) {\n if (cartDisplayState?.context?.cart?.id) {\n onCartReadySend({\n type: 'CARTLINE_ADD',\n payload: {lines},\n });\n } else {\n cartCreate({lines});\n }\n },\n linesRemove(lines: string[]) {\n onCartReadySend({\n type: 'CARTLINE_REMOVE',\n payload: {\n lines,\n },\n });\n },\n linesUpdate(lines: CartLineUpdateInput[]) {\n onCartReadySend({\n type: 'CARTLINE_UPDATE',\n payload: {\n lines,\n },\n });\n },\n noteUpdate(note: MutationCartNoteUpdateArgs['note']) {\n onCartReadySend({\n type: 'NOTE_UPDATE',\n payload: {\n note,\n },\n });\n },\n buyerIdentityUpdate(buyerIdentity: CartBuyerIdentityInput) {\n onCartReadySend({\n type: 'BUYER_IDENTITY_UPDATE',\n payload: {\n buyerIdentity,\n },\n });\n },\n cartAttributesUpdate(attributes: AttributeInput[]) {\n onCartReadySend({\n type: 'CART_ATTRIBUTES_UPDATE',\n payload: {\n attributes,\n },\n });\n },\n discountCodesUpdate(discountCodes: string[]) {\n onCartReadySend({\n type: 'DISCOUNT_CODES_UPDATE',\n payload: {\n discountCodes,\n },\n });\n },\n cartFragment,\n };\n }, [\n cartCreate,\n cartDisplayState?.context?.cart,\n cartDisplayState?.context?.errors,\n cartDisplayState.value,\n cartFragment,\n onCartReadySend,\n ]);\n\n return (\n <CartContext.Provider value={cartContextValue}>\n {children}\n </CartContext.Provider>\n );\n}\n\nfunction transposeStatus(\n status: CartMachineTypeState['value']\n): CartWithActions['status'] {\n switch (status) {\n case 'uninitialized':\n case 'initializationError':\n return 'uninitialized';\n case 'idle':\n case 'cartCompleted':\n case 'error':\n return 'idle';\n case 'cartFetching':\n return 'fetching';\n case 'cartCreating':\n return 'creating';\n case 'cartLineAdding':\n case 'cartLineRemoving':\n case 'cartLineUpdating':\n case 'noteUpdating':\n case 'buyerIdentityUpdating':\n case 'cartAttributesUpdating':\n case 'discountCodesUpdating':\n return 'updating';\n }\n}\n\n/**\n * Delays a state update until hydration finishes. Useful for preventing suspense boundaries errors when updating a context\n * @remarks this uses startTransition and waits for it to finish.\n */\nfunction useDelayedStateUntilHydration<T>(state: T) {\n const [isPending, startTransition] = useTransition();\n const [delayedState, setDelayedState] = useState(state);\n\n const firstTimePending = useRef(false);\n if (isPending) {\n firstTimePending.current = true;\n }\n\n const firstTimePendingFinished = useRef(false);\n if (!isPending && firstTimePending.current) {\n firstTimePendingFinished.current = true;\n }\n\n useEffect(() => {\n startTransition(() => {\n if (!firstTimePendingFinished.current) {\n setDelayedState(state);\n }\n });\n }, [state]);\n\n const displayState = firstTimePendingFinished.current ? state : delayedState;\n\n return displayState;\n}\n\n/** Check for storage availability funciton obtained from\n * https://developer.mozilla.org/en-US/docs/Web/API/Web_Storage_API/Using_the_Web_Storage_API\n */\nexport function storageAvailable(type: 'localStorage' | 'sessionStorage') {\n let storage;\n try {\n storage = window[type];\n const x = '__storage_test__';\n storage.setItem(x, x);\n storage.removeItem(x);\n return true;\n } catch (e) {\n return (\n e instanceof DOMException &&\n // everything except Firefox\n (e.code === 22 ||\n // Firefox\n e.code === 1014 ||\n // test name field too, because code might not be present\n // everything except Firefox\n e.name === 'QuotaExceededError' ||\n // Firefox\n e.name === 'NS_ERROR_DOM_QUOTA_REACHED') &&\n // acknowledge QuotaExceededError only if there's something already stored\n storage &&\n storage.length !== 0\n );\n }\n}\n\nfunction countryCodeNotUpdated(\n context: CartMachineContext,\n event: BuyerIdentityUpdateEvent\n) {\n return (\n event.payload.buyerIdentity.countryCode &&\n context.cart?.buyerIdentity?.countryCode !==\n event.payload.buyerIdentity.countryCode\n );\n}\n\nexport const defaultCartFragment = `\nfragment CartFragment on Cart {\n id\n checkoutUrl\n totalQuantity\n buyerIdentity {\n countryCode\n customer {\n id\n email\n firstName\n lastName\n displayName\n }\n email\n phone\n }\n lines(first: $numCartLines) {\n edges {\n node {\n id\n quantity\n attributes {\n key\n value\n }\n cost {\n totalAmount {\n amount\n currencyCode\n }\n compareAtAmountPerQuantity {\n amount\n currencyCode\n }\n }\n merchandise {\n ... on ProductVariant {\n id\n availableForSale\n compareAtPriceV2 {\n ...MoneyFragment\n }\n priceV2 {\n ...MoneyFragment\n }\n requiresShipping\n title\n image {\n ...ImageFragment\n }\n product {\n handle\n title\n }\n selectedOptions {\n name\n value\n }\n }\n }\n }\n }\n }\n cost {\n subtotalAmount {\n ...MoneyFragment\n }\n totalAmount {\n ...MoneyFragment\n }\n totalDutyAmount {\n ...MoneyFragment\n }\n totalTaxAmount {\n ...MoneyFragment\n }\n }\n note\n attributes {\n key\n value\n }\n discountCodes {\n code\n }\n}\n\nfragment MoneyFragment on MoneyV2 {\n currencyCode\n amount\n}\nfragment ImageFragment on Image {\n id\n url\n altText\n width\n height\n}\n`;\n"],"names":["CartContext","createContext","useCart","context","useContext","Error","CartProvider","children","numCartLines","onCreate","onLineAdd","onLineRemove","onLineUpdate","onNoteUpdate","onBuyerIdentityUpdate","onAttributesUpdate","onDiscountCodesUpdate","onCreateComplete","onLineAddComplete","onLineRemoveComplete","onLineUpdateComplete","onNoteUpdateComplete","onBuyerIdentityUpdateComplete","onAttributesUpdateComplete","onDiscountCodesUpdateComplete","data","cart","cartFragment","defaultCartFragment","customerAccessToken","countryCode","toUpperCase","prevCountryCode","setPrevCountryCode","useState","prevCustomerAccessToken","setPrevCustomerAccessToken","customerOverridesCountryCode","useRef","current","cartState","cartSend","useCartAPIStateMachine","onCartActionEntry","event","type","error","onCartActionOptimisticUI","undefined","lastValidCart","lines","filter","line","id","payload","includes","map","updatedLine","find","quantity","onCartActionComplete","cartActionEvent","countryCodeNotUpdated","cartReady","cartCompleted","matches","countryChanged","value","buyerIdentity","errors","fetchingFromStorage","useEffect","storageAvailable","cartId","window","localStorage","getItem","CART_ID_STORAGE_KEY","console","warn","onCartReadySend","useCallback","cartEvent","setItem","removeItem","cartCreate","cartInput","cartDisplayState","useDelayedStateUntilHydration","cartContextValue","useMemo","attributes","status","transposeStatus","totalQuantity","linesAdd","linesRemove","linesUpdate","noteUpdate","note","buyerIdentityUpdate","cartAttributesUpdate","discountCodesUpdate","discountCodes","_jsx","state","isPending","startTransition","useTransition","delayedState","setDelayedState","firstTimePending","firstTimePendingFinished","displayState","storage","x","e","DOMException","code","name","length"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"CartProvider.js","sources":["../../src/CartProvider.tsx"],"sourcesContent":["import {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n useTransition,\n createContext,\n useContext,\n} from 'react';\nimport {\n AttributeInput,\n CartBuyerIdentityInput,\n CartInput,\n CartLineInput,\n CartLineUpdateInput,\n CountryCode,\n Cart as CartType,\n MutationCartNoteUpdateArgs,\n} from './storefront-api-types.js';\nimport {\n BuyerIdentityUpdateEvent,\n CartMachineContext,\n CartMachineEvent,\n CartMachineTypeState,\n CartWithActions,\n} from './cart-types.js';\nimport {useCartAPIStateMachine} from './useCartAPIStateMachine.js';\nimport {CART_ID_STORAGE_KEY} from './cart-constants.js';\nimport {PartialDeep} from 'type-fest';\n\nexport const CartContext = createContext<CartWithActions | null>(null);\n\n/**\n * The `useCart` hook provides access to the cart object. It must be a descendent of a `CartProvider` component.\n */\nexport function useCart() {\n const context = useContext(CartContext);\n\n if (!context) {\n throw new Error('Expected a Cart Context, but no Cart Context was found');\n }\n\n return context;\n}\n\nexport function CartProvider({\n children,\n numCartLines,\n onCreate,\n onLineAdd,\n onLineRemove,\n onLineUpdate,\n onNoteUpdate,\n onBuyerIdentityUpdate,\n onAttributesUpdate,\n onDiscountCodesUpdate,\n onCreateComplete,\n onLineAddComplete,\n onLineRemoveComplete,\n onLineUpdateComplete,\n onNoteUpdateComplete,\n onBuyerIdentityUpdateComplete,\n onAttributesUpdateComplete,\n onDiscountCodesUpdateComplete,\n data: cart,\n cartFragment = defaultCartFragment,\n customerAccessToken,\n countryCode = 'US',\n}: {\n /** Any `ReactNode` elements. */\n children: React.ReactNode;\n /** Maximum number of cart lines to fetch. Defaults to 250 cart lines. */\n numCartLines?: number;\n /** A callback that is invoked when the process to create a cart begins, but before the cart is created in the Storefront API. */\n onCreate?: () => void;\n /** A callback that is invoked when the process to add a line item to the cart begins, but before the line item is added to the Storefront API. */\n onLineAdd?: () => void;\n /** A callback that is invoked when the process to remove a line item to the cart begins, but before the line item is removed from the Storefront API. */\n onLineRemove?: () => void;\n /** A callback that is invoked when the process to update a line item in the cart begins, but before the line item is updated in the Storefront API. */\n onLineUpdate?: () => void;\n /** A callback that is invoked when the process to add or update a note in the cart begins, but before the note is added or updated in the Storefront API. */\n onNoteUpdate?: () => void;\n /** A callback that is invoked when the process to update the buyer identity begins, but before the buyer identity is updated in the Storefront API. */\n onBuyerIdentityUpdate?: () => void;\n /** A callback that is invoked when the process to update the cart attributes begins, but before the attributes are updated in the Storefront API. */\n onAttributesUpdate?: () => void;\n /** A callback that is invoked when the process to update the cart discount codes begins, but before the discount codes are updated in the Storefront API. */\n onDiscountCodesUpdate?: () => void;\n /** A callback that is invoked when the process to create a cart completes */\n onCreateComplete?: () => void;\n /** A callback that is invoked when the process to add a line item to the cart completes */\n onLineAddComplete?: () => void;\n /** A callback that is invoked when the process to remove a line item to the cart completes */\n onLineRemoveComplete?: () => void;\n /** A callback that is invoked when the process to update a line item in the cart completes */\n onLineUpdateComplete?: () => void;\n /** A callback that is invoked when the process to add or update a note in the cart completes */\n onNoteUpdateComplete?: () => void;\n /** A callback that is invoked when the process to update the buyer identity completes */\n onBuyerIdentityUpdateComplete?: () => void;\n /** A callback that is invoked when the process to update the cart attributes completes */\n onAttributesUpdateComplete?: () => void;\n /** A callback that is invoked when the process to update the cart discount codes completes */\n onDiscountCodesUpdateComplete?: () => void;\n /** An object with fields that correspond to the Storefront API's [Cart object](https://shopify.dev/api/storefront/latest/objects/cart). */\n data?: PartialDeep<CartType, {recurseIntoArrays: true}>;\n /** A fragment used to query the Storefront API's [Cart object](https://shopify.dev/api/storefront/latest/objects/cart) for all queries and mutations. A default value is used if no argument is provided. */\n cartFragment?: string;\n /** A customer access token that's accessible on the server if there's a customer login. */\n customerAccessToken?: CartBuyerIdentityInput['customerAccessToken'];\n /** The ISO country code for i18n. */\n countryCode?: CountryCode;\n}) {\n if (countryCode) countryCode = countryCode.toUpperCase() as CountryCode;\n const [prevCountryCode, setPrevCountryCode] = useState(countryCode);\n const [prevCustomerAccessToken, setPrevCustomerAccessToken] =\n useState(customerAccessToken);\n const customerOverridesCountryCode = useRef(false);\n\n if (\n prevCountryCode !== countryCode ||\n prevCustomerAccessToken !== customerAccessToken\n ) {\n setPrevCountryCode(countryCode);\n setPrevCustomerAccessToken(customerAccessToken);\n customerOverridesCountryCode.current = false;\n }\n\n const [cartState, cartSend] = useCartAPIStateMachine({\n numCartLines,\n data: cart,\n cartFragment,\n countryCode,\n onCartActionEntry(context, event) {\n try {\n switch (event.type) {\n case 'CART_CREATE':\n return onCreate?.();\n case 'CARTLINE_ADD':\n return onLineAdd?.();\n case 'CARTLINE_REMOVE':\n return onLineRemove?.();\n case 'CARTLINE_UPDATE':\n return onLineUpdate?.();\n case 'NOTE_UPDATE':\n return onNoteUpdate?.();\n case 'BUYER_IDENTITY_UPDATE':\n return onBuyerIdentityUpdate?.();\n case 'CART_ATTRIBUTES_UPDATE':\n return onAttributesUpdate?.();\n case 'DISCOUNT_CODES_UPDATE':\n return onDiscountCodesUpdate?.();\n }\n } catch (error) {\n console.error('Cart entry action failed', error);\n }\n },\n onCartActionOptimisticUI(context, event) {\n if (!context?.cart) return {cart: undefined};\n switch (event.type) {\n case 'CARTLINE_REMOVE':\n return {\n ...context,\n lastValidCart: context.cart,\n cart: {\n ...context.cart,\n lines: context?.cart?.lines?.filter(\n (line) => line?.id && !event.payload.lines.includes(line?.id)\n ),\n },\n };\n case 'CARTLINE_UPDATE':\n return {\n ...context,\n lastValidCart: context.cart,\n cart: {\n ...context.cart,\n lines: context?.cart?.lines?.map((line) => {\n const updatedLine = event.payload.lines.find(\n ({id}) => id === line?.id\n );\n\n if (updatedLine && updatedLine.quantity) {\n return {\n ...line,\n quantity: updatedLine.quantity,\n };\n }\n\n return line;\n }),\n },\n };\n }\n return {cart: context.cart ? {...context.cart} : undefined};\n },\n onCartActionComplete(context, event) {\n const cartActionEvent = event.payload.cartActionEvent;\n try {\n switch (event.type) {\n case 'RESOLVE':\n switch (cartActionEvent.type) {\n case 'CART_CREATE':\n return onCreateComplete?.();\n case 'CARTLINE_ADD':\n return onLineAddComplete?.();\n case 'CARTLINE_REMOVE':\n return onLineRemoveComplete?.();\n case 'CARTLINE_UPDATE':\n return onLineUpdateComplete?.();\n case 'NOTE_UPDATE':\n return onNoteUpdateComplete?.();\n case 'BUYER_IDENTITY_UPDATE':\n if (countryCodeNotUpdated(context, cartActionEvent)) {\n customerOverridesCountryCode.current = true;\n }\n return onBuyerIdentityUpdateComplete?.();\n case 'CART_ATTRIBUTES_UPDATE':\n return onAttributesUpdateComplete?.();\n case 'DISCOUNT_CODES_UPDATE':\n return onDiscountCodesUpdateComplete?.();\n }\n }\n } catch (error) {\n console.error('onCartActionComplete failed', error);\n }\n },\n });\n\n const cartReady = useRef(false);\n const cartCompleted = cartState.matches('cartCompleted');\n\n const countryChanged =\n (cartState.value === 'idle' ||\n cartState.value === 'error' ||\n cartState.value === 'cartCompleted') &&\n countryCode !== cartState?.context?.cart?.buyerIdentity?.countryCode &&\n !cartState.context.errors;\n\n const fetchingFromStorage = useRef(false);\n\n /**\n * Initializes cart with priority in this order:\n * 1. cart props\n * 2. localStorage cartId\n */\n useEffect(() => {\n if (!cartReady.current && !fetchingFromStorage.current) {\n if (!cart && storageAvailable('localStorage')) {\n fetchingFromStorage.current = true;\n try {\n const cartId = window.localStorage.getItem(CART_ID_STORAGE_KEY);\n if (cartId) {\n cartSend({type: 'CART_FETCH', payload: {cartId}});\n }\n } catch (error) {\n console.warn('error fetching cartId');\n console.warn(error);\n }\n }\n cartReady.current = true;\n }\n }, [cart, cartReady, cartSend]);\n\n // Update cart country code if cart and props countryCode's as different\n useEffect(() => {\n if (!countryChanged || customerOverridesCountryCode.current) return;\n cartSend({\n type: 'BUYER_IDENTITY_UPDATE',\n payload: {buyerIdentity: {countryCode, customerAccessToken}},\n });\n }, [\n countryCode,\n customerAccessToken,\n countryChanged,\n customerOverridesCountryCode,\n cartSend,\n ]);\n\n // send cart events when ready\n const onCartReadySend = useCallback(\n (cartEvent: CartMachineEvent) => {\n if (!cartReady.current) {\n return console.warn(\"Cart isn't ready yet\");\n }\n cartSend(cartEvent);\n },\n [cartSend]\n );\n\n // save cart id to local storage\n useEffect(() => {\n if (cartState?.context?.cart?.id && storageAvailable('localStorage')) {\n try {\n window.localStorage.setItem(\n CART_ID_STORAGE_KEY,\n cartState.context.cart?.id\n );\n } catch (error) {\n console.warn('Failed to save cartId to localStorage', error);\n }\n }\n }, [cartState?.context?.cart?.id]);\n\n // delete cart from local storage if cart fetched has been completed\n useEffect(() => {\n if (cartCompleted && storageAvailable('localStorage')) {\n try {\n window.localStorage.removeItem(CART_ID_STORAGE_KEY);\n } catch (error) {\n console.warn('Failed to delete cartId from localStorage', error);\n }\n }\n }, [cartCompleted]);\n\n const cartCreate = useCallback(\n (cartInput: CartInput) => {\n if (countryCode && !cartInput.buyerIdentity?.countryCode) {\n if (cartInput.buyerIdentity == null) {\n cartInput.buyerIdentity = {};\n }\n cartInput.buyerIdentity.countryCode = countryCode;\n }\n\n if (\n customerAccessToken &&\n !cartInput.buyerIdentity?.customerAccessToken\n ) {\n if (cartInput.buyerIdentity == null) {\n cartInput.buyerIdentity = {};\n }\n cartInput.buyerIdentity.customerAccessToken = customerAccessToken;\n }\n onCartReadySend({\n type: 'CART_CREATE',\n payload: cartInput,\n });\n },\n [countryCode, customerAccessToken, onCartReadySend]\n );\n\n // Delays the cart state in the context if the page is hydrating\n // preventing suspense boundary errors.\n const cartDisplayState = useDelayedStateUntilHydration(cartState);\n\n const cartContextValue = useMemo<CartWithActions>(() => {\n return {\n ...(cartDisplayState?.context?.cart ?? {lines: [], attributes: []}),\n status: transposeStatus(cartDisplayState.value),\n error: cartDisplayState?.context?.errors,\n totalQuantity: cartDisplayState?.context?.cart?.totalQuantity ?? 0,\n cartCreate,\n linesAdd(lines: CartLineInput[]) {\n if (cartDisplayState?.context?.cart?.id) {\n onCartReadySend({\n type: 'CARTLINE_ADD',\n payload: {lines},\n });\n } else {\n cartCreate({lines});\n }\n },\n linesRemove(lines: string[]) {\n onCartReadySend({\n type: 'CARTLINE_REMOVE',\n payload: {\n lines,\n },\n });\n },\n linesUpdate(lines: CartLineUpdateInput[]) {\n onCartReadySend({\n type: 'CARTLINE_UPDATE',\n payload: {\n lines,\n },\n });\n },\n noteUpdate(note: MutationCartNoteUpdateArgs['note']) {\n onCartReadySend({\n type: 'NOTE_UPDATE',\n payload: {\n note,\n },\n });\n },\n buyerIdentityUpdate(buyerIdentity: CartBuyerIdentityInput) {\n onCartReadySend({\n type: 'BUYER_IDENTITY_UPDATE',\n payload: {\n buyerIdentity,\n },\n });\n },\n cartAttributesUpdate(attributes: AttributeInput[]) {\n onCartReadySend({\n type: 'CART_ATTRIBUTES_UPDATE',\n payload: {\n attributes,\n },\n });\n },\n discountCodesUpdate(discountCodes: string[]) {\n onCartReadySend({\n type: 'DISCOUNT_CODES_UPDATE',\n payload: {\n discountCodes,\n },\n });\n },\n cartFragment,\n };\n }, [\n cartCreate,\n cartDisplayState?.context?.cart,\n cartDisplayState?.context?.errors,\n cartDisplayState.value,\n cartFragment,\n onCartReadySend,\n ]);\n\n return (\n <CartContext.Provider value={cartContextValue}>\n {children}\n </CartContext.Provider>\n );\n}\n\nfunction transposeStatus(\n status: CartMachineTypeState['value']\n): CartWithActions['status'] {\n switch (status) {\n case 'uninitialized':\n case 'initializationError':\n return 'uninitialized';\n case 'idle':\n case 'cartCompleted':\n case 'error':\n return 'idle';\n case 'cartFetching':\n return 'fetching';\n case 'cartCreating':\n return 'creating';\n case 'cartLineAdding':\n case 'cartLineRemoving':\n case 'cartLineUpdating':\n case 'noteUpdating':\n case 'buyerIdentityUpdating':\n case 'cartAttributesUpdating':\n case 'discountCodesUpdating':\n return 'updating';\n }\n}\n\n/**\n * Delays a state update until hydration finishes. Useful for preventing suspense boundaries errors when updating a context\n * @remarks this uses startTransition and waits for it to finish.\n */\nfunction useDelayedStateUntilHydration<T>(state: T) {\n const [isPending, startTransition] = useTransition();\n const [delayedState, setDelayedState] = useState(state);\n\n const firstTimePending = useRef(false);\n if (isPending) {\n firstTimePending.current = true;\n }\n\n const firstTimePendingFinished = useRef(false);\n if (!isPending && firstTimePending.current) {\n firstTimePendingFinished.current = true;\n }\n\n useEffect(() => {\n startTransition(() => {\n if (!firstTimePendingFinished.current) {\n setDelayedState(state);\n }\n });\n }, [state]);\n\n const displayState = firstTimePendingFinished.current ? state : delayedState;\n\n return displayState;\n}\n\n/** Check for storage availability funciton obtained from\n * https://developer.mozilla.org/en-US/docs/Web/API/Web_Storage_API/Using_the_Web_Storage_API\n */\nexport function storageAvailable(type: 'localStorage' | 'sessionStorage') {\n let storage;\n try {\n storage = window[type];\n const x = '__storage_test__';\n storage.setItem(x, x);\n storage.removeItem(x);\n return true;\n } catch (e) {\n return (\n e instanceof DOMException &&\n // everything except Firefox\n (e.code === 22 ||\n // Firefox\n e.code === 1014 ||\n // test name field too, because code might not be present\n // everything except Firefox\n e.name === 'QuotaExceededError' ||\n // Firefox\n e.name === 'NS_ERROR_DOM_QUOTA_REACHED') &&\n // acknowledge QuotaExceededError only if there's something already stored\n storage &&\n storage.length !== 0\n );\n }\n}\n\nfunction countryCodeNotUpdated(\n context: CartMachineContext,\n event: BuyerIdentityUpdateEvent\n) {\n return (\n event.payload.buyerIdentity.countryCode &&\n context.cart?.buyerIdentity?.countryCode !==\n event.payload.buyerIdentity.countryCode\n );\n}\n\nexport const defaultCartFragment = `\nfragment CartFragment on Cart {\n id\n checkoutUrl\n totalQuantity\n buyerIdentity {\n countryCode\n customer {\n id\n email\n firstName\n lastName\n displayName\n }\n email\n phone\n }\n lines(first: $numCartLines) {\n edges {\n node {\n id\n quantity\n attributes {\n key\n value\n }\n cost {\n totalAmount {\n amount\n currencyCode\n }\n compareAtAmountPerQuantity {\n amount\n currencyCode\n }\n }\n merchandise {\n ... on ProductVariant {\n id\n availableForSale\n compareAtPriceV2 {\n ...MoneyFragment\n }\n priceV2 {\n ...MoneyFragment\n }\n requiresShipping\n title\n image {\n ...ImageFragment\n }\n product {\n handle\n title\n }\n selectedOptions {\n name\n value\n }\n }\n }\n }\n }\n }\n cost {\n subtotalAmount {\n ...MoneyFragment\n }\n totalAmount {\n ...MoneyFragment\n }\n totalDutyAmount {\n ...MoneyFragment\n }\n totalTaxAmount {\n ...MoneyFragment\n }\n }\n note\n attributes {\n key\n value\n }\n discountCodes {\n code\n }\n}\n\nfragment MoneyFragment on MoneyV2 {\n currencyCode\n amount\n}\nfragment ImageFragment on Image {\n id\n url\n altText\n width\n height\n}\n`;\n"],"names":["CartContext","createContext","useCart","context","useContext","Error","CartProvider","children","numCartLines","onCreate","onLineAdd","onLineRemove","onLineUpdate","onNoteUpdate","onBuyerIdentityUpdate","onAttributesUpdate","onDiscountCodesUpdate","onCreateComplete","onLineAddComplete","onLineRemoveComplete","onLineUpdateComplete","onNoteUpdateComplete","onBuyerIdentityUpdateComplete","onAttributesUpdateComplete","onDiscountCodesUpdateComplete","data","cart","cartFragment","defaultCartFragment","customerAccessToken","countryCode","toUpperCase","prevCountryCode","setPrevCountryCode","useState","prevCustomerAccessToken","setPrevCustomerAccessToken","customerOverridesCountryCode","useRef","current","cartState","cartSend","useCartAPIStateMachine","onCartActionEntry","event","type","error","onCartActionOptimisticUI","undefined","lastValidCart","lines","filter","line","id","payload","includes","map","updatedLine","find","quantity","onCartActionComplete","cartActionEvent","countryCodeNotUpdated","cartReady","cartCompleted","matches","countryChanged","value","buyerIdentity","errors","fetchingFromStorage","useEffect","storageAvailable","cartId","window","localStorage","getItem","CART_ID_STORAGE_KEY","console","warn","onCartReadySend","useCallback","cartEvent","setItem","removeItem","cartCreate","cartInput","cartDisplayState","useDelayedStateUntilHydration","cartContextValue","useMemo","attributes","status","transposeStatus","totalQuantity","linesAdd","linesRemove","linesUpdate","noteUpdate","note","buyerIdentityUpdate","cartAttributesUpdate","discountCodesUpdate","discountCodes","_jsx","state","isPending","startTransition","useTransition","delayedState","setDelayedState","firstTimePending","firstTimePendingFinished","displayState","storage","x","e","DOMException","code","name","length"],"mappings":"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"}
|
package/dist/dev/Metafield.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
|
|
3
|
-
const
|
|
3
|
+
const require$$0 = require("react");
|
|
4
4
|
const ShopifyProvider = require("./ShopifyProvider.js");
|
|
5
5
|
const Image = require("./Image.js");
|
|
6
6
|
const Video = require("./Video.js");
|
|
@@ -16,7 +16,7 @@ function Metafield(props) {
|
|
|
16
16
|
const {
|
|
17
17
|
locale
|
|
18
18
|
} = ShopifyProvider.useShop();
|
|
19
|
-
const parsedMetafield =
|
|
19
|
+
const parsedMetafield = require$$0.useMemo(() => parseMetafield(data), [data]);
|
|
20
20
|
if (!parsedMetafield) {
|
|
21
21
|
const noDataPropWarning = `<Metafield/>: nothing was passed to the data prop 'data'. Rendering 'null'`;
|
|
22
22
|
{
|