@graphcommerce/magento-product 9.0.0-canary.99 → 9.0.1-canary.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.
Files changed (106) hide show
  1. package/CHANGELOG.md +212 -1278
  2. package/components/AddProductsToCart/AddProductsToCartButton.tsx +4 -5
  3. package/components/AddProductsToCart/AddProductsToCartError.tsx +3 -2
  4. package/components/AddProductsToCart/AddProductsToCartFab.tsx +5 -6
  5. package/components/AddProductsToCart/AddProductsToCartForm.tsx +15 -19
  6. package/components/AddProductsToCart/AddProductsToCartQuantity.tsx +7 -5
  7. package/components/AddProductsToCart/AddProductsToCartSnackbar.tsx +2 -1
  8. package/components/AddProductsToCart/AddProductsToCartSnackbarMessage.tsx +5 -6
  9. package/components/AddProductsToCart/findAddedItems.ts +2 -2
  10. package/components/AddProductsToCart/toUserErrors.ts +2 -2
  11. package/components/AddProductsToCart/useAddProductsToCartAction.ts +4 -3
  12. package/components/AddProductsToCart/useFormAddProductsToCart.ts +3 -3
  13. package/components/JsonLdProduct/ProductPageJsonLd.tsx +1 -1
  14. package/components/JsonLdProduct/jsonLdProduct.tsx +2 -2
  15. package/components/ProductAddToCart/index.ts +0 -1
  16. package/components/ProductCustomizable/CustomizableAreaOption.tsx +5 -4
  17. package/components/ProductCustomizable/CustomizableCheckboxOption.tsx +4 -8
  18. package/components/ProductCustomizable/CustomizableDateOption.tsx +3 -3
  19. package/components/ProductCustomizable/CustomizableDropDownOption.tsx +6 -6
  20. package/components/ProductCustomizable/CustomizableFieldOption.tsx +3 -3
  21. package/components/ProductCustomizable/CustomizableMultipleOption.tsx +4 -8
  22. package/components/ProductCustomizable/CustomizableRadioOption.tsx +4 -8
  23. package/components/ProductCustomizable/ProductCustomizable.tsx +7 -6
  24. package/components/ProductFiltersPro/PriceSlider.tsx +4 -2
  25. package/components/ProductFiltersPro/ProductFilterEqualChip.tsx +1 -1
  26. package/components/ProductFiltersPro/ProductFilterEqualSection.tsx +1 -1
  27. package/components/ProductFiltersPro/ProductFilterRangeChip.tsx +1 -1
  28. package/components/ProductFiltersPro/ProductFiltersPro.tsx +10 -19
  29. package/components/ProductFiltersPro/ProductFiltersProAggregations.tsx +2 -2
  30. package/components/ProductFiltersPro/ProductFiltersProAllFiltersChip.tsx +7 -7
  31. package/components/ProductFiltersPro/ProductFiltersProAllFiltersSidebar.tsx +8 -15
  32. package/components/ProductFiltersPro/ProductFiltersProCategorySection.tsx +6 -8
  33. package/components/ProductFiltersPro/ProductFiltersProChips.tsx +4 -2
  34. package/components/ProductFiltersPro/ProductFiltersProClearAll.tsx +2 -2
  35. package/components/ProductFiltersPro/ProductFiltersProLayoutSidebar.tsx +8 -2
  36. package/components/ProductFiltersPro/ProductFiltersProLimitChip.tsx +4 -2
  37. package/components/ProductFiltersPro/ProductFiltersProLimitSection.tsx +3 -2
  38. package/components/ProductFiltersPro/ProductFiltersProNoResults.tsx +5 -4
  39. package/components/ProductFiltersPro/ProductFiltersProSortChip.tsx +4 -2
  40. package/components/ProductFiltersPro/ProductFiltersProSortDirectionArrow.tsx +5 -3
  41. package/components/ProductFiltersPro/ProductFiltersProSortSection.tsx +3 -2
  42. package/components/ProductFiltersPro/activeAggregations.ts +2 -2
  43. package/components/ProductFiltersPro/applyAggregationCount.ts +2 -2
  44. package/components/ProductFiltersPro/useProductFiltersProClearAllAction.ts +1 -1
  45. package/components/ProductFiltersPro/useProductFiltersProSort.tsx +3 -3
  46. package/components/ProductList/ProductList.graphql +4 -3
  47. package/components/ProductListCount/ProductListCount.tsx +3 -2
  48. package/components/ProductListFilters/FilterCheckboxType.tsx +5 -4
  49. package/components/ProductListFilters/FilterEqualType.tsx +7 -7
  50. package/components/ProductListFilters/FilterRangeType.tsx +4 -3
  51. package/components/ProductListFilters/ProductFilters.graphql +2 -2
  52. package/components/ProductListFilters/ProductListFilters.tsx +3 -3
  53. package/components/ProductListFiltersContainer/ProductListFiltersContainer.tsx +5 -4
  54. package/components/ProductListItem/ProductDiscountLabel.tsx +4 -3
  55. package/components/ProductListItem/ProductListItem.tsx +58 -31
  56. package/components/ProductListItem/ProductListItemImage.tsx +9 -7
  57. package/components/ProductListItem/ProductListItemImageContainer.tsx +9 -8
  58. package/components/ProductListItem/ProductListItemLinkOrDiv.tsx +13 -8
  59. package/components/ProductListItem/ProductListItemTitleAndPrice.tsx +4 -3
  60. package/components/ProductListItems/ProductListItemsBase.tsx +24 -18
  61. package/components/ProductListItems/ProductListParamsProvider.tsx +2 -2
  62. package/components/ProductListItems/filterTypes.tsx +4 -4
  63. package/components/ProductListItems/filteredProductList.tsx +2 -2
  64. package/components/ProductListItems/getFilterTypes.ts +2 -1
  65. package/components/ProductListItems/productListApplyCategoryDefaults.ts +5 -4
  66. package/components/ProductListItems/renderer.tsx +3 -2
  67. package/components/ProductListLink/ProductListLink.tsx +5 -3
  68. package/components/ProductListPagination/ProductListPagination.tsx +6 -5
  69. package/components/ProductListPrice/ProductListPrice.tsx +12 -7
  70. package/components/ProductListSort/ProductListSort.tsx +8 -6
  71. package/components/ProductListSuggestions/ProductListSearchSuggestion.graphql +3 -0
  72. package/components/ProductListSuggestions/ProductListSuggestions.graphql +1 -1
  73. package/components/ProductListSuggestions/ProductListSuggestions.tsx +2 -2
  74. package/components/ProductPage/ProductPageAddToCartRow.tsx +4 -3
  75. package/components/ProductPageBreadcrumb/ProductPageBreadcrumb.tsx +6 -4
  76. package/components/ProductPageBreadcrumb/ProductPageBreadcrumbs.tsx +3 -3
  77. package/components/ProductPageCategory/productPageCategory.ts +1 -1
  78. package/components/ProductPageDescription/ProductPageDescription.tsx +7 -6
  79. package/components/ProductPageGallery/ProductPageGallery.tsx +3 -7
  80. package/components/ProductPageMeta/ProductPageMeta.tsx +2 -2
  81. package/components/ProductPageName/ProductPageName.tsx +2 -2
  82. package/components/ProductPagePrice/ProductPagePrice.tsx +10 -11
  83. package/components/ProductPagePrice/ProductPagePriceTiers.tsx +5 -5
  84. package/components/ProductPagePrice/getProductTierPrice.ts +2 -2
  85. package/components/ProductPagePrice/useCustomizableOptionPrice.ts +7 -6
  86. package/components/ProductScroller/ProductScroller.tsx +11 -16
  87. package/components/ProductShortDescription/ProductShortDescription.tsx +3 -2
  88. package/components/ProductSidebarDelivery/ProductSidebarDelivery.tsx +4 -4
  89. package/components/ProductSpecs/ProductSpecs.tsx +5 -4
  90. package/components/ProductSpecs/ProductSpecsAggregations.tsx +2 -2
  91. package/components/ProductSpecs/ProductSpecsCustomAttributes.tsx +3 -3
  92. package/components/ProductStaticPaths/getProductStaticPaths.ts +4 -3
  93. package/components/ProductStaticPaths/getSitemapPaths.ts +3 -2
  94. package/components/ProductWeight/ProductWeight.tsx +5 -7
  95. package/components/index.ts +5 -0
  96. package/context/productListParamsContext.ts +1 -1
  97. package/hooks/useProductLink.ts +6 -2
  98. package/hooks/useProductList.ts +14 -17
  99. package/hooks/useProductListLink.ts +7 -5
  100. package/hooks/useProductListLinkReplace.ts +1 -1
  101. package/package.json +15 -15
  102. package/test/productURL.fixture.ts +1 -1
  103. package/tsconfig.json +1 -1
  104. package/components/ProductAddToCart/ProductAddToCart.tsx +0 -139
  105. package/components/ProductPageGallery/ProductImage.tsx +0 -10
  106. package/components/ProductPageGallery/ProductVideo.tsx +0 -10
