@envive-ai/react-hooks 0.1.4 → 0.1.6

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 (488) hide show
  1. package/dist/amplitudeContext-CHzas7Cf.d.cts +52 -0
  2. package/dist/amplitudeContext-D-7fmVh1.cjs +356 -0
  3. package/dist/amplitudeContext-hY3caPC6.js +322 -0
  4. package/dist/amplitudeContext-tJ4y-SzX.d.ts +52 -0
  5. package/dist/api-DjeZXxl_.js +207 -0
  6. package/dist/api-_JaUnIUj.cjs +292 -0
  7. package/dist/app-CjsQ2_n-.js +132 -0
  8. package/dist/app-CnKRZ9RW.cjs +178 -0
  9. package/dist/application/models/graphql/index.cjs +3 -12
  10. package/dist/application/models/graphql/index.d.cts +1 -1
  11. package/dist/application/models/graphql/index.d.ts +1 -1
  12. package/dist/application/models/graphql/index.js +1 -10
  13. package/dist/application/models/guards/api/index.cjs +1 -2
  14. package/dist/application/models/guards/api/index.d.cts +2 -2
  15. package/dist/application/models/guards/api/index.d.ts +2 -2
  16. package/dist/application/models/guards/api/index.js +1 -2
  17. package/dist/application/models/index.cjs +48 -54
  18. package/dist/application/models/index.d.cts +7 -9
  19. package/dist/application/models/index.d.ts +7 -9
  20. package/dist/application/models/index.js +7 -11
  21. package/dist/application/models/utilityTypes/index.cjs +1 -1
  22. package/dist/application/models/utilityTypes/index.d.cts +1 -1
  23. package/dist/application/models/utilityTypes/index.d.ts +1 -1
  24. package/dist/application/models/utilityTypes/index.js +1 -1
  25. package/dist/application/models/variantInfo/index.cjs +1 -1
  26. package/dist/application/models/variantInfo/index.d.cts +1 -1
  27. package/dist/application/models/variantInfo/index.d.ts +1 -1
  28. package/dist/application/models/variantInfo/index.js +1 -1
  29. package/dist/application/utils/index.cjs +40 -37
  30. package/dist/application/utils/index.d.cts +18 -14
  31. package/dist/application/utils/index.d.ts +17 -13
  32. package/dist/application/utils/index.js +13 -10
  33. package/dist/{atomStore-JwGb7pcy.cjs → atomStore-B4jIaDPd.cjs} +1 -1
  34. package/dist/{atomStore-B1cgmbP0.js → atomStore-D8pjE1vL.js} +1 -1
  35. package/dist/atoms/app/index.cjs +14 -16
  36. package/dist/atoms/app/index.d.cts +20 -19
  37. package/dist/atoms/app/index.d.ts +20 -19
  38. package/dist/atoms/app/index.js +10 -11
  39. package/dist/atoms/atomStore/index.cjs +2 -1
  40. package/dist/atoms/atomStore/index.d.cts +1 -1
  41. package/dist/atoms/atomStore/index.js +2 -1
  42. package/dist/atoms/chat/index.cjs +44 -40
  43. package/dist/atoms/chat/index.d.cts +35 -36
  44. package/dist/atoms/chat/index.d.ts +35 -36
  45. package/dist/atoms/chat/index.js +14 -10
  46. package/dist/atoms/globalSearch/index.cjs +1 -1
  47. package/dist/atoms/globalSearch/index.d.cts +5 -5
  48. package/dist/atoms/globalSearch/index.d.ts +5 -5
  49. package/dist/atoms/globalSearch/index.js +1 -1
  50. package/dist/atoms/org/index.cjs +26 -37
  51. package/dist/atoms/org/index.d.cts +37 -47
  52. package/dist/atoms/org/index.d.ts +37 -47
  53. package/dist/atoms/org/index.js +11 -11
  54. package/dist/atoms/search/index.cjs +47 -41
  55. package/dist/atoms/search/index.d.cts +7 -9
  56. package/dist/atoms/search/index.d.ts +7 -9
  57. package/dist/atoms/search/index.js +16 -10
  58. package/dist/bandolier-DYEz4-8C.js +1229 -0
  59. package/dist/bandolier-o_-xrbOV.cjs +1229 -0
  60. package/dist/carpe-CsG5jCcl.cjs +607 -0
  61. package/dist/carpe-DONk00bZ.js +605 -0
  62. package/dist/cdnUtils-32v8bDX9.cjs +16 -0
  63. package/dist/cdnUtils-E4tLBt2g.js +11 -0
  64. package/dist/{chat-BgONoYU7.cjs → chat-BubCW1as.cjs} +1 -1
  65. package/dist/chat-CO7cRkaq.cjs +506 -0
  66. package/dist/{chat-CLJ4NWcN.js → chat-CV6MXeID.js} +1 -1
  67. package/dist/chat-hcRc4RRd.js +285 -0
  68. package/dist/{components-CV1fhAkj.js → components-B4T3Uzth.js} +1 -1
  69. package/dist/{components-BKZbet67.cjs → components-Cw9WjA6g.cjs} +1 -1
  70. package/dist/config/locators/components/chat/index.cjs +1 -1
  71. package/dist/config/locators/components/chat/index.d.cts +1 -1
  72. package/dist/config/locators/components/chat/index.d.ts +1 -1
  73. package/dist/config/locators/components/chat/index.js +1 -1
  74. package/dist/config/locators/components/chat/variants/index.d.ts +1 -1
  75. package/dist/config/locators/components/index.cjs +1 -1
  76. package/dist/config/locators/components/index.d.cts +1 -1
  77. package/dist/config/locators/components/index.d.ts +1 -1
  78. package/dist/config/locators/components/index.js +1 -1
  79. package/dist/config/locators/index.cjs +4 -4
  80. package/dist/config/locators/index.d.cts +2 -2
  81. package/dist/config/locators/index.d.ts +3 -3
  82. package/dist/config/locators/index.js +4 -4
  83. package/dist/contexts/index.cjs +45 -14
  84. package/dist/contexts/index.d.cts +10 -78
  85. package/dist/contexts/index.d.ts +10 -78
  86. package/dist/contexts/index.js +22 -11
  87. package/dist/contexts-B4ihTBsV.cjs +2980 -0
  88. package/dist/contexts-DGlr7M1o.js +2596 -0
  89. package/dist/coterie-CKB93qfz.cjs +239 -0
  90. package/dist/{coterie-yQ-_JXSw.cjs → coterie-DHcj2fRE.js} +64 -65
  91. package/dist/{custservice-types-C83itZmy.cjs → custservice-types-Dy0kc9TW.cjs} +1 -1
  92. package/dist/{custservice-types-DPQ-4TI6.js → custservice-types-mnIunabv.js} +1 -1
  93. package/dist/default-BnB4p0Se.cjs +234 -0
  94. package/dist/default-D6f5Dyt7.js +199 -0
  95. package/dist/default-ZKkE5zT4.cjs +4 -0
  96. package/dist/default-legGZJwI.js +4 -0
  97. package/dist/{divIds-DEL_-qU0.cjs → divIds-2dJlU3z8.cjs} +1 -15
  98. package/dist/{divIds-CWkntTsx.js → divIds-BUrN2vY-.js} +2 -4
  99. package/dist/dreamlandBaby-BiRYYFav.js +346 -0
  100. package/dist/dreamlandBaby-zuvmfzfD.cjs +346 -0
  101. package/dist/{embedded-C5uJqmuD.js → embedded-BJLWIriJ.js} +1 -1
  102. package/dist/{embedded--2L0F4b5.cjs → embedded-Dl79TJLC.cjs} +1 -1
  103. package/dist/{entrypoints-CNUvSgnk.js → entrypoints-Bs3pn6EV.js} +1 -1
  104. package/dist/{entrypoints-DM9Sm18O.cjs → entrypoints-Dqi5pzWH.cjs} +1 -1
  105. package/dist/enviveConfig-BccuzS2a.cjs +240 -0
  106. package/dist/enviveConfig-CzhTz8Aa.js +152 -0
  107. package/dist/events/index.cjs +1 -1
  108. package/dist/events/index.d.cts +1 -1
  109. package/dist/events/index.js +1 -1
  110. package/dist/{events-ClCDFK7t.js → events-BrLpaNxh.js} +1 -1
  111. package/dist/{events-Da7gpmGv.cjs → events-DwT6cEwI.cjs} +1 -1
  112. package/dist/fiveCbd-DwTTwC2j.cjs +613 -0
  113. package/dist/fiveCbd-Dz2NouOF.js +613 -0
  114. package/dist/forLoveAndLemons-DqSdyD6S.js +665 -0
  115. package/dist/forLoveAndLemons-Ud6mPrV3.cjs +667 -0
  116. package/dist/{globalSearch-b0wC7ZEO.js → globalSearch-B6THR7Jx.js} +1 -1
  117. package/dist/{globalSearch-BTeZxvk1.cjs → globalSearch-BFvEg53C.cjs} +1 -1
  118. package/dist/graphql-BNW60InJ.cjs +128 -0
  119. package/dist/graphql-CjB8wHzm.js +74 -0
  120. package/dist/graphqlConfig-CYt6tWII.js +30 -0
  121. package/dist/graphqlConfig-DicykC-o.cjs +61 -0
  122. package/dist/greenpan-B_EbPkSP.js +397 -0
  123. package/dist/greenpan-kPE4fJgd.cjs +397 -0
  124. package/dist/grooveLife-Ckuir319.js +342 -0
  125. package/dist/grooveLife-DKSEQp1F.cjs +342 -0
  126. package/dist/homegrownCannabis-BVPa2pqe.js +410 -0
  127. package/dist/homegrownCannabis-BwIAkxuA.cjs +410 -0
  128. package/dist/hooks/index.cjs +40 -16
  129. package/dist/hooks/index.d.cts +122 -95
  130. package/dist/hooks/index.d.ts +122 -95
  131. package/dist/hooks/index.js +22 -11
  132. package/dist/{index-D46Rd0io.d.cts → index-B0NW9KTj.d.cts} +1 -1
  133. package/dist/{index-jBATkcc_.d.cts → index-BDPWBU3h.d.cts} +1 -1
  134. package/dist/index-BMPtlgac.d.ts +191 -0
  135. package/dist/{index-BTK5uzs6.d.cts → index-Bmub8e38.d.cts} +1 -1
  136. package/dist/{index-C62lPpy4.d.cts → index-Byb45OPg.d.cts} +1 -1
  137. package/dist/{index-DPx8s5YH.d.ts → index-C6KdON7d.d.ts} +1 -1
  138. package/dist/index-C7pGDl1A.d.ts +1609 -0
  139. package/dist/{index-CYtsPztZ.d.cts → index-C9lgsCWp.d.cts} +32 -32
  140. package/dist/{index-BzgkfbNO.d.cts → index-CESxqFso.d.cts} +1 -1
  141. package/dist/{index-C_C0tLeD.d.ts → index-Cc-wBCn6.d.ts} +32 -32
  142. package/dist/{index-Cx9e-fRi.d.ts → index-CcIG01PJ.d.ts} +2 -2
  143. package/dist/{index-ClJ0nMsR.d.cts → index-CiWEYzXl.d.cts} +2 -2
  144. package/dist/{index-CKKkTsms.d.ts → index-Cqg6ltII.d.ts} +1 -1
  145. package/dist/{index-CExtydIH.d.ts → index-DOii3C6b.d.ts} +1 -1
  146. package/dist/index-DTu2X-YS.d.cts +1609 -0
  147. package/dist/index-OEifcBsm.d.cts +191 -0
  148. package/dist/{index-Dxpscrvz.d.ts → index-PGF8BvxQ.d.ts} +1 -1
  149. package/dist/{index-D2VaMPA3.d.ts → index-ylUiJvnr.d.ts} +1 -1
  150. package/dist/interceptors/index.cjs +2 -12
  151. package/dist/interceptors/index.d.cts +8 -13
  152. package/dist/interceptors/index.d.ts +8 -13
  153. package/dist/interceptors/index.js +2 -11
  154. package/dist/jackArcher-B39OEIj6.cjs +727 -0
  155. package/dist/{jackArcher-CXf_IAmC.js → jackArcher-BwkWGybC.js} +24 -25
  156. package/dist/jordanCraig-CxRH_jLi.js +1786 -0
  157. package/dist/jordanCraig-RwmWw-jM.cjs +1786 -0
  158. package/dist/kindredBravely-D78VwL20.cjs +490 -0
  159. package/dist/kindredBravely-DQDpAzdl.js +490 -0
  160. package/dist/kutFromTheKloth-TcXQkIti.js +369 -0
  161. package/dist/kutFromTheKloth-dXRrNti0.cjs +369 -0
  162. package/dist/larryAndSerges-Bh5XEXsZ.js +262 -0
  163. package/dist/larryAndSerges-COdBzOzu.cjs +262 -0
  164. package/dist/leapsAndRebounds-BbXnqkl5.cjs +360 -0
  165. package/dist/leapsAndRebounds-mjCaH1k-.js +360 -0
  166. package/dist/longevityrx-DdV3v26F.cjs +320 -0
  167. package/dist/longevityrx-DfPDfvAt.js +320 -0
  168. package/dist/lookOptic-DgXFGBPP.cjs +282 -0
  169. package/dist/{lookOptic-BGhU4910.js → lookOptic-FgVW1afF.js} +19 -20
  170. package/dist/mantraBrand-C5gVm3rk.cjs +750 -0
  171. package/dist/{mantraBrand-DrqG9uqO.js → mantraBrand-uV8HCDR8.js} +22 -23
  172. package/dist/medterra-BtDpr1Hw.cjs +583 -0
  173. package/dist/medterra-DgzE7-mj.js +583 -0
  174. package/dist/modells-CJjsxOIR.js +484 -0
  175. package/dist/modells-Ck5KbRFj.cjs +484 -0
  176. package/dist/models-BkXg5eIP.cjs +1534 -0
  177. package/dist/models-UZ6HszfZ.js +1281 -0
  178. package/dist/{nodeSelector-BiCDowlK.d.ts → nodeSelector-BxrS2S_k.d.ts} +1 -1
  179. package/dist/{nodeSelector-B3bPtEjX.d.cts → nodeSelector-Dm4S-10n.d.cts} +1 -1
  180. package/dist/org-C2RrBVQR.cjs +81 -0
  181. package/dist/org-xMytX--e.js +38 -0
  182. package/dist/orgAnalyticsConfig-BJ2A1RZ-.cjs +39 -0
  183. package/dist/orgAnalyticsConfig-ClrFy2qH.js +14 -0
  184. package/dist/pressedFloral-Bteoboms.js +661 -0
  185. package/dist/pressedFloral-CexgV-xy.cjs +661 -0
  186. package/dist/search-BMOAmrmY.js +459 -0
  187. package/dist/search-Df0Ifneg.cjs +672 -0
  188. package/dist/{search-filter-types-BNTLVXqQ.d.cts → search-filter-types-DosbseF3.d.cts} +1 -1
  189. package/dist/{search-filter-types-DkmH1TxJ.d.ts → search-filter-types-fZf91Pdw.d.ts} +1 -1
  190. package/dist/skinPerfection-BGzq9lq-.cjs +334 -0
  191. package/dist/skinPerfection-BlvcEcUE.js +334 -0
  192. package/dist/snapSupplements-CbbGzAgO.cjs +285 -0
  193. package/dist/snapSupplements-kcsPAOm9.js +285 -0
  194. package/dist/{socialProofClasses-ky69yppk.cjs → socialProofClasses-Db8gzsfi.cjs} +1 -1
  195. package/dist/{socialProofClasses-DdzG1tZy.js → socialProofClasses-kwDvwLOZ.js} +1 -1
  196. package/dist/spanx-B4WFA_rI.js +661 -0
  197. package/dist/spanx-BWoE4F8b.cjs +663 -0
  198. package/dist/spanxStaging-BOrOjhXn.js +845 -0
  199. package/dist/spanxStaging-BfdfIug4.cjs +848 -0
  200. package/dist/{suggestionBarV2-types-CwOXzIKq.js → suggestionBarV2-types-IMMOmCir.js} +1 -1
  201. package/dist/{suggestionBarV2-types-Dc4-zJlV.cjs → suggestionBarV2-types-nnGNgFvR.cjs} +1 -1
  202. package/dist/supergoop-22dd5_BS.js +323 -0
  203. package/dist/supergoop-B-a4cku2.cjs +323 -0
  204. package/dist/{test-types-CXVJxTeu.d.ts → test-types-C9b_OdfO.d.ts} +1 -1
  205. package/dist/{test-types-CuOq25VT.d.cts → test-types-CgVJtwUr.d.cts} +1 -1
  206. package/dist/types/index.cjs +2 -2
  207. package/dist/types/index.d.cts +2 -2
  208. package/dist/types/index.d.ts +2 -2
  209. package/dist/types/index.js +2 -2
  210. package/dist/types--pr1GQQx.js +154 -0
  211. package/dist/types-BVSyY3Hk.cjs +196 -0
  212. package/dist/{uniqueVintage-Cui74mlJ.js → uniqueVintage-CJXiNNe7.js} +19 -20
  213. package/dist/uniqueVintage-D0jzJWlo.cjs +1213 -0
  214. package/dist/useMessageInterceptor-B87e3yu3.cjs +33 -0
  215. package/dist/useMessageInterceptor-Bb7YRaWk.js +25 -0
  216. package/dist/userIdentityContext-BPqvVIg0.d.cts +20 -0
  217. package/dist/userIdentityContext-wbCRmlzp.d.ts +20 -0
  218. package/dist/utils-C9ZSCx12.js +888 -0
  219. package/dist/utils-D5HO61hG.cjs +1016 -0
  220. package/dist/variantInfo-DbVxA1yE.js +1 -0
  221. package/dist/variantInfo-orXoPBCU.cjs +0 -0
  222. package/dist/venaCbd-Bhhu_qUf.cjs +365 -0
  223. package/dist/venaCbd-CanovPS_.js +365 -0
  224. package/dist/westonJonBoucher-BC0x1ktI.cjs +422 -0
  225. package/dist/{westonJonBoucher-C95EuCl-.js → westonJonBoucher-BUu1_wP1.js} +19 -20
  226. package/dist/wineEnthusiast-BlCryfil.cjs +940 -0
  227. package/dist/{wineEnthusiast-DeTFY8Gm.js → wineEnthusiast-Ck1x5iJq.js} +19 -20
  228. package/dist/wolfMattress-D9Mjq-HP.js +372 -0
  229. package/dist/wolfMattress-JssghhC-.cjs +372 -0
  230. package/dist/wolfTactical-C6exYhL7.cjs +349 -0
  231. package/dist/wolfTactical-CnV3KQdI.js +349 -0
  232. package/package.json +101 -19
  233. package/src/{adapters/spiffy/commerce/api.ts → application/commerce-api.ts} +31 -23
  234. package/src/application/models/colorsConfig.ts +18 -18
  235. package/src/application/models/frontendConfig.ts +3 -3
  236. package/src/application/models/graphql/queries/getMerchantColorsQuery.ts +1 -1
  237. package/src/application/models/graphql/queries/getMerchantFrontendConfigQuery.ts +1 -1
  238. package/src/application/models/index.ts +0 -2
  239. package/src/application/models/localStorageEventListener.ts +2 -2
  240. package/src/application/models/supportedOrgs.ts +1 -1
  241. package/src/application/models/utils/snakeToCamelTransformer.ts +8 -8
  242. package/src/application/models/validators/validateGraphQLColorsConfig.ts +0 -21
  243. package/src/application/models/validators/validateGraphQLFrontendConfig.ts +2 -2
  244. package/src/application/utils/analyticsUtils.ts +53 -22
  245. package/src/application/utils/cdnUtils.ts +11 -0
  246. package/src/atoms/amplitude/amplitudeTrackEventAtom.ts +15 -0
  247. package/src/atoms/app/index.ts +7 -17
  248. package/src/atoms/app/variant.ts +13 -4
  249. package/src/atoms/chat/chatState.ts +28 -18
  250. package/src/atoms/chat/messageQueue.ts +36 -5
  251. package/src/atoms/chat/replies.ts +45 -37
  252. package/src/atoms/envive/enviveConfig.ts +10 -6
  253. package/src/atoms/org/graphqlConfig.ts +21 -4
  254. package/src/atoms/org/index.ts +7 -7
  255. package/src/atoms/org/newOrgConfigAtom.ts +8 -0
  256. package/src/atoms/org/orgPageConfig.ts +6 -5
  257. package/src/atoms/search/chatSearch.ts +11 -5
  258. package/src/atoms/search/searchAPI.ts +68 -48
  259. package/src/atoms/search/searchServiceAdapter.ts +25 -0
  260. package/src/contexts/amplitudeContext.tsx +466 -0
  261. package/src/contexts/cdnContext.tsx +48 -0
  262. package/src/contexts/chatContext.tsx +15 -12
  263. package/src/contexts/enviveConfigContext.tsx +22 -17
  264. package/src/contexts/enviveCssContext.tsx +34 -5
  265. package/src/contexts/featureFlagContext.tsx +193 -0
  266. package/src/contexts/featureFlagServiceContext.tsx +87 -0
  267. package/src/contexts/graphqlContext.tsx +165 -0
  268. package/src/contexts/index.ts +13 -3
  269. package/src/contexts/localStorageContext.tsx +159 -0
  270. package/src/contexts/newOrgConfigContext.tsx +104 -0
  271. package/src/contexts/orgConfigContext.tsx +92 -92
  272. package/src/contexts/searchContext.tsx +187 -0
  273. package/src/contexts/sessionStorageContext.tsx +80 -0
  274. package/src/contexts/shopifyUrlContext.tsx +97 -0
  275. package/src/contexts/types.ts +12 -8
  276. package/src/contexts/userIdentityContext.tsx +197 -0
  277. package/src/events/registerAnalyticsListeners.ts +32 -38
  278. package/src/hooks/index.ts +10 -6
  279. package/src/hooks/useAmplitudeOperations.ts +35 -0
  280. package/src/hooks/useAppDetails.ts +49 -0
  281. package/src/hooks/useCdnOperations.ts +16 -0
  282. package/src/hooks/useChatToggle.ts +5 -4
  283. package/src/hooks/useChatToggleAnalytics.ts +15 -0
  284. package/src/hooks/useGraphQLConfig.ts +63 -0
  285. package/src/hooks/useIdentifyUser.ts +33 -0
  286. package/src/hooks/useImageResolver.ts +18 -10
  287. package/src/hooks/useLocalStorageOperations.ts +92 -0
  288. package/src/hooks/useNewOrgConfig.ts +7 -0
  289. package/src/hooks/useSearch.tsx +21 -18
  290. package/src/hooks/useSearchOperations.ts +97 -0
  291. package/src/hooks/useSessionStorageOperations.ts +28 -0
  292. package/src/hooks/useShopifyUrlOperations.ts +45 -0
  293. package/src/hooks/useTrackComponentVisibleEvent.ts +12 -8
  294. package/src/hooks/useUpdateAnalyticsProps.ts +28 -17
  295. package/src/interceptors/index.ts +0 -1
  296. package/src/interceptors/useMessageInterceptor.ts +5 -8
  297. package/src/merchants/bandolier/bandolier.ts +10 -28
  298. package/src/merchants/carpe/carpe.ts +5 -8
  299. package/src/merchants/coterie/coterie.ts +3 -6
  300. package/src/merchants/default.ts +73 -70
  301. package/src/merchants/domInsertion.ts +30 -0
  302. package/src/merchants/dreamlandBaby/dreamlandBaby.ts +12 -6
  303. package/src/merchants/fiveCbd/fiveCbd.ts +7 -13
  304. package/src/merchants/forLoveAndLemons/forLoveAndLemons.ts +44 -14
  305. package/src/merchants/greenpan/greenpan.ts +6 -12
  306. package/src/merchants/gridInsertion.ts +19 -0
  307. package/src/merchants/grooveLife/grooveLife.ts +13 -7
  308. package/src/merchants/homegrownCannabis/homegrownCannabis.ts +12 -6
  309. package/src/merchants/jackArcher/jackArcher.ts +26 -11
  310. package/src/merchants/jordanCraig/jordanCraig.ts +5 -5
  311. package/src/merchants/kindredBravely/kindredBravely.ts +16 -7
  312. package/src/merchants/kutFromTheKloth/kutFromTheKloth.ts +9 -6
  313. package/src/merchants/larryAndSerges/larryAndSerges.ts +6 -2
  314. package/src/merchants/leapsAndRebounds/leapsAndRebounds.ts +7 -7
  315. package/src/merchants/longevityrx/longevityrx.ts +14 -8
  316. package/src/merchants/lookOptic/lookOptic.ts +6 -6
  317. package/src/merchants/mantraBrand/mantraBrand.ts +14 -8
  318. package/src/merchants/medterra/medterra.ts +14 -11
  319. package/src/merchants/modells/modells.ts +6 -9
  320. package/src/merchants/pressedFloral/pressedFloral.ts +7 -13
  321. package/src/merchants/skinPerfection/skinPerfection.ts +13 -7
  322. package/src/merchants/snapSupplements/snapSupplements.ts +13 -10
  323. package/src/merchants/spanx/spanx.ts +6 -6
  324. package/src/merchants/spanx/spanxStaging.ts +6 -12
  325. package/src/merchants/supergoop/supergoop.ts +11 -12
  326. package/src/merchants/uniqueVintage/uniqueVintage.ts +6 -6
  327. package/src/merchants/venaCbd/venaCbd.ts +6 -9
  328. package/src/merchants/westonJonBoucher/westonJonBoucher.ts +6 -6
  329. package/src/merchants/wineEnthusiast/wineEnthusiast.ts +6 -6
  330. package/src/merchants/wolfMattress/wolfMattress.ts +3 -3
  331. package/src/merchants/wolfTactical/wolfTactical.ts +5 -11
  332. package/src/types/config-versions.ts +6 -0
  333. package/src/types.ts +0 -53
  334. package/dist/adapters/amplitude/index.cjs +0 -14
  335. package/dist/adapters/amplitude/index.d.cts +0 -6
  336. package/dist/adapters/amplitude/index.d.ts +0 -6
  337. package/dist/adapters/amplitude/index.js +0 -12
  338. package/dist/api-B2euFL-5.cjs +0 -269
  339. package/dist/api-XRr_lAG6.js +0 -190
  340. package/dist/application/config/index.cjs +0 -43
  341. package/dist/application/config/index.d.cts +0 -15
  342. package/dist/application/config/index.d.ts +0 -15
  343. package/dist/application/config/index.js +0 -41
  344. package/dist/application/service/customerService/index.cjs +0 -4
  345. package/dist/application/service/customerService/index.d.cts +0 -3
  346. package/dist/application/service/customerService/index.d.ts +0 -3
  347. package/dist/application/service/customerService/index.js +0 -4
  348. package/dist/application/service/index.cjs +0 -41
  349. package/dist/application/service/index.d.cts +0 -399
  350. package/dist/application/service/index.d.ts +0 -399
  351. package/dist/application/service/index.js +0 -12
  352. package/dist/bandolier-B76-OE75.cjs +0 -1230
  353. package/dist/bandolier-DRn_x1g1.js +0 -1230
  354. package/dist/carpe-kHi4RLB5.cjs +0 -608
  355. package/dist/carpe-qrSU99gq.js +0 -606
  356. package/dist/contexts-CQDwe3rK.cjs +0 -14333
  357. package/dist/contexts-e2sM-B9g.js +0 -12919
  358. package/dist/coterie-mMirPcHP.js +0 -240
  359. package/dist/customerService-BG1uNZZ1.cjs +0 -36
  360. package/dist/customerService-BHQRnLhC.js +0 -23
  361. package/dist/default-8Jfv8ehQ.cjs +0 -199
  362. package/dist/default-C8PQf-38.js +0 -176
  363. package/dist/default-LukSiCz1.js +0 -4
  364. package/dist/default-rJSJ887P.cjs +0 -4
  365. package/dist/dreamlandBaby-DHltv12Z.cjs +0 -347
  366. package/dist/dreamlandBaby-cG0HM9bt.js +0 -347
  367. package/dist/featureFlagService-5wdmW02z.d.ts +0 -18
  368. package/dist/featureFlagService-DaelrXEk.d.cts +0 -18
  369. package/dist/fiveCbd-Cvnwh03g.cjs +0 -614
  370. package/dist/fiveCbd-DhYMlsf9.js +0 -614
  371. package/dist/forLoveAndLemons-C8DuUexW.js +0 -666
  372. package/dist/forLoveAndLemons-DR6a1zjJ.cjs +0 -668
  373. package/dist/greenpan-B4Pu65kV.js +0 -398
  374. package/dist/greenpan-BL5p6j7f.cjs +0 -398
  375. package/dist/grooveLife-DjKWHoN3.cjs +0 -343
  376. package/dist/grooveLife-JK0TyaPz.js +0 -343
  377. package/dist/homegrownCannabis-DxqSDkmS.js +0 -411
  378. package/dist/homegrownCannabis-ZnfCqW-m.cjs +0 -411
  379. package/dist/index-BfuO9b0Q.d.ts +0 -749
  380. package/dist/index-CNsGWfS6.d.cts +0 -749
  381. package/dist/index-DFL1dIT_.d.ts +0 -7
  382. package/dist/index-MFbPQ8Ji.d.ts +0 -95
  383. package/dist/index-VSFakgAI.d.cts +0 -95
  384. package/dist/index-zZjcds15.d.cts +0 -7
  385. package/dist/jackArcher-mGkojXek.cjs +0 -728
  386. package/dist/jordanCraig-BvCvPRoR.js +0 -1787
  387. package/dist/jordanCraig-Dv8pVCiS.cjs +0 -1787
  388. package/dist/kindredBravely-UQP7wiNu.cjs +0 -491
  389. package/dist/kindredBravely-X8F_LNph.js +0 -491
  390. package/dist/kutFromTheKloth-BhYKk3CN.cjs +0 -370
  391. package/dist/kutFromTheKloth-D1xsTSJr.js +0 -370
  392. package/dist/larryAndSerges-1411NuZa.cjs +0 -262
  393. package/dist/larryAndSerges-DVIRLItu.js +0 -262
  394. package/dist/leapsAndRebounds-BJ8mwr33.js +0 -361
  395. package/dist/leapsAndRebounds-UcP9EJVO.cjs +0 -361
  396. package/dist/logger-Dln20ans.cjs +0 -26
  397. package/dist/logger-pdEEY8T2.js +0 -20
  398. package/dist/longevityrx-BFSv9GF5.cjs +0 -321
  399. package/dist/longevityrx-Cp6wleWr.js +0 -321
  400. package/dist/lookOptic-KieSqskd.cjs +0 -283
  401. package/dist/mantraBrand-CHQw-0nw.cjs +0 -751
  402. package/dist/medterra-CLG6Co1C.cjs +0 -584
  403. package/dist/medterra-D8ZX9NZC.js +0 -584
  404. package/dist/modells-BzyPwN2m.cjs +0 -485
  405. package/dist/modells-CAfqOCW4.js +0 -485
  406. package/dist/orgConfigResults--dAwtw3W.d.ts +0 -881
  407. package/dist/orgConfigResults-BL0XBA6x.d.cts +0 -881
  408. package/dist/pressedFloral-DULBuQwR.cjs +0 -662
  409. package/dist/pressedFloral-Dp-7Fk3S.js +0 -662
  410. package/dist/skinPerfection-BxuYCeJX.js +0 -335
  411. package/dist/skinPerfection-Cd3XZ6By.cjs +0 -335
  412. package/dist/snapSupplements-Bf6htPM0.js +0 -286
  413. package/dist/snapSupplements-ZFnXyMuZ.cjs +0 -286
  414. package/dist/spanx-CwDPQaGj.js +0 -662
  415. package/dist/spanx-Cyd4qDlK.cjs +0 -664
  416. package/dist/spanxStaging-D43nyAGy.js +0 -846
  417. package/dist/spanxStaging-ijbYnHzr.cjs +0 -849
  418. package/dist/supergoop-BnbFG7hm.cjs +0 -338
  419. package/dist/supergoop-CY043wIg.js +0 -336
  420. package/dist/types-BF_CJeck.js +0 -177
  421. package/dist/types-CD4LFta-.d.cts +0 -33
  422. package/dist/types-CNH4sfF-.cjs +0 -231
  423. package/dist/types-DBdI0j89.d.ts +0 -33
  424. package/dist/uniqueVintage-R2Jcu1y1.cjs +0 -1214
  425. package/dist/variant-CKVRF2-W.d.ts +0 -13
  426. package/dist/variant-raYuOP4L.d.cts +0 -13
  427. package/dist/venaCbd-o5_vOp4e.js +0 -366
  428. package/dist/venaCbd-r-IxEVc1.cjs +0 -366
  429. package/dist/westonJonBoucher-DjGEW3ZB.cjs +0 -423
  430. package/dist/wineEnthusiast-DvfcV5B3.cjs +0 -941
  431. package/dist/wolfMattress-6xPfOJt3.js +0 -373
  432. package/dist/wolfMattress-BjGnGKjP.cjs +0 -373
  433. package/dist/wolfTactical-Bi3WZu0m.cjs +0 -350
  434. package/dist/wolfTactical-C_F9-oPX.js +0 -350
  435. package/src/adapters/amplitude/amplitudeAdapter.ts +0 -477
  436. package/src/adapters/amplitude/index.ts +0 -2
  437. package/src/adapters/amplitude/stubAmplitudeAdapter.ts +0 -34
  438. package/src/adapters/spiffy/commerce/graphql.ts +0 -219
  439. package/src/application/config/generalStaticConfig.ts +0 -40
  440. package/src/application/config/index.ts +0 -1
  441. package/src/application/models/domMutationContinuation.ts +0 -7
  442. package/src/application/models/domObservationStrategy.ts +0 -9
  443. package/src/application/service/cachingService.ts +0 -84
  444. package/src/application/service/cdnService.ts +0 -20
  445. package/src/application/service/customerService/index.ts +0 -8
  446. package/src/application/service/customerService/providers/UnsupportedCustomerService.ts +0 -15
  447. package/src/application/service/domMutationObserver.ts +0 -320
  448. package/src/application/service/domMutations/GridInsertionService.ts +0 -123
  449. package/src/application/service/domMutations/dataLayer/dataLayerEventsListener.ts +0 -99
  450. package/src/application/service/domMutations/domInsertionService.ts +0 -90
  451. package/src/application/service/domMutations/domMutationListener.ts +0 -15
  452. package/src/application/service/domMutations/domMutationListenerState.ts +0 -52
  453. package/src/application/service/domMutations/floatingChat/embeddedChatsPlacementsListener.ts +0 -41
  454. package/src/application/service/domMutations/gladly/gladlyListener.ts +0 -61
  455. package/src/application/service/domMutations/spiffy/orgs/common/kustomerVisibilityListener.ts +0 -41
  456. package/src/application/service/domMutations/spiffy/orgs/common/orgsCommonDataLayerListener.ts +0 -119
  457. package/src/application/service/featureFlagService.ts +0 -130
  458. package/src/application/service/index.ts +0 -31
  459. package/src/application/service/kustomerIntegrationService.ts +0 -111
  460. package/src/application/service/localStorageService.ts +0 -77
  461. package/src/application/service/pageVariantService.ts +0 -866
  462. package/src/application/service/searchService.ts +0 -147
  463. package/src/application/service/sessionStorageService.ts +0 -27
  464. package/src/application/service/shopifyUrlService.ts +0 -63
  465. package/src/application/service/userIdentityService.ts +0 -114
  466. package/src/application/service/windowChatToggleService.ts +0 -80
  467. package/src/application/service/windowDataLayerService.ts +0 -181
  468. package/src/application/service/windowFrontendConfigService.ts +0 -129
  469. package/src/atoms/org/merchantCss.ts +0 -158
  470. package/src/atoms/org/org.ts +0 -291
  471. package/src/atoms/org/orgUIConfig.ts +0 -142
  472. package/src/enabled-features.ts +0 -83
  473. package/src/hooks/useDynamicVariants.ts +0 -210
  474. package/src/hooks/useFileUpload.ts +0 -63
  475. package/src/hooks/useHideElements.ts +0 -82
  476. package/src/hooks/useHorizontalScrollAnimation.ts +0 -115
  477. package/src/hooks/useReducedMotionWithOverride.ts +0 -15
  478. package/src/hooks/useSnapControl.ts +0 -155
  479. package/src/interceptors/useFormEscalation.ts +0 -57
  480. /package/dist/{variantInfo-CzhR5W6h.js → atomStore-CZnUUsrr.js} +0 -0
  481. /package/dist/{variantInfo-CNRTY0gH.cjs → atomStore-KSoFS3Jj.cjs} +0 -0
  482. /package/dist/{utilityTypes-C4h2wgAK.cjs → locators-0YYZu9n4.cjs} +0 -0
  483. /package/dist/{utilityTypes-BVikejDo.js → locators-fBXS_pxP.js} +0 -0
  484. /package/dist/{locators-Dc5ZT0aF.js → utilityTypes-8sETsYPk.js} +0 -0
  485. /package/dist/{locators-lQMJj830.cjs → utilityTypes-COShxVir.cjs} +0 -0
  486. /package/src/{application/service/customerService/types.ts → types/customerService.ts} +0 -0
  487. /package/src/{adapters/spiffy/commerce → types}/exceptions/sessionExceptions.ts +0 -0
  488. /package/src/{adapters/spiffy/commerce → types}/exceptions/unsupportedProductExceptions.ts +0 -0
