@evenicanpm/storefront-core 1.2.2 → 1.4.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 (449) hide show
  1. package/.storybook/main.ts +1 -1
  2. package/.storybook/preview.tsx +5 -4
  3. package/__mocks__/countries.ts +1 -1
  4. package/__mocks__/create-query.ts +3 -2
  5. package/__mocks__/get-product-by-id.ts +0 -1
  6. package/__mocks__/query-client.ts +1 -1
  7. package/package.json +10 -2
  8. package/src/api-manager/datasources/d365/d365-address.datasource.ts +15 -13
  9. package/src/api-manager/datasources/d365/d365-base.datasource.ts +1 -1
  10. package/src/api-manager/datasources/d365/d365-cart.datasource.ts +41 -42
  11. package/src/api-manager/datasources/d365/d365-categories.datasource.ts +4 -4
  12. package/src/api-manager/datasources/d365/d365-order.datasource.ts +10 -9
  13. package/src/api-manager/datasources/d365/d365-organization.datasource.ts +10 -10
  14. package/src/api-manager/datasources/d365/d365-product.datasource.ts +49 -36
  15. package/src/api-manager/datasources/d365/d365-session.datasource.ts +7 -9
  16. package/src/api-manager/datasources/d365/d365-user.datasource.ts +34 -43
  17. package/src/api-manager/datasources/d365/d365.datasource.ts +15 -17
  18. package/src/api-manager/datasources/d365/index.ts +2 -4
  19. package/src/api-manager/datasources/d365/test-context.ts +1 -1
  20. package/src/api-manager/datasources/d365/utils/create-search-criteria.ts +1 -1
  21. package/src/api-manager/datasources/d365/utils/decode-jwt.ts +1 -2
  22. package/src/api-manager/datasources/d365/utils/get-context-cookie.ts +3 -3
  23. package/src/api-manager/datasources/d365/utils/parse-object.ts +1 -1
  24. package/src/api-manager/datasources/d365/utils/product-images-utils.ts +29 -10
  25. package/src/api-manager/datasources/d365/utils/product-inventory-utils.ts +1 -1
  26. package/src/api-manager/datasources/e4/address/e4-address.datasource.ts +5 -5
  27. package/src/api-manager/datasources/e4/address/e4-address.remaps.ts +4 -4
  28. package/src/api-manager/datasources/e4/address/e4-address.translator.ts +9 -9
  29. package/src/api-manager/datasources/e4/cart/e4-cart.datasource.ts +37 -37
  30. package/src/api-manager/datasources/e4/cart/e4-cart.remaps.ts +10 -9
  31. package/src/api-manager/datasources/e4/cart/e4-cart.translator.ts +4 -4
  32. package/src/api-manager/datasources/e4/categories/e4-categories.datasource.ts +4 -4
  33. package/src/api-manager/datasources/e4/categories/e4-categories.translator.ts +24 -24
  34. package/src/api-manager/datasources/e4/e4.datasource.ts +7 -7
  35. package/src/api-manager/datasources/e4/graphqlRequestSdk.ts +8103 -41393
  36. package/src/api-manager/datasources/e4/order/e4-order.datasource.ts +7 -7
  37. package/src/api-manager/datasources/e4/order/e4-order.remaps.ts +8 -7
  38. package/src/api-manager/datasources/e4/organization/e4-organization.datasource.ts +4 -9
  39. package/src/api-manager/datasources/e4/product/e4-product.datasource.ts +12 -11
  40. package/src/api-manager/datasources/e4/product/e4-product.remaps.ts +4 -4
  41. package/src/api-manager/datasources/e4/product/e4-product.translator.ts +27 -43
  42. package/src/api-manager/datasources/e4/session/e4-session.datasource.ts +3 -5
  43. package/src/api-manager/datasources/e4/session/e4-session.translator.ts +2 -2
  44. package/src/api-manager/datasources/e4/user/e4-user.datasource.ts +10 -10
  45. package/src/api-manager/datasources/e4/user/e4-user.remaps.ts +6 -8
  46. package/src/api-manager/datasources/e4/user/e4-user.translator.ts +6 -4
  47. package/src/api-manager/datasources/e4/utils/unwrap-e4-variants.ts +6 -6
  48. package/src/api-manager/index.ts +8 -8
  49. package/src/api-manager/lib/category-helpers.ts +4 -3
  50. package/src/api-manager/lib/get-dynamics-context.ts +1 -1
  51. package/src/api-manager/lib/get-graphql-client.ts +4 -6
  52. package/src/api-manager/schemas/address.schema.ts +1 -1
  53. package/src/api-manager/schemas/cart.schema.ts +1 -1
  54. package/src/api-manager/schemas/d365.schema.ts +207 -206
  55. package/src/api-manager/schemas/order.schema.ts +1 -1
  56. package/src/api-manager/schemas/organization.schema.ts +1 -1
  57. package/src/api-manager/schemas/product.schema.ts +4 -4
  58. package/src/api-manager/schemas/session.schema.ts +1 -1
  59. package/src/api-manager/schemas/user.schema.ts +1 -1
  60. package/src/api-manager/services/address/mutations/create-address.ts +3 -3
  61. package/src/api-manager/services/address/mutations/delete-address.ts +2 -2
  62. package/src/api-manager/services/address/mutations/get-delivery-options.ts +4 -4
  63. package/src/api-manager/services/address/mutations/update-address.ts +3 -3
  64. package/src/api-manager/services/address/queries/get-countries.ts +6 -4
  65. package/src/api-manager/services/address/queries/get-states.ts +3 -3
  66. package/src/api-manager/services/cart/mutations/add-discount-code.ts +6 -6
  67. package/src/api-manager/services/cart/mutations/add-to-cart.ts +6 -6
  68. package/src/api-manager/services/cart/mutations/checkout.ts +2 -2
  69. package/src/api-manager/services/cart/mutations/delete-cart-line.ts +2 -2
  70. package/src/api-manager/services/cart/mutations/get-payment-accept-result.ts +4 -4
  71. package/src/api-manager/services/cart/mutations/remove-cart-line-delivery-mode.ts +3 -3
  72. package/src/api-manager/services/cart/mutations/remove-discount-code.ts +2 -2
  73. package/src/api-manager/services/cart/mutations/update-cart-line-delivery-mode.ts +2 -2
  74. package/src/api-manager/services/cart/mutations/update-cart-lines.ts +3 -3
  75. package/src/api-manager/services/cart/mutations/update-cart.ts +2 -2
  76. package/src/api-manager/services/cart/queries/get-cart-lines-inventory.ts +2 -2
  77. package/src/api-manager/services/cart/queries/get-cart.ts +5 -3
  78. package/src/api-manager/services/cart/queries/get-payment-accept-point.ts +3 -3
  79. package/src/api-manager/services/categories/queries/get-categories.ts +1 -1
  80. package/src/api-manager/services/create-extension-query.ts +1 -1
  81. package/src/api-manager/services/create-mutation.ts +2 -2
  82. package/src/api-manager/services/create-query.ts +6 -6
  83. package/src/api-manager/services/get-query-client.ts +2 -2
  84. package/src/api-manager/services/order/queries/get-order-details.ts +2 -2
  85. package/src/api-manager/services/order/queries/get-orders.ts +1 -1
  86. package/src/api-manager/services/organization/queries/get-channel-configuration.ts +1 -1
  87. package/src/api-manager/services/organization/queries/get-stores.ts +1 -1
  88. package/src/api-manager/services/product/mutations/search-products.ts +3 -4
  89. package/src/api-manager/services/product/queries/get-product-availability.ts +2 -2
  90. package/src/api-manager/services/product/queries/get-product-by-id.ts +1 -1
  91. package/src/api-manager/services/product/queries/get-product-by-ids.ts +2 -2
  92. package/src/api-manager/services/product/queries/get-product-list.ts +1 -1
  93. package/src/api-manager/services/product/queries/get-product-prices.ts +2 -2
  94. package/src/api-manager/services/product/queries/get-related-products.ts +2 -2
  95. package/src/api-manager/services/product/queries/search-products.ts +2 -2
  96. package/src/api-manager/services/product/server/product.server.ts +4 -4
  97. package/src/api-manager/services/session/mutations/session-init.ts +2 -2
  98. package/src/api-manager/services/session/mutations/session-logout.ts +1 -1
  99. package/src/api-manager/services/session/queries/get-session.ts +1 -1
  100. package/src/api-manager/services/user/mutations/add-to-wishlist.ts +3 -3
  101. package/src/api-manager/services/user/mutations/copy-cart-to-wishlist.ts +3 -3
  102. package/src/api-manager/services/user/mutations/create-wishlist.ts +4 -4
  103. package/src/api-manager/services/user/mutations/delete-wishlist.ts +3 -3
  104. package/src/api-manager/services/user/mutations/remove-from-wishlist.ts +3 -3
  105. package/src/api-manager/services/user/mutations/update-user.ts +2 -2
  106. package/src/api-manager/services/user/mutations/update-wishlist.ts +2 -2
  107. package/src/api-manager/services/user/queries/get-user-counts.ts +1 -1
  108. package/src/api-manager/services/user/queries/get-user.ts +1 -1
  109. package/src/api-manager/services/user/queries/get-wishlist-details.ts +1 -1
  110. package/src/api-manager/services/user/queries/get-wishlists.ts +1 -1
  111. package/src/api-manager/types/Datasource.ts +23 -28
  112. package/src/auth/auth-options.test.ts +6 -63
  113. package/src/auth/auth-options.ts +6 -7
  114. package/src/auth/msal.ts +4 -1
  115. package/src/auth/next-auth-cookie-manager.ts +7 -8
  116. package/src/auth/refresh-token.ts +5 -7
  117. package/src/auth/signout.ts +1 -1
  118. package/src/cms/blocks/block-manager.tsx +13 -13
  119. package/src/cms/blocks/components/brand-logos-scroller.tsx +4 -4
  120. package/src/cms/blocks/components/category-card.tsx +3 -3
  121. package/src/cms/blocks/components/category-carousel/index.tsx +8 -10
  122. package/src/cms/blocks/components/feature-pill.tsx +5 -4
  123. package/src/cms/blocks/components/featured-categories.tsx +5 -2
  124. package/src/cms/blocks/components/featured-products.tsx +2 -2
  125. package/src/cms/blocks/components/footer/data/index.ts +6 -3
  126. package/src/cms/blocks/components/footer/index.tsx +9 -13
  127. package/src/cms/blocks/components/footer/sections/footer-app-store.tsx +2 -2
  128. package/src/cms/blocks/components/footer/sections/footer-contact.tsx +3 -3
  129. package/src/cms/blocks/components/footer/sections/footer-links.tsx +5 -5
  130. package/src/cms/blocks/components/footer/sections/footer-logo.tsx +4 -4
  131. package/src/cms/blocks/components/footer/sections/footer-social-links.tsx +19 -11
  132. package/src/cms/blocks/components/footer/styles/index.ts +1 -1
  133. package/src/cms/blocks/components/footer.tsx +4 -4
  134. package/src/cms/blocks/components/hero-carousel/index.tsx +32 -29
  135. package/src/cms/blocks/components/hero.tsx +4 -5
  136. package/src/cms/blocks/components/image.tsx +4 -5
  137. package/src/cms/blocks/components/media-card.tsx +3 -3
  138. package/src/cms/blocks/components/product-carousel/index.tsx +8 -9
  139. package/src/cms/blocks/components/product-section-fullwidth/index.tsx +18 -22
  140. package/src/cms/blocks/components/rich-text.tsx +2 -2
  141. package/src/cms/blocks/components/seo/index.tsx +7 -3
  142. package/src/cms/blocks/components/services/index.tsx +5 -5
  143. package/src/cms/blocks/components/services/service-card.tsx +8 -10
  144. package/src/cms/blocks/components/shared/featured-product-card.tsx +6 -3
  145. package/src/cms/blocks/components/shared/product-category-item.tsx +5 -6
  146. package/src/cms/blocks/components/shared/product-grid.tsx +9 -5
  147. package/src/cms/blocks/components/shared/top-categories-card.tsx +10 -7
  148. package/src/cms/blocks/components/shared/top-rating-product-card.tsx +4 -4
  149. package/src/cms/blocks/icons/components/category.tsx +3 -3
  150. package/src/cms/blocks/icons/components/dotted-star.tsx +1 -1
  151. package/src/cms/blocks/icons/components/fallback-icon.tsx +1 -1
  152. package/src/cms/blocks/icons/components/gift-box.tsx +1 -1
  153. package/src/cms/blocks/icons/components/light.tsx +1 -1
  154. package/src/cms/blocks/icons/components/new-arrival.tsx +1 -1
  155. package/src/cms/blocks/icons/components/rank-badge.tsx +1 -1
  156. package/src/cms/blocks/icons/index.ts +3 -3
  157. package/src/cms/blocks/index.tsx +6 -6
  158. package/src/cms/blog.ts +2 -2
  159. package/src/cms/endpoints.ts +1 -1
  160. package/src/components-v2/BazaarCard.stories.tsx +1 -1
  161. package/src/components-v2/BazaarCard.tsx +1 -1
  162. package/src/components-v2/BazaarImage.tsx +2 -2
  163. package/src/components-v2/BazaarMenu.stories.tsx +1 -1
  164. package/src/components-v2/BazaarMenu.tsx +4 -4
  165. package/src/components-v2/BazaarSwitch.tsx +1 -1
  166. package/src/components-v2/BazaarTextField.tsx +5 -5
  167. package/src/components-v2/BorderShadowCard.stories.tsx +2 -2
  168. package/src/components-v2/CountryInput.stories.tsx +2 -2
  169. package/src/components-v2/DropZone.stories.tsx +1 -1
  170. package/src/components-v2/DropZone.tsx +8 -9
  171. package/src/components-v2/HoverBox.stories.tsx +1 -1
  172. package/src/components-v2/ImageWithFallback.tsx +3 -2
  173. package/src/components-v2/LazyImage.tsx +10 -2
  174. package/src/components-v2/Loading.tsx +1 -2
  175. package/src/components-v2/SearchInput.stories.tsx +1 -1
  176. package/src/components-v2/SearchInput.tsx +2 -2
  177. package/src/components-v2/SnackbarProvider.tsx +1 -1
  178. package/src/components-v2/T/index.tsx +1 -1
  179. package/src/components-v2/Typography.stories.tsx +2 -2
  180. package/src/components-v2/Typography.tsx +13 -13
  181. package/src/components-v2/WhiteButton.tsx +2 -2
  182. package/src/components-v2/accordion/accordion-header.tsx +6 -6
  183. package/src/components-v2/carousel/Carousel.stories.tsx +1 -1
  184. package/src/components-v2/carousel/carousel.tsx +4 -4
  185. package/src/components-v2/carousel/components/carousel-arrows.tsx +4 -4
  186. package/src/components-v2/carousel/components/carousel-dots.tsx +2 -2
  187. package/src/components-v2/carousel-cards/carousel-card-1/carousel-card-1.tsx +4 -4
  188. package/src/components-v2/categories/Categories.stories.tsx +6 -5
  189. package/src/components-v2/categories/category-list/category-list.tsx +4 -5
  190. package/src/components-v2/categories/category-list/styles.ts +2 -9
  191. package/src/components-v2/categories/category-list-item/category-menu-item.tsx +6 -6
  192. package/src/components-v2/categories/category-menu.tsx +18 -15
  193. package/src/components-v2/categories/mega-menu/banner.tsx +4 -4
  194. package/src/components-v2/categories/mega-menu/column-list.tsx +6 -6
  195. package/src/components-v2/categories/mega-menu/mega-menu-1.tsx +8 -8
  196. package/src/components-v2/categories/mega-menu/mega-menu-2.tsx +5 -4
  197. package/src/components-v2/categories/types.ts +1 -1
  198. package/src/components-v2/countries-input.tsx +2 -2
  199. package/src/components-v2/flex-box/Flex.stories.tsx +1 -1
  200. package/src/components-v2/flex-box/flex-between.tsx +1 -1
  201. package/src/components-v2/flex-box/flex-box.tsx +1 -1
  202. package/src/components-v2/flex-box/flex-row-center.tsx +1 -1
  203. package/src/components-v2/flex-box/index.ts +1 -1
  204. package/src/components-v2/header/__tests__/user.test.tsx +3 -3
  205. package/src/components-v2/header/components/categories-menu.tsx +6 -6
  206. package/src/components-v2/header/components/mobile-header.tsx +17 -18
  207. package/src/components-v2/header/components/user.tsx +29 -28
  208. package/src/components-v2/header/header.tsx +9 -10
  209. package/src/components-v2/header/sticky-header.tsx +3 -3
  210. package/src/components-v2/header/styles/index.ts +3 -2
  211. package/src/components-v2/mini-cart/__tests__/cart-item.test.tsx +18 -18
  212. package/src/components-v2/mini-cart/__tests__/mini-cart.test.tsx +7 -7
  213. package/src/components-v2/mini-cart/components/bottom-actions.tsx +4 -3
  214. package/src/components-v2/mini-cart/components/cart-item.tsx +16 -15
  215. package/src/components-v2/mini-cart/components/empty-view.tsx +2 -1
  216. package/src/components-v2/mini-cart/components/top-header.tsx +8 -7
  217. package/src/components-v2/mini-cart/mini-cart-trigger.tsx +4 -4
  218. package/src/components-v2/mini-cart/mini-cart.tsx +11 -12
  219. package/src/components-v2/mobile-navigation/MobileNavigationBar.stories.tsx +2 -2
  220. package/src/components-v2/mobile-navigation/mobile-navigation-bar.tsx +15 -15
  221. package/src/components-v2/mobile-navigation/styles/index.ts +2 -2
  222. package/src/components-v2/nav-link/nav-link-2.tsx +2 -2
  223. package/src/components-v2/nav-link/nav-link-3.tsx +4 -4
  224. package/src/components-v2/nav-link/nav-link.tsx +4 -4
  225. package/src/components-v2/navbar/categories.tsx +8 -6
  226. package/src/components-v2/navbar/category-based-menu/category-based-menu.tsx +17 -16
  227. package/src/components-v2/navbar/category-based-menu/styles.ts +3 -3
  228. package/src/components-v2/navbar/category-based-menu/types.ts +1 -1
  229. package/src/components-v2/navbar/mega-menu/mega-menu.tsx +11 -10
  230. package/src/components-v2/navbar/mega-menu/styles.ts +2 -2
  231. package/src/components-v2/navbar/mobile-menu/mobile-menu.test.tsx +3 -3
  232. package/src/components-v2/navbar/mobile-menu/mobile-menu.tsx +21 -13
  233. package/src/components-v2/navbar/nav-list/cms-nav.test.tsx +4 -4
  234. package/src/components-v2/navbar/nav-list/nav-item-child.tsx +13 -14
  235. package/src/components-v2/navbar/nav-list/nav-list.tsx +128 -90
  236. package/src/components-v2/navbar/navbar.tsx +4 -5
  237. package/src/components-v2/navbar/styles.ts +4 -4
  238. package/src/components-v2/navbar/utils/transform-nav.test.ts +3 -3
  239. package/src/components-v2/navbar/utils/transform-nav.ts +3 -3
  240. package/src/components-v2/no-records.tsx +3 -3
  241. package/src/components-v2/product-cards/discount-chip.tsx +1 -1
  242. package/src/components-v2/product-cards/favorite-button.tsx +3 -3
  243. package/src/components-v2/product-cards/product-card/ProductCard.stories.tsx +2 -2
  244. package/src/components-v2/product-cards/product-card/product-card.tsx +43 -45
  245. package/src/components-v2/product-cards/product-card/styles/index.ts +2 -2
  246. package/src/components-v2/product-cards/product-card-plp/ProductCardPlp.stories.tsx +2 -2
  247. package/src/components-v2/product-cards/product-card-plp/product-card.tsx +25 -24
  248. package/src/components-v2/product-cards/product-card-plp-list/ProductCardPlpList.stories.tsx +1 -1
  249. package/src/components-v2/product-cards/product-card-plp-list/components/tags.tsx +1 -1
  250. package/src/components-v2/product-cards/product-card-plp-list/product-card.tsx +22 -19
  251. package/src/components-v2/product-cards/product-card-search/ProductCardSearch.stories.tsx +2 -2
  252. package/src/components-v2/product-cards/product-card-search/product-card.tsx +20 -18
  253. package/src/components-v2/product-cards/product-price.tsx +2 -2
  254. package/src/components-v2/product-cards/product-rating.tsx +4 -4
  255. package/src/components-v2/product-cards/product-title.tsx +2 -2
  256. package/src/components-v2/product-cards/quantity-buttons.tsx +6 -6
  257. package/src/components-v2/product-dialog/ProductDialog.stories.tsx +2 -2
  258. package/src/components-v2/product-dialog/compound/product-dialog.tsx +16 -16
  259. package/src/components-v2/product-dialog/index.tsx +1 -1
  260. package/src/components-v2/product-dimensions/Dimensions.stories.tsx +3 -2
  261. package/src/components-v2/product-dimensions/compound/dimensions-group-error.tsx +3 -3
  262. package/src/components-v2/product-dimensions/compound/dimensions-group-label.tsx +1 -1
  263. package/src/components-v2/product-dimensions/compound/dimensions-group-list-chip.tsx +5 -4
  264. package/src/components-v2/product-dimensions/compound/dimensions-group-list.tsx +7 -2
  265. package/src/components-v2/product-dimensions/compound/dimensions-group.tsx +3 -4
  266. package/src/components-v2/product-dimensions/compound/dimensions.tsx +6 -2
  267. package/src/components-v2/product-dimensions/index.tsx +4 -4
  268. package/src/components-v2/product-dimensions/utils/has-selected-dimension.ts +1 -1
  269. package/src/components-v2/product-quantity-buttons/ProductQuantity.stories.tsx +2 -1
  270. package/src/components-v2/product-quantity-buttons/compound/quantity-buttons-root.tsx +8 -8
  271. package/src/components-v2/product-quantity-buttons/index.tsx +5 -2
  272. package/src/components-v2/product-quantity-variants/ProductQuantity.stories.tsx +3 -2
  273. package/src/components-v2/product-quantity-variants/index.tsx +14 -15
  274. package/src/components-v2/products-view/ProductsGrid.stories.tsx +3 -2
  275. package/src/components-v2/products-view/ProductsList.stories.tsx +3 -4
  276. package/src/components-v2/products-view/compound/context.ts +4 -3
  277. package/src/components-v2/products-view/compound/products-grid-view.tsx +9 -8
  278. package/src/components-v2/products-view/compound/products-list-view.tsx +9 -8
  279. package/src/components-v2/products-view/compound/types.ts +2 -2
  280. package/src/components-v2/products-view/index.tsx +5 -5
  281. package/src/components-v2/progress/ProgressBar.stories.tsx +2 -2
  282. package/src/components-v2/progress/progress.tsx +4 -4
  283. package/src/components-v2/scrollbar/Scrollbar.stories.tsx +2 -1
  284. package/src/components-v2/scrollbar/scrollbar.tsx +4 -4
  285. package/src/components-v2/search-bar/SearchBarLarge.stories.tsx +2 -1
  286. package/src/components-v2/search-bar/compound/context.ts +2 -3
  287. package/src/components-v2/search-bar/compound/results-item-lg.tsx +3 -2
  288. package/src/components-v2/search-bar/compound/results-item-sm.tsx +10 -9
  289. package/src/components-v2/search-bar/compound/results-suspense.tsx +5 -6
  290. package/src/components-v2/search-bar/compound/results.tsx +11 -7
  291. package/src/components-v2/search-bar/compound/search-bar-root.tsx +10 -10
  292. package/src/components-v2/search-bar/compound/textfield-adornment-category.tsx +32 -33
  293. package/src/components-v2/search-bar/compound/textfield-adornment-search-icon.tsx +3 -2
  294. package/src/components-v2/search-bar/compound/textfield.tsx +5 -8
  295. package/src/components-v2/search-bar/hooks/use-search.ts +2 -3
  296. package/src/components-v2/search-bar/styles/index.ts +2 -2
  297. package/src/components-v2/search-bar/utils/findCategoryNameById.ts +1 -1
  298. package/src/components-v2/section/Section.stories.tsx +4 -4
  299. package/src/components-v2/section/compound/section-header.tsx +7 -7
  300. package/src/components-v2/section/compound/section.tsx +4 -3
  301. package/src/components-v2/side-nav/SideNav.stories.tsx +4 -4
  302. package/src/components-v2/side-nav/side-nav.tsx +3 -3
  303. package/src/components-v2/wishlist-dialogs/__tests__/create-new-list.test.tsx +5 -7
  304. package/src/components-v2/wishlist-dialogs/add-to-wishlist/AddToWishlist.stories.tsx +2 -2
  305. package/src/components-v2/wishlist-dialogs/add-to-wishlist/add-to-wishlist-button.tsx +2 -2
  306. package/src/components-v2/wishlist-dialogs/add-to-wishlist/compound/add-to-wishlist-bottom-ui.tsx +3 -3
  307. package/src/components-v2/wishlist-dialogs/add-to-wishlist/compound/add-to-wishlist-dialog.tsx +8 -9
  308. package/src/components-v2/wishlist-dialogs/add-to-wishlist/compound/add-to-wishlist-list.tsx +6 -7
  309. package/src/components-v2/wishlist-dialogs/add-to-wishlist/compound/context.ts +2 -1
  310. package/src/components-v2/wishlist-dialogs/add-to-wishlist/compound/wishlist-dialog-header.tsx +8 -10
  311. package/src/components-v2/wishlist-dialogs/add-to-wishlist/compound/wishlist-dialog-item.tsx +6 -6
  312. package/src/components-v2/wishlist-dialogs/add-to-wishlist/hooks/use-add-to-wishlist.ts +6 -6
  313. package/src/components-v2/wishlist-dialogs/add-to-wishlist/index.tsx +11 -13
  314. package/src/components-v2/wishlist-dialogs/create-wishlist/compound/create-wishlist-bottom-ui.tsx +3 -3
  315. package/src/components-v2/wishlist-dialogs/create-wishlist/compound/create-wishlist-dialog.tsx +11 -9
  316. package/src/components-v2/wishlist-dialogs/create-wishlist/compound/create-wishlist-form.tsx +6 -4
  317. package/src/components-v2/wishlist-dialogs/create-wishlist/create-wishlist-button.tsx +2 -2
  318. package/src/components-v2/wishlist-dialogs/styles.ts +4 -4
  319. package/src/hooks/use-cart.ts +1 -1
  320. package/src/hooks/use-nextauth-session.ts +65 -0
  321. package/src/hooks/use-overflow-detect.ts +1 -1
  322. package/src/hooks/use-settings.ts +1 -1
  323. package/src/hooks/use-variants.ts +29 -31
  324. package/src/lib/build-detail-url.ts +1 -1
  325. package/src/lib/build-product-detail-url.ts +1 -1
  326. package/src/lib/cart-cookie-handler.ts +1 -1
  327. package/src/lib/category-helpers.ts +4 -4
  328. package/src/lib/create-graphql-client.ts +1 -2
  329. package/src/lib/get-palette-color.ts +36 -16
  330. package/src/lib/graphqlRequestSdk.ts +2 -3
  331. package/src/lib/hexToLuma.ts +4 -4
  332. package/src/lib/product-list-types.ts +1 -1
  333. package/src/lib/refiner-utils.ts +1 -1
  334. package/src/lib/store-hours-helper.ts +6 -6
  335. package/src/pages-v2/account/account-navigation.tsx +13 -13
  336. package/src/pages-v2/account/addresses/address-form.tsx +26 -23
  337. package/src/pages-v2/account/addresses/address-item.tsx +14 -15
  338. package/src/pages-v2/account/dashboard-header.tsx +9 -9
  339. package/src/pages-v2/account/orders/order-progress.tsx +14 -14
  340. package/src/pages-v2/account/orders/order-row.tsx +11 -10
  341. package/src/pages-v2/account/orders/order-summary.tsx +7 -6
  342. package/src/pages-v2/account/orders/ordered-products.tsx +19 -18
  343. package/src/pages-v2/account/profile/profile-button.test.tsx +3 -3
  344. package/src/pages-v2/account/profile/profile-button.tsx +5 -4
  345. package/src/pages-v2/account/profile/user-info.tsx +8 -10
  346. package/src/pages-v2/account/styles.ts +1 -1
  347. package/src/pages-v2/account/wishlist/create-new-list.tsx +11 -9
  348. package/src/pages-v2/account/wishlist/create-wishlist-button.tsx +2 -2
  349. package/src/pages-v2/account/wishlist/wishlist-item.tsx +15 -14
  350. package/src/pages-v2/blog/blog-card.tsx +58 -0
  351. package/src/pages-v2/blog/pagination.tsx +1 -2
  352. package/src/pages-v2/cart/__tests__/cart-item.test.tsx +8 -10
  353. package/src/pages-v2/cart/__tests__/checkout-form.test.tsx +8 -16
  354. package/src/pages-v2/cart/__tests__/countries.json +19407 -0
  355. package/src/pages-v2/cart/__tests__/estimate-shipping.test.tsx +11 -11
  356. package/src/pages-v2/cart/cart-item.tsx +110 -100
  357. package/src/pages-v2/cart/checkout-form.tsx +20 -22
  358. package/src/pages-v2/cart/coupon-entry.tsx +12 -10
  359. package/src/pages-v2/cart/estimate-shipping.tsx +11 -10
  360. package/src/pages-v2/checkout/checkout-alt-form/checkout-form.tsx +19 -18
  361. package/src/pages-v2/checkout/checkout-alt-form/checkout-step.tsx +7 -7
  362. package/src/pages-v2/checkout/checkout-alt-form/step-heading.tsx +4 -4
  363. package/src/pages-v2/checkout/checkout-alt-form/steps/address/address-card.tsx +4 -4
  364. package/src/pages-v2/checkout/checkout-alt-form/steps/address/delivery-address.tsx +33 -31
  365. package/src/pages-v2/checkout/checkout-alt-form/steps/address/new-address-form.tsx +19 -21
  366. package/src/pages-v2/checkout/checkout-alt-form/steps/address/styles.ts +1 -1
  367. package/src/pages-v2/checkout/checkout-alt-form/steps/customer-info/customer-information.tsx +16 -17
  368. package/src/pages-v2/checkout/checkout-alt-form/steps/payment/payment-details.tsx +25 -28
  369. package/src/pages-v2/checkout/checkout-alt-form/steps/payment/safe-card-preview-data.tsx +2 -2
  370. package/src/pages-v2/checkout/checkout-alt-form/steps/shipping/delivery-date.tsx +5 -5
  371. package/src/pages-v2/checkout/checkout-alt-form/steps/shipping/delivery-options.tsx +33 -34
  372. package/src/pages-v2/checkout/checkout-alt-summary/cart-item.tsx +2 -2
  373. package/src/pages-v2/checkout/checkout-alt-summary/checkout-alt-summary.tsx +9 -9
  374. package/src/pages-v2/checkout/checkout-alt-summary/list-item.tsx +2 -2
  375. package/src/pages-v2/confirmation/address.tsx +4 -4
  376. package/src/pages-v2/confirmation/confirmation-summary.tsx +11 -10
  377. package/src/pages-v2/confirmation/ordered-products.tsx +12 -11
  378. package/src/pages-v2/product-details/available-shops.tsx +6 -6
  379. package/src/pages-v2/product-details/bopis/find-in-store-button.tsx +3 -3
  380. package/src/pages-v2/product-details/bopis/find-in-store-modal.tsx +16 -17
  381. package/src/pages-v2/product-details/bopis/pickup-option-select.tsx +5 -5
  382. package/src/pages-v2/product-details/bopis/search-header.tsx +3 -2
  383. package/src/pages-v2/product-details/bopis/store-card/shop-card.tsx +15 -16
  384. package/src/pages-v2/product-details/bopis/store-card/utils/getDaysResources.ts +1 -1
  385. package/src/pages-v2/product-details/checkbox-label.tsx +3 -3
  386. package/src/pages-v2/product-details/currency.ts +1 -0
  387. package/src/pages-v2/product-details/frequently-bought.tsx +12 -12
  388. package/src/pages-v2/product-details/frequently-product-card.tsx +5 -5
  389. package/src/pages-v2/product-details/product-comment.tsx +4 -4
  390. package/src/pages-v2/product-details/product-description.tsx +3 -3
  391. package/src/pages-v2/product-details/product-filter-card.tsx +17 -14
  392. package/src/pages-v2/product-details/product-intro/compound/context.ts +10 -5
  393. package/src/pages-v2/product-details/product-intro/compound/product-info.tsx +19 -19
  394. package/src/pages-v2/product-details/product-intro/compound/product-intro-images.tsx +39 -33
  395. package/src/pages-v2/product-details/product-intro/compound/product-intro.tsx +7 -7
  396. package/src/pages-v2/product-details/product-intro/compound/thumbnail-with-skeleton.tsx +2 -2
  397. package/src/pages-v2/product-details/product-intro/utils.ts +3 -5
  398. package/src/pages-v2/product-details/product-review.tsx +9 -9
  399. package/src/pages-v2/product-details/product-tabs.tsx +11 -8
  400. package/src/pages-v2/product-details/related-products.tsx +12 -9
  401. package/src/pages-v2/product-list/breadcrumbs.tsx +3 -3
  402. package/src/pages-v2/product-list/checkbox-label.tsx +3 -3
  403. package/src/pages-v2/product-list/facet-group.tsx +8 -8
  404. package/src/pages-v2/product-list/facet.tsx +4 -3
  405. package/src/pages-v2/product-list/list-filter.tsx +6 -6
  406. package/src/pages-v2/product-list/pagination.tsx +2 -2
  407. package/src/pages-v2/product-list/product-list-context.tsx +22 -18
  408. package/src/pages-v2/product-list/product-list-state.ts +14 -14
  409. package/src/pages-v2/product-list/product-list-view.tsx +18 -17
  410. package/src/pages-v2/product-list/product-rating.tsx +6 -3
  411. package/src/pages-v2/product-list/quick-view-dialog-content.tsx +21 -23
  412. package/src/pages-v2/product-list/quick-view-dialog.tsx +7 -3
  413. package/src/pages-v2/product-list/range-filter.tsx +5 -6
  414. package/src/pages-v2/product-list/scrollbar.tsx +4 -4
  415. package/src/pages-v2/product-list/search-bar.tsx +12 -12
  416. package/src/pages-v2/product-list/selected-facets.tsx +4 -4
  417. package/src/pages-v2/product-list/side-nav.tsx +2 -2
  418. package/src/pages-v2/product-list/swatch.tsx +15 -11
  419. package/src/pages-v2/product-list/utils/generate-breadcrumbs.ts +1 -1
  420. package/src/pages-v2/product-list/utils/getCategoryFilterFromSlug.ts +33 -68
  421. package/src/pages-v2/product-list/utils/product-list-helper.ts +5 -5
  422. package/src/pages-v2/product-list/utils/product-list-types.ts +1 -1
  423. package/src/pages-v2/product-list/utils/search-for-category.ts +4 -4
  424. package/src/pages-v2/product-list/utils/sort-options.ts +1 -1
  425. package/src/pages-v2/quickorder/order-upload.tsx +92 -78
  426. package/src/pages-v2/quickorder/provider.tsx +13 -10
  427. package/src/pages-v2/quickorder/quick-order-header.tsx +1 -1
  428. package/src/pages-v2/quickorder/quick-order-row.tsx +9 -8
  429. package/src/pages-v2/quickorder/quick-order-table.tsx +3 -3
  430. package/src/pages-v2/quickorder/quick-order.tsx +48 -43
  431. package/src/providers/nav-provider/index.tsx +3 -3
  432. package/src/providers/nav-provider/utils/createLink.ts +1 -1
  433. package/src/providers/notifications/notification-context.tsx +3 -4
  434. package/src/providers/notifications/use-notification.ts +1 -1
  435. package/tsconfig.json +1 -1
  436. package/src/components-v2/sticky/Sticky.stories.tsx +0 -88
  437. package/src/components-v2/sticky/index.ts +0 -1
  438. package/src/components-v2/sticky/sticky.tsx +0 -62
  439. package/src/components-v2/sticky/styles.ts +0 -38
  440. package/src/components-v2/utils/constants.ts +0 -8
  441. package/src/theme/build-mui-theme.ts +0 -104
  442. package/src/theme/components.ts +0 -163
  443. package/src/theme/emotion-cache.tsx +0 -101
  444. package/src/theme/theme-colors.ts +0 -205
  445. package/src/theme/theme-options-sample.ts +0 -69
  446. package/src/theme/theme-options.ts +0 -172
  447. package/src/theme/theme-provider.tsx +0 -44
  448. package/src/theme/typography.ts +0 -22
  449. package/src/theme/utils.ts +0 -17
