@evenicanpm/storefront-core 1.0.3 → 1.0.4

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 (319) hide show
  1. package/docs.tsconfig.json +35 -0
  2. package/package.json +6 -3
  3. package/src/api-manager/schemas/product.schema.ts +0 -1
  4. package/src/api-manager/services/create-query.ts +10 -0
  5. package/src/api-manager/services/product/queries/get-product-availability.ts +1 -1
  6. package/src/api-manager/services/user/mutations/add-to-wishlist.ts +23 -3
  7. package/src/api-manager/services/user/mutations/remove-from-wishlist.ts +23 -0
  8. package/src/cms/blocks/Components/CategoryCarousel/index.tsx +6 -7
  9. package/src/cms/blocks/Components/HeroCarousel/index.tsx +25 -19
  10. package/src/cms/blocks/Components/ProductCarousel/index.tsx +44 -38
  11. package/src/cms/blocks/Components/ProductSectionFullWidth/index.tsx +7 -3
  12. package/src/cms/blocks/Components/shared/product-grid.tsx +38 -23
  13. package/src/components/_components/wishlist/add-to-wishlist-dialog.tsx +1 -1
  14. package/src/components/_components/wishlist/remove-from-wishlist-dialog.tsx +1 -1
  15. package/src/components/_components/wishlist-modal/add-to-wishlist-dialog.tsx +1 -1
  16. package/src/components/_components/wishlist-modal/remove-from-wishlist-dialog.tsx +1 -1
  17. package/src/components-v2/carousel/carousel.tsx +69 -35
  18. package/src/components-v2/carousel/components/carousel-arrows.tsx +40 -46
  19. package/src/components-v2/carousel/components/carousel-dots.tsx +10 -13
  20. package/src/components-v2/carousel/index.ts +0 -2
  21. package/src/components-v2/carousel-cards/carousel-card-1/carousel-card-1.tsx +68 -49
  22. package/src/components-v2/categories/category-list/category-list.tsx +83 -41
  23. package/src/components-v2/categories/category-list/styles.ts +7 -1
  24. package/src/components-v2/categories/category-menu.tsx +2 -0
  25. package/src/components-v2/categories/mega-menu/banner.tsx +68 -37
  26. package/src/components-v2/categories/mega-menu/column-list.tsx +59 -52
  27. package/src/components-v2/categories/mega-menu/mega-menu-1.tsx +19 -1
  28. package/src/components-v2/categories/mega-menu/mega-menu-2.tsx +32 -2
  29. package/src/components-v2/header/components/mobile-header.tsx +119 -46
  30. package/src/components-v2/header/components/user.tsx +163 -117
  31. package/src/components-v2/header/header.tsx +62 -42
  32. package/src/components-v2/header/sticky-header.tsx +34 -2
  33. package/src/components-v2/mini-cart/components/bottom-actions.tsx +71 -17
  34. package/src/components-v2/mini-cart/components/cart-item.tsx +159 -101
  35. package/src/components-v2/mini-cart/components/empty-view.tsx +59 -19
  36. package/src/components-v2/mini-cart/components/top-header.tsx +61 -22
  37. package/src/components-v2/mini-cart/mini-cart-trigger.tsx +99 -0
  38. package/src/components-v2/mini-cart/mini-cart.tsx +111 -43
  39. package/src/components-v2/mobile-navigation/mobile-navigation-bar.tsx +93 -48
  40. package/src/components-v2/navbar/categories.tsx +70 -16
  41. package/src/components-v2/navbar/category-based-menu/category-based-menu.tsx +135 -41
  42. package/src/components-v2/navbar/mega-menu/mega-menu.tsx +115 -48
  43. package/src/components-v2/navbar/mobile-menu/mobile-menu.test.tsx +111 -0
  44. package/src/components-v2/navbar/mobile-menu/mobile-menu.tsx +127 -56
  45. package/src/components-v2/navbar/nav-list/nav-list.tsx +125 -103
  46. package/src/components-v2/navbar/navbar.tsx +72 -20
  47. package/src/components-v2/product-cards/{product-card-1 → product-card}/components/quantity-buttons.tsx +1 -1
  48. package/src/components-v2/product-cards/product-card/product-card.tsx +410 -0
  49. package/src/components-v2/product-cards/{product-card-1 → product-card}/styles/index.ts +6 -0
  50. package/src/components-v2/product-cards/product-card-plp/product-card.tsx +161 -0
  51. package/src/components-v2/product-cards/product-card-plp-list/index.ts +1 -0
  52. package/src/components-v2/product-cards/product-card-plp-list/product-card.tsx +219 -0
  53. package/src/components-v2/product-cards/product-card-search/product-card.tsx +166 -0
  54. package/src/components-v2/product-dialog/compound/product-dialog.tsx +225 -0
  55. package/src/components-v2/product-dialog/index.tsx +29 -0
  56. package/src/components-v2/product-dimensions/{components → compound}/dimensions-group-error.tsx +1 -1
  57. package/src/components-v2/product-dimensions/{components → compound}/dimensions-group-label.tsx +1 -1
  58. package/src/components-v2/product-dimensions/{components → compound}/dimensions-group-list-chip.tsx +1 -1
  59. package/src/components-v2/product-dimensions/{components → compound}/dimensions-group-list.tsx +1 -1
  60. package/src/components-v2/product-dimensions/{components → compound}/dimensions-group.tsx +1 -1
  61. package/src/components-v2/product-dimensions/{components → compound}/dimensions.tsx +0 -3
  62. package/src/components-v2/product-dimensions/index.tsx +1 -1
  63. package/src/components-v2/product-quantity-buttons/compound/quantity-buttons-root.tsx +181 -0
  64. package/src/components-v2/product-quantity-buttons/index.tsx +22 -0
  65. package/src/components-v2/product-quantity-variants/index.tsx +90 -0
  66. package/src/components-v2/products-view/compound/context.ts +25 -0
  67. package/src/components-v2/products-view/compound/products-grid-view.tsx +109 -0
  68. package/src/components-v2/products-view/compound/products-list-view.tsx +98 -0
  69. package/src/components-v2/products-view/compound/types.ts +12 -0
  70. package/src/components-v2/products-view/index.tsx +45 -0
  71. package/src/components-v2/products-view/products-grid-view.tsx +24 -11
  72. package/src/components-v2/products-view/products-list-view.tsx +29 -12
  73. package/src/components-v2/search-bar/compound/context.ts +31 -0
  74. package/src/components-v2/search-bar/compound/results-item-lg.tsx +43 -0
  75. package/src/components-v2/search-bar/compound/results-item-sm.tsx +48 -0
  76. package/src/components-v2/search-bar/compound/results-suspense.tsx +49 -0
  77. package/src/components-v2/search-bar/compound/results.tsx +42 -0
  78. package/src/components-v2/search-bar/compound/search-bar-root.tsx +64 -0
  79. package/src/components-v2/search-bar/compound/textfield-adornment-button.tsx +22 -0
  80. package/src/components-v2/{search-box/components/category-dropdown.tsx → search-bar/compound/textfield-adornment-category.tsx} +29 -7
  81. package/src/components-v2/search-bar/compound/textfield-adornment-search-icon.tsx +34 -0
  82. package/src/components-v2/search-bar/compound/textfield.tsx +58 -0
  83. package/src/components-v2/search-bar/hooks/use-click-outside.ts +20 -0
  84. package/src/components-v2/search-bar/hooks/use-search.ts +63 -0
  85. package/src/components-v2/search-bar/index.tsx +36 -0
  86. package/src/components-v2/{search-box → search-bar}/styles/index.ts +5 -3
  87. package/src/components-v2/search-bar/utils/findCategoryNameById.ts +18 -0
  88. package/src/components-v2/section/compound/section-header.tsx +63 -0
  89. package/src/components-v2/section/compound/section.tsx +26 -0
  90. package/src/components-v2/section/index.ts +1 -0
  91. package/src/components-v2/side-nav/side-nav.tsx +4 -5
  92. package/src/components-v2/sticky/index.ts +1 -1
  93. package/src/components-v2/{wishlist-modal → wishlist-dialogs/add-to-wishlist}/add-to-wishlist-button.tsx +1 -1
  94. package/src/components-v2/wishlist-dialogs/add-to-wishlist/compound/add-to-wishlist-bottom-ui.tsx +35 -0
  95. package/src/components-v2/wishlist-dialogs/add-to-wishlist/compound/add-to-wishlist-dialog.tsx +79 -0
  96. package/src/components-v2/wishlist-dialogs/add-to-wishlist/compound/add-to-wishlist-list.tsx +41 -0
  97. package/src/components-v2/wishlist-dialogs/add-to-wishlist/compound/context.ts +29 -0
  98. package/src/components-v2/wishlist-dialogs/add-to-wishlist/compound/wishlist-dialog-header.tsx +74 -0
  99. package/src/components-v2/wishlist-dialogs/add-to-wishlist/compound/wishlist-dialog-item.tsx +82 -0
  100. package/src/components-v2/wishlist-dialogs/add-to-wishlist/hooks/use-add-to-wishlist.ts +152 -0
  101. package/src/components-v2/wishlist-dialogs/add-to-wishlist/index.tsx +39 -0
  102. package/src/components-v2/wishlist-dialogs/create-wishlist/compound/context.ts +2 -0
  103. package/src/components-v2/wishlist-dialogs/create-wishlist/compound/create-wishlist-bottom-ui.tsx +42 -0
  104. package/src/components-v2/wishlist-dialogs/create-wishlist/compound/create-wishlist-dialog.tsx +92 -0
  105. package/src/components-v2/wishlist-dialogs/create-wishlist/compound/create-wishlist-form.tsx +96 -0
  106. package/src/components-v2/{wishlist/components → wishlist-dialogs/create-wishlist}/create-wishlist-button.tsx +5 -3
  107. package/src/components-v2/wishlist-dialogs/create-wishlist/index.tsx +22 -0
  108. package/src/hooks/use-cart.ts +29 -23
  109. package/src/hooks/use-variants.ts +106 -53
  110. package/src/lib/build-detail-url.ts +2 -1
  111. package/src/pages/product-details/product-intro/product-intro.tsx +26 -23
  112. package/src/pages/product-list/quick-view-dialog-content.tsx +18 -9
  113. package/src/pages-v2/product-details/bopis/find-in-store-button.tsx +9 -8
  114. package/src/pages-v2/product-details/bopis/find-in-store-modal.tsx +2 -2
  115. package/src/{components-v2/shop-card → pages-v2/product-details/bopis/store-card}/shop-card.tsx +17 -48
  116. package/src/pages-v2/product-details/bopis/store-card/utils/convertSecondsToTime.ts +8 -0
  117. package/src/pages-v2/product-details/bopis/store-card/utils/getDaysResources.ts +25 -0
  118. package/src/pages-v2/product-details/product-intro/compound/context.ts +52 -0
  119. package/src/pages-v2/product-details/product-intro/compound/product-info.tsx +231 -0
  120. package/src/pages-v2/product-details/product-intro/compound/product-intro-images.tsx +124 -0
  121. package/src/pages-v2/product-details/product-intro/compound/product-intro.tsx +49 -0
  122. package/src/pages-v2/product-details/product-intro/compound/thumbnail-with-skeleton.tsx +28 -0
  123. package/src/pages-v2/product-details/product-intro/utils.ts +42 -0
  124. package/src/pages-v2/product-details/product-tabs.tsx +87 -21
  125. package/src/pages-v2/product-details/related-products.tsx +26 -12
  126. package/src/pages-v2/product-list/quick-view-dialog-content.tsx +17 -10
  127. package/typedoc.js +3 -1
  128. package/src/components-v2/MiniCartClient.tsx +0 -65
  129. package/src/components-v2/carousel-cards/carousel-card-2/carousel-card-2.tsx +0 -78
  130. package/src/components-v2/carousel-cards/carousel-card-2/index.ts +0 -1
  131. package/src/components-v2/carousel-cards/carousel-card-2/styles.ts +0 -26
  132. package/src/components-v2/carousel-cards/carousel-card-3/carousel-card-3.tsx +0 -37
  133. package/src/components-v2/carousel-cards/carousel-card-3/index.ts +0 -1
  134. package/src/components-v2/carousel-cards/carousel-card-3/styles.ts +0 -28
  135. package/src/components-v2/carousel-cards/carousel-card-4/carousel-card-4.tsx +0 -81
  136. package/src/components-v2/carousel-cards/carousel-card-4/index.ts +0 -1
  137. package/src/components-v2/carousel-cards/carousel-card-4/styles.ts +0 -27
  138. package/src/components-v2/category-cards/category-card-1/category-card-1.tsx +0 -21
  139. package/src/components-v2/category-cards/category-card-1/index.ts +0 -1
  140. package/src/components-v2/category-cards/category-card-1/styles.ts +0 -37
  141. package/src/components-v2/countdown/count-box.tsx +0 -19
  142. package/src/components-v2/countdown/count-down.tsx +0 -24
  143. package/src/components-v2/countdown/index.tsx +0 -2
  144. package/src/components-v2/countdown/useCountDown.ts +0 -41
  145. package/src/components-v2/data-table/index.ts +0 -2
  146. package/src/components-v2/data-table/table-header.tsx +0 -91
  147. package/src/components-v2/data-table/table-pagination.tsx +0 -36
  148. package/src/components-v2/footer/components/about-links.tsx +0 -23
  149. package/src/components-v2/footer/components/app-store.tsx +0 -38
  150. package/src/components-v2/footer/components/customer-care-links.tsx +0 -21
  151. package/src/components-v2/footer/components/logo.tsx +0 -23
  152. package/src/components-v2/footer/components/social-links.tsx +0 -43
  153. package/src/components-v2/footer/data/index.ts +0 -54
  154. package/src/components-v2/footer/footer-1.tsx +0 -62
  155. package/src/components-v2/footer/footer-2.tsx +0 -57
  156. package/src/components-v2/footer/footer-3.tsx +0 -53
  157. package/src/components-v2/footer/footer-4.tsx +0 -71
  158. package/src/components-v2/footer/index.ts +0 -4
  159. package/src/components-v2/footer/styles/index.ts +0 -42
  160. package/src/components-v2/navbar/category-based-menu/components/categories.tsx +0 -44
  161. package/src/components-v2/navbar/category-based-menu/components/category-item.tsx +0 -31
  162. package/src/components-v2/navbar/category-based-menu/components/child-categories.tsx +0 -38
  163. package/src/components-v2/navbar/mega-menu/category-list.tsx +0 -29
  164. package/src/components-v2/navbar/mobile-menu/render-levels.test.tsx +0 -71
  165. package/src/components-v2/navbar/mobile-menu/render-levels.tsx +0 -62
  166. package/src/components-v2/newsletter/index.ts +0 -1
  167. package/src/components-v2/newsletter/newsletter.tsx +0 -112
  168. package/src/components-v2/newsletter/social-icons.tsx +0 -35
  169. package/src/components-v2/newsletter/styles.ts +0 -65
  170. package/src/components-v2/page-sidenav/grocery-side-nav/components/link-item.tsx +0 -21
  171. package/src/components-v2/page-sidenav/grocery-side-nav/components/list-item.tsx +0 -27
  172. package/src/components-v2/page-sidenav/grocery-side-nav/components/nav-accordion.tsx +0 -36
  173. package/src/components-v2/page-sidenav/grocery-side-nav/components/render-child.tsx +0 -26
  174. package/src/components-v2/page-sidenav/grocery-side-nav/grocery-side-nav.tsx +0 -32
  175. package/src/components-v2/page-sidenav/grocery-side-nav/index.ts +0 -1
  176. package/src/components-v2/page-sidenav/grocery-side-nav/styles/index.ts +0 -11
  177. package/src/components-v2/page-sidenav/health-beauty-side-nav/components/list-item.tsx +0 -27
  178. package/src/components-v2/page-sidenav/health-beauty-side-nav/components/nav-accordion.tsx +0 -44
  179. package/src/components-v2/page-sidenav/health-beauty-side-nav/components/render-child.tsx +0 -20
  180. package/src/components-v2/page-sidenav/health-beauty-side-nav/health-beauty-side-nav.tsx +0 -43
  181. package/src/components-v2/page-sidenav/health-beauty-side-nav/index.ts +0 -1
  182. package/src/components-v2/page-sidenav/health-beauty-side-nav/styles/index.ts +0 -27
  183. package/src/components-v2/page-sidenav/side-navbar/components/list-item.tsx +0 -25
  184. package/src/components-v2/page-sidenav/side-navbar/components/nav-accordion.tsx +0 -46
  185. package/src/components-v2/page-sidenav/side-navbar/components/render-child.tsx +0 -20
  186. package/src/components-v2/page-sidenav/side-navbar/index.ts +0 -1
  187. package/src/components-v2/page-sidenav/side-navbar/side-nav-bar.tsx +0 -77
  188. package/src/components-v2/page-sidenav/side-navbar/styles/index.ts +0 -73
  189. package/src/components-v2/page-sidenav/side-navbar-2/components/button-content.tsx +0 -32
  190. package/src/components-v2/page-sidenav/side-navbar-2/components/sidebar-accordion.tsx +0 -66
  191. package/src/components-v2/page-sidenav/side-navbar-2/index.ts +0 -1
  192. package/src/components-v2/page-sidenav/side-navbar-2/side-navbar-2.tsx +0 -63
  193. package/src/components-v2/page-sidenav/side-navbar-2/styles/index.ts +0 -68
  194. package/src/components-v2/product-cards/product-card-1/index.ts +0 -1
  195. package/src/components-v2/product-cards/product-card-1/product-card-1-wrapper.tsx +0 -304
  196. package/src/components-v2/product-cards/product-card-1/product-card.tsx +0 -107
  197. package/src/components-v2/product-cards/product-card-10/index.ts +0 -1
  198. package/src/components-v2/product-cards/product-card-10/product-card.tsx +0 -128
  199. package/src/components-v2/product-cards/product-card-10/styles/index.ts +0 -38
  200. package/src/components-v2/product-cards/product-card-11/index.ts +0 -1
  201. package/src/components-v2/product-cards/product-card-11/product-card.tsx +0 -66
  202. package/src/components-v2/product-cards/product-card-11/styles/index.ts +0 -16
  203. package/src/components-v2/product-cards/product-card-12/index.ts +0 -1
  204. package/src/components-v2/product-cards/product-card-12/product-card.tsx +0 -42
  205. package/src/components-v2/product-cards/product-card-12/styles/index.ts +0 -16
  206. package/src/components-v2/product-cards/product-card-13/index.ts +0 -1
  207. package/src/components-v2/product-cards/product-card-13/product-card.tsx +0 -48
  208. package/src/components-v2/product-cards/product-card-13/styles/index.ts +0 -25
  209. package/src/components-v2/product-cards/product-card-14/index.ts +0 -1
  210. package/src/components-v2/product-cards/product-card-14/product-card.tsx +0 -125
  211. package/src/components-v2/product-cards/product-card-14/styles/index.ts +0 -40
  212. package/src/components-v2/product-cards/product-card-15/index.ts +0 -1
  213. package/src/components-v2/product-cards/product-card-15/product-card.tsx +0 -121
  214. package/src/components-v2/product-cards/product-card-15/styles/index.ts +0 -57
  215. package/src/components-v2/product-cards/product-card-16/product-card.tsx +0 -116
  216. package/src/components-v2/product-cards/product-card-2/components/favorite-button.tsx +0 -29
  217. package/src/components-v2/product-cards/product-card-2/components/product-price.tsx +0 -26
  218. package/src/components-v2/product-cards/product-card-2/index.ts +0 -1
  219. package/src/components-v2/product-cards/product-card-2/product-card.tsx +0 -70
  220. package/src/components-v2/product-cards/product-card-3/components/hover-actions.tsx +0 -83
  221. package/src/components-v2/product-cards/product-card-3/index.ts +0 -1
  222. package/src/components-v2/product-cards/product-card-3/product-card.tsx +0 -110
  223. package/src/components-v2/product-cards/product-card-3/styles/index.ts +0 -89
  224. package/src/components-v2/product-cards/product-card-4/components/hover-actions.tsx +0 -50
  225. package/src/components-v2/product-cards/product-card-4/index.ts +0 -1
  226. package/src/components-v2/product-cards/product-card-4/product-card.tsx +0 -128
  227. package/src/components-v2/product-cards/product-card-4/styles/index.ts +0 -66
  228. package/src/components-v2/product-cards/product-card-5/components/button-actions.tsx +0 -49
  229. package/src/components-v2/product-cards/product-card-5/components/hover-actions.tsx +0 -50
  230. package/src/components-v2/product-cards/product-card-5/index.ts +0 -1
  231. package/src/components-v2/product-cards/product-card-5/product-card.tsx +0 -137
  232. package/src/components-v2/product-cards/product-card-5/styles/index.ts +0 -94
  233. package/src/components-v2/product-cards/product-card-6/components/hover-actions.tsx +0 -50
  234. package/src/components-v2/product-cards/product-card-6/index.ts +0 -1
  235. package/src/components-v2/product-cards/product-card-6/product-card.tsx +0 -121
  236. package/src/components-v2/product-cards/product-card-6/styles/index.ts +0 -63
  237. package/src/components-v2/product-cards/product-card-7/components/product-status.tsx +0 -18
  238. package/src/components-v2/product-cards/product-card-7/components/quantity-buttons.tsx +0 -47
  239. package/src/components-v2/product-cards/product-card-7/index.ts +0 -1
  240. package/src/components-v2/product-cards/product-card-7/product-card.tsx +0 -139
  241. package/src/components-v2/product-cards/product-card-7/styles/index.ts +0 -98
  242. package/src/components-v2/product-cards/product-card-8/product-card.tsx +0 -151
  243. package/src/components-v2/product-cards/product-card-9/index.ts +0 -1
  244. package/src/components-v2/product-cards/product-card-9/product-card.tsx +0 -169
  245. package/src/components-v2/product-cards/product-card-wishlist/components/hover-actions.tsx +0 -37
  246. package/src/components-v2/product-cards/product-card-wishlist/product-card.tsx +0 -118
  247. package/src/components-v2/product-cards/product-card-wishlist/styles/index.ts +0 -53
  248. package/src/components-v2/product-quantity-buttons/product-quantity-buttons.tsx +0 -88
  249. package/src/components-v2/products-view/product-view-dialog.tsx +0 -218
  250. package/src/components-v2/search-box/__test__/search-input-category.test.tsx +0 -110
  251. package/src/components-v2/search-box/__test__/search-input.test.tsx +0 -137
  252. package/src/components-v2/search-box/__test__/search-results.json +0 -165
  253. package/src/components-v2/search-box/components/search-result.tsx +0 -86
  254. package/src/components-v2/search-box/hooks/use-search.ts +0 -63
  255. package/src/components-v2/search-box/index.ts +0 -2
  256. package/src/components-v2/search-box/search-input-category.test.tsx +0 -110
  257. package/src/components-v2/search-box/search-input-category.tsx +0 -203
  258. package/src/components-v2/search-box/search-input.test.tsx +0 -41
  259. package/src/components-v2/search-box/search-input.tsx +0 -66
  260. package/src/components-v2/section-header/index.ts +0 -2
  261. package/src/components-v2/section-header/section-creator.tsx +0 -29
  262. package/src/components-v2/section-header/section-header.tsx +0 -44
  263. package/src/components-v2/service-cards/icon-component.tsx +0 -18
  264. package/src/components-v2/service-cards/service-card-1/index.ts +0 -1
  265. package/src/components-v2/service-cards/service-card-1/service-card-1.tsx +0 -42
  266. package/src/components-v2/service-cards/service-card-2/index.ts +0 -1
  267. package/src/components-v2/service-cards/service-card-2/service-card-2.tsx +0 -37
  268. package/src/components-v2/service-cards/service-card-3/index.ts +0 -1
  269. package/src/components-v2/service-cards/service-card-3/service-card-3.tsx +0 -28
  270. package/src/components-v2/service-cards/service-card-3/styles.ts +0 -23
  271. package/src/components-v2/settings/index.ts +0 -1
  272. package/src/components-v2/settings/setting.tsx +0 -141
  273. package/src/components-v2/settings/styles.ts +0 -57
  274. package/src/components-v2/sticky-wrapper/index.ts +0 -1
  275. package/src/components-v2/sticky-wrapper/sticky-wrapper.tsx +0 -21
  276. package/src/components-v2/sticky-wrapper/styles.ts +0 -25
  277. package/src/components-v2/stories/story-content/index.ts +0 -1
  278. package/src/components-v2/stories/story-content/story-content.tsx +0 -28
  279. package/src/components-v2/stories/story-content/styles.ts +0 -22
  280. package/src/components-v2/stories/story-item/index.ts +0 -1
  281. package/src/components-v2/stories/story-item/story-item.tsx +0 -24
  282. package/src/components-v2/stories/story-item/styles.ts +0 -11
  283. package/src/components-v2/stories/story-viewer/index.ts +0 -1
  284. package/src/components-v2/stories/story-viewer/story-viewer.tsx +0 -44
  285. package/src/components-v2/stories/story-viewer/styles.ts +0 -15
  286. package/src/components-v2/subscribe-input/index.ts +0 -1
  287. package/src/components-v2/subscribe-input/styles.ts +0 -14
  288. package/src/components-v2/subscribe-input/subscribe-input.tsx +0 -43
  289. package/src/components-v2/topbar/index.ts +0 -1
  290. package/src/components-v2/topbar/styles.ts +0 -55
  291. package/src/components-v2/topbar/top-bar.tsx +0 -115
  292. package/src/components-v2/wishlist/add-to-wishlist-dialog.tsx +0 -161
  293. package/src/components-v2/wishlist/components/create-new-list.tsx +0 -167
  294. package/src/components-v2/wishlist/components/dashboard-header.tsx +0 -123
  295. package/src/components-v2/wishlist/components/navigation.tsx +0 -87
  296. package/src/components-v2/wishlist/components/no-records.tsx +0 -20
  297. package/src/components-v2/wishlist/components/wishlist-modal-item.tsx +0 -66
  298. package/src/components-v2/wishlist/remove-from-wishlist-dialog.tsx +0 -175
  299. package/src/components-v2/wishlist-modal/TODO.md +0 -10
  300. package/src/components-v2/wishlist-modal/add-to-wishlist-dialog.tsx +0 -161
  301. package/src/components-v2/wishlist-modal/remove-from-wishlist-dialog.tsx +0 -174
  302. package/src/components-v2/wishlist-modal/wishlist-modal-item.tsx +0 -65
  303. package/src/pages-v2/product-details/product-intro/product-intro-images.tsx +0 -90
  304. package/src/pages-v2/product-details/product-intro/product-intro.tsx +0 -256
  305. /package/src/{pages-v2/account → components-v2}/no-records.tsx +0 -0
  306. /package/src/components-v2/product-cards/{product-card-1 → product-card}/components/hover-actions.tsx +0 -0
  307. /package/src/components-v2/product-cards/{product-card-16 → product-card}/index.ts +0 -0
  308. /package/src/components-v2/product-cards/{product-card-16 → product-card-plp}/components/quantity-buttons.tsx +0 -0
  309. /package/src/components-v2/product-cards/{product-card-wishlist → product-card-plp}/index.ts +0 -0
  310. /package/src/components-v2/product-cards/{product-card-16 → product-card-plp}/styles/index.ts +0 -0
  311. /package/src/components-v2/product-cards/{product-card-9 → product-card-plp-list}/components/add-to-cart.tsx +0 -0
  312. /package/src/components-v2/product-cards/{product-card-9 → product-card-plp-list}/components/favorite-button.tsx +0 -0
  313. /package/src/components-v2/product-cards/{product-card-9 → product-card-plp-list}/components/tags.tsx +0 -0
  314. /package/src/components-v2/product-cards/{product-card-8 → product-card-search}/index.ts +0 -0
  315. /package/src/components-v2/product-cards/{product-card-8 → product-card-search}/styles/index.ts +0 -0
  316. /package/src/components-v2/sticky/{Sticky.tsx → sticky.tsx} +0 -0
  317. /package/src/components-v2/{wishlist → wishlist-dialogs}/styles.ts +0 -0
  318. /package/src/{components-v2/shop-card → pages-v2/product-details/bopis/store-card}/index.ts +0 -0
  319. /package/src/{components-v2/shop-card → pages-v2/product-details/bopis/store-card}/styles.ts +0 -0
