@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,17 +1,7 @@
1
- import { describe, it, expect } from "vitest";
2
- import authOptions, { ExtendedJwtToken } from "@/auth/auth-options";
3
- import { JWT } from "next-auth/jwt";
4
- import { Account } from "next-auth";
5
- import { Session } from "next-auth";
6
-
7
- // vi.mock("./aadb2c-provider", () => ({
8
- // azureADB2CProvider: {},
9
- // refreshAccessToken: vi.fn(async (token) => ({
10
- // ...token,
11
- // accessToken: "newAccessToken",
12
- // accessTokenExpiresAt: Date.now() + 3600 * 1000,
13
- // })),
14
- // }));
1
+ import type { Account, Session } from "next-auth";
2
+ import type { JWT } from "next-auth/jwt";
3
+ import { describe, expect, it } from "vitest";
4
+ import authOptions, { type ExtendedJwtToken } from "@/auth/auth-options";
15
5
 
16
6
  describe("next-auth option callbacks", () => {
17
7
  describe("jwt callback", () => {
@@ -34,11 +24,7 @@ describe("next-auth option callbacks", () => {
34
24
  };
35
25
 
36
26
  let newToken;
37
- if (
38
- authOptions &&
39
- authOptions().callbacks &&
40
- authOptions().callbacks.jwt
41
- ) {
27
+ if (authOptions()?.callbacks?.jwt) {
42
28
  newToken = await authOptions().callbacks.jwt({
43
29
  token,
44
30
  user: { id: "123" },
@@ -52,45 +38,6 @@ describe("next-auth option callbacks", () => {
52
38
  expect(newToken?.accessTokenExpiresAt).toBe(token.accessTokenExpiresAt); // We're not setting this or using it anymore
53
39
  expect(newToken?.refreshTokenExpiresAt).toBe(token.refreshTokenExpiresAt); // We're not setting this or using it anymore);
54
40
  });
55
-
56
- // it("should return token if access token is not expired", async () => {
57
- // const token: JWT = {
58
- // accessToken: "validToken",
59
- // accessTokenExpiresAt: Date.now() + 3600 * 1000,
60
- // refreshToken: "",
61
- // refreshTokenExpiresAt: 0
62
- // };
63
-
64
- // let newToken;
65
- // if (authOptions && authOptions.callbacks && authOptions.callbacks.jwt) {
66
- // newToken = await authOptions.callbacks.jwt({ token, user: { id: '123' }, account: null });
67
- // }
68
-
69
- // expect(newToken).toEqual(token);
70
- // });
71
-
72
- // it("should return error if refresh token is expired", async () => {
73
- // const token = { accessTokenExpiresAt: Date.now() - 1000, refreshTokenExpiresAt: Date.now() - 1000 };
74
-
75
- // let newToken;
76
- // if (authOptions && authOptions.callbacks && authOptions.callbacks.jwt) {
77
- // newToken = await authOptions.callbacks.jwt({ token, user: { id: '123' }, account: null });
78
- // }
79
-
80
- // expect(newToken?.error).toBe("RefreshTokenExpired");
81
- // });
82
-
83
- // it("should refresh access token if access token is expired but refresh token is valid", async () => {
84
- // const token = { accessToken: "oldToken", accessTokenExpiresAt: Date.now() - 1000, refreshToken: "validRefreshToken", refreshTokenExpiresAt: Date.now() + 3600 * 1000 };
85
-
86
- // let newToken;
87
- // if (authOptions && authOptions.callbacks && authOptions.callbacks.jwt) {
88
- // newToken = await authOptions.callbacks.jwt({ token, user: { id: '123' }, account: null });
89
- // }
90
-
91
- // // expect(refreshAccessToken).toHaveBeenCalledWith(token);
92
- // expect(newToken?.accessToken).toBe("newAccessToken");
93
- // });
94
41
  });
95
42
 
96
43
  describe("session callback", () => {
@@ -104,11 +51,7 @@ describe("next-auth option callbacks", () => {
104
51
  error: "SomeError",
105
52
  };
106
53
  let newSession: Session | null;
107
- if (
108
- authOptions &&
109
- authOptions().callbacks &&
110
- authOptions().callbacks.session
111
- ) {
54
+ if (authOptions()?.callbacks?.session) {
112
55
  newSession = await authOptions().callbacks.session({
113
56
  session,
114
57
  token,
@@ -1,14 +1,13 @@
1
- import { Session, type NextAuthOptions } from "next-auth";
2
- import { getServerSession } from "next-auth/next";
3
- import { JWT } from "next-auth/jwt";
4
- import {
1
+ import { deleteCartCookie } from "@evenicanpm/storefront-core/src/lib/cart-cookie-handler";
2
+ import type {
5
3
  GetServerSidePropsContext,
6
4
  NextApiRequest,
7
5
  NextApiResponse,
8
6
  } from "next";
7
+ import type { NextAuthOptions, Session } from "next-auth";
8
+ import type { JWT } from "next-auth/jwt";
9
+ import { getServerSession } from "next-auth/next";
9
10
  import { getProviders } from "@/auth/providers";
10
- import { deleteCartCookie } from "@evenicanpm/storefront-core/src/lib/cart-cookie-handler";
11
- import { getSecret } from "@evenicanpm/common-core/keyvault";
12
11
 
13
12
  // Split providers into separate array so we can iterate them and match the provider ID
14
13
  export type ExtendedJwtToken = JWT & {
@@ -20,7 +19,7 @@ export type ExtendedSession = Session & { token?: JWT };
20
19
 
21
20
  const createAuthOptions = (): NextAuthOptions => {
22
21
  const providers = getProviders();
23
- const secret = getSecret("NEXTAUTH_SECRET");
22
+ const secret = process.env.NEXTAUTH_SECRET; // internally used by next-auth, shouldn't be from key vault.
24
23
  return {
25
24
  providers,
26
25
  secret,
package/src/auth/msal.ts CHANGED
@@ -1,4 +1,7 @@
1
- import { PublicClientApplication, Configuration } from "@azure/msal-browser";
1
+ import {
2
+ type Configuration,
3
+ PublicClientApplication,
4
+ } from "@azure/msal-browser";
2
5
 
3
6
  const createMsalConfig = (): Configuration => {
4
7
  return {
@@ -1,13 +1,12 @@
1
1
  "use server";
2
- import { RequestCookie } from "next/dist/compiled/@edge-runtime/cookies";
2
+ import type { RequestCookie } from "next/dist/compiled/@edge-runtime/cookies";
3
3
  import { cookies } from "next/headers";
4
- import { encode, decode, JWT } from "next-auth/jwt";
5
- import { ExtendedJwtToken } from "@/auth/auth-options";
4
+ import { decode, encode, type JWT } from "next-auth/jwt";
5
+ import type { ExtendedJwtToken } from "@/auth/auth-options";
6
+
6
7
  const NEXT_AUTH_COOKIE_NAME = "next-auth.session-token";
7
8
  const SECURE_COOKIE_PREFIX = "__Secure-";
8
9
 
9
- import { getSecret } from "@evenicanpm/common-core/keyvault";
10
-
11
10
  /**
12
11
  * Retrieves and decodes the NextAuth session cookie from the request.
13
12
  *
@@ -30,7 +29,7 @@ const manuallyRetrieveSessionCookie = async () => {
30
29
  if (cookie) {
31
30
  return decode({
32
31
  token: cookie.value,
33
- secret: getSecret("NEXTAUTH_SECRET") || "",
32
+ secret: process.env.NEXTAUTH_SECRET || "",
34
33
  });
35
34
  }
36
35
  //If the cookie is not found, we need to see if there is a chunked cookie
@@ -51,7 +50,7 @@ const manuallyRetrieveSessionCookie = async () => {
51
50
  if (cookieValues.length) {
52
51
  return decode({
53
52
  token: cookieValues.join(""),
54
- secret: getSecret("NEXTAUTH_SECRET") || "",
53
+ secret: process.env.NEXTAUTH_SECRET || "",
55
54
  });
56
55
  }
57
56
 
@@ -75,7 +74,7 @@ const manuallySetSessionCookie = async (token: JWT | ExtendedJwtToken) => {
75
74
  // Set the cookie with the name __Secure-next-auth.session-token
76
75
  const value = await encode({
77
76
  token,
78
- secret: getSecret("NEXTAUTH_SECRET") || "",
77
+ secret: process.env.NEXTAUTH_SECRET || "",
79
78
  });
80
79
  cookieStore.set({
81
80
  name: `${SECURE_COOKIE_PREFIX}${NEXT_AUTH_COOKIE_NAME}`,
@@ -1,9 +1,8 @@
1
1
  "use server";
2
- import { JWT } from "next-auth/jwt";
3
- // TODO: what is going on here?
4
- import { AuthorizationEndpointHandler, OAuthConfig } from "next-auth/providers";
5
2
  import jwt from "jsonwebtoken";
6
- import { ExtendedJwtToken } from "@/auth/auth-options";
3
+ import type { JWT } from "next-auth/jwt";
4
+ import type { AuthorizationEndpointHandler } from "next-auth/providers";
5
+ import type { ExtendedJwtToken } from "@/auth/auth-options";
7
6
  import { getProviders } from "@/auth/providers";
8
7
 
9
8
  type TokenResponse = {
@@ -20,8 +19,7 @@ const checkAccessTokenExpiry = async (
20
19
  token.error = "Token Invalid";
21
20
  return { token, isRefreshed: false };
22
21
  }
23
- // console.log('Token Expires:', new Date(decryptedToken.exp! * 1000).toLocaleString());
24
- // console.log('Time now', new Date(Date.now()).toLocaleString());
22
+
25
23
  if (!decryptedToken.exp) {
26
24
  token.error = "noExpiryOnToken";
27
25
  return {
@@ -54,7 +52,7 @@ const checkAccessTokenExpiry = async (
54
52
  //Find the provider that matches the provider cookie
55
53
  const matchedProvider = providers.find(
56
54
  (p) => p.id.toLowerCase() === token.provider.toLowerCase(),
57
- ) as OAuthConfig<Record<string, unknown>> | undefined;
55
+ );
58
56
  if (!matchedProvider) {
59
57
  token.error = "NoProviderMatch";
60
58
  return {
@@ -37,7 +37,7 @@ const signOut = async (): Promise<void> => {
37
37
  throw new Error(`Failed to sign out: ${response.statusText}`);
38
38
  }
39
39
 
40
- window.location.href = "/";
40
+ globalThis.location.href = "/";
41
41
  } catch (error) {
42
42
  console.error(error);
43
43
  }
@@ -1,20 +1,20 @@
1
1
  import { Box } from "@mui/material";
2
+ import type { Block } from "@/cms/blocks/interfaces";
2
3
  import {
3
- Hero,
4
- FeaturePill,
5
- FeaturedProducts,
6
- FeaturedCategories,
7
4
  BrandLogosScroller,
8
- HeroCarousel,
9
- Services,
10
- ProductCarousel,
11
- ProductSectionFullWidth,
12
5
  CategoryCarousel,
6
+ FeaturedCategories,
7
+ FeaturedProducts,
8
+ FeaturePill,
13
9
  Footer,
10
+ Hero,
11
+ HeroCarousel,
14
12
  Image,
13
+ ProductCarousel,
14
+ ProductSectionFullWidth,
15
15
  RichText,
16
- } from "@/cms/blocks/index";
17
- import { Block } from "@/cms/blocks/interfaces";
16
+ Services,
17
+ } from "../blocks/index";
18
18
 
19
19
  const componentMap = {
20
20
  "blocks.hero-section": Hero,
@@ -37,11 +37,11 @@ const componentMap = {
37
37
  const getBlockComponent: <B extends Block>(
38
38
  block: B,
39
39
  idx: number,
40
- ) => JSX.Element | null = (block: Block, idx: number) => {
40
+ ) => JSX.Element | null = (block: Block) => {
41
41
  const Component = componentMap[
42
42
  block.__component as keyof typeof componentMap
43
43
  ] as React.ComponentType<Block>;
44
- return <Component key={`block-${idx}`} {...block} />;
44
+ return <Component key={`block-${block.id}`} {...block} />;
45
45
  };
46
46
 
47
47
  interface BlockManagerProps {
@@ -55,7 +55,7 @@ const BlockManager: React.FC<BlockManagerProps> = ({ blocks }) => {
55
55
  {blocks.map((block, idx) => {
56
56
  const isLast = idx === blocks.length - 1;
57
57
  return (
58
- <Box key={`block-wrapper-${idx}`} mb={isLast ? 0 : 6}>
58
+ <Box key={`block-wrapper-${block.id}`} mb={isLast ? 0 : 6}>
59
59
  {getBlockComponent(block, idx)}
60
60
  </Box>
61
61
  );
@@ -1,11 +1,11 @@
1
1
  "use client";
2
2
 
3
- import React from "react";
4
- import Image from "next/image";
5
- import { Box, Container } from "@mui/material";
6
3
  import { keyframes } from "@emotion/react";
4
+ import { Box, Container } from "@mui/material";
5
+ import Image from "next/image";
6
+ import React from "react";
7
+ import type { LogoScrollerBlock } from "@/cms/blocks/interfaces";
7
8
  import cmsEndPoints from "@/cms/endpoints";
8
- import { LogoScrollerBlock } from "@/cms/blocks/interfaces";
9
9
 
10
10
  const bounce = keyframes`
11
11
  from {
@@ -1,8 +1,8 @@
1
- import React from "react";
2
- import Card from "@mui/material/Card";
3
1
  import Box from "@mui/material/Box";
4
2
  import Button from "@mui/material/Button";
3
+ import Card from "@mui/material/Card";
5
4
  import Image from "next/image";
5
+ import React from "react";
6
6
 
7
7
  import cmsEndPoints from "@/cms/endpoints";
8
8
 
@@ -11,7 +11,7 @@ interface Props {
11
11
  imgUrl: string;
12
12
  }
13
13
 
14
- export default function CategoryCard({ name, imgUrl }: Props) {
14
+ export default function CategoryCard({ name, imgUrl }: Readonly<Props>) {
15
15
  return (
16
16
  <Card sx={{ width: "100%", boxShadow: 10 }}>
17
17
  <Box
@@ -1,23 +1,21 @@
1
1
  "use client";
2
2
 
3
- import React from "react";
4
- import NextLink from "next/link";
5
-
6
- // CUSTOM ICON COMPONENT
7
- import CategoryIcon from "@/cms/blocks/icons/components/category";
8
-
9
3
  // GLOBAL CUSTOM COMPONENT
10
4
  import BazaarCard from "@evenicanpm/storefront-core/src/components-v2/BazaarCard";
11
5
  import { Carousel } from "@evenicanpm/storefront-core/src/components-v2/carousel/index";
12
6
  import { Section } from "@evenicanpm/storefront-core/src/components-v2/section";
13
-
7
+ import NextLink from "next/link";
8
+ import React from "react";
14
9
  // LOCAL CUSTOM COMPONENT
15
10
  import TopCategoriesCard from "@/cms/blocks/components/shared/top-categories-card";
11
+ // CUSTOM ICON COMPONENT
12
+ import CategoryIcon from "@/cms/blocks/icons/components/category";
13
+ import type { CategoryCarouselBlock } from "@/cms/blocks/interfaces";
16
14
  import { getImageUrl } from "@/cms/endpoints";
17
15
 
18
- import { CategoryCarouselBlock } from "@/cms/blocks/interfaces";
19
-
20
- export default function CategoryCarousel(data: CategoryCarouselBlock) {
16
+ export default function CategoryCarousel(
17
+ data: Readonly<CategoryCarouselBlock>,
18
+ ) {
21
19
  const responsive = [
22
20
  { breakpoint: 959, settings: { slidesToShow: 2 } },
23
21
  { breakpoint: 650, settings: { slidesToShow: 1 } },
@@ -1,12 +1,13 @@
1
- import { Box, Container, Typography, Divider, Paper } from "@mui/material";
1
+ import { Box, Container, Divider, Paper, Typography } from "@mui/material";
2
2
  import Grid from "@mui/material/Grid2";
3
3
  import {
4
- MdLocalOffer as LocalOffer,
5
- MdShoppingBag as ShoppingBag,
6
4
  MdAddLocation as AddLocation,
5
+ MdLocalOffer as LocalOffer,
7
6
  MdMonetizationOn as MonetizationOn,
7
+ MdShoppingBag as ShoppingBag,
8
8
  } from "react-icons/md";
9
- import { FeaturesPillBlock } from "@/cms/blocks/interfaces";
9
+ import type { FeaturesPillBlock } from "@/cms/blocks/interfaces";
10
+
10
11
  const FeaturePill = (featurePillData: FeaturesPillBlock) => {
11
12
  return (
12
13
  <Box
@@ -1,10 +1,13 @@
1
- import React from "react";
2
1
  import { Box, Container } from "@mui/material";
3
2
  import Grid from "@mui/material/Grid2";
3
+ import React from "react";
4
4
 
5
5
  // Local components
6
6
  import CategoryCard from "@/cms/blocks/components/category-card";
7
- import { Category, FeaturedCategoriesBlock } from "@/cms/blocks/interfaces";
7
+ import type {
8
+ Category,
9
+ FeaturedCategoriesBlock,
10
+ } from "@/cms/blocks/interfaces";
8
11
 
9
12
  const FeaturedCategories = (categoriesData: FeaturedCategoriesBlock) => {
10
13
  return (
@@ -1,10 +1,10 @@
1
- import React from "react";
2
1
  import { Box, Container } from "@mui/material";
3
2
  import Grid from "@mui/material/Grid2";
3
+ import React from "react";
4
4
 
5
5
  // Local components
6
6
  import MediaCard from "@/cms/blocks/components/media-card";
7
- import { FeaturedProductsBlock, Product } from "@/cms/blocks/interfaces";
7
+ import type { FeaturedProductsBlock, Product } from "@/cms/blocks/interfaces";
8
8
 
9
9
  const FeaturedProducts = (productsData: FeaturedProductsBlock) => {
10
10
  return (
@@ -1,8 +1,11 @@
1
1
  // CUSTOM ICON COMPONENTS
2
+
3
+ import {
4
+ FaGoogle as Google,
5
+ FaInstagram as Instagram,
6
+ FaTwitter as Twitter,
7
+ } from "react-icons/fa";
2
8
  import { MdFacebook as Facebook } from "react-icons/md";
3
- import { FaGoogle as Google } from "react-icons/fa";
4
- import { FaTwitter as Twitter } from "react-icons/fa";
5
- import { FaInstagram as Instagram } from "react-icons/fa";
6
9
 
7
10
  export const ABOUT_LINKS = [
8
11
  "Careers",
@@ -1,20 +1,16 @@
1
- import React from "react";
2
-
3
1
  // MUI
4
2
  import { Box, Container } from "@mui/material";
5
3
  import Grid from "@mui/material/Grid2";
6
-
7
- // Local Custom Components
8
- import Logo from "@/cms/blocks/components/footer/sections/footer-logo";
9
- import Links from "@/cms/blocks/components/footer/sections/footer-links";
10
- import Contact from "@/cms/blocks/components/footer/sections/footer-contact";
11
-
12
- import cms from "@/cms/endpoints";
13
-
14
- import {
4
+ import React from "react";
5
+ import type {
15
6
  FooterBlock,
16
7
  FooterResponse,
17
8
  } from "@/cms/blocks/components/footer/interfaces";
9
+ import Contact from "@/cms/blocks/components/footer/sections/footer-contact";
10
+ import Links from "@/cms/blocks/components/footer/sections/footer-links";
11
+ // Local Custom Components
12
+ import Logo from "@/cms/blocks/components/footer/sections/footer-logo";
13
+ import cms from "@/cms/endpoints";
18
14
 
19
15
  const getBlockComponent = (block: FooterBlock, index: number) => {
20
16
  let Block;
@@ -63,7 +59,7 @@ const Footer = async () => {
63
59
  const data = await fetchFooterData();
64
60
  const sections = data?.data?.sections;
65
61
 
66
- if (!(sections && sections.length)) {
62
+ if (!sections?.length) {
67
63
  return null;
68
64
  }
69
65
 
@@ -81,7 +77,7 @@ const Footer = async () => {
81
77
  py={{ sm: 10, xs: 4 }}
82
78
  >
83
79
  <Grid container spacing={6}>
84
- {sections.map(getBlockComponent)}
80
+ {sections.map((block, index) => getBlockComponent(block, index))}
85
81
  </Grid>
86
82
  </Box>
87
83
  </Box>
@@ -1,8 +1,8 @@
1
- import React, { Fragment } from "react";
2
1
  import FlexBox from "@evenicanpm/storefront-core/src/components-v2/flex-box/flex-box";
2
+ import { Box } from "@mui/material";
3
+ import React, { Fragment } from "react";
3
4
  import { MdFacebook as Facebook } from "react-icons/md";
4
5
  import { Link } from "react-router-dom";
5
- import { Box } from "@mui/material";
6
6
 
7
7
  export const PLAY_APP_STORE_DATA = [
8
8
  { url: "/", icon: Facebook, title: "Google Play", subtitle: "Get it on" },
@@ -1,9 +1,9 @@
1
- import React from "react";
2
- import { Heading } from "@/cms/blocks/components/footer/styles/index";
3
1
  import { Paragraph } from "@evenicanpm/storefront-core/src/components-v2/Typography";
4
2
  import Grid from "@mui/material/Grid2";
3
+ import React from "react";
4
+ import type { SocialLink } from "@/cms/blocks/components/footer/interfaces";
5
5
  import SocialLinks from "@/cms/blocks/components/footer/sections/footer-social-links";
6
- import { SocialLink } from "@/cms/blocks/components/footer/interfaces";
6
+ import { Heading } from "@/cms/blocks/components/footer/styles/index";
7
7
 
8
8
  interface Props {
9
9
  isDark?: boolean;
@@ -1,11 +1,11 @@
1
+ import { Box } from "@mui/material";
2
+ import Grid from "@mui/material/Grid2";
1
3
  import React, { Fragment } from "react";
4
+ import type { Link } from "@/cms/blocks/components/footer/interfaces";
2
5
  import {
3
6
  Heading,
4
7
  StyledLink,
5
8
  } from "@/cms/blocks/components/footer/styles/index";
6
- import { Box } from "@mui/material";
7
- import Grid from "@mui/material/Grid2";
8
- import { Link } from "@/cms/blocks/components/footer/interfaces";
9
9
 
10
10
  interface Props {
11
11
  isDark?: boolean;
@@ -18,8 +18,8 @@ const Links = (props: Props) => {
18
18
  <Grid size={{ lg: 3, md: 6, sm: 6, xs: 12 }}>
19
19
  <Heading>{props.title}</Heading>
20
20
  <Box>
21
- {props?.links?.map((item, ind) => (
22
- <Fragment key={ind}>
21
+ {props?.links?.map((item) => (
22
+ <Fragment key={item.slug}>
23
23
  <StyledLink isDark={props.isDark} href={`pages/${item.slug}`}>
24
24
  {item.title}
25
25
  </StyledLink>
@@ -1,17 +1,17 @@
1
1
  "use client";
2
2
 
3
- import React from "react";
4
- import Grid from "@mui/material/Grid2";
5
- import { Paragraph } from "@evenicanpm/storefront-core/src/components-v2/Typography";
6
3
  import SiteLogo from "@evenicanpm/storefront-core/src/components-v2/site-logo";
4
+ import { Paragraph } from "@evenicanpm/storefront-core/src/components-v2/Typography";
5
+ import Grid from "@mui/material/Grid2";
7
6
  import useTheme from "@mui/material/styles/useTheme";
8
7
  import useMediaQuery from "@mui/material/useMediaQuery";
8
+ import React from "react";
9
9
 
10
10
  interface Props {
11
11
  description: string;
12
12
  }
13
13
 
14
- export default function LogoSection(props: Props) {
14
+ export default function LogoSection(props: Readonly<Props>) {
15
15
  const theme = useTheme();
16
16
  const downMd = useMediaQuery(theme.breakpoints.down(1150)); // same like in header
17
17
  return (
@@ -1,18 +1,18 @@
1
1
  "use client";
2
2
 
3
- import React from "react";
3
+ // Custom Components
4
+ import FlexBox from "@evenicanpm/storefront-core/src/components-v2/flex-box/flex-box";
4
5
  import IconButton from "@mui/material/IconButton";
5
6
  import styled from "@mui/material/styles/styled";
6
-
7
+ import React from "react";
8
+ import {
9
+ FaGoogle as Google,
10
+ FaInstagram as Instagram,
11
+ FaTwitter as Twitter,
12
+ } from "react-icons/fa";
7
13
  // Social Icons
8
14
  import { MdFacebook as Facebook } from "react-icons/md";
9
- import { FaGoogle as Google } from "react-icons/fa";
10
- import { FaTwitter as Twitter } from "react-icons/fa";
11
- import { FaInstagram as Instagram } from "react-icons/fa";
12
-
13
- // Custom Components
14
- import FlexBox from "@evenicanpm/storefront-core/src/components-v2/flex-box/flex-box";
15
- import { SocialLink } from "@/cms/blocks/components/footer/interfaces";
15
+ import type { SocialLink } from "@/cms/blocks/components/footer/interfaces";
16
16
 
17
17
  // Styled Components
18
18
  const StyledIconButton = styled(IconButton, {
@@ -36,7 +36,10 @@ interface Props {
36
36
  socials?: SocialLink[];
37
37
  }
38
38
 
39
- export default function SocialLinks({ variant = "light", socials }: Props) {
39
+ export default function SocialLinks({
40
+ variant = "light",
41
+ socials,
42
+ }: Readonly<Props>) {
40
43
  return (
41
44
  <FlexBox className="flex" mx={-0.625}>
42
45
  {socials?.map(({ name, link }, i) => {
@@ -58,7 +61,12 @@ export default function SocialLinks({ variant = "light", socials }: Props) {
58
61
  }
59
62
 
60
63
  return (
61
- <a href={link} target="_blank" rel="noreferrer noopenner" key={i}>
64
+ <a
65
+ href={link}
66
+ target="_blank"
67
+ rel="noreferrer noopenner"
68
+ key={name + i}
69
+ >
62
70
  <StyledIconButton variant={variant}>
63
71
  {Icon && <Icon fontSize="inherit" className="icon" />}
64
72
  </StyledIconButton>
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
 
3
- import NextLink from "next/link";
4
3
  import styled from "@mui/material/styles/styled";
4
+ import NextLink from "next/link";
5
5
 
6
6
  type LinkProps = { isDark?: boolean };
7
7
 
@@ -1,15 +1,15 @@
1
1
  "use client";
2
2
 
3
- import React from "react";
4
3
  import { Box, Container, Typography } from "@mui/material";
5
4
  import Grid from "@mui/material/Grid2";
5
+ import { useTheme } from "@mui/material/styles";
6
+ import React from "react";
6
7
  import {
8
+ MdEmail as Email,
7
9
  MdLocationOn as LocationOn,
8
10
  MdPhone as Phone,
9
- MdEmail as Email,
10
11
  } from "react-icons/md";
11
- import { useTheme } from "@mui/material/styles";
12
- import { FooterBlock } from "@/cms/blocks/interfaces";
12
+ import type { FooterBlock } from "@/cms/blocks/interfaces";
13
13
 
14
14
  const contactItemSx = {
15
15
  display: "flex",