@@ -1,14 +1,13 @@
1
1
  import { useWatch } from '@graphcommerce/ecommerce-ui'
2
- import { InContextMask } from '@graphcommerce/graphql'
2
+ import { PrivateQueryMask } from '@graphcommerce/graphql'
3
3
  import { Money } from '@graphcommerce/magento-store'
4
4
  import { extendableComponent } from '@graphcommerce/next-ui'
5
- import { AddToCartItemSelector, useFormAddProductsToCart } from '../AddProductsToCart'
6
- import { ProductPagePriceFragment } from './ProductPagePrice.gql'
5
+ import type { AddToCartItemSelector } from '../AddProductsToCart'
6
+ import { useFormAddProductsToCart } from '../AddProductsToCart'
7
7
  import { getProductTierPrice } from './getProductTierPrice'
8
- import {
9
- UseCustomizableOptionPriceProps,
10
- useCustomizableOptionPrice,
11
- } from './useCustomizableOptionPrice'
8
+ import type { ProductPagePriceFragment } from './ProductPagePrice.gql'
9
+ import type { UseCustomizableOptionPriceProps } from './useCustomizableOptionPrice'
10
+ import { useCustomizableOptionPrice } from './useCustomizableOptionPrice'
12
11
 
13
12
  export type ProductPagePriceProps = { product: ProductPagePriceFragment } & AddToCartItemSelector &