@@ -1,7 +1,7 @@
1
1
  import { ReactNode } from "react";
2
2
  // GLOBAL CUSTOM COMPONENTS
3
3
  import FlexBetween from "@evenicanpm/storefront-core/src/components-v2/flex-box/flex-between";
4
- import { ProductCard9 } from "@evenicanpm/storefront-core/src/components-v2/product-cards/product-card-9/index";
4
+ import { ProductCardPlpList } from "@evenicanpm/storefront-core/src/components-v2/product-cards/product-card-plp-list/index";
5
5
  // DATA MODEL
6
6
  import { ProductSearchResult as Product } from "@msdyn365-commerce/retail-proxy";
7
7
  import { ProductPrice } from "@/api-manager/schemas/product.schema";
@@ -26,18 +26,35 @@ export default function ProductsListView({
26
26
  (price) => price.ProductId === item.RecordId,
27
27
  );
28
28
  return (
29
- <ProductCard9
30
- id={item.RecordId}
29
+ <ProductCardPlpList
31
30
  key={item.RecordId}
32
- slug={item.ItemId ?? ""}
33
- title={item.Name ?? ""}
34
- price={matchingPrice?.CustomerContextualPrice ?? 0}
35
- off={0} // Need to get discount info for product.
36
- rating={item.TotalRatings ?? 0}
37
- imgUrl={item.PrimaryImageUrl ?? ""}
38
- showAddToCart={false}
39
- showFavorite={false}
40
- />
31
+ product={{
32
+ id: item.RecordId,
33
+ title: item.Name ?? "",
34
+ slug: item.ItemId ?? "",
35
+ price: matchingPrice?.CustomerContextualPrice ?? 0,
36
+ imgUrl: item.PrimaryImageUrl ?? "",
37
+ rating: item.TotalRatings ?? 0,
38
+ discount: 0, // Need to get discount info for product.,
39
+ //tags: ["Bike", "Motor", "Ducati"], // Example tags
40
+ }}
41
+ >
42
+ {/* <ProductCardPlpList.FavoriteButton /> */}
43
+ <ProductCardPlpList.Body>
44
+ <ProductCardPlpList.Image />
45
+ <ProductCardPlpList.Content>
46
+ <ProductCardPlpList.Info>
47
+ {/* <ProductCardPlpList.Tags /> */}
48
+ <ProductCardPlpList.Title />
49
+ <ProductCardPlpList.Price />
50
+ <ProductCardPlpList.Rating />
51
+ </ProductCardPlpList.Info>
52
+ {/* <ProductCardPlpList.Actions>
53
+ <ProductCardPlpList.QuantityButtons />
54
+ </ProductCardPlpList.Actions> */}
55
+ </ProductCardPlpList.Content>
56
+ </ProductCardPlpList.Body>
57
+ </ProductCardPlpList>
41
58
  );
42
59
  })}