@@ -0,0 +1,92 @@
1
+ import { useState, useEffect, useCallback } from "react";
2
+ import {
3
+ useLocalStorage,
4
+ LocalStorageKeys,
5
+ } from "../contexts/localStorageContext";
6
+ import { LocalStorageEventListener } from "../application/models/localStorageEventListener";
7
+
8
+ // Reactive localStorage value hook
9
+ export const useLocalStorageValue = (key: string) => {
10
+ const { getItem, setItem, attachListener, detachListener } =
11
+ useLocalStorage();
12
+ const [value, setValue] = useState<string | null>(() => getItem(key));
13
+
14
+ useEffect(() => {
15
+ const listener: LocalStorageEventListener = {
16
+ storageKey: key,
17
+ listener: (event: StorageEvent) => {
18
+ setValue(event.newValue);
19
+ },
20
+ };
21
+
22
+ attachListener(listener);
23
+ return () => detachListener(listener);
24
+ }, [key, attachListener, detachListener]);
25
+
26
+ const updateValue = useCallback(
27
+ (newValue: string) => {
28
+ setItem(key, newValue);
29
+ setValue(newValue);
30
+ },
31
+ [key, setItem]
32
+ );
33
+
34
+ return { value, setValue: updateValue };
35
+ };
36
+
37
+ // Feature flag hook for Spiffy
38
+ export const useSpiffyFeatureFlag = () => {
39
+ const { setSpiffyOnFeatureFlag } = useLocalStorage();
40
+ const { value } = useLocalStorageValue(LocalStorageKeys.SpiffyOnOverride);
41
+
42
+ const setFlag = useCallback(
43
+ (flag: boolean | null) => {
44
+ setSpiffyOnFeatureFlag(flag);
45
+ },
46
+ [setSpiffyOnFeatureFlag]
47
+ );
48
+
49
+ return {
50
+ value: value === "true" ? true : value === "false" ? false : null,
51
+ setFlag,
52
+ };
53
+ };
54
+
55
+ // Feature flag hook for Envive
56
+ export const useEnviveFeatureFlag = () => {
57
+ const { setItem, getItem } = useLocalStorage();
58
+ const { value } = useLocalStorageValue(LocalStorageKeys.EnviveOnOverride);
59
+
60
+ const setFlag = useCallback(
61
+ (flag: boolean | null) => {
62
+ if (flag === true) {
63
+ setItem(LocalStorageKeys.EnviveOnOverride, "true");
64
+ } else if (flag === false) {
65
+ setItem(LocalStorageKeys.EnviveOnOverride, "false");
66
+ }
67
+ },
68
+ [setItem]
69
+ );
70
+
71
+ return {
72
+ value: value === "true" ? true : value === "false" ? false : null,
73
+ setFlag,
74
+ };
75
+ };
76
+
77
+ // Storage listener hook
78
+ export const useLocalStorageListener = (
79
+ key: string,
80
+ callback: (event: StorageEvent) => void
81
+ ) => {
82
+ const { attachListener, detachListener } = useLocalStorage();
83
+
84
+ useEffect(() => {
85
+ const listener: LocalStorageEventListener = {
86
+ storageKey: key,
87
+ listener: callback,
88
+ };
89
+ attachListener(listener);
90
+ return () => detachListener(listener);
91
+ }, [key, callback, attachListener, detachListener]);
92
+ };
@@ -0,0 +1,7 @@
1
+ import { useNewOrgConfigContext } from "src/contexts/newOrgConfigContext";
2
+
3
+ export const useNewOrgConfig = () => {
4
+ const { combinedConfig, loading, error } = useNewOrgConfigContext();
5
+
6
+ return { ...combinedConfig, loading, error };
7
+ };
@@ -1,7 +1,7 @@
1
1
  import { useAtom, useAtomValue, useSetAtom } from "jotai";
