@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,18 +1,18 @@
1
- import { Cart } from "@evenicanpm/storefront-core/src/api-manager/schemas/cart.schema";
1
+ import type { Cart } from "@evenicanpm/storefront-core/src/api-manager/schemas/cart.schema";
2
+ import cartData from "@evenicanpm/storefront-core/src/pages-v2/cart/__tests__/cart-with-items.json";
3
+ import countries from "@evenicanpm/storefront-core/src/pages-v2/cart/__tests__/countries.json";
4
+ import EstimateShipping from "@evenicanpm/storefront-core/src/pages-v2/cart/estimate-shipping";
5
+ import { NotificationProvider } from "@evenicanpm/storefront-core/src/providers/notifications/notification-context";
6
+ import ENUS from "@messages/en-US.json";
7
+ import type { CountryRegionInfo } from "@msdyn365-commerce/retail-proxy";
2
8
  import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
3
9
  import { render, screen } from "@testing-library/react";
4
- import React from "react";
5
- import cartData from "@evenicanpm/storefront-core/src/pages-v2/cart/__tests__/cart-with-items.json";
6
- import countries from "@evenicanpm/storefront-core/src/pages-v2/cart/__tests__/conutries.json";
7
10
  import { NextIntlClientProvider } from "next-intl";
8
- import ENUS from "@messages/en-US.json";
9
- import EstimateShipping from "@evenicanpm/storefront-core/src/pages-v2/cart/estimate-shipping";
10
- import { CountryRegionInfo } from "@msdyn365-commerce/retail-proxy";
11
+ import type React from "react";
11
12
  import { vi } from "vitest";
12
- import { NotificationProvider } from "@evenicanpm/storefront-core/src/providers/notifications/notification-context";
13
13
 
14
14
  // eslint-disable-next-line @typescript-eslint/ban-ts-comment
15
- // @ts-ignore - Complaining about date types from the json
15
+ // @ts-expect-error - Complaining about date types from the json
16
16
  const cart: Cart = cartData;
17
17
  const queryClient = new QueryClient();
