@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,30 +1,21 @@
1
1
  /* eslint-disable @typescript-eslint/no-explicit-any */
2
- import { UserApi } from "@evenicanpm/storefront-core/src/api-manager/types/Datasource";
3
- import {
4
- CopyCartToWishlistInput,
5
- ExtendedWishlist,
6
- User,
7
- UserCounts,
8
- Wishlist,
9
- WishlistCreateInput,
10
- WishlistDetailInput,
11
- WishlistLinesInput,
12
- } from "@/schemas/user.schema";
2
+
3
+ import { D365DatasourceBase } from "@evenicanpm/storefront-core/src/api-manager/datasources/d365/d365-base.datasource";
4
+ import { D365ProductDatasource } from "@evenicanpm/storefront-core/src/api-manager/datasources/d365/d365-product.datasource";
5
+ import type { UserApi } from "@evenicanpm/storefront-core/src/api-manager/types/Datasource";
13
6
  import {
14
- Customer,
15
- CommerceProperty,
7
+ type CommerceProperty,
8
+ type Customer,
9
+ type ProductList,
10
+ type ProductListSearchCriteria,
16
11
  ProductListType,
17
- ProductListSearchCriteria,
18
- SimpleProduct,
19
- ProductList,
12
+ type SimpleProduct,
20
13
  } from "@msdyn365-commerce/retail-proxy";
21
14
  import {
22
15
  createCustomerAsync,
23
16
  readAsync,
24
17
  updateAsync,
25
18
  } from "@msdyn365-commerce/retail-proxy/dist/DataActions/CustomersDataActions.g";
26
- import jwt from "jsonwebtoken";
27
- import { D365DatasourceBase } from "@evenicanpm/storefront-core/src/api-manager/datasources/d365/d365-base.datasource";
28
19
  import {
29
20
  addProductListLinesAsync,
30
21
  copyCartToProductListAsync,
@@ -33,10 +24,21 @@ import {
33
24
  removeProductListLinesAsync,
34
25
  searchAsync,
35
26
  updateProductListLinesAsync,
27
+ readAsync as wishlistReadAsync,
36
28
  } from "@msdyn365-commerce/retail-proxy/dist/DataActions/ProductListsDataActions.g";
37
- import { D365ProductDatasource } from "@evenicanpm/storefront-core/src/api-manager/datasources/d365/d365-product.datasource";
29
+ import jwt from "jsonwebtoken";
38
30
  import { uniq } from "lodash";
39
- import { readAsync as wishlistReadAsync } from "@msdyn365-commerce/retail-proxy/dist/DataActions/ProductListsDataActions.g";
31
+ import type {
32
+ CopyCartToWishlistInput,
33
+ ExtendedWishlist,
34
+ User,
35
+ UserCounts,
36
+ Wishlist,
37
+ WishlistCreateInput,
38
+ WishlistDetailInput,
39
+ WishlistLinesInput,
40
+ } from "@/schemas/user.schema";
41
+
40
42
  class D365UserDatasource extends D365DatasourceBase implements UserApi {
41
43
  async updateUser(user: User): Promise<User> {
42
44
  const context = this.context;
@@ -122,7 +124,7 @@ class D365UserDatasource extends D365DatasourceBase implements UserApi {
122
124
  );
123
125
  return wishlistProductData;
124
126
  } catch (error) {
125
- throw new Error("Error getting wishlists: " + error);
127
+ throw new Error(`Error getting wishlists: ${error}`);
126
128
  }
127
129
  }
128
130
 
@@ -134,7 +136,9 @@ class D365UserDatasource extends D365DatasourceBase implements UserApi {
134
136
  try {
135
137
  wishlist = await wishlistReadAsync(context as any, input.Id);
136
138
  } catch (error) {
137
- throw new Error("Error getting wishlist details" + JSON.stringify(error));
139
+ throw new Error(
140
+ `Error getting wishlist details: ${JSON.stringify(error)}`,
141
+ );
138
142
  }
139
143
 
140
144
  const extendedWishlist = { ...wishlist } as ExtendedWishlist;
@@ -152,7 +156,7 @@ class D365UserDatasource extends D365DatasourceBase implements UserApi {
152
156
  id: uniq(productIds),
153
157
  });
154
158
  } catch (error) {
155
- throw new Error("Error getting wishlist products: " + error);
159
+ throw new Error(`Error getting wishlist products: ${error}`);
156
160
  }