43
60
 
@@ -0,0 +1,31 @@
1
+ import { ProductSearchResult } from "@msdyn365-commerce/retail-proxy";
2
+ import { createContext } from "react";
3
+ import { FormEvent } from "react";
4
+
5
+ /**
6
+ * @category Context
7
+ * @internal
8
+ */
9
+ export interface SearchBarContext {
10
+ state: {
11
+ resultsOpen: boolean;
12
+ searchText: string;
13
+ searchCategory: number;
14
+ };
15
+ setters: {
16
+ setResultsOpen: (open: boolean) => void;
17
+ };
18
+ handlers: {
19
+ handleNavigate: () => void;
20
+ handleCategoryChange: (categoryId: number) => void;
21
+ handleSubmit: (event: FormEvent<HTMLFormElement>) => void;
22
+ handleSearch: (e: React.ChangeEvent<HTMLInputElement>) => void;
23
+ };
24
+ handleCloseDrawer: () => void;
25
+ }
26
+ export const SearchContext = createContext<SearchBarContext>(null);
27
+
28
+ /**
29
+ * @internal
30
+ */
31
+ export const SearchResultItemContext = createContext<ProductSearchResult>(null);
@@ -0,0 +1,43 @@
1
+ /**
2
+ * @module SearchBar
3
+ */
4
+ import React, { useContext } from "react";
5
+ import Grid from "@mui/material/Grid";
6
+ import ProductCardSearch from "@evenicanpm/storefront-core/src/components-v2/product-cards/product-card-search";
7
+ import { SearchContext, SearchResultItemContext } from "./context";
8
+
9
+ /**
10
+ * Large, vertical result item card, used for desktop view.
11
+ * @category Sub-Component
12
+ */
13
+ export default function ResultItemLg() {
14
+ const { handleCloseDrawer } = useContext(SearchContext);
15
+ const item = useContext(SearchResultItemContext);
16
+
17
+ return (
18
+ <Grid item xs={12} sm={6} md={4} onClick={handleCloseDrawer}>
19
+ <ProductCardSearch
20
+ product={{
21
+ slug: item.ItemId ?? "",
22
+ price: item.Price,
23
+ title: item.Name ?? "",
24
+ thumbnail: item.PrimaryImageUrl ?? "",
25
+ id: item.RecordId ?? "",
26
+ rating: item.AverageRating ?? 0,
27
+ reviews: item.TotalRatings ?? 0,
28
+ categories: [], // TODO: Category info not available in item
29
+ }}
30
+ >
31
+ <ProductCardSearch.CardMedia>
32
+ <ProductCardSearch.Image />
33
+ </ProductCardSearch.CardMedia>
34
+ <ProductCardSearch.Info>
35
+ <ProductCardSearch.Category />
36
+ <ProductCardSearch.Title />
37
+ <ProductCardSearch.Price />
38
+ <ProductCardSearch.Rating />
39
+ </ProductCardSearch.Info>
40
+ </ProductCardSearch>
41
+ </Grid>
42
+ );
43
+ }
@@ -0,0 +1,48 @@
1
+ /**
2
+ * @module SearchBar
3
+ */
4
+ import React, { useContext } from "react";
5
+ import NavLink from "@evenicanpm/storefront-core/src/components-v2/nav-link/nav-link";
6
+ import MenuItem from "@mui/material/MenuItem";
7
+ import { getProductDetailUrl } from "@/lib/build-product-detail-url";
8
+ import { Box, Grid } from "@mui/material";
9
+ import LazyImage from "@evenicanpm/storefront-core/src/components-v2/LazyImage";
10
+ import {
11
+ H4,
12
+ Span,
13
+ } from "@evenicanpm/storefront-core/src/components-v2/Typography";
14
+ import { currency } from "@/lib/lib";
15
+ import { SearchContext, SearchResultItemContext } from "./context";
16
+
17
+ /**
18
+ * Small, horizontal result item card, used for mobile view.
19
+ * @category Sub-Component
20
+ */
21
+ export default function ResultItemSm() {
22
+ const { handleCloseDrawer } = useContext(SearchContext);
23
+ const item = useContext(SearchResultItemContext);
24
+
25
+ return (
26
+ <Grid item xs={12}>
27
+ <MenuItem onClick={handleCloseDrawer}>
28
+ <NavLink href={getProductDetailUrl(item)} key={item.RecordId}>
29
+ <Box display="flex" alignItems="center">
30
+ <Box position="relative" height={130} width={130}>
31
+ <LazyImage
32
+ height={300}
33
+ width={300}
34
+ alt="product"
35
+ className="product-img"
36
+ src={item.PrimaryImageUrl ?? ""}
37
+ />
38
+ </Box>
39
+ <Box flex="1" ml={2} whiteSpace="normal">
40
+ <H4>{item.Name}</H4>
41
+ <Span>{currency(item.Price)}</Span>
42
+ </Box>
43
+ </Box>
44
+ </NavLink>
45
+ </MenuItem>
46
+ </Grid>
47
+ );
48
+ }
@@ -0,0 +1,49 @@
1
+ /**
2
+ * @module SearchBar
3
+ */
4
+ "use client";
5
+
6
+ import React, { Suspense, useContext } from "react";
7
+ import { SearchContext } from "./context";
8
+ import { CircularProgress } from "@mui/material";
9
+ import SearchResult from "./results";
10
+ import { SearchResultCard } from "../styles/index";
11
+ import ResultItemCardLg from "@evenicanpm/storefront-core/src/components-v2/search-bar/compound/results-item-lg";
12
+ import ResultItemCardSm from "./results-item-sm";
13
+
14
+ import _ from "lodash";
15
+
16
+ /**
17
+ * useSuspenseQuery will instantly suspend component fallback to
18
+ * suspense boundary above.
19
+ * Therefore, we cannot handle the suspense fallback state
20
+ * inside SearchResult, we have to use this wrapper.
21
+ *
22
+ * @category Sub-Component
23
+ */
24
+ export default function SearchResultSuspense({
25
+ children,
26
+ }: {
27
+ children: React.ReactNode;
28
+ }) {
29
+ const { state } = useContext(SearchContext);
30
+ return (
31
+ <Suspense
32
+ fallback={
33
+ <SearchResultCard sx={{ display: "flex", justifyContent: "center" }}>
34
+ <CircularProgress
35
+ size={15}
36
+ sx={{ marginTop: "1rem", marginBottom: "1rem" }}
37
+ />
38
+ </SearchResultCard>
39
+ }
40
+ >
41
+ {state.searchText && state.resultsOpen && (
42
+ <SearchResult>{children}</SearchResult>
43
+ )}
44
+ </Suspense>
45
+ );
46
+ }
47
+
48
+ SearchResultSuspense.ItemCardLg = ResultItemCardLg;
49
+ SearchResultSuspense.ItemCardSm = ResultItemCardSm;
@@ -0,0 +1,42 @@
1
+ /**
2
+ * @module SearchBar
3
+ */
4
+ import React, { useContext } from "react";
5
+ import { useTranslations } from "next-intl";
6
+ import searchProducts from "@/services/product/queries/search-products";
7
+ import { SearchResultCard } from "../styles/index";
8
+ import { SearchContext, SearchResultItemContext } from "./context";
9
+ import Grid from "@mui/material/Grid";
10
+
11
+ /**
12
+ * Search Results Container that handles mapping items and styles of the containing box.
13
+ * @category Sub-Component
14
+ */
15
+ export default function SearchResultsContainer({
16
+ children,
17
+ }: {
18
+ children: React.ReactNode;
19
+ }) {
20
+ const t = useTranslations();
21
+ const { state } = useContext(SearchContext);
22
+ const { data: results } = searchProducts.useSuspenseData({
23
+ searchText: state.searchText,
24
+ category: state.searchCategory,
25
+ });
26
+
27
+ if (results.length === 0) {
28
+ return <SearchResultCard>{t("Search.noResults")}</SearchResultCard>;
29
+ }
30
+
31
+ return (
32
+ <SearchResultCard>
33
+ <Grid container>
34
+ {results.map((item, i) => (
35
+ <SearchResultItemContext.Provider value={item} key={i}>
36
+ {children}
37
+ </SearchResultItemContext.Provider>
38
+ ))}
39
+ </Grid>
40
+ </SearchResultCard>
41
+ );
42
+ }
@@ -0,0 +1,64 @@
1
+ /**
2
+ * @module SearchBar
3
+ */
4
+ "use client";
5
+ import React, { useRef } from "react";
6
+ import Box from "@mui/material/Box";
7
+
8
+ // local hooks
9
+ import useSearch from "../hooks/use-search";
10
+ import { useClickOutside } from "../hooks/use-click-outside";
11
+
12
+ // contexts
13
+ import { SearchContext } from "./context";
14
+
15
+ // components
16
+ import SearchResultSuspense from "./results-suspense";
17
+ import TextField from "./textfield";
18
+
19
+ import _ from "lodash";
20
+
21
+ interface Props {
22
+ handleCloseDrawer?: () => void;
23
+ children: React.ReactNode;
24
+ }
25
+
26
+ /**
27
+ * Search input with a category filter.
28
+ * @category Compound Component
29
+ * @example
30
+ * <SearchBar handleCloseDrawer={handleCloseDrawer}>
31
+ * <SearchBar.TextField />
32
+ * <SearchBar.Results>
33
+ * <SearchBar.Results.ItemCardLg />
34
+ * </SearchBar.Results>
35
+ * </SearchBar>
36
+ *
37
+ */
38
+ export default function SearchBarRoot({ handleCloseDrawer, children }: Props) {
39
+ const { setters, handlers, state } = useSearch();
40
+ const inputRef = useRef(null);
41
+ useClickOutside(inputRef, () => setters.setResultsOpen(false));
42
+
43
+ return (
44
+ <SearchContext.Provider
45
+ value={{ setters, handlers, state, handleCloseDrawer }}
46
+ >
47
+ <Box
48
+ position="relative"
49
+ flex="1 1 0"
50
+ maxWidth="670px"
51
+ mx="auto"
52
+ onClick={() => {
53
+ setters.setResultsOpen(true);
54
+ }}
55
+ ref={inputRef}
56
+ >
57
+ {children}
58
+ </Box>
59
+ </SearchContext.Provider>
60
+ );
61
+ }
62
+
63
+ SearchBarRoot.TextField = TextField;
64
+ SearchBarRoot.Results = SearchResultSuspense;
@@ -0,0 +1,22 @@
1
+ /**
2
+ * @module SearchBar
3
+ */
4
+ import Button from "@mui/material/Button";
5
+
6
+ /**
7
+ * @category Sub-Component
8
+ */
9
+ const AdornmentButton = ({ label }: { label: string }) => {
10
+ return (
11
+ <Button
12
+ color="primary"
13
+ disableElevation
14
+ variant="contained"
15
+ type="submit"
16
+ sx={{ px: "3rem", height: "100%", borderRadius: "0 4px 4px 0" }}
17
+ >
18
+ {label}
19
+ </Button>
20
+ );
21
+ };
22
+ export default AdornmentButton;
@@ -1,32 +1,54 @@
1
+ /**
2
+ * @module SearchBar
3
+ */
1
4
  "use client";