18
18
  const Wrapper = ({ children }: React.PropsWithChildren) => (
@@ -27,7 +27,7 @@ describe("Estimate Shipping", () => {
27
27
  it("Should Default Country to USA", async () => {
28
28
  const _countries = countries as CountryRegionInfo[];
29
29
  const america = _countries.find((c) => c.ISOCode === "US");
30
- let selectedCountry = undefined;
30
+ let selectedCountry;
31
31
  const setCountryFn = vi.fn(
32
32
  (c: CountryRegionInfo) => (selectedCountry = c.ISOCode),
33
33
  );
@@ -56,7 +56,7 @@ describe("Estimate Shipping", () => {
56
56
  it("Should Default Country to Canada", async () => {
57
57
  const _countries = countries as CountryRegionInfo[];
58
58
  const canada = _countries.find((c) => c.ISOCode === "CA");
59
- let selectedCountry = undefined;
59
+ let selectedCountry;
60
60
  const setCountryFn = vi.fn(
61
61
  (c: CountryRegionInfo) => (selectedCountry = c.ISOCode),
62
62
  );
@@ -1,37 +1,38 @@
1
1
  "use client";
2
2
 
3
- import React, { createContext, useContext, useMemo, useState } from "react";
4
- import Link from "next/link";
5
- import {
6
- Button,
7
- IconButton,
8
- Box,
9
- CircularProgress,
10
- Typography,
11
- TextField,
12
- } from "@mui/material";
13
- import { useTranslations } from "next-intl";
14
- // MUI Icons
15
- import Add from "@mui/icons-material/Add";
16
- import Close from "@mui/icons-material/Close";
17
- import Remove from "@mui/icons-material/Remove";
3
+ import type { CartLine } from "@evenicanpm/storefront-core/src/api-manager/schemas/cart.schema";
4
+ import useDeleteCartLine from "@evenicanpm/storefront-core/src/api-manager/services/cart/mutations/delete-cart-line";
5
+ import useUpdateCartLines from "@evenicanpm/storefront-core/src/api-manager/services/cart/mutations/update-cart-lines";
6
+ import { FlexBox } from "@evenicanpm/storefront-core/src/components-v2/flex-box";
7
+ import Image from "@evenicanpm/storefront-core/src/components-v2/ImageWithFallback";
18
8
  // Local components
19
9
  import {
20
10
  H6,
21
11
  Span,
22
12
  Tiny,
23
13
  } from "@evenicanpm/storefront-core/src/components-v2/Typography";
24
- import { FlexBox } from "@evenicanpm/storefront-core/src/components-v2/flex-box";
25
- import Image from "@evenicanpm/storefront-core/src/components-v2/ImageWithFallback";
14
+ import { getProductDetailUrl } from "@evenicanpm/storefront-core/src/lib/build-product-detail-url";
15
+ // Utils
16
+ import useCurrencyFormatter from "@evenicanpm/storefront-core/src/lib/currency-formatter";
26
17
  import { Wrapper } from "@evenicanpm/storefront-core/src/pages-v2/cart/wrapper";
27
18
  // API
28
19
  import { ProductDimensionType } from "@msdyn365-commerce/retail-proxy";
29
- import useUpdateCartLines from "@evenicanpm/storefront-core/src/api-manager/services/cart/mutations/update-cart-lines";
30
- import useDeleteCartLine from "@evenicanpm/storefront-core/src/api-manager/services/cart/mutations/delete-cart-line";
31
- import { CartLine } from "@evenicanpm/storefront-core/src/api-manager/schemas/cart.schema";
32
- // Utils
33
- import useCurrencyFormatter from "@evenicanpm/storefront-core/src/lib/currency-formatter";
34
- import { getProductDetailUrl } from "@evenicanpm/storefront-core/src/lib/build-product-detail-url";
20
+ // MUI Icons
21
+ import Add from "@mui/icons-material/Add";
22
+ import Close from "@mui/icons-material/Close";
23
+ import Remove from "@mui/icons-material/Remove";
24
+ import {
25
+ Box,
26
+ Button,
27
+ CircularProgress,
28
+ IconButton,
29
+ TextField,
30
+ Typography,
31
+ } from "@mui/material";
32
+ import Link from "next/link";
33
+ import { useTranslations } from "next-intl";
34
+ import type React from "react";
35
+ import { createContext, useContext, useMemo, useState } from "react";
35
36
 
36
37
  type CartItemContextValue = {
37
38
  cartLine: CartLine;
@@ -71,7 +72,7 @@ function CartItemRoot({
71
72
  cartId,
72
73
  cartVersion,
73
74
  children,
74
- }: CartItemProps) {
75
+ }: Readonly<CartItemProps>) {
75
76
  const [isWritingComment, setIsWritingComment] = useState(false);
76
77
  const [comment, setComment] = useState(cartLine.Comment || "");
77
78
 
@@ -192,9 +193,9 @@ CartItemRoot.Image = () => {
192
193
 
193
194
  CartItemRoot.RemoveButton = () => {
194
195
  const ctx = useContext(CartItemContext);
196
+ const t = useTranslations("Cart.CartLine");
195
197
  if (!ctx) return null;
196
198
  const { remove } = ctx;
197
- const t = useTranslations("Cart.CartLine");
198
199
  return (
199
200
  <IconButton
200
201
  size="small"
@@ -232,9 +233,9 @@ CartItemRoot.Dimensions = () => {
232
233
  return (
233
234
  <Span ellipsis fontWeight="200" fontSize={14}>
234
235
  {dims.map((d, i) => (
235
- <span key={i}>
236
+ <span key={`dim-${i + 1}`}>
236
237
  {`${ProductDimensionType[d.DimensionTypeValue]}: ${d?.DimensionValue?.Value}${
237
- i + 1 !== dims.length ? " | " : ""
238
+ i + 1 === dims.length ? "" : " | "
238
239
  } `}
239
240
  </span>
240
241
  ))}
@@ -244,9 +245,11 @@ CartItemRoot.Dimensions = () => {
244
245
 
245
246
  CartItemRoot.Price = () => {
246
247
  const ctx = useContext(CartItemContext);
248
+ const { formatCurrency } = useCurrencyFormatter();
249
+
247
250
  if (!ctx) return null;
251
+
248
252
  const { cartLine } = ctx;
249
- const { formatCurrency } = useCurrencyFormatter();
250
253
 
251
254
  const hasDiscount = (cartLine.DiscountLines?.length ?? 0) > 0;
252
255
  const qty = cartLine.Quantity ?? 1;
@@ -280,7 +283,7 @@ CartItemRoot.Price = () => {
280
283
  {!!cartLine.DiscountLines?.length && (
281
284
  <FlexBox gap={1} flexWrap="wrap" alignItems="center">
282
285
  {cartLine.DiscountLines?.map((d, i) => (
283
- <Span key={i} color="error.main">
286
+ <Span key={`dim-${i + 1}`} color="error.main">
284
287
  {d.DiscountCode} - {d.OfferName}
285
288
  </Span>
286
289
  ))}
@@ -292,9 +295,9 @@ CartItemRoot.Price = () => {
292
295
 
293
296
  CartItemRoot.Quantity = () => {
294
297
  const ctx = useContext(CartItemContext);
298
+ const t = useTranslations("Cart.CartLine");
295
299
  if (!ctx) return null;
296
300
  const { qty, increase, decrease, isLoading } = ctx;
297
- const t = useTranslations("Cart.CartLine");
298
301
 
299
302
  if (isLoading) return <CircularProgress size={30} />;
300
303
 
@@ -332,7 +335,9 @@ CartItemRoot.Quantity = () => {
332
335
 
333
336
  CartItemRoot.Comment = () => {
334
337
  const ctx = useContext(CartItemContext);
338
+ const t = useTranslations("Cart.CartLine");
335
339
  if (!ctx) return null;
340
+
336
341
  const {
337
342
  isWritingComment,
338
343
  setIsWritingComment,
@@ -343,83 +348,88 @@ CartItemRoot.Comment = () => {
343
348
  isLoading,
344
349
  cartLine,
345
350
  } = ctx;
346
- const t = useTranslations("Cart.CartLine");
347
351
 
348
- return (
349
- <CartItemRoot.Right>
350
- {isWritingComment ? (
351
- <>
352
- <TextField
353
- label={t("addComment")}
354
- variant="outlined"
355
- multiline
356
- minRows={2}
357
- maxRows={2}
358
- fullWidth
359
- value={comment}
360
- onChange={(e) => setComment(e.target.value)}
361
- sx={{ marginBottom: 1 }}
362
- />
363
- <FlexBox
364
- flexDirection="row"
365
- sx={{ marginTop: "auto", marginLeft: "auto" }}
366
- >
367
- <Button
368
- color="primary"
369
- variant="outlined"
370
- sx={{ width: 100 }}
371
- onClick={cancelComment}
372
- >
373
- {t("cancelComment")}
374
- </Button>
375
- <Button
376
- color="primary"
377
- variant="contained"
378
- sx={{ width: 150, ml: 1 }}
379
- onClick={saveComment}
380
- >
381
- {t("saveComment")}
382
- </Button>
383
- </FlexBox>
384
- </>
385
- ) : isLoading ? (
386
- <CircularProgress
387
- size={30}
388
- sx={{ marginTop: "auto", marginLeft: "auto" }}
352
+ let content: React.ReactNode;
353
+
354
+ if (isWritingComment) {
355
+ content = (
356
+ <>
357
+ <TextField
358
+ label={t("addComment")}
359
+ variant="outlined"
360
+ multiline
361
+ minRows={2}
362
+ maxRows={2}
363
+ fullWidth
364
+ value={comment}
365
+ onChange={(e) => setComment(e.target.value)}
366
+ sx={{ marginBottom: 1 }}
389
367
  />
390
- ) : (
391
- <>
392
- <Typography
393
- component="div"
394
- sx={{
395
- mb: 1,
396
- mt: "auto",
397
- maxWidth: { xs: "250px", lg: "350px" },
398
- whiteSpace: "nowrap",
399
- overflow: "hidden",
400
- textOverflow: "ellipsis",
401
- }}
402
- title={cartLine.Comment || ""}
403
- >
404
- {cartLine.Comment ? (
405
- <>
406
- <H6 sx={{ display: "inline" }}>{t("commentLabel")}: </H6>
407
- {cartLine.Comment}
408
- </>
409
- ) : null}
410
- </Typography>
368
+ <FlexBox
369
+ flexDirection="row"
370
+ sx={{ marginTop: "auto", marginLeft: "auto" }}
371
+ >
411
372
  <Button
412
373
  color="primary"
413
374
  variant="outlined"
414
- sx={{ width: 150, mt: "auto", ml: "auto" }}
415
- onClick={() => setIsWritingComment(true)}
375
+ sx={{ width: 100 }}
376
+ onClick={cancelComment}
416
377
  >
417
- {t("addComment")}
378
+ {t("cancelComment")}
418
379
  </Button>
419
- </>
420
- )}
421
- </CartItemRoot.Right>
422
- );
380
+ <Button
381
+ color="primary"
382
+ variant="contained"
383
+ sx={{ width: 150, ml: 1 }}
384
+ onClick={saveComment}
385
+ >
386
+ {t("saveComment")}
387
+ </Button>
388
+ </FlexBox>
389
+ </>
390
+ );
391
+ } else if (isLoading) {
392
+ content = (
393
+ <CircularProgress
394
+ size={30}
395
+ sx={{ marginTop: "auto", marginLeft: "auto" }}
396
+ />
397
+ );
398
+ } else {
399
+ content = (
400
+ <>
401
+ <Typography
402
+ component="div"
403
+ sx={{
404
+ mb: 1,
405
+ mt: "auto",
406
+ maxWidth: { xs: "250px", lg: "350px" },
407
+ whiteSpace: "nowrap",
408
+ overflow: "hidden",
409
+ textOverflow: "ellipsis",
410
+ }}
411
+ title={cartLine.Comment || ""}
412
+ >
413
+ {cartLine.Comment ? (
414
+ <>
415
+ <H6 sx={{ display: "inline" }}>{t("commentLabel")}: </H6>
416
+ {cartLine.Comment}
417
+ </>
418
+ ) : null}
419
+ </Typography>
420
+ <Button
421
+ color="primary"
422
+ variant="outlined"
423
+ sx={{ width: 150, mt: "auto", ml: "auto" }}
424
+ onClick={() => setIsWritingComment(true)}
425
+ >
426
+ {t("addComment")}
427
+ </Button>
428
+ </>
429
+ );
430
+ }
431
+
432
+ return <CartItemRoot.Right>{content}</CartItemRoot.Right>;
423
433
  };
424
434
 
425
435
  const CartItem = Object.assign(CartItemRoot, {
@@ -1,28 +1,26 @@
1
1
  "use client";
2
2
 
3
- import React, {
4
- createContext,
5
- useContext,
6
- useEffect,
7
- useRef,
8
- useState,
9
- } from "react";
10
- import Link from "next/link";
11
- import Card from "@mui/material/Card";
12
- import Button from "@mui/material/Button";
13
- import Divider from "@mui/material/Divider";
14
- import TextField from "@mui/material/TextField";
15
- import { Span } from "@evenicanpm/storefront-core/src/components-v2/Typography";
3
+ import getStates from "@evenicanpm/storefront-core/src/api-manager/services/address/queries/get-states";
16
4
  import {
17
5
  FlexBetween,
18
6
  FlexBox,
19
7
  } from "@evenicanpm/storefront-core/src/components-v2/flex-box";
20
- import { useFormatter, useTranslations } from "next-intl";
21
- import { CountryRegionInfo, Coupon } from "@msdyn365-commerce/retail-proxy";
22
- import getStates from "@evenicanpm/storefront-core/src/api-manager/services/address/queries/get-states";
23
- import { debounce } from "lodash";
24
- import EstimateShipping from "@evenicanpm/storefront-core/src/pages-v2/cart/estimate-shipping";
8
+ import { Span } from "@evenicanpm/storefront-core/src/components-v2/Typography";
25
9
  import CouponEntry from "@evenicanpm/storefront-core/src/pages-v2/cart/coupon-entry";
10
+ import EstimateShipping from "@evenicanpm/storefront-core/src/pages-v2/cart/estimate-shipping";
11
+ import type {
12
+ CountryRegionInfo,
13
+ Coupon,
14
+ } from "@msdyn365-commerce/retail-proxy";
15
+ import Button from "@mui/material/Button";
16
+ import Card from "@mui/material/Card";
17
+ import Divider from "@mui/material/Divider";
18
+ import TextField from "@mui/material/TextField";
19
+ import { debounce } from "lodash";
20
+ import Link from "next/link";
21
+ import { useFormatter, useTranslations } from "next-intl";
22
+ import type React from "react";
23
+ import { createContext, useContext, useEffect, useRef, useState } from "react";
26
24
 
27
25
  interface CheckoutFormContextValue {
28
26
  cartId: string;
@@ -102,10 +100,10 @@ const CheckoutForm = ({
102
100
 
103
101
  CheckoutForm.Total = () => {
104
102
  const ctx = useContext(CheckoutFormContext);
105
- if (!ctx) return null;
106
- const { cartTotal } = ctx;
107
103
  const { number } = useFormatter();
108
104
  const t = useTranslations("Cart.Sidebar");
105
+ if (!ctx) return null;
106
+ const { cartTotal } = ctx;
109
107
 
110
108
  return (
111
109
  <>
@@ -122,9 +120,9 @@ CheckoutForm.Total = () => {
122
120
 
123
121
  CheckoutForm.Notes = () => {
124
122
  const ctx = useContext(CheckoutFormContext);
123
+ const t = useTranslations("Cart.Sidebar");
125
124
  if (!ctx) return null;
126
125
  const { updateCartComment, textRef } = ctx;
127
- const t = useTranslations("Cart.Sidebar");
128
126
  const debounceCommentUpdate = debounce(
129
127
  (e: React.ChangeEvent<HTMLInputElement>) =>
130
128
  updateCartComment(e.target.value),
@@ -194,9 +192,9 @@ CheckoutForm.EstimateShipping = () => {
194
192
 
195
193
  CheckoutForm.CheckoutButton = () => {
196
194
  const ctx = useContext(CheckoutFormContext);
195
+ const t = useTranslations("Cart.Sidebar");
197
196
  if (!ctx) return null;
198
197
  const { checkoutDisabled } = ctx;
199
- const t = useTranslations("Cart.Sidebar");
200
198
 
201
199
  return (
202
200
  <Button
@@ -1,6 +1,11 @@
1
1
  "use client";
2
2
 
3
- import React, { createContext, useContext, useState } from "react";
3
+ import useAddDiscountCode from "@evenicanpm/storefront-core/src/api-manager/services/cart/mutations/add-discount-code";
4
+ import useRemoveDiscountcode from "@evenicanpm/storefront-core/src/api-manager/services/cart/mutations/remove-discount-code";
5
+ import { FlexBox } from "@evenicanpm/storefront-core/src/components-v2/flex-box";
6
+ import { Span } from "@evenicanpm/storefront-core/src/components-v2/Typography";
7
+ import type { Coupon } from "@msdyn365-commerce/retail-proxy";
8
+ import Close from "@mui/icons-material/Close";
4
9
  import {
5
10
  Box,
6
11
  Button,
@@ -10,13 +15,10 @@ import {
10
15
  ListItemText,
11
16
  TextField,
12
17
  } from "@mui/material";
13
- import { FlexBox } from "@evenicanpm/storefront-core/src/components-v2/flex-box";
14
- import { Span } from "@evenicanpm/storefront-core/src/components-v2/Typography";
15
18
  import { useTranslations } from "next-intl";
16
- import Close from "@mui/icons-material/Close";
17
- import { Coupon } from "@msdyn365-commerce/retail-proxy";
18
- import useAddDiscountCode from "@evenicanpm/storefront-core/src/api-manager/services/cart/mutations/add-discount-code";
19
- import useRemoveDiscountcode from "@evenicanpm/storefront-core/src/api-manager/services/cart/mutations/remove-discount-code";
19
+ import type React from "react";
20
+ import { createContext, useContext, useState } from "react";
21
+
20
22
  interface CouponContextValue {
21
23
  textValue: string;
22
24
  setTextValue: (v: string) => void;
@@ -70,9 +72,9 @@ const CouponEntry = ({
70
72
 
71
73
  CouponEntry.Input = () => {
72
74
  const ctx = useContext(CouponContext);
75
+ const t = useTranslations("Cart.Coupons");
73
76
  if (!ctx) return null;
74
77
  const { textValue, setTextValue } = ctx;
75
- const t = useTranslations("Cart.Coupons");
76
78
 
77
79
  return (
78
80
  <TextField
@@ -89,9 +91,9 @@ CouponEntry.Input = () => {
89
91
 
90
92
  CouponEntry.ApplyButton = () => {
91
93
  const ctx = useContext(CouponContext);
94
+ const t = useTranslations("Cart.Coupons");
92
95
  if (!ctx) return null;
93
96
  const { handleApplyCoupon } = ctx;
94
- const t = useTranslations("Cart.Coupons");
95
97
 
96
98
  return (
97
99
  <Button
@@ -108,9 +110,9 @@ CouponEntry.ApplyButton = () => {
108
110
 
109
111
  CouponEntry.AppliedList = () => {
110
112
  const ctx = useContext(CouponContext);
113
+ const t = useTranslations("Cart.Coupons");
111
114
  if (!ctx) return null;
112
115
  const { appliedCoupons } = ctx;
113
- const t = useTranslations("Cart.Coupons");
114
116
 
115
117
  if (!appliedCoupons.length) return null;
116
118
 
@@ -1,9 +1,9 @@
1
- import React, { createContext, useContext, useState, useEffect } from "react";
1
+ import type { Address } from "@evenicanpm/storefront-core/src/api-manager/schemas/address.schema";
2
2
  import useGetDeliveryOptions from "@evenicanpm/storefront-core/src/api-manager/services/address/mutations/get-delivery-options";
3
- import { Span } from "@evenicanpm/storefront-core/src/components-v2/Typography";
4
3
  import CountryInput from "@evenicanpm/storefront-core/src/components-v2/countries-input";
4
+ import { Span } from "@evenicanpm/storefront-core/src/components-v2/Typography";
5
5
  import useCurrencyFormatter from "@evenicanpm/storefront-core/src/lib/currency-formatter";
6
- import {
6
+ import type {
7
7
  CountryRegionInfo,
8
8
  DeliveryOption,
9
9
  StateProvinceInfo,
@@ -18,8 +18,9 @@ import {
18
18
  MenuItem,
19
19
  TextField,
20
20
  } from "@mui/material";
21
- import { Address } from "@evenicanpm/storefront-core/src/api-manager/schemas/address.schema";
22
21
  import { useTranslations } from "next-intl";
22
+ import type React from "react";
23
+ import { createContext, useContext, useEffect, useState } from "react";
23
24
 
24
25
  interface EstimateShippingContextValue {
25
26
  selectedCountry: CountryRegionInfo | null;
@@ -131,9 +132,9 @@ const EstimateShipping = ({
131
132
  // Subcomponents
132
133
  EstimateShipping.Country = () => {
133
134
  const ctx = useContext(EstimateShippingContext);
135
+ const t = useTranslations("Cart.Sidebar");
134
136
  if (!ctx) return null;
135
137
  const { selectedCountry, setSelectedCountry, countries } = ctx;
136
- const t = useTranslations("Cart.Sidebar");
137
138
  return (
138
139
  <Box sx={{ mb: 2 }}>
139
140
  <CountryInput
@@ -148,9 +149,9 @@ EstimateShipping.Country = () => {
148
149
 
149
150
  EstimateShipping.State = () => {
150
151
  const ctx = useContext(EstimateShippingContext);
152
+ const t = useTranslations("Cart.Sidebar");
151
153
  if (!ctx) return null;
152
154
  const { selectedState, setSelectedState, states } = ctx;
153
- const t = useTranslations("Cart.Sidebar");
154
155
  return (
155
156
  <TextField
156
157
  select
@@ -172,9 +173,9 @@ EstimateShipping.State = () => {
172
173
 
173
174
  EstimateShipping.ZipCode = () => {
174
175
  const ctx = useContext(EstimateShippingContext);
176
+ const t = useTranslations("Cart.Sidebar");
175
177
  if (!ctx) return null;
176
178
  const { zipCode, setZipCode } = ctx;
177
- const t = useTranslations("Cart.Sidebar");
178
179
  return (
179
180
  <TextField
180
181
  fullWidth
@@ -189,9 +190,9 @@ EstimateShipping.ZipCode = () => {
189
190
 
190
191
  EstimateShipping.Submit = () => {
191
192
  const ctx = useContext(EstimateShippingContext);
193
+ const t = useTranslations("Cart.Sidebar");
192
194
  if (!ctx) return null;
193
195
  const { doDeliveryMethodLookup } = ctx;
194
- const t = useTranslations("Cart.Sidebar");
195
196
  return (
196
197
  <Button
197
198
  variant="outlined"
@@ -207,10 +208,10 @@ EstimateShipping.Submit = () => {
207
208
 
208
209
  EstimateShipping.Options = () => {
209
210
  const ctx = useContext(EstimateShippingContext);
210
- if (!ctx) return null;
211
- const { deliveryOptions, noOptionsFound } = ctx;
212
211
  const { formatCurrency } = useCurrencyFormatter();
213
212
  const t = useTranslations("Cart.Sidebar");
213
+ if (!ctx) return null;
214
+ const { deliveryOptions, noOptionsFound } = ctx;
214
215
 
215
216
  if (noOptionsFound) {
216
217
  return <Span color="error.main">{t("noDeliveryOptionsFound")}</Span>;
@@ -1,25 +1,26 @@
1
1
  "use client";
2
2
 
3
+ import type { Cart } from "@evenicanpm/storefront-core/src/api-manager/schemas/cart.schema";
4
+ import useCheckout from "@evenicanpm/storefront-core/src/api-manager/services/cart/mutations/checkout";
5
+ import getChannelConfiguration from "@evenicanpm/storefront-core/src/api-manager/services/organization/queries/get-channel-configuration";
6
+ import { PageSlug } from "@evenicanpm/storefront-core/src/lib/page-slugs";
7
+ import CheckoutStep from "@evenicanpm/storefront-core/src/pages-v2/checkout/checkout-alt-form/checkout-step";
8
+ import { useNotification } from "@evenicanpm/storefront-core/src/providers/notifications/use-notification";
9
+ import type { CardPaymentAcceptResult } from "@msdyn365-commerce/retail-proxy";
10
+ import { Box, Button } from "@mui/material";
11
+ import Grid from "@mui/material/Grid2";
12
+ import { useQueryClient } from "@tanstack/react-query";
13
+ import { useRouter } from "next/navigation";
14
+ import { useTranslations } from "next-intl";
3
15
  import React, {
4
16
  createContext,
17
+ type ReactElement,
18
+ type ReactNode,
5
19
  useContext,
6
- useState,
7
20
  useEffect,
8
- ReactNode,
9
- ReactElement,
21
+ useState,
10
22
  } from "react";
11
- import { Box, Button } from "@mui/material";
12
- import Grid from "@mui/material/Grid2";
13
- import { useRouter } from "next/navigation";
14
- import { useTranslations } from "next-intl";
15
- import { useQueryClient } from "@tanstack/react-query";
16
- import { CardPaymentAcceptResult } from "@msdyn365-commerce/retail-proxy";
17
- import { PageSlug } from "@evenicanpm/storefront-core/src/lib/page-slugs";
18
- import getChannelConfiguration from "@evenicanpm/storefront-core/src/api-manager/services/organization/queries/get-channel-configuration";
19
- import { useNotification } from "@evenicanpm/storefront-core/src/providers/notifications/use-notification";
20
- import useCheckout from "@evenicanpm/storefront-core/src/api-manager/services/cart/mutations/checkout";
21
- import { Cart } from "@evenicanpm/storefront-core/src/api-manager/schemas/cart.schema";
22
- import CheckoutStep from "@evenicanpm/storefront-core/src/pages-v2/checkout/checkout-alt-form/checkout-step";
23
+
23
24
  interface CheckoutContextValue {
24
25
  cart: Cart;
25
26
  activeStep: number;
@@ -42,7 +43,7 @@ interface InjectedStepProps {
42
43
  isLastStep: boolean;
43
44
  }
44
45
 
45
- import { CheckoutStepComponentProps } from "@evenicanpm/storefront-core/src/pages-v2/checkout/checkout-alt-form/checkout-step";
46
+ import type { CheckoutStepComponentProps } from "@evenicanpm/storefront-core/src/pages-v2/checkout/checkout-alt-form/checkout-step";
46
47
 
47
48
  interface StepProps<T extends object> {
48
49
  title: string;
@@ -162,9 +163,9 @@ CheckoutForm.Step = <T extends object>({
162
163
  componentProps,
163
164
  }: StepProps<T>) => {
164
165
  const ctx = useContext(CheckoutContext);
166
+ const t = useTranslations("Checkout");
165
167
  if (!ctx) return null;
166
168
  const { activeStep, setActiveStep, cart } = ctx;
167
- const t = useTranslations("Checkout");
168
169
  return (
169
170
  <CheckoutStep
170
171
  title={t(title)}
@@ -185,9 +186,9 @@ CheckoutForm.Step = <T extends object>({
185
186
 
186
187
  CheckoutForm.Footer = () => {
187
188
  const ctx = useContext(CheckoutContext);
189
+ const t = useTranslations("Checkout");
188
190
  if (!ctx) return null;
189
191
  const { placeOrder, isSubmitting, activeStep, totalSteps } = ctx;
190
- const t = useTranslations("Checkout");
191
192
 
192
193
  const isFormComplete = () => activeStep > totalSteps;
193
194
 
@@ -1,12 +1,12 @@
1
+ import type { Cart } from "@evenicanpm/storefront-core/src/api-manager/schemas/cart.schema";
1
2
  import Card from "@evenicanpm/storefront-core/src/components-v2/BazaarCard";
3
+ import { FlexBox } from "@evenicanpm/storefront-core/src/components-v2/flex-box";
4
+ import { Span } from "@evenicanpm/storefront-core/src/components-v2/Typography";
5
+ import StepHeading from "@evenicanpm/storefront-core/src/pages-v2/checkout/checkout-alt-form/step-heading";
2
6
  import { Button, useTheme } from "@mui/material";
3
7
  import Grid from "@mui/material/Grid2";
4
- import React, { createContext, useContext } from "react";
5
- import { FlexBox } from "@evenicanpm/storefront-core/src/components-v2/flex-box";
6
- import { Cart } from "@evenicanpm/storefront-core/src/api-manager/schemas/cart.schema";
7
8
  import { useTranslations } from "next-intl";
8
- import StepHeading from "@evenicanpm/storefront-core/src/pages-v2/checkout/checkout-alt-form/step-heading";
9
- import { Span } from "@evenicanpm/storefront-core/src/components-v2/Typography";
9
+ import React, { createContext, useContext } from "react";
10
10
 
11
11
  export type StepViewState = "active" | "preview" | "pending";
12
12
  export type StepSubmissionState = "idle" | "submitting" | "error";
@@ -92,9 +92,9 @@ const CheckoutStep = ({
92
92
 
93
93
  CheckoutStep.Header = () => {
94
94
  const ctx = useContext(StepContext);
95
+ const t = useTranslations("Checkout.Steps");
95
96
  if (!ctx) return null;
96
97
  const { title, stepNumber, stepViewState, hasCompleted, setActiveStep } = ctx;
97
- const t = useTranslations("Checkout.Steps");
98
98
 
99
99
  return (
100
100
  <FlexBox justifyContent="space-between">
@@ -149,9 +149,9 @@ CheckoutStep.Body = <P extends object = {}>({
149
149
 
150
150
  CheckoutStep.Actions = () => {
151
151
  const ctx = useContext(StepContext);
152
+ const t = useTranslations("Checkout.Steps");
152
153
  if (!ctx) return null;
153
154
  const { stepViewState, setStepSubmissionState } = ctx;
154
- const t = useTranslations("Checkout.Steps");
155
155
 
156
156
  if (stepViewState !== "active") return null;
157
157