157
161
 
158
162
  if (products) {
@@ -179,11 +183,11 @@ class D365UserDatasource extends D365DatasourceBase implements UserApi {
179
183
  try {
180
184
  const wishlist = await createProductListAsync(
181
185
  context as any,
182
- productList as ProductList,
186
+ productList,
183
187
  );
184
188
  return wishlist;
185
189
  } catch (error) {
186
- throw new Error("Error creating wishlist: " + JSON.stringify(error));
190
+ throw new Error(`Error creating wishlist: ${JSON.stringify(error)}`);
187
191
  }
188
192
  }
189
193
 
@@ -195,22 +199,10 @@ class D365UserDatasource extends D365DatasourceBase implements UserApi {
195
199
  try {
196
200
  await deleteAsync(context as any, { Id: input.Id });
197
201
  } catch (error) {
198
- throw new Error("Error deleting wishlist: " + error);
202
+ throw new Error(`Error deleting wishlist: ${error}`);
199
203
  }
200
204
  }
201
205
 
202
- // async updateWishlist(input: WishlistLinesInput): Promise<Wishlist> {
203
- // const context = await getContextFromCookie();
204
-
205
- // try {
206
- // const wishlist = await updateAsync(context as any, input);
207
- // return wishlist;
208
- // } catch (error) {
209
- // console.log('input', input);
210
- // throw new Error("Error updating wishlist: " + error);
211
- // }
212
- // }
213
-
214
206
  async updateWishlist(input: WishlistLinesInput): Promise<Wishlist> {
215
207
  const context = this.context;
216
208
  const id = input.Id;
@@ -225,7 +217,7 @@ class D365UserDatasource extends D365DatasourceBase implements UserApi {
225
217
  const wishlist = { Id: id, productListLines: updatedProductListLines };
226
218
  return wishlist;
227
219
  } catch (error) {
228
- throw new Error("Error updating wishlist: " + error);
220
+ throw new Error(`Error updating wishlist: ${error}`);
229
221
  }
230
222
  }
231
223
 
@@ -244,11 +236,10 @@ class D365UserDatasource extends D365DatasourceBase implements UserApi {
244
236
  const wishlist = { Id: id, productListLines: updatedProductListLines };
245
237
  return wishlist;
246
238
  } catch (error) {
247
- throw new Error("Error adding to wishlist: " + error);
239
+ throw new Error(`Error adding to wishlist: ${error}`);
248
240
  }
249
241
  }
250
242
 
251
- // TODO: void return
252
243
  async removeProductsFromWishlist(input: WishlistLinesInput): Promise<void> {
253
244
  const context = this.context;
254
245
  const id = input.Id;
@@ -256,7 +247,7 @@ class D365UserDatasource extends D365DatasourceBase implements UserApi {
256
247
  try {
257
248
  await removeProductListLinesAsync(context as any, id, productListLines);
258
249
  } catch (error) {
259
- throw new Error("Error removing from wishlist: " + error);
250
+ throw new Error(`Error removing from wishlist: ${error}`);
260
251
  }
261
252
  }
262
253
 
@@ -277,7 +268,7 @@ class D365UserDatasource extends D365DatasourceBase implements UserApi {
277
268
  );
278
269
  return wishlist;
279
270
  } catch (error) {
280
- throw new Error("Error copying cart to wishlist: " + error);
271
+ throw new Error(`Error copying cart to wishlist: ${error}`);
281
272
  }
282
273
  }
283
274
  }
@@ -1,23 +1,23 @@
1
- import {
2
- AddressApi,
3
- CategoryApi,
4
- Datasource,
5
- OrderApi,
6
- OrganizationApi,
7
- PrimaryDatasource,
8
- ProductApi,
9
- SessionApi,
10
- UserApi,
11
- } from "@evenicanpm/storefront-core/src/api-manager/types/Datasource";
12
- import { D365ProductDatasource } from ".";
13
- import { D365CartDatasource } from "@evenicanpm/storefront-core/src/api-manager/datasources/d365/d365-cart.datasource";
14
1
  import D365AddressDatasource from "@evenicanpm/storefront-core/src/api-manager/datasources/d365/d365-address.datasource";
