@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,10 +1,11 @@
1
1
  /**
2
2
  * @module ProductsView
3
3
  */
4
- import { createContext, useContext } from "react";
4
+
5
+ import type { ProductPrice } from "@evenicanpm/storefront-core/src/api-manager/schemas/product.schema";
5
6
  // DATA MODEL
6
- import { ProductSearchResult as Product } from "@msdyn365-commerce/retail-proxy";
7
- import { ProductPrice } from "@evenicanpm/storefront-core/src/api-manager/schemas/product.schema";
7
+ import type { ProductSearchResult as Product } from "@msdyn365-commerce/retail-proxy";
8
+ import { createContext, useContext } from "react";
8
9
 
9
10
  /**
10
11
  * Shared context value for the products list passed into root component.
@@ -1,21 +1,22 @@
1
1
  /**
2
2
  * @module ProductsView
3
3
  */
4
- import React from "react";
5
- import Grid from "@mui/material/Grid2";
4
+
5
+ import type { ProductPrice } from "@evenicanpm/storefront-core/src/api-manager/schemas/product.schema";
6
6
  // GLOBAL CUSTOM COMPONENTS
7
7
  import { FlexBetween } from "@evenicanpm/storefront-core/src/components-v2/flex-box/index";
8
8
  import ProductCardPlp from "@evenicanpm/storefront-core/src/components-v2/product-cards/product-card-plp/product-card";
9
- // DATA MODEL
10
- import { ProductSearchResult as Product } from "@msdyn365-commerce/retail-proxy";
11
9
  import {
12
10
  ProductsViewCardContext,
13
11
  ProductsViewContext,
14
12
  useProductsView,
15
13
  } from "@evenicanpm/storefront-core/src/components-v2/products-view/compound/context";
16
- import { ProductsViewProps } from "@evenicanpm/storefront-core/src/components-v2/products-view/compound/types";
14
+ import type { ProductsViewProps } from "@evenicanpm/storefront-core/src/components-v2/products-view/compound/types";
15
+ // DATA MODEL
16
+ import type { ProductSearchResult as Product } from "@msdyn365-commerce/retail-proxy";
17
+ import Grid from "@mui/material/Grid2";
18
+ import type React from "react";
17
19
  import { cloneElement } from "react";
18
- import { ProductPrice } from "@evenicanpm/storefront-core/src/api-manager/schemas/product.schema";
19
20
 
20
21
  /**
21
22
  * Root component of products grid view.
@@ -29,7 +30,7 @@ import { ProductPrice } from "@evenicanpm/storefront-core/src/api-manager/schema
29
30
  * </ProductsGridView.Container>
30
31
  * </ProductsGridView>
31
32
  */
