@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,6 +1,4 @@
1
1
  "use client";
2
- import Grid from "@mui/material/Grid2";
3
- import React, { useContext, useState } from "react";
4
2
  // GLOBAL CUSTOM COMPONENTS
5
3
  import {
6
4
  FlexBox,
@@ -12,6 +10,9 @@ import {
12
10
  ProductIntroContext,
13
11
  } from "@evenicanpm/storefront-core/src/pages-v2/product-details/product-intro/compound/context";
14
12
  import ThumbnailWithSkeleton from "@evenicanpm/storefront-core/src/pages-v2/product-details/product-intro/compound/thumbnail-with-skeleton";
13
+ import Grid from "@mui/material/Grid2";
14
+ import type React from "react";
15
+ import { useContext, useState } from "react";
15
16
 
16
17
  type Props = {
17
18
  children: React.ReactNode;
@@ -20,7 +21,7 @@ type Props = {
20
21
  /**
21
22
  * @category Compound Component
22
23
  */
23
- export default function ProductImages({ children }: Props) {
24
+ export default function ProductImages({ children }: Readonly<Props>) {
24
25
  const [selectedImageIndex, setSelectedImageIndex] = useState<number>(0);
25
26
 
26
27
  const ctx = useContext(ProductIntroContext);
@@ -33,12 +34,19 @@ export default function ProductImages({ children }: Props) {
33
34
  * VARIANT SELECTION - IF VARIANT HAS IMAGES, USE THOSE
34
35
  * IF NOT USE masterProduct
35
36
  */
36
- const images =
37
- Array.isArray(selectedVariant?.Images) && selectedVariant?.Images.length > 0
38
- ? selectedVariant?.Images
39
- : Array.isArray(masterProduct?.Images) && masterProduct?.Images.length > 0
40
- ? masterProduct?.Images
41
- : [];
37
+ let images: string[] = [];
38
+
39
+ if (
40
+ Array.isArray(selectedVariant?.Images) &&
41
+ selectedVariant.Images.length > 0
42
+ ) {
43
+ images = selectedVariant.Images;
44
+ } else if (
45
+ Array.isArray(masterProduct?.Images) &&
46
+ masterProduct.Images.length > 0
47
+ ) {
48
+ images = masterProduct.Images;
49
+ }
42
50
 
43
51
  const primaryImageUrl =
44
52
  selectedVariant?.PrimaryImageUrl || masterProduct?.PrimaryImageUrl || "";
@@ -79,30 +87,28 @@ ProductImages.Thumbnails = () => {
79
87
  const { images, handleImageClick, selectedImageIndex } = ctx;
80
88
 
81
89
  return (
82
- <>
83
- <FlexBox overflow="auto" gap={1} justifyContent="center">
84
- {images?.map((url: string, ind: number) => {
85
- return (
86
- <FlexRowCenter
87
- key={ind}
88
- width={64}
89
- height={64}
90
- minWidth={64}
91
- bgcolor="white"
92
- border="1px solid"
93
- borderRadius="10px"
94
- style={{ cursor: "pointer" }}
95
- onClick={handleImageClick(ind)}
96
- borderColor={
97
- selectedImageIndex === ind ? "primary.main" : "grey.400"
98
- }
99
- >
100
- <ThumbnailWithSkeleton src={url} />
101
- </FlexRowCenter>
102
- );
103
- })}
104
- </FlexBox>
105
- </>
90
+ <FlexBox overflow="auto" gap={1} justifyContent="center">
91
+ {images?.map((url: string, ind: number) => {
92
+ return (
93
+ <FlexRowCenter
94
+ key={`thumbnail-${ind + 1}`}
95
+ width={64}
96
+ height={64}
97
+ minWidth={64}
98
+ bgcolor="white"
99
+ border="1px solid"
100
+ borderRadius="10px"
101
+ style={{ cursor: "pointer" }}
102
+ onClick={handleImageClick(ind)}
103
+ borderColor={
104
+ selectedImageIndex === ind ? "primary.main" : "grey.400"
105
+ }
106
+ >
107
+ <ThumbnailWithSkeleton src={url} />
108
+ </FlexRowCenter>
109
+ );
110
+ })}
111
+ </FlexBox>
106
112
  );
107
113
  };
108
114
 
@@ -1,12 +1,12 @@
1
1
  "use client";
2
- import React from "react";
3
- import Box from "@mui/material/Box";
4
- import Grid from "@mui/material/Grid2";
5
- import { ProductDetails } from "@evenicanpm/storefront-core/src/api-manager/schemas/product.schema";
2
+ import type { ProductDetails } from "@evenicanpm/storefront-core/src/api-manager/schemas/product.schema";
6
3
  import useVariants from "@evenicanpm/storefront-core/src/hooks/use-variants";
7
- import ProductImages from "@evenicanpm/storefront-core/src/pages-v2/product-details/product-intro/compound/product-intro-images";
8
- import ProductInfo from "@evenicanpm/storefront-core/src/pages-v2/product-details/product-intro/compound/product-info";
9
4
  import { ProductIntroContext } from "@evenicanpm/storefront-core/src/pages-v2/product-details/product-intro/compound/context";
5
+ import ProductInfo from "@evenicanpm/storefront-core/src/pages-v2/product-details/product-intro/compound/product-info";
6
+ import ProductImages from "@evenicanpm/storefront-core/src/pages-v2/product-details/product-intro/compound/product-intro-images";
7
+ import Box from "@mui/material/Box";
8
+ import Grid from "@mui/material/Grid2";
9
+ import type React from "react";
10
10
 
11
11
  /**
12
12
  * Master product data comes in as prop, selected variant details are called
@@ -14,7 +14,7 @@ import { ProductIntroContext } from "@evenicanpm/storefront-core/src/pages-v2/pr
14
14
  */
15
15
  type Props = { product: ProductDetails; children: React.ReactNode };
16
16
 
17
- export default function ProductIntro({ product, children }: Props) {
17
+ export default function ProductIntro({ product, children }: Readonly<Props>) {
18
18
  // HOOKS
19
19
  const {
20
20
  selectedVariant,
@@ -1,11 +1,11 @@
1
- import { useState } from "react";
2
1
  import { Skeleton } from "@mui/material";
2
+ import { useState } from "react";
3
3
 
4
4
  /**
5
5
  * Shows a skeleton until the image loads
6
6
  * @category Sub-Component
7
7
  */
8
- function ThumbnailWithSkeleton({ src }: { src: string }) {
8
+ function ThumbnailWithSkeleton({ src }: Readonly<{ src: string }>) {
9
9
  const [loaded, setLoaded] = useState(false);
10
10
 
11
11
  return (
@@ -1,11 +1,10 @@
1
- import { ProductWarehouseInventoryInformation } from "@msdyn365-commerce/retail-proxy";
1
+ import type { ProductWarehouseInventoryInformation } from "@msdyn365-commerce/retail-proxy";
2
2
 
3
3
  export const getInventoryLabel = (
4
4
  shippingInventoryData?: ProductWarehouseInventoryInformation,
5
5
  ): string | null => {
6
6
  const aggregate =
7
- shippingInventoryData?.AggregatedProductInventoryAvailabilities &&
8
- shippingInventoryData?.AggregatedProductInventoryAvailabilities[0];
7
+ shippingInventoryData?.AggregatedProductInventoryAvailabilities?.[0];
9
8
  if (aggregate) {
10
9
  const { TotalAvailableInventoryLevelLabel } = aggregate;
11
10
  return TotalAvailableInventoryLevelLabel || null;
@@ -19,8 +18,7 @@ export const checkProductOOS = (
19
18
  //TODO: Incorporate global inventory enabled flag.
20
19
  const OOSCode = "OOS"; // Always means out of stock
21
20
  const aggregate =
22
- shippingInventoryData?.AggregatedProductInventoryAvailabilities &&
23
- shippingInventoryData?.AggregatedProductInventoryAvailabilities[0];
21
+ shippingInventoryData?.AggregatedProductInventoryAvailabilities?.[0];
24
22
  if (aggregate) {
25
23
  const { TotalAvailableInventoryLevelCode } = aggregate;
26
24
  return TotalAvailableInventoryLevelCode === OOSCode;
@@ -1,19 +1,19 @@
1
1
  "use client";
2
2
 
3
- import Box from "@mui/material/Box";
4
- import Button from "@mui/material/Button";
5
- import Rating from "@mui/material/Rating";
6
- import TextField from "@mui/material/TextField";
7
- import * as yup from "yup";
8
- import { useFormik } from "formik";
9
- // Local CUSTOM COMPONENT
10
- import ProductComment from "@evenicanpm/storefront-core/src/pages-v2/product-details/product-comment";
11
3
  // GLOBAL CUSTOM COMPONENTS
12
4
  import { FlexBox } from "@evenicanpm/storefront-core/src/components-v2/flex-box";
13
5
  import {
14
6
  H2,
15
7
  H5,
16
8
  } from "@evenicanpm/storefront-core/src/components-v2/Typography";
9
+ // Local CUSTOM COMPONENT
10
+ import ProductComment from "@evenicanpm/storefront-core/src/pages-v2/product-details/product-comment";
11
+ import Box from "@mui/material/Box";
12
+ import Button from "@mui/material/Button";
13
+ import Rating from "@mui/material/Rating";
14
+ import TextField from "@mui/material/TextField";
15
+ import { useFormik } from "formik";
16
+ import * as yup from "yup";
17
17
 
18
18
  export default function ProductReview() {
19
19
  const initialValues = {
@@ -48,7 +48,7 @@ export default function ProductReview() {
48
48
  return (
49
49
  <div>
50
50
  {commentList.map((item, ind) => (
51
- <ProductComment {...item} key={ind} />
51
+ <ProductComment {...item} key={`comment-${ind + 1}`} />
52
52
  ))}
53
53
 
54
54
  <H2 fontWeight="600" mt={7} mb={2.5}>
@@ -1,14 +1,14 @@
1
1
  "use client";
2
2
 
3
- import React, { useContext, useState, createContext } from "react";
3
+ // LOCAL CUSTOM COMPONENTS
4
+ import ProductDescription from "@evenicanpm/storefront-core/src/pages-v2/product-details/product-description";
5
+ import type { AttributeValue } from "@msdyn365-commerce/retail-proxy";
4
6
  import Box from "@mui/material/Box";
7
+ import styled from "@mui/material/styles/styled";
5
8
  import Tab from "@mui/material/Tab";
6
9
  import Tabs from "@mui/material/Tabs";
7
- import styled from "@mui/material/styles/styled";
8
-
9
- // LOCAL CUSTOM COMPONENTS
10
- import ProductDescription from "@evenicanpm/storefront-core/src/pages-v2/product-details/product-description";
11
- import { AttributeValue } from "@msdyn365-commerce/retail-proxy";
10
+ import type React from "react";
11
+ import { createContext, useContext, useState } from "react";
12
12
 
13
13
  // STYLED COMPONENT
14
14
  const StyledTabs = styled(Tabs)(({ theme }) => ({
@@ -37,7 +37,7 @@ interface TabPanelProps {
37
37
  value: number;
38
38
  }
39
39
 
40
- function CustomTabPanel(props: TabPanelProps) {
40
+ function CustomTabPanel(props: Readonly<TabPanelProps>) {
41
41
  const { children, value, index, ...other } = props;
42
42
 
43
43
  return (
@@ -52,7 +52,10 @@ const TabsContext = createContext<TabsContext | null>(null);
52
52
  /**
53
53
  * @category Compound Component
54
54
  */
55
- export default function ProductTabs({ productAttributes, children }: Props) {
55
+ export default function ProductTabs({
56
+ productAttributes,
57
+ children,
58
+ }: Readonly<Props>) {
56
59
  const [selectedOption, setSelectedOption] = useState(0);
57
60
  const handleOptionClick = (_: React.SyntheticEvent, value: number) =>
58
61
  setSelectedOption(value);
@@ -1,18 +1,18 @@
1
1
  "use client";
2
2
 
3
- import Box from "@mui/material/Box";
4
- import Grid from "@mui/material/Grid2";
5
- // GLOBAL CUSTOM COMPONENTS
6
- import { H3 } from "@evenicanpm/storefront-core/src/components-v2/Typography";
7
- import ProductCard from "@evenicanpm/storefront-core/src/components-v2/product-cards/product-card/product-card";
8
3
  // CUSTOM DATA MODEL
9
4
  import GetRelatedProductsDataFetcher from "@evenicanpm/storefront-core/src/api-manager/services/product/queries/get-related-products";
5
+ import ProductCard from "@evenicanpm/storefront-core/src/components-v2/product-cards/product-card/product-card";
6
+ // GLOBAL CUSTOM COMPONENTS
7
+ import { H3 } from "@evenicanpm/storefront-core/src/components-v2/Typography";
8
+ import Box from "@mui/material/Box";
9
+ import Grid from "@mui/material/Grid2";
10
10
 
11
11
  // ==============================================================
12
12
  type Props = { RecordId: number };
13
13
  // ==============================================================
14
14
 
15
- export default function RelatedProducts({ RecordId }: Props) {
15
+ export default function RelatedProducts({ RecordId }: Readonly<Props>) {
16
16
  const { data: products } = GetRelatedProductsDataFetcher.useData({
17
17
  id: RecordId,
18
18
  });
@@ -21,12 +21,15 @@ export default function RelatedProducts({ RecordId }: Props) {
21
21
  <H3 mb={3}>Related Products</H3>
22
22
 
23
23
  <Grid container spacing={3}>
24
- {products?.map((item, ind) => (
25
- <Grid size={{ lg: 3, md: 4, sm: 6, xs: 12 }} key={ind}>
24
+ {products?.map((item) => (
25
+ <Grid
26
+ size={{ lg: 3, md: 4, sm: 6, xs: 12 }}
27
+ key={item.RecordId ?? item.ItemId}
28
+ >
26
29
  <ProductCard
27
30
  product={{
28
31
  id: item.ItemId ?? "",
29
- slug: String(item?.RecordId) ?? "",
32
+ slug: String(item?.RecordId ?? ""),
30
33
  title: item.Name ?? "",
31
34
  price: item.Price ?? 0,
32
35
  imgUrl: item.PrimaryImageUrl ?? "",
@@ -1,11 +1,11 @@
1
+ import type { CategoryHierarchy } from "@evenicanpm/storefront-core/src/lib/category-helpers";
1
2
  import { Breadcrumbs, Typography } from "@mui/material";
2
- import React from "react";
3
3
  import Link from "next/link";
4
+ import React from "react";
4
5
  import {
5
6
  getCategoryTranslatedName,
6
7
  getCategoryUrl,
7
8
  } from "./utils/search-for-category";
8
- import { CategoryHierarchy } from "@evenicanpm/storefront-core/src/lib/category-helpers";
9
9
 
10
10
  type Props = {
11
11
  breadcrumbs: CategoryHierarchy[];
@@ -17,7 +17,7 @@ export default function CategoryBreadcrumbs({
17
17
  breadcrumbs,
18
18
  locale,
19
19
  productName,
20
- }: Props) {
20
+ }: Readonly<Props>) {
21
21
  return (
22
22
  <Breadcrumbs>
23
23
  {breadcrumbs.map((bc, index) =>
@@ -1,7 +1,7 @@
1
- import { ReactNode } from "react";
1
+ import Checkbox, { type CheckboxProps } from "@mui/material/Checkbox";
2
2
  // MUI
3
3
  import FormControlLabel from "@mui/material/FormControlLabel";
4
- import Checkbox, { CheckboxProps } from "@mui/material/Checkbox";
4
+ import type { ReactNode } from "react";
5
5
 
6
6
  // ==============================================================
7
7
  interface Props extends CheckboxProps {
@@ -9,7 +9,7 @@ interface Props extends CheckboxProps {
9
9
  }
10
10
  // ==============================================================
11
11
 
12
- export default function CheckboxLabel({ label, ...props }: Props) {
12
+ export default function CheckboxLabel({ label, ...props }: Readonly<Props>) {
13
13
  return (
14
14
  <FormControlLabel
15
15
  label={label}
@@ -1,19 +1,19 @@
1
1
  import { H6 } from "@evenicanpm/storefront-core/src/components-v2/Typography";
2
+ import { areRefinersEqual } from "@evenicanpm/storefront-core/src/lib/refiner-utils";
2
3
  import {
3
4
  AttributeDataType,
4
5
  DisplayTemplate,
5
- ProductRefiner,
6
+ type ProductRefiner,
6
7
  ProductRefinerSource,
7
- ProductRefinerValue,
8
+ type ProductRefinerValue,
8
9
  } from "@msdyn365-commerce/retail-proxy";
10
+ import ExpandLessIcon from "@mui/icons-material/ExpandLess";
11
+ import ExpandMoreIcon from "@mui/icons-material/ExpandMore";
9
12
  import { Box, ButtonBase, Collapse, FormGroup } from "@mui/material";
10
13
  import React from "react";
11
- import ExpandMoreIcon from "@mui/icons-material/ExpandMore";
12
- import ExpandLessIcon from "@mui/icons-material/ExpandLess";
13
- import Swatch from "./swatch";
14
- import RangeFilter from "./range-filter";
15
14
  import ListFilter from "./list-filter";
16
- import { areRefinersEqual } from "@evenicanpm/storefront-core/src/lib/refiner-utils";
15
+ import RangeFilter from "./range-filter";
16
+ import Swatch from "./swatch";
17
17
 
18
18
  type Props = {
19
19
  facet: ProductRefiner;
@@ -31,7 +31,7 @@ export default function FacetGroup({
31
31
  facet,
32
32
  selectedRefiners,
33
33
  handleRefinerSelect,
34
- }: Props) {
34
+ }: Readonly<Props>) {
35
35
  const isAnyRefinerFromFacetSelected = () =>
36
36
  facet.Values?.some((v) => isRefinerSelected(v));
37
37
  const isRefinerSelected = (r1: ProductRefinerValue) =>
@@ -1,12 +1,13 @@
1
1
  "use client";
2
2
 
3
- import React, { createContext, useContext } from "react";
4
- import { Box, Divider } from "@mui/material";
5
3
  import FacetGroup from "@evenicanpm/storefront-core/src/pages/product-list/facet-group";
6
- import {
4
+ import type {
7
5
  ProductRefiner,
8
6
  ProductRefinerValue,
9
7
  } from "@msdyn365-commerce/retail-proxy";
8
+ import { Box, Divider } from "@mui/material";
9
+ import type React from "react";
10
+ import { createContext, useContext } from "react";
10
11
 
11
12
  type Ctx = {
12
13
  facets: ProductRefiner[];
@@ -1,14 +1,14 @@
1
- import { ProductRefinerValue } from "@msdyn365-commerce/retail-proxy";
2
- import React from "react";
3
- import CheckboxLabel from "./checkbox-label";
4
1
  import {
5
2
  FlexBetween,
6
3
  FlexBox,
7
4
  } from "@evenicanpm/storefront-core/src/components-v2/flex-box";
8
5
  import { Span } from "@evenicanpm/storefront-core/src/components-v2/Typography";
9
- import { RenderedFacetProps } from "./facet-group";
6
+ import type { ProductRefinerValue } from "@msdyn365-commerce/retail-proxy";
7
+ import React from "react";
8
+ import CheckboxLabel from "./checkbox-label";
9
+ import type { RenderedFacetProps } from "./facet-group";
10
10
 
11
- type Props = RenderedFacetProps & NonNullable<unknown>;
11
+ type Props = RenderedFacetProps;
12
12
 
13
13
  const generateKey = (f: ProductRefinerValue) => {
14
14
  return `${f.LeftValueBoundString}-${f.RefinerRecordId}`;
@@ -18,7 +18,7 @@ export default function ListFilter({
18
18
  facet,
19
19
  handleRefinerSelect,
20
20
  isRefinerSelected,
21
- }: Props) {
21
+ }: Readonly<Props>) {
22
22
  const createFacetLabel = (f: ProductRefinerValue) => {
23
23
  const label = f.LeftValueBoundLocalizedString || f.LeftValueBoundString;
24
24
  return (
@@ -1,8 +1,8 @@
1
1
  "use client";
2
- import { ChangeEvent } from "react";
3
- import MuiPagination, { PaginationProps } from "@mui/material/Pagination";
4
2
  import { Span } from "@evenicanpm/storefront-core/src/components-v2/Typography";
3
+ import MuiPagination, { type PaginationProps } from "@mui/material/Pagination";
5
4
  import { useTranslations } from "next-intl";
5
+ import type { ChangeEvent } from "react";
6
6
 
7
7
  export interface PageInfo {
8
8
  top?: number;
@@ -1,27 +1,21 @@
1
- import {
1
+ import type {
2
+ ProductPrice,
2
3
  SearchByCriteriaInput,
3
4
  SearchByCriteriaResponse,
4
- ProductPrice,
5
5
  } from "@evenicanpm/storefront-core/src/api-manager/schemas/product.schema";
6
- import { parseAsInteger, parseAsString, useQueryState } from "nuqs";
7
- import React, { createContext, useMemo, useCallback } from "react";
8
- import {
9
- PageKey,
10
- ProductListParamHandlers,
11
- SortOption,
12
- ViewMode,
13
- } from "./utils/product-list-types";
14
- import {
15
- ProductRefinerSource,
16
- ProductRefinerValue,
17
- } from "@msdyn365-commerce/retail-proxy";
6
+ import getProductList from "@evenicanpm/storefront-core/src/api-manager/services/product/queries/get-product-list";
7
+ import getProductPrices from "@evenicanpm/storefront-core/src/api-manager/services/product/queries/get-product-prices";
18
8
  import {
19
9
  areRefinersEqual,
20
10
  convertRefinerToParameter,
21
11
  } from "@evenicanpm/storefront-core/src/lib/refiner-utils";
22
- import getProductList from "@evenicanpm/storefront-core/src/api-manager/services/product/queries/get-product-list";
23
- import getSortOptions from "./utils/sort-options";
12
+ import {
13
+ ProductRefinerSource,
14
+ type ProductRefinerValue,
15
+ } from "@msdyn365-commerce/retail-proxy";
24
16
  import { usePathname, useSearchParams } from "next/navigation";
17
+ import { parseAsInteger, parseAsString, useQueryState } from "nuqs";
18
+ import React, { createContext, useCallback, useMemo } from "react";
25
19
  import {
26
20
  buildInitialState,
27
21
  calculatePage,
@@ -29,7 +23,13 @@ import {
29
23
  getDefaultValueByPageKey,
30
24
  getSelectedSortOption,
31
25
  } from "./utils/product-list-helper";
32
- import getProductPrices from "@evenicanpm/storefront-core/src/api-manager/services/product/queries/get-product-prices";
26
+ import {
27
+ PageKey,
28
+ type ProductListParamHandlers,
29
+ type SortOption,
30
+ type ViewMode,
31
+ } from "./utils/product-list-types";
32
+ import getSortOptions from "./utils/sort-options";
33
33
  export type ProductListContextType = {
34
34
  productData: SearchByCriteriaResponse;
35
35
  isLoading: boolean;
@@ -117,8 +117,10 @@ const ProductListProvider = ({ children }: { children: React.ReactNode }) => {
117
117
  const refiners = newInputParams.searchState.refinement;
118
118
  const priceIndex = ProductRefinerSource.Price;
119
119
  const idx = refiners.findIndex((r) => areRefinersEqual(r, refiner));
120
+
120
121
  if (refiner.RefinerSourceValue === priceIndex) {
121
122
  const priceRefiner = refiners[idx];
123
+
122
124
  if (idx > -1) {
123
125
  if (
124
126
  priceRefiner.LeftValueBoundString ===
@@ -133,7 +135,9 @@ const ProductListProvider = ({ children }: { children: React.ReactNode }) => {
133
135
  } else {
134
136
  refiners.push(refiner);
135
137
  }
136
- } else {
138
+ }
139
+
140
+ if (refiner.RefinerSourceValue !== priceIndex) {
137
141
  if (idx > -1) {
138
142
  refiners.splice(idx, 1);
139
143
  } else {
@@ -1,22 +1,22 @@
1
- import { SearchByCriteriaInput } from "@evenicanpm/storefront-core/src/api-manager/schemas/product.schema";
2
- import { parseAsInteger, parseAsString, useQueryState } from "nuqs";
3
- import React from "react";
4
- import {
5
- PageKey,
6
- ProductListParamHandlers,
7
- ViewMode,
8
- } from "./utils/product-list-types";
9
- import {
10
- IQueryResultSettings,
11
- ProductRefinerValue,
12
- } from "@msdyn365-commerce/retail-proxy";
1
+ import type { SearchByCriteriaInput } from "@evenicanpm/storefront-core/src/api-manager/schemas/product.schema";
2
+ import getProductList from "@evenicanpm/storefront-core/src/api-manager/services/product/queries/get-product-list";
13
3
  import {
14
4
  areRefinersEqual,
15
5
  convertParameterToRefiner,
16
6
  convertRefinerToParameter,
17
7
  } from "@evenicanpm/storefront-core/src/lib/refiner-utils";
18
- import getProductList from "@evenicanpm/storefront-core/src/api-manager/services/product/queries/get-product-list";
19
- import { SortOption } from "./types";
8
+ import type {
9
+ IQueryResultSettings,
10
+ ProductRefinerValue,
11
+ } from "@msdyn365-commerce/retail-proxy";
12
+ import { parseAsInteger, parseAsString, useQueryState } from "nuqs";
13
+ import React from "react";
14
+ import type { SortOption } from "./types";
15
+ import {
16
+ PageKey,
17
+ type ProductListParamHandlers,
18
+ type ViewMode,
19
+ } from "./utils/product-list-types";
20
20
  import getSortOptions from "./utils/sort-options";
21
21
 
22
22
  const calculatePage = (searchState: IQueryResultSettings) => {
@@ -1,26 +1,24 @@
1
1
  "use client";
2
2
 
3
- import React, { ReactNode, createContext, useContext } from "react";
4
- import { Box, CircularProgress, Paper, Typography } from "@mui/material";
5
- import Grid from "@mui/material/Grid2";
6
- import { useLocale, useTranslations } from "next-intl";
7
-
8
- import CategoryBreadcrumbs from "@evenicanpm/storefront-core/src/pages/product-list/breadcrumbs";
9
- import SelectedFacets from "@evenicanpm/storefront-core/src/pages/product-list/selected-facets";
10
- import Facet from "@evenicanpm/storefront-core/src/pages-v2/product-list/facet";
11
- import Pagination from "@evenicanpm/storefront-core/src/pages/product-list/pagination";
12
- import SearchBar from "@evenicanpm/storefront-core/src/pages-v2/product-list/search-bar";
13
- import { Paragraph } from "@evenicanpm/storefront-core/src/components-v2/Typography";
14
3
  import getCategories from "@evenicanpm/storefront-core/src/api-manager/services/categories/queries/get-categories";
15
- import { searchCategory } from "@evenicanpm/storefront-core/src/pages/product-list/utils/search-for-category";
16
- import generateBreadcrumbs from "@evenicanpm/storefront-core/src/pages/product-list/utils/generate-breadcrumbs";
17
- import { usePreviousRefiners } from "@evenicanpm/storefront-core/src/pages/product-list/utils/use-previous-refiners";
18
- import useProductList from "@evenicanpm/storefront-core/src/pages/product-list/use-product-list";
19
-
20
4
  import {
21
5
  ProductsGrid,
22
6
  ProductsList,
23
7
  } from "@evenicanpm/storefront-core/src/components-v2/products-view";
8
+ import { Paragraph } from "@evenicanpm/storefront-core/src/components-v2/Typography";
9
+ import CategoryBreadcrumbs from "@evenicanpm/storefront-core/src/pages/product-list/breadcrumbs";
10
+ import Pagination from "@evenicanpm/storefront-core/src/pages/product-list/pagination";
11
+ import SelectedFacets from "@evenicanpm/storefront-core/src/pages/product-list/selected-facets";
12
+ import useProductList from "@evenicanpm/storefront-core/src/pages/product-list/use-product-list";
13
+ import generateBreadcrumbs from "@evenicanpm/storefront-core/src/pages/product-list/utils/generate-breadcrumbs";
14
+ import { searchCategory } from "@evenicanpm/storefront-core/src/pages/product-list/utils/search-for-category";
15
+ import { usePreviousRefiners } from "@evenicanpm/storefront-core/src/pages/product-list/utils/use-previous-refiners";
16
+ import Facet from "@evenicanpm/storefront-core/src/pages-v2/product-list/facet";
17
+ import SearchBar from "@evenicanpm/storefront-core/src/pages-v2/product-list/search-bar";
18
+ import { Box, CircularProgress, Paper, Typography } from "@mui/material";
19
+ import Grid from "@mui/material/Grid2";
20
+ import { useLocale, useTranslations } from "next-intl";
21
+ import React, { createContext, type ReactNode, useContext } from "react";
24
22
 
25
23
  type PLViewCtx = { categoryId: number };
26
24
  const ProductListViewContext = createContext<PLViewCtx | null>(null);
@@ -34,7 +32,10 @@ const usePLV = () => {
34
32
  };
35
33
 
36
34
  type RootProps = { categoryId: number; children?: ReactNode };
37
- export default function ProductListView({ categoryId, children }: RootProps) {
35
+ export default function ProductListView({
36
+ categoryId,
37
+ children,
38
+ }: Readonly<RootProps>) {
38
39
  return (
39
40
  <ProductListViewContext.Provider value={{ categoryId }}>
40
41
  {children}
@@ -1,12 +1,15 @@
1
- import Rating from "@mui/material/Rating";
2
- import { BoxProps } from "@mui/material/Box";
3
1
  import { Box, Typography } from "@mui/material";
2
+ import type { BoxProps } from "@mui/material/Box";
3
+ import Rating from "@mui/material/Rating";
4
4
 
5
5
  interface Props extends BoxProps {
6
6
  rating: number;
7
7
  }
8
8
 
9
- export default function ProductRating({ rating = 0, ...props }: Props) {
9
+ export default function ProductRating({
10
+ rating = 0,
11
+ ...props
12
+ }: Readonly<Props>) {
10
13
  return (
11
14
  <Box display="flex" gap={1} alignItems="center" {...props}>
12
15
  <Rating size="small" value={rating} color="warn" readOnly />