2
+ import { D365CartDatasource } from "@evenicanpm/storefront-core/src/api-manager/datasources/d365/d365-cart.datasource";
15
3
  import D365CategoriesDatasource from "@evenicanpm/storefront-core/src/api-manager/datasources/d365/d365-categories.datasource";
16
- import D365OrganizationDatasource from "@evenicanpm/storefront-core/src/api-manager/datasources/d365/d365-organization.datasource";
17
4
  import D365OrderDatasource from "@evenicanpm/storefront-core/src/api-manager/datasources/d365/d365-order.datasource";
5
+ import D365OrganizationDatasource from "@evenicanpm/storefront-core/src/api-manager/datasources/d365/d365-organization.datasource";
18
6
  import D365SessionDatasource from "@evenicanpm/storefront-core/src/api-manager/datasources/d365/d365-session.datasource";
19
7
  import D365UserDatasource from "@evenicanpm/storefront-core/src/api-manager/datasources/d365/d365-user.datasource";
20
- import { ICallerContext } from "@msdyn365-commerce/retail-proxy";
8
+ import {
9
+ type AddressApi,
10
+ type CategoryApi,
11
+ Datasource,
12
+ type OrderApi,
13
+ type OrganizationApi,
14
+ type PrimaryDatasource,
15
+ type ProductApi,
16
+ type SessionApi,
17
+ type UserApi,
18
+ } from "@evenicanpm/storefront-core/src/api-manager/types/Datasource";
19
+ import type { ICallerContext } from "@msdyn365-commerce/retail-proxy";
20
+ import { D365ProductDatasource } from ".";
21
21
 
22
22
  export class D365Datasource extends Datasource implements PrimaryDatasource {
23
23
  user: UserApi;
@@ -41,5 +41,3 @@ export class D365Datasource extends Datasource implements PrimaryDatasource {
41
41
  }
42
42
  // Datasources
43
43
  }
44
-
45
- // export default d365Datasource;
@@ -1,4 +1,2 @@
1
- import { D365ProductDatasource } from "@evenicanpm/storefront-core/src/api-manager/datasources/d365/d365-product.datasource";
2
- import { D365Datasource } from "@evenicanpm/storefront-core/src/api-manager/datasources/d365/d365.datasource";
3
-
4
- export { D365ProductDatasource, D365Datasource };
1
+ export { D365Datasource } from "@evenicanpm/storefront-core/src/api-manager/datasources/d365/d365.datasource";
2
+ export { D365ProductDatasource } from "@evenicanpm/storefront-core/src/api-manager/datasources/d365/d365-product.datasource";
@@ -1,4 +1,4 @@
1
- import { IQueryResultSettings } from "@msdyn365-commerce/retail-proxy";
1
+ import type { IQueryResultSettings } from "@msdyn365-commerce/retail-proxy";
2
2
 