@@ -1,25 +1,25 @@
1
- import { createContext, useContext, ReactNode, useState } from "react";
2
- import Link from "next/link";
3
- import Card from "@mui/material/Card";
4
- import Rating from "@mui/material/Rating";
5
- import styled from "@mui/material/styles/styled";
6
- import IconButton from "@mui/material/IconButton";
7
- import RemoveRedEye from "@mui/icons-material/RemoveRedEye";
8
- // GLOBAL CUSTOM COMPONENTS
9
- import { H5 } from "@evenicanpm/storefront-core/src/components-v2/Typography";
10
1
  import ImageWithFallback from "@evenicanpm/storefront-core/src/components-v2/ImageWithFallback";
11
- import AddToWishlistDialog from "@evenicanpm/storefront-core/src/components-v2/wishlist-dialogs/add-to-wishlist";
12
- import ProductViewDialog from "@evenicanpm/storefront-core/src/components-v2/product-dialog";
13
2
  // LOCAL CUSTOM COMPONENTS
14
3
  import DiscountChip from "@evenicanpm/storefront-core/src/components-v2/product-cards/discount-chip";
15
- import ProductPrice from "@evenicanpm/storefront-core/src/components-v2/product-cards/product-price";
16
- import QuantityButtons from "@evenicanpm/storefront-core/src/components-v2/product-cards/quantity-buttons";
17
4
  import FavoriteButton from "@evenicanpm/storefront-core/src/components-v2/product-cards/favorite-button";
