@shopify/hydrogen-react 0.0.0-next-ea3959b → 0.0.0-next-dada720
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/README.md +21 -21
- package/dist/browser-dev/AddToCartButton.mjs.map +1 -1
- package/dist/browser-dev/BuyNowButton.mjs.map +1 -1
- package/dist/browser-dev/CartCheckoutButton.mjs.map +1 -1
- package/dist/browser-dev/CartCost.mjs +25 -0
- package/dist/browser-dev/CartCost.mjs.map +1 -0
- package/dist/browser-dev/CartLinePrice.mjs +18 -0
- package/dist/browser-dev/CartLinePrice.mjs.map +1 -0
- package/dist/browser-dev/CartLineProvider.mjs +19 -0
- package/dist/browser-dev/CartLineProvider.mjs.map +1 -0
- package/dist/browser-dev/CartProvider.mjs.map +1 -1
- package/dist/browser-dev/ExternalVideo.mjs.map +1 -1
- package/dist/browser-dev/Image.mjs.map +1 -1
- package/dist/browser-dev/MediaFile.mjs.map +1 -1
- package/dist/browser-dev/ModelViewer.mjs.map +1 -1
- package/dist/browser-dev/ProductPrice.mjs.map +1 -1
- package/dist/browser-dev/ProductProvider.mjs.map +1 -1
- package/dist/browser-dev/ShopPayButton.mjs +10 -10
- package/dist/browser-dev/ShopPayButton.mjs.map +1 -1
- package/dist/browser-dev/ShopifyProvider.mjs +9 -21
- package/dist/browser-dev/ShopifyProvider.mjs.map +1 -1
- package/dist/browser-dev/analytics-constants.mjs +43 -0
- package/dist/browser-dev/analytics-constants.mjs.map +1 -0
- package/dist/browser-dev/analytics-schema-custom-storefront-customer-tracking.mjs +145 -0
- package/dist/browser-dev/analytics-schema-custom-storefront-customer-tracking.mjs.map +1 -0
- package/dist/browser-dev/analytics-schema-trekkie-storefront-page-view.mjs +58 -0
- package/dist/browser-dev/analytics-schema-trekkie-storefront-page-view.mjs.map +1 -0
- package/dist/browser-dev/analytics-utils.mjs +49 -0
- package/dist/browser-dev/analytics-utils.mjs.map +1 -0
- package/dist/browser-dev/analytics.mjs +159 -0
- package/dist/browser-dev/analytics.mjs.map +1 -0
- package/dist/browser-dev/cart-hooks.mjs +5 -7
- package/dist/browser-dev/cart-hooks.mjs.map +1 -1
- package/dist/browser-dev/cookies-utils.mjs +50 -0
- package/dist/browser-dev/cookies-utils.mjs.map +1 -0
- package/dist/browser-dev/index.mjs +20 -2
- package/dist/browser-dev/index.mjs.map +1 -1
- package/dist/browser-dev/parse-metafield.mjs.map +1 -1
- package/dist/browser-dev/storefront-client.mjs +13 -12
- package/dist/browser-dev/storefront-client.mjs.map +1 -1
- package/dist/browser-dev/useMoney.mjs +2 -1
- package/dist/browser-dev/useMoney.mjs.map +1 -1
- package/dist/browser-dev/useShopifyCookies.mjs +41 -0
- package/dist/browser-dev/useShopifyCookies.mjs.map +1 -0
- package/dist/browser-prod/AddToCartButton.mjs.map +1 -1
- package/dist/browser-prod/BuyNowButton.mjs.map +1 -1
- package/dist/browser-prod/CartCheckoutButton.mjs.map +1 -1
- package/dist/browser-prod/CartCost.mjs +25 -0
- package/dist/browser-prod/CartCost.mjs.map +1 -0
- package/dist/browser-prod/CartLinePrice.mjs +18 -0
- package/dist/browser-prod/CartLinePrice.mjs.map +1 -0
- package/dist/browser-prod/CartLineProvider.mjs +19 -0
- package/dist/browser-prod/CartLineProvider.mjs.map +1 -0
- package/dist/browser-prod/CartProvider.mjs.map +1 -1
- package/dist/browser-prod/ExternalVideo.mjs.map +1 -1
- package/dist/browser-prod/Image.mjs.map +1 -1
- package/dist/browser-prod/MediaFile.mjs.map +1 -1
- package/dist/browser-prod/ModelViewer.mjs.map +1 -1
- package/dist/browser-prod/ProductPrice.mjs.map +1 -1
- package/dist/browser-prod/ProductProvider.mjs.map +1 -1
- package/dist/browser-prod/ShopPayButton.mjs +10 -10
- package/dist/browser-prod/ShopPayButton.mjs.map +1 -1
- package/dist/browser-prod/ShopifyProvider.mjs +9 -16
- package/dist/browser-prod/ShopifyProvider.mjs.map +1 -1
- package/dist/browser-prod/analytics-constants.mjs +43 -0
- package/dist/browser-prod/analytics-constants.mjs.map +1 -0
- package/dist/browser-prod/analytics-schema-custom-storefront-customer-tracking.mjs +145 -0
- package/dist/browser-prod/analytics-schema-custom-storefront-customer-tracking.mjs.map +1 -0
- package/dist/browser-prod/analytics-schema-trekkie-storefront-page-view.mjs +58 -0
- package/dist/browser-prod/analytics-schema-trekkie-storefront-page-view.mjs.map +1 -0
- package/dist/browser-prod/analytics-utils.mjs +49 -0
- package/dist/browser-prod/analytics-utils.mjs.map +1 -0
- package/dist/browser-prod/analytics.mjs +158 -0
- package/dist/browser-prod/analytics.mjs.map +1 -0
- package/dist/browser-prod/cart-hooks.mjs +5 -7
- package/dist/browser-prod/cart-hooks.mjs.map +1 -1
- package/dist/browser-prod/cookies-utils.mjs +50 -0
- package/dist/browser-prod/cookies-utils.mjs.map +1 -0
- package/dist/browser-prod/index.mjs +20 -2
- package/dist/browser-prod/index.mjs.map +1 -1
- package/dist/browser-prod/parse-metafield.mjs.map +1 -1
- package/dist/browser-prod/storefront-client.mjs +13 -12
- package/dist/browser-prod/storefront-client.mjs.map +1 -1
- package/dist/browser-prod/useMoney.mjs +2 -1
- package/dist/browser-prod/useMoney.mjs.map +1 -1
- package/dist/browser-prod/useShopifyCookies.mjs +41 -0
- package/dist/browser-prod/useShopifyCookies.mjs.map +1 -0
- package/dist/node-dev/AddToCartButton.js.map +1 -1
- package/dist/node-dev/AddToCartButton.mjs.map +1 -1
- package/dist/node-dev/BuyNowButton.js.map +1 -1
- package/dist/node-dev/BuyNowButton.mjs.map +1 -1
- package/dist/node-dev/CartCheckoutButton.js.map +1 -1
- package/dist/node-dev/CartCheckoutButton.mjs.map +1 -1
- package/dist/node-dev/CartCost.js +25 -0
- package/dist/node-dev/CartCost.js.map +1 -0
- package/dist/node-dev/CartCost.mjs +25 -0
- package/dist/node-dev/CartCost.mjs.map +1 -0
- package/dist/node-dev/CartLinePrice.js +18 -0
- package/dist/node-dev/CartLinePrice.js.map +1 -0
- package/dist/node-dev/CartLinePrice.mjs +18 -0
- package/dist/node-dev/CartLinePrice.mjs.map +1 -0
- package/dist/node-dev/CartLineProvider.js +19 -0
- package/dist/node-dev/CartLineProvider.js.map +1 -0
- package/dist/node-dev/CartLineProvider.mjs +19 -0
- package/dist/node-dev/CartLineProvider.mjs.map +1 -0
- package/dist/node-dev/CartProvider.js.map +1 -1
- package/dist/node-dev/CartProvider.mjs.map +1 -1
- package/dist/node-dev/ExternalVideo.js.map +1 -1
- package/dist/node-dev/ExternalVideo.mjs.map +1 -1
- package/dist/node-dev/Image.js.map +1 -1
- package/dist/node-dev/Image.mjs.map +1 -1
- package/dist/node-dev/MediaFile.js.map +1 -1
- package/dist/node-dev/MediaFile.mjs.map +1 -1
- package/dist/node-dev/ModelViewer.js.map +1 -1
- package/dist/node-dev/ModelViewer.mjs.map +1 -1
- package/dist/node-dev/ProductPrice.js.map +1 -1
- package/dist/node-dev/ProductPrice.mjs.map +1 -1
- package/dist/node-dev/ProductProvider.js.map +1 -1
- package/dist/node-dev/ProductProvider.mjs.map +1 -1
- package/dist/node-dev/ShopPayButton.js +9 -9
- package/dist/node-dev/ShopPayButton.js.map +1 -1
- package/dist/node-dev/ShopPayButton.mjs +10 -10
- package/dist/node-dev/ShopPayButton.mjs.map +1 -1
- package/dist/node-dev/ShopifyProvider.js +9 -21
- package/dist/node-dev/ShopifyProvider.js.map +1 -1
- package/dist/node-dev/ShopifyProvider.mjs +9 -21
- package/dist/node-dev/ShopifyProvider.mjs.map +1 -1
- package/dist/node-dev/analytics-constants.js +43 -0
- package/dist/node-dev/analytics-constants.js.map +1 -0
- package/dist/node-dev/analytics-constants.mjs +43 -0
- package/dist/node-dev/analytics-constants.mjs.map +1 -0
- package/dist/node-dev/analytics-schema-custom-storefront-customer-tracking.js +145 -0
- package/dist/node-dev/analytics-schema-custom-storefront-customer-tracking.js.map +1 -0
- package/dist/node-dev/analytics-schema-custom-storefront-customer-tracking.mjs +145 -0
- package/dist/node-dev/analytics-schema-custom-storefront-customer-tracking.mjs.map +1 -0
- package/dist/node-dev/analytics-schema-trekkie-storefront-page-view.js +58 -0
- package/dist/node-dev/analytics-schema-trekkie-storefront-page-view.js.map +1 -0
- package/dist/node-dev/analytics-schema-trekkie-storefront-page-view.mjs +58 -0
- package/dist/node-dev/analytics-schema-trekkie-storefront-page-view.mjs.map +1 -0
- package/dist/node-dev/analytics-utils.js +49 -0
- package/dist/node-dev/analytics-utils.js.map +1 -0
- package/dist/node-dev/analytics-utils.mjs +49 -0
- package/dist/node-dev/analytics-utils.mjs.map +1 -0
- package/dist/node-dev/analytics.js +159 -0
- package/dist/node-dev/analytics.js.map +1 -0
- package/dist/node-dev/analytics.mjs +159 -0
- package/dist/node-dev/analytics.mjs.map +1 -0
- package/dist/node-dev/cart-hooks.js +4 -6
- package/dist/node-dev/cart-hooks.js.map +1 -1
- package/dist/node-dev/cart-hooks.mjs +5 -7
- package/dist/node-dev/cart-hooks.mjs.map +1 -1
- package/dist/node-dev/cookies-utils.js +50 -0
- package/dist/node-dev/cookies-utils.js.map +1 -0
- package/dist/node-dev/cookies-utils.mjs +50 -0
- package/dist/node-dev/cookies-utils.mjs.map +1 -0
- package/dist/node-dev/index.js +20 -2
- package/dist/node-dev/index.js.map +1 -1
- package/dist/node-dev/index.mjs +20 -2
- package/dist/node-dev/index.mjs.map +1 -1
- package/dist/node-dev/parse-metafield.js.map +1 -1
- package/dist/node-dev/parse-metafield.mjs.map +1 -1
- package/dist/node-dev/storefront-client.js +13 -12
- package/dist/node-dev/storefront-client.js.map +1 -1
- package/dist/node-dev/storefront-client.mjs +13 -12
- package/dist/node-dev/storefront-client.mjs.map +1 -1
- package/dist/node-dev/useMoney.js +2 -1
- package/dist/node-dev/useMoney.js.map +1 -1
- package/dist/node-dev/useMoney.mjs +2 -1
- package/dist/node-dev/useMoney.mjs.map +1 -1
- package/dist/node-dev/useShopifyCookies.js +41 -0
- package/dist/node-dev/useShopifyCookies.js.map +1 -0
- package/dist/node-dev/useShopifyCookies.mjs +41 -0
- package/dist/node-dev/useShopifyCookies.mjs.map +1 -0
- package/dist/node-prod/AddToCartButton.js.map +1 -1
- package/dist/node-prod/AddToCartButton.mjs.map +1 -1
- package/dist/node-prod/BuyNowButton.js.map +1 -1
- package/dist/node-prod/BuyNowButton.mjs.map +1 -1
- package/dist/node-prod/CartCheckoutButton.js.map +1 -1
- package/dist/node-prod/CartCheckoutButton.mjs.map +1 -1
- package/dist/node-prod/CartCost.js +25 -0
- package/dist/node-prod/CartCost.js.map +1 -0
- package/dist/node-prod/CartCost.mjs +25 -0
- package/dist/node-prod/CartCost.mjs.map +1 -0
- package/dist/node-prod/CartLinePrice.js +18 -0
- package/dist/node-prod/CartLinePrice.js.map +1 -0
- package/dist/node-prod/CartLinePrice.mjs +18 -0
- package/dist/node-prod/CartLinePrice.mjs.map +1 -0
- package/dist/node-prod/CartLineProvider.js +19 -0
- package/dist/node-prod/CartLineProvider.js.map +1 -0
- package/dist/node-prod/CartLineProvider.mjs +19 -0
- package/dist/node-prod/CartLineProvider.mjs.map +1 -0
- package/dist/node-prod/CartProvider.js.map +1 -1
- package/dist/node-prod/CartProvider.mjs.map +1 -1
- package/dist/node-prod/ExternalVideo.js.map +1 -1
- package/dist/node-prod/ExternalVideo.mjs.map +1 -1
- package/dist/node-prod/Image.js.map +1 -1
- package/dist/node-prod/Image.mjs.map +1 -1
- package/dist/node-prod/MediaFile.js.map +1 -1
- package/dist/node-prod/MediaFile.mjs.map +1 -1
- package/dist/node-prod/ModelViewer.js.map +1 -1
- package/dist/node-prod/ModelViewer.mjs.map +1 -1
- package/dist/node-prod/ProductPrice.js.map +1 -1
- package/dist/node-prod/ProductPrice.mjs.map +1 -1
- package/dist/node-prod/ProductProvider.js.map +1 -1
- package/dist/node-prod/ProductProvider.mjs.map +1 -1
- package/dist/node-prod/ShopPayButton.js +9 -9
- package/dist/node-prod/ShopPayButton.js.map +1 -1
- package/dist/node-prod/ShopPayButton.mjs +10 -10
- package/dist/node-prod/ShopPayButton.mjs.map +1 -1
- package/dist/node-prod/ShopifyProvider.js +9 -16
- package/dist/node-prod/ShopifyProvider.js.map +1 -1
- package/dist/node-prod/ShopifyProvider.mjs +9 -16
- package/dist/node-prod/ShopifyProvider.mjs.map +1 -1
- package/dist/node-prod/analytics-constants.js +43 -0
- package/dist/node-prod/analytics-constants.js.map +1 -0
- package/dist/node-prod/analytics-constants.mjs +43 -0
- package/dist/node-prod/analytics-constants.mjs.map +1 -0
- package/dist/node-prod/analytics-schema-custom-storefront-customer-tracking.js +145 -0
- package/dist/node-prod/analytics-schema-custom-storefront-customer-tracking.js.map +1 -0
- package/dist/node-prod/analytics-schema-custom-storefront-customer-tracking.mjs +145 -0
- package/dist/node-prod/analytics-schema-custom-storefront-customer-tracking.mjs.map +1 -0
- package/dist/node-prod/analytics-schema-trekkie-storefront-page-view.js +58 -0
- package/dist/node-prod/analytics-schema-trekkie-storefront-page-view.js.map +1 -0
- package/dist/node-prod/analytics-schema-trekkie-storefront-page-view.mjs +58 -0
- package/dist/node-prod/analytics-schema-trekkie-storefront-page-view.mjs.map +1 -0
- package/dist/node-prod/analytics-utils.js +49 -0
- package/dist/node-prod/analytics-utils.js.map +1 -0
- package/dist/node-prod/analytics-utils.mjs +49 -0
- package/dist/node-prod/analytics-utils.mjs.map +1 -0
- package/dist/node-prod/analytics.js +158 -0
- package/dist/node-prod/analytics.js.map +1 -0
- package/dist/node-prod/analytics.mjs +158 -0
- package/dist/node-prod/analytics.mjs.map +1 -0
- package/dist/node-prod/cart-hooks.js +4 -6
- package/dist/node-prod/cart-hooks.js.map +1 -1
- package/dist/node-prod/cart-hooks.mjs +5 -7
- package/dist/node-prod/cart-hooks.mjs.map +1 -1
- package/dist/node-prod/cookies-utils.js +50 -0
- package/dist/node-prod/cookies-utils.js.map +1 -0
- package/dist/node-prod/cookies-utils.mjs +50 -0
- package/dist/node-prod/cookies-utils.mjs.map +1 -0
- package/dist/node-prod/index.js +20 -2
- package/dist/node-prod/index.js.map +1 -1
- package/dist/node-prod/index.mjs +20 -2
- package/dist/node-prod/index.mjs.map +1 -1
- package/dist/node-prod/parse-metafield.js.map +1 -1
- package/dist/node-prod/parse-metafield.mjs.map +1 -1
- package/dist/node-prod/storefront-client.js +13 -12
- package/dist/node-prod/storefront-client.js.map +1 -1
- package/dist/node-prod/storefront-client.mjs +13 -12
- package/dist/node-prod/storefront-client.mjs.map +1 -1
- package/dist/node-prod/useMoney.js +2 -1
- package/dist/node-prod/useMoney.js.map +1 -1
- package/dist/node-prod/useMoney.mjs +2 -1
- package/dist/node-prod/useMoney.mjs.map +1 -1
- package/dist/node-prod/useShopifyCookies.js +41 -0
- package/dist/node-prod/useShopifyCookies.js.map +1 -0
- package/dist/node-prod/useShopifyCookies.mjs +41 -0
- package/dist/node-prod/useShopifyCookies.mjs.map +1 -0
- package/dist/types/AddToCartButton.d.ts +3 -2
- package/dist/types/BuyNowButton.d.ts +7 -3
- package/dist/types/CartCheckoutButton.d.ts +6 -5
- package/dist/types/CartCost.d.ts +7 -5
- package/dist/types/CartLinePrice.d.ts +4 -4
- package/dist/types/CartLineProvider.d.ts +8 -6
- package/dist/types/CartProvider.d.ts +12 -2
- package/dist/types/ExternalVideo.d.ts +1 -2
- package/dist/types/Image.d.ts +5 -3
- package/dist/types/MediaFile.d.ts +12 -11
- package/dist/types/ModelViewer.d.ts +2 -2
- package/dist/types/ProductPrice.d.ts +1 -1
- package/dist/types/ProductProvider.d.ts +1 -1
- package/dist/types/ShopPayButton.d.ts +10 -10
- package/dist/types/ShopifyProvider.d.ts +35 -39
- package/dist/types/analytics-constants.d.ts +48 -0
- package/dist/types/analytics-schema-custom-storefront-customer-tracking.d.ts +3 -0
- package/dist/types/analytics-schema-trekkie-storefront-page-view.d.ts +2 -0
- package/dist/types/analytics-types.d.ts +108 -0
- package/dist/types/analytics-utils.d.ts +36 -0
- package/dist/types/analytics.d.ts +9 -0
- package/dist/types/cookies-utils.d.ts +4 -0
- package/dist/types/index.d.cts +11 -3
- package/dist/types/index.d.ts +11 -3
- package/dist/types/parse-metafield.d.ts +1 -3
- package/dist/types/storefront-client.d.ts +14 -14
- package/dist/types/useShopifyCookies.d.ts +14 -0
- package/dist/umd/hydrogen-react.dev.js +704 -172
- package/dist/umd/hydrogen-react.dev.js.map +1 -1
- package/dist/umd/hydrogen-react.prod.js +18 -16
- package/dist/umd/hydrogen-react.prod.js.map +1 -1
- package/package.json +12 -7
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
(function(global, factory) {
|
|
2
|
-
typeof exports === "object" && typeof module !== "undefined" ? factory(exports, require("react")) : typeof define === "function" && define.amd ? define(["exports", "react"], factory) : (global = typeof globalThis !== "undefined" ? globalThis : global || self, factory(global.
|
|
2
|
+
typeof exports === "object" && typeof module !== "undefined" ? factory(exports, require("react")) : typeof define === "function" && define.amd ? define(["exports", "react"], factory) : (global = typeof globalThis !== "undefined" ? globalThis : global || self, factory(global.storefrontkitreact = {}, global.React));
|
|
3
3
|
})(this, function(exports2, React) {
|
|
4
4
|
"use strict";
|
|
5
5
|
function _interopNamespaceDefault(e2) {
|
|
@@ -140,7 +140,7 @@
|
|
|
140
140
|
} };
|
|
141
141
|
return y;
|
|
142
142
|
}
|
|
143
|
-
var l = function(t2, n2) {
|
|
143
|
+
var l$1 = function(t2, n2) {
|
|
144
144
|
return t2.actions.forEach(function(e2) {
|
|
145
145
|
var r2 = e2.exec;
|
|
146
146
|
return r2 && r2(t2.context, n2);
|
|
@@ -148,7 +148,7 @@
|
|
|
148
148
|
};
|
|
149
149
|
function v(t2) {
|
|
150
150
|
var r2 = t2.initialState, i2 = n.NotStarted, o2 = /* @__PURE__ */ new Set(), c2 = { _machine: t2, send: function(e2) {
|
|
151
|
-
i2 === n.Running && (r2 = t2.transition(r2, e2), l(r2, u$1(e2)), o2.forEach(function(t3) {
|
|
151
|
+
i2 === n.Running && (r2 = t2.transition(r2, e2), l$1(r2, u$1(e2)), o2.forEach(function(t3) {
|
|
152
152
|
return t3(r2);
|
|
153
153
|
}));
|
|
154
154
|
}, subscribe: function(t3) {
|
|
@@ -161,7 +161,7 @@
|
|
|
161
161
|
r2 = { value: u2.value, actions: [], context: u2.context, matches: a(u2.value) };
|
|
162
162
|
} else
|
|
163
163
|
r2 = t2.initialState;
|
|
164
|
-
return i2 = n.Running, l(r2, e), c2;
|
|
164
|
+
return i2 = n.Running, l$1(r2, e), c2;
|
|
165
165
|
}, stop: function() {
|
|
166
166
|
return i2 = n.Stopped, o2.clear(), c2;
|
|
167
167
|
}, get state() {
|
|
@@ -949,13 +949,6 @@
|
|
|
949
949
|
`
|
|
950
950
|
);
|
|
951
951
|
const SFAPI_VERSION = "2023-01";
|
|
952
|
-
const warnings = /* @__PURE__ */ new Set();
|
|
953
|
-
const warnOnce = (string) => {
|
|
954
|
-
if (!warnings.has(string)) {
|
|
955
|
-
console.warn(string);
|
|
956
|
-
warnings.add(string);
|
|
957
|
-
}
|
|
958
|
-
};
|
|
959
952
|
function createStorefrontClient({
|
|
960
953
|
storeDomain,
|
|
961
954
|
privateStorefrontToken,
|
|
@@ -965,7 +958,7 @@
|
|
|
965
958
|
}) {
|
|
966
959
|
if (storefrontApiVersion !== SFAPI_VERSION) {
|
|
967
960
|
warnOnce(
|
|
968
|
-
`StorefrontClient: The Storefront API version that you're using is different than the version this build of Hydrogen
|
|
961
|
+
`StorefrontClient: The Storefront API version that you're using is different than the version this build of Hydrogen React is targeting. You may run into unexpected errors if these versions don't match. Received verion: "${storefrontApiVersion}"; expected version "${SFAPI_VERSION}"`
|
|
969
962
|
);
|
|
970
963
|
}
|
|
971
964
|
if (!privateStorefrontToken && !globalThis.document) {
|
|
@@ -980,10 +973,11 @@
|
|
|
980
973
|
}
|
|
981
974
|
return {
|
|
982
975
|
getShopifyDomain(overrideProps) {
|
|
983
|
-
return
|
|
976
|
+
return (overrideProps == null ? void 0 : overrideProps.storeDomain) ?? storeDomain;
|
|
984
977
|
},
|
|
985
978
|
getStorefrontApiUrl(overrideProps) {
|
|
986
|
-
|
|
979
|
+
const finalDomainUrl = (overrideProps == null ? void 0 : overrideProps.storeDomain) ?? storeDomain;
|
|
980
|
+
return `${finalDomainUrl}${finalDomainUrl.endsWith("/") ? "" : "/"}api/${(overrideProps == null ? void 0 : overrideProps.storefrontApiVersion) ?? storefrontApiVersion}/graphql.json`;
|
|
987
981
|
},
|
|
988
982
|
getPrivateTokenHeaders(overrideProps) {
|
|
989
983
|
if (!privateStorefrontToken && !(overrideProps == null ? void 0 : overrideProps.privateStorefrontToken)) {
|
|
@@ -1000,7 +994,7 @@
|
|
|
1000
994
|
return {
|
|
1001
995
|
// default to json
|
|
1002
996
|
"content-type": finalContentType === "graphql" ? "application/graphql" : "application/json",
|
|
1003
|
-
"X-SDK-Variant": "hydrogen-
|
|
997
|
+
"X-SDK-Variant": "hydrogen-react",
|
|
1004
998
|
"X-SDK-Variant-Source": "react",
|
|
1005
999
|
"X-SDK-Version": storefrontApiVersion,
|
|
1006
1000
|
"Shopify-Storefront-Private-Token": (overrideProps == null ? void 0 : overrideProps.privateStorefrontToken) ?? privateStorefrontToken ?? "",
|
|
@@ -1026,23 +1020,25 @@
|
|
|
1026
1020
|
return {
|
|
1027
1021
|
// default to json
|
|
1028
1022
|
"content-type": contentType === "graphql" ? "application/graphql" : "application/json",
|
|
1029
|
-
"X-SDK-Variant": "hydrogen-
|
|
1023
|
+
"X-SDK-Variant": "hydrogen-react",
|
|
1030
1024
|
"X-SDK-Variant-Source": "react",
|
|
1031
1025
|
"X-SDK-Version": storefrontApiVersion,
|
|
1032
1026
|
"X-Shopify-Storefront-Access-Token": accessToken
|
|
1033
1027
|
};
|
|
1034
1028
|
}
|
|
1029
|
+
const warnings = /* @__PURE__ */ new Set();
|
|
1030
|
+
const warnOnce = (string) => {
|
|
1031
|
+
if (!warnings.has(string)) {
|
|
1032
|
+
console.warn(string);
|
|
1033
|
+
warnings.add(string);
|
|
1034
|
+
}
|
|
1035
|
+
};
|
|
1035
1036
|
const ShopifyContext = React.createContext({
|
|
1036
1037
|
storeDomain: "test",
|
|
1037
1038
|
storefrontToken: "abc123",
|
|
1038
1039
|
storefrontApiVersion: SFAPI_VERSION,
|
|
1039
|
-
|
|
1040
|
-
|
|
1041
|
-
},
|
|
1042
|
-
language: {
|
|
1043
|
-
isoCode: "EN"
|
|
1044
|
-
},
|
|
1045
|
-
locale: "EN-US",
|
|
1040
|
+
countryIsoCode: "US",
|
|
1041
|
+
languageIsoCode: "EN",
|
|
1046
1042
|
getStorefrontApiUrl() {
|
|
1047
1043
|
return "";
|
|
1048
1044
|
},
|
|
@@ -1055,16 +1051,16 @@
|
|
|
1055
1051
|
});
|
|
1056
1052
|
function ShopifyProvider({
|
|
1057
1053
|
children,
|
|
1058
|
-
shopifyConfig
|
|
1054
|
+
...shopifyConfig
|
|
1059
1055
|
}) {
|
|
1060
|
-
if (!shopifyConfig) {
|
|
1056
|
+
if (!shopifyConfig.countryIsoCode || !shopifyConfig.languageIsoCode || !shopifyConfig.storeDomain || !shopifyConfig.storefrontToken || !shopifyConfig.storefrontApiVersion) {
|
|
1061
1057
|
throw new Error(
|
|
1062
|
-
`
|
|
1058
|
+
`Please provide the necessary props to '<ShopifyProvider/>'`
|
|
1063
1059
|
);
|
|
1064
1060
|
}
|
|
1065
1061
|
if (shopifyConfig.storefrontApiVersion !== SFAPI_VERSION) {
|
|
1066
1062
|
console.warn(
|
|
1067
|
-
`<ShopifyProvider/>: This version of Hydrogen
|
|
1063
|
+
`<ShopifyProvider/>: This version of Hydrogen React is built for Shopify's Storefront API version ${SFAPI_VERSION}, but it looks like you're using version ${shopifyConfig.storefrontApiVersion}. There may be issues or bugs if you use a mismatched version of Hydrogen React and the Storefront API.`
|
|
1068
1064
|
);
|
|
1069
1065
|
}
|
|
1070
1066
|
const finalConfig = React.useMemo(() => {
|
|
@@ -1082,17 +1078,10 @@
|
|
|
1082
1078
|
},
|
|
1083
1079
|
getShopifyDomain,
|
|
1084
1080
|
getStorefrontApiUrl(overrideProps) {
|
|
1085
|
-
|
|
1086
|
-
if ((_a = overrideProps == null ? void 0 : overrideProps.storeDomain) == null ? void 0 : _a.includes(".myshopify.com")) {
|
|
1087
|
-
{
|
|
1088
|
-
console.warn(
|
|
1089
|
-
`<ShopifyProvider/>: passing a 'storeDomain' prop that includes '.myshopify.com' will be unsupported in the future. Passing only the subdomain (for example, if the URL is 'test.myshopify.com', passing in 'test') will be the supported way going forward.`
|
|
1090
|
-
);
|
|
1091
|
-
}
|
|
1092
|
-
}
|
|
1093
|
-
return `${getShopifyDomain({
|
|
1081
|
+
const finalDomainUrl = getShopifyDomain({
|
|
1094
1082
|
storeDomain: (overrideProps == null ? void 0 : overrideProps.storeDomain) ?? shopifyConfig.storeDomain
|
|
1095
|
-
})
|
|
1083
|
+
});
|
|
1084
|
+
return `${finalDomainUrl}${finalDomainUrl.endsWith("/") ? "" : "/"}api/${(overrideProps == null ? void 0 : overrideProps.storefrontApiVersion) ?? shopifyConfig.storefrontApiVersion}/graphql.json`;
|
|
1096
1085
|
}
|
|
1097
1086
|
};
|
|
1098
1087
|
}, [shopifyConfig]);
|
|
@@ -1134,6 +1123,52 @@
|
|
|
1134
1123
|
(s2 = t2.trim().toLowerCase()) && (s2 === "httponly" || s2 === "secure") && (r2[s2] = true);
|
|
1135
1124
|
return r2;
|
|
1136
1125
|
}
|
|
1126
|
+
function l(a2, r2, e2 = {}) {
|
|
1127
|
+
let t2 = a2 + "=" + encodeURIComponent(r2);
|
|
1128
|
+
return e2.expires && (t2 += "; Expires=" + new Date(e2.expires).toUTCString()), e2.maxage != null && e2.maxage >= 0 && (t2 += "; Max-Age=" + (e2.maxage | 0)), e2.domain && (t2 += "; Domain=" + e2.domain), e2.path && (t2 += "; Path=" + e2.path), e2.samesite && (t2 += "; SameSite=" + e2.samesite), (e2.secure || e2.samesite === "None") && (t2 += "; Secure"), e2.httponly && (t2 += "; HttpOnly"), t2;
|
|
1129
|
+
}
|
|
1130
|
+
const tokenHash = "xxxx-4xxx-xxxx-xxxxxxxxxxxx";
|
|
1131
|
+
function buildUUID() {
|
|
1132
|
+
let hash = "";
|
|
1133
|
+
try {
|
|
1134
|
+
const crypto = window.crypto;
|
|
1135
|
+
const randomValuesArray = new Uint16Array(31);
|
|
1136
|
+
crypto.getRandomValues(randomValuesArray);
|
|
1137
|
+
let i2 = 0;
|
|
1138
|
+
hash = tokenHash.replace(/[x]/g, (c2) => {
|
|
1139
|
+
const r2 = randomValuesArray[i2] % 16;
|
|
1140
|
+
const v2 = c2 === "x" ? r2 : r2 & 3 | 8;
|
|
1141
|
+
i2++;
|
|
1142
|
+
return v2.toString(16);
|
|
1143
|
+
}).toUpperCase();
|
|
1144
|
+
} catch (err) {
|
|
1145
|
+
hash = tokenHash.replace(/[x]/g, (c2) => {
|
|
1146
|
+
const r2 = Math.random() * 16 | 0;
|
|
1147
|
+
const v2 = c2 === "x" ? r2 : r2 & 3 | 8;
|
|
1148
|
+
return v2.toString(16);
|
|
1149
|
+
}).toUpperCase();
|
|
1150
|
+
}
|
|
1151
|
+
return `${hexTime()}-${hash}`;
|
|
1152
|
+
}
|
|
1153
|
+
function hexTime() {
|
|
1154
|
+
let dateNumber = 0;
|
|
1155
|
+
let perfNumber = 0;
|
|
1156
|
+
dateNumber = new Date().getTime() >>> 0;
|
|
1157
|
+
try {
|
|
1158
|
+
perfNumber = performance.now() >>> 0;
|
|
1159
|
+
} catch (err) {
|
|
1160
|
+
perfNumber = 0;
|
|
1161
|
+
}
|
|
1162
|
+
const output = Math.abs(dateNumber + perfNumber).toString(16).toLowerCase();
|
|
1163
|
+
return output.padStart(8 - output.length, "0");
|
|
1164
|
+
}
|
|
1165
|
+
function getShopifyCookies(cookies) {
|
|
1166
|
+
const cookieData = u(cookies);
|
|
1167
|
+
return {
|
|
1168
|
+
[SHOPIFY_Y]: cookieData[SHOPIFY_Y] || "",
|
|
1169
|
+
[SHOPIFY_S]: cookieData[SHOPIFY_S] || ""
|
|
1170
|
+
};
|
|
1171
|
+
}
|
|
1137
1172
|
function useCartFetch() {
|
|
1138
1173
|
const { storefrontId, getPublicTokenHeaders, getStorefrontApiUrl } = useShop();
|
|
1139
1174
|
return React.useCallback(
|
|
@@ -1145,11 +1180,9 @@
|
|
|
1145
1180
|
if (storefrontId) {
|
|
1146
1181
|
headers[SHOPIFY_STOREFRONT_ID_HEADER] = storefrontId;
|
|
1147
1182
|
}
|
|
1148
|
-
const cookieData =
|
|
1149
|
-
|
|
1150
|
-
|
|
1151
|
-
headers[SHOPIFY_STOREFRONT_S_HEADER] = cookieData[SHOPIFY_S];
|
|
1152
|
-
}
|
|
1183
|
+
const cookieData = getShopifyCookies(document.cookie);
|
|
1184
|
+
headers[SHOPIFY_STOREFRONT_Y_HEADER] = cookieData[SHOPIFY_Y];
|
|
1185
|
+
headers[SHOPIFY_STOREFRONT_S_HEADER] = cookieData[SHOPIFY_S];
|
|
1153
1186
|
return fetch(getStorefrontApiUrl(), {
|
|
1154
1187
|
method: "POST",
|
|
1155
1188
|
headers,
|
|
@@ -2315,6 +2348,420 @@
|
|
|
2315
2348
|
addingItem ? accessibleAddingToCartLabel : null
|
|
2316
2349
|
) : null);
|
|
2317
2350
|
}
|
|
2351
|
+
const AnalyticsEventName = {
|
|
2352
|
+
PAGE_VIEW: "PAGE_VIEW",
|
|
2353
|
+
ADD_TO_CART: "ADD_TO_CART"
|
|
2354
|
+
};
|
|
2355
|
+
const AnalyticsPageType = {
|
|
2356
|
+
article: "article",
|
|
2357
|
+
blog: "blog",
|
|
2358
|
+
captcha: "captcha",
|
|
2359
|
+
cart: "cart",
|
|
2360
|
+
collection: "collection",
|
|
2361
|
+
customersAccount: "customers/account",
|
|
2362
|
+
customersActivateAccount: "customers/activate_account",
|
|
2363
|
+
customersAddresses: "customers/addresses",
|
|
2364
|
+
customersLogin: "customers/login",
|
|
2365
|
+
customersOrder: "customers/order",
|
|
2366
|
+
customersRegister: "customers/register",
|
|
2367
|
+
customersResetPassword: "customers/reset_password",
|
|
2368
|
+
giftCard: "gift_card",
|
|
2369
|
+
home: "index",
|
|
2370
|
+
listCollections: "list-collections",
|
|
2371
|
+
forbidden: "403",
|
|
2372
|
+
notFound: "404",
|
|
2373
|
+
page: "page",
|
|
2374
|
+
password: "password",
|
|
2375
|
+
product: "product",
|
|
2376
|
+
policy: "policy",
|
|
2377
|
+
search: "search"
|
|
2378
|
+
};
|
|
2379
|
+
const ShopifySalesChannel = {
|
|
2380
|
+
hydrogen: "hydrogen",
|
|
2381
|
+
headless: "headless"
|
|
2382
|
+
};
|
|
2383
|
+
const ShopifyAppId = {
|
|
2384
|
+
hydrogen: "6167201",
|
|
2385
|
+
headless: "12875497473"
|
|
2386
|
+
};
|
|
2387
|
+
function schemaWrapper(schemaId, payload) {
|
|
2388
|
+
return {
|
|
2389
|
+
schema_id: schemaId,
|
|
2390
|
+
payload,
|
|
2391
|
+
metadata: {
|
|
2392
|
+
event_created_at_ms: Date.now()
|
|
2393
|
+
}
|
|
2394
|
+
};
|
|
2395
|
+
}
|
|
2396
|
+
function parseGid(gid) {
|
|
2397
|
+
const defaultReturn = { id: "", resource: null };
|
|
2398
|
+
if (typeof gid !== "string") {
|
|
2399
|
+
return defaultReturn;
|
|
2400
|
+
}
|
|
2401
|
+
const matches = gid.match(/^gid:\/\/shopify\/(\w+)\/([a-z0-9]+)/);
|
|
2402
|
+
if (!matches || matches.length === 1) {
|
|
2403
|
+
return defaultReturn;
|
|
2404
|
+
}
|
|
2405
|
+
const id = matches[2] ?? null;
|
|
2406
|
+
const resource = matches[1] ?? null;
|
|
2407
|
+
return { id, resource };
|
|
2408
|
+
}
|
|
2409
|
+
function addDataIf(keyValuePairs, formattedData) {
|
|
2410
|
+
if (typeof keyValuePairs !== "object") {
|
|
2411
|
+
return {};
|
|
2412
|
+
}
|
|
2413
|
+
Object.entries(keyValuePairs).forEach(([key, value]) => {
|
|
2414
|
+
if (value) {
|
|
2415
|
+
formattedData[key] = value;
|
|
2416
|
+
}
|
|
2417
|
+
});
|
|
2418
|
+
return formattedData;
|
|
2419
|
+
}
|
|
2420
|
+
function errorIfServer(fnName) {
|
|
2421
|
+
if (typeof document === "undefined") {
|
|
2422
|
+
console.error(
|
|
2423
|
+
`${fnName} should only be used within the useEffect callback or event handlers`
|
|
2424
|
+
);
|
|
2425
|
+
return true;
|
|
2426
|
+
}
|
|
2427
|
+
return false;
|
|
2428
|
+
}
|
|
2429
|
+
const SCHEMA_ID$1 = "trekkie_storefront_page_view/1.4";
|
|
2430
|
+
const OXYGEN_DOMAIN = "myshopify.dev";
|
|
2431
|
+
function pageView$1(payload) {
|
|
2432
|
+
const pageViewPayload = payload;
|
|
2433
|
+
const { id, resource } = parseGid(pageViewPayload.resourceId);
|
|
2434
|
+
const resourceType = resource ? resource.toLowerCase() : void 0;
|
|
2435
|
+
return [
|
|
2436
|
+
schemaWrapper(
|
|
2437
|
+
SCHEMA_ID$1,
|
|
2438
|
+
addDataIf(
|
|
2439
|
+
{
|
|
2440
|
+
pageType: pageViewPayload.pageType,
|
|
2441
|
+
customerId: pageViewPayload.customerId,
|
|
2442
|
+
resourceType,
|
|
2443
|
+
resourceId: parseInt(id)
|
|
2444
|
+
},
|
|
2445
|
+
formatPayload$1(pageViewPayload)
|
|
2446
|
+
)
|
|
2447
|
+
)
|
|
2448
|
+
];
|
|
2449
|
+
}
|
|
2450
|
+
function formatPayload$1(payload) {
|
|
2451
|
+
return {
|
|
2452
|
+
appClientId: payload.shopifySalesChannel ? ShopifyAppId[payload.shopifySalesChannel] : ShopifyAppId.headless,
|
|
2453
|
+
isMerchantRequest: isMerchantRequest(payload.url),
|
|
2454
|
+
hydrogenSubchannelId: payload.storefrontId || "0",
|
|
2455
|
+
isPersistentCookie: payload.hasUserConsent,
|
|
2456
|
+
uniqToken: payload.uniqueToken,
|
|
2457
|
+
visitToken: payload.visitToken,
|
|
2458
|
+
microSessionId: buildUUID(),
|
|
2459
|
+
microSessionCount: 1,
|
|
2460
|
+
url: payload.url,
|
|
2461
|
+
path: payload.path,
|
|
2462
|
+
search: payload.search,
|
|
2463
|
+
referrer: payload.referrer,
|
|
2464
|
+
title: payload.title,
|
|
2465
|
+
shopId: parseInt(parseGid(payload.shopId).id),
|
|
2466
|
+
currency: payload.currency,
|
|
2467
|
+
contentLanguage: payload.acceptedLanguage || "en"
|
|
2468
|
+
};
|
|
2469
|
+
}
|
|
2470
|
+
function isMerchantRequest(url) {
|
|
2471
|
+
if (typeof url !== "string") {
|
|
2472
|
+
return false;
|
|
2473
|
+
}
|
|
2474
|
+
const hostname = new URL(url).hostname;
|
|
2475
|
+
if (hostname.indexOf(OXYGEN_DOMAIN) !== -1 || hostname === "localhost") {
|
|
2476
|
+
return true;
|
|
2477
|
+
}
|
|
2478
|
+
return false;
|
|
2479
|
+
}
|
|
2480
|
+
const SCHEMA_ID = "custom_storefront_customer_tracking/1.0";
|
|
2481
|
+
const PAGE_RENDERED_EVENT_NAME = "page_rendered";
|
|
2482
|
+
const COLLECTION_PAGE_RENDERED_EVENT_NAME = "collection_page_rendered";
|
|
2483
|
+
const PRODUCT_PAGE_RENDERED_EVENT_NAME = "product_page_rendered";
|
|
2484
|
+
const PRODUCT_ADDED_TO_CART_EVENT_NAME = "product_added_to_cart";
|
|
2485
|
+
const SEARCH_SUBMITTED_EVENT_NAME = "search_submitted";
|
|
2486
|
+
function pageView(payload) {
|
|
2487
|
+
const pageViewPayload = payload;
|
|
2488
|
+
const additionalPayload = {
|
|
2489
|
+
canonical_url: pageViewPayload.canonicalUrl || pageViewPayload.url,
|
|
2490
|
+
customer_id: pageViewPayload.customerId
|
|
2491
|
+
};
|
|
2492
|
+
const pageType = pageViewPayload.pageType;
|
|
2493
|
+
const pageViewEvents = [];
|
|
2494
|
+
pageViewEvents.push(
|
|
2495
|
+
schemaWrapper(
|
|
2496
|
+
SCHEMA_ID,
|
|
2497
|
+
addDataIf(
|
|
2498
|
+
{
|
|
2499
|
+
event_name: PAGE_RENDERED_EVENT_NAME,
|
|
2500
|
+
...additionalPayload
|
|
2501
|
+
},
|
|
2502
|
+
formatPayload(pageViewPayload)
|
|
2503
|
+
)
|
|
2504
|
+
)
|
|
2505
|
+
);
|
|
2506
|
+
switch (pageType) {
|
|
2507
|
+
case AnalyticsPageType.collection:
|
|
2508
|
+
pageViewEvents.push(
|
|
2509
|
+
schemaWrapper(
|
|
2510
|
+
SCHEMA_ID,
|
|
2511
|
+
addDataIf(
|
|
2512
|
+
{
|
|
2513
|
+
event_name: COLLECTION_PAGE_RENDERED_EVENT_NAME,
|
|
2514
|
+
...additionalPayload,
|
|
2515
|
+
collection_name: pageViewPayload.collectionHandle
|
|
2516
|
+
},
|
|
2517
|
+
formatPayload(pageViewPayload)
|
|
2518
|
+
)
|
|
2519
|
+
)
|
|
2520
|
+
);
|
|
2521
|
+
break;
|
|
2522
|
+
case AnalyticsPageType.product:
|
|
2523
|
+
pageViewEvents.push(
|
|
2524
|
+
schemaWrapper(
|
|
2525
|
+
SCHEMA_ID,
|
|
2526
|
+
addDataIf(
|
|
2527
|
+
{
|
|
2528
|
+
event_name: PRODUCT_PAGE_RENDERED_EVENT_NAME,
|
|
2529
|
+
...additionalPayload,
|
|
2530
|
+
products: formatProductPayload(pageViewPayload.products),
|
|
2531
|
+
total_value: pageViewPayload.totalValue
|
|
2532
|
+
},
|
|
2533
|
+
formatPayload(pageViewPayload)
|
|
2534
|
+
)
|
|
2535
|
+
)
|
|
2536
|
+
);
|
|
2537
|
+
break;
|
|
2538
|
+
case AnalyticsPageType.search:
|
|
2539
|
+
pageViewEvents.push(
|
|
2540
|
+
schemaWrapper(
|
|
2541
|
+
SCHEMA_ID,
|
|
2542
|
+
addDataIf(
|
|
2543
|
+
{
|
|
2544
|
+
event_name: SEARCH_SUBMITTED_EVENT_NAME,
|
|
2545
|
+
...additionalPayload,
|
|
2546
|
+
search_string: pageViewPayload.searchString
|
|
2547
|
+
},
|
|
2548
|
+
formatPayload(pageViewPayload)
|
|
2549
|
+
)
|
|
2550
|
+
)
|
|
2551
|
+
);
|
|
2552
|
+
break;
|
|
2553
|
+
}
|
|
2554
|
+
return pageViewEvents;
|
|
2555
|
+
}
|
|
2556
|
+
function addToCart(payload) {
|
|
2557
|
+
const addToCartPayload = payload;
|
|
2558
|
+
const cartToken = parseGid(addToCartPayload.cartId);
|
|
2559
|
+
const cart_token = (cartToken == null ? void 0 : cartToken.id) ? `${cartToken.id}` : null;
|
|
2560
|
+
return [
|
|
2561
|
+
schemaWrapper(
|
|
2562
|
+
SCHEMA_ID,
|
|
2563
|
+
addDataIf(
|
|
2564
|
+
{
|
|
2565
|
+
event_name: PRODUCT_ADDED_TO_CART_EVENT_NAME,
|
|
2566
|
+
customerId: addToCartPayload.customerId,
|
|
2567
|
+
cart_token,
|
|
2568
|
+
total_value: addToCartPayload.totalValue,
|
|
2569
|
+
products: formatProductPayload(addToCartPayload.products)
|
|
2570
|
+
},
|
|
2571
|
+
formatPayload(addToCartPayload)
|
|
2572
|
+
)
|
|
2573
|
+
)
|
|
2574
|
+
];
|
|
2575
|
+
}
|
|
2576
|
+
function formatPayload(payload) {
|
|
2577
|
+
return {
|
|
2578
|
+
source: payload.shopifySalesChannel || ShopifySalesChannel.headless,
|
|
2579
|
+
hydrogenSubchannelId: payload.storefrontId || "0",
|
|
2580
|
+
is_persistent_cookie: payload.hasUserConsent,
|
|
2581
|
+
ccpa_enforced: false,
|
|
2582
|
+
gdpr_enforced: false,
|
|
2583
|
+
unique_token: payload.uniqueToken,
|
|
2584
|
+
event_time: Date.now(),
|
|
2585
|
+
event_id: buildUUID(),
|
|
2586
|
+
event_source_url: payload.url,
|
|
2587
|
+
referrer: payload.referrer,
|
|
2588
|
+
user_agent: payload.userAgent,
|
|
2589
|
+
navigation_type: payload.navigationType,
|
|
2590
|
+
navigation_api: payload.navigationApi,
|
|
2591
|
+
shop_id: parseInt(parseGid(payload.shopId).id),
|
|
2592
|
+
currency: payload.currency
|
|
2593
|
+
};
|
|
2594
|
+
}
|
|
2595
|
+
function formatProductPayload(products) {
|
|
2596
|
+
return products ? products.map((p) => {
|
|
2597
|
+
const product = addDataIf(
|
|
2598
|
+
{
|
|
2599
|
+
variant_gid: p.variantGid,
|
|
2600
|
+
category: p.category,
|
|
2601
|
+
sku: p.sku,
|
|
2602
|
+
product_id: parseInt(parseGid(p.productGid).id),
|
|
2603
|
+
variant_id: parseInt(parseGid(p.variantGid).id)
|
|
2604
|
+
},
|
|
2605
|
+
{
|
|
2606
|
+
product_gid: p.productGid,
|
|
2607
|
+
name: p.name,
|
|
2608
|
+
variant: p.variantName || "",
|
|
2609
|
+
brand: p.brand,
|
|
2610
|
+
price: p.price,
|
|
2611
|
+
quantity: Number(p.quantity || 0)
|
|
2612
|
+
}
|
|
2613
|
+
);
|
|
2614
|
+
return JSON.stringify(product);
|
|
2615
|
+
}) : [];
|
|
2616
|
+
}
|
|
2617
|
+
function sendShopifyAnalytics(event, shopDomain) {
|
|
2618
|
+
const { eventName, payload } = event;
|
|
2619
|
+
if (!payload.hasUserConsent)
|
|
2620
|
+
return Promise.resolve();
|
|
2621
|
+
let events = [];
|
|
2622
|
+
if (eventName === AnalyticsEventName.PAGE_VIEW) {
|
|
2623
|
+
const pageViewPayload = payload;
|
|
2624
|
+
events = events.concat(
|
|
2625
|
+
pageView$1(pageViewPayload),
|
|
2626
|
+
pageView(pageViewPayload)
|
|
2627
|
+
);
|
|
2628
|
+
} else if (eventName === AnalyticsEventName.ADD_TO_CART) {
|
|
2629
|
+
events = events.concat(
|
|
2630
|
+
addToCart(payload)
|
|
2631
|
+
);
|
|
2632
|
+
}
|
|
2633
|
+
if (events.length) {
|
|
2634
|
+
return sendToShopify(events, shopDomain);
|
|
2635
|
+
} else {
|
|
2636
|
+
return Promise.resolve();
|
|
2637
|
+
}
|
|
2638
|
+
}
|
|
2639
|
+
const ERROR_MESSAGE = "sendShopifyAnalytics request is unsuccessful";
|
|
2640
|
+
function sendToShopify(events, shopDomain) {
|
|
2641
|
+
const eventsToBeSent = {
|
|
2642
|
+
events,
|
|
2643
|
+
metadata: {
|
|
2644
|
+
event_sent_at_ms: Date.now()
|
|
2645
|
+
}
|
|
2646
|
+
};
|
|
2647
|
+
try {
|
|
2648
|
+
return fetch(
|
|
2649
|
+
shopDomain ? `https://${shopDomain}/.well-known/shopify/monorail/unstable/produce_batch` : "https://monorail-edge.shopifysvc.com/unstable/produce_batch",
|
|
2650
|
+
{
|
|
2651
|
+
method: "post",
|
|
2652
|
+
headers: {
|
|
2653
|
+
"content-type": "text/plain"
|
|
2654
|
+
},
|
|
2655
|
+
body: JSON.stringify(eventsToBeSent)
|
|
2656
|
+
}
|
|
2657
|
+
).then((response) => {
|
|
2658
|
+
if (!response.ok) {
|
|
2659
|
+
throw new Error("Response failed");
|
|
2660
|
+
}
|
|
2661
|
+
return response.text();
|
|
2662
|
+
}).then((data) => {
|
|
2663
|
+
if (data) {
|
|
2664
|
+
const jsonResponse = JSON.parse(data);
|
|
2665
|
+
jsonResponse.result.forEach((eventResponse) => {
|
|
2666
|
+
if (eventResponse.status !== 200) {
|
|
2667
|
+
console.error(ERROR_MESSAGE, "\n\n", eventResponse.message);
|
|
2668
|
+
}
|
|
2669
|
+
});
|
|
2670
|
+
}
|
|
2671
|
+
}).catch((err) => {
|
|
2672
|
+
console.error(ERROR_MESSAGE, err);
|
|
2673
|
+
if (true) {
|
|
2674
|
+
throw new Error(ERROR_MESSAGE);
|
|
2675
|
+
}
|
|
2676
|
+
});
|
|
2677
|
+
} catch (error) {
|
|
2678
|
+
return Promise.resolve();
|
|
2679
|
+
}
|
|
2680
|
+
}
|
|
2681
|
+
function getClientBrowserParameters() {
|
|
2682
|
+
if (errorIfServer("getClientBrowserParameters")) {
|
|
2683
|
+
return {
|
|
2684
|
+
uniqueToken: "",
|
|
2685
|
+
visitToken: "",
|
|
2686
|
+
url: "",
|
|
2687
|
+
path: "",
|
|
2688
|
+
search: "",
|
|
2689
|
+
referrer: "",
|
|
2690
|
+
title: "",
|
|
2691
|
+
userAgent: "",
|
|
2692
|
+
navigationType: "",
|
|
2693
|
+
navigationApi: ""
|
|
2694
|
+
};
|
|
2695
|
+
}
|
|
2696
|
+
const [navigationType, navigationApi] = getNavigationType();
|
|
2697
|
+
const cookies = getShopifyCookies(document.cookie);
|
|
2698
|
+
return {
|
|
2699
|
+
uniqueToken: cookies[SHOPIFY_Y],
|
|
2700
|
+
visitToken: cookies[SHOPIFY_S],
|
|
2701
|
+
url: location.href,
|
|
2702
|
+
path: location.pathname,
|
|
2703
|
+
search: location.search,
|
|
2704
|
+
referrer: document.referrer,
|
|
2705
|
+
title: document.title,
|
|
2706
|
+
userAgent: navigator.userAgent,
|
|
2707
|
+
navigationType,
|
|
2708
|
+
navigationApi
|
|
2709
|
+
};
|
|
2710
|
+
}
|
|
2711
|
+
function getNavigationTypeExperimental() {
|
|
2712
|
+
try {
|
|
2713
|
+
const navigationEntries = (performance == null ? void 0 : performance.getEntriesByType) && (performance == null ? void 0 : performance.getEntriesByType("navigation"));
|
|
2714
|
+
if (navigationEntries && navigationEntries[0]) {
|
|
2715
|
+
const rawType = window.performance.getEntriesByType(
|
|
2716
|
+
"navigation"
|
|
2717
|
+
)[0]["type"];
|
|
2718
|
+
const navType = rawType && rawType.toString();
|
|
2719
|
+
return navType;
|
|
2720
|
+
}
|
|
2721
|
+
} catch (err) {
|
|
2722
|
+
}
|
|
2723
|
+
return void 0;
|
|
2724
|
+
}
|
|
2725
|
+
function getNavigationTypeLegacy() {
|
|
2726
|
+
var _a, _b;
|
|
2727
|
+
try {
|
|
2728
|
+
if (PerformanceNavigation && ((_a = performance == null ? void 0 : performance.navigation) == null ? void 0 : _a.type) !== null && ((_b = performance == null ? void 0 : performance.navigation) == null ? void 0 : _b.type) !== void 0) {
|
|
2729
|
+
const rawType = performance.navigation.type;
|
|
2730
|
+
switch (rawType) {
|
|
2731
|
+
case PerformanceNavigation.TYPE_NAVIGATE:
|
|
2732
|
+
return "navigate";
|
|
2733
|
+
break;
|
|
2734
|
+
case PerformanceNavigation.TYPE_RELOAD:
|
|
2735
|
+
return "reload";
|
|
2736
|
+
break;
|
|
2737
|
+
case PerformanceNavigation.TYPE_BACK_FORWARD:
|
|
2738
|
+
return "back_forward";
|
|
2739
|
+
break;
|
|
2740
|
+
default:
|
|
2741
|
+
return `unknown: ${rawType}`;
|
|
2742
|
+
}
|
|
2743
|
+
}
|
|
2744
|
+
} catch (err) {
|
|
2745
|
+
}
|
|
2746
|
+
return void 0;
|
|
2747
|
+
}
|
|
2748
|
+
function getNavigationType() {
|
|
2749
|
+
try {
|
|
2750
|
+
let navApi = "PerformanceNavigationTiming";
|
|
2751
|
+
let navType = getNavigationTypeExperimental();
|
|
2752
|
+
if (!navType) {
|
|
2753
|
+
navType = getNavigationTypeLegacy();
|
|
2754
|
+
navApi = "performance.navigation";
|
|
2755
|
+
}
|
|
2756
|
+
if (navType) {
|
|
2757
|
+
return [navType, navApi];
|
|
2758
|
+
} else {
|
|
2759
|
+
return ["unknown", "unknown"];
|
|
2760
|
+
}
|
|
2761
|
+
} catch (err) {
|
|
2762
|
+
}
|
|
2763
|
+
return ["error", "error"];
|
|
2764
|
+
}
|
|
2318
2765
|
function BuyNowButton(props) {
|
|
2319
2766
|
const { cartCreate, checkoutUrl } = useCart();
|
|
2320
2767
|
const [loading, setLoading] = React.useState(false);
|
|
@@ -2373,6 +2820,170 @@
|
|
|
2373
2820
|
children
|
|
2374
2821
|
);
|
|
2375
2822
|
}
|
|
2823
|
+
function useMoney(money) {
|
|
2824
|
+
const { countryIsoCode, languageIsoCode } = useShop();
|
|
2825
|
+
const locale = `${languageIsoCode}-${countryIsoCode}`;
|
|
2826
|
+
if (!locale) {
|
|
2827
|
+
throw new Error(
|
|
2828
|
+
`useMoney(): Unable to get 'locale' from 'useShop()', which means that 'locale' was not passed to '<ShopifyProvider/>'. 'locale' is required for 'useMoney()' to work`
|
|
2829
|
+
);
|
|
2830
|
+
}
|
|
2831
|
+
const amount = parseFloat(money.amount);
|
|
2832
|
+
const options = React.useMemo(
|
|
2833
|
+
() => ({
|
|
2834
|
+
style: "currency",
|
|
2835
|
+
currency: money.currencyCode
|
|
2836
|
+
}),
|
|
2837
|
+
[money.currencyCode]
|
|
2838
|
+
);
|
|
2839
|
+
const defaultFormatter = useLazyFormatter(locale, options);
|
|
2840
|
+
const nameFormatter = useLazyFormatter(locale, {
|
|
2841
|
+
...options,
|
|
2842
|
+
currencyDisplay: "name"
|
|
2843
|
+
});
|
|
2844
|
+
const narrowSymbolFormatter = useLazyFormatter(locale, {
|
|
2845
|
+
...options,
|
|
2846
|
+
currencyDisplay: "narrowSymbol"
|
|
2847
|
+
});
|
|
2848
|
+
const withoutTrailingZerosFormatter = useLazyFormatter(locale, {
|
|
2849
|
+
...options,
|
|
2850
|
+
minimumFractionDigits: 0,
|
|
2851
|
+
maximumFractionDigits: 0
|
|
2852
|
+
});
|
|
2853
|
+
const withoutCurrencyFormatter = useLazyFormatter(locale);
|
|
2854
|
+
const withoutTrailingZerosOrCurrencyFormatter = useLazyFormatter(locale, {
|
|
2855
|
+
minimumFractionDigits: 0,
|
|
2856
|
+
maximumFractionDigits: 0
|
|
2857
|
+
});
|
|
2858
|
+
const isPartCurrency = (part) => part.type === "currency";
|
|
2859
|
+
const lazyFormatters = React.useMemo(
|
|
2860
|
+
() => ({
|
|
2861
|
+
original: () => money,
|
|
2862
|
+
currencyCode: () => money.currencyCode,
|
|
2863
|
+
localizedString: () => defaultFormatter().format(amount),
|
|
2864
|
+
parts: () => defaultFormatter().formatToParts(amount),
|
|
2865
|
+
withoutTrailingZeros: () => amount % 1 === 0 ? withoutTrailingZerosFormatter().format(amount) : defaultFormatter().format(amount),
|
|
2866
|
+
withoutTrailingZerosAndCurrency: () => amount % 1 === 0 ? withoutTrailingZerosOrCurrencyFormatter().format(amount) : withoutCurrencyFormatter().format(amount),
|
|
2867
|
+
currencyName: () => {
|
|
2868
|
+
var _a;
|
|
2869
|
+
return ((_a = nameFormatter().formatToParts(amount).find(isPartCurrency)) == null ? void 0 : _a.value) ?? money.currencyCode;
|
|
2870
|
+
},
|
|
2871
|
+
// e.g. "US dollars"
|
|
2872
|
+
currencySymbol: () => {
|
|
2873
|
+
var _a;
|
|
2874
|
+
return ((_a = defaultFormatter().formatToParts(amount).find(isPartCurrency)) == null ? void 0 : _a.value) ?? money.currencyCode;
|
|
2875
|
+
},
|
|
2876
|
+
// e.g. "USD"
|
|
2877
|
+
currencyNarrowSymbol: () => {
|
|
2878
|
+
var _a;
|
|
2879
|
+
return ((_a = narrowSymbolFormatter().formatToParts(amount).find(isPartCurrency)) == null ? void 0 : _a.value) ?? "";
|
|
2880
|
+
},
|
|
2881
|
+
// e.g. "$"
|
|
2882
|
+
amount: () => defaultFormatter().formatToParts(amount).filter(
|
|
2883
|
+
(part) => ["decimal", "fraction", "group", "integer", "literal"].includes(
|
|
2884
|
+
part.type
|
|
2885
|
+
)
|
|
2886
|
+
).map((part) => part.value).join("")
|
|
2887
|
+
}),
|
|
2888
|
+
[
|
|
2889
|
+
money,
|
|
2890
|
+
amount,
|
|
2891
|
+
nameFormatter,
|
|
2892
|
+
defaultFormatter,
|
|
2893
|
+
narrowSymbolFormatter,
|
|
2894
|
+
withoutCurrencyFormatter,
|
|
2895
|
+
withoutTrailingZerosFormatter,
|
|
2896
|
+
withoutTrailingZerosOrCurrencyFormatter
|
|
2897
|
+
]
|
|
2898
|
+
);
|
|
2899
|
+
return React.useMemo(
|
|
2900
|
+
() => new Proxy(lazyFormatters, {
|
|
2901
|
+
get: (target, key) => {
|
|
2902
|
+
var _a;
|
|
2903
|
+
return (_a = Reflect.get(target, key)) == null ? void 0 : _a.call(null);
|
|
2904
|
+
}
|
|
2905
|
+
}),
|
|
2906
|
+
[lazyFormatters]
|
|
2907
|
+
);
|
|
2908
|
+
}
|
|
2909
|
+
function useLazyFormatter(locale, options) {
|
|
2910
|
+
return React.useMemo(() => {
|
|
2911
|
+
let memoized;
|
|
2912
|
+
return () => memoized ?? (memoized = new Intl.NumberFormat(locale, options));
|
|
2913
|
+
}, [locale, options]);
|
|
2914
|
+
}
|
|
2915
|
+
function Money({
|
|
2916
|
+
data,
|
|
2917
|
+
as,
|
|
2918
|
+
withoutCurrency,
|
|
2919
|
+
withoutTrailingZeros,
|
|
2920
|
+
measurement,
|
|
2921
|
+
measurementSeparator = "/",
|
|
2922
|
+
...passthroughProps
|
|
2923
|
+
}) {
|
|
2924
|
+
if (!isMoney(data)) {
|
|
2925
|
+
throw new Error(
|
|
2926
|
+
`<Money/> needs a valid 'data' prop that has 'amount' and 'currencyCode'`
|
|
2927
|
+
);
|
|
2928
|
+
}
|
|
2929
|
+
const moneyObject = useMoney(data);
|
|
2930
|
+
const Wrapper = as ?? "div";
|
|
2931
|
+
let output = moneyObject.localizedString;
|
|
2932
|
+
if (withoutCurrency || withoutTrailingZeros) {
|
|
2933
|
+
if (withoutCurrency && !withoutTrailingZeros) {
|
|
2934
|
+
output = moneyObject.amount;
|
|
2935
|
+
} else if (!withoutCurrency && withoutTrailingZeros) {
|
|
2936
|
+
output = moneyObject.withoutTrailingZeros;
|
|
2937
|
+
} else {
|
|
2938
|
+
output = moneyObject.withoutTrailingZerosAndCurrency;
|
|
2939
|
+
}
|
|
2940
|
+
}
|
|
2941
|
+
return /* @__PURE__ */ React.createElement(Wrapper, { ...passthroughProps }, output, measurement && measurement.referenceUnit && /* @__PURE__ */ React.createElement(React.Fragment, null, measurementSeparator, measurement.referenceUnit));
|
|
2942
|
+
}
|
|
2943
|
+
function isMoney(maybeMoney) {
|
|
2944
|
+
return typeof maybeMoney.amount === "string" && !!maybeMoney.amount && typeof maybeMoney.currencyCode === "string" && !!maybeMoney.currencyCode;
|
|
2945
|
+
}
|
|
2946
|
+
function CartCost(props) {
|
|
2947
|
+
const { cost } = useCart();
|
|
2948
|
+
const { amountType = "total", children, ...passthroughProps } = props;
|
|
2949
|
+
let amount;
|
|
2950
|
+
if (amountType == "total") {
|
|
2951
|
+
amount = cost == null ? void 0 : cost.totalAmount;
|
|
2952
|
+
} else if (amountType == "subtotal") {
|
|
2953
|
+
amount = cost == null ? void 0 : cost.subtotalAmount;
|
|
2954
|
+
} else if (amountType == "tax") {
|
|
2955
|
+
amount = cost == null ? void 0 : cost.totalTaxAmount;
|
|
2956
|
+
} else if (amountType == "duty") {
|
|
2957
|
+
amount = cost == null ? void 0 : cost.totalDutyAmount;
|
|
2958
|
+
}
|
|
2959
|
+
if (amount == null) {
|
|
2960
|
+
return null;
|
|
2961
|
+
}
|
|
2962
|
+
return /* @__PURE__ */ React.createElement(Money, { ...passthroughProps, data: amount }, children);
|
|
2963
|
+
}
|
|
2964
|
+
function CartLinePrice(props) {
|
|
2965
|
+
var _a, _b;
|
|
2966
|
+
const { data: cartLine, priceType = "regular", ...passthroughProps } = props;
|
|
2967
|
+
if (cartLine == null) {
|
|
2968
|
+
throw new Error(`<CartLinePrice/> requires a cart line as the 'data' prop`);
|
|
2969
|
+
}
|
|
2970
|
+
const moneyV2 = priceType === "regular" ? (_a = cartLine.cost) == null ? void 0 : _a.totalAmount : (_b = cartLine.cost) == null ? void 0 : _b.compareAtAmountPerQuantity;
|
|
2971
|
+
if (moneyV2 == null) {
|
|
2972
|
+
return null;
|
|
2973
|
+
}
|
|
2974
|
+
return /* @__PURE__ */ React.createElement(Money, { ...passthroughProps, data: moneyV2 });
|
|
2975
|
+
}
|
|
2976
|
+
const CartLineContext = React.createContext(null);
|
|
2977
|
+
function useCartLine() {
|
|
2978
|
+
const context = React.useContext(CartLineContext);
|
|
2979
|
+
if (context == null) {
|
|
2980
|
+
throw new Error("Expected a cart line context but none was found");
|
|
2981
|
+
}
|
|
2982
|
+
return context;
|
|
2983
|
+
}
|
|
2984
|
+
function CartLineProvider({ children, line }) {
|
|
2985
|
+
return /* @__PURE__ */ React.createElement(CartLineContext.Provider, { value: line }, children);
|
|
2986
|
+
}
|
|
2376
2987
|
const storefrontApiCustomScalars = {
|
|
2377
2988
|
// Keep in sync with the definitions in the app/nextjs/codegen.ts!
|
|
2378
2989
|
DateTime: "string",
|
|
@@ -3053,128 +3664,6 @@
|
|
|
3053
3664
|
}
|
|
3054
3665
|
return JSON.parse(json);
|
|
3055
3666
|
}
|
|
3056
|
-
function useMoney(money) {
|
|
3057
|
-
const { locale } = useShop();
|
|
3058
|
-
if (!locale) {
|
|
3059
|
-
throw new Error(
|
|
3060
|
-
`useMoney(): Unable to get 'locale' from 'useShop()', which means that 'locale' was not passed to '<ShopifyProvider/>'. 'locale' is required for 'useMoney()' to work`
|
|
3061
|
-
);
|
|
3062
|
-
}
|
|
3063
|
-
const amount = parseFloat(money.amount);
|
|
3064
|
-
const options = React.useMemo(
|
|
3065
|
-
() => ({
|
|
3066
|
-
style: "currency",
|
|
3067
|
-
currency: money.currencyCode
|
|
3068
|
-
}),
|
|
3069
|
-
[money.currencyCode]
|
|
3070
|
-
);
|
|
3071
|
-
const defaultFormatter = useLazyFormatter(locale, options);
|
|
3072
|
-
const nameFormatter = useLazyFormatter(locale, {
|
|
3073
|
-
...options,
|
|
3074
|
-
currencyDisplay: "name"
|
|
3075
|
-
});
|
|
3076
|
-
const narrowSymbolFormatter = useLazyFormatter(locale, {
|
|
3077
|
-
...options,
|
|
3078
|
-
currencyDisplay: "narrowSymbol"
|
|
3079
|
-
});
|
|
3080
|
-
const withoutTrailingZerosFormatter = useLazyFormatter(locale, {
|
|
3081
|
-
...options,
|
|
3082
|
-
minimumFractionDigits: 0,
|
|
3083
|
-
maximumFractionDigits: 0
|
|
3084
|
-
});
|
|
3085
|
-
const withoutCurrencyFormatter = useLazyFormatter(locale);
|
|
3086
|
-
const withoutTrailingZerosOrCurrencyFormatter = useLazyFormatter(locale, {
|
|
3087
|
-
minimumFractionDigits: 0,
|
|
3088
|
-
maximumFractionDigits: 0
|
|
3089
|
-
});
|
|
3090
|
-
const isPartCurrency = (part) => part.type === "currency";
|
|
3091
|
-
const lazyFormatters = React.useMemo(
|
|
3092
|
-
() => ({
|
|
3093
|
-
original: () => money,
|
|
3094
|
-
currencyCode: () => money.currencyCode,
|
|
3095
|
-
localizedString: () => defaultFormatter().format(amount),
|
|
3096
|
-
parts: () => defaultFormatter().formatToParts(amount),
|
|
3097
|
-
withoutTrailingZeros: () => amount % 1 === 0 ? withoutTrailingZerosFormatter().format(amount) : defaultFormatter().format(amount),
|
|
3098
|
-
withoutTrailingZerosAndCurrency: () => amount % 1 === 0 ? withoutTrailingZerosOrCurrencyFormatter().format(amount) : withoutCurrencyFormatter().format(amount),
|
|
3099
|
-
currencyName: () => {
|
|
3100
|
-
var _a;
|
|
3101
|
-
return ((_a = nameFormatter().formatToParts(amount).find(isPartCurrency)) == null ? void 0 : _a.value) ?? money.currencyCode;
|
|
3102
|
-
},
|
|
3103
|
-
// e.g. "US dollars"
|
|
3104
|
-
currencySymbol: () => {
|
|
3105
|
-
var _a;
|
|
3106
|
-
return ((_a = defaultFormatter().formatToParts(amount).find(isPartCurrency)) == null ? void 0 : _a.value) ?? money.currencyCode;
|
|
3107
|
-
},
|
|
3108
|
-
// e.g. "USD"
|
|
3109
|
-
currencyNarrowSymbol: () => {
|
|
3110
|
-
var _a;
|
|
3111
|
-
return ((_a = narrowSymbolFormatter().formatToParts(amount).find(isPartCurrency)) == null ? void 0 : _a.value) ?? "";
|
|
3112
|
-
},
|
|
3113
|
-
// e.g. "$"
|
|
3114
|
-
amount: () => defaultFormatter().formatToParts(amount).filter(
|
|
3115
|
-
(part) => ["decimal", "fraction", "group", "integer", "literal"].includes(
|
|
3116
|
-
part.type
|
|
3117
|
-
)
|
|
3118
|
-
).map((part) => part.value).join("")
|
|
3119
|
-
}),
|
|
3120
|
-
[
|
|
3121
|
-
money,
|
|
3122
|
-
amount,
|
|
3123
|
-
nameFormatter,
|
|
3124
|
-
defaultFormatter,
|
|
3125
|
-
narrowSymbolFormatter,
|
|
3126
|
-
withoutCurrencyFormatter,
|
|
3127
|
-
withoutTrailingZerosFormatter,
|
|
3128
|
-
withoutTrailingZerosOrCurrencyFormatter
|
|
3129
|
-
]
|
|
3130
|
-
);
|
|
3131
|
-
return React.useMemo(
|
|
3132
|
-
() => new Proxy(lazyFormatters, {
|
|
3133
|
-
get: (target, key) => {
|
|
3134
|
-
var _a;
|
|
3135
|
-
return (_a = Reflect.get(target, key)) == null ? void 0 : _a.call(null);
|
|
3136
|
-
}
|
|
3137
|
-
}),
|
|
3138
|
-
[lazyFormatters]
|
|
3139
|
-
);
|
|
3140
|
-
}
|
|
3141
|
-
function useLazyFormatter(locale, options) {
|
|
3142
|
-
return React.useMemo(() => {
|
|
3143
|
-
let memoized;
|
|
3144
|
-
return () => memoized ?? (memoized = new Intl.NumberFormat(locale, options));
|
|
3145
|
-
}, [locale, options]);
|
|
3146
|
-
}
|
|
3147
|
-
function Money({
|
|
3148
|
-
data,
|
|
3149
|
-
as,
|
|
3150
|
-
withoutCurrency,
|
|
3151
|
-
withoutTrailingZeros,
|
|
3152
|
-
measurement,
|
|
3153
|
-
measurementSeparator = "/",
|
|
3154
|
-
...passthroughProps
|
|
3155
|
-
}) {
|
|
3156
|
-
if (!isMoney(data)) {
|
|
3157
|
-
throw new Error(
|
|
3158
|
-
`<Money/> needs a valid 'data' prop that has 'amount' and 'currencyCode'`
|
|
3159
|
-
);
|
|
3160
|
-
}
|
|
3161
|
-
const moneyObject = useMoney(data);
|
|
3162
|
-
const Wrapper = as ?? "div";
|
|
3163
|
-
let output = moneyObject.localizedString;
|
|
3164
|
-
if (withoutCurrency || withoutTrailingZeros) {
|
|
3165
|
-
if (withoutCurrency && !withoutTrailingZeros) {
|
|
3166
|
-
output = moneyObject.amount;
|
|
3167
|
-
} else if (!withoutCurrency && withoutTrailingZeros) {
|
|
3168
|
-
output = moneyObject.withoutTrailingZeros;
|
|
3169
|
-
} else {
|
|
3170
|
-
output = moneyObject.withoutTrailingZerosAndCurrency;
|
|
3171
|
-
}
|
|
3172
|
-
}
|
|
3173
|
-
return /* @__PURE__ */ React.createElement(Wrapper, { ...passthroughProps }, output, measurement && measurement.referenceUnit && /* @__PURE__ */ React.createElement(React.Fragment, null, measurementSeparator, measurement.referenceUnit));
|
|
3174
|
-
}
|
|
3175
|
-
function isMoney(maybeMoney) {
|
|
3176
|
-
return typeof maybeMoney.amount === "string" && !!maybeMoney.amount && typeof maybeMoney.currencyCode === "string" && !!maybeMoney.currencyCode;
|
|
3177
|
-
}
|
|
3178
3667
|
function ProductPrice(props) {
|
|
3179
3668
|
var _a, _b, _c, _d, _e, _f;
|
|
3180
3669
|
const {
|
|
@@ -3233,13 +3722,13 @@
|
|
|
3233
3722
|
}) {
|
|
3234
3723
|
const { storeDomain } = useShop();
|
|
3235
3724
|
const shopPayLoadedStatus = useLoadScript(SHOPJS_URL);
|
|
3236
|
-
let ids;
|
|
3725
|
+
let ids = [];
|
|
3237
3726
|
if (variantIds && variantIdsAndQuantities) {
|
|
3238
3727
|
throw new Error(DoublePropsErrorMessage);
|
|
3239
3728
|
}
|
|
3240
3729
|
if (variantIds) {
|
|
3241
3730
|
ids = variantIds.reduce((prev, curr) => {
|
|
3242
|
-
const bareId =
|
|
3731
|
+
const bareId = parseGid(curr).id;
|
|
3243
3732
|
if (bareId) {
|
|
3244
3733
|
prev.push(bareId);
|
|
3245
3734
|
}
|
|
@@ -3247,7 +3736,7 @@
|
|
|
3247
3736
|
}, []);
|
|
3248
3737
|
} else if (variantIdsAndQuantities) {
|
|
3249
3738
|
ids = variantIdsAndQuantities.reduce((prev, curr) => {
|
|
3250
|
-
const bareId =
|
|
3739
|
+
const bareId = parseGid(curr == null ? void 0 : curr.id).id;
|
|
3251
3740
|
if (bareId) {
|
|
3252
3741
|
prev.push(`${bareId}:${(curr == null ? void 0 : curr.quantity) ?? 1}`);
|
|
3253
3742
|
}
|
|
@@ -3256,21 +3745,58 @@
|
|
|
3256
3745
|
} else {
|
|
3257
3746
|
throw new Error(MissingPropsErrorMessage);
|
|
3258
3747
|
}
|
|
3748
|
+
if (ids.length === 0) {
|
|
3749
|
+
throw new Error(InvalidPropsErrorMessage);
|
|
3750
|
+
}
|
|
3259
3751
|
const style = width ? {
|
|
3260
3752
|
"--shop-pay-button-width": width
|
|
3261
3753
|
} : void 0;
|
|
3262
3754
|
return /* @__PURE__ */ React.createElement("div", { className, style }, shopPayLoadedStatus === "done" && /* @__PURE__ */ React.createElement("shop-pay-button", { "store-url": storeDomain, variants: ids.join(",") }));
|
|
3263
3755
|
}
|
|
3264
|
-
|
|
3265
|
-
if (!id)
|
|
3266
|
-
return;
|
|
3267
|
-
return id.split("/").pop();
|
|
3268
|
-
}
|
|
3756
|
+
const InvalidPropsErrorMessage = `You must pass in "variantIds" in the form of ["gid://shopify/ProductVariant/1"]`;
|
|
3269
3757
|
const MissingPropsErrorMessage = `You must pass in either "variantIds" or "variantIdsAndQuantities" to ShopPayButton`;
|
|
3270
3758
|
const DoublePropsErrorMessage = `You must provide either a variantIds or variantIdsAndQuantities prop, but not both in the ShopPayButton component`;
|
|
3759
|
+
const longTermLength = 60 * 60 * 24 * 360 * 1;
|
|
3760
|
+
const shortTermLength = 60 * 30;
|
|
3761
|
+
function useShopifyCookies(options) {
|
|
3762
|
+
const { hasUserConsent = false, domain = "" } = options || {};
|
|
3763
|
+
React.useEffect(() => {
|
|
3764
|
+
const cookies = getShopifyCookies(document.cookie);
|
|
3765
|
+
if (hasUserConsent) {
|
|
3766
|
+
setCookie(
|
|
3767
|
+
SHOPIFY_Y,
|
|
3768
|
+
cookies[SHOPIFY_Y] || buildUUID(),
|
|
3769
|
+
longTermLength,
|
|
3770
|
+
domain
|
|
3771
|
+
);
|
|
3772
|
+
setCookie(
|
|
3773
|
+
SHOPIFY_S,
|
|
3774
|
+
cookies[SHOPIFY_S] || buildUUID(),
|
|
3775
|
+
shortTermLength,
|
|
3776
|
+
domain
|
|
3777
|
+
);
|
|
3778
|
+
} else {
|
|
3779
|
+
setCookie(SHOPIFY_Y, "", 0, domain);
|
|
3780
|
+
setCookie(SHOPIFY_S, "", 0, domain);
|
|
3781
|
+
}
|
|
3782
|
+
});
|
|
3783
|
+
}
|
|
3784
|
+
function setCookie(name, value, maxage, domain) {
|
|
3785
|
+
document.cookie = l(name, value, {
|
|
3786
|
+
maxage,
|
|
3787
|
+
domain,
|
|
3788
|
+
samesite: "Lax",
|
|
3789
|
+
path: "/"
|
|
3790
|
+
});
|
|
3791
|
+
}
|
|
3271
3792
|
exports2.AddToCartButton = AddToCartButton;
|
|
3793
|
+
exports2.AnalyticsEventName = AnalyticsEventName;
|
|
3794
|
+
exports2.AnalyticsPageType = AnalyticsPageType;
|
|
3272
3795
|
exports2.BuyNowButton = BuyNowButton;
|
|
3273
3796
|
exports2.CartCheckoutButton = CartCheckoutButton;
|
|
3797
|
+
exports2.CartCost = CartCost;
|
|
3798
|
+
exports2.CartLinePrice = CartLinePrice;
|
|
3799
|
+
exports2.CartLineProvider = CartLineProvider;
|
|
3274
3800
|
exports2.CartProvider = CartProvider;
|
|
3275
3801
|
exports2.ExternalVideo = ExternalVideo;
|
|
3276
3802
|
exports2.Image = Image;
|
|
@@ -3281,15 +3807,21 @@
|
|
|
3281
3807
|
exports2.ProductProvider = ProductProvider;
|
|
3282
3808
|
exports2.ShopPayButton = ShopPayButton;
|
|
3283
3809
|
exports2.ShopifyProvider = ShopifyProvider;
|
|
3810
|
+
exports2.ShopifySalesChannel = ShopifySalesChannel;
|
|
3284
3811
|
exports2.Video = Video;
|
|
3285
3812
|
exports2.createStorefrontClient = createStorefrontClient;
|
|
3286
3813
|
exports2.flattenConnection = flattenConnection;
|
|
3814
|
+
exports2.getClientBrowserParameters = getClientBrowserParameters;
|
|
3815
|
+
exports2.getShopifyCookies = getShopifyCookies;
|
|
3287
3816
|
exports2.parseMetafield = parseMetafield;
|
|
3817
|
+
exports2.sendShopifyAnalytics = sendShopifyAnalytics;
|
|
3288
3818
|
exports2.storefrontApiCustomScalars = storefrontApiCustomScalars;
|
|
3289
3819
|
exports2.useCart = useCart;
|
|
3820
|
+
exports2.useCartLine = useCartLine;
|
|
3290
3821
|
exports2.useMoney = useMoney;
|
|
3291
3822
|
exports2.useProduct = useProduct;
|
|
3292
3823
|
exports2.useShop = useShop;
|
|
3824
|
+
exports2.useShopifyCookies = useShopifyCookies;
|
|
3293
3825
|
Object.defineProperty(exports2, Symbol.toStringTag, { value: "Module" });
|
|
3294
3826
|
});
|
|
3295
3827
|
//# sourceMappingURL=hydrogen-react.dev.js.map
|