@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,4 +1,4 @@
1
- import {
1
+ import type {
2
2
  Category,
3
3
  TextValueTranslation,
4
4
  } from "@msdyn365-commerce/retail-proxy";
@@ -67,7 +67,7 @@ const mapCategoryToHierarchy = (
67
67
  return categoryHierarchy;
68
68
  }
69
69
 
70
- return JSON.parse(JSON.stringify(rootCategory.Children)) ?? [];
70
+ return globalThis.structuredClone(rootCategory.Children) ?? [];
71
71
  };
72
72
 
73
73
  const generateUrl = (
@@ -86,7 +86,7 @@ const generateUrl = (
86
86
  );
87
87
  }
88
88
  categoryNames.unshift(currentCategory.RecordId.toString());
89
- return categoryNames.reverse().join("/");
89
+ return categoryNames.slice().reverse().join("/");
90
90
  };
91
91
 
92
92
  const getFriendlyName = (
@@ -99,7 +99,7 @@ const getFriendlyName = (
99
99
  (item) => item?.Language?.toLowerCase() === locale?.toLowerCase(),
100
100
  );
101
101
  }
102
- return nameTranslation && nameTranslation.Text;
102
+ return nameTranslation?.Text;
103
103
  };
104
104
 
105
105
  const normalizeCategoryName = (string_: string) =>
@@ -1,10 +1,9 @@
1
- import { GraphQLClient } from "graphql-request";
2
-
3
1
  // Note: We are keeping two separate versions of the graphqlRequestSdk
4
2
  // currently. We need one in the api-manager client packages to get types
5
3
  // and one here to isntantiate because graphql-request library must be same
6
4
  // for this file and the sdk
7
5
  import { getSdk } from "@evenicanpm/storefront-core/src/lib/graphqlRequestSdk";
6
+ import { GraphQLClient } from "graphql-request";
8
7
 
9
8
  // typescript can't infer type without reference
10
9
  export type E4Sdk = ReturnType<typeof getSdk>;
@@ -1,8 +1,38 @@
1
- import { Theme } from "@mui/material";
1
+ import type { Theme } from "@mui/material";
2
2
 
3
3
  // Define a union type for possible color values
4
4
  type ColorValue = string | number | (() => string);
5
5
 
6
+ // Helper to resolve possible function values
7
+ const resolveColorValue = (value: ColorValue): string => {
8
+ return typeof value === "function" ? value() : String(value);
9
+ };
10
+
11
+ // Helper to get main color if available
12
+ const getMainColor = (colorObj: Record<string, ColorValue>): string => {
13
+ if ("main" in colorObj) {
14
+ const mainValue = colorObj.main;
15
+ return resolveColorValue(mainValue);
16
+ }
17
+ return "";
18
+ };
19
+
20
+ // Helper to get shade color if available
21
+ const getShadeColor = (
22
+ colorObj: Record<string, ColorValue>,
23
+ shade: number | string,
24
+ ): string | undefined => {
25
+ const shadeKey = shade.toString();
26
+
27
+ // Try to access the shade
28
+ if (shadeKey in colorObj) {
29
+ const value = colorObj[shadeKey];
30
+ return resolveColorValue(value);
31
+ }
32
+
33
+ return undefined;
34
+ };
35
+
6
36
  // Type-safe color getter function