14
13
  UseCustomizableOptionPriceProps
@@ -32,22 +31,22 @@ export function ProductPagePrice(props: ProductPagePriceProps) {
32
31
  return (
33
32
  <>
34
33
  {regularPrice.value !== price.value && (
35
- <InContextMask
34
+ <PrivateQueryMask
36
35
  component='span'
37
36
  className={classes.discountPrice}
38
37
  skeleton={{ variant: 'text', sx: { width: '3em', transform: 'none' } }}
39
38
  sx={[{ textDecoration: 'line-through', color: 'text.disabled', marginRight: '8px' }]}
40
39
  >
41
40
  <Money {...regularPrice} />
42
- </InContextMask>
41
+ </PrivateQueryMask>
43
42
  )}
44
- <InContextMask
43
+ <PrivateQueryMask
45
44
  component='span'
46
45
  skeleton={{ variant: 'text', sx: { width: '3em', transform: 'none' } }}
47
46
  className={classes.finalPrice}
48
47
  >
49
48
  <Money {...price} value={priceValue} />
50
- </InContextMask>
49
+ </PrivateQueryMask>
51
50
  </>
52
51
  )
53
52
  }
@@ -1,9 +1,9 @@
1
- import { InContextMask } from '@graphcommerce/graphql'
1
+ import { PrivateQueryMask } from '@graphcommerce/graphql'
2
2
  import { Money } from '@graphcommerce/magento-store'
3
3
  import { filterNonNullableKeys } from '@graphcommerce/next-ui'
4
4
  import { Trans } from '@lingui/react'
5
- import { SxProps, Theme } from '@mui/material'
6
- import { ProductPagePriceFragment } from './ProductPagePrice.gql'
5
+ import type { SxProps, Theme } from '@mui/material'
6
+ import type { ProductPagePriceFragment } from './ProductPagePrice.gql'
7
7
 