2
5
  import React from "react";
3
6
  import MenuItem from "@mui/material/MenuItem";
4
7
  import TouchRipple from "@mui/material/ButtonBase";
5
8
  import useTheme from "@mui/material/styles/useTheme";
9
+ import getCategories from "@/services/categories/queries/get-categories";
6
10
  import { MdKeyboardArrowDown as KeyboardArrowDownOutlined } from "react-icons/md";
7
-
11
+ import { findCategoryNameById } from "../utils/findCategoryNameById";
8
12
  import Menu from "@evenicanpm/storefront-core/src/components-v2/BazaarMenu";
9
13
  import { DropDownHandler } from "../styles/index";
10
- import { CategoryHierarchy } from "@/lib/category-helpers";
11
-
14
+ import { useTranslations } from "next-intl";
12
15
  type DisplayCategory = {
13
16
  name: string;
14
17
  id: number;
15
18
  };
16
- interface Props {
17
- title: string;
19
+
20
+ /**
21
+ * @category Props
22
+ */
23
+ export interface CategoryDropdownProps {
24
+ /** The currently selected category id, "All" by default. Used to filter typeahead search query. */
25
+ selectedCategoryId: number;
26
+ /** A handler to call when the category is changed. In this case will be changing the state that is held in top-level context */
18
27
  handleChange: (categoryId: number) => void;
19
- categories: CategoryHierarchy[];
20
28
  }
21
29
 
22
- const CategoryDropdown = ({ title, handleChange, categories }: Props) => {
30
+ /**
31
+ * Category Dropdown filter for SearchBar. Selecting a category
32
+ * will filter the search query.
33
+ *
34
+ * @category Sub-Component
35
+ */
36
+ const CategoryDropdown = ({
37
+ selectedCategoryId,
38
+ handleChange,
39
+ }: CategoryDropdownProps) => {
40
+ const { data: categories } = getCategories.useSuspenseData();
41
+ const t = useTranslations();
23
42
  const { breakpoints } = useTheme();
43
+
24
44
  const _categories = Array.isArray(categories) ? categories : [];
25
45
  const options: DisplayCategory[] = [
26
46
  ..._categories.map((cat) => ({ name: cat?.Name ?? "", id: cat.RecordId })),
27
47
  { name: "All Categories", id: 0 },
28
48
  ]; // add all categories option
29
49
 
50
+ const title = findCategoryNameById(selectedCategoryId, categories, t);
51
+
30
52
  return (
31
53
  <>
32
54
  <Menu
@@ -0,0 +1,34 @@
1
+ /**
2
+ * @module SearchBar
3
+ */
4
+ import Box from "@mui/material/Box";
5
+ import { IconButton } from "@mui/material";
6
+ import Search from "@evenicanpm/storefront-core/src/components-v2/icons/search";
7
+
8
+ interface Props {
9
+ handleNavigate: () => void;
10
+ }
11
+
12
+ /**
13
+ * Search icon that appears in the left adornment slot of search-box
14
+ * @category Sub-Component
15
+ */
16
+ const AdornmentSearchIcon = ({ handleNavigate }: Props) => {
17
+ return (
18
+ <Box
19
+ mr={1}
20
+ px={1}
21
+ display="grid"
22
+ alignItems="center"
23
+ justifyContent="center"
24
+ borderRight="1px solid"
25
+ borderColor="grey.400"
26
+ >
27
+ <IconButton onClick={handleNavigate}>
28
+ <Search sx={{ fontSize: 17, color: "grey.600" }} />
29
+ </IconButton>
30
+ </Box>
31
+ );
32
+ };
33
+
34
+ export default AdornmentSearchIcon;
@@ -0,0 +1,58 @@
1
+ /**
2
+ * @module SearchBar
3
+ */
4
+ "use client";
5
+ import React, { useContext } from "react";
6
+ import TextField from "@mui/material/TextField";
7
+
8
+ import SearchIconAdornment from "./textfield-adornment-search-icon";
9
+ import AdornmentButton from "./textfield-adornment-button";
10
+ import CategoryDropdown from "./textfield-adornment-category";
11
+
12
+ import { INPUT_SX } from "../styles/index";
13
+ import { useTheme, useMediaQuery } from "@mui/material";
14
+ import _ from "lodash";
15
+ import { useTranslations } from "next-intl";
16
+ import { SearchContext } from "./context";
17
+
18
+ /**
19
+ * The actual input field for the search bar.
20
+ * Adornment will change based on media query width -
21
+ * Categories filter for desktop and search button for mobile.
22
+ * @category Sub-Component
23
+ */
24
+ export default function SearchBarTextField() {
25
+ const { handlers, state } = useContext(SearchContext);
26
+ const t = useTranslations();
27
+ const theme = useTheme();
28
+ const downMd = useMediaQuery(theme.breakpoints.down(1150));
29
+
30
+ const endAdornment = downMd ? (
31
+ <AdornmentButton label={t("Search.searchBtn")} />
32
+ ) : (
33
+ <CategoryDropdown
34
+ selectedCategoryId={state.searchCategory}
35
+ handleChange={handlers.handleCategoryChange}
36
+ />
37
+ );
38
+
39
+ return (
40
+ <form onSubmit={handlers.handleSubmit}>
41
+ <TextField
42
+ fullWidth
43
+ variant="outlined"
44
+ placeholder={t("Search.searchPlaceholder")}
45
+ onChange={handlers.handleSearch}
46
+ slotProps={{
47
+ input: {
48
+ sx: INPUT_SX,
49
+ startAdornment: (
50
+ <SearchIconAdornment handleNavigate={handlers.handleNavigate} />
51
+ ),
52
+ endAdornment: endAdornment,
53
+ },
54
+ }}
55
+ />
56
+ </form>
57
+ );
58
+ }
@@ -0,0 +1,20 @@
1
+ import { useEffect } from "react";
2
+
3
+ /**
4
+ * Detect if clicks are outside of an element in an ref
5
+ */
6
+ export const useClickOutside = (
7
+ ref: React.RefObject<HTMLElement>,
8
+ callback: () => void,
9
+ ) => {
10
+ useEffect(() => {
11
+ const handleClick = (e: PointerEvent) => {
12
+ if (ref.current && !ref.current.contains(e.target as Node)) callback();
13
+ };
14
+
15
+ document.addEventListener("click", handleClick);
16
+ return () => {
17
+ document.removeEventListener("click", handleClick);
18
+ };
19
+ }, [ref, callback]);
20
+ };
@@ -0,0 +1,63 @@
1
+ "use client";
2
+ import React, { FormEvent, useState } from "react";
3
+ import { PageSlug } from "@/lib/page-slugs";
4
+ import { PageKey } from "@/lib/product-list-types";
5
+
6
+ import _ from "lodash";
7
+ import { useRouter } from "next/navigation";
8
+
9
+ /**
10
+ * Handles all main logic and state for the search bar components.
11
+ */
12
+ export default function useSearch() {
13
+ // State
14
+ const [resultsOpen, setResultsOpen] = useState(false);
15
+ const [searchText, setSearchText] = React.useState<string>("");
16
+ const [searchCategory, setSelectedCategory] = React.useState<number>(0);
17
+
18
+ // Hooks
19
+ const router = useRouter();
20
+
21
+ // Handlers
22
+ const handleCategoryChange = (categoryId: number) => {
23
+ setSelectedCategory(categoryId);
24
+ };
25
+
26
+ const handleNavigate = () => {
27
+ if (searchText.trim() === "") {
28
+ return;
29
+ }
30
+ const url = new URL(PageSlug.ProductList, window.location.origin);
31
+ url.searchParams.set(PageKey.SEARCH, searchText);
32
+ router.push(url.toString());
33
+ };
34
+
35
+ const handleSubmit = (event: FormEvent<HTMLFormElement>): void => {
36
+ event.preventDefault();
37
+ handleNavigate();
38
+ setResultsOpen(false);
39
+ setSearchText("");
40
+ setSelectedCategory(0);
41
+ };
42
+
43
+ const handleSearch = _.debounce((e) => {
44
+ setSearchText(e.target.value || "");
45
+ }, 500);
46
+
47
+ return {
48
+ state: {
49
+ resultsOpen,
50
+ searchText,
51
+ searchCategory,
52
+ },
53
+ setters: {
54
+ setResultsOpen,
55
+ },
56
+ handlers: {
57
+ handleNavigate,
58
+ handleCategoryChange,
59
+ handleSubmit,
60
+ handleSearch,
61
+ },
62
+ };
63
+ }
@@ -0,0 +1,36 @@
1
+ /**
2
+ * @module SearchBar
3
+ */
4
+ import SearchBar from "./compound/search-bar-root";
5
+
6
+ interface Props {
7
+ handleCloseDrawer?: () => void;
8
+ }
9
+
10
+ /**
11
+ * @category Implementation
12
+ */
13
+ export const SearchBarViewLg = ({ handleCloseDrawer }: Props) => {
14
+ return (
15
+ <SearchBar handleCloseDrawer={handleCloseDrawer}>
16
+ <SearchBar.TextField />
17
+ <SearchBar.Results>
18
+ <SearchBar.Results.ItemCardLg />
19
+ </SearchBar.Results>
20
+ </SearchBar>
21
+ );
22
+ };
23
+
24
+ /**
25
+ * @category Implementation
26
+ */
27
+ export const SearchBarViewSm = ({ handleCloseDrawer }: Props) => {
28
+ return (
29
+ <SearchBar handleCloseDrawer={handleCloseDrawer}>
30
+ <SearchBar.TextField />
31
+ <SearchBar.Results>
32
+ <SearchBar.Results.ItemCardSm />
33
+ </SearchBar.Results>
34
+ </SearchBar>
35
+ );
36
+ };
@@ -12,16 +12,18 @@ export const SearchOutlinedIcon = styled(SearchOutlined)(({ theme }) => ({
12
12
  marginRight: 6,
13
13
  }));
14
14
 
15
- export const SearchResultCard = styled(Card)({
15
+ export const SearchResultCard = styled(Card)(({ theme }) => ({
16
16
  zIndex: 99,
17
17
  top: "100%",
18
18
  width: "100%",
19
+ overflowY: "auto",
19
20
  position: "absolute",
20
21
  paddingTop: "0.5rem",
21
22
  paddingBottom: "0.5rem",
22
23
  paddingLeft: "2rem",
23
24
  paddingRight: "2rem",
24
- });
25
+ [theme.breakpoints.up("md")]: { maxHeight: "80vH" },
26
+ }));
25
27
 
26
28
  export const DropDownHandler = styled(Box)(({ theme }) => ({
27
29
  width: 160,
@@ -39,8 +41,8 @@ export const DropDownHandler = styled(Box)(({ theme }) => ({
39
41
  }));
40
42
 
41
43
  export const INPUT_SX = {
42
- height: 44,
43
44
  padding: 0,
45
+ height: 44,
44
46
  overflow: "hidden",
45
47
  backgroundColor: "grey.200",
46
48
  "& .MuiOutlinedInput-notchedOutline": { border: 0 },