2
2
  import { useCallback, useEffect, useMemo, useRef, useState } from "react";
3
3
  import { useDebounce } from "src/hooks/useDebounce";
4
- import { useTrackComponentVisibleEvent } from "src/hooks";
4
+ import { useNewOrgConfig, useTrackComponentVisibleEvent } from "src/hooks";
5
5
  import {
6
6
  addSearchFilterAtom,
7
7
  clearSearchFiltersAtom,
@@ -23,9 +23,9 @@ import {
23
23
  import { formatFilterDisplayName } from "src/atoms/search/utils";
24
24
  import { ProductSorting } from "src/atoms/search/types";
25
25
  import {
26
- AmplitudeAdapter,
27
26
  SpiffyMetricsEventName,
28
- } from "src/adapters/amplitude";
27
+ useAmplitude,
28
+ } from "src/contexts/amplitudeContext";
29
29
  import { SpiffyWidgets } from "src/application/models/spiffyWidgets";
30
30
  import { ProductCardConfig } from "src/contexts/types";
31
31
  import Logger from "src/application/logging/logger";
@@ -36,7 +36,7 @@ import {
36
36
  SelectFilterItem,
37
37
  } from "src/types/search-filter-types";
38
38
  import { getSearchResultsState, SearchResultsState } from "./utils";
39
- import { orgUIConfigAtom } from "src/atoms/org";
39
+ import { orgShortNameAtom } from "src/atoms/envive/enviveConfig";
40
40
 
41
41
  export interface SearchResultsHocProps {
42
42
  // Data
@@ -86,7 +86,8 @@ export interface SearchResultsHocProps {
86
86
 
87
87
  export const useSearch = (): SearchResultsHocProps => {
88
88
  // Atoms
89
- const orgUIConfig = useAtomValue(orgUIConfigAtom);
89
+ const config = useNewOrgConfig();
90
+ const orgShortName = useAtomValue(orgShortNameAtom);
90
91
  const { data: searchData, loading: isLoadingSearch } =
91
92
  useAtomValue(searchAtom);
92
93
  const productList = useAtomValue(filteredSearchProductsAtom);
@@ -120,15 +121,15 @@ export const useSearch = (): SearchResultsHocProps => {
120
121
  const searchResultsState = getSearchResultsState(isLoadingSearch, searchData);
121
122
 
122
123
  const dynamicFilters = searchData?.filters || [];
123
- const { productCardConfig, shortName: merchantShortName } = orgUIConfig || {};
124
124
 
125
125
  // Provide fallback values when orgUIConfig is not yet available
126
- const safeProductCardConfig = productCardConfig || {
126
+ const safeProductCardConfig = config?.frontendConfig?.uiConfigs
127
+ ?.productCardConfig || {
127
128
  variant: "minimal",
128
129
  hoverVariant: "none",
129
130
  layoutVariant: "square",
130
131
  };
131
- const safeMerchantShortName = merchantShortName || "";
132
+ const safeMerchantShortName = orgShortName || "";
132
133
 
133
134
  const availableDynamicFilters = useMemo(() => {
134
135
  return dynamicFilters
@@ -186,6 +187,8 @@ export const useSearch = (): SearchResultsHocProps => {
186
187
  }, [filters]);
187
188
 
188
189
  // Callbacks
190
+ const { trackEvent } = useAmplitude();
191
+
189
192
  const handleToggleDynamicFilter = useCallback(
190
193
  ({
191
194
  filter,
@@ -194,7 +197,7 @@ export const useSearch = (): SearchResultsHocProps => {
194
197
  filter: string;
195
198
  dynamicFilterDisplayName: string;
196
199
  }) => {
197
- AmplitudeAdapter.trackEvent({
200
+ trackEvent({
198
201
  eventName: SpiffyMetricsEventName.SearchFilterClicked,
199
202
  eventProps: {
200
203
  filterType: "Dynamic",
@@ -206,7 +209,7 @@ export const useSearch = (): SearchResultsHocProps => {
206
209
  createFilterOption("dynamic", filter, dynamicFilterDisplayName)
207
210
  );
208
211
  },
209
- [addFilter, searchText]
212
+ [addFilter, searchText, trackEvent]
210
213
  );
211
214
 
212
215
  const handleRemoveFilter = useCallback(
@@ -218,7 +221,7 @@ export const useSearch = (): SearchResultsHocProps => {
218
221
 
219
222
  const handleSubmitSearch = useCallback(async () => {
220
223
  if (searchText.trim()) {
221
- AmplitudeAdapter.trackEvent({
224
+ trackEvent({
222
225
  eventName: SpiffyMetricsEventName.SearchQuerySubmitted,
223
226
  eventProps: {
224
227
  searchOrigin: SpiffyWidgets.SearchResults,
@@ -231,7 +234,7 @@ export const useSearch = (): SearchResultsHocProps => {
231
234
  window.history.pushState({}, "", url);
232
235
  performSearch({ query: searchText.trim() });
233
236
  }
234
- }, [performSearch, searchText]);
237
+ }, [performSearch, searchText, trackEvent]);
235
238
 
236
239
  const handleAutocompleteSelect = useCallback(
237
240
  (suggestion: string) => {
@@ -280,7 +283,7 @@ export const useSearch = (): SearchResultsHocProps => {
280
283
 
281
284
  const handleSearchInputChange = (newValue: string) => {
282
285
  if (newValue.length === 1) {
283
- AmplitudeAdapter.trackEvent({
286
+ trackEvent({
284
287
  eventName: SpiffyMetricsEventName.SearchInputStarted,
285
288
  eventProps: {
286
289
  searchOrigin: SpiffyWidgets.SearchResults,
@@ -305,7 +308,7 @@ export const useSearch = (): SearchResultsHocProps => {
305
308
  }) => {
306
309
  if (filterId === "sort") {
307
310
  const newSort = filterItemId as ProductSorting;
308
- AmplitudeAdapter.trackEvent({
311
+ trackEvent({
309
312
  eventName: SpiffyMetricsEventName.SearchSortClicked,
310
313
  eventProps: {
311
314
  sortType: newSort,
@@ -316,7 +319,7 @@ export const useSearch = (): SearchResultsHocProps => {
316
319
  } else if (!isSelected) {
317
320
  removeFilter(`${filterId}:${filterItemId}`);
318
321
  } else {
319
- AmplitudeAdapter.trackEvent({
322
+ trackEvent({
320
323
  eventName: SpiffyMetricsEventName.SearchFilterClicked,
321
324
  eventProps: {
322
325
  filterType: "Static",
@@ -328,7 +331,7 @@ export const useSearch = (): SearchResultsHocProps => {
328
331
  addFilter(createFilterOption(filterId, filterItemId, displayName));
329
332
  }
330
333
  },
331
- [addFilter, removeFilter, setProductSorting, searchText]
334
+ [addFilter, removeFilter, setProductSorting, searchText, trackEvent]
332
335
  );
333
336
 
334
337
  const handleClearAllFilters = useCallback(() => {
@@ -346,7 +349,7 @@ export const useSearch = (): SearchResultsHocProps => {
346
349
 
347
350
  useEffect(() => {
348
351
  if (productList.length > 0) {
349
- AmplitudeAdapter.trackEvent({
352
+ trackEvent({
350
353
  eventName: SpiffyMetricsEventName.SearchResultsViewed,
351
354
  eventProps: {
352
355
  queryText: searchText,
@@ -354,7 +357,7 @@ export const useSearch = (): SearchResultsHocProps => {
354
357
  },
355
358
  });
356
359
  }
357
- }, [productList.length, searchText]);
360
+ }, [productList.length, searchText, trackEvent]);
358
361
 
359
362
  useEffect(() => {
360
363
  if (query && query !== searchText) {
@@ -0,0 +1,97 @@
1
+ import { useState, useCallback, useEffect } from "react";
2
+ import { useSearchService } from "src/contexts/searchContext";
3
+ import { SearchResult, SearchParams } from "src/application/models/api/search";
4
+
5
+ export const useProductSearch = () => {
6
+ const { searchProducts, isReady } = useSearchService();
7
+ const [data, setData] = useState<SearchResult | undefined>();
8
+ const [loading, setLoading] = useState(false);
9
+ const [error, setError] = useState<Error | null>(null);
10
+
11
+ const search = useCallback(
12
+ async (params: SearchParams) => {
13
+ if (!isReady) {
14
+ setError(new Error("Search service not ready - missing dependencies"));
15
+ return;
16
+ }
17
+
18
+ setLoading(true);
19
+ setError(null);
20
+
21
+ try {
22
+ const result = await searchProducts(params);
23
+ setData(result);
24
+ } catch (err) {
25
+ setError(
26
+ err instanceof Error ? err : new Error("Unknown search error")
27
+ );
28
+ } finally {
29
+ setLoading(false);
30
+ }
31
+ },
32
+ [searchProducts, isReady]
33
+ );
34
+
35
+ const reset = useCallback(() => {
36
+ setData(undefined);
37
+ setError(null);
38
+ setLoading(false);
39
+ }, []);
40
+
41
+ return {
42
+ data,
43
+ loading,
44
+ error,
45
+ search,
46
+ reset,
47
+ isReady,
48
+ };
49
+ };
50
+
51
+ export const useSearchWithQuery = (params: SearchParams | null) => {
52
+ const { searchProducts, isReady } = useSearchService();
53
+ const [data, setData] = useState<SearchResult | undefined>();
54
+ const [loading, setLoading] = useState(false);
55
+ const [error, setError] = useState<Error | null>(null);
56
+
57
+ const executeSearch = useCallback(
58
+ async (searchParams: SearchParams) => {
59
+ if (!isReady) return;
60
+
61
+ setLoading(true);
62
+ setError(null);
63
+
64
+ try {
65
+ const result = await searchProducts(searchParams);
66
+ setData(result);
67
+ } catch (err) {
68
+ setError(
69
+ err instanceof Error ? err : new Error("Unknown search error")
70
+ );
71
+ } finally {
72
+ setLoading(false);
73
+ }
74
+ },
75
+ [searchProducts, isReady]
76
+ );
77
+
78
+ useEffect(() => {
79
+ if (params && isReady) {
80
+ executeSearch(params);
81
+ }
82
+ }, [params, isReady, executeSearch]);
83
+
84
+ const refetch = useCallback(() => {
85
+ if (params) {
86
+ executeSearch(params);
87
+ }
88
+ }, [params, executeSearch]);
89
+
90
+ return {
91
+ data,
92
+ loading,
93
+ error,
94
+ refetch,
95
+ isReady,
96
+ };
97
+ };
@@ -0,0 +1,28 @@
1
+ import { useState, useEffect, useCallback } from "react";
2
+ import { useSessionStorage } from "../contexts/sessionStorageContext";
3
+
4
+ export const useSessionStorageValue = (key: string) => {
5
+ const { getItem, setItem } = useSessionStorage();
6
+ const [value, setValue] = useState<string | null>(() => getItem(key));
7
+
8
+ useEffect(() => {
9
+ const handleStorageChange = (event: StorageEvent) => {
10
+ if (event.key === key) {
11
+ setValue(event.newValue);
12
+ }
13
+ };
14
+
15
+ window.addEventListener("storage", handleStorageChange);
16
+ return () => window.removeEventListener("storage", handleStorageChange);
17
+ }, [key, getItem]);
18
+
19
+ const updateValue = useCallback(
20
+ (newValue: string) => {
21
+ setItem(key, newValue);
22
+ setValue(newValue);
23
+ },
24
+ [key, setItem]
25
+ );
26
+
27
+ return { value, setValue: updateValue };
28
+ };
@@ -0,0 +1,45 @@
1
+ import { useCallback } from "react";
2
+ import { useShopifyUrl } from "src/contexts/shopifyUrlContext";
3
+ import { IdExtractor } from "src/contexts/types";
4
+
5
+ export const useShopifyUrlOperations = () => {
6
+ const {
7
+ getTrimmedPathName,
8
+ getPlpOrPdpId,
9
+ isOnPdpPage,
10
+ isOnPlpPage,
11
+ isReady,
12
+ } = useShopifyUrl();
13
+
14
+ return {
15
+ getTrimmedPathName,
16
+ getPlpOrPdpId,
17
+ isOnPdpPage,
18
+ isOnPlpPage,
19
+ isReady,
20
+ };
21
+ };
22
+
23
+ export const useCurrentPageType = () => {
24
+ const { isOnPdpPage, isOnPlpPage, isReady } = useShopifyUrl();
25
+
26
+ const getPageType = useCallback(() => {
27
+ if (!isReady) return "unknown";
28
+ if (isOnPdpPage()) return "pdp";
29
+ if (isOnPlpPage()) return "plp";
30
+ return "other";
31
+ }, [isReady, isOnPdpPage, isOnPlpPage]);
32
+
33
+ return { getPageType, isReady };
34
+ };
35
+
36
+ export const useProductId = (extractor: IdExtractor) => {
37
+ const { getPlpOrPdpId, isReady } = useShopifyUrl();
38
+
39
+ const productId = useCallback(() => {
40
+ if (!isReady) return null;
41
+ return getPlpOrPdpId(extractor);
42
+ }, [isReady, getPlpOrPdpId, extractor]);
43
+
44
+ return { productId, isReady };
45
+ };
@@ -1,7 +1,10 @@
1
- import { RefObject, useEffect, useRef } from 'react';
2
- import { SpiffyWidgets } from 'src/application/models/spiffyWidgets';
3
- import { useIntersection } from 'src/hooks/useIntersection';
4
- import { AmplitudeAdapter, SpiffyMetricsEventName } from 'src/adapters/amplitude';
1
+ import { RefObject, useEffect, useRef } from "react";
2
+ import { SpiffyWidgets } from "src/application/models/spiffyWidgets";
3
+ import { useIntersection } from "src/hooks/useIntersection";
4
+ import {
5
+ SpiffyMetricsEventName,
6
+ useAmplitude,
7
+ } from "src/contexts/amplitudeContext";
5
8
 
6
9
  /**
7
10
  * Tracks a component and logs an event to Amplitude when the component is visible.
@@ -15,10 +18,11 @@ export const useTrackComponentVisibleEvent = (
15
18
  component: SpiffyWidgets,
16
19
  element: RefObject<HTMLElement>,
17
20
  eventProps?: Record<string, unknown>,
18
- eventName: SpiffyMetricsEventName = SpiffyMetricsEventName.ChatComponentVisible,
21
+ eventName: SpiffyMetricsEventName = SpiffyMetricsEventName.ChatComponentVisible
19
22
  ) => {
20
- const isVisible = useIntersection(element, '0px');
23
+ const isVisible = useIntersection(element, "0px");
21
24
  const hasTrackedEvent = useRef(false);
25
+ const { trackEvent } = useAmplitude();
22
26
 
23
27
  const componentProps = (() => {
24
28
  if (eventName === SpiffyMetricsEventName.ChatComponentVisible) {
@@ -42,11 +46,11 @@ export const useTrackComponentVisibleEvent = (
42
46
 
43
47
  useEffect(() => {
44
48
  if (isVisible && !hasTrackedEvent.current) {
45
- AmplitudeAdapter.trackEvent({
49
+ trackEvent({
46
50
  eventName: eventName,
47
51
  eventProps: componentProps,
48
52
  });
49
53
  hasTrackedEvent.current = true;
50
54
  }
51
- }, [isVisible, component, eventProps, eventName, componentProps]);
55
+ }, [isVisible, component, eventProps, eventName, componentProps, trackEvent]);
52
56
  };
@@ -1,7 +1,13 @@
1
- import { useAtomValue } from 'jotai';
2
- import { useEffect, useRef } from 'react';
3
- import { AmplitudeAdapter, SpiffyMetricsEventName } from 'src/adapters/amplitude';
4
- import { hasParsedVariantInfoAtom, variantInfoAtom } from 'src/atoms/app/variant';
1
+ import { useAtomValue } from "jotai";
2
+ import { useEffect, useRef } from "react";
3
+ import {
4
+ SpiffyMetricsEventName,
5
+ useAmplitude,
6
+ } from "src/contexts/amplitudeContext";
7
+ import {
8
+ hasParsedVariantInfoAtom,
9
+ variantInfoAtom,
10
+ } from "src/atoms/app/variant";
5
11
 
6
12
  /**
7
13
  * Updates the default analytics properties whenever the variant info changes. This hook also
@@ -9,17 +15,16 @@ import { hasParsedVariantInfoAtom, variantInfoAtom } from 'src/atoms/app/variant
9
15
  */
10
16
  export const useUpdateAnalyticsProps = () => {
11
17
  const variantInfo = useAtomValue(variantInfoAtom);
12
- const amplitudeAdapterRef = useRef<AmplitudeAdapter | null>(null);
13
18
  const hasInitialized = useRef(false);
14
19
  const hasParsedVariantInfo = useAtomValue(hasParsedVariantInfoAtom);
20
+ const { trackEvent, setSupplementalDefaultProps } = useAmplitude();
15
21
 
16
22
  useEffect(() => {
17
- if (!amplitudeAdapterRef.current) {
18
- amplitudeAdapterRef.current = AmplitudeAdapter.getSingletonInstanceOf();
19
- }
20
-
21
23
  const variantInfoWithPrefix = Object.fromEntries(
22
- Object.entries(variantInfo).map(([key, value]) => [`variantInfo.${key}`, value]),
24
+ Object.entries(variantInfo).map(([key, value]) => [
25
+ `variantInfo.${key}`,
26
+ value,
27
+ ])
23
28
  );
24
29
 
25
30
  const defaultEventProperties: Record<string, unknown> = {
@@ -28,29 +33,35 @@ export const useUpdateAnalyticsProps = () => {
28
33
  };
29
34
 
30
35
  // TODO: should be removed over time, after migration
31
- if (variantInfo.variant === 'pdp') {
36
+ if (variantInfo.variant === "pdp") {
32
37
  defaultEventProperties.product_id = variantInfo.productId;
33
38
  }
34
39
 
35
40
  // TODO: should be removed over time, after migration
36
- if (variantInfo.variant === 'plp') {
41
+ if (variantInfo.variant === "plp") {
37
42
  defaultEventProperties.plp_id = variantInfo.plpId;
38
43
  }
39
44
 
40
45
  // TODO: should be removed over time, after migration
41
- if (variantInfo.variant === 'page_visit') {
42
- defaultEventProperties.page_visit_category = variantInfo.pageVisitCategory;
46
+ if (variantInfo.variant === "page_visit") {
47
+ defaultEventProperties.page_visit_category =
48
+ variantInfo.pageVisitCategory;
43
49
  defaultEventProperties.page_visit_url = variantInfo.url;
44
50
  }
45
51
 
46
- amplitudeAdapterRef.current?.setSupplementalDefaultProps(defaultEventProperties);
52
+ setSupplementalDefaultProps(defaultEventProperties);
47
53
 
48
54
  // put any events that should be sent once per page visit here
49
55
  if (!hasInitialized.current && hasParsedVariantInfo) {
50
- AmplitudeAdapter.trackEvent({
56
+ trackEvent({
51
57
  eventName: SpiffyMetricsEventName.BundleLoaded,
52
58
  });
53
59
  hasInitialized.current = true;
54
60
  }
55
- }, [variantInfo, hasParsedVariantInfo]);
61
+ }, [
62
+ variantInfo,
63
+ hasParsedVariantInfo,
64
+ trackEvent,
65
+ setSupplementalDefaultProps,
66
+ ]);
56
67
  };
@@ -1,3 +1,2 @@
1
1
  export * from "./types";
2
- export * from "./useFormEscalation";
3
2
  export * from "./useMessageInterceptor";
@@ -1,15 +1,12 @@
1
- import { FormType, ResponseCategory } from '@spiffy-ai/commerce-api-client';
2
- import { useMemo } from 'react';
3
- import { Response } from 'src/application/models';
4
- import { useFormEscalation } from './useFormEscalation';
5
- import { MessageInterceptor } from './types';
1
+ import { FormType, ResponseCategory } from "@spiffy-ai/commerce-api-client";
2
+ import { useMemo } from "react";
3
+ import { Response } from "src/application/models";
4
+ import { MessageInterceptor } from "./types";
6
5
 
7
6
  export const useMessageInterceptor = () => {
8
- const formEscalation = useFormEscalation();
9
-
10
7
  const interceptorMap = useMemo(() => {
11
8
  const interceptors = new Map<FormType, MessageInterceptor>();
12
- interceptors.set(FormType.Escalation, formEscalation);
9
+ // Form escalation interceptor removed as per user instruction
13
10
  return interceptors;
14
11
  }, []);
15
12
 
@@ -13,13 +13,13 @@ import {
13
13
  OrgShortName,
14
14
  } from "src/application/models";
15
15
  import { ChatElementDisplayLocation } from "src/application/models/chatElementDisplayLocation";
16
- import { CdnService } from "src/application/service/cdnService";
16
+ import { getCdnAssetURL } from "src/application/utils/cdnUtils";
17
17
  import {
18
18
  CustomerServiceIntegrationMode,
19
19
  CustomerServiceType,
20
- } from "src/application/service/customerService/types";
21
- import { DOMInsertionType } from "src/application/service/domMutations/domInsertionService";
22
- import { GridInsertionType } from "src/application/service/domMutations/GridInsertionService";
20
+ } from "src/types/customerService";
21
+ import { DOMInsertionType } from "src/merchants/domInsertion";
22
+ import { GridInsertionType } from "src/merchants/gridInsertion";
23
23
  import {
24
24
  BOTTOM_REVIEWS_BAR_ID,
25
25
  CHAT_PREVIEW_CONTAINER_ID,
@@ -92,10 +92,7 @@ const bandolierOrgUIConfig = (): OrgUIConfig => {
92
92
  },
93
93
  chatHeader: {
94
94
  ...defaultBandolierOrgConfig.chatHeader,
95
- imageSrc: CdnService.getAssetURL(
96
- "bandolier-logo.svg",
97
- OrgShortName.Bandolier
98
- ),
95
+ imageSrc: getCdnAssetURL("bandolier-logo.svg", OrgShortName.Bandolier),
99
96
  },
100
97
  chatPreviewConfig: {
101
98
  ...defaultBandolierOrgConfig.chatPreviewConfig!,
@@ -955,10 +952,7 @@ const bandolierPageConfig = (): OrgPageConfig => ({
955
952
  imagePromptCardPLPPhoneCases: {
956
953
  widgetConfigId: "imagePromptCard",
957
954
  type: WidgetType.ImagePromptCard,
958
- url: CdnService.getAssetURL(
959
- "image-prompt-card-2.png",
960
- OrgShortName.Bandolier
961
- ),
955
+ url: getCdnAssetURL("image-prompt-card-2.png", OrgShortName.Bandolier),
962
956
  lightText: true,
963
957
  title: "What can we help you find today?",
964
958
  subtitle: [
@@ -987,10 +981,7 @@ const bandolierPageConfig = (): OrgPageConfig => ({
987
981
  imagePromptCardPLPAccessories: {
988
982
  widgetConfigId: "imagePromptCard",
989
983
  type: WidgetType.ImagePromptCard,
990
- url: CdnService.getAssetURL(
991
- "image-prompt-card-2.png",
992
- OrgShortName.Bandolier
993
- ),
984
+ url: getCdnAssetURL("image-prompt-card-2.png", OrgShortName.Bandolier),
994
985
  lightText: true,
995
986
  title: "What can we help you find today?",
996
987
  subtitle: [
@@ -1014,10 +1005,7 @@ const bandolierPageConfig = (): OrgPageConfig => ({
1014
1005
  imagePromptCardPLPBags: {
1015
1006
  widgetConfigId: "imagePromptCard",
1016
1007
  type: WidgetType.ImagePromptCard,
1017
- url: CdnService.getAssetURL(
1018
- "image-prompt-card-2.png",
1019
- OrgShortName.Bandolier
1020
- ),
1008
+ url: getCdnAssetURL("image-prompt-card-2.png", OrgShortName.Bandolier),
1021
1009
  lightText: true,
1022
1010
  title: "What can we help you find today?",
1023
1011
  subtitle: [
@@ -1043,10 +1031,7 @@ const bandolierPageConfig = (): OrgPageConfig => ({
1043
1031
  imagePromptCardPLPShopAll: {
1044
1032
  widgetConfigId: "imagePromptCard",
1045
1033
  type: WidgetType.ImagePromptCard,
1046
- url: CdnService.getAssetURL(
1047
- "image-prompt-card-2.png",
1048
- OrgShortName.Bandolier
1049
- ),
1034
+ url: getCdnAssetURL("image-prompt-card-2.png", OrgShortName.Bandolier),
1050
1035
  lightText: true,
1051
1036
  title: "What can we help you find today?",
1052
1037
  subtitle: [
@@ -1070,10 +1055,7 @@ const bandolierPageConfig = (): OrgPageConfig => ({
1070
1055
  imagePromptCardPLP: {
1071
1056
  widgetConfigId: "imagePromptCard",
1072
1057
  type: WidgetType.ImagePromptCard,
1073
- url: CdnService.getAssetURL(
1074
- "image-prompt-card-2.png",
1075
- OrgShortName.Bandolier
1076
- ),
1058
+ url: getCdnAssetURL("image-prompt-card-2.png", OrgShortName.Bandolier),
1077
1059
  lightText: true,
1078
1060
  title: "What can we help you find today?",
1079
1061
  subtitle: [