8
8
  export type ProductPagePriceTiersProps = {
9
9
  sx?: SxProps<Theme>
@@ -22,7 +22,7 @@ export function ProductPagePriceTiers(props: ProductPagePriceTiersProps) {
22
22
  if (!priceTiers.length) return null
23
23
 
24
24
  return (
25
- <InContextMask sx={sx} variant='rectangular'>
25
+ <PrivateQueryMask sx={sx} variant='rectangular'>
26
26
  {priceTiers.map(({ quantity, final_price, discount }) => (
27
27
  <div key={quantity}>
28
28
  <Trans
@@ -32,6 +32,6 @@ export function ProductPagePriceTiers(props: ProductPagePriceTiersProps) {
32
32
  />
33
33
  </div>
34
34
  ))}
35
- </InContextMask>
35
+ </PrivateQueryMask>
36
36
  )
37
37
  }
@@ -1,5 +1,5 @@
1
- import { MoneyFragment } from '@graphcommerce/magento-store'
2
- import { ProductPagePriceFragment } from './ProductPagePrice.gql'
1
+ import type { MoneyFragment } from '@graphcommerce/magento-store'
2
+ import type { ProductPagePriceFragment } from './ProductPagePrice.gql'
3
3
 
4
4
  export function getProductTierPrice(
5
5
  price: Pick<ProductPagePriceFragment, 'price_tiers'>,
@@ -1,15 +1,16 @@
1
1
  import { useWatch } from '@graphcommerce/ecommerce-ui'
2
- import { MoneyFragment } from '@graphcommerce/magento-store'
2
+ import type { MoneyFragment } from '@graphcommerce/magento-store'
3
3
  import { filterNonNullableKeys, isTypename, nonNullable } from '@graphcommerce/next-ui'
4
- import { AddToCartItemSelector, useFormAddProductsToCart } from '../AddProductsToCart'
5
- import {
6
- productCustomizableSelectors,
4
+ import type { AddToCartItemSelector } from '../AddProductsToCart'
5
+ import { useFormAddProductsToCart } from '../AddProductsToCart'
6
+ import type {
7
+ AnyOption,
7
8
  CustomizableProductOptionBase,
8
9
  OptionValueSelector,
9
- AnyOption,
10
10
  SelectorsProp,
11
11
  } from '../ProductCustomizable/productCustomizableSelectors'
12
- import { ProductPagePriceFragment } from './ProductPagePrice.gql'
12
+ import { productCustomizableSelectors } from '../ProductCustomizable/productCustomizableSelectors'
13
+ import type { ProductPagePriceFragment } from './ProductPagePrice.gql'
13
14
  import { getProductTierPrice } from './getProductTierPrice'
14
15
 
15
16
  export type UseCustomizableOptionPriceProps = {
@@ -1,18 +1,11 @@
1
- import { ItemScroller, ItemScrollerProps, RenderType, responsiveVal } from '@graphcommerce/next-ui'
2
- import {
3
- Box,
4
- Container,
5
- ContainerProps,
6
- SxProps,
7
- Theme,
8
- Typography,
9
- TypographyProps,
10
- useTheme,
11
- } from '@mui/material'
1
+ import type { ItemScrollerProps } from '@graphcommerce/next-ui'
2
+ import { ItemScroller, RenderType, responsiveVal } from '@graphcommerce/next-ui'
3
+ import type { ContainerProps, SxProps, Theme, TypographyProps } from '@mui/material'
4
+ import { Box, Container, Typography, useTheme } from '@mui/material'
12
5
  import React, { forwardRef, useContext } from 'react'
13
6
  import { AddProductsToCartContext, AddProductsToCartForm } from '../AddProductsToCart'
14
- import { ProductListItemProps } from '../ProductListItem/ProductListItem'
15
- import { ProductListItemRenderer, ProductListItemType } from '../ProductListItems/renderer'
7
+ import type { ProductListItemProps } from '../ProductListItem/ProductListItem'
8
+ import type { ProductListItemRenderer, ProductListItemType } from '../ProductListItems/renderer'
16
9
 
17
10
  export type ProductScrollerProps = {
18
11
  title?: React.ReactNode
@@ -22,7 +15,8 @@ export type ProductScrollerProps = {
22
15
  sx?: SxProps<Theme>
23
16
  containerProps?: ContainerProps
24
17
  titleProps?: TypographyProps
25
- itemScrollerProps?: ItemScrollerProps
18
+ itemScrollerProps?: Omit<ItemScrollerProps, 'children'>
19
+ sizes?: string
26
20
  }
27
21
  export const ProductScroller = forwardRef<HTMLDivElement, ProductScrollerProps>(
28
22
  (props: ProductScrollerProps, ref) => {
@@ -35,13 +29,14 @@ export const ProductScroller = forwardRef<HTMLDivElement, ProductScrollerProps>(
35
29
  containerProps,
36
30
  titleProps,
37
31
  itemScrollerProps,
32
+ sizes = responsiveVal(200, 300),
38
33
  } = props
39
34
 
40
35
  const theme = useTheme()
41
36
 
42
37
  const Wrapper = useContext(AddProductsToCartContext) ? React.Fragment : AddProductsToCartForm
43
38
 
44
- if (!items) return null
39
+ if (!items || !items.length) return null
45
40
 
46
41
  return (
47
42
  <Box sx={sx} ref={ref}>
@@ -61,7 +56,7 @@ export const ProductScroller = forwardRef<HTMLDivElement, ProductScrollerProps>(
61
56
  renderer={productListRenderer}
62
57
  {...item}
63
58
  imageOnly={imageOnly}
64
- sizes={responsiveVal(200, 300)}
59
+ sizes={sizes}
65
60
  />
66
61
  ))}
67
62
  </ItemScroller>
@@ -1,6 +1,7 @@
1
1
  import { extendableComponent } from '@graphcommerce/next-ui'
2
- import { SxProps, Theme, Typography } from '@mui/material'
3
- import { ProductShortDescriptionFragment } from './ProductShortDescription.gql'
2
+ import type { SxProps, Theme } from '@mui/material'
3
+ import { Typography } from '@mui/material'
4
+ import type { ProductShortDescriptionFragment } from './ProductShortDescription.gql'
4
5
 
5
6
  export type ProductShortDescriptionProps = {
6
7
  product: ProductShortDescriptionFragment
@@ -1,9 +1,9 @@
1
- import { breakpointVal, iconOrderBefore, IconSvg } from '@graphcommerce/next-ui'
1
+ import { IconSvg, breakpointVal, iconOrderBefore } from '@graphcommerce/next-ui'
2
2
  import { Trans } from '@lingui/react'
3
3
  import { Box, darken, lighten } from '@mui/material'
4
- import { UseAddProductsToCartActionFragment } from '../AddProductsToCart/UseAddProductsToCartAction.gql'
4
+ import type { UseAddProductsToCartActionFragment } from '../AddProductsToCart/UseAddProductsToCartAction.gql'
5
5
 
6
- type ProductSidebarDeliveryProps = {
6
+ export type ProductSidebarDeliveryProps = {
7
7
  product?: UseAddProductsToCartActionFragment
8
8
  }
9
9
 
@@ -39,7 +39,7 @@ export function ProductSidebarDelivery(props: ProductSidebarDeliveryProps) {
39
39
  "image title"
40
40
  ". subtitle"
41
41
  `,
42
- gridTemplateColumns: `min-content auto`,
42
+ gridTemplateColumns: 'min-content auto',
43
43
  columnGap: theme.spacings.xxs,
44
44
  background:
45
45
  theme.palette.mode === 'light'
@@ -1,6 +1,7 @@
1
- import { responsiveVal, Row, SectionContainer, extendableComponent } from '@graphcommerce/next-ui'
2
- import { Box, SxProps, Theme } from '@mui/material'
3
- import { ProductSpecsFragment } from './ProductSpecs.gql'
1
+ import { Row, SectionContainer, extendableComponent, responsiveVal } from '@graphcommerce/next-ui'
2
+ import type { SxProps, Theme } from '@mui/material'
3
+ import { Box } from '@mui/material'
4
+ import type { ProductSpecsFragment } from './ProductSpecs.gql'
4
5
  import { ProductSpecsAggregations } from './ProductSpecsAggregations'
5
6
  import { ProductSpecsCustomAttributes } from './ProductSpecsCustomAttributes'
6
7
 
@@ -10,7 +11,7 @@ export type ProductSpecsProps = ProductSpecsFragment & {
10
11
  children?: React.ReactNode
11
12
  }
12
13
 
13
- const name = 'ProductSpecs' as const
14
+ const name = 'ProductSpecs'
14
15
  const parts = ['root', 'specs', 'options'] as const
15
16
  const { classes } = extendableComponent(name, parts)
16
17
 
@@ -1,8 +1,8 @@
1
1
  import { extendableComponent } from '@graphcommerce/next-ui'
2
2
  import { Box } from '@mui/material'
3
- import { ProductSpecsFragment } from './ProductSpecs.gql'
3
+ import type { ProductSpecsFragment } from './ProductSpecs.gql'
4
4
 
5
- const name = 'ProductSpecs' as const
5
+ const name = 'ProductSpecs'
6
6
  const parts = ['root', 'specs', 'options'] as const
7
7
  const { classes } = extendableComponent(name, parts)
8
8
 
@@ -1,10 +1,10 @@
1
1
  import { useQuery } from '@graphcommerce/graphql'
2
- import { extendableComponent, ListFormat } from '@graphcommerce/next-ui'
2
+ import { ListFormat, extendableComponent } from '@graphcommerce/next-ui'
3
3
  import { Box } from '@mui/material'
4
- import { ProductSpecsFragment } from './ProductSpecs.gql'
4
+ import type { ProductSpecsFragment } from './ProductSpecs.gql'
5
5
  import { ProductSpecsTypesDocument } from './ProductSpecsTypes.gql'
6
6
 
7
- const name = 'ProductSpecs' as const
7
+ const name = 'ProductSpecs'
8
8
  const parts = ['root', 'specs', 'options'] as const
9
9
  const { classes } = extendableComponent(name, parts)
10
10
 
@@ -1,6 +1,7 @@
1
- import { ApolloClient, ApolloQueryResult, NormalizedCacheObject } from '@graphcommerce/graphql'
2
- import { GetStaticPathsResult } from 'next'
3
- import { ProductStaticPathsDocument, ProductStaticPathsQuery } from './ProductStaticPaths.gql'
1
+ import type { ApolloClient, ApolloQueryResult, NormalizedCacheObject } from '@graphcommerce/graphql'
2
+ import type { GetStaticPathsResult } from 'next'
3
+ import type { ProductStaticPathsQuery } from './ProductStaticPaths.gql'
4
+ import { ProductStaticPathsDocument } from './ProductStaticPaths.gql'
4
5
 
5
6
  type Return = GetStaticPathsResult<{ url: string }>
6
7
 
@@ -1,10 +1,11 @@
1
- import { ApolloClient, NormalizedCacheObject } from '@graphcommerce/graphql'
1
+ import type { ApolloClient, NormalizedCacheObject } from '@graphcommerce/graphql'
2
2
  import { canonicalize, nonNullable } from '@graphcommerce/next-ui'
3
3
  import { productLink } from '../../hooks/useProductLink'
4
4
  import { ProductStaticPathsDocument } from './ProductStaticPaths.gql'
5
5
 
6
6
  /**
7
7
  * @deprecated Not used anymore, use `getProductStaticPaths` instead.
8
+ * @public
8
9
  */
9
10
  export async function getSitemapPaths(
10
11
  client: ApolloClient<NormalizedCacheObject>,
@@ -24,7 +25,7 @@ export async function getSitemapPaths(
24
25
 
25
26
  const options = { locale, defaultLocale, pathname: '/', isLocaleDomain: false }
26
27
  const lastmod = new Date().toISOString()
27
- const changefreq = 'daily' as const
28
+ const changefreq = 'daily'
28
29
  const priority = 0.7
29
30
 
30
31
  const paths = (await Promise.all(result))
@@ -1,10 +1,12 @@
1
1
  import { useQuery } from '@graphcommerce/graphql'
2
2
  import { StoreConfigDocument } from '@graphcommerce/magento-store'
3
- import { UnitFormat, UnitFormatProps } from '@graphcommerce/next-ui'
4
- import { ProductWeightFragment } from './ProductWeight.gql'
3
+ import type { UnitFormatProps } from '@graphcommerce/next-ui'
4
+ import { UnitFormat } from '@graphcommerce/next-ui'
5
+ import type { ProductWeightFragment } from './ProductWeight.gql'
5
6
 
6
7
  export type ProductWeightProps = Omit<UnitFormatProps, 'unit'> & { product: ProductWeightFragment }
7
8
 
9
+ /** @public */
8
10
  export function ProductWeight(props: ProductWeightProps) {
9
11
  const { product, ...rest } = props
10
12
 
@@ -14,9 +16,5 @@ export function ProductWeight(props: ProductWeightProps) {
14
16
 
15
17
  const unit = conf?.storeConfig?.weight_unit === 'lbs' ? 'pound' : 'kilogram'
16
18
 
17
- return (
18
- <UnitFormat unit={unit} {...rest}>
19
- {product.weight}
20
- </UnitFormat>
21
- )
19
+ return <UnitFormat unit={unit} {...rest} value={product.weight} />
22
20
  }
@@ -8,6 +8,10 @@ export * from './ProductListCount/ProductListCount'
8
8
  export * from './ProductListFilters'
9
9
  export * from './ProductListFiltersContainer/ProductListFiltersContainer'
10
10
  export * from './ProductListItem/ProductListItem'
11
+ export * from './ProductListItem/ProductListItemImage'
12
+ export * from './ProductListItem/ProductListItemTitleAndPrice'
13
+ export * from './ProductListItem/ProductListItemImageContainer'
14
+ export * from './ProductListItem/ProductListItemLinkOrDiv'
11
15
  export * from './ProductListItems/filteredProductList'
12
16
  export * from './ProductListItems/filterTypes'
13
17
  export * from './ProductListItems/getFilterTypes'
@@ -43,3 +47,4 @@ export * from './ProductWeight/ProductWeight'
43
47
  export * from './ProductListPrice'
44
48
  export * from './ProductListSuggestions/ProductListSuggestions'
45
49
  export * from './ProductListSuggestions/ProductListSuggestions.gql'
50
+ export * from './ProductListSuggestions/ProductListSearchSuggestion.gql'
@@ -1,5 +1,5 @@
1
1
  import React from 'react'
2
- import { ProductListParams } from '../components/ProductListItems/filterTypes'
2
+ import type { ProductListParams } from '../components/ProductListItems/filterTypes'
3
3
 
4
4
  export const productListParamsContext = React.createContext<{
5
5
  params: ProductListParams
@@ -1,8 +1,12 @@
1
- import { ProductLinkFragment } from './ProductLink.gql'
1
+ import type { ProductLinkFragment } from './ProductLink.gql'
2
2
 
3
3
  export type ProductLinkProps = Omit<ProductLinkFragment, 'uid'>
4
4
 
5
- export const productRoute = import.meta.graphCommerce.productRoute ?? '/p/'
5
+ const productRoute = import.meta.graphCommerce.productRoute ?? '/p/'
6
+
7
+ export function productPath(urlKey: string) {
8
+ return `${productRoute}${urlKey}`
9
+ }
6
10
 
7
11
  export function productLink(link: ProductLinkProps) {
8
12
  return `${productRoute}${link.url_key}`
@@ -1,30 +1,27 @@
1
1
  import { debounce } from '@graphcommerce/ecommerce-ui'
2
- import {
3
- ApolloClient,
4
- useQuery,
5
- useInContextQuery,
6
- getInContextInput,
7
- } from '@graphcommerce/graphql'
2
+ import type { ApolloClient } from '@graphcommerce/graphql'
3
+ import { getPrivateQueryContext, usePrivateQuery, useQuery } from '@graphcommerce/graphql'
8
4
  import { StoreConfigDocument } from '@graphcommerce/magento-store'
9
5
  import { showPageLoadIndicator } from '@graphcommerce/next-ui'
10
6
  import { useEventCallback } from '@mui/material'
11
- import {
7
+ import type {
12
8
  FilterFormProviderProps,
13
- ProductFiltersDocument,
14
9
  ProductFiltersQuery,
15
10
  ProductFiltersQueryVariables,
16
11
  } from '../components'
17
- import {
18
- ProductListDocument,
12
+ import { ProductFiltersDocument } from '../components'
13
+ import type {
19
14
  ProductListQuery,
20
15
  ProductListQueryVariables,
21
16
  } from '../components/ProductList/ProductList.gql'
22
- import { CategoryDefaultFragment } from '../components/ProductListItems/CategoryDefault.gql'
23
- import { ProductListParams, toProductListParams } from '../components/ProductListItems/filterTypes'
17
+ import { ProductListDocument } from '../components/ProductList/ProductList.gql'
18
+ import type { CategoryDefaultFragment } from '../components/ProductListItems/CategoryDefault.gql'
19
+ import type { ProductListParams } from '../components/ProductListItems/filterTypes'
20
+ import { toProductListParams } from '../components/ProductListItems/filterTypes'
24
21
  import { useRouterFilterParams } from '../components/ProductListItems/filteredProductList'
25
22
  import {
26
- productListApplyCategoryDefaults,
27
23
  categoryDefaultsToProductListFilters,
24
+ productListApplyCategoryDefaults,
28
25
  useProductListApplyCategoryDefaults,
29
26
  } from '../components/ProductListItems/productListApplyCategoryDefaults'
30
27
 
@@ -37,14 +34,14 @@ export const prefetchProductList = debounce(
37
34
  variables: ProductListQueryVariables,
38
35
  filtersVariables: ProductFiltersQueryVariables,
39
36
  next: Next,
40
- client: ApolloClient<any>,
37
+ client: ApolloClient<unknown>,
41
38
  shallow: boolean,
42
39
  ) => {
43
40
  if (!shallow) return next(shallow)
44
41
 
45
42
  showPageLoadIndicator.set(true)
46
43
 
47
- const context = getInContextInput(client)
44
+ const context = getPrivateQueryContext(client)
48
45
  const productList = client.query({
49
46
  query: ProductListDocument,
50
47
  variables: { ...variables, context },
@@ -106,8 +103,8 @@ export function useProductList<
106
103
  const { params, shallow } = useRouterFilterParams(props)
107
104
  const variables = useProductListApplyCategoryDefaults(params, category)
108
105
 
109
- const result = useInContextQuery(ProductListDocument, { variables, skip: !shallow }, props)
110
- const filters = useInContextQuery(
106
+ const result = usePrivateQuery(ProductListDocument, { variables, skip: !shallow }, props)
107
+ const filters = usePrivateQuery(
111
108
  ProductFiltersDocument,
112
109
  { variables: categoryDefaultsToProductListFilters(variables), skip: !shallow },
113
110
  props,
@@ -1,9 +1,11 @@
1
+ import type {
2
+ ProductFilterParams,
3
+ ProductListParams,
4
+ } from '../components/ProductListItems/filterTypes'
1
5
  import {
2
6
  isFilterTypeEqual,
3
7
  isFilterTypeMatch,
4
8
  isFilterTypeRange,
5
- ProductFilterParams,
6
- ProductListParams,
7
9
  toFilterParams,
8
10
  } from '../components/ProductListItems/filterTypes'
9
11
 
@@ -17,15 +19,15 @@ export function productListLinkFromFilter(props: ProductFilterParams): string {
17
19
  if (isSearch) urlBase = search ? `search/${search}` : 'search'
18
20
 
19
21
  // base url path generation
20
- let paginateSort = ``
21
- let query = ``
22
+ let paginateSort = ''
23
+ let query = ''
22
24
 
23
25
  if (currentPage && currentPage > 1) paginateSort += `/page/${currentPage}`
24
26
 
25
27
  // todo(paales): How should the URL look like with multiple sorts?
26
28
  // Something like: /sort/position,price/dir/asc,asc
27
29
  if (sort) query += `/sort/${sort}`
28
- if (dir) query += `/dir/desc`
30
+ if (dir) query += '/dir/desc'
29
31
  if (pageSize) query += `/page-size/${pageSize}`
30
32
 
31
33
  // Apply filters
@@ -1,5 +1,5 @@
1
1
  import { useRouter } from 'next/router'
2
- import { ProductListParams } from '../components/ProductListItems/filterTypes'
2
+ import type { ProductListParams } from '../components/ProductListItems/filterTypes'
3
3
  import { productListLink } from './useProductListLink'
4
4
  import { useProductListParamsContext } from './useProductListParamsContext'
5
5
 
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@graphcommerce/magento-product",
3
3
  "homepage": "https://www.graphcommerce.org/",
4
4
  "repository": "github:graphcommerce-org/graphcommerce",
5
- "version": "9.0.0-canary.99",
5
+ "version": "9.0.1-canary.0",
6
6
  "sideEffects": false,
7
7
  "prettier": "@graphcommerce/prettier-config-pwa",
8
8
  "eslintConfig": {
@@ -15,26 +15,26 @@
15
15
  "schema-dts": "^1.1.2"
16
16
  },
17
17
  "devDependencies": {
18
- "typescript": "5.5.3"
18
+ "typescript": "5.7.2"
19
19
  },
20
20
  "peerDependencies": {
21
- "@graphcommerce/ecommerce-ui": "^9.0.0-canary.99",
22
- "@graphcommerce/eslint-config-pwa": "^9.0.0-canary.99",
23
- "@graphcommerce/framer-next-pages": "^9.0.0-canary.99",
24
- "@graphcommerce/framer-scroller": "^9.0.0-canary.99",
25
- "@graphcommerce/graphql": "^9.0.0-canary.99",
26
- "@graphcommerce/graphql-mesh": "^9.0.0-canary.99",
27
- "@graphcommerce/image": "^9.0.0-canary.99",
28
- "@graphcommerce/magento-cart": "^9.0.0-canary.99",
29
- "@graphcommerce/magento-store": "^9.0.0-canary.99",
30
- "@graphcommerce/next-ui": "^9.0.0-canary.99",
31
- "@graphcommerce/prettier-config-pwa": "^9.0.0-canary.99",
32
- "@graphcommerce/typescript-config-pwa": "^9.0.0-canary.99",
21
+ "@graphcommerce/ecommerce-ui": "^9.0.1-canary.0",
22
+ "@graphcommerce/eslint-config-pwa": "^9.0.1-canary.0",
23
+ "@graphcommerce/framer-next-pages": "^9.0.1-canary.0",
24
+ "@graphcommerce/framer-scroller": "^9.0.1-canary.0",
25
+ "@graphcommerce/graphql": "^9.0.1-canary.0",
26
+ "@graphcommerce/graphql-mesh": "^9.0.1-canary.0",
27
+ "@graphcommerce/image": "^9.0.1-canary.0",
28
+ "@graphcommerce/magento-cart": "^9.0.1-canary.0",
29
+ "@graphcommerce/magento-store": "^9.0.1-canary.0",
30
+ "@graphcommerce/next-ui": "^9.0.1-canary.0",
31
+ "@graphcommerce/prettier-config-pwa": "^9.0.1-canary.0",
32
+ "@graphcommerce/typescript-config-pwa": "^9.0.1-canary.0",
33
33
  "@lingui/core": "^4.2.1",
34
34
  "@lingui/macro": "^4.2.1",
35
35
  "@lingui/react": "^4.2.1",
36
36
  "@mui/material": "^5.10.16",
37
- "framer-motion": "^10.0.0",
37
+ "framer-motion": "^11.0.0",
38
38
  "next": "*",
39
39
  "react": "^18.2.0",
40
40
  "react-dom": "^18.2.0"
@@ -1,7 +1,7 @@
1
1
  /* eslint-disable @typescript-eslint/no-non-null-assertion */
2
2
  import { test as base } from '@graphcommerce/magento-store/test/apolloClientStore.fixture'
3
3
  import { ProductStaticPathsDocument } from '../components/ProductStaticPaths/ProductStaticPaths.gql'
4
- import { ProductTypenames } from '../components/ProductStaticPaths/getProductStaticPaths'
4
+ import type { ProductTypenames } from '../components/ProductStaticPaths/getProductStaticPaths'
5
5
  import { productLink } from '../hooks/useProductLink'
6
6
 
7
7
  type ProductUrls = {
package/tsconfig.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "exclude": ["**/node_modules", "**/.*/"],
3
3
  "include": ["**/*.ts", "**/*.tsx"],
4
- "extends": "@graphcommerce/typescript-config-pwa/nextjs.json",
4
+ "extends": "@graphcommerce/typescript-config-pwa/nextjs.json"
5
5
  }