18
5
  import ProductTags from "@evenicanpm/storefront-core/src/components-v2/product-cards/product-card-plp-list/components/tags";
19
- // LIBRARY AND HOOKS
20
- import buildDetailUrl from "@evenicanpm/storefront-core/src/lib/build-detail-url";
6
+ import ProductPrice from "@evenicanpm/storefront-core/src/components-v2/product-cards/product-price";
7
+ import QuantityButtons from "@evenicanpm/storefront-core/src/components-v2/product-cards/quantity-buttons";
8
+ import ProductViewDialog from "@evenicanpm/storefront-core/src/components-v2/product-dialog";
9
+ // GLOBAL CUSTOM COMPONENTS
10
+ import { H5 } from "@evenicanpm/storefront-core/src/components-v2/Typography";
11
+ import AddToWishlistDialog from "@evenicanpm/storefront-core/src/components-v2/wishlist-dialogs/add-to-wishlist";
21
12
  import useCart from "@evenicanpm/storefront-core/src/hooks/use-cart";
22
13
  import useFavorite from "@evenicanpm/storefront-core/src/hooks/use-favorite";
14
+ // LIBRARY AND HOOKS
15
+ import buildDetailUrl from "@evenicanpm/storefront-core/src/lib/build-detail-url";
16
+ import RemoveRedEye from "@mui/icons-material/RemoveRedEye";
17
+ import Card from "@mui/material/Card";
18
+ import IconButton from "@mui/material/IconButton";
19
+ import Rating from "@mui/material/Rating";
20
+ import styled from "@mui/material/styles/styled";
21
+ import Link from "next/link";
22
+ import { createContext, type ReactNode, useContext, useState } from "react";
23
23
 
