@shopify/hydrogen 0.22.1 → 0.25.0
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/CHANGELOG.md +378 -0
- package/dist/esnext/components/AddToCartButton/AddToCartButton.client.d.ts +2 -5
- package/dist/esnext/components/AddToCartButton/AddToCartButton.client.js +18 -17
- package/dist/esnext/components/BaseButton/BaseButton.client.d.ts +14 -0
- package/dist/esnext/components/BaseButton/BaseButton.client.js +15 -0
- package/dist/esnext/components/BaseButton/index.d.ts +1 -0
- package/dist/esnext/components/BaseButton/index.js +1 -0
- package/dist/esnext/components/BuyNowButton/BuyNowButton.client.d.ts +2 -5
- package/dist/esnext/components/BuyNowButton/BuyNowButton.client.js +5 -4
- package/dist/esnext/components/CartEstimatedCost/CartEstimatedCost.client.js +4 -4
- package/dist/esnext/components/CartLinePrice/CartLinePrice.client.js +5 -8
- package/dist/esnext/components/CartLineProvider/context.d.ts +10 -0
- package/dist/esnext/components/CartLineQuantityAdjustButton/CartLineQuantityAdjustButton.d.ts +4 -5
- package/dist/esnext/components/CartLineQuantityAdjustButton/CartLineQuantityAdjustButton.js +16 -14
- package/dist/esnext/components/CartLines/{CartLines.d.ts → CartLines.client.d.ts} +0 -0
- package/dist/esnext/components/CartLines/{CartLines.js → CartLines.client.js} +1 -1
- package/dist/esnext/components/CartLines/index.d.ts +1 -1
- package/dist/esnext/components/CartLines/index.js +1 -1
- package/dist/esnext/components/CartProvider/CartProvider.client.js +31 -38
- package/dist/esnext/components/CartProvider/cart-queries.d.ts +1 -1
- package/dist/esnext/components/CartProvider/cart-queries.js +11 -0
- package/dist/esnext/components/CartProvider/graphql/CartAttributesUpdateMutation.d.ts +11 -1
- package/dist/esnext/components/CartProvider/graphql/CartBuyerIdentityUpdateMutation.d.ts +11 -1
- package/dist/esnext/components/CartProvider/graphql/CartCreateMutation.d.ts +11 -1
- package/dist/esnext/components/CartProvider/graphql/CartDiscountCodesUpdateMutation.d.ts +11 -1
- package/dist/esnext/components/CartProvider/graphql/CartFragment.d.ts +11 -1
- package/dist/esnext/components/CartProvider/graphql/CartLineAddMutation.d.ts +11 -1
- package/dist/esnext/components/CartProvider/graphql/CartLineRemoveMutation.d.ts +11 -1
- package/dist/esnext/components/CartProvider/graphql/CartLineUpdateMutation.d.ts +11 -1
- package/dist/esnext/components/CartProvider/graphql/CartNoteUpdateMutation.d.ts +11 -1
- package/dist/esnext/components/CartProvider/graphql/CartQuery.d.ts +11 -1
- package/dist/esnext/components/CartProvider/hooks.client.js +5 -8
- package/dist/esnext/components/CartProvider/types.d.ts +2 -0
- package/dist/esnext/components/ExternalVideo/ExternalVideo.js +1 -1
- package/dist/esnext/components/Image/Image.d.ts +21 -0
- package/dist/esnext/components/Image/Image.js +88 -14
- package/dist/esnext/components/Link/Link.client.d.ts +2 -0
- package/dist/esnext/components/Link/Link.client.js +8 -5
- package/dist/esnext/components/LocalizationProvider/LocalizationProvider.server.js +2 -2
- package/dist/esnext/components/Metafield/Metafield.client.d.ts +6 -10
- package/dist/esnext/components/Metafield/Metafield.client.js +67 -31
- package/dist/esnext/components/Metafield/components/StarRating/StarRating.js +1 -1
- package/dist/esnext/components/ModelViewer/ModelViewer.client.js +2 -3
- package/dist/esnext/components/Money/Money.client.js +1 -1
- package/dist/esnext/components/ProductOptionsProvider/ProductOptionsProvider.client.d.ts +21 -0
- package/dist/esnext/components/ProductOptionsProvider/ProductOptionsProvider.client.js +133 -0
- package/dist/esnext/components/ProductOptionsProvider/context.d.ts +2 -0
- package/dist/esnext/components/{ProductProvider → ProductOptionsProvider}/context.js +0 -1
- package/dist/esnext/components/ProductOptionsProvider/index.d.ts +2 -0
- package/dist/esnext/components/ProductOptionsProvider/index.js +2 -0
- package/dist/esnext/components/ProductPrice/ProductPrice.client.d.ts +5 -2
- package/dist/esnext/components/ProductPrice/ProductPrice.client.js +10 -12
- package/dist/esnext/components/Seo/CollectionSeo.client.js +2 -3
- package/dist/esnext/components/Seo/DefaultPageSeo.client.js +3 -3
- package/dist/esnext/components/Seo/NoIndexSeo.client.js +2 -2
- package/dist/esnext/components/Seo/PageSeo.client.js +2 -3
- package/dist/esnext/components/Seo/ProductSeo.client.js +9 -10
- package/dist/esnext/components/ShopPayButton/ShopPayButton.client.js +2 -3
- package/dist/esnext/components/Video/Video.js +2 -3
- package/dist/esnext/components/index.d.ts +1 -1
- package/dist/esnext/components/index.js +1 -1
- package/dist/esnext/config.d.ts +4 -0
- package/dist/esnext/config.js +4 -0
- package/dist/esnext/constants.d.ts +2 -0
- package/dist/esnext/constants.js +2 -0
- package/dist/esnext/entry-client.js +107 -21
- package/dist/esnext/entry-server.d.ts +2 -31
- package/dist/esnext/entry-server.js +400 -335
- package/dist/esnext/foundation/Analytics/Analytics.client.js +15 -13
- package/dist/esnext/foundation/Analytics/Analytics.server.js +27 -20
- package/dist/esnext/foundation/Analytics/ClientAnalytics.d.ts +4 -2
- package/dist/esnext/foundation/Analytics/ClientAnalytics.js +16 -14
- package/dist/esnext/foundation/Analytics/ServerAnalyticsRoute.d.ts +4 -0
- package/dist/esnext/foundation/Analytics/ServerAnalyticsRoute.js +36 -0
- package/dist/esnext/foundation/Analytics/connectors/PerformanceMetrics/ServerAnalyticsConnector.d.ts +3 -0
- package/dist/esnext/foundation/Analytics/connectors/PerformanceMetrics/ServerAnalyticsConnector.js +27 -0
- package/dist/esnext/foundation/Analytics/connectors/Shopify/ServerAnalyticsConnector.d.ts +3 -0
- package/dist/esnext/foundation/Analytics/connectors/Shopify/ServerAnalyticsConnector.js +21 -0
- package/dist/esnext/foundation/Analytics/connectors/Shopify/ShopifyAnalytics.client.d.ts +3 -0
- package/dist/esnext/foundation/Analytics/connectors/Shopify/ShopifyAnalytics.client.js +190 -0
- package/dist/esnext/foundation/Analytics/connectors/Shopify/ShopifyAnalytics.server.d.ts +3 -0
- package/dist/esnext/foundation/Analytics/connectors/Shopify/ShopifyAnalytics.server.js +23 -0
- package/dist/esnext/foundation/Analytics/connectors/Shopify/const.d.ts +28 -0
- package/dist/esnext/foundation/Analytics/connectors/Shopify/const.js +51 -0
- package/dist/esnext/foundation/Analytics/connectors/Shopify/utils.d.ts +3 -0
- package/dist/esnext/foundation/Analytics/connectors/Shopify/utils.js +56 -0
- package/dist/esnext/foundation/Analytics/hook.js +4 -2
- package/dist/esnext/foundation/Analytics/utils.d.ts +2 -0
- package/dist/esnext/foundation/Analytics/utils.js +21 -0
- package/dist/esnext/foundation/BuiltInRoutes/BuiltInRoutes.d.ts +2 -0
- package/dist/esnext/foundation/BuiltInRoutes/BuiltInRoutes.js +23 -0
- package/dist/esnext/foundation/BuiltInRoutes/healthCheck.d.ts +1 -0
- package/dist/esnext/foundation/BuiltInRoutes/healthCheck.js +3 -0
- package/dist/{node/framework → esnext/foundation/Cache}/cache-sub-request.d.ts +1 -1
- package/dist/esnext/{framework → foundation/Cache}/cache-sub-request.js +4 -4
- package/dist/esnext/{framework → foundation/Cache}/cache.d.ts +1 -1
- package/dist/esnext/{framework → foundation/Cache}/cache.js +4 -4
- package/dist/esnext/foundation/Cache/strategies/index.d.ts +7 -0
- package/dist/esnext/foundation/Cache/strategies/index.js +54 -0
- package/dist/esnext/foundation/Cookie/Cookie.d.ts +3 -3
- package/dist/esnext/foundation/Cookie/Cookie.js +5 -0
- package/dist/esnext/foundation/DevTools/DevTools.client.d.ts +3 -0
- package/dist/esnext/foundation/DevTools/DevTools.client.js +17 -0
- package/dist/esnext/foundation/DevTools/DevTools.server.d.ts +1 -0
- package/dist/esnext/foundation/DevTools/DevTools.server.js +14 -0
- package/dist/esnext/foundation/DevTools/components/GraphQL.client.d.ts +1 -0
- package/dist/esnext/foundation/DevTools/components/GraphQL.client.js +25 -0
- package/dist/esnext/foundation/DevTools/components/Heading.d.ts +5 -0
- package/dist/esnext/foundation/DevTools/components/Heading.js +12 -0
- package/dist/esnext/foundation/DevTools/components/Interface.client.d.ts +11 -0
- package/dist/esnext/foundation/DevTools/components/Interface.client.js +47 -0
- package/dist/esnext/foundation/DevTools/components/Panels.d.ts +8 -0
- package/dist/esnext/foundation/DevTools/components/Panels.js +60 -0
- package/dist/esnext/foundation/DevTools/components/Performance.client.d.ts +14 -0
- package/dist/esnext/foundation/DevTools/components/Performance.client.js +26 -0
- package/dist/esnext/foundation/DevTools/components/Settings.client.d.ts +7 -0
- package/dist/esnext/foundation/DevTools/components/Settings.client.js +20 -0
- package/dist/esnext/foundation/DevTools/components/Table.d.ts +9 -0
- package/dist/esnext/foundation/DevTools/components/Table.js +7 -0
- package/dist/esnext/foundation/DevTools/components/icons.d.ts +2 -0
- package/dist/esnext/foundation/DevTools/components/icons.js +13 -0
- package/dist/esnext/foundation/DevTools/components/index.d.ts +2 -0
- package/dist/esnext/foundation/DevTools/components/index.js +2 -0
- package/dist/esnext/foundation/FileRoutes/FileRoutes.server.js +4 -4
- package/dist/{node/framework/Hydration → esnext/foundation/Html}/Html.d.ts +3 -1
- package/dist/esnext/{framework/Hydration → foundation/Html}/Html.js +15 -5
- package/dist/esnext/{framework/Hydration/ServerComponentRequest.server.d.ts → foundation/HydrogenRequest/HydrogenRequest.server.d.ts} +14 -4
- package/dist/esnext/{framework/Hydration/ServerComponentRequest.server.js → foundation/HydrogenRequest/HydrogenRequest.server.js} +70 -12
- package/dist/esnext/{framework/Hydration/ServerComponentResponse.server.d.ts → foundation/HydrogenResponse/HydrogenResponse.server.d.ts} +6 -11
- package/dist/esnext/foundation/HydrogenResponse/HydrogenResponse.server.js +48 -0
- package/dist/esnext/foundation/Router/BrowserRouter.client.js +15 -9
- package/dist/esnext/foundation/ServerPropsProvider/ServerPropsProvider.d.ts +2 -1
- package/dist/esnext/foundation/ServerPropsProvider/ServerPropsProvider.js +1 -1
- package/dist/esnext/foundation/ServerRequestProvider/ServerRequestProvider.d.ts +5 -6
- package/dist/esnext/foundation/ServerRequestProvider/ServerRequestProvider.js +19 -24
- package/dist/esnext/foundation/ServerStateProvider/ServerStateProvider.d.ts +1 -1
- package/dist/esnext/foundation/ServerStateProvider/ServerStateProvider.js +1 -1
- package/dist/esnext/foundation/ShopifyProvider/ShopifyProvider.server.js +4 -5
- package/dist/esnext/foundation/fetchSync/server/fetchSync.js +1 -1
- package/dist/esnext/foundation/index.d.ts +1 -1
- package/dist/esnext/foundation/index.js +1 -1
- package/dist/esnext/foundation/runtime.d.ts +2 -0
- package/dist/esnext/foundation/runtime.js +6 -0
- package/dist/esnext/foundation/session/session.d.ts +3 -3
- package/dist/esnext/foundation/ssr-interop.d.ts +2 -2
- package/dist/esnext/foundation/useNavigate/useNavigate.d.ts +2 -0
- package/dist/esnext/foundation/useNavigate/useNavigate.js +10 -4
- package/dist/esnext/foundation/useQuery/hooks.d.ts +1 -0
- package/dist/esnext/foundation/useQuery/hooks.js +29 -18
- package/dist/esnext/foundation/useRequestContext/index.d.ts +15 -0
- package/dist/esnext/foundation/useRequestContext/index.js +23 -0
- package/dist/esnext/foundation/useServerProps/use-server-props.js +2 -2
- package/dist/esnext/foundation/useSession/useSession.js +1 -2
- package/dist/esnext/foundation/useUrl/useUrl.js +1 -2
- package/dist/esnext/framework/cache/in-memory.js +3 -3
- package/dist/esnext/framework/middleware.d.ts +1 -1
- package/dist/esnext/framework/middleware.js +3 -4
- package/dist/esnext/framework/plugin.d.ts +7 -3
- package/dist/esnext/framework/plugin.js +4 -1
- package/dist/esnext/framework/plugins/vite-plugin-client-imports.js +1 -1
- package/dist/esnext/framework/plugins/vite-plugin-hydrogen-config.js +70 -64
- package/dist/esnext/framework/plugins/vite-plugin-hydrogen-middleware.d.ts +1 -1
- package/dist/esnext/framework/plugins/vite-plugin-hydrogen-middleware.js +3 -4
- package/dist/esnext/framework/plugins/vite-plugin-hydrogen-rsc.js +5 -13
- package/dist/esnext/framework/plugins/vite-plugin-hydrogen-suppress-warnings.d.ts +3 -0
- package/dist/esnext/framework/plugins/vite-plugin-hydrogen-suppress-warnings.js +19 -0
- package/dist/esnext/framework/plugins/vite-plugin-hydrogen-virtual-files.d.ts +1 -1
- package/dist/esnext/framework/plugins/vite-plugin-hydrogen-virtual-files.js +6 -4
- package/dist/esnext/framework/types.d.ts +5 -0
- package/dist/esnext/framework/types.js +1 -0
- package/dist/esnext/hooks/index.d.ts +0 -1
- package/dist/esnext/hooks/index.js +0 -1
- package/dist/esnext/hooks/useCartLine/useCartLine.d.ts +10 -0
- package/dist/esnext/hooks/useMoney/hooks.js +53 -39
- package/dist/esnext/hooks/useProductOptions/helpers.js +6 -10
- package/dist/esnext/hooks/useProductOptions/types.d.ts +17 -15
- package/dist/esnext/hooks/useProductOptions/useProductOptions.client.d.ts +1 -15
- package/dist/esnext/hooks/useProductOptions/useProductOptions.client.js +8 -107
- package/dist/esnext/hooks/useShopQuery/hooks.js +30 -18
- package/dist/esnext/index.d.ts +7 -5
- package/dist/esnext/index.js +5 -5
- package/dist/esnext/shared-types.d.ts +26 -0
- package/dist/esnext/shared-types.js +4 -0
- package/dist/esnext/storefront-api-types.d.ts +37 -443
- package/dist/esnext/streaming.server.d.ts +9 -19
- package/dist/esnext/streaming.server.js +2 -11
- package/dist/esnext/types.d.ts +40 -40
- package/dist/esnext/types.js +1 -1
- package/dist/esnext/utilities/apiRoutes.d.ts +8 -4
- package/dist/esnext/utilities/apiRoutes.js +6 -4
- package/dist/esnext/utilities/devtools.d.ts +1 -1
- package/dist/esnext/utilities/devtools.js +3 -3
- package/dist/esnext/utilities/flattenConnection/flattenConnection.d.ts +1 -0
- package/dist/esnext/utilities/flattenConnection/flattenConnection.js +13 -6
- package/dist/esnext/utilities/graphql-tracker.js +7 -9
- package/dist/esnext/utilities/hash.d.ts +2 -2
- package/dist/esnext/utilities/hash.js +29 -6
- package/dist/esnext/utilities/image_size.d.ts +24 -3
- package/dist/esnext/utilities/image_size.js +53 -31
- package/dist/esnext/utilities/index.d.ts +2 -2
- package/dist/esnext/utilities/index.js +2 -2
- package/dist/esnext/utilities/isBrowser/index.d.ts +1 -0
- package/dist/esnext/utilities/isBrowser/index.js +1 -0
- package/dist/esnext/utilities/isBrowser/isBrowser.d.ts +4 -0
- package/dist/esnext/utilities/isBrowser/isBrowser.js +6 -0
- package/dist/esnext/utilities/isServer/isServer.js +2 -2
- package/dist/esnext/utilities/load_script.js +1 -1
- package/dist/esnext/utilities/log/index.d.ts +1 -1
- package/dist/esnext/utilities/log/index.js +1 -1
- package/dist/esnext/utilities/log/log-cache-api-status.js +3 -2
- package/dist/esnext/utilities/log/log-cache-header.d.ts +4 -4
- package/dist/esnext/utilities/log/log-query-timeline.d.ts +3 -3
- package/dist/esnext/utilities/log/log-query-timeline.js +29 -10
- package/dist/esnext/utilities/log/log.d.ts +17 -11
- package/dist/esnext/utilities/log/log.js +28 -20
- package/dist/esnext/utilities/log/utils.js +1 -6
- package/dist/esnext/utilities/parseMetafield/index.d.ts +1 -0
- package/dist/esnext/utilities/parseMetafield/index.js +1 -0
- package/dist/esnext/utilities/parseMetafield/parseMetafield.d.ts +15 -0
- package/dist/esnext/utilities/{parseMetafieldValue/parseMetafieldValue.js → parseMetafield/parseMetafield.js} +28 -2
- package/dist/esnext/utilities/storefrontApi.js +9 -5
- package/dist/esnext/utilities/template.js +1 -2
- package/dist/esnext/utilities/web-api-polyfill.js +6 -0
- package/dist/esnext/version.d.ts +1 -1
- package/dist/esnext/version.js +1 -1
- package/dist/node/framework/cache/in-memory.js +3 -3
- package/dist/node/framework/middleware.d.ts +1 -1
- package/dist/node/framework/middleware.js +3 -4
- package/dist/node/framework/plugin.d.ts +4 -3
- package/dist/node/framework/plugin.js +5 -2
- package/dist/node/framework/plugins/vite-plugin-client-imports.js +1 -1
- package/dist/node/framework/plugins/vite-plugin-hydrogen-config.js +70 -64
- package/dist/node/framework/plugins/vite-plugin-hydrogen-middleware.d.ts +1 -1
- package/dist/node/framework/plugins/vite-plugin-hydrogen-middleware.js +3 -4
- package/dist/node/framework/plugins/vite-plugin-hydrogen-rsc.js +6 -14
- package/dist/node/framework/plugins/vite-plugin-hydrogen-suppress-warnings.d.ts +3 -0
- package/dist/node/framework/plugins/vite-plugin-hydrogen-suppress-warnings.js +21 -0
- package/dist/node/framework/plugins/vite-plugin-hydrogen-virtual-files.d.ts +1 -1
- package/dist/node/framework/plugins/vite-plugin-hydrogen-virtual-files.js +6 -4
- package/dist/node/framework/types.d.ts +5 -0
- package/dist/node/{foundation/Analytics → framework}/types.js +0 -0
- package/dist/node/shared-types.d.ts +26 -0
- package/dist/node/shared-types.js +5 -0
- package/dist/node/utilities/web-api-polyfill.js +6 -0
- package/package.json +34 -26
- package/vendor/react-server-dom-vite/cjs/react-server-dom-vite-plugin.js +275 -60
- package/vendor/react-server-dom-vite/cjs/react-server-dom-vite-writer.browser.development.server.js +119 -64
- package/vendor/react-server-dom-vite/cjs/react-server-dom-vite-writer.browser.production.min.server.js +33 -32
- package/vendor/react-server-dom-vite/cjs/react-server-dom-vite-writer.node.development.server.js +241 -75
- package/vendor/react-server-dom-vite/cjs/react-server-dom-vite-writer.node.production.min.server.js +38 -35
- package/vendor/react-server-dom-vite/cjs/react-server-dom-vite.development.js +9 -8
- package/vendor/react-server-dom-vite/cjs/react-server-dom-vite.production.min.js +3 -3
- package/vendor/react-server-dom-vite/esm/react-server-dom-vite-client-proxy.js +3 -9
- package/vendor/react-server-dom-vite/esm/react-server-dom-vite-plugin.js +276 -61
- package/vendor/react-server-dom-vite/esm/react-server-dom-vite-writer.browser.server.js +119 -64
- package/vendor/react-server-dom-vite/esm/react-server-dom-vite-writer.node.server.js +241 -75
- package/vendor/react-server-dom-vite/esm/react-server-dom-vite.js +9 -8
- package/vendor/react-server-dom-vite/package.json +1 -1
- package/client.d.ts +0 -1
- package/client.js +0 -1
- package/config.d.ts +0 -1
- package/config.js +0 -1
- package/dist/esnext/components/DevTools.client.d.ts +0 -1
- package/dist/esnext/components/DevTools.client.js +0 -129
- package/dist/esnext/components/ProductProvider/ProductOptionsProvider.client.d.ts +0 -8
- package/dist/esnext/components/ProductProvider/ProductOptionsProvider.client.js +0 -12
- package/dist/esnext/components/ProductProvider/ProductProvider.client.d.ts +0 -24
- package/dist/esnext/components/ProductProvider/ProductProvider.client.js +0 -34
- package/dist/esnext/components/ProductProvider/context.d.ts +0 -29
- package/dist/esnext/components/ProductProvider/index.d.ts +0 -2
- package/dist/esnext/components/ProductProvider/index.js +0 -2
- package/dist/esnext/foundation/Analytics/ServerAnalyticsRoute.server.d.ts +0 -2
- package/dist/esnext/foundation/Analytics/ServerAnalyticsRoute.server.js +0 -33
- package/dist/esnext/foundation/Analytics/connectors/PerformanceMetrics/PerformanceMetrics.server.d.ts +0 -1
- package/dist/esnext/foundation/Analytics/connectors/PerformanceMetrics/PerformanceMetrics.server.js +0 -24
- package/dist/esnext/framework/CachingStrategy/index.d.ts +0 -10
- package/dist/esnext/framework/CachingStrategy/index.js +0 -96
- package/dist/esnext/framework/Hydration/Html.d.ts +0 -11
- package/dist/esnext/framework/Hydration/ServerComponentResponse.server.js +0 -42
- package/dist/esnext/framework/Hydration/rsc.d.ts +0 -8
- package/dist/esnext/framework/Hydration/rsc.js +0 -100
- package/dist/esnext/framework/cache-sub-request.d.ts +0 -17
- package/dist/esnext/framework/config.d.ts +0 -6
- package/dist/esnext/framework/config.js +0 -6
- package/dist/esnext/framework/runtime.d.ts +0 -13
- package/dist/esnext/framework/runtime.js +0 -27
- package/dist/esnext/hooks/useParsedMetafields/index.d.ts +0 -1
- package/dist/esnext/hooks/useParsedMetafields/index.js +0 -1
- package/dist/esnext/hooks/useParsedMetafields/useParsedMetafields.d.ts +0 -21
- package/dist/esnext/hooks/useParsedMetafields/useParsedMetafields.js +0 -21
- package/dist/esnext/hooks/useProduct/index.d.ts +0 -1
- package/dist/esnext/hooks/useProduct/index.js +0 -1
- package/dist/esnext/hooks/useProduct/useProduct.d.ts +0 -52
- package/dist/esnext/hooks/useProduct/useProduct.js +0 -43
- package/dist/esnext/utilities/isClient/index.d.ts +0 -1
- package/dist/esnext/utilities/isClient/index.js +0 -1
- package/dist/esnext/utilities/isClient/isClient.d.ts +0 -4
- package/dist/esnext/utilities/isClient/isClient.js +0 -6
- package/dist/esnext/utilities/parseMetafieldValue/index.d.ts +0 -1
- package/dist/esnext/utilities/parseMetafieldValue/index.js +0 -1
- package/dist/esnext/utilities/parseMetafieldValue/parseMetafieldValue.d.ts +0 -6
- package/dist/node/components/Image/Image.d.ts +0 -84
- package/dist/node/components/Image/Image.js +0 -89
- package/dist/node/components/Image/index.d.ts +0 -2
- package/dist/node/components/Image/index.js +0 -5
- package/dist/node/constants.d.ts +0 -7
- package/dist/node/constants.js +0 -10
- package/dist/node/entry-server.d.ts +0 -35
- package/dist/node/entry-server.js +0 -571
- package/dist/node/foundation/Analytics/Analytics.client.d.ts +0 -3
- package/dist/node/foundation/Analytics/Analytics.client.js +0 -32
- package/dist/node/foundation/Analytics/Analytics.server.d.ts +0 -1
- package/dist/node/foundation/Analytics/Analytics.server.js +0 -70
- package/dist/node/foundation/Analytics/ClientAnalytics.d.ts +0 -25
- package/dist/node/foundation/Analytics/ClientAnalytics.js +0 -100
- package/dist/node/foundation/Analytics/ServerAnalyticsRoute.server.d.ts +0 -2
- package/dist/node/foundation/Analytics/ServerAnalyticsRoute.server.js +0 -37
- package/dist/node/foundation/Analytics/const.d.ts +0 -9
- package/dist/node/foundation/Analytics/const.js +0 -12
- package/dist/node/foundation/Analytics/hook.d.ts +0 -1
- package/dist/node/foundation/Analytics/hook.js +0 -11
- package/dist/node/foundation/Analytics/types.d.ts +0 -5
- package/dist/node/foundation/Analytics/utils.d.ts +0 -1
- package/dist/node/foundation/Analytics/utils.js +0 -12
- package/dist/node/foundation/AnalyticsErrorBoundary.client.d.ts +0 -4
- package/dist/node/foundation/AnalyticsErrorBoundary.client.js +0 -14
- package/dist/node/foundation/Redirect/Redirect.client.d.ts +0 -5
- package/dist/node/foundation/Redirect/Redirect.client.js +0 -18
- package/dist/node/foundation/Router/BrowserRouter.client.d.ts +0 -14
- package/dist/node/foundation/Router/BrowserRouter.client.js +0 -159
- package/dist/node/foundation/ServerPropsProvider/ServerPropsProvider.d.ts +0 -40
- package/dist/node/foundation/ServerPropsProvider/ServerPropsProvider.js +0 -90
- package/dist/node/foundation/ServerPropsProvider/index.d.ts +0 -2
- package/dist/node/foundation/ServerPropsProvider/index.js +0 -6
- package/dist/node/foundation/ServerRequestProvider/ServerRequestProvider.d.ts +0 -23
- package/dist/node/foundation/ServerRequestProvider/ServerRequestProvider.js +0 -158
- package/dist/node/foundation/ServerRequestProvider/index.d.ts +0 -1
- package/dist/node/foundation/ServerRequestProvider/index.js +0 -17
- package/dist/node/foundation/ShopifyProvider/types.d.ts +0 -13
- package/dist/node/foundation/ShopifyProvider/types.js +0 -2
- package/dist/node/foundation/session/session.d.ts +0 -27
- package/dist/node/foundation/session/session.js +0 -43
- package/dist/node/foundation/ssr-interop.d.ts +0 -29
- package/dist/node/foundation/ssr-interop.js +0 -39
- package/dist/node/foundation/useNavigate/useNavigate.d.ts +0 -13
- package/dist/node/foundation/useNavigate/useNavigate.js +0 -18
- package/dist/node/foundation/useServerProps/use-server-props.d.ts +0 -21
- package/dist/node/foundation/useServerProps/use-server-props.js +0 -40
- package/dist/node/framework/CachingStrategy/index.d.ts +0 -10
- package/dist/node/framework/CachingStrategy/index.js +0 -108
- package/dist/node/framework/Hydration/Html.js +0 -94
- package/dist/node/framework/Hydration/ServerComponentRequest.server.d.ts +0 -58
- package/dist/node/framework/Hydration/ServerComponentRequest.server.js +0 -150
- package/dist/node/framework/Hydration/ServerComponentResponse.server.d.ts +0 -26
- package/dist/node/framework/Hydration/ServerComponentResponse.server.js +0 -49
- package/dist/node/framework/Hydration/rsc.d.ts +0 -8
- package/dist/node/framework/Hydration/rsc.js +0 -103
- package/dist/node/framework/cache-sub-request.js +0 -95
- package/dist/node/framework/cache.d.ts +0 -17
- package/dist/node/framework/cache.js +0 -135
- package/dist/node/framework/config.d.ts +0 -6
- package/dist/node/framework/config.js +0 -11
- package/dist/node/framework/runtime.d.ts +0 -13
- package/dist/node/framework/runtime.js +0 -35
- package/dist/node/storefront-api-types.d.ts +0 -6405
- package/dist/node/storefront-api-types.js +0 -1766
- package/dist/node/streaming.server.d.ts +0 -26
- package/dist/node/streaming.server.js +0 -33
- package/dist/node/types.d.ts +0 -105
- package/dist/node/types.js +0 -2
- package/dist/node/utilities/apiRoutes.d.ts +0 -37
- package/dist/node/utilities/apiRoutes.js +0 -157
- package/dist/node/utilities/bot-ua.d.ts +0 -4
- package/dist/node/utilities/bot-ua.js +0 -65
- package/dist/node/utilities/defer.d.ts +0 -6
- package/dist/node/utilities/defer.js +0 -18
- package/dist/node/utilities/error.d.ts +0 -1
- package/dist/node/utilities/error.js +0 -10
- package/dist/node/utilities/fetch.d.ts +0 -9
- package/dist/node/utilities/fetch.js +0 -37
- package/dist/node/utilities/flattenConnection/flattenConnection.d.ts +0 -6
- package/dist/node/utilities/flattenConnection/flattenConnection.js +0 -15
- package/dist/node/utilities/flattenConnection/index.d.ts +0 -1
- package/dist/node/utilities/flattenConnection/index.js +0 -5
- package/dist/node/utilities/hash.d.ts +0 -2
- package/dist/node/utilities/hash.js +0 -11
- package/dist/node/utilities/html-encoding.d.ts +0 -1
- package/dist/node/utilities/html-encoding.js +0 -12
- package/dist/node/utilities/image_size.d.ts +0 -12
- package/dist/node/utilities/image_size.js +0 -68
- package/dist/node/utilities/index.d.ts +0 -12
- package/dist/node/utilities/index.js +0 -33
- package/dist/node/utilities/isClient/index.d.ts +0 -1
- package/dist/node/utilities/isClient/index.js +0 -5
- package/dist/node/utilities/isClient/isClient.d.ts +0 -4
- package/dist/node/utilities/isClient/isClient.js +0 -10
- package/dist/node/utilities/isServer/index.d.ts +0 -1
- package/dist/node/utilities/isServer/index.js +0 -5
- package/dist/node/utilities/isServer/isServer.d.ts +0 -4
- package/dist/node/utilities/isServer/isServer.js +0 -11
- package/dist/node/utilities/load_script.d.ts +0 -3
- package/dist/node/utilities/load_script.js +0 -27
- package/dist/node/utilities/log/index.d.ts +0 -4
- package/dist/node/utilities/log/index.js +0 -18
- package/dist/node/utilities/log/log-cache-api-status.d.ts +0 -1
- package/dist/node/utilities/log/log-cache-api-status.js +0 -17
- package/dist/node/utilities/log/log-cache-header.d.ts +0 -10
- package/dist/node/utilities/log/log-cache-header.js +0 -35
- package/dist/node/utilities/log/log-query-timeline.d.ts +0 -12
- package/dist/node/utilities/log/log-query-timeline.js +0 -88
- package/dist/node/utilities/log/log.d.ts +0 -22
- package/dist/node/utilities/log/log.js +0 -74
- package/dist/node/utilities/log/utils.d.ts +0 -3
- package/dist/node/utilities/log/utils.js +0 -21
- package/dist/node/utilities/matchPath.d.ts +0 -10
- package/dist/node/utilities/matchPath.js +0 -58
- package/dist/node/utilities/measurement.d.ts +0 -3
- package/dist/node/utilities/measurement.js +0 -103
- package/dist/node/utilities/parse.d.ts +0 -1
- package/dist/node/utilities/parse.js +0 -13
- package/dist/node/utilities/parseMetafieldValue/index.d.ts +0 -1
- package/dist/node/utilities/parseMetafieldValue/index.js +0 -5
- package/dist/node/utilities/parseMetafieldValue/parseMetafieldValue.d.ts +0 -6
- package/dist/node/utilities/parseMetafieldValue/parseMetafieldValue.js +0 -40
- package/dist/node/utilities/storefrontApi.d.ts +0 -4
- package/dist/node/utilities/storefrontApi.js +0 -26
- package/dist/node/utilities/suspense.d.ts +0 -12
- package/dist/node/utilities/suspense.js +0 -64
- package/dist/node/utilities/template.d.ts +0 -9
- package/dist/node/utilities/template.js +0 -27
- package/dist/node/utilities/timing.d.ts +0 -7
- package/dist/node/utilities/timing.js +0 -18
- package/dist/node/utilities/video_parameters.d.ts +0 -47
- package/dist/node/utilities/video_parameters.js +0 -27
- package/dist/node/version.d.ts +0 -1
- package/dist/node/version.js +0 -4
- package/entry-client.d.ts +0 -1
- package/entry-client.js +0 -1
- package/entry-server.d.ts +0 -1
- package/entry-server.js +0 -1
- package/middleware.d.ts +0 -1
- package/middleware.js +0 -1
- package/plugin.d.ts +0 -1
- package/plugin.js +0 -1
- package/web-polyfills.js +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,383 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.25.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- [#1570](https://github.com/Shopify/hydrogen/pull/1570) [`36f26e54`](https://github.com/Shopify/hydrogen/commit/36f26e54a0b136fe4b21807756969e592934c9f2) Thanks [@frehner](https://github.com/frehner)! - `<Image/>` now takes into account a specific order for determining the width and height.
|
|
8
|
+
|
|
9
|
+
1. `loaderOptions`'s width/height
|
|
10
|
+
2. width/height bare props
|
|
11
|
+
3. `data`'s width/height
|
|
12
|
+
|
|
13
|
+
`getShopifyImageDimensions()` was also updated to handle this logic.
|
|
14
|
+
|
|
15
|
+
* [#1506](https://github.com/Shopify/hydrogen/pull/1506) [`58d6ef55`](https://github.com/Shopify/hydrogen/commit/58d6ef55be2929c9a1680a6a372bb2e5fdfb7ee6) Thanks [@wizardlyhel](https://github.com/wizardlyhel)! - Hydrogen now supports full-page caching out of the box. Previously, Hydrogen relied on the network edge to provide full-page caching for dynamic responses (HTML).
|
|
16
|
+
|
|
17
|
+
- [#1346](https://github.com/Shopify/hydrogen/pull/1346) [`01814369`](https://github.com/Shopify/hydrogen/commit/018143693f96b7a200258665de570a9369ae8e65) Thanks [@lordofthecactus](https://github.com/lordofthecactus)! - Add `onClick` and `buttonRef` props to `AddToCartButton`, `BuyNowButton` and `CartLineQuantityAdjustButton`
|
|
18
|
+
|
|
19
|
+
* [#1523](https://github.com/Shopify/hydrogen/pull/1523) [`4ef2e5b9`](https://github.com/Shopify/hydrogen/commit/4ef2e5b93cd537a213334211113c224194d9dd68) Thanks [@blittle](https://github.com/blittle)! - We've simplified the built-in Hydrogen caching strategies. Instead of `CacheSeconds`, `CacheMinutes`, `CacheHours`, `CacheDays`, `CacheMonths`, and `NoStore`, there is no simply `CacheLong`, `CacheShort`, and `CacheNone`. Please remember that you can [build your own caching strategies](https://shopify.dev/custom-storefronts/hydrogen/framework/cache#build-your-own-caching-strategies).
|
|
20
|
+
|
|
21
|
+
- [#1513](https://github.com/Shopify/hydrogen/pull/1513) [`8d67b559`](https://github.com/Shopify/hydrogen/commit/8d67b559e8d59d02ca353ec43fb5b2b3ff2f5961) Thanks [@frandiox](https://github.com/frandiox)! - **Breaking change:** We are starting to use [`exports` property in `package.json`](https://nodejs.org/api/packages.html#package-entry-points) to list all the entry points in this package.
|
|
22
|
+
|
|
23
|
+
This might incur breaking changes in some rare cases when importing private properties from Hydrogen `dist` files. Notice that we **discourage** doing so for anything that is not publicly documented but, if your app was relying on some private properties, then this might help:
|
|
24
|
+
|
|
25
|
+
```diff
|
|
26
|
+
-import {xyz} from '@shopify/hydrogen/dist/esnext/<internal-path>';
|
|
27
|
+
+import {xyz} from '@shopify/hydrogen/<internal-path>';
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
Aside from that, it is recommended that TypeScript projects update the `tsconfig.json` file to use `compilerOptions.moduleResolution: "node16"` to make sure Hydrogen types are loaded in your editor.
|
|
31
|
+
For JavaScript projects, create or edit `<root>/jsconfig.json` file with the following information to improve typings:
|
|
32
|
+
|
|
33
|
+
```json
|
|
34
|
+
{
|
|
35
|
+
"compilerOptions": {
|
|
36
|
+
"target": "es2020",
|
|
37
|
+
"module": "esnext",
|
|
38
|
+
"moduleResolution": "node16",
|
|
39
|
+
"lib": ["dom", "dom.iterable", "scripthost", "es2020"],
|
|
40
|
+
"jsx": "react",
|
|
41
|
+
"types": ["vite/client"]
|
|
42
|
+
},
|
|
43
|
+
"exclude": ["node_modules", "dist"],
|
|
44
|
+
"include": ["**/*.js", "**/*.jsx"]
|
|
45
|
+
}
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
* [#1528](https://github.com/Shopify/hydrogen/pull/1528) [`72d21b87`](https://github.com/Shopify/hydrogen/commit/72d21b87e48a682794889610741f03560bce0be7) Thanks [@frehner](https://github.com/frehner)! - Metafields have changed in Storefront API `2022-07`. We updated our code to work with that update, which means that the following changes will **only work if you're using `2022-07` or newer.**
|
|
49
|
+
|
|
50
|
+
## Metafields changes
|
|
51
|
+
|
|
52
|
+
### Storefront API `2022-07`
|
|
53
|
+
|
|
54
|
+
Metafields have changed how you access them in the Storefront API. See [the release notes](https://shopify.dev/api/release-notes/2022-07) for more details. In order to support the new way of querying metafields, Hydrogen has made the following updates:
|
|
55
|
+
|
|
56
|
+
### `<Metafield/>`
|
|
57
|
+
|
|
58
|
+
Previously, the `<Metafield/>` component expected you to use `useParseMetafields()` before passing a metafield to it.
|
|
59
|
+
|
|
60
|
+
Now, `<Metafield/>` will use `parseMetafield()` itself so that you don't have to. However, this does mean that if you use `parseMetafield()` and then pass it to `<Metafield/>`, it will likely break because it will try to parse your metafield's value a second time.
|
|
61
|
+
|
|
62
|
+
### `useParsedMetafields()` and `parseMetafield()`
|
|
63
|
+
|
|
64
|
+
Deprecated `useParsedMetafields()` in favor of `parseMetafield()`. `parseMetafield()` takes in a single metafield and returns a new object, and importantly it can be used on both the client _and_ the server.
|
|
65
|
+
|
|
66
|
+
If you need to memoize the value on the client, then you can do so using `React.memo`:
|
|
67
|
+
|
|
68
|
+
```tsx
|
|
69
|
+
import {useMemo} from 'react';
|
|
70
|
+
import {parseMetafield} from '@shopify/hydrogen'x
|
|
71
|
+
|
|
72
|
+
function MyComponent() {
|
|
73
|
+
const parsedMetafield = useMemo(() => parseMetafield(metafield), [metafield]);
|
|
74
|
+
}
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
- [#1517](https://github.com/Shopify/hydrogen/pull/1517) [`68b8185e`](https://github.com/Shopify/hydrogen/commit/68b8185e74805a6453e246f01ce69a38988078ef) Thanks [@frandiox](https://github.com/frandiox)! - **Breaking change:** The utilities used in `hydrogen.config.js` file are now exported from `@shopiy/hydrogen/config` instead of `@shopify/hydrogen`:
|
|
78
|
+
|
|
79
|
+
```diff
|
|
80
|
+
-import {defineConfig} from '@shopify/hydrogen/config';
|
|
81
|
+
import {
|
|
82
|
+
+ defineConfig,
|
|
83
|
+
CookieSessionStorage,
|
|
84
|
+
PerformanceMetricsServerAnalyticsConnector,
|
|
85
|
+
ShopifyServerAnalyticsConnector,
|
|
86
|
+
-} from '@shopify/hydrogen';
|
|
87
|
+
+} from '@shopify/hydrogen/config'
|
|
88
|
+
|
|
89
|
+
export default defineConfig({
|
|
90
|
+
shopify: {/* ... */},
|
|
91
|
+
session: CookieSessionStorage('__session', {
|
|
92
|
+
path: '/',
|
|
93
|
+
/* ... */
|
|
94
|
+
}),
|
|
95
|
+
serverAnalyticsConnectors: [
|
|
96
|
+
PerformanceMetricsServerAnalyticsConnector,
|
|
97
|
+
ShopifyServerAnalyticsConnector,
|
|
98
|
+
],
|
|
99
|
+
});
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
### Patch Changes
|
|
103
|
+
|
|
104
|
+
- [#1494](https://github.com/Shopify/hydrogen/pull/1494) [`3b549439`](https://github.com/Shopify/hydrogen/commit/3b549439bae1ec43ae9171744c576c53d8e8f6f1) Thanks [@jplhomer](https://github.com/jplhomer)! - Update `flattenConnection` to accept `nodes` and `edges` payloads
|
|
105
|
+
|
|
106
|
+
* [#1579](https://github.com/Shopify/hydrogen/pull/1579) [`2f75247c`](https://github.com/Shopify/hydrogen/commit/2f75247c071253ae27f6070a066897b5758a6a4f) Thanks [@frandiox](https://github.com/frandiox)! - Support renaming client component exports in intermediate/facade files.
|
|
107
|
+
|
|
108
|
+
- [#1562](https://github.com/Shopify/hydrogen/pull/1562) [`d38f6413`](https://github.com/Shopify/hydrogen/commit/d38f6413361d1ecb49c52d8389547d2b064081f7) Thanks [@wizardlyhel](https://github.com/wizardlyhel)! - Add storefront id to useShopQuery calls when available
|
|
109
|
+
|
|
110
|
+
* [#1593](https://github.com/Shopify/hydrogen/pull/1593) [`ae35b70b`](https://github.com/Shopify/hydrogen/commit/ae35b70b0847e1a6270d1c63d2968a3578442e66) Thanks [@juanpprieto](https://github.com/juanpprieto)! - Ensure the effect that updates the `cart.buyerIdenity.countryCode` is run when `countyCode` prop changes
|
|
111
|
+
|
|
112
|
+
- [#1504](https://github.com/Shopify/hydrogen/pull/1504) [`cc453242`](https://github.com/Shopify/hydrogen/commit/cc4532426509fd216f1bc036d5a095a18812b0cb) Thanks [@jplhomer](https://github.com/jplhomer)! - Fix read-only request.status in worker environments.
|
|
113
|
+
|
|
114
|
+
* [#1548](https://github.com/Shopify/hydrogen/pull/1548) [`923cb140`](https://github.com/Shopify/hydrogen/commit/923cb140b44fe989388f8754a8ca88bbfc68ab71) Thanks [@cartogram](https://github.com/cartogram)! - Add new devTools interface for performance, settings and graphQL tracking
|
|
115
|
+
|
|
116
|
+
- [#1375](https://github.com/Shopify/hydrogen/pull/1375) [`217b5f23`](https://github.com/Shopify/hydrogen/commit/217b5f23613da794bb6879ab0c897b66ef6204cf) Thanks [@blittle](https://github.com/blittle)! - Add a built-in healthcheck route available at `/__health`. It responds with a 200 and no body. Also suppresses server logs for built-in routes like healthcheck and analytics.
|
|
117
|
+
|
|
118
|
+
* [#1541](https://github.com/Shopify/hydrogen/pull/1541) [`4fde81f9`](https://github.com/Shopify/hydrogen/commit/4fde81f9d9ee739a6fbe5a8a903d3e6901144bf0) Thanks [@frandiox](https://github.com/frandiox)! - Fix support for latest React@experimental version.
|
|
119
|
+
|
|
120
|
+
- [#1497](https://github.com/Shopify/hydrogen/pull/1497) [`3364225f`](https://github.com/Shopify/hydrogen/commit/3364225ff62d283893643ea28c0135ff22af1dff) Thanks [@blittle](https://github.com/blittle)! - Improve waterfall detection
|
|
121
|
+
|
|
122
|
+
1. Show a summary in dev mode with instructions on getting details
|
|
123
|
+
2. Only show the waterfall warning the second time the page is loaded
|
|
124
|
+
3. Don't show the waterfall warning on preloaded queries
|
|
125
|
+
|
|
126
|
+
* [#1519](https://github.com/Shopify/hydrogen/pull/1519) [`d54b1072`](https://github.com/Shopify/hydrogen/commit/d54b10725b635f4531e94b9391cfd56f31a1d2e5) Thanks [@frandiox](https://github.com/frandiox)! - Improve CPU performance of the `useMoney` hook.
|
|
127
|
+
|
|
128
|
+
- [#1518](https://github.com/Shopify/hydrogen/pull/1518) [`f0b69477`](https://github.com/Shopify/hydrogen/commit/f0b6947762acdfd617c9ccd34615a36a64ab36f2) Thanks [@frandiox](https://github.com/frandiox)! - Compile code to latest supported ES version in workers and Node.
|
|
129
|
+
|
|
130
|
+
* [#1571](https://github.com/Shopify/hydrogen/pull/1571) [`accdc78a`](https://github.com/Shopify/hydrogen/commit/accdc78a13cc1557826509545a322bfa04e6e288) Thanks [@jplhomer](https://github.com/jplhomer)! - Upgrade Hydrogen to React v18.2. To update your app, run `yarn add @shopify/hydrogen@latest react@latest react-dom@latest`.
|
|
131
|
+
|
|
132
|
+
- [#1578](https://github.com/Shopify/hydrogen/pull/1578) [`f5290393`](https://github.com/Shopify/hydrogen/commit/f5290393264c523045cab4082495e81ec72d576d) Thanks [@frandiox](https://github.com/frandiox)! - Fix an issue where newly imported client components were not found in the browser.
|
|
133
|
+
|
|
134
|
+
* [#1556](https://github.com/Shopify/hydrogen/pull/1556) [`06f3d174`](https://github.com/Shopify/hydrogen/commit/06f3d174ff286ece0a7175ac7c2ae37e574f73b0) Thanks [@blittle](https://github.com/blittle)! - Add support for `Request.formData()` within API Routes for Node 16-17. Example:
|
|
135
|
+
|
|
136
|
+
```ts
|
|
137
|
+
export async function api(request) {
|
|
138
|
+
const formData = await request.formData();
|
|
139
|
+
|
|
140
|
+
const username = formData.get('user');
|
|
141
|
+
const password = formData.get('pass');
|
|
142
|
+
|
|
143
|
+
...
|
|
144
|
+
}
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
## 0.24.0
|
|
148
|
+
|
|
149
|
+
### Minor Changes
|
|
150
|
+
|
|
151
|
+
- [#1489](https://github.com/Shopify/hydrogen/pull/1489) [`e2ee2d45`](https://github.com/Shopify/hydrogen/commit/e2ee2d4575613ae34727de9c1a6280904bb2e3ff) Thanks [@blittle](https://github.com/blittle)! - In an effort to be performant by default, the [preloaded queries](https://shopify.dev/custom-storefronts/hydrogen/framework/preloaded-queries) are turned on by default when caching is also enabled. By default, each query has caching enabled too, so `preload` will on universally by default.
|
|
152
|
+
|
|
153
|
+
* [#1237](https://github.com/Shopify/hydrogen/pull/1237) [`356e75f3`](https://github.com/Shopify/hydrogen/commit/356e75f351c04ff393e996c34632005331ec0872) Thanks [@frehner](https://github.com/frehner)! - Updated Cart queries in two ways, one of which requires you to be using Storefront API `2022-07`:
|
|
154
|
+
|
|
155
|
+
1. [`CartLine`](https://shopify.dev/api/storefront/2022-04/objects/CartLine#fields) now uses [`CartLineEstimatedCost`'s `totalAmount`](https://shopify.dev/api/storefront/2022-04/objects/CartLineEstimatedCost) field for calculating the Line's total, instead of doing it manually.
|
|
156
|
+
2. Cart now uses [`totalQuantity`](https://shopify.dev/api/storefront/2022-07/objects/Cart#field-cart-totalquantity) for calculating how many items are in the cart, instead of doing this manually. **Note that this feature is only available in Storefront API `2022-07` and newer.**
|
|
157
|
+
|
|
158
|
+
### Patch Changes
|
|
159
|
+
|
|
160
|
+
- [#1473](https://github.com/Shopify/hydrogen/pull/1473) [`a7f3b4bf`](https://github.com/Shopify/hydrogen/commit/a7f3b4bfe0d66fb0440dff3d641a181372de313a) Thanks [@frandiox](https://github.com/frandiox)! - Reduce CPU consumption when rendering React Server Components.
|
|
161
|
+
|
|
162
|
+
* [#1453](https://github.com/Shopify/hydrogen/pull/1453) [`84b9e6d3`](https://github.com/Shopify/hydrogen/commit/84b9e6d3516a74f94fab691d6ff7605623351f1e) Thanks [@jplhomer](https://github.com/jplhomer)! - Update `setSelectedVariant` types to allow `null` to be passed.
|
|
163
|
+
|
|
164
|
+
- [#1484](https://github.com/Shopify/hydrogen/pull/1484) [`990bfd8b`](https://github.com/Shopify/hydrogen/commit/990bfd8b928425f2685901c1a02b686354d18d4d) Thanks [@wizardlyhel](https://github.com/wizardlyhel)! - Fix ClientAnalytics losing subscriber object when passed as a param
|
|
165
|
+
|
|
166
|
+
* [#1509](https://github.com/Shopify/hydrogen/pull/1509) [`05081b01`](https://github.com/Shopify/hydrogen/commit/05081b01283c023e9c751c04ed496003daf47091) Thanks [@jplhomer](https://github.com/jplhomer)! - Fix `<BuyNowButton>` so it can be rendered without being nested in a `<CartProvider>`
|
|
167
|
+
|
|
168
|
+
- [#1469](https://github.com/Shopify/hydrogen/pull/1469) [`07d45290`](https://github.com/Shopify/hydrogen/commit/07d452905492bfa1bd58c681b8d56407fdc4716b) Thanks [@frandiox](https://github.com/frandiox)! - Fix path resolution when using aliases in server components.
|
|
169
|
+
|
|
170
|
+
* [#1471](https://github.com/Shopify/hydrogen/pull/1471) [`5b4e08df`](https://github.com/Shopify/hydrogen/commit/5b4e08df97dd2343452b0d1f7ff59ac5bbf98d32) Thanks [@frandiox](https://github.com/frandiox)! - Added an experimental hook `useRequestContext` that provides server-only context for third party integrations.
|
|
171
|
+
|
|
172
|
+
- [#1486](https://github.com/Shopify/hydrogen/pull/1486) [`a31e007d`](https://github.com/Shopify/hydrogen/commit/a31e007dbc2a1a6ce12e39ffc3f63f45e90abfa7) Thanks [@frehner](https://github.com/frehner)! - Fix `<ProductOptionsProvider/>`'s `setSelectedOptions()` function to update the `selectedVariant` as well
|
|
173
|
+
|
|
174
|
+
## 0.23.0
|
|
175
|
+
|
|
176
|
+
### Minor Changes
|
|
177
|
+
|
|
178
|
+
- [#1389](https://github.com/Shopify/hydrogen/pull/1389) [`9a21108f`](https://github.com/Shopify/hydrogen/commit/9a21108f6ff89474db9ff8bec26733fcbe744bdc) Thanks [@blittle](https://github.com/blittle)! - **Breaking change**
|
|
179
|
+
|
|
180
|
+
The utility `isClient` has been renamed to `isBrowser`. This is because the utility really checks if the running context is a browser, _not_ if the context is a client component.
|
|
181
|
+
|
|
182
|
+
All client components by default also run on the server when they are server rendered. If you don't want that to happen, use the `isBrowser()` hook. Remember that anything not server rendered will be unavailable for SEO bots.
|
|
183
|
+
|
|
184
|
+
* [#1431](https://github.com/Shopify/hydrogen/pull/1431) [`6975bdb9`](https://github.com/Shopify/hydrogen/commit/6975bdb90cfdc03562d21cec09150c52ff31ff78) Thanks [@jplhomer](https://github.com/jplhomer)! - Add `scroll` prop to `Link` and `navigate` to allow the scroll restoration behavior to be disabled.
|
|
185
|
+
|
|
186
|
+
By default, when a `<Link>` component is clicked, Hydrogen emulates default browser behavior and attempts to restore the scroll position previously used in the visitor's session. For new pages, this defaults to scrolling to the top of the page.
|
|
187
|
+
|
|
188
|
+
However, if you are building a user interface that should fetch a new server components request and update the URL but not modify scroll position, then you can disable scroll restoration using the `scroll` prop:
|
|
189
|
+
|
|
190
|
+
```jsx
|
|
191
|
+
import {Link} from '@shopify/hydrogen';
|
|
192
|
+
export default function Index({request}) {
|
|
193
|
+
const url = new URL(request.normalizedUrl);
|
|
194
|
+
|
|
195
|
+
return (
|
|
196
|
+
<>
|
|
197
|
+
<p>Current param is: {url.searchParams.get('param')}</p>
|
|
198
|
+
<Link to="/?param=foo" scroll={false}>
|
|
199
|
+
Update param to foo
|
|
200
|
+
</Link>
|
|
201
|
+
</>
|
|
202
|
+
);
|
|
203
|
+
}
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
- [#1325](https://github.com/Shopify/hydrogen/pull/1325) [`572c18d1`](https://github.com/Shopify/hydrogen/commit/572c18d1893b212cfc3f1be3043a67dcca251629) Thanks [@wizardlyhel](https://github.com/wizardlyhel)! - - Fix clientAnalytics not waiting for all server analytics data before sending page view event
|
|
207
|
+
|
|
208
|
+
- Fix server analytics connector erroring out after more than 1 server analytics connectors are attached
|
|
209
|
+
- Shopify analytics components
|
|
210
|
+
|
|
211
|
+
# Updates to server analytics connectors
|
|
212
|
+
|
|
213
|
+
The server analytics connector interface has updated to
|
|
214
|
+
|
|
215
|
+
```jsx
|
|
216
|
+
export function request(
|
|
217
|
+
requestUrl: string,
|
|
218
|
+
requestHeader: Headers,
|
|
219
|
+
data?: any,
|
|
220
|
+
contentType?: string
|
|
221
|
+
): void {
|
|
222
|
+
// Do something with the analytic event.
|
|
223
|
+
}
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
# Introducing Shopify analytics
|
|
227
|
+
|
|
228
|
+
Optional analytics components that allows you to send ecommerce related analytics to
|
|
229
|
+
Shopify. Adding the Shopify analytics components will allow the Shopify admin - Analytics
|
|
230
|
+
dashboard to work.
|
|
231
|
+
|
|
232
|
+
For information, see [Shopify Analytics](https://shopify.dev/api/hydrogen/components/framework/shopifyanalytics)
|
|
233
|
+
|
|
234
|
+
* [#1334](https://github.com/Shopify/hydrogen/pull/1334) [`58e039d4`](https://github.com/Shopify/hydrogen/commit/58e039d45cf69b670628f9f7ea62cb7c2d8425d9) Thanks [@blittle](https://github.com/blittle)! - With the introduction of authenticated pages, we also now provide the ability to prevent pages from being indexed by bots. You can do so by passing `noindex` to the `Seo` component:
|
|
235
|
+
|
|
236
|
+
```jsx
|
|
237
|
+
<Seo type="noindex" data={{title: 'Login'}} />
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
- [#1397](https://github.com/Shopify/hydrogen/pull/1397) [`fbd185ab`](https://github.com/Shopify/hydrogen/commit/fbd185ab47e7335992b7844af0ef0b0aea6d70a5) Thanks [@frehner](https://github.com/frehner)! - ## `<ProductProvider/>` and `<ProductOptionsProvider/>`
|
|
241
|
+
|
|
242
|
+
- `<ProductProvider/>` has been removed
|
|
243
|
+
- `<ProductPrice/>` was the only component left that used it; now it requires a `data` prop that takes in the product object
|
|
244
|
+
- `<ProductOptionsProvider/>` now maintains and provides the state that `useProductOptions` used to keep track of by itself. This change enables you to use multiple `useProductOptions` hook calls and have them share the same state (such as selected variant, options, etc.)
|
|
245
|
+
|
|
246
|
+
* [#1403](https://github.com/Shopify/hydrogen/pull/1403) [`979f8177`](https://github.com/Shopify/hydrogen/commit/979f81775a4bfa83276030da07cb012e6cb08e2f) Thanks [@frandiox](https://github.com/frandiox)! - **Breaking change**: The `setLogger` and `setLoggerOptions` utilities have been removed. The same information can now be passed under the `logger` property in Hydrogen config:
|
|
247
|
+
|
|
248
|
+
```diff
|
|
249
|
+
// App.server.jsx
|
|
250
|
+
|
|
251
|
+
-import {setLogger, setLoggerOptions} from '@shopify/hydrogen';
|
|
252
|
+
|
|
253
|
+
-setLogger({
|
|
254
|
+
- trace() {},
|
|
255
|
+
- error() {},
|
|
256
|
+
- // ...
|
|
257
|
+
-});
|
|
258
|
+
|
|
259
|
+
-setLoggerOptions({
|
|
260
|
+
- showQueryTiming: true,
|
|
261
|
+
- showCacheControlHeader: true,
|
|
262
|
+
- // ...
|
|
263
|
+
-});
|
|
264
|
+
|
|
265
|
+
function App() {
|
|
266
|
+
// ...
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
export default renderHydrogen(App);
|
|
270
|
+
```
|
|
271
|
+
|
|
272
|
+
```diff
|
|
273
|
+
// hydrogen.config.js
|
|
274
|
+
|
|
275
|
+
export default defineConfig({
|
|
276
|
+
// ...
|
|
277
|
+
+ logger: {
|
|
278
|
+
+ trace() {},
|
|
279
|
+
+ error() {},
|
|
280
|
+
+ showQueryTiming: true,
|
|
281
|
+
+ showCacheControlHeader: true,
|
|
282
|
+
+ // ...
|
|
283
|
+
+ },
|
|
284
|
+
});
|
|
285
|
+
```
|
|
286
|
+
|
|
287
|
+
- [#1433](https://github.com/Shopify/hydrogen/pull/1433) [`cd354d3a`](https://github.com/Shopify/hydrogen/commit/cd354d3a6205b5a8ef14426040121ac620c8c158) Thanks [@frandiox](https://github.com/frandiox)! - The `response.writeHead` method has been removed, while `response.status` and `response.statusText` are now writable.
|
|
288
|
+
|
|
289
|
+
```diff
|
|
290
|
+
function App({response}) {
|
|
291
|
+
- response.writeHead({
|
|
292
|
+
- headers: {'custom-header': 'value'},
|
|
293
|
+
- status: 404,
|
|
294
|
+
- });
|
|
295
|
+
+ response.headers.set('custom-header', 'value');
|
|
296
|
+
+ response.status = 404;
|
|
297
|
+
}
|
|
298
|
+
```
|
|
299
|
+
|
|
300
|
+
* [#1418](https://github.com/Shopify/hydrogen/pull/1418) [`512cb009`](https://github.com/Shopify/hydrogen/commit/512cb009fadeb1907fafa2cef8b568081799335f) Thanks [@frandiox](https://github.com/frandiox)! - **Breaking change**: The client configuration, including the `strictMode` option, has been moved from custom client entry handlers to the Hydrogen configuration file. If you had a custom client entry file just to pass client options, you can remove it and do the same in `hydrogen.config.js`:
|
|
301
|
+
|
|
302
|
+
```diff
|
|
303
|
+
// Custom client entry handler
|
|
304
|
+
|
|
305
|
+
-renderHydrogen(ClientWrapper, {strictMode: false});
|
|
306
|
+
+renderHydrogen(ClientWrapper);
|
|
307
|
+
```
|
|
308
|
+
|
|
309
|
+
```diff
|
|
310
|
+
// hydrogen.config.jsx
|
|
311
|
+
|
|
312
|
+
export default defineConfig({
|
|
313
|
+
+ strictMode: false,
|
|
314
|
+
});
|
|
315
|
+
```
|
|
316
|
+
|
|
317
|
+
To remove a custom client entry handler in case it's not needed anymore, delete the custom file and change `index.html`:
|
|
318
|
+
|
|
319
|
+
```diff
|
|
320
|
+
<body>
|
|
321
|
+
<div id="root"></div>
|
|
322
|
+
- <script type="module" src="/src/custom-client-entry"></script>
|
|
323
|
+
+ <script type="module" src="/@shopify/hydrogen/entry-client"></script>
|
|
324
|
+
</body>
|
|
325
|
+
```
|
|
326
|
+
|
|
327
|
+
- [#1401](https://github.com/Shopify/hydrogen/pull/1401) [`335b70ce`](https://github.com/Shopify/hydrogen/commit/335b70ce67f9f137875fcd18f32e00c1b1b4c533) Thanks [@frandiox](https://github.com/frandiox)! - **Breaking change**: The `enableStreaming` config option has been deprecated. The same feature can be done directly in the app:
|
|
328
|
+
|
|
329
|
+
```diff
|
|
330
|
+
// hydrogen.config.js
|
|
331
|
+
|
|
332
|
+
export default defineConfig({
|
|
333
|
+
shopify: {
|
|
334
|
+
// ...
|
|
335
|
+
},
|
|
336
|
+
- enableStreaming: (req) => {
|
|
337
|
+
- return req.headers.get('user-agent') !== 'custom bot';
|
|
338
|
+
- },
|
|
339
|
+
});
|
|
340
|
+
```
|
|
341
|
+
|
|
342
|
+
```diff
|
|
343
|
+
// App.server.jsx
|
|
344
|
+
|
|
345
|
+
-function App() {
|
|
346
|
+
+function App({request, response}) {
|
|
347
|
+
+ if (request.headers.get('user-agent') === 'custom bot') {
|
|
348
|
+
+ response.doNotStream();
|
|
349
|
+
+ }
|
|
350
|
+
|
|
351
|
+
return <Suspense fallback={'Loading...'}>{/*...*/}</Suspense>;
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
export default renderHydrogen(App);
|
|
355
|
+
```
|
|
356
|
+
|
|
357
|
+
### Patch Changes
|
|
358
|
+
|
|
359
|
+
- [#1425](https://github.com/Shopify/hydrogen/pull/1425) [`e213aa86`](https://github.com/Shopify/hydrogen/commit/e213aa8656b17bf649fef714befa99b9618aae45) Thanks [@frandiox](https://github.com/frandiox)! - Rename internal Hydrogen global variables that could conflict with third party libraries that use the same names.
|
|
360
|
+
|
|
361
|
+
* [#1361](https://github.com/Shopify/hydrogen/pull/1361) [`cf2ef664`](https://github.com/Shopify/hydrogen/commit/cf2ef664cd1e91bc53fc34698ac23797c398e74f) Thanks [@frandiox](https://github.com/frandiox)! - Improve component bundling to reduce the total amount of JS files downloaded in the browser.
|
|
362
|
+
|
|
363
|
+
- [#1452](https://github.com/Shopify/hydrogen/pull/1452) [`ed1586a7`](https://github.com/Shopify/hydrogen/commit/ed1586a758fd36bddcc422a75db8a7971ce946d5) Thanks [@frandiox](https://github.com/frandiox)! - Reduce CPU consumption when rendering React Server Components.
|
|
364
|
+
|
|
365
|
+
* [#1399](https://github.com/Shopify/hydrogen/pull/1399) [`583ce40c`](https://github.com/Shopify/hydrogen/commit/583ce40c97391bb22e6e15e736e6237e9a1ea085) Thanks [@frandiox](https://github.com/frandiox)! - Confusing warnings that are not actionable have been removed.
|
|
366
|
+
|
|
367
|
+
- [#1460](https://github.com/Shopify/hydrogen/pull/1460) [`18056879`](https://github.com/Shopify/hydrogen/commit/18056879f1ea1dc54f146184bfdd4f01f24df636) Thanks [@wizardlyhel](https://github.com/wizardlyhel)! - Fix doc links
|
|
368
|
+
|
|
369
|
+
* [#1444](https://github.com/Shopify/hydrogen/pull/1444) [`0b4ee487`](https://github.com/Shopify/hydrogen/commit/0b4ee4876998923f206f6d28b1a3ef95c9616e59) Thanks [@blittle](https://github.com/blittle)! - Propagate a better error message when the response from the storefront API is not JSON parseable
|
|
370
|
+
|
|
371
|
+
- [#1227](https://github.com/Shopify/hydrogen/pull/1227) [`8eae0a07`](https://github.com/Shopify/hydrogen/commit/8eae0a07ab02e61ac8742e42488825090ca0aa37) Thanks [@jplhomer](https://github.com/jplhomer)! - Enable streaming by default for all platforms
|
|
372
|
+
|
|
373
|
+
* [#1427](https://github.com/Shopify/hydrogen/pull/1427) [`7115d7d8`](https://github.com/Shopify/hydrogen/commit/7115d7d8dc291b7e5b4dda200baf8a906a005cc8) Thanks [@jplhomer](https://github.com/jplhomer)! - Properly support Node v18
|
|
374
|
+
|
|
375
|
+
- [#1424](https://github.com/Shopify/hydrogen/pull/1424) [`446c12bf`](https://github.com/Shopify/hydrogen/commit/446c12bffa08eadccfd27afe8b5f34c77a61d134) Thanks [@frandiox](https://github.com/frandiox)! - Custom loggers can return promises from their methods. Hydrogen will await for them after the current request is over but before the runtime instance ends.
|
|
376
|
+
|
|
377
|
+
* [#1423](https://github.com/Shopify/hydrogen/pull/1423) [`aaf9efa4`](https://github.com/Shopify/hydrogen/commit/aaf9efa45dc9453e95be8e3020c259368ac5f4d0) Thanks [@frandiox](https://github.com/frandiox)! - Workers context (e.g. `waitUntil`) is now scoped to the current request instead of globally available.
|
|
378
|
+
|
|
379
|
+
- [#1330](https://github.com/Shopify/hydrogen/pull/1330) [`c7dc6440`](https://github.com/Shopify/hydrogen/commit/c7dc644059206e7080c33d9f7e0096c168ae593e) Thanks [@ejfranco06](https://github.com/ejfranco06)! - [#1245] - Generate a default srcset for an image returned by the Shopify CDN on the Image component and allow using a custom set of `widths.`
|
|
380
|
+
|
|
3
381
|
## 0.22.1
|
|
4
382
|
|
|
5
383
|
### Patch Changes
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { BaseButtonProps } from '../BaseButton';
|
|
2
2
|
interface AddToCartButtonProps {
|
|
3
3
|
/** An array of cart line attributes that belong to the item being added to the cart. */
|
|
4
4
|
attributes?: {
|
|
@@ -9,15 +9,12 @@ interface AddToCartButtonProps {
|
|
|
9
9
|
variantId?: string | null;
|
|
10
10
|
/** The item quantity. */
|
|
11
11
|
quantity?: number;
|
|
12
|
-
/** Any ReactNode elements. */
|
|
13
|
-
children: ReactNode;
|
|
14
12
|
/** 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. */
|
|
15
13
|
accessibleAddingToCartLabel?: string;
|
|
16
14
|
}
|
|
17
|
-
declare type PropsWeControl = 'onClick';
|
|
18
15
|
/**
|
|
19
16
|
* The `AddToCartButton` component renders a button that adds an item to the cart when pressed.
|
|
20
17
|
* It must be a descendent of the `CartProvider` component.
|
|
21
18
|
*/
|
|
22
|
-
export declare function AddToCartButton(props:
|
|
19
|
+
export declare function AddToCartButton(props: AddToCartButtonProps & BaseButtonProps): JSX.Element;
|
|
23
20
|
export {};
|
|
@@ -1,20 +1,20 @@
|
|
|
1
|
-
import React, { useEffect, useState } from 'react';
|
|
1
|
+
import React, { useCallback, useEffect, useState } from 'react';
|
|
2
2
|
import { useCart } from '../CartProvider';
|
|
3
|
-
import {
|
|
3
|
+
import { useProductOptions } from '../ProductOptionsProvider';
|
|
4
|
+
import { BaseButton } from '../BaseButton';
|
|
4
5
|
/**
|
|
5
6
|
* The `AddToCartButton` component renders a button that adds an item to the cart when pressed.
|
|
6
7
|
* It must be a descendent of the `CartProvider` component.
|
|
7
8
|
*/
|
|
8
9
|
export function AddToCartButton(props) {
|
|
9
|
-
var _a, _b;
|
|
10
10
|
const [addingItem, setAddingItem] = useState(false);
|
|
11
|
-
const { variantId: explicitVariantId, quantity = 1, attributes, children, accessibleAddingToCartLabel, ...passthroughProps } = props;
|
|
11
|
+
const { variantId: explicitVariantId, quantity = 1, attributes, onClick, children, accessibleAddingToCartLabel, ...passthroughProps } = props;
|
|
12
12
|
const { status, linesAdd } = useCart();
|
|
13
|
-
const
|
|
14
|
-
const variantId =
|
|
13
|
+
const { selectedVariant } = useProductOptions();
|
|
14
|
+
const variantId = explicitVariantId ?? selectedVariant?.id ?? '';
|
|
15
15
|
const disabled = explicitVariantId === null ||
|
|
16
16
|
variantId === '' ||
|
|
17
|
-
|
|
17
|
+
selectedVariant === null ||
|
|
18
18
|
addingItem ||
|
|
19
19
|
passthroughProps.disabled;
|
|
20
20
|
useEffect(() => {
|
|
@@ -22,17 +22,18 @@ export function AddToCartButton(props) {
|
|
|
22
22
|
setAddingItem(false);
|
|
23
23
|
}
|
|
24
24
|
}, [status, addingItem]);
|
|
25
|
+
const handleAddItem = useCallback(() => {
|
|
26
|
+
setAddingItem(true);
|
|
27
|
+
linesAdd([
|
|
28
|
+
{
|
|
29
|
+
quantity,
|
|
30
|
+
merchandiseId: variantId,
|
|
31
|
+
attributes,
|
|
32
|
+
},
|
|
33
|
+
]);
|
|
34
|
+
}, [linesAdd, quantity, variantId, attributes]);
|
|
25
35
|
return (React.createElement(React.Fragment, null,
|
|
26
|
-
React.createElement(
|
|
27
|
-
setAddingItem(true);
|
|
28
|
-
linesAdd([
|
|
29
|
-
{
|
|
30
|
-
quantity,
|
|
31
|
-
merchandiseId: variantId,
|
|
32
|
-
attributes,
|
|
33
|
-
},
|
|
34
|
-
]);
|
|
35
|
-
} }, children),
|
|
36
|
+
React.createElement(BaseButton, { ...passthroughProps, disabled: disabled, onClick: onClick, defaultOnClick: handleAddItem }, children),
|
|
36
37
|
accessibleAddingToCartLabel ? (React.createElement("p", { style: {
|
|
37
38
|
position: 'absolute',
|
|
38
39
|
width: '1px',
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import React, { ReactNode, Ref } from 'react';
|
|
2
|
+
interface Props {
|
|
3
|
+
/** Any ReactNode elements. */
|
|
4
|
+
children: ReactNode;
|
|
5
|
+
/** Click event handler. Default behaviour triggers unless prevented */
|
|
6
|
+
onClick?: (event?: React.MouseEvent<HTMLButtonElement, MouseEvent>) => void | boolean;
|
|
7
|
+
/** A default onClick behaviour */
|
|
8
|
+
defaultOnClick?: (event?: React.MouseEvent<HTMLButtonElement, MouseEvent>) => void | boolean;
|
|
9
|
+
/** A ref to the underlying button */
|
|
10
|
+
buttonRef?: Ref<HTMLButtonElement>;
|
|
11
|
+
}
|
|
12
|
+
export declare type BaseButtonProps = Omit<JSX.IntrinsicElements['button'], 'onClick' | 'children'> & Props;
|
|
13
|
+
export declare function BaseButton({ onClick, defaultOnClick, children, buttonRef, ...passthroughProps }: BaseButtonProps): JSX.Element;
|
|
14
|
+
export {};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { useCallback } from 'react';
|
|
3
|
+
export function BaseButton({ onClick, defaultOnClick, children, buttonRef, ...passthroughProps }) {
|
|
4
|
+
const handleOnClick = useCallback((event) => {
|
|
5
|
+
if (onClick) {
|
|
6
|
+
const clickShouldContinue = onClick(event);
|
|
7
|
+
if ((typeof clickShouldContinue === 'boolean' &&
|
|
8
|
+
clickShouldContinue === false) ||
|
|
9
|
+
event?.defaultPrevented)
|
|
10
|
+
return;
|
|
11
|
+
}
|
|
12
|
+
defaultOnClick?.(event);
|
|
13
|
+
}, [defaultOnClick, onClick]);
|
|
14
|
+
return (React.createElement("button", { ...passthroughProps, ref: buttonRef, onClick: handleOnClick }, children));
|
|
15
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { BaseButton, BaseButtonProps } from './BaseButton.client';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { BaseButton } from './BaseButton.client';
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { BaseButtonProps } from '../BaseButton';
|
|
2
2
|
interface BuyNowButtonProps {
|
|
3
3
|
/** The item quantity. Defaults to 1. */
|
|
4
4
|
quantity?: number;
|
|
@@ -9,10 +9,7 @@ interface BuyNowButtonProps {
|
|
|
9
9
|
key: string;
|
|
10
10
|
value: string;
|
|
11
11
|
}[];
|
|
12
|
-
/** Any `ReactNode` elements. */
|
|
13
|
-
children: ReactNode;
|
|
14
12
|
}
|
|
15
|
-
declare type PropsWeControl = 'onClick';
|
|
16
13
|
/** The `BuyNowButton` component renders a button that adds an item to the cart and redirects the customer to checkout. */
|
|
17
|
-
export declare function BuyNowButton(props:
|
|
14
|
+
export declare function BuyNowButton(props: BuyNowButtonProps & BaseButtonProps): JSX.Element;
|
|
18
15
|
export {};
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import React, { useEffect, useState, useCallback } from 'react';
|
|
2
2
|
import { useInstantCheckout } from '../CartProvider';
|
|
3
|
+
import { BaseButton } from '../BaseButton';
|
|
3
4
|
/** The `BuyNowButton` component renders a button that adds an item to the cart and redirects the customer to checkout. */
|
|
4
5
|
export function BuyNowButton(props) {
|
|
5
6
|
const { createInstantCheckout, checkoutUrl } = useInstantCheckout();
|
|
6
7
|
const [loading, setLoading] = useState(false);
|
|
7
|
-
const { quantity, variantId, attributes, children, ...passthroughProps } = props;
|
|
8
|
+
const { quantity, variantId, onClick, attributes, children, ...passthroughProps } = props;
|
|
8
9
|
useEffect(() => {
|
|
9
10
|
if (checkoutUrl) {
|
|
10
11
|
window.location.href = checkoutUrl;
|
|
@@ -15,12 +16,12 @@ export function BuyNowButton(props) {
|
|
|
15
16
|
createInstantCheckout({
|
|
16
17
|
lines: [
|
|
17
18
|
{
|
|
18
|
-
quantity: quantity
|
|
19
|
+
quantity: quantity ?? 1,
|
|
19
20
|
merchandiseId: variantId,
|
|
20
21
|
attributes,
|
|
21
22
|
},
|
|
22
23
|
],
|
|
23
24
|
});
|
|
24
|
-
}, [
|
|
25
|
-
return (React.createElement(
|
|
25
|
+
}, [createInstantCheckout, quantity, variantId, attributes]);
|
|
26
|
+
return (React.createElement(BaseButton, { disabled: loading ?? passthroughProps.disabled, ...passthroughProps, onClick: onClick, defaultOnClick: handleBuyNow }, children));
|
|
26
27
|
}
|
|
@@ -11,16 +11,16 @@ export function CartEstimatedCost(props) {
|
|
|
11
11
|
const { amountType = 'total', children, ...passthroughProps } = props;
|
|
12
12
|
let amount;
|
|
13
13
|
if (amountType == 'total') {
|
|
14
|
-
amount = estimatedCost
|
|
14
|
+
amount = estimatedCost?.totalAmount;
|
|
15
15
|
}
|
|
16
16
|
else if (amountType == 'subtotal') {
|
|
17
|
-
amount = estimatedCost
|
|
17
|
+
amount = estimatedCost?.subtotalAmount;
|
|
18
18
|
}
|
|
19
19
|
else if (amountType == 'tax') {
|
|
20
|
-
amount = estimatedCost
|
|
20
|
+
amount = estimatedCost?.totalTaxAmount;
|
|
21
21
|
}
|
|
22
22
|
else if (amountType == 'duty') {
|
|
23
|
-
amount = estimatedCost
|
|
23
|
+
amount = estimatedCost?.totalDutyAmount;
|
|
24
24
|
}
|
|
25
25
|
if (amount == null) {
|
|
26
26
|
return null;
|
|
@@ -8,14 +8,11 @@ import { Money } from '../Money';
|
|
|
8
8
|
export function CartLinePrice(props) {
|
|
9
9
|
const cartLine = useCartLine();
|
|
10
10
|
const { priceType = 'regular', ...passthroughProps } = props;
|
|
11
|
-
const
|
|
12
|
-
? cartLine.
|
|
13
|
-
: cartLine.
|
|
14
|
-
if (
|
|
11
|
+
const moneyV2 = priceType === 'regular'
|
|
12
|
+
? cartLine.estimatedCost.totalAmount
|
|
13
|
+
: cartLine.estimatedCost.compareAtAmount;
|
|
14
|
+
if (moneyV2 == null) {
|
|
15
15
|
return null;
|
|
16
16
|
}
|
|
17
|
-
return
|
|
18
|
-
amount: `${parseFloat(price.amount) * cartLine.quantity}`,
|
|
19
|
-
currencyCode: price.currencyCode,
|
|
20
|
-
} }));
|
|
17
|
+
return React.createElement(Money, { ...passthroughProps, data: moneyV2 });
|
|
21
18
|
}
|
|
@@ -4,6 +4,16 @@ export declare const CartLineContext: import("react").Context<({
|
|
|
4
4
|
attributes: ({
|
|
5
5
|
__typename?: "Attribute" | undefined;
|
|
6
6
|
} & Pick<import("../../storefront-api-types").Attribute, "key" | "value">)[];
|
|
7
|
+
estimatedCost: {
|
|
8
|
+
__typename?: "CartLineEstimatedCost" | undefined;
|
|
9
|
+
} & {
|
|
10
|
+
totalAmount: {
|
|
11
|
+
__typename?: "MoneyV2" | undefined;
|
|
12
|
+
} & Pick<import("../../storefront-api-types").MoneyV2, "currencyCode" | "amount">;
|
|
13
|
+
compareAtAmount?: import("../../storefront-api-types").Maybe<{
|
|
14
|
+
__typename?: "MoneyV2" | undefined;
|
|
15
|
+
} & Pick<import("../../storefront-api-types").MoneyV2, "currencyCode" | "amount">> | undefined;
|
|
16
|
+
};
|
|
7
17
|
merchandise: {
|
|
8
18
|
__typename?: "ProductVariant" | undefined;
|
|
9
19
|
} & Pick<import("../../storefront-api-types").ProductVariant, "id" | "title" | "availableForSale" | "requiresShipping"> & {
|
package/dist/esnext/components/CartLineQuantityAdjustButton/CartLineQuantityAdjustButton.d.ts
CHANGED
|
@@ -1,14 +1,13 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ElementType } from 'react';
|
|
2
2
|
import { Props } from '../types';
|
|
3
|
-
|
|
3
|
+
import { BaseButtonProps } from '../BaseButton';
|
|
4
|
+
declare type PropsWeControl = 'adjust';
|
|
4
5
|
/**
|
|
5
6
|
* The `CartLineQuantityAdjustButton` component renders a button that adjusts the cart line's quantity when pressed.
|
|
6
7
|
* It must be a descendent of a `CartLineProvider` component.
|
|
7
8
|
*/
|
|
8
9
|
export declare function CartLineQuantityAdjustButton<TTag extends ElementType = 'button'>(props: Props<TTag, PropsWeControl> & {
|
|
9
|
-
/** Any `ReactNode` elements. */
|
|
10
|
-
children: ReactNode;
|
|
11
10
|
/** The adjustment for a cart line's quantity. Valid values: `increase` (default), `decrease`, or `remove`. */
|
|
12
11
|
adjust?: 'increase' | 'decrease' | 'remove';
|
|
13
|
-
}): JSX.Element;
|
|
12
|
+
} & BaseButtonProps): JSX.Element;
|
|
14
13
|
export {};
|