32
- export default function ProductsGridView(props: ProductsViewProps) {
33
+ export default function ProductsGridView(props: Readonly<ProductsViewProps>) {
33
34
  const { products, productPrices, pagination, children } = props;
34
35
 
35
36
  return (
@@ -67,7 +68,7 @@ ProductsGridView.Grid = ({ children }: { children: React.ReactElement }) => {
67
68
  value={{ price: matchingPrice, product }}
68
69
  >
69
70
  {cloneElement(children, {
70
- key: i,
71
+ key: product.RecordId ?? product.ItemId,
71
72
  product: product,
72
73
  price: matchingPrice,
73
74
  })}
@@ -1,23 +1,24 @@
1
1
  /**
2
2
  * @module ProductsView
3
3
  */
4
- import { cloneElement } from "react";
4
+
5
+ import type { ProductPrice } from "@evenicanpm/storefront-core/src/api-manager/schemas/product.schema";
5
6
  // GLOBAL CUSTOM COMPONENTS
6
7
  import FlexBetween from "@evenicanpm/storefront-core/src/components-v2/flex-box/flex-between";
7
8
  import { ProductCardPlpList } from "@evenicanpm/storefront-core/src/components-v2/product-cards/product-card-plp-list/index";
8
- import { ProductPrice } from "@evenicanpm/storefront-core/src/api-manager/schemas/product.schema";
9
- // DATA MODEL
10
- import { ProductSearchResult as Product } from "@msdyn365-commerce/retail-proxy";
11
9
  import {
12
10
  ProductsViewContext,
13
11
  useProductsView,
14
12
  } from "@evenicanpm/storefront-core/src/components-v2/products-view/compound/context";
15
- import { ProductsViewProps } from "@evenicanpm/storefront-core/src/components-v2/products-view/compound/types";
13
+ import type { ProductsViewProps } from "@evenicanpm/storefront-core/src/components-v2/products-view/compound/types";
14
+ // DATA MODEL
15
+ import type { ProductSearchResult as Product } from "@msdyn365-commerce/retail-proxy";
16
+ import { cloneElement } from "react";
16
17
 
17
18
  /**
18
19
  * Root component of the ProductsListView.
19
20
  */
20
- export default function ProductsListView(props: ProductsViewProps) {
21
+ export default function ProductsListView(props: Readonly<ProductsViewProps>) {
21
22
  const { pagination, products, productPrices, children } = props;
22
23
  console.log(props);
23
24
  return (
@@ -41,14 +42,14 @@ ProductsListView.List = ({ children }: { children: React.ReactElement }) => {
41
42
  const { products, productPrices } = useProductsView();
42
43
  return (
43
44
  <>
44
- {products.map((item: Product, i) => {
45
+ {products.map((item: Product) => {
45
46
  const matchingPrice = productPrices?.find(
46
47
  (price) => price.ProductId === item.RecordId,
47
48
  );
48
49
  // Legacy API, consider alternatives.
49
50
  // Using this to pass props to child.
50
51
  return cloneElement(children, {
51
- key: i,
52
+ key: item.RecordId ?? item.ItemId,
52
53
  product: item,
53
54
  price: matchingPrice,
54
55
  });
@@ -1,5 +1,5 @@
1
- import { ProductsViewContext } from "@evenicanpm/storefront-core/src/components-v2/products-view/compound/context";
2
- import { PropsWithChildren, ReactNode } from "react";
1
+ import type { ProductsViewContext } from "@evenicanpm/storefront-core/src/components-v2/products-view/compound/context";
2
+ import type { PropsWithChildren, ReactNode } from "react";
3
3
 
4
4
  /**
5
5
  * This prop type is used for both the ProductsViewGrid and the ProductsViewList.
@@ -1,9 +1,9 @@
1
- import React, { ReactNode } from "react";
1
+ import type { ProductPrice } from "@evenicanpm/storefront-core/src/api-manager/schemas/product.schema";
2
2
  import ProductsGridView from "@evenicanpm/storefront-core/src/components-v2/products-view/compound/products-grid-view";
3
3
  import ProductsListView from "@evenicanpm/storefront-core/src/components-v2/products-view/compound/products-list-view";
4
4
  // DATA MODEL
5
- import { ProductSearchResult as Product } from "@msdyn365-commerce/retail-proxy";
6
- import { ProductPrice } from "@evenicanpm/storefront-core/src/api-manager/schemas/product.schema";
5
+ import type { ProductSearchResult as Product } from "@msdyn365-commerce/retail-proxy";
6
+ import React, { type ReactNode } from "react";
7
7
 
8
8
  export interface Props {
9
9
  /** List of products to display */
@@ -20,7 +20,7 @@ export interface Props {
20
20
  * TODO: Add Pagination to storybook
21
21
  *
22
22
  */
23
- export function ProductsGrid(props: Props) {
23
+ export function ProductsGrid(props: Readonly<Props>) {
24
24
  return (
25
25
  <ProductsGridView {...props}>
26
26
  <ProductsGridView.Grid>
@@ -35,7 +35,7 @@ export function ProductsGrid(props: Props) {
35
35
  * Pre-composed implementation of ProductList
36
36
  *
37
37
  */
38
- export function ProductsList(props: Props) {
38
+ export function ProductsList(props: Readonly<Props>) {
39
39
  return (
40
40
  <ProductsListView {...props}>
41
41
  <ProductsListView.List>
@@ -1,7 +1,7 @@
1
+ import { Box, Button, Link as MUILink, Typography } from "@mui/material";
1
2
  import type { Meta, StoryObj } from "@storybook/react";
2
- import ProgressBar from "./index";
3
3
  import NProgress from "nprogress";
4
- import { Button, Box, Typography, Link as MUILink } from "@mui/material";
4
+ import ProgressBar from "./index";
5
5
 
6
6
  const meta: Meta<typeof ProgressBar> = {
7
7
  title: "Utility/ProgressBar",
@@ -1,10 +1,10 @@
1
1
  // https://github.com/apal21/nextjs-progressbar/issues/86
2
2
 
3
3
  "use client";
4
- import { useEffect } from "react";
5
- import NProgress from "nprogress";
6
- import useTheme from "@mui/material/styles/useTheme";
7
4
  import GlobalStyles from "@mui/material/GlobalStyles";
5
+ import useTheme from "@mui/material/styles/useTheme";
6
+ import NProgress from "nprogress";
7
+ import { useEffect } from "react";
8
8
 
9
9
  import "nprogress/nprogress.css";
10
10
 
@@ -38,7 +38,7 @@ export default function ProgressBar() {
38
38
  const mutationObserver = new MutationObserver(handleMutation);
39
39
  mutationObserver.observe(document, { childList: true, subtree: true });
40
40
 
41
- window.history.pushState = new Proxy(window.history.pushState, {
41
+ globalThis.history.pushState = new Proxy(globalThis.history.pushState, {
42
42
  apply: (target, thisArg, argArray: PushStateInput) => {
43
43
  NProgress.done();
44
44
  return target.apply(thisArg, argArray);
@@ -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 Scrollbar from "./index";
5
6
 
6
7
  const meta = {
@@ -1,6 +1,6 @@
1
- import { ReactNode } from "react";
2
- import { SxProps, Theme } from "@mui/material/styles";
3
- import { Props } from "simplebar-react";
1
+ import type { SxProps, Theme } from "@mui/material/styles";
2
+ import type { ReactNode } from "react";
3
+ import type { Props } from "simplebar-react";
4
4
  import "simplebar-react/dist/simplebar.min.css";
5
5
  // STYLED COMPONENT
6
6
  import { StyledScrollBar } from "@evenicanpm/storefront-core/src/components-v2/scrollbar/styles";
@@ -18,7 +18,7 @@ export default function Scolbar({
18
18
  autoHide = true,
19
19
  sx,
20
20
  ...props
21
- }: ScrollbarProps) {
21
+ }: Readonly<ScrollbarProps>) {
22
22
  return (
23
23
  <StyledScrollBar sx={sx} autoHide={autoHide} {...props}>
24
24
  {children}
@@ -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 { SearchBarViewLg } from "./index";
5
6
 
6
7
  const meta = {
@@ -1,6 +1,5 @@
1
- import { ProductSearchResult } from "@msdyn365-commerce/retail-proxy";
2
- import { createContext, useContext } from "react";
3
- import { FormEvent } from "react";
1
+ import type { ProductSearchResult } from "@msdyn365-commerce/retail-proxy";
2
+ import { createContext, type FormEvent, useContext } from "react";
4
3
 
5
4
  /**
6
5
  * @category Context
@@ -1,13 +1,14 @@
1
1
  /**
2
2
  * @module SearchBar
3
3
  */
4
- import React from "react";
5
- import Grid from "@mui/material/Grid";
4
+
6
5
  import ProductCardSearch from "@evenicanpm/storefront-core/src/components-v2/product-cards/product-card-search";
7
6
  import {
8
7
  useSearchContext,
9
8
  useSearchResultItem,
10
9
  } from "@evenicanpm/storefront-core/src/components-v2/search-bar/compound/context";
10
+ import Grid from "@mui/material/Grid";
11
+ import React from "react";
11
12
 
12
13
  /**
13
14
  * Large, vertical result item card, used for desktop view.
@@ -1,21 +1,22 @@
1
1
  /**
2
2
  * @module SearchBar
3
3
  */
4
- import React from "react";
5
- import NavLink from "@evenicanpm/storefront-core/src/components-v2/nav-link/nav-link";
6
- import MenuItem from "@mui/material/MenuItem";
7
- import { getProductDetailUrl } from "@evenicanpm/storefront-core/src/lib/build-product-detail-url";
8
- import { Box, Grid } from "@mui/material";
4
+
9
5
  import LazyImage from "@evenicanpm/storefront-core/src/components-v2/LazyImage";
6
+ import NavLink from "@evenicanpm/storefront-core/src/components-v2/nav-link/nav-link";
7
+ import {
8
+ useSearchContext,
9
+ useSearchResultItem,
10
+ } from "@evenicanpm/storefront-core/src/components-v2/search-bar/compound/context";
10
11
  import {
11
12
  H4,
12
13
  Span,
13
14
  } from "@evenicanpm/storefront-core/src/components-v2/Typography";
15
+ import { getProductDetailUrl } from "@evenicanpm/storefront-core/src/lib/build-product-detail-url";
14
16
  import { currency } from "@evenicanpm/storefront-core/src/lib/lib";
15
- import {
16
- useSearchContext,
17
- useSearchResultItem,
18
- } from "@evenicanpm/storefront-core/src/components-v2/search-bar/compound/context";
17
+ import { Box, Grid } from "@mui/material";
18
+ import MenuItem from "@mui/material/MenuItem";
19
+ import React from "react";
19
20
 
20
21
  /**
21
22
  * Small, horizontal result item card, used for mobile view.
@@ -3,15 +3,14 @@
3
3
  */
4
4
  "use client";
5
5
 
6
- import React, { Suspense } from "react";
7
6
  import { useSearchContext } from "@evenicanpm/storefront-core/src/components-v2/search-bar/compound/context";
8
- import { CircularProgress } from "@mui/material";
9
7
  import SearchResult from "@evenicanpm/storefront-core/src/components-v2/search-bar/compound/results";
10
- import { SearchResultCard } from "@evenicanpm/storefront-core/src/components-v2/search-bar/styles/index";
11
8
  import ResultItemCardLg from "@evenicanpm/storefront-core/src/components-v2/search-bar/compound/results-item-lg";
12
9
  import ResultItemCardSm from "@evenicanpm/storefront-core/src/components-v2/search-bar/compound/results-item-sm";
13
-
14
- import _ from "lodash";
10
+ import { SearchResultCard } from "@evenicanpm/storefront-core/src/components-v2/search-bar/styles/index";
11
+ import { CircularProgress } from "@mui/material";
12
+ import type React from "react";
13
+ import { Suspense } from "react";
15
14
 
16
15
  /**
17
16
  * useSuspenseQuery will instantly suspend component fallback to
@@ -24,7 +23,7 @@ import _ from "lodash";
24
23
  export default function SearchResultSuspense({
25
24
  children,
26
25
  }: {
27
- children: React.ReactNode;
26
+ readonly children: React.ReactNode;
28
27
  }) {
29
28
  const { state } = useSearchContext();
30
29
  return (
@@ -1,15 +1,16 @@
1
1
  /**
2
2
  * @module SearchBar
3
3
  */
4
- import React from "react";
5
- import { useTranslations } from "next-intl";
4
+
6
5
  import searchProducts from "@evenicanpm/storefront-core/src/api-manager/services/product/queries/search-products";
7
- import { SearchResultCard } from "@evenicanpm/storefront-core/src/components-v2/search-bar/styles/index";
8
6
  import {
9
- useSearchContext,
10
7
  SearchResultItemContext,
8
+ useSearchContext,
11
9
  } from "@evenicanpm/storefront-core/src/components-v2/search-bar/compound/context";
10
+ import { SearchResultCard } from "@evenicanpm/storefront-core/src/components-v2/search-bar/styles/index";
12
11
  import Grid from "@mui/material/Grid";
12
+ import { useTranslations } from "next-intl";
13
+ import type React from "react";
13
14
 
14
15
  /**
15
16
  * Search Results Container that handles mapping items and styles of the containing box.
@@ -18,7 +19,7 @@ import Grid from "@mui/material/Grid";
18
19
  export default function SearchResultsContainer({
19
20
  children,
20
21
  }: {
21
- children: React.ReactNode;
22
+ readonly children: React.ReactNode;
22
23
  }) {
23
24
  const t = useTranslations();
24
25
  const { state } = useSearchContext();
@@ -35,8 +36,11 @@ export default function SearchResultsContainer({
35
36
  return (
36
37
  <SearchResultCard>
37
38
  <Grid container>
38
- {results.map((item, i) => (
39
- <SearchResultItemContext.Provider value={item} key={i}>
39
+ {results.map((item) => (
40
+ <SearchResultItemContext.Provider
41
+ value={item}
42
+ key={item.RecordId ?? item.ItemId}
43
+ >
40
44
  {children}
41
45
  </SearchResultItemContext.Provider>
42
46
  ))}
@@ -2,21 +2,18 @@
2
2
  * @module SearchBar
3
3
  */
4
4
  "use client";
5
- import React, { useRef } from "react";
6
- import Box from "@mui/material/Box";
7
-
8
- // local hooks
9
- import useSearch from "@evenicanpm/storefront-core/src/components-v2/search-bar/hooks/use-search";
10
- import { useClickOutside } from "@evenicanpm/storefront-core/src/components-v2/search-bar/hooks/use-click-outside";
11
5
 
12
6
  // contexts
13
7
  import { SearchContext } from "@evenicanpm/storefront-core/src/components-v2/search-bar/compound/context";
14
-
15
8
  // components
16
9
  import SearchResultSuspense from "@evenicanpm/storefront-core/src/components-v2/search-bar/compound/results-suspense";
17
10
  import TextField from "@evenicanpm/storefront-core/src/components-v2/search-bar/compound/textfield";
18
-
19
- import _ from "lodash";
11
+ import { useClickOutside } from "@evenicanpm/storefront-core/src/components-v2/search-bar/hooks/use-click-outside";
12
+ // local hooks
13
+ import useSearch from "@evenicanpm/storefront-core/src/components-v2/search-bar/hooks/use-search";
14
+ import Box from "@mui/material/Box";
15
+ import type React from "react";
16
+ import { useRef } from "react";
20
17
 
21
18
  interface Props {
22
19
  handleCloseDrawer?: () => void;
@@ -35,7 +32,10 @@ interface Props {
35
32
  * </SearchBar>
36
33
  *
37
34
  */
38
- export default function SearchBarRoot({ handleCloseDrawer, children }: Props) {
35
+ export default function SearchBarRoot({
36
+ handleCloseDrawer,
37
+ children,
38
+ }: Readonly<Props>) {
39
39
  const { setters, handlers, state } = useSearch();
40
40
  const inputRef = useRef(null);
41
41
  useClickOutside(inputRef, () => setters.setResultsOpen(false));
@@ -2,16 +2,17 @@
2
2
  * @module SearchBar
3
3
  */
4
4
  "use client";
5
- import React from "react";
6
- import MenuItem from "@mui/material/MenuItem";
7
- import TouchRipple from "@mui/material/ButtonBase";
8
- import useTheme from "@mui/material/styles/useTheme";
9
5
  import getCategories from "@evenicanpm/storefront-core/src/api-manager/services/categories/queries/get-categories";
10
- import { MdKeyboardArrowDown as KeyboardArrowDownOutlined } from "react-icons/md";
11
- import { findCategoryNameById } from "@evenicanpm/storefront-core/src/components-v2/search-bar/utils/findCategoryNameById";
12
6
  import Menu from "@evenicanpm/storefront-core/src/components-v2/BazaarMenu";
13
7
  import { DropDownHandler } from "@evenicanpm/storefront-core/src/components-v2/search-bar/styles/index";
8
+ import { findCategoryNameById } from "@evenicanpm/storefront-core/src/components-v2/search-bar/utils/findCategoryNameById";
9
+ import TouchRipple from "@mui/material/ButtonBase";
10
+ import MenuItem from "@mui/material/MenuItem";
11
+ import useTheme from "@mui/material/styles/useTheme";
14
12
  import { useTranslations } from "next-intl";
13
+ import React from "react";
14
+ import { MdKeyboardArrowDown as KeyboardArrowDownOutlined } from "react-icons/md";
15
+
15
16
  type DisplayCategory = {
16
17
  name: string;
17
18
  id: number;
@@ -50,33 +51,31 @@ const CategoryDropdown = ({
50
51
  const title = findCategoryNameById(selectedCategoryId, categories, t);
51
52
 
52
53
  return (
53
- <>
54
- <Menu
55
- direction="left"
56
- sx={{ zIndex: breakpoints.down("md") ? 99999 : 1502 }}
57
- handler={(e) => (
58
- <DropDownHandler as={TouchRipple} onClick={e}>
59
- {title}
60
- <KeyboardArrowDownOutlined fontSize="small" color="inherit" />
61
- </DropDownHandler>
62
- )}
63
- options={(onClose) => {
64
- return options
65
- ?.filter((current: DisplayCategory) => current.name !== title)
66
- .map((item: DisplayCategory) => (
67
- <MenuItem
68
- key={item.id}
69
- onClick={() => {
70
- handleChange(item.id);
71
- onClose();
72
- }}
73
- >
74
- {item.name}
75
- </MenuItem>
76
- ));
77
- }}
78
- />
79
- </>
54
+ <Menu
55
+ direction="left"
56
+ sx={{ zIndex: breakpoints.down("md") ? 99999 : 1502 }}
57
+ handler={(e) => (
58
+ <DropDownHandler as={TouchRipple} onClick={e}>
59
+ {title}
60
+ <KeyboardArrowDownOutlined fontSize="small" color="inherit" />
61
+ </DropDownHandler>
62
+ )}
63
+ options={(onClose) => {
64
+ return options
65
+ ?.filter((current: DisplayCategory) => current.name !== title)
66
+ .map((item: DisplayCategory) => (
67
+ <MenuItem
68
+ key={item.id}
69
+ onClick={() => {
70
+ handleChange(item.id);
71
+ onClose();
72
+ }}
73
+ >
74
+ {item.name}
75
+ </MenuItem>
76
+ ));
77
+ }}
78
+ />
80
79
  );
81
80
  };
82
81
 
@@ -1,9 +1,10 @@
1
1
  /**
2
2
  * @module SearchBar
3
3
  */
4
- import Box from "@mui/material/Box";
5
- import { IconButton } from "@mui/material";
4
+
6
5
  import Search from "@evenicanpm/storefront-core/src/components-v2/icons/search";
6
+ import { IconButton } from "@mui/material";
7
+ import Box from "@mui/material/Box";
7
8
 
8
9
  interface Props {
9
10
  handleNavigate: () => void;
@@ -2,18 +2,15 @@
2
2
  * @module SearchBar
3
3
  */
4
4
  "use client";
5
- import React from "react";
6
- import TextField from "@mui/material/TextField";
7
-
8
- import SearchIconAdornment from "@evenicanpm/storefront-core/src/components-v2/search-bar/compound/textfield-adornment-search-icon";
5
+ import { useSearchContext } from "@evenicanpm/storefront-core/src/components-v2/search-bar/compound/context";
9
6
  import AdornmentButton from "@evenicanpm/storefront-core/src/components-v2/search-bar/compound/textfield-adornment-button";
10
7
  import CategoryDropdown from "@evenicanpm/storefront-core/src/components-v2/search-bar/compound/textfield-adornment-category";
11
-
8
+ import SearchIconAdornment from "@evenicanpm/storefront-core/src/components-v2/search-bar/compound/textfield-adornment-search-icon";
12
9
  import { INPUT_SX } from "@evenicanpm/storefront-core/src/components-v2/search-bar/styles/index";
13
- import { useTheme, useMediaQuery } from "@mui/material";
14
- import _ from "lodash";
10
+ import { useMediaQuery, useTheme } from "@mui/material";
11
+ import TextField from "@mui/material/TextField";
15
12
  import { useTranslations } from "next-intl";
16
- import { useSearchContext } from "@evenicanpm/storefront-core/src/components-v2/search-bar/compound/context";
13
+ import React from "react";
17
14
 
18
15
  /**
19
16
  * The actual input field for the search bar.
@@ -1,10 +1,9 @@
1
1
  "use client";
2
- import React, { FormEvent, useState } from "react";
3
2
  import { PageSlug } from "@evenicanpm/storefront-core/src/lib/page-slugs";
4
3
  import { PageKey } from "@evenicanpm/storefront-core/src/lib/product-list-types";
5
-
6
4
  import _ from "lodash";
7
5
  import { useRouter } from "next/navigation";
6
+ import React, { type FormEvent, useState } from "react";
8
7
 
9
8
  /**
10
9
  * Handles all main logic and state for the search bar components.
@@ -27,7 +26,7 @@ export default function useSearch() {
27
26
  if (searchText.trim() === "") {
28
27
  return;
29
28
  }
30
- const url = new URL(PageSlug.ProductList, window.location.origin);
29
+ const url = new URL(PageSlug.ProductList, globalThis.location.origin);
31
30
  url.searchParams.set(PageKey.SEARCH, searchText);
32
31
  router.push(url.toString());
33
32
  setResultsOpen(false);
@@ -1,9 +1,9 @@
1
1
  "use client";
2
2
 
3
- import Card from "@mui/material/Card";
3
+ import SearchOutlined from "@mui/icons-material/SearchOutlined";
4
4
  import Box from "@mui/material/Box";
5
+ import Card from "@mui/material/Card";
5
6
  import styled from "@mui/material/styles/styled";
6
- import SearchOutlined from "@mui/icons-material/SearchOutlined";
7
7
 
8
8
  // TODO: caused from symlinked node_modules in client-packages root
9
9
  // Need to install only types for mui/styled-engine
@@ -1,4 +1,4 @@
1
- import { Category } from "@msdyn365-commerce/retail-proxy";
1
+ import type { Category } from "@msdyn365-commerce/retail-proxy";
2
2
 
3
3
  /**
4
4
  * Looks up the category name by id.
@@ -1,12 +1,12 @@
1
- import type { Meta, StoryObj } from "@storybook/react";
2
- import { Section } from "./index";
3
- import { Typography } from "@mui/material";
4
1
  import ArrowRight from "@mui/icons-material/ArrowRight";
2
+ import { Typography } from "@mui/material";
3
+ import type { Meta, StoryObj } from "@storybook/react";
5
4
  import {
6
5
  SectionHeader,
7
6
  SectionHeaderSeeMoreLink,
8
7
  SectionHeaderTitle,
9
8
  } from "./compound/section-header";
9
+ import { Section } from "./index";
10
10
 
11
11
  const meta: Meta<typeof Section> = {
12
12
  title: "Section",
@@ -60,7 +60,7 @@ export const LongContent: Story = {
60
60
  </Section.Header>
61
61
 
62
62
  {Array.from({ length: 5 }).map((_, i) => (
63
- <Typography key={i} paragraph>
63
+ <Typography key={`paragraph-${i + 1}`} paragraph>
64
64
  Lorem ipsum dolor sit amet, consectetur adipiscing elit. Paragraph{" "}
65
65
  {i + 1}.
66
66
  </Typography>
@@ -3,18 +3,18 @@
3
3
  */
4
4
  "use client";
5
5
 
6
- import Link from "next/link";
7
- import { ReactNode } from "react";
8
- // Mui Icon Components
9
- import ArrowLeft from "@mui/icons-material/ArrowLeft";
10
- import ArrowRight from "@mui/icons-material/ArrowRight";
11
- // Local Custom Components
12
- import { H2 } from "@evenicanpm/storefront-core/src/components-v2/Typography";
13
6
  import {
14
7
  FlexBetween,
15
8
  FlexBox,
16
9
  } from "@evenicanpm/storefront-core/src/components-v2/flex-box/index";
10
+ // Local Custom Components
11
+ import { H2 } from "@evenicanpm/storefront-core/src/components-v2/Typography";
17
12
  import useSettings from "@evenicanpm/storefront-core/src/hooks/use-settings";
13
+ // Mui Icon Components
14
+ import ArrowLeft from "@mui/icons-material/ArrowLeft";
15
+ import ArrowRight from "@mui/icons-material/ArrowRight";
16
+ import Link from "next/link";
17
+ import type { ReactNode } from "react";
18
18
 
19
19
  /**
20
20
  * @category Sub-Component
@@ -1,10 +1,11 @@
1
1
  /**
2
2
  * @module Section
3
3
  */
4
- import { ReactNode } from "react";
5
- import Container from "@mui/material/Container";
6
- import Box, { BoxProps } from "@mui/material/Box";
4
+
7
5
  import { SectionHeader } from "@evenicanpm/storefront-core/src/components-v2/section/compound/section-header";
6
+ import Box, { type BoxProps } from "@mui/material/Box";
7
+ import Container from "@mui/material/Container";
8
+ import type { ReactNode } from "react";
8
9
 
9
10
  interface Props extends BoxProps {
10
11
  children: ReactNode;