24
24
  // STYLED COMPONENT
25
25
  const Wrapper = styled(Card)({
@@ -201,11 +201,12 @@ ProductCardPlpList.Price = () => {
201
201
 
202
202
  ProductCardPlpList.FavoriteButton = () => {
203
203
  const ctx = useContext(ProductCardPlpListContext);
204
- if (!ctx) return null;
205
204
 
206
- const { id } = ctx.product;
205
+ const id = ctx?.product?.id;
207
206
  const isFavorite = useFavorite(id);
208
207
 
208
+ if (!ctx) return null;
209
+
209
210
  return (
210
211
  <FavoriteButton
211
212
  isFavorite={isFavorite}
@@ -220,12 +221,14 @@ ProductCardPlpList.FavoriteButton = () => {
220
221
  // So hide them for now, implement based on client requirements.
221
222
  ProductCardPlpList.QuantityButtons = () => {
222
223
  const ctx = useContext(ProductCardPlpListContext);
223
- if (!ctx) return null;
224
224
 
225
- const { id } = ctx.product;
225
+ const id = ctx?.product?.id;
226
226
  const { currentCartLine, handleCartAmountChange, loading } = useCart(id);
227
+
227
228
  const [quantity, setQuantity] = useState(currentCartLine?.Quantity || 0);
228
229
 
230
+ if (!ctx) return null;
231
+
229
232
  const handleIncrementQuantity = () => {
230
233
  const qty = quantity + 1;
231
234
  handleCartAmountChange(qty);
@@ -1,8 +1,8 @@
1
+ import { Box } from "@mui/material";
1
2
  import type { Meta, StoryObj } from "@storybook/react";
2
3
  import React from "react";
3
- import ProductCardSearch from "./index";
4
4
  import { data } from "../../../../__mocks__/products";
5
- import { Box } from "@mui/material";
5
+ import ProductCardSearch from "./index";
6
6
 
7
7
  const meta = {
8
8
  title: "Product/ProductCards/ProductCardSearch",
@@ -1,32 +1,32 @@
1
1
  "use client";
2
2
 
3
- import { createContext, useContext, ReactNode, useState } from "react";
4
- import Link from "next/link";
5
- import Box from "@mui/material/Box";
6
- import Rating from "@mui/material/Rating";
7
- // MUI ICON COMPONENTS
8
- import { RemoveRedEye } from "@mui/icons-material";
3
+ import { FlexRowCenter } from "@evenicanpm/storefront-core/src/components-v2/flex-box";
9
4
  // GLOBAL CUSTOM COMPONENTS
10
5
  import LazyImage from "@evenicanpm/storefront-core/src/components-v2/LazyImage";
11
- import { FlexRowCenter } from "@evenicanpm/storefront-core/src/components-v2/flex-box";
6
+ import FavoriteButton from "@evenicanpm/storefront-core/src/components-v2/product-cards/favorite-button";
7
+ // STYLED COMPONENTS
8
+ import {
9
+ Card,
10
+ CardMedia,
11
+ QuickViewSmallButton,
12
+ } from "@evenicanpm/storefront-core/src/components-v2/product-cards/product-card-search/styles/index";
13
+ import ProductViewDialog from "@evenicanpm/storefront-core/src/components-v2/product-dialog";
12
14
  import {
13
15
  H4,
14
16
  Paragraph,
15
17
  Small,
16
18
  } from "@evenicanpm/storefront-core/src/components-v2/Typography";
17
- import ProductViewDialog from "@evenicanpm/storefront-core/src/components-v2/product-dialog";
18
19
  import AddToWishlistDialog from "@evenicanpm/storefront-core/src/components-v2/wishlist-dialogs/add-to-wishlist";
19
- import FavoriteButton from "@evenicanpm/storefront-core/src/components-v2/product-cards/favorite-button";
20
+ import useFavorite from "@evenicanpm/storefront-core/src/hooks/use-favorite";
20
21
  // LIBRARY AND HOOKS
21
22
  import buildDetailUrl from "@evenicanpm/storefront-core/src/lib/build-detail-url";
22
23
  import { currency } from "@evenicanpm/storefront-core/src/lib/lib";
23
- import useFavorite from "@evenicanpm/storefront-core/src/hooks/use-favorite";
24
- // STYLED COMPONENTS
25
- import {
26
- Card,
27
- CardMedia,
28
- QuickViewSmallButton,
29
- } from "@evenicanpm/storefront-core/src/components-v2/product-cards/product-card-search/styles/index";
24
+ // MUI ICON COMPONENTS
25
+ import { RemoveRedEye } from "@mui/icons-material";
26
+ import Box from "@mui/material/Box";
27
+ import Rating from "@mui/material/Rating";
28
+ import Link from "next/link";
29
+ import { createContext, type ReactNode, useContext, useState } from "react";
30
30
 
31
31
  type Product = {
32
32
  slug: string;
@@ -171,9 +171,11 @@ ProductCardSearch.QuickViewButton = () => {
171
171
 
172
172
  ProductCardSearch.FavoriteButton = () => {
173
173
  const ctx = useContext(ProductCardSearchContext);
174
+
175
+ const id = ctx?.product?.id;
176
+ const isFavorite = useFavorite(id ? Number(id) : undefined);
177
+
174
178
  if (!ctx) return null;
175
- const { id } = ctx.product;
176
- const isFavorite = useFavorite(Number(id));
177
179
 
178
180
  return (
179
181
  <FavoriteButton
@@ -1,4 +1,3 @@
1
- import Box from "@mui/material/Box";
2
1
  // GLOBAL CUSTOM COMPONENTS
3
2
  import FlexBox from "@evenicanpm/storefront-core/src/components-v2/flex-box/flex-box";
4
3
  import { Paragraph } from "@evenicanpm/storefront-core/src/components-v2/Typography";
@@ -7,12 +6,13 @@ import {
7
6
  calculateDiscount,
8
7
  currency,
9
8
  } from "@evenicanpm/storefront-core/src/lib/lib";
9
+ import Box from "@mui/material/Box";
10
10
 
11
11
  // ==============================================================
12
12
  type Props = { price: number; discount: number };
13
13
  // ==============================================================
14
14
 
15
- export default function ProductPrice({ discount, price }: Props) {
15
+ export default function ProductPrice({ discount, price }: Readonly<Props>) {
16
16
  return (
17
17
  <FlexBox alignItems="center" gap={1} mt={0.5}>
18
18
  <Paragraph fontWeight={600} color="primary.main">
@@ -1,8 +1,8 @@
1
- import Rating from "@mui/material/Rating";
2
- import { BoxProps } from "@mui/material/Box";
1
+ import FlexBox from "@evenicanpm/storefront-core/src/components-v2/flex-box/flex-box";
3
2
  // GLOBAL CUSTOM COMPONENTS
4
3
  import { Span } from "@evenicanpm/storefront-core/src/components-v2/Typography";
5
- import FlexBox from "@evenicanpm/storefront-core/src/components-v2/flex-box/flex-box";
4
+ import type { BoxProps } from "@mui/material/Box";
5
+ import Rating from "@mui/material/Rating";
6
6
 
7
7
  // ==============================================================
8
8
  interface Props extends BoxProps {
@@ -15,7 +15,7 @@ export default function ProductRating({
15
15
  showRating,
16
16
  rating = 0,
17
17
  ...props
18
- }: Props) {
18
+ }: Readonly<Props>) {
19
19
  if (showRating) {
20
20
  return (
21
21
  <FlexBox gap={1} alignItems="center" {...props}>
@@ -1,11 +1,11 @@
1
- import Link from "next/link";
2
1
  import { H3 } from "@evenicanpm/storefront-core/src/components-v2/Typography";
2
+ import Link from "next/link";
3
3
 
4
4
  // ==============================================================
5
5
  type Props = { title: string; slug: string };
6
6
  // ==============================================================
7
7
 
8
- export default function ProductTitle({ title, slug }: Props) {
8
+ export default function ProductTitle({ title, slug }: Readonly<Props>) {
9
9
  return (
10
10
  <Link href={`/products/${slug}`}>
11
11
  <H3
@@ -1,12 +1,12 @@
1
- import { Fragment } from "react";
2
- import Button from "@mui/material/Button";
3
- // MUI ICON COMPONENTS
4
- import Add from "@mui/icons-material/Add";
5
- import Remove from "@mui/icons-material/Remove";
6
1
  // GLOBAL CUSTOM COMPONENTS
7
2
  import { FlexBox } from "@evenicanpm/storefront-core/src/components-v2/flex-box/index";
8
3
  import { Paragraph } from "@evenicanpm/storefront-core/src/components-v2/Typography";
4
+ // MUI ICON COMPONENTS
5
+ import Add from "@mui/icons-material/Add";
6
+ import Remove from "@mui/icons-material/Remove";
9
7
  import { CircularProgress } from "@mui/material";
8
+ import Button from "@mui/material/Button";
9
+ import { Fragment } from "react";
10
10
 
11
11
  // ==============================================================
12
12
  interface Props {
@@ -17,7 +17,7 @@ interface Props {
17
17
  }
18
18
  // ==============================================================
19
19
 
20
- export default function QuantityButtons(props: Props) {
20
+ export default function QuantityButtons(props: Readonly<Props>) {
21
21
  const { quantity, handleDecrement, handleIncrement, isLineUpdating } =
22
22
  props || {};
23
23
 
@@ -1,8 +1,8 @@
1
- import type { Meta, StoryObj } from "@storybook/react";
2
- import ProductDialog from "./index";
3
1
  import { Button } from "@mui/material";
2
+ import type { Meta, StoryObj } from "@storybook/react";
4
3
  import { useArgs } from "storybook/internal/preview-api";
5
4
  import { data } from "../../../__mocks__/products";
5
+ import ProductDialog from "./index";
6
6
 
7
7
  const meta = {
8
8
  title: "Product/ProductDialog",
@@ -2,27 +2,27 @@
2
2
  * @module ProductViewDialog
3
3
  */
4
4
  "use client";
5
- import Grid from "@mui/material/Grid2";
6
- import Rating from "@mui/material/Rating";
7
- import Dialog from "@mui/material/Dialog";
8
- import Divider from "@mui/material/Divider";
9
- import IconButton from "@mui/material/IconButton";
10
- import DialogContent from "@mui/material/DialogContent";
11
- import Close from "@mui/icons-material/Close";
12
- import { Carousel } from "@evenicanpm/storefront-core/src/components-v2/carousel";
5
+ import type { ProductDetails } from "@evenicanpm/storefront-core/src/api-manager/schemas/product.schema";
6
+ import getProductById from "@evenicanpm/storefront-core/src/api-manager/services/product/queries/get-product-by-id";
13
7
  import BazaarImage from "@evenicanpm/storefront-core/src/components-v2/BazaarImage";
8
+ import { Carousel } from "@evenicanpm/storefront-core/src/components-v2/carousel";
14
9
  import { FlexBox } from "@evenicanpm/storefront-core/src/components-v2/flex-box";
10
+ import QuantityVariantsSelect from "@evenicanpm/storefront-core/src/components-v2/product-quantity-variants";
15
11
  import {
16
- H2,
17
- Paragraph,
18
12
  H1,
13
+ H2,
19
14
  H6,
15
+ Paragraph,
20
16
  } from "@evenicanpm/storefront-core/src/components-v2/Typography";
21
17
  import { currency } from "@evenicanpm/storefront-core/src/lib/lib";
22
- import QuantityVariantsSelect from "@evenicanpm/storefront-core/src/components-v2/product-quantity-variants";
23
- import getProductById from "@evenicanpm/storefront-core/src/api-manager/services/product/queries/get-product-by-id";
24
- import { createContext, ReactElement, useContext } from "react";
25
- import { ProductDetails } from "@evenicanpm/storefront-core/src/api-manager/schemas/product.schema";
18
+ import Close from "@mui/icons-material/Close";
19
+ import Dialog from "@mui/material/Dialog";
20
+ import DialogContent from "@mui/material/DialogContent";
21
+ import Divider from "@mui/material/Divider";
22
+ import Grid from "@mui/material/Grid2";
23
+ import IconButton from "@mui/material/IconButton";
24
+ import Rating from "@mui/material/Rating";
25
+ import { createContext, type ReactElement, useContext } from "react";
26
26
 
27
27
  /**
28
28
  * @category Props
@@ -87,7 +87,7 @@ export const useProductDialog = () => {
87
87
  * </ProductViewDialog.Content>
88
88
  * </ProductViewDialog>
89
89
  */
90
- export default function ProductDialog(props: Props) {
90
+ export default function ProductDialog(props: Readonly<Props>) {
91
91
  const { children, openDialog, handleCloseDialog } = props;
92
92
  const { data: product } = getProductById.useSuspenseData({
93
93
  id: Number(props.productId),
@@ -161,7 +161,7 @@ export const ProductDialogContentImages = () => {
161
161
  >
162
162
  {product?.Images?.map((item: string, index: number) => (
163
163
  <BazaarImage
164
- key={index}
164
+ key={item + index}
165
165
  src={item}
166
166
  alt="product"
167
167
  sx={{
@@ -10,7 +10,7 @@ interface Props {
10
10
  /**
11
11
  * @category Composed Component
12
12
  */
13
- export default function ProductDialog(props: Props) {
13
+ export default function ProductDialog(props: Readonly<Props>) {
14
14
  return (
15
15
  <ProductViewDialog {...props}>
16
16
  <ProductViewDialog.Content>
@@ -1,9 +1,10 @@
1
1
  // Replace your-framework with the framework you are using, e.g. react-vite, nextjs, nextjs-vite, etc.
2
- import React from "react";
2
+
3
3
  import type { Meta, StoryObj } from "@storybook/react";
4
+ import React from "react";
5
+ import useVariants from "../../hooks/use-variants";
4
6
  import { data, product } from "./__mocks__/data";
5
7
  import { Dimensions } from "./compound/dimensions";
6
- import useVariants from "../../hooks/use-variants";
7
8
 
8
9
  const meta = {
9
10
  title: "Product/Dimensions",
@@ -3,12 +3,12 @@
3
3
  */
4
4
  "use client";
5
5
  import { DimensionsContext } from "@evenicanpm/storefront-core/src/components-v2/product-dimensions/compound/dimensions";
6
+ import { DimensionsGroupContext } from "@evenicanpm/storefront-core/src/components-v2/product-dimensions/compound/dimensions-group";
7
+ import { hasSelectedDimension } from "@evenicanpm/storefront-core/src/components-v2/product-dimensions/utils/has-selected-dimension";
6
8
  import { H6 } from "@evenicanpm/storefront-core/src/components-v2/Typography";
7
- import { useTranslations } from "next-intl";
8
9
  import { ProductDimensionType } from "@msdyn365-commerce/retail-proxy";
9
- import { hasSelectedDimension } from "@evenicanpm/storefront-core/src/components-v2/product-dimensions/utils/has-selected-dimension";
10
+ import { useTranslations } from "next-intl";
10
11
  import { useContext } from "react";
11
- import { DimensionsGroupContext } from "@evenicanpm/storefront-core/src/components-v2/product-dimensions/compound/dimensions-group";
12
12
 
13
13
  /**
14
14
  * An error that corresponds with a specific dimension group.
@@ -2,10 +2,10 @@
2
2
  * @module ProductDimensions
3
3
  */
4
4
  "use client";
5
+ import { DimensionsGroupContext } from "@evenicanpm/storefront-core/src/components-v2/product-dimensions/compound/dimensions-group";
5
6
  import { H6 } from "@evenicanpm/storefront-core/src/components-v2/Typography";
6
7
  import { ProductDimensionType } from "@msdyn365-commerce/retail-proxy";
7
8
  import { useContext } from "react";
8
- import { DimensionsGroupContext } from "@evenicanpm/storefront-core/src/components-v2/product-dimensions/compound/dimensions-group";
9
9
 
10
10
  /**
11
11
  * @category Sub-Component
@@ -1,13 +1,14 @@
1
1
  /**
2
2
  * @module ProductDimensions
3
3
  */
4
- import React, { useContext } from "react";
5
- import { Chip } from "@mui/material";
4
+
5
+ import { DimensionsContext } from "@evenicanpm/storefront-core/src/components-v2/product-dimensions/compound/dimensions";
6
6
  import {
7
- ProductDimensionValueInventoryAvailability,
8
7
  ProductDimensionType,
8
+ type ProductDimensionValueInventoryAvailability,
9
9
  } from "@msdyn365-commerce/retail-proxy";
10
- import { DimensionsContext } from "@evenicanpm/storefront-core/src/components-v2/product-dimensions/compound/dimensions";
10
+ import { Chip } from "@mui/material";
11
+ import React, { useContext } from "react";
11
12
 
12
13
  /**
13
14
  * @category Props
@@ -2,9 +2,9 @@
2
2
  * @module ProductDimensions
3
3
  */
4
4
  "use client";
5
+ import { DimensionsGroupContext } from "@evenicanpm/storefront-core/src/components-v2/product-dimensions/compound/dimensions-group";
5
6
  import { DimensionGroupListChip } from "@evenicanpm/storefront-core/src/components-v2/product-dimensions/compound/dimensions-group-list-chip";
6
7
  import { useContext } from "react";
7
- import { DimensionsGroupContext } from "@evenicanpm/storefront-core/src/components-v2/product-dimensions/compound/dimensions-group";
8
8
 
9
9
  /**
10
10
  * @category Sub-Component
@@ -19,6 +19,11 @@ export const DimensionGroupList = () => {
19
19
  const { dimensions } = context;
20
20
 
21
21
  return dimensions.map((dimension, i) => {
22
- return <DimensionGroupListChip dimension={dimension} key={i} />;
22
+ return (
23
+ <DimensionGroupListChip
24
+ dimension={dimension}
25
+ key={`dimension-${i + 1}`}
26
+ />
27
+ );
23
28
  });
24
29
  };
@@ -2,13 +2,12 @@
2
2
  * @module ProductDimensions
3
3
  */
4
4
  "use client";
5
- import Box from "@mui/material/Box";
6
- import { createContext } from "react";
7
- import { ProductDimensionValueInventoryAvailability } from "@msdyn365-commerce/retail-proxy";
8
- import { PropsWithChildren } from "react";
9
5
  import { DimensionGroupError } from "@evenicanpm/storefront-core/src/components-v2/product-dimensions/compound/dimensions-group-error";
10
6
  import { DimensionGroupLabel } from "@evenicanpm/storefront-core/src/components-v2/product-dimensions/compound/dimensions-group-label";
11
7
  import { DimensionGroupList } from "@evenicanpm/storefront-core/src/components-v2/product-dimensions/compound/dimensions-group-list";
8
+ import type { ProductDimensionValueInventoryAvailability } from "@msdyn365-commerce/retail-proxy";
9
+ import Box from "@mui/material/Box";
10
+ import { createContext, type PropsWithChildren } from "react";
12
11
 
13
12
  /**
14
13
  * @category Props
@@ -1,7 +1,11 @@
1
1
  "use client";
2
- import { ProductDimensionValueInventoryAvailability } from "@msdyn365-commerce/retail-proxy";
3
- import React, { PropsWithChildren, ReactElement, createContext } from "react";
4
2
  import { DimensionGroup } from "@evenicanpm/storefront-core/src/components-v2/product-dimensions/compound/dimensions-group";
3
+ import type { ProductDimensionValueInventoryAvailability } from "@msdyn365-commerce/retail-proxy";
4
+ import React, {
5
+ createContext,
6
+ type PropsWithChildren,
7
+ type ReactElement,
8
+ } from "react";
5
9
 
6
10
  /**
7
11
  * @category Context
@@ -1,8 +1,8 @@
1
1
  "use client";
2
- import { ProductDimensionValueInventoryAvailability } from "@msdyn365-commerce/retail-proxy";
3
2
  import { Dimensions } from "@evenicanpm/storefront-core/src/components-v2/product-dimensions/compound/dimensions";
3
+ import type { ProductDimensionValueInventoryAvailability } from "@msdyn365-commerce/retail-proxy";
4
4
 
5
- // TODO: When selecting a single dimension, loading spinner starts... not necessary, inefficient.
5
+ // When selecting a single dimension, loading spinner starts... not necessary, inefficient.
6
6
 
7
7
  export type Props = {
8
8
  dimensionGroups: ProductDimensionValueInventoryAvailability[][];
@@ -18,7 +18,7 @@ export default function ProductDimensions({
18
18
  selectDimensions,
19
19
  handleChangeVariant,
20
20
  showDimensionError,
21
- }: Props) {
21
+ }: Readonly<Props>) {
22
22
  return (
23
23
  <Dimensions
24
24
  dimensionGroups={dimensionGroups}
@@ -27,7 +27,7 @@ export default function ProductDimensions({
27
27
  showDimensionError={showDimensionError}
28
28
  >
29
29
  {dimensionGroups.map((group, i) => (
30
- <Dimensions.Group dimensions={group} key={i}>
30
+ <Dimensions.Group dimensions={group} key={`dim-grp-${i + 1}`}>
31
31
  <Dimensions.Group.Label />
32
32
  <Dimensions.Group.List />
33
33
  <Dimensions.Group.Error />
@@ -1,4 +1,4 @@
1
- import { ProductDimensionValueInventoryAvailability } from "@msdyn365-commerce/retail-proxy";
1
+ import type { ProductDimensionValueInventoryAvailability } from "@msdyn365-commerce/retail-proxy";
2
2
 
3
3
  /**
4
4
  * Checks if dimension exists
@@ -1,6 +1,7 @@
1
1
  // Replace your-framework with the framework you are using, e.g. react-vite, nextjs, nextjs-vite, etc.
2
- import React from "react";
2
+
3
3
  import type { Meta, StoryObj } from "@storybook/react";
4
+ import React from "react";
4
5
  import { QuantityButtons } from "./compound/quantity-buttons-root";
5
6
 
6
7
  const meta = {
@@ -1,16 +1,16 @@
1
1
  /**
2
2
  * @module ProductQuantityButtons
3
3
  */
4
- import React, { createContext, useContext, ReactNode } from "react";
4
+
5
5
  import { FlexBox } from "@evenicanpm/storefront-core/src/components-v2/flex-box";
6
- import Button from "@mui/material/Button";
7
- import { CartLine } from "@msdyn365-commerce/retail-proxy";
8
- import { useTranslations } from "next-intl";
9
- import { MdAdd as Add } from "react-icons/md";
10
- import { MdRemove as Remove } from "react-icons/md";
11
6
  import { H3 } from "@evenicanpm/storefront-core/src/components-v2/Typography";
12
- import CircularProgress from "@mui/material/CircularProgress";
13
7
  import useCart from "@evenicanpm/storefront-core/src/hooks/use-cart";
8
+ import type { CartLine } from "@msdyn365-commerce/retail-proxy";
9
+ import Button from "@mui/material/Button";
10
+ import CircularProgress from "@mui/material/CircularProgress";
11
+ import { useTranslations } from "next-intl";
12
+ import React, { createContext, type ReactNode, useContext } from "react";
13
+ import { MdAdd as Add, MdRemove as Remove } from "react-icons/md";
14
14
  // TODO: Encapsulate the addToCart api calls inside this component
15
15
  // so no need to pass in props.
16
16
 
@@ -84,7 +84,7 @@ export function QuantityButtons({
84
84
  isOOS = false,
85
85
  customAddToCart,
86
86
  children,
87
- }: QuantityButtonProps) {
87
+ }: Readonly<QuantityButtonProps>) {
88
88
  const t = useTranslations("productDetail");
89
89
 
90
90
  const { handleAddToCart, handleCartAmountChange, loading, currentCartLine } =
@@ -2,9 +2,12 @@
2
2
  * @component
3
3
  * @category Implementation component
4
4
  */
5
+
6
+ import {
7
+ type QuantityButtonProps,
8
+ QuantityButtons,
9
+ } from "@evenicanpm/storefront-core/src/components-v2/product-quantity-buttons/compound/quantity-buttons-root";
5
10
  import React from "react";
6
- import { QuantityButtons } from "@evenicanpm/storefront-core/src/components-v2/product-quantity-buttons/compound/quantity-buttons-root";
7
- import { QuantityButtonProps } from "@evenicanpm/storefront-core/src/components-v2/product-quantity-buttons/compound/quantity-buttons-root";
8
11
 
9
12
  /**
10
13
  * Pre-composed version of quantity buttons.
@@ -1,8 +1,9 @@
1
1
  // Replace your-framework with the framework you are using, e.g. react-vite, nextjs, nextjs-vite, etc.
2
- import React from "react";
2
+
3
3
  import type { Meta, StoryObj } from "@storybook/react";
4
- import QuantityButtons from "./index";
4
+ import React from "react";
5
5
  import { product } from "../../../__mocks__/product-dimensions";
6
+ import QuantityButtons from "./index";
6
7
 
7
8
  const meta = {
8
9
  title: "Product/DimensionsQuantitySelector",
@@ -1,21 +1,19 @@
1
1
  "use client";
2
- import { useState } from "react";
3
- import Box from "@mui/material/Box";
4
-
5
- // GLOBAL CUSTOM COMPONENTS
6
- import QuantityButtons from "@evenicanpm/storefront-core/src/components-v2/product-quantity-buttons";
7
2
  // API MANAGER
8
- import { ProductDetails } from "@evenicanpm/storefront-core/src/api-manager/schemas/product.schema";
3
+ import type { ProductDetails } from "@evenicanpm/storefront-core/src/api-manager/schemas/product.schema";
9
4
  import getProductAvailability from "@evenicanpm/storefront-core/src/api-manager/services/product/queries/get-product-availability";
10
-
11
- // LOCAL HOOKS
12
- import useVariants from "@evenicanpm/storefront-core/src/hooks/use-variants";
5
+ // LOCAL COMPONENTS
6
+ import ProductDimensions from "@evenicanpm/storefront-core/src/components-v2/product-dimensions";
7
+ // GLOBAL CUSTOM COMPONENTS
8
+ import QuantityButtons from "@evenicanpm/storefront-core/src/components-v2/product-quantity-buttons";
13
9
  import useCart, {
14
- AddToCartBopisInput,
10
+ type AddToCartBopisInput,
15
11
  } from "@evenicanpm/storefront-core/src/hooks/use-cart";
16
12
 
17
- // LOCAL COMPONENTS
18
- import ProductDimensions from "@evenicanpm/storefront-core/src/components-v2/product-dimensions";
13
+ // LOCAL HOOKS
14
+ import useVariants from "@evenicanpm/storefront-core/src/hooks/use-variants";
15
+ import Box from "@mui/material/Box";
16
+ import { useState } from "react";
19
17
 
20
18
  interface Props {
21
19
  product: ProductDetails;
@@ -29,7 +27,7 @@ interface Props {
29
27
  * and the quantity selector component. These two components are usually
30
28
  * used together so this is a pre-wired version for convenience.
31
29
  */
32
- export default function QuantityVariantsSelect({ product }: Props) {
30
+ export default function QuantityVariantsSelect({ product }: Readonly<Props>) {
33
31
  const [showDimensionError, setShowDimensionError] = useState(false);
34
32
 
35
33
  const { DimensionValues, RecordId } = product;
@@ -41,7 +39,9 @@ export default function QuantityVariantsSelect({ product }: Props) {
41
39
  allDimensionsSelected,
42
40
  } = useVariants(product);
43
41
 
44
- const { handleAddToCart } = useCart(selectedVariant?.RecordId);
42
+ const productId = selectedVariant?.RecordId ?? RecordId;
43
+
44
+ const { handleAddToCart } = useCart(productId);
45
45
 
46
46
  const searchCriteria = {
47
47
  searchCriteria: {
@@ -61,7 +61,6 @@ export default function QuantityVariantsSelect({ product }: Props) {
61
61
  const OOSCode = "OOS"; // Always means out of stock
62
62
 
63
63
  const aggregateCode =
64
- shippingInventoryData?.AggregatedProductInventoryAvailabilities &&
65
64
  shippingInventoryData?.AggregatedProductInventoryAvailabilities?.[0]
66
65
  ?.TotalAvailableInventoryLevelCode;
67
66
 
@@ -1,8 +1,9 @@
1
1
  // Replace your-framework with the framework you are using, e.g. react-vite, nextjs, nextjs-vite, etc.
2
- import React from "react";
2
+
3
3
  import type { Meta, StoryObj } from "@storybook/react";
4
- import { ProductsGrid } from "./index";
4
+ import React from "react";
5
5
  import { data, prices } from "../../../__mocks__/products";
6
+ import { ProductsGrid } from "./index";
6
7
 
7
8
  const meta = {
8
9
  title: "Product/ListGrid",
@@ -1,10 +1,9 @@
1
1
  // Replace your-framework with the framework you are using, e.g. react-vite, nextjs, nextjs-vite, etc.
2
- import React from "react";
2
+
3
3
  import type { Meta, StoryObj } from "@storybook/react";
4
- import { ProductsList } from "./index";
4
+ import React from "react";
5
5
  import { data, prices } from "../../../__mocks__/products";
6
- //import { useSession } from "next-auth/react";
7
- import { expect, mocked } from "storybook/test";
6
+ import { ProductsList } from "./index";
8
7
 
9
8
  const meta = {
10
9
  title: "Product/ListList",