7
37
  const getPaletteColor = (
8
38
  theme: Theme,
@@ -21,30 +51,20 @@ const getPaletteColor = (
21
51
 
22
52
  // If shade is specified, try to get it
23
53
  if (shade !== undefined) {
24
- const shadeKey = shade.toString();
54
+ const shadeColor = getShadeColor(colorObj, shade);
25
55
 
26
- // Try to access the shade
27
- if (shadeKey in colorObj) {
28
- const value = colorObj[shadeKey];
29
- // Handle possible function values
30
- return typeof value === "function" ? value() : String(value);
56
+ if (shadeColor) {
57
+ return shadeColor;
31
58
  }
32
59
 
33
60
  // Check if this is a PaletteColor with main/dark/light properties
34
- if ("main" in colorObj) {
35
- const mainValue = colorObj.main;
36
- return typeof mainValue === "function" ? mainValue() : String(mainValue);
37
- }
61
+ return getMainColor(colorObj);
38
62
  }
39
63
 
40
64
  // If no shade specified but color has 'main' property
41
- if ("main" in colorObj) {
42
- const mainValue = colorObj.main;
43
- return typeof mainValue === "function" ? mainValue() : String(mainValue);
44
- }
65
+ return getMainColor(colorObj);
45
66
 
46
67
  // Last resort fallback
47
- return "";
48
68
  };
49
69
 
50
70
  export default getPaletteColor;
@@ -1,6 +1,5 @@
1
- import { GraphQLClient, RequestOptions } from "graphql-request";
2
- import { GraphQLError, print } from "graphql";
3
- import { DocumentNode } from "graphql";
1
+ import { type DocumentNode, type GraphQLError, print } from "graphql";
2
+ import type { GraphQLClient, RequestOptions } from "graphql-request";
4
3
  export type Maybe<T> = T | null;
5
4
  export type InputMaybe<T> = Maybe<T>;
6
5
  export type Exact<T extends { [key: string]: unknown }> = {
@@ -5,10 +5,10 @@ function sRGBtoLin(colorChannel: number): number {
5
5
  if (colorChannel <= 0.04045) {
6
6
  return colorChannel / 12.92;
7
7
  } else {
8
- return Math.pow((colorChannel + 0.055) / 1.055, 2.4);
8
+ return ((colorChannel + 0.055) / 1.055) ** 2.4;
9
9
  }
10
10
  }
11
- 1;
11
+
12
12
  function YtoLstar(Y: number): number {
13
13
  // Send this function a luminance value between 0.0 and 1.0,
14
14
  // and it returns L* which is "perceptual lightness"
@@ -16,7 +16,7 @@ function YtoLstar(Y: number): number {
16
16
  if (Y <= 216 / 24389) {
17
17
  return Y * (24389 / 27);
18
18
  } else {
19
- return Math.pow(Y, 1 / 3) * 116 - 16;
19
+ return Y ** (1 / 3) * 116 - 16;
20
20
  }
21
21
  }
22
22
 
@@ -30,7 +30,7 @@ export const hexToLuma = (hex: string): number => {
30
30
  throw new Error("not a valid hex color code");
31
31
  }
32
32
 
33
- const number = Number.parseInt(hex[0] === "#" ? hex.slice(1) : hex, 16);
33
+ const number = Number.parseInt(hex.startsWith("#") ? hex.slice(1) : hex, 16);
34
34
  const red = number >> 16;
35
35
  const green = (number >> 8) & 255;
36
36
  const blue = number & 255;
@@ -1,4 +1,4 @@
1
- import { ProductRefinerValue } from "@msdyn365-commerce/retail-proxy";
1
+ import type { ProductRefinerValue } from "@msdyn365-commerce/retail-proxy";
2
2
 
3
3
  export const PageKey = {
4
4
  TOP: "perPage",
@@ -1,4 +1,4 @@
1
- import { ProductRefinerValue } from "@msdyn365-commerce/retail-proxy";
1
+ import type { ProductRefinerValue } from "@msdyn365-commerce/retail-proxy";
2
2
 
3
3
  const convertRefinerToParameter = (refiner: ProductRefinerValue) =>
4
4
  `${refiner.RefinerRecordId}|${refiner.DataTypeValue}|${refiner.LeftValueBoundString}|${refiner.RightValueBoundString}|${refiner.RefinerSourceValue}`;
@@ -1,4 +1,4 @@
1
- import { RegularStoreHours } from "@msdyn365-commerce/retail-proxy";
1
+ import type { RegularStoreHours } from "@msdyn365-commerce/retail-proxy";
2
2
  import get from "lodash/get";
3
3
 
4
4
  export interface IStoreSelectorLocationLineItemResources {
@@ -46,7 +46,7 @@ export const secondsToTime = (
46
46
  let hours = Math.floor(seconds / (60 * 60));
47
47
  const ampm = hours >= 12 ? "pm" : "am";
48
48
  hours %= 12;
49
- hours = hours ? hours : 12;
49
+ hours = hours || 12;
50
50
  const divisorForMinutes = seconds % (60 * 60);
51
51
  const minutes =
52
52
  Math.floor(divisorForMinutes / 60) < 10
@@ -107,13 +107,13 @@ const buildHoursDisplayInfo = (
107
107
  hoursInfo: string,
108
108
  resources: IStoreSelectorLocationLineItemResources,
109
109
  ): IHoursDisplayInfo => {
110
+ const isSameDay = startDay === endDay;
111
+
110
112
  return {
111
113
  startDayShort: getShortTimeString(startDay, resources),
112
114
  startDayFull: getFullTimeString(startDay, resources),
113
- endDayShort:
114
- startDay !== endDay ? getShortTimeString(endDay, resources) : undefined,
115
- endDayFull:
116
- startDay !== endDay ? getFullTimeString(endDay, resources) : undefined,
115
+ endDayShort: isSameDay ? undefined : getShortTimeString(endDay, resources),
116
+ endDayFull: isSameDay ? undefined : getFullTimeString(endDay, resources),
117
117
  timeRange: hoursInfo,
118
118
  };
119
119
  };
@@ -1,29 +1,29 @@
1
1
  "use client";
2
2
 
3
- import { createContext, Fragment, ReactNode } from "react";
4
- import { usePathname } from "next/navigation";
5
- import { useTranslations } from "next-intl";
6
- // ICON COMPONENTS
7
- import {
8
- MdOutlineShoppingBag as ShoppingBagOutlined,
9
- MdFavoriteBorder as FavoriteBorder,
10
- MdPerson as Person,
11
- MdPlace as Place,
12
- } from "react-icons/md";
3
+ // API
4
+ import getUser from "@evenicanpm/storefront-core/src/api-manager/services/user/queries/get-user";
5
+ import getUserCounts from "@evenicanpm/storefront-core/src/api-manager/services/user/queries/get-user-counts";
13
6
  // GLOBAL CUSTOM COMPONENTS
14
7
  import FlexBox from "@evenicanpm/storefront-core/src/components-v2/flex-box/flex-box";
15
8
  import {
16
9
  Paragraph,
17
10
  Span,
18
11
  } from "@evenicanpm/storefront-core/src/components-v2/Typography";
19
- // API
20
- import getUser from "@evenicanpm/storefront-core/src/api-manager/services/user/queries/get-user";
21
- import getUserCounts from "@evenicanpm/storefront-core/src/api-manager/services/user/queries/get-user-counts";
22
12
  // STYLED COMPONENTS
23
13
  import {
24
14
  MainContainer,
25
15
  StyledNavLink,
26
16
  } from "@evenicanpm/storefront-core/src/pages-v2/account/styles";
17
+ import { usePathname } from "next/navigation";
18
+ import { useTranslations } from "next-intl";
19
+ import { createContext, Fragment, type ReactNode } from "react";
20
+ // ICON COMPONENTS
21
+ import {
22
+ MdFavoriteBorder as FavoriteBorder,
23
+ MdPerson as Person,
24
+ MdPlace as Place,
25
+ MdOutlineShoppingBag as ShoppingBagOutlined,
26
+ } from "react-icons/md";
27
27
 
28
28
  /**
29
29
  *
@@ -1,32 +1,33 @@
1
1
  "use client";
2
2
 
3
- import React, { createContext, useContext } from "react";
3
+ // API and Interfaces
4
+ import type { Address } from "@evenicanpm/storefront-core/src/api-manager/schemas/address.schema";
5
+ import useCreateAddress from "@evenicanpm/storefront-core/src/api-manager/services/address/mutations/create-address";
6
+ import useUpdateAddress from "@evenicanpm/storefront-core/src/api-manager/services/address/mutations/update-address";
7
+ import getCountries from "@evenicanpm/storefront-core/src/api-manager/services/address/queries/get-countries";
8
+ import getStates from "@evenicanpm/storefront-core/src/api-manager/services/address/queries/get-states";
9
+ import { useNotification } from "@evenicanpm/storefront-core/src/providers/notifications/use-notification";
10
+ import type { CountryRegionInfo } from "@msdyn365-commerce/retail-proxy";
4
11
  import {
5
12
  Box,
6
13
  Button,
7
14
  FormControl,
8
15
  InputLabel,
9
- TextField,
10
16
  MenuItem,
11
- Select,
12
17
  OutlinedInput,
18
+ Select,
19
+ TextField,
13
20
  } from "@mui/material";
14
21
  import Grid from "@mui/material/Grid2";
15
- import _ from "lodash";
16
- import { useLocale, useTranslations } from "next-intl";
17
- import { useNotification } from "@evenicanpm/storefront-core/src/providers/notifications/use-notification";
18
- import { useRouter } from "next/navigation";
19
22
  // Forms
20
23
  import { useFormik } from "formik";
21
- import { z } from "zod";
22
24
  import { withZodSchema } from "formik-validator-zod";
23
- // API and Interfaces
24
- import { Address } from "@evenicanpm/storefront-core/src/api-manager/schemas/address.schema";
25
- import { CountryRegionInfo } from "@msdyn365-commerce/retail-proxy";
26
- import getCountries from "@evenicanpm/storefront-core/src/api-manager/services/address/queries/get-countries";
27
- import getStates from "@evenicanpm/storefront-core/src/api-manager/services/address/queries/get-states";
28
- import useCreateAddress from "@evenicanpm/storefront-core/src/api-manager/services/address/mutations/create-address";
29
- import useUpdateAddress from "@evenicanpm/storefront-core/src/api-manager/services/address/mutations/update-address";
25
+ import _ from "lodash";
26
+ import { useRouter } from "next/navigation";
27
+ import { useLocale, useTranslations } from "next-intl";
28
+ import React, { createContext, useContext } from "react";
29
+ import { z } from "zod";
30
+
30
31
  interface FormContextValue {
31
32
  formik: ReturnType<typeof useFormik<any>>;
32
33
  countries: CountryRegionInfo[] | undefined;
@@ -42,7 +43,8 @@ interface RootProps {
42
43
  }
43
44
 
44
45
  const AddressForm = ({ address, children }: RootProps) => {
45
- const [tn, t] = ["Account.Addresses", "Address"].map(useTranslations);
46
+ const tn = useTranslations("Account.Addresses");
47
+ const t = useTranslations("Address");
46
48
  const { setNotification } = useNotification();
47
49
  const router = useRouter();
48
50
  const locale = useLocale();
@@ -117,6 +119,7 @@ const AddressForm = ({ address, children }: RootProps) => {
117
119
  message: tn("addressFailed"),
118
120
  severity: "error",
119
121
  });
122
+ console.log(error);
120
123
  }
121
124
  };
122
125
 
@@ -152,9 +155,9 @@ AddressForm.Fields = ({ children }: { children?: React.ReactNode }) => {
152
155
 
153
156
  AddressForm.Field = ({ name, label, required }: FieldProps) => {
154
157
  const ctx = useContext(FormContext);
158
+ const t = useTranslations("Address");
155
159
  if (!ctx) return null;
156
160
  const { formik } = ctx;
157
- const t = useTranslations("Address");
158
161
 
159
162
  return (
160
163
  <Grid size={{ sm: 6, xs: 12 }}>
@@ -179,9 +182,9 @@ AddressForm.Field = ({ name, label, required }: FieldProps) => {
179
182
 
180
183
  AddressForm.Country = () => {
181
184
  const ctx = useContext(FormContext);
185
+ const t = useTranslations("Address");
182
186
  if (!ctx) return null;
183
187
  const { formik, countries, setSelectedCountry } = ctx;
184
- const t = useTranslations("Address");
185
188
 
186
189
  return (
187
190
  <Grid size={{ sm: 6, xs: 12 }}>
@@ -209,8 +212,8 @@ AddressForm.Country = () => {
209
212
  }}
210
213
  >
211
214
  <MenuItem value="">Select Country</MenuItem>
212
- {countries?.map(({ ShortName, CountryRegionId }, i) => (
213
- <MenuItem key={i} value={CountryRegionId}>
215
+ {countries?.map(({ ShortName, CountryRegionId }) => (
216
+ <MenuItem key={CountryRegionId} value={CountryRegionId}>
214
217
  {ShortName}
215
218
  </MenuItem>
216
219
  ))}
@@ -229,9 +232,9 @@ AddressForm.Country = () => {
229
232
 
230
233
  AddressForm.State = () => {
231
234
  const ctx = useContext(FormContext);
235
+ const t = useTranslations("Address");
232
236
  if (!ctx) return null;
233
237
  const { formik, states } = ctx;
234
- const t = useTranslations("Address");
235
238
 
236
239
  return (
237
240
  <Grid size={{ sm: 6, xs: 12 }}>
@@ -252,8 +255,8 @@ AddressForm.State = () => {
252
255
  onBlur={formik.handleBlur}
253
256
  >
254
257
  <MenuItem value="">Select a state</MenuItem>
255
- {states?.map(({ StateId, StateName }, i) => (
256
- <MenuItem key={i} value={StateId}>
258
+ {states?.map(({ StateId, StateName }) => (
259
+ <MenuItem key={StateId} value={StateId}>
257
260
  {StateName}
258
261
  </MenuItem>
259
262
  ))}
@@ -1,22 +1,21 @@
1
1
  "use client";
2
2
 
3
- import { createContext, useContext, ReactNode } from "react";
4
- import IconButton from "@mui/material/IconButton";
5
- import { Button, Box, Chip } from "@mui/material";
6
- import { SxProps } from "@mui/material/styles";
7
- import { useTranslations } from "next-intl";
8
- import { useRouter } from "next/navigation";
9
- import { useNotification } from "@evenicanpm/storefront-core/src/providers/notifications/use-notification";
10
- // ICONS
11
- import { MdEdit as Edit } from "react-icons/md";
12
- import { MdDelete as Delete } from "react-icons/md";
13
- // Custom Components
14
- import { Paragraph } from "@evenicanpm/storefront-core/src/components-v2/Typography";
15
- import TableRow from "@evenicanpm/storefront-core/src/pages-v2/account/table-row";
3
+ import type { Address } from "@evenicanpm/storefront-core/src/api-manager/schemas/address.schema";
16
4
  // API
17
5
  import useDeleteAddress from "@evenicanpm/storefront-core/src/api-manager/services/address/mutations/delete-address";
18
6
  import useUpdateUser from "@evenicanpm/storefront-core/src/api-manager/services/user/mutations/update-user";
19
- import { Address } from "@evenicanpm/storefront-core/src/api-manager/schemas/address.schema";
7
+ // Custom Components
8
+ import { Paragraph } from "@evenicanpm/storefront-core/src/components-v2/Typography";
9
+ import TableRow from "@evenicanpm/storefront-core/src/pages-v2/account/table-row";
10
+ import { useNotification } from "@evenicanpm/storefront-core/src/providers/notifications/use-notification";
11
+ import { Box, Button, Chip } from "@mui/material";
12
+ import IconButton from "@mui/material/IconButton";
13
+ import type { SxProps } from "@mui/material/styles";
14
+ import { useRouter } from "next/navigation";
15
+ import { useTranslations } from "next-intl";
16
+ import { createContext, type ReactNode, useContext } from "react";
17
+ // ICONS
18
+ import { MdDelete as Delete, MdEdit as Edit } from "react-icons/md";
20
19
 
21
20
  interface AddressContextValue {
22
21
  address: Address;
@@ -115,9 +114,9 @@ AddressListItem.Actions = ({ children }: { children: ReactNode }) => {
115
114
 
116
115
  AddressListItem.Primary = () => {
117
116
  const ctx = useContext(AddressContext);
117
+ const t = useTranslations("Account.Addresses");
118
118
  if (!ctx) return null;
119
119
  const { address, setPrimaryAddress } = ctx;
120
- const t = useTranslations("Account.Addresses");
121
120
  const rid = address.RecordId?.toString();
122
121
  const addrId = address.Id ?? rid ?? "";
123
122
 
@@ -1,23 +1,23 @@
1
1
  "use client";
2
2
 
3
- import React, { ReactNode, createContext, useContext } from "react";
4
- import Link from "next/link";
3
+ import FlexBox from "@evenicanpm/storefront-core/src/components-v2/flex-box/flex-box";
4
+ // GLOBAL CUSTOM COMPONENTS
5
+ import SideNav from "@evenicanpm/storefront-core/src/components-v2/side-nav/index";
6
+ import { H2 } from "@evenicanpm/storefront-core/src/components-v2/Typography";
7
+ import Navigation from "@evenicanpm/storefront-core/src/pages-v2/account/account-navigation";
5
8
  import {
6
9
  Box,
7
10
  Button,
8
11
  IconButton,
9
- Theme,
10
12
  styled,
13
+ type Theme,
11
14
  useMediaQuery,
12
15
  } from "@mui/material";
16
+ import Link from "next/link";
13
17
  import { useTranslations } from "next-intl";
18
+ import React, { createContext, type ReactNode, useContext } from "react";
19
+ import type { IconType } from "react-icons";
14
20
  import { MdMenu as Menu } from "react-icons/md";
15
- // GLOBAL CUSTOM COMPONENTS
16
- import SideNav from "@evenicanpm/storefront-core/src/components-v2/side-nav/index";
17
- import { H2 } from "@evenicanpm/storefront-core/src/components-v2/Typography";
18
- import FlexBox from "@evenicanpm/storefront-core/src/components-v2/flex-box/flex-box";
19
- import { IconType } from "react-icons";
20
- import Navigation from "@evenicanpm/storefront-core/src/pages-v2/account/account-navigation";
21
21
 
22
22
  const StyledBox = styled("div")(({ theme }) => ({
23
23
  display: "flex",
@@ -1,20 +1,20 @@
1
- import { Fragment, createContext, useContext } from "react";
2
- import { useTranslations } from "next-intl";
3
- import Box from "@mui/material/Box";
4
- import Card from "@mui/material/Card";
5
- import Avatar from "@mui/material/Avatar";
6
- import styled from "@mui/material/styles/styled";
7
- import { MdDone as Done } from "react-icons/md";
8
- // CUSTOM ICON COMPONENTS
9
- import Delivery from "@evenicanpm/storefront-core/src/pages-v2/account/orders/icons/delivery";
10
- import PackageBox from "@evenicanpm/storefront-core/src/pages-v2/account/orders/icons/package-box";
11
- import TruckFilled from "@evenicanpm/storefront-core/src/pages-v2/account/orders/icons/truck-filled";
12
- // GLOBAL CUSTOM COMPONENTS
13
- import { Paragraph } from "@evenicanpm/storefront-core/src/components-v2/Typography";
14
1
  import {
15
2
  FlexBetween,
16
3
  FlexBox,
17
4
  } from "@evenicanpm/storefront-core/src/components-v2/flex-box/index";
5
+ // GLOBAL CUSTOM COMPONENTS
6
+ import { Paragraph } from "@evenicanpm/storefront-core/src/components-v2/Typography";
7
+ // CUSTOM ICON COMPONENTS
8
+ import Delivery from "@evenicanpm/storefront-core/src/pages-v2/account/orders/icons/delivery";
9
+ import PackageBox from "@evenicanpm/storefront-core/src/pages-v2/account/orders/icons/package-box";
10
+ import TruckFilled from "@evenicanpm/storefront-core/src/pages-v2/account/orders/icons/truck-filled";
11
+ import Avatar from "@mui/material/Avatar";
12
+ import Box from "@mui/material/Box";
13
+ import Card from "@mui/material/Card";
14
+ import styled from "@mui/material/styles/styled";
15
+ import { useTranslations } from "next-intl";
16
+ import { createContext, Fragment, useContext } from "react";
17
+ import { MdDone as Done } from "react-icons/md";
18
18
 
19
19
  // STYLED COMPONENTS
20
20
  const StyledFlexbox = styled(FlexBetween)(({ theme }) => ({
@@ -85,7 +85,7 @@ OrderProgress.Steps = () => {
85
85
  return (
86
86
  <StyledFlexbox>
87
87
  {stepIcons.map((Icon, index) => (
88
- <Fragment key={index}>
88
+ <Fragment key={`step-${index + 1}`}>
89
89
  <Box position="relative">
90
90
  <Avatar
91
91
  alt="step"
@@ -1,18 +1,19 @@
1
- import Link from "next/link";
2
- import Box from "@mui/material/Box";
3
- import Chip from "@mui/material/Chip";
4
- import IconButton from "@mui/material/IconButton";
5
- import { MdEast as East } from "react-icons/md";
6
- import { ChipProps } from "@mui/material";
7
- import { format } from "date-fns";
1
+ import type { SalesOrder } from "@evenicanpm/storefront-core/src/api-manager/schemas/order.schema";
8
2
  import {
9
3
  H6,
10
4
  Paragraph,
11
5
  } from "@evenicanpm/storefront-core/src/components-v2/Typography";
12
- import TableRow from "@evenicanpm/storefront-core/src/pages-v2/account/table-row";
13
6
  import useCurrencyFormatter from "@evenicanpm/storefront-core/src/lib/currency-formatter";
14
- import { SalesOrder } from "@evenicanpm/storefront-core/src/api-manager/schemas/order.schema";
15
- import React, { createContext, useContext } from "react";
7
+ import TableRow from "@evenicanpm/storefront-core/src/pages-v2/account/table-row";
8
+ import type { ChipProps } from "@mui/material";
9
+ import Box from "@mui/material/Box";
10
+ import Chip from "@mui/material/Chip";
11
+ import IconButton from "@mui/material/IconButton";
12
+ import { format } from "date-fns";
13
+ import Link from "next/link";
14
+ import type React from "react";
15
+ import { createContext, useContext } from "react";
16
+ import { MdEast as East } from "react-icons/md";
16
17
 
17
18
  type Props = { order: SalesOrder };
18
19
 
@@ -1,7 +1,4 @@
1
- import Grid from "@mui/material/Grid2";
2
- import Card from "@mui/material/Card";
3
- import Divider from "@mui/material/Divider";
4
- import { useTranslations } from "next-intl";
1
+ import type { SalesOrder } from "@evenicanpm/storefront-core/src/api-manager/schemas/order.schema";
5
2
  import { FlexBetween } from "@evenicanpm/storefront-core/src/components-v2/flex-box/index";
6
3
  import {
7
4
  H5,
@@ -9,8 +6,12 @@ import {
9
6
  Paragraph,
10
7
  } from "@evenicanpm/storefront-core/src/components-v2/Typography";
11
8
  import useCurrencyFormatter from "@evenicanpm/storefront-core/src/lib/currency-formatter";
12
- import { SalesOrder } from "@evenicanpm/storefront-core/src/api-manager/schemas/order.schema";
13
- import React, { createContext, useContext } from "react";
9
+ import Card from "@mui/material/Card";
10
+ import Divider from "@mui/material/Divider";
11
+ import Grid from "@mui/material/Grid2";
12
+ import { useTranslations } from "next-intl";
13
+ import type React from "react";
14
+ import { createContext, useContext } from "react";
14
15
 
15
16
  type Props = { order: SalesOrder };
16
17
 
@@ -1,27 +1,28 @@
1
- import Card from "@mui/material/Card";
2
- import Button from "@mui/material/Button";
3
- import Avatar from "@mui/material/Avatar";
4
- import Box from "@mui/material/Box";
5
- import Grid from "@mui/material/Grid2";
6
- import Link from "next/link";
7
- import { useTranslations } from "next-intl";
1
+ import type {
2
+ SalesLine,
3
+ SalesOrder,
4
+ } from "@evenicanpm/storefront-core/src/api-manager/schemas/order.schema";
5
+ import {
6
+ FlexBetween,
7
+ FlexBox,
8
+ } from "@evenicanpm/storefront-core/src/components-v2/flex-box/index";
8
9
  import {
9
10
  H6,
10
11
  Paragraph,
11
12
  Span,
12
13
  } from "@evenicanpm/storefront-core/src/components-v2/Typography";
13
- import {
14
- FlexBetween,
15
- FlexBox,
16
- } from "@evenicanpm/storefront-core/src/components-v2/flex-box/index";
14
+ import buildDetailUrl from "@evenicanpm/storefront-core/src/lib/build-detail-url";
17
15
  import useCurrencyFormatter from "@evenicanpm/storefront-core/src/lib/currency-formatter";
18
- import {
19
- SalesLine,
20
- SalesOrder,
21
- } from "@evenicanpm/storefront-core/src/api-manager/schemas/order.schema";
22
16
  import { ProductDimensionType } from "@msdyn365-commerce/retail-proxy";
23
- import buildDetailUrl from "@evenicanpm/storefront-core/src/lib/build-detail-url";
24
- import React, { createContext } from "react";
17
+ import Avatar from "@mui/material/Avatar";
18
+ import Box from "@mui/material/Box";
19
+ import Button from "@mui/material/Button";
20
+ import Card from "@mui/material/Card";
21
+ import Grid from "@mui/material/Grid2";
22
+ import Link from "next/link";
23
+ import { useTranslations } from "next-intl";
24
+ import type React from "react";
25
+ import { createContext } from "react";
25
26
 
26
27
  type Props = { order: SalesOrder };
27
28
 
@@ -140,7 +141,7 @@ OrderedProducts.Dimensions = ({ item }: { item: SalesLine }) => {
140
141
  return (
141
142
  <Grid size={{ xs: 8, sm: 4 }}>
142
143
  {item.Product.Dimensions.map((dim, i) => (
143
- <Paragraph key={i} paddingLeft={"15px"}>
144
+ <Paragraph key={`product-dim-${i + 1}`} paddingLeft={"15px"}>
144
145
  <Span>{ProductDimensionType[dim.DimensionTypeValue || 0]}:</Span>
145
146
  <Span sx={{ ml: 1 }}>{dim.DimensionValue?.Value}</Span>
146
147
  </Paragraph>
@@ -1,7 +1,7 @@
1
- import { render, screen, fireEvent, waitFor } from "@testing-library/react";
2
- import { vi } from "vitest";
3
1
  import ProfileButton from "@evenicanpm/storefront-core/src/pages-v2/account/profile/profile-button";
4
- import { getMsalInstance, initializeMsal, getRequestConfig } from "@/auth/msal";
2
+ import { fireEvent, render, screen, waitFor } from "@testing-library/react";
3
+ import { vi } from "vitest";
4
+ import { getMsalInstance, getRequestConfig, initializeMsal } from "@/auth/msal";
5
5
 
6
6
  vi.mock("@/auth/msal", () => ({
7
7
  initializeMsal: vi.fn(),
@@ -1,10 +1,11 @@
1
1
  "use client";
2
2
 
3
- import { getMsalInstance, initializeMsal, getRequestConfig } from "@/auth/msal";
4
- import { useEffect, useState } from "react";
5
- import { Button } from "@mui/material";
3
+ import type { RedirectRequest } from "@azure/msal-browser";
6
4
  import T from "@evenicanpm/storefront-core/src/components-v2/T/index";
7
- import { RedirectRequest } from "@azure/msal-browser";
5
+ import { Button } from "@mui/material";
6
+ import { useEffect, useState } from "react";
7
+ import { getMsalInstance, getRequestConfig, initializeMsal } from "@/auth/msal";
8
+
8
9
  interface Props {
9
10
  type: string;
10
11
  path: string;