3
3
  const defaultQueryResultSettings: IQueryResultSettings = {
4
4
  Paging: {
@@ -1,4 +1,4 @@
1
- import { ProductDimensionAvailabilitySearchCriteria } from "@msdyn365-commerce/retail-proxy";
1
+ import type { ProductDimensionAvailabilitySearchCriteria } from "@msdyn365-commerce/retail-proxy";
2
2
  /**
3
3
  * Helper: Create search criteria for product dimension availability.
4
4
  * @param dimensionTypeValue
@@ -1,9 +1,8 @@
1
1
  "use server";
2
2
  import { decode } from "next-auth/jwt";
3
- import { getSecret } from "@evenicanpm/common-core/keyvault";
4
3
 
5
4
  export async function decodeToken(token: string) {
6
- const secret = getSecret("NEXTAUTH_SECRET");
5
+ const secret = process.env.NEXTAUTH_SECRET; //this shouldn't be from key vault.
7
6
  if (!secret) {
8
7
  throw new Error("Environment variable NEXTAUTH_SECRET is not set.");
9
8
  }
@@ -1,8 +1,8 @@
1
1
  "use server";
2
- import { manuallyRetrieveSessionCookie } from "@/auth/next-auth-cookie-manager";
3
- import { ICallerContext } from "@msdyn365-commerce/retail-proxy";
4
- import { getLocale } from "next-intl/server";
2
+ import type { ICallerContext } from "@msdyn365-commerce/retail-proxy";
5
3
  import { cookies } from "next/headers";
4
+ import { getLocale } from "next-intl/server";
5
+ import { manuallyRetrieveSessionCookie } from "@/auth/next-auth-cookie-manager";
6
6
 
7
7
  /**
8
8
  * Retrieves the D365 context from the "D365Context" cookie, enriches it with the current session token,
@@ -1,6 +1,6 @@
1
1
  const parseObject = async <TClass>(data: TClass): Promise<TClass> => {
2
2
  try {
3
- return JSON.parse(JSON.stringify(await data)) as TClass;
3
+ return globalThis.structuredClone(await data) as TClass;
4
4
  } catch {
5
5
  return {} as TClass;
6
6
  }
@@ -1,4 +1,4 @@
1
- import { SimpleProduct } from "@msdyn365-commerce/retail-proxy";
1
+ import type { SimpleProduct } from "@msdyn365-commerce/retail-proxy";
2
2
 
3
3
  const testImageUrl = (url: string) => {
4
4
  return new Promise<[string, boolean]>((resolve) => {
@@ -28,16 +28,35 @@ export const validateAndSetMediaUrls = async (
28
28
  productData: SimpleProduct,
29
29
  baseUrl: string,
30
30
  ) => {
31
- const product = productData;
32
- const primaryImageUrl = product?.PrimaryImageUrl;
31
+ const product = { ...productData };
32
+
33
+ let primaryImageUrl = product.PrimaryImageUrl;
34
+
33
35
  if (!primaryImageUrl) {
34
- return;
36
+ primaryImageUrl = `Products/${product.ItemId}_000_001.png`;
35
37
  }
36
- const urls = [];
37
- for (let index = 1; index < 6; index++) {
38
- const nextUrl = baseUrl + primaryImageUrl.replace("001", `00${index}`);
39
- urls.push(nextUrl);
38
+
39
+ let fullPrimaryUrl = `${baseUrl}${primaryImageUrl}`;
40
+
41
+ // Validate the primary image
42
+ const isPrimaryValid = (await testMedia([fullPrimaryUrl])).length > 0;
43
+ if (!isPrimaryValid) {
44
+ fullPrimaryUrl = `${baseUrl}Products/${product.ItemId}_000_001.png`;
40
45
  }
41
- const validUrls = await testMedia(urls);
42
- return validUrls;
46
+
47
+ product.PrimaryImageUrl = fullPrimaryUrl;
48
+
49
+ const candidateUrls: string[] = [];
50
+ for (let index = 2; index <= 5; index++) {
51
+ const candidateUrl = fullPrimaryUrl.replace(
52
+ /001(\.[a-z]+)$/i,
53
+ `${String(index).padStart(3, "0")}$1`,
54
+ );
55
+ candidateUrls.push(candidateUrl);
56
+ }
57
+
58
+ // Validate which URLs exist
59
+ const validUrls = await testMedia(candidateUrls);
60
+
61
+ return [product.PrimaryImageUrl, ...validUrls];
43
62
  };
@@ -1,4 +1,4 @@
1
- import {
1
+ import type {
2
2
  InventoryAvailabilitySearchCriteria,
3
3
  SearchArea,
4
4
  } from "@msdyn365-commerce/retail-proxy";
@@ -1,17 +1,17 @@
1
+ import { addressMap } from "@evenicanpm/storefront-core/src/api-manager/datasources/e4/address/e4-address.remaps";
2
+ import * as addressTranslator from "@evenicanpm/storefront-core/src/api-manager/datasources/e4/address/e4-address.translator";
3
+ import type { Shipping } from "@evenicanpm/storefront-core/src/api-manager/datasources/e4/graphqlRequestSdk";
1
4
  import getGraphqlClient from "@evenicanpm/storefront-core/src/api-manager/lib/get-graphql-client";
2
- import {
5
+ import type {
3
6
  Address,
4
7
  GetDeliveryOptionsInput,
5
8
  GetStatesInput,
6
9
  } from "@evenicanpm/storefront-core/src/api-manager/schemas/address.schema";
7
- import {
10
+ import type {
8
11
  CountryRegionInfo,
9
12
  DeliveryOption,
10
13
  StateProvinceInfo,
11
14
  } from "@msdyn365-commerce/retail-proxy";
12
- import { Shipping } from "@evenicanpm/storefront-core/src/api-manager/datasources/e4/graphqlRequestSdk";
13
- import * as addressTranslator from "@evenicanpm/storefront-core/src/api-manager/datasources/e4/address/e4-address.translator";
14
- import { addressMap } from "@evenicanpm/storefront-core/src/api-manager/datasources/e4/address/e4-address.remaps";
15
15
  import { merge } from "object-mapper";
16
16
 
17
17
  const address = {
@@ -7,8 +7,8 @@
7
7
  * https://github.com/wankdanker/node-object-mapper
8
8
  *
9
9
  */
10
- import { Address as E4Address } from "@evenicanpm/storefront-core/src/api-manager/datasources/e4/graphqlRequestSdk";
11
- import { Address } from "@msdyn365-commerce/retail-proxy";
10
+ import type { Address as E4Address } from "@evenicanpm/storefront-core/src/api-manager/datasources/e4/graphqlRequestSdk";
11
+ import type { Address } from "@msdyn365-commerce/retail-proxy";
12
12
 
13
13
  export const addressMap = {
14
14
  "[].id": [
@@ -16,7 +16,7 @@ export const addressMap = {
16
16
  {
17
17
  key: "[].RecordId",
18
18
  transform: (id: string) => {
19
- if (id !== null) return parseInt(id);
19
+ if (id !== null) return Number.parseInt(id);
20
20
  },
21
21
  },
22
22
  ],
@@ -25,7 +25,7 @@ export const addressMap = {
25
25
  "[].addressType.id": {
26
26
  key: "[].AddressTypeValue",
27
27
  transform: (id: string) => {
28
- if (id !== null) return parseInt(id);
28
+ if (id !== null) return Number.parseInt(id);
29
29
  },
30
30
  },
31
31
  "[].address1": "[].Street",
@@ -1,17 +1,17 @@
1
- import getGraphqlClient from "@evenicanpm/storefront-core/src/api-manager/lib/get-graphql-client";
2
- import {
3
- AddressInput,
4
- Country,
5
- Shipping,
6
- } from "@evenicanpm/storefront-core/src/api-manager/datasources/e4/graphqlRequestSdk";
7
- import { Address } from "@evenicanpm/storefront-core/src/api-manager/schemas/address.schema";
8
- import { merge } from "object-mapper";
9
1
  import {
10
2
  addressReverseMap,
11
3
  countriesMap,
12
4
  countryMap,
13
5
  deliveryOptionsMap,
14
6
  } from "@evenicanpm/storefront-core/src/api-manager/datasources/e4/address/e4-address.remaps";
7
+ import type {
8
+ AddressInput,
9
+ Country,
10
+ Shipping,
11
+ } from "@evenicanpm/storefront-core/src/api-manager/datasources/e4/graphqlRequestSdk";
12
+ import getGraphqlClient from "@evenicanpm/storefront-core/src/api-manager/lib/get-graphql-client";
13
+ import type { Address } from "@evenicanpm/storefront-core/src/api-manager/schemas/address.schema";
14
+ import { merge } from "object-mapper";
15
15
 
16
16
  /**
17
17
  * Transforms the Address schema to e4 API address
@@ -88,7 +88,7 @@ export const countriesTransformValidate = (countries: Country[]) => {
88
88
  };
89
89
 
90
90
  export const countryTransformValidate = (country: Country) => {
91
- if (country?.state && country?.state.length) {
91
+ if (country?.state?.length) {
92
92
  return merge(country, countryMap);
93
93
  }
94
94
  return [];
@@ -1,22 +1,20 @@
1
- import getGraphqlClient from "@evenicanpm/storefront-core/src/api-manager/lib/get-graphql-client";
2
- import * as cartSchema from "@evenicanpm/storefront-core/src/api-manager/schemas/cart.schema";
3
- import { Cart } from "@evenicanpm/storefront-core/src/api-manager/schemas/cart.schema";
4
- import * as cartTranslator from "@evenicanpm/storefront-core/src/api-manager/datasources/e4/cart/e4-cart.translator";
5
1
  import * as addressTranslator from "@evenicanpm/storefront-core/src/api-manager/datasources/e4/address/e4-address.translator";
6
-
7
- import {
2
+ import * as cartTranslator from "@evenicanpm/storefront-core/src/api-manager/datasources/e4/cart/e4-cart.translator";
3
+ import type { Cart as E4Cart } from "@evenicanpm/storefront-core/src/api-manager/datasources/e4/graphqlRequestSdk";
4
+ import getGraphqlClient from "@evenicanpm/storefront-core/src/api-manager/lib/get-graphql-client";
5
+ import type * as cartSchema from "@evenicanpm/storefront-core/src/api-manager/schemas/cart.schema";
6
+ import type { SalesOrder } from "@evenicanpm/storefront-core/src/api-manager/schemas/order.schema";
7
+ import type { CartApi } from "@evenicanpm/storefront-core/src/api-manager/types/Datasource";
8
+ import type {
8
9
  CardPaymentAcceptPoint,
9
10
  CardPaymentAcceptResult,
10
11
  LineDeliverySpecification,
11
12
  ProductWarehouseInventoryInformation,
12
13
  } from "@msdyn365-commerce/retail-proxy";
13
- import { CartApi } from "@evenicanpm/storefront-core/src/api-manager/types/Datasource";
14
- import { Cart as E4Cart } from "@evenicanpm/storefront-core/src/api-manager/datasources/e4/graphqlRequestSdk";
15
- import { SalesOrder } from "@evenicanpm/storefront-core/src/api-manager/schemas/order.schema";
16
14
 
17
15
  const cart: CartApi = {
18
16
  //For this data source, initCart does the same thing as getCart
19
- async initCart(): Promise<Cart> {
17
+ async initCart(): Promise<cartSchema.Cart> {
20
18
  const e4Api = await getGraphqlClient();
21
19
 
22
20
  const { data, errors } = await e4Api.e4CartReadMD();
@@ -31,7 +29,7 @@ const cart: CartApi = {
31
29
  return transformedData;
32
30
  },
33
31
 
34
- async addToCart(input: cartSchema.AddToCartInput): Promise<Cart> {
32
+ async addToCart(input: cartSchema.AddToCartInput): Promise<cartSchema.Cart> {
35
33
  const e4Api = await getGraphqlClient();
36
34
 
37
35
  const { cartLine } = input;
@@ -54,7 +52,9 @@ const cart: CartApi = {
54
52
  return transformedData;
55
53
  },
56
54
 
57
- async updateCart(input: cartSchema.UpdateCartInput): Promise<Cart> {
55
+ async updateCart(
56
+ input: cartSchema.UpdateCartInput,
57
+ ): Promise<cartSchema.Cart> {
58
58
  const e4Api = await getGraphqlClient();
59
59
 
60
60
  const { cart } = input;
@@ -96,7 +96,9 @@ const cart: CartApi = {
96
96
  return transformedData;
97
97
  },
98
98
 
99
- async updateCartLines(input: cartSchema.UpdateCartLineInput): Promise<Cart> {
99
+ async updateCartLines(
100
+ input: cartSchema.UpdateCartLineInput,
101
+ ): Promise<cartSchema.Cart> {
100
102
  const e4Api = await getGraphqlClient();
101
103
 
102
104
  const { cartLine } = input;
@@ -125,7 +127,9 @@ const cart: CartApi = {
125
127
  return transformedData;
126
128
  },
127
129
 
128
- async deleteCartLine(input: cartSchema.DeleteCartLineInput): Promise<Cart> {
130
+ async deleteCartLine(
131
+ input: cartSchema.DeleteCartLineInput,
132
+ ): Promise<cartSchema.Cart> {
129
133
  const e4Api = await getGraphqlClient();
130
134
 
131
135
  const { cartLine } = input;
@@ -149,7 +153,7 @@ const cart: CartApi = {
149
153
  return transformedData;
150
154
  },
151
155
 
152
- async getCart(): Promise<Cart> {
156
+ async getCart(): Promise<cartSchema.Cart> {
153
157
  const e4Api = await getGraphqlClient();
154
158
 
155
159
  const { data, errors } = await e4Api.e4CartReadMD();
@@ -164,21 +168,17 @@ const cart: CartApi = {
164
168
  return transformedData;
165
169
  },
166
170
 
167
- async addDiscountCode(): Promise<Cart> {
168
- if (true) {
169
- throw new Error("Error adding discount code");
170
- }
171
+ async addDiscountCode(): Promise<cartSchema.Cart> {
172
+ throw new Error("Error adding discount code");
171
173
  },
172
174
 
173
- async removeDiscountcode(): Promise<Cart> {
174
- if (true) {
175
- throw new Error("Error removing discount code");
176
- }
175
+ async removeDiscountcode(): Promise<cartSchema.Cart> {
176
+ throw new Error("Error removing discount code");
177
177
  },
178
178
 
179
179
  async updateLineDeliveryMode(
180
180
  input: cartSchema.UpdateCartLineDeliveryModeInput,
181
- ): Promise<Cart> {
181
+ ): Promise<cartSchema.Cart> {
182
182
  const e4Api = await getGraphqlClient();
183
183
 
184
184
  const { data, errors } = await e4Api.e4ShippingMethodUpdateMD({
@@ -198,22 +198,16 @@ const cart: CartApi = {
198
198
  );
199
199
  },
200
200
 
201
- async removeLineDeliveryMode(): Promise<Cart> {
202
- if (true) {
203
- throw new Error("Error updating cart line delivery mode");
204
- }
201
+ async removeLineDeliveryMode(): Promise<cartSchema.Cart> {
202
+ throw new Error("Error updating cart line delivery mode");
205
203
  },
206
204
 
207
205
  async getCardAcceptPoint(): Promise<CardPaymentAcceptPoint> {
208
- if (true) {
209
- throw new Error("Error getCardAcceptPoint");
210
- }
206
+ throw new Error("Error getCardAcceptPoint");
211
207
  },
212
208
 
213
209
  async retrieveCardPaymentAcceptResult(): Promise<CardPaymentAcceptResult> {
214
- if (true) {
215
- throw new Error("Error retrieveCardPaymentAcceptResult");
216
- }
210
+ throw new Error("Error retrieveCardPaymentAcceptResult");
217
211
  },
218
212
 
219
213
  async checkout(): Promise<SalesOrder> {
@@ -224,9 +218,14 @@ const cart: CartApi = {
224
218
  const chars =
225
219
  "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
226
220
  let token = "";
221
+
222
+ const randomValues = new Uint32Array(length);
223
+ crypto.getRandomValues(randomValues);
224
+
227
225
  for (let i = 0; i < length; i++) {
228
- token += chars[Math.floor(Math.random() * chars.length)];
226
+ token += chars[randomValues[i] % chars.length];
229
227
  }
228
+
230
229
  return token;
231
230
  };
232
231
 
@@ -245,9 +244,10 @@ const cart: CartApi = {
245
244
  SalesLines: [],
246
245
  };
247
246
  },
248
- getCartLinesInventory: function (
247
+
248
+ getCartLinesInventory: (
249
249
  _input: cartSchema.InventorySearchCartLinesCriteriaInput,
250
- ): Promise<ProductWarehouseInventoryInformation> {
250
+ ): Promise<ProductWarehouseInventoryInformation> => {
251
251
  throw new Error("Function not implemented.");
252
252
  },
253
253
  };
@@ -7,18 +7,19 @@
7
7
  * https://github.com/wankdanker/node-object-mapper
8
8
  *
9
9
  */
10
- import {
11
- Address,
12
- Product as DynProduct,
13
- } from "@msdyn365-commerce/retail-proxy";
14
- import {
15
- Product,
10
+
11
+ import { addressMap } from "@evenicanpm/storefront-core/src/api-manager/datasources/e4/address/e4-address.remaps";
12
+ import type {
16
13
  CartLine,
17
14
  Address as E4Address,
15
+ Product,
18
16
  } from "@evenicanpm/storefront-core/src/api-manager/datasources/e4/graphqlRequestSdk";
19
- import { merge } from "object-mapper";
20
17
  import { productMap } from "@evenicanpm/storefront-core/src/api-manager/datasources/e4/product/e4-product.remaps";
21
- import { addressMap } from "@evenicanpm/storefront-core/src/api-manager/datasources/e4/address/e4-address.remaps";
18
+ import type {
19
+ Address,
20
+ Product as DynProduct,
21
+ } from "@msdyn365-commerce/retail-proxy";
22
+ import { merge } from "object-mapper";
22
23
 
23
24
  /* CART REMAPS */
24
25
  export const cartLineMap = {
@@ -41,7 +42,7 @@ export const cartLineMap = {
41
42
  "[].product.id": {
42
43
  key: "[].ProductId",
43
44
  transform: (id: string) => {
44
- if (id !== null) return parseInt(id);
45
+ if (id !== null) return Number.parseInt(id);
45
46
  },
46
47
  },
47
48
  "[].product.code": "[].ItemId",
@@ -1,9 +1,9 @@
1
+ import { cartMap } from "@evenicanpm/storefront-core/src/api-manager/datasources/e4/cart/e4-cart.remaps";
2
+ import type { Cart as E4Cart } from "@evenicanpm/storefront-core/src/api-manager/datasources/e4/graphqlRequestSdk";
1
3
  import {
4
+ type Cart,
2
5
  extendedCartSchema,
3
- Cart,
4
6
  } from "@evenicanpm/storefront-core/src/api-manager/schemas/cart.schema";
5
- import { Cart as E4Cart } from "@evenicanpm/storefront-core/src/api-manager/datasources/e4/graphqlRequestSdk";
6
- import { cartMap } from "@evenicanpm/storefront-core/src/api-manager/datasources/e4/cart/e4-cart.remaps";
7
7
  import { merge } from "object-mapper";
8
8
 
9
9
  /**
@@ -14,7 +14,7 @@ import { merge } from "object-mapper";
14
14
  * @returns the transformed cart object
15
15
  */
16
16
  export const cartTransformValidate = (cart: E4Cart): Cart => {
17
- if (!(cart && cart?.id)) throw new Error("Not a valid cart");
17
+ if (!cart?.id) throw new Error("Not a valid cart");
18
18
  const transformedData = merge(cart, cartMap);
19
19
  try {
20
20
  extendedCartSchema.parse(transformedData);
@@ -1,8 +1,8 @@
1
- import getGraphqlClient from "@evenicanpm/storefront-core/src/api-manager/lib/get-graphql-client";
2
- import { CategoryHierarchy } from "@evenicanpm/storefront-core/src/lib/category-helpers";
3
- import { CategoryApi } from "@evenicanpm/storefront-core/src/api-manager/types/Datasource";
4
- import { Category as E4Category } from "@evenicanpm/storefront-core/src/api-manager/datasources/e4/graphqlRequestSdk";
5
1
  import * as categoryTranslator from "@evenicanpm/storefront-core/src/api-manager/datasources/e4/categories/e4-categories.translator";
2
+ import type { Category as E4Category } from "@evenicanpm/storefront-core/src/api-manager/datasources/e4/graphqlRequestSdk";
3
+ import getGraphqlClient from "@evenicanpm/storefront-core/src/api-manager/lib/get-graphql-client";
4
+ import type { CategoryApi } from "@evenicanpm/storefront-core/src/api-manager/types/Datasource";
5
+ import type { CategoryHierarchy } from "@evenicanpm/storefront-core/src/lib/category-helpers";
6
6
 
7
7
  const categories: CategoryApi = {
8
8
  async getCategories(): Promise<CategoryHierarchy[]> {