@envive-ai/react-hooks 0.1.5 → 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 (491) 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 +19 -15
  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 +24 -2
  41. package/dist/atoms/atomStore/index.d.ts +24 -2
  42. package/dist/atoms/atomStore/index.js +2 -1
  43. package/dist/atoms/chat/index.cjs +44 -40
  44. package/dist/atoms/chat/index.d.cts +35 -36
  45. package/dist/atoms/chat/index.d.ts +35 -36
  46. package/dist/atoms/chat/index.js +14 -10
  47. package/dist/atoms/globalSearch/index.cjs +1 -1
  48. package/dist/atoms/globalSearch/index.d.cts +5 -5
  49. package/dist/atoms/globalSearch/index.d.ts +6 -6
  50. package/dist/atoms/globalSearch/index.js +1 -1
  51. package/dist/atoms/org/index.cjs +26 -38
  52. package/dist/atoms/org/index.d.cts +35 -48
  53. package/dist/atoms/org/index.d.ts +35 -48
  54. package/dist/atoms/org/index.js +11 -11
  55. package/dist/atoms/search/index.cjs +47 -41
  56. package/dist/atoms/search/index.d.cts +7 -9
  57. package/dist/atoms/search/index.d.ts +7 -9
  58. package/dist/atoms/search/index.js +16 -10
  59. package/dist/bandolier-DYEz4-8C.js +1229 -0
  60. package/dist/bandolier-o_-xrbOV.cjs +1229 -0
  61. package/dist/carpe-CsG5jCcl.cjs +607 -0
  62. package/dist/carpe-DONk00bZ.js +605 -0
  63. package/dist/cdnUtils-32v8bDX9.cjs +16 -0
  64. package/dist/cdnUtils-E4tLBt2g.js +11 -0
  65. package/dist/{chat-_NzpO_Hn.cjs → chat-BubCW1as.cjs} +1 -1
  66. package/dist/chat-CO7cRkaq.cjs +506 -0
  67. package/dist/{chat-CHmD79E1.js → chat-CV6MXeID.js} +1 -1
  68. package/dist/chat-hcRc4RRd.js +285 -0
  69. package/dist/{components-Dl-TMD9k.js → components-B4T3Uzth.js} +1 -1
  70. package/dist/{components-D0XDRcaN.cjs → components-Cw9WjA6g.cjs} +1 -1
  71. package/dist/config/locators/components/chat/index.cjs +1 -1
  72. package/dist/config/locators/components/chat/index.d.cts +1 -1
  73. package/dist/config/locators/components/chat/index.d.ts +1 -1
  74. package/dist/config/locators/components/chat/index.js +1 -1
  75. package/dist/config/locators/components/chat/variants/index.d.cts +1 -1
  76. package/dist/config/locators/components/chat/variants/index.d.ts +1 -1
  77. package/dist/config/locators/components/index.cjs +1 -1
  78. package/dist/config/locators/components/index.d.cts +1 -1
  79. package/dist/config/locators/components/index.d.ts +1 -1
  80. package/dist/config/locators/components/index.js +1 -1
  81. package/dist/config/locators/components/search/index.d.ts +1 -1
  82. package/dist/config/locators/index.cjs +4 -4
  83. package/dist/config/locators/index.d.cts +2 -2
  84. package/dist/config/locators/index.d.ts +2 -2
  85. package/dist/config/locators/index.js +4 -4
  86. package/dist/contexts/index.cjs +45 -14
  87. package/dist/contexts/index.d.cts +10 -10
  88. package/dist/contexts/index.d.ts +10 -10
  89. package/dist/contexts/index.js +22 -11
  90. package/dist/contexts-B4ihTBsV.cjs +2980 -0
  91. package/dist/contexts-DGlr7M1o.js +2596 -0
  92. package/dist/coterie-CKB93qfz.cjs +239 -0
  93. package/dist/{coterie--MGvWeVh.cjs → coterie-DHcj2fRE.js} +64 -65
  94. package/dist/{custservice-types-C8-9vKWb.cjs → custservice-types-Dy0kc9TW.cjs} +1 -1
  95. package/dist/{custservice-types-CamCiXjq.js → custservice-types-mnIunabv.js} +1 -1
  96. package/dist/default-BnB4p0Se.cjs +234 -0
  97. package/dist/default-D6f5Dyt7.js +199 -0
  98. package/dist/default-ZKkE5zT4.cjs +4 -0
  99. package/dist/default-legGZJwI.js +4 -0
  100. package/dist/{divIds-CjceLRD9.cjs → divIds-2dJlU3z8.cjs} +1 -15
  101. package/dist/{divIds-0Vj9g-fM.js → divIds-BUrN2vY-.js} +2 -4
  102. package/dist/dreamlandBaby-BiRYYFav.js +346 -0
  103. package/dist/dreamlandBaby-zuvmfzfD.cjs +346 -0
  104. package/dist/{embedded-_cLpd6FK.js → embedded-BJLWIriJ.js} +1 -1
  105. package/dist/{embedded-B5Wi9g0T.cjs → embedded-Dl79TJLC.cjs} +1 -1
  106. package/dist/{entrypoints-CNUvSgnk.js → entrypoints-Bs3pn6EV.js} +1 -1
  107. package/dist/{entrypoints-DM9Sm18O.cjs → entrypoints-Dqi5pzWH.cjs} +1 -1
  108. package/dist/enviveConfig-BccuzS2a.cjs +240 -0
  109. package/dist/enviveConfig-CzhTz8Aa.js +152 -0
  110. package/dist/events/index.cjs +1 -1
  111. package/dist/events/index.js +1 -1
  112. package/dist/{events-ClCDFK7t.js → events-BrLpaNxh.js} +1 -1
  113. package/dist/{events-Da7gpmGv.cjs → events-DwT6cEwI.cjs} +1 -1
  114. package/dist/fiveCbd-DwTTwC2j.cjs +613 -0
  115. package/dist/fiveCbd-Dz2NouOF.js +613 -0
  116. package/dist/forLoveAndLemons-DqSdyD6S.js +665 -0
  117. package/dist/forLoveAndLemons-Ud6mPrV3.cjs +667 -0
  118. package/dist/{globalSearch-b0wC7ZEO.js → globalSearch-B6THR7Jx.js} +1 -1
  119. package/dist/{globalSearch-BTeZxvk1.cjs → globalSearch-BFvEg53C.cjs} +1 -1
  120. package/dist/graphql-BNW60InJ.cjs +128 -0
  121. package/dist/graphql-CjB8wHzm.js +74 -0
  122. package/dist/graphqlConfig-CYt6tWII.js +30 -0
  123. package/dist/graphqlConfig-DicykC-o.cjs +61 -0
  124. package/dist/greenpan-B_EbPkSP.js +397 -0
  125. package/dist/greenpan-kPE4fJgd.cjs +397 -0
  126. package/dist/grooveLife-Ckuir319.js +342 -0
  127. package/dist/grooveLife-DKSEQp1F.cjs +342 -0
  128. package/dist/homegrownCannabis-BVPa2pqe.js +410 -0
  129. package/dist/homegrownCannabis-BwIAkxuA.cjs +410 -0
  130. package/dist/hooks/index.cjs +39 -13
  131. package/dist/hooks/index.d.cts +127 -45
  132. package/dist/hooks/index.d.ts +124 -42
  133. package/dist/hooks/index.js +22 -11
  134. package/dist/{index-D46Rd0io.d.cts → index-B0NW9KTj.d.cts} +1 -1
  135. package/dist/{index-BdNKc2ix.d.cts → index-BDPWBU3h.d.cts} +1 -1
  136. package/dist/index-BMPtlgac.d.ts +191 -0
  137. package/dist/{index-BTK5uzs6.d.cts → index-Bmub8e38.d.cts} +1 -1
  138. package/dist/{index-BrXuc_Ck.d.cts → index-Byb45OPg.d.cts} +1 -1
  139. package/dist/{index-CSIOQD-A.d.ts → index-C6KdON7d.d.ts} +1 -1
  140. package/dist/index-C7pGDl1A.d.ts +1609 -0
  141. package/dist/{index-K2kNsOTw.d.cts → index-C9lgsCWp.d.cts} +32 -32
  142. package/dist/{index-BzgkfbNO.d.cts → index-CESxqFso.d.cts} +1 -1
  143. package/dist/{index-CbJZOEU4.d.ts → index-Cc-wBCn6.d.ts} +32 -32
  144. package/dist/{index-Cx9e-fRi.d.ts → index-CcIG01PJ.d.ts} +2 -2
  145. package/dist/{index-ClJ0nMsR.d.cts → index-CiWEYzXl.d.cts} +2 -2
  146. package/dist/{index-CKKkTsms.d.ts → index-Cqg6ltII.d.ts} +1 -1
  147. package/dist/{index-Cr2y08f1.d.ts → index-DOii3C6b.d.ts} +1 -1
  148. package/dist/index-DTu2X-YS.d.cts +1609 -0
  149. package/dist/index-OEifcBsm.d.cts +191 -0
  150. package/dist/{index-Dxpscrvz.d.ts → index-PGF8BvxQ.d.ts} +1 -1
  151. package/dist/{index-D2VaMPA3.d.ts → index-ylUiJvnr.d.ts} +1 -1
  152. package/dist/interceptors/index.cjs +2 -12
  153. package/dist/interceptors/index.d.cts +8 -13
  154. package/dist/interceptors/index.d.ts +8 -13
  155. package/dist/interceptors/index.js +2 -11
  156. package/dist/jackArcher-B39OEIj6.cjs +727 -0
  157. package/dist/{jackArcher-sO9EbgrZ.js → jackArcher-BwkWGybC.js} +24 -25
  158. package/dist/jordanCraig-CxRH_jLi.js +1786 -0
  159. package/dist/jordanCraig-RwmWw-jM.cjs +1786 -0
  160. package/dist/kindredBravely-D78VwL20.cjs +490 -0
  161. package/dist/kindredBravely-DQDpAzdl.js +490 -0
  162. package/dist/kutFromTheKloth-TcXQkIti.js +369 -0
  163. package/dist/kutFromTheKloth-dXRrNti0.cjs +369 -0
  164. package/dist/larryAndSerges-Bh5XEXsZ.js +262 -0
  165. package/dist/larryAndSerges-COdBzOzu.cjs +262 -0
  166. package/dist/leapsAndRebounds-BbXnqkl5.cjs +360 -0
  167. package/dist/leapsAndRebounds-mjCaH1k-.js +360 -0
  168. package/dist/longevityrx-DdV3v26F.cjs +320 -0
  169. package/dist/longevityrx-DfPDfvAt.js +320 -0
  170. package/dist/lookOptic-DgXFGBPP.cjs +282 -0
  171. package/dist/{lookOptic-Jwf7EAU8.js → lookOptic-FgVW1afF.js} +19 -20
  172. package/dist/mantraBrand-C5gVm3rk.cjs +750 -0
  173. package/dist/{mantraBrand-DoaVj837.js → mantraBrand-uV8HCDR8.js} +22 -23
  174. package/dist/medterra-BtDpr1Hw.cjs +583 -0
  175. package/dist/medterra-DgzE7-mj.js +583 -0
  176. package/dist/modells-CJjsxOIR.js +484 -0
  177. package/dist/modells-Ck5KbRFj.cjs +484 -0
  178. package/dist/models-BkXg5eIP.cjs +1534 -0
  179. package/dist/models-UZ6HszfZ.js +1281 -0
  180. package/dist/{nodeSelector-DybpVr-i.d.ts → nodeSelector-BxrS2S_k.d.ts} +1 -1
  181. package/dist/{nodeSelector-vKB44CDB.d.cts → nodeSelector-Dm4S-10n.d.cts} +1 -1
  182. package/dist/org-C2RrBVQR.cjs +81 -0
  183. package/dist/org-xMytX--e.js +38 -0
  184. package/dist/orgAnalyticsConfig-BJ2A1RZ-.cjs +39 -0
  185. package/dist/orgAnalyticsConfig-ClrFy2qH.js +14 -0
  186. package/dist/pressedFloral-Bteoboms.js +661 -0
  187. package/dist/pressedFloral-CexgV-xy.cjs +661 -0
  188. package/dist/search-BMOAmrmY.js +459 -0
  189. package/dist/search-Df0Ifneg.cjs +672 -0
  190. package/dist/{search-filter-types-9rTb3jMj.d.cts → search-filter-types-DosbseF3.d.cts} +1 -1
  191. package/dist/{search-filter-types-C-zZSpGo.d.ts → search-filter-types-fZf91Pdw.d.ts} +1 -1
  192. package/dist/skinPerfection-BGzq9lq-.cjs +334 -0
  193. package/dist/skinPerfection-BlvcEcUE.js +334 -0
  194. package/dist/snapSupplements-CbbGzAgO.cjs +285 -0
  195. package/dist/snapSupplements-kcsPAOm9.js +285 -0
  196. package/dist/{socialProofClasses-ky69yppk.cjs → socialProofClasses-Db8gzsfi.cjs} +1 -1
  197. package/dist/{socialProofClasses-DdzG1tZy.js → socialProofClasses-kwDvwLOZ.js} +1 -1
  198. package/dist/spanx-B4WFA_rI.js +661 -0
  199. package/dist/spanx-BWoE4F8b.cjs +663 -0
  200. package/dist/spanxStaging-BOrOjhXn.js +845 -0
  201. package/dist/spanxStaging-BfdfIug4.cjs +848 -0
  202. package/dist/{suggestionBarV2-types-Penx3Y67.js → suggestionBarV2-types-IMMOmCir.js} +1 -1
  203. package/dist/{suggestionBarV2-types-B3lwrENK.cjs → suggestionBarV2-types-nnGNgFvR.cjs} +1 -1
  204. package/dist/supergoop-22dd5_BS.js +323 -0
  205. package/dist/supergoop-B-a4cku2.cjs +323 -0
  206. package/dist/{test-types-CXVJxTeu.d.ts → test-types-C9b_OdfO.d.ts} +1 -1
  207. package/dist/{test-types-CuOq25VT.d.cts → test-types-CgVJtwUr.d.cts} +1 -1
  208. package/dist/types/index.cjs +2 -2
  209. package/dist/types/index.d.cts +2 -2
  210. package/dist/types/index.d.ts +2 -2
  211. package/dist/types/index.js +2 -2
  212. package/dist/types--pr1GQQx.js +154 -0
  213. package/dist/types-BVSyY3Hk.cjs +196 -0
  214. package/dist/{uniqueVintage-BWkDgt1z.js → uniqueVintage-CJXiNNe7.js} +19 -20
  215. package/dist/uniqueVintage-D0jzJWlo.cjs +1213 -0
  216. package/dist/useMessageInterceptor-B87e3yu3.cjs +33 -0
  217. package/dist/useMessageInterceptor-Bb7YRaWk.js +25 -0
  218. package/dist/userIdentityContext-BPqvVIg0.d.cts +20 -0
  219. package/dist/userIdentityContext-wbCRmlzp.d.ts +20 -0
  220. package/dist/utils-C9ZSCx12.js +888 -0
  221. package/dist/utils-D5HO61hG.cjs +1016 -0
  222. package/dist/variantInfo-DbVxA1yE.js +1 -0
  223. package/dist/variantInfo-orXoPBCU.cjs +0 -0
  224. package/dist/venaCbd-Bhhu_qUf.cjs +365 -0
  225. package/dist/venaCbd-CanovPS_.js +365 -0
  226. package/dist/westonJonBoucher-BC0x1ktI.cjs +422 -0
  227. package/dist/{westonJonBoucher-BAGXegsX.js → westonJonBoucher-BUu1_wP1.js} +19 -20
  228. package/dist/wineEnthusiast-BlCryfil.cjs +940 -0
  229. package/dist/{wineEnthusiast-EJbhMeKQ.js → wineEnthusiast-Ck1x5iJq.js} +19 -20
  230. package/dist/wolfMattress-D9Mjq-HP.js +372 -0
  231. package/dist/wolfMattress-JssghhC-.cjs +372 -0
  232. package/dist/wolfTactical-C6exYhL7.cjs +349 -0
  233. package/dist/wolfTactical-CnV3KQdI.js +349 -0
  234. package/package.json +100 -19
  235. package/src/{adapters/spiffy/commerce/api.ts → application/commerce-api.ts} +31 -23
  236. package/src/application/models/colorsConfig.ts +18 -18
  237. package/src/application/models/frontendConfig.ts +3 -3
  238. package/src/application/models/graphql/queries/getMerchantColorsQuery.ts +1 -1
  239. package/src/application/models/graphql/queries/getMerchantFrontendConfigQuery.ts +1 -1
  240. package/src/application/models/index.ts +0 -2
  241. package/src/application/models/localStorageEventListener.ts +2 -2
  242. package/src/application/models/utils/snakeToCamelTransformer.ts +8 -8
  243. package/src/application/models/validators/validateGraphQLColorsConfig.ts +0 -21
  244. package/src/application/models/validators/validateGraphQLFrontendConfig.ts +2 -2
  245. package/src/application/utils/analyticsUtils.ts +53 -22
  246. package/src/application/utils/cdnUtils.ts +11 -0
  247. package/src/atoms/amplitude/amplitudeTrackEventAtom.ts +15 -0
  248. package/src/atoms/app/index.ts +7 -17
  249. package/src/atoms/app/variant.ts +13 -4
  250. package/src/atoms/chat/chatState.ts +28 -18
  251. package/src/atoms/chat/messageQueue.ts +36 -5
  252. package/src/atoms/chat/replies.ts +45 -37
  253. package/src/atoms/envive/enviveConfig.ts +10 -6
  254. package/src/atoms/org/graphqlConfig.ts +7 -1
  255. package/src/atoms/org/index.ts +3 -3
  256. package/src/atoms/org/newOrgConfigAtom.ts +8 -0
  257. package/src/atoms/org/orgPageConfig.ts +6 -5
  258. package/src/atoms/search/chatSearch.ts +11 -5
  259. package/src/atoms/search/searchAPI.ts +22 -12
  260. package/src/atoms/search/searchServiceAdapter.ts +25 -0
  261. package/src/contexts/amplitudeContext.tsx +466 -0
  262. package/src/contexts/cdnContext.tsx +48 -0
  263. package/src/contexts/chatContext.tsx +15 -12
  264. package/src/contexts/enviveConfigContext.tsx +22 -17
  265. package/src/contexts/enviveCssContext.tsx +34 -5
  266. package/src/contexts/featureFlagContext.tsx +193 -0
  267. package/src/contexts/featureFlagServiceContext.tsx +87 -0
  268. package/src/contexts/graphqlContext.tsx +165 -0
  269. package/src/contexts/index.ts +13 -3
  270. package/src/contexts/localStorageContext.tsx +159 -0
  271. package/src/contexts/newOrgConfigContext.tsx +104 -0
  272. package/src/contexts/orgConfigContext.tsx +92 -92
  273. package/src/contexts/searchContext.tsx +187 -0
  274. package/src/contexts/sessionStorageContext.tsx +80 -0
  275. package/src/contexts/shopifyUrlContext.tsx +97 -0
  276. package/src/contexts/types.ts +12 -8
  277. package/src/contexts/userIdentityContext.tsx +197 -0
  278. package/src/events/registerAnalyticsListeners.ts +32 -38
  279. package/src/hooks/index.ts +10 -4
  280. package/src/hooks/useAmplitudeOperations.ts +35 -0
  281. package/src/hooks/useAppDetails.ts +49 -0
  282. package/src/hooks/useCdnOperations.ts +16 -0
  283. package/src/hooks/useChatToggle.ts +5 -4
  284. package/src/hooks/useChatToggleAnalytics.ts +15 -0
  285. package/src/hooks/useGraphQLConfig.ts +63 -0
  286. package/src/hooks/useIdentifyUser.ts +33 -0
  287. package/src/hooks/useImageResolver.ts +7 -7
  288. package/src/hooks/useLocalStorageOperations.ts +92 -0
  289. package/src/hooks/useNewOrgConfig.ts +3 -76
  290. package/src/hooks/useSearch.tsx +21 -18
  291. package/src/hooks/useSearchOperations.ts +97 -0
  292. package/src/hooks/useSessionStorageOperations.ts +28 -0
  293. package/src/hooks/useShopifyUrlOperations.ts +45 -0
  294. package/src/hooks/useTrackComponentVisibleEvent.ts +12 -8
  295. package/src/hooks/useUpdateAnalyticsProps.ts +28 -17
  296. package/src/interceptors/index.ts +0 -1
  297. package/src/interceptors/useMessageInterceptor.ts +5 -8
  298. package/src/merchants/bandolier/bandolier.ts +10 -28
  299. package/src/merchants/carpe/carpe.ts +5 -8
  300. package/src/merchants/coterie/coterie.ts +3 -6
  301. package/src/merchants/default.ts +73 -70
  302. package/src/merchants/domInsertion.ts +30 -0
  303. package/src/merchants/dreamlandBaby/dreamlandBaby.ts +12 -6
  304. package/src/merchants/fiveCbd/fiveCbd.ts +7 -13
  305. package/src/merchants/forLoveAndLemons/forLoveAndLemons.ts +44 -14
  306. package/src/merchants/greenpan/greenpan.ts +6 -12
  307. package/src/merchants/gridInsertion.ts +19 -0
  308. package/src/merchants/grooveLife/grooveLife.ts +13 -7
  309. package/src/merchants/homegrownCannabis/homegrownCannabis.ts +12 -6
  310. package/src/merchants/jackArcher/jackArcher.ts +26 -11
  311. package/src/merchants/jordanCraig/jordanCraig.ts +5 -5
  312. package/src/merchants/kindredBravely/kindredBravely.ts +16 -7
  313. package/src/merchants/kutFromTheKloth/kutFromTheKloth.ts +9 -6
  314. package/src/merchants/larryAndSerges/larryAndSerges.ts +6 -2
  315. package/src/merchants/leapsAndRebounds/leapsAndRebounds.ts +7 -7
  316. package/src/merchants/longevityrx/longevityrx.ts +14 -8
  317. package/src/merchants/lookOptic/lookOptic.ts +6 -6
  318. package/src/merchants/mantraBrand/mantraBrand.ts +14 -8
  319. package/src/merchants/medterra/medterra.ts +14 -11
  320. package/src/merchants/modells/modells.ts +6 -9
  321. package/src/merchants/pressedFloral/pressedFloral.ts +7 -13
  322. package/src/merchants/skinPerfection/skinPerfection.ts +13 -7
  323. package/src/merchants/snapSupplements/snapSupplements.ts +13 -10
  324. package/src/merchants/spanx/spanx.ts +6 -6
  325. package/src/merchants/spanx/spanxStaging.ts +6 -12
  326. package/src/merchants/supergoop/supergoop.ts +11 -12
  327. package/src/merchants/uniqueVintage/uniqueVintage.ts +6 -6
  328. package/src/merchants/venaCbd/venaCbd.ts +6 -9
  329. package/src/merchants/westonJonBoucher/westonJonBoucher.ts +6 -6
  330. package/src/merchants/wineEnthusiast/wineEnthusiast.ts +6 -6
  331. package/src/merchants/wolfMattress/wolfMattress.ts +3 -3
  332. package/src/merchants/wolfTactical/wolfTactical.ts +5 -11
  333. package/src/types/config-versions.ts +6 -0
  334. package/src/types.ts +0 -53
  335. package/dist/adapters/amplitude/index.cjs +0 -14
  336. package/dist/adapters/amplitude/index.d.cts +0 -6
  337. package/dist/adapters/amplitude/index.d.ts +0 -6
  338. package/dist/adapters/amplitude/index.js +0 -12
  339. package/dist/api-B2euFL-5.cjs +0 -269
  340. package/dist/api-XRr_lAG6.js +0 -190
  341. package/dist/application/config/index.cjs +0 -43
  342. package/dist/application/config/index.d.cts +0 -15
  343. package/dist/application/config/index.d.ts +0 -15
  344. package/dist/application/config/index.js +0 -41
  345. package/dist/application/service/customerService/index.cjs +0 -4
  346. package/dist/application/service/customerService/index.d.cts +0 -3
  347. package/dist/application/service/customerService/index.d.ts +0 -3
  348. package/dist/application/service/customerService/index.js +0 -4
  349. package/dist/application/service/index.cjs +0 -42
  350. package/dist/application/service/index.d.cts +0 -413
  351. package/dist/application/service/index.d.ts +0 -413
  352. package/dist/application/service/index.js +0 -12
  353. package/dist/atomStore-ONYy0XuA.d.cts +0 -24
  354. package/dist/atomStore-kOKiEcNl.d.ts +0 -24
  355. package/dist/bandolier-Da4wt6sm.cjs +0 -1230
  356. package/dist/bandolier-DzEmYWcz.js +0 -1230
  357. package/dist/carpe-AXipz0Xl.cjs +0 -608
  358. package/dist/carpe-CaUKwcEa.js +0 -606
  359. package/dist/contexts-CtRlNXaS.js +0 -7674
  360. package/dist/contexts-CtgmnYNn.cjs +0 -9088
  361. package/dist/coterie-oKHAT0lx.js +0 -240
  362. package/dist/customerService-BG1uNZZ1.cjs +0 -36
  363. package/dist/customerService-BHQRnLhC.js +0 -23
  364. package/dist/default-B4fINY5_.cjs +0 -4
  365. package/dist/default-BrTQxA0c.js +0 -4
  366. package/dist/default-C3LrcbZB.cjs +0 -199
  367. package/dist/default-CXkYrLEr.js +0 -176
  368. package/dist/dreamlandBaby-BEqt0eKF.js +0 -347
  369. package/dist/dreamlandBaby-DBDjEJCc.cjs +0 -347
  370. package/dist/featureFlagService-5wdmW02z.d.ts +0 -18
  371. package/dist/featureFlagService-DaelrXEk.d.cts +0 -18
  372. package/dist/fiveCbd-CdqNt16h.cjs +0 -614
  373. package/dist/fiveCbd-D6B-sgnX.js +0 -614
  374. package/dist/forLoveAndLemons-C7GsJG7f.cjs +0 -668
  375. package/dist/forLoveAndLemons-gNDlMtPR.js +0 -666
  376. package/dist/greenpan-B5AaW4M_.js +0 -398
  377. package/dist/greenpan-DrORpYms.cjs +0 -398
  378. package/dist/grooveLife-BJqsfH2H.cjs +0 -343
  379. package/dist/grooveLife-xIUmDM8s.js +0 -343
  380. package/dist/homegrownCannabis-8TZ21u6L.cjs +0 -411
  381. package/dist/homegrownCannabis-BtMuEvbZ.js +0 -411
  382. package/dist/index-CKUpnyJQ.d.ts +0 -72
  383. package/dist/index-DFL1dIT_.d.ts +0 -7
  384. package/dist/index-DXpgMVpp.d.ts +0 -749
  385. package/dist/index-MFbPQ8Ji.d.ts +0 -95
  386. package/dist/index-VHFMGkO-.d.cts +0 -72
  387. package/dist/index-VSFakgAI.d.cts +0 -95
  388. package/dist/index-aNW5V9fh.d.cts +0 -749
  389. package/dist/index-zZjcds15.d.cts +0 -7
  390. package/dist/jackArcher-WtkbLBZj.cjs +0 -728
  391. package/dist/jordanCraig-471FcgqF.cjs +0 -1787
  392. package/dist/jordanCraig-DNOncplU.js +0 -1787
  393. package/dist/kindredBravely-BlLyHGMX.cjs +0 -491
  394. package/dist/kindredBravely-cqZ4OvXp.js +0 -491
  395. package/dist/kutFromTheKloth-3mOIryvt.cjs +0 -370
  396. package/dist/kutFromTheKloth-DtVNCMKa.js +0 -370
  397. package/dist/larryAndSerges-88Bvq-Us.cjs +0 -262
  398. package/dist/larryAndSerges-cvak6May.js +0 -262
  399. package/dist/leapsAndRebounds-Dmf8eUPq.js +0 -361
  400. package/dist/leapsAndRebounds-iWKc923H.cjs +0 -361
  401. package/dist/logger-Dln20ans.cjs +0 -26
  402. package/dist/logger-pdEEY8T2.js +0 -20
  403. package/dist/longevityrx-BTMI9vn-.js +0 -321
  404. package/dist/longevityrx-CobPyigd.cjs +0 -321
  405. package/dist/lookOptic-C4H_c0JZ.cjs +0 -283
  406. package/dist/mantraBrand-CySGqbn6.cjs +0 -751
  407. package/dist/medterra-BnZ5p27n.cjs +0 -584
  408. package/dist/medterra-DaICcPPp.js +0 -584
  409. package/dist/modells-CZ1L6dD_.js +0 -485
  410. package/dist/modells-DF0SndHr.cjs +0 -485
  411. package/dist/orgConfigResults--dAwtw3W.d.ts +0 -881
  412. package/dist/orgConfigResults-BL0XBA6x.d.cts +0 -881
  413. package/dist/pressedFloral-B3t2cYzs.cjs +0 -662
  414. package/dist/pressedFloral-Dsws2Kfb.js +0 -662
  415. package/dist/skinPerfection-CILQM2bR.cjs +0 -335
  416. package/dist/skinPerfection-DmQCntRf.js +0 -335
  417. package/dist/snapSupplements--X_v0KRM.js +0 -286
  418. package/dist/snapSupplements-Djuzl0Ed.cjs +0 -286
  419. package/dist/spanx-Bo81yXSF.cjs +0 -664
  420. package/dist/spanx-DauxB8KE.js +0 -662
  421. package/dist/spanxStaging-BucYQvR1.cjs +0 -849
  422. package/dist/spanxStaging-CfXUukdP.js +0 -846
  423. package/dist/supergoop-8qa_NV3F.cjs +0 -338
  424. package/dist/supergoop-DOaui-A6.js +0 -336
  425. package/dist/types-CD4LFta-.d.cts +0 -33
  426. package/dist/types-CGC6Oozp.cjs +0 -231
  427. package/dist/types-CnTCkyvK.js +0 -177
  428. package/dist/types-DBdI0j89.d.ts +0 -33
  429. package/dist/uniqueVintage-DAne8XcL.cjs +0 -1214
  430. package/dist/variant-CC1nrywd.d.ts +0 -13
  431. package/dist/variant-CQTuQQSq.d.cts +0 -13
  432. package/dist/venaCbd-B1HO_Pkr.cjs +0 -366
  433. package/dist/venaCbd-CnByO-5R.js +0 -366
  434. package/dist/westonJonBoucher-BRfHWMbs.cjs +0 -423
  435. package/dist/wineEnthusiast-DW8JVwV8.cjs +0 -941
  436. package/dist/wolfMattress-B6INZNRJ.cjs +0 -373
  437. package/dist/wolfMattress-D9P7ErH_.js +0 -373
  438. package/dist/wolfTactical-C5Pupi3J.js +0 -350
  439. package/dist/wolfTactical-TMthZM93.cjs +0 -350
  440. package/src/adapters/amplitude/amplitudeAdapter.ts +0 -477
  441. package/src/adapters/amplitude/index.ts +0 -2
  442. package/src/adapters/amplitude/stubAmplitudeAdapter.ts +0 -34
  443. package/src/adapters/spiffy/commerce/graphql.ts +0 -219
  444. package/src/application/config/generalStaticConfig.ts +0 -40
  445. package/src/application/config/index.ts +0 -1
  446. package/src/application/models/domMutationContinuation.ts +0 -7
  447. package/src/application/models/domObservationStrategy.ts +0 -9
  448. package/src/application/service/cachingService.ts +0 -84
  449. package/src/application/service/cdnService.ts +0 -20
  450. package/src/application/service/customerService/index.ts +0 -8
  451. package/src/application/service/customerService/providers/UnsupportedCustomerService.ts +0 -15
  452. package/src/application/service/domMutationObserver.ts +0 -320
  453. package/src/application/service/domMutations/GridInsertionService.ts +0 -123
  454. package/src/application/service/domMutations/dataLayer/dataLayerEventsListener.ts +0 -99
  455. package/src/application/service/domMutations/domInsertionService.ts +0 -90
  456. package/src/application/service/domMutations/domMutationListener.ts +0 -15
  457. package/src/application/service/domMutations/domMutationListenerState.ts +0 -52
  458. package/src/application/service/domMutations/floatingChat/embeddedChatsPlacementsListener.ts +0 -41
  459. package/src/application/service/domMutations/gladly/gladlyListener.ts +0 -61
  460. package/src/application/service/domMutations/spiffy/orgs/common/kustomerVisibilityListener.ts +0 -41
  461. package/src/application/service/domMutations/spiffy/orgs/common/orgsCommonDataLayerListener.ts +0 -119
  462. package/src/application/service/featureFlagService.ts +0 -130
  463. package/src/application/service/graphqlConfigService.ts +0 -59
  464. package/src/application/service/index.ts +0 -32
  465. package/src/application/service/kustomerIntegrationService.ts +0 -111
  466. package/src/application/service/localStorageService.ts +0 -77
  467. package/src/application/service/pageVariantService.ts +0 -866
  468. package/src/application/service/searchService.ts +0 -147
  469. package/src/application/service/sessionStorageService.ts +0 -27
  470. package/src/application/service/shopifyUrlService.ts +0 -63
  471. package/src/application/service/userIdentityService.ts +0 -114
  472. package/src/application/service/windowChatToggleService.ts +0 -80
  473. package/src/application/service/windowDataLayerService.ts +0 -181
  474. package/src/application/service/windowFrontendConfigService.ts +0 -129
  475. package/src/atoms/org/merchantCss.ts +0 -161
  476. package/src/atoms/org/org.ts +0 -251
  477. package/src/atoms/org/orgUIConfig.ts +0 -142
  478. package/src/enabled-features.ts +0 -83
  479. package/src/hooks/useDynamicVariants.ts +0 -226
  480. package/src/hooks/useFileUpload.ts +0 -63
  481. package/src/hooks/useHideElements.ts +0 -85
  482. package/src/interceptors/useFormEscalation.ts +0 -57
  483. /package/dist/{locators-DnKpajbY.js → atomStore-CZnUUsrr.js} +0 -0
  484. /package/dist/{locators-CugndTUM.cjs → atomStore-KSoFS3Jj.cjs} +0 -0
  485. /package/dist/{utilityTypes-C4h2wgAK.cjs → locators-0YYZu9n4.cjs} +0 -0
  486. /package/dist/{utilityTypes-BVikejDo.js → locators-fBXS_pxP.js} +0 -0
  487. /package/dist/{variantInfo-CzhR5W6h.js → utilityTypes-8sETsYPk.js} +0 -0
  488. /package/dist/{variantInfo-CNRTY0gH.cjs → utilityTypes-COShxVir.cjs} +0 -0
  489. /package/src/{application/service/customerService/types.ts → types/customerService.ts} +0 -0
  490. /package/src/{adapters/spiffy/commerce → types}/exceptions/sessionExceptions.ts +0 -0
  491. /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
+ };
@@ -1,80 +1,7 @@
1
- import { GraphQLClient } from "src/adapters/spiffy/commerce/graphql";
2
- import Logger from "src/application/logging/logger";
3
- import { AtomStore, getAtomStore } from "../atoms/atomStore";
4
- import { ColorMapping } from "src/contexts";
5
-
6
- import { useAtomValue } from "jotai";
7
- import { useEffect, useState } from "react";
8
- import { orgShortNameAtom } from "../atoms/org/org";
9
- import {
10
- BasicOrgInfoType,
11
- getOrgInfo,
12
- } from "src/application/models/supportedOrgs";
13
- import { FrontendConfig } from "src/application/models";
14
-
15
- type newConfigResponse = {
16
- colorsConfig: ColorMapping | undefined;
17
- frontendConfig: FrontendConfig | undefined;
18
- };
19
-
20
- async function fetchGraphQLConfig(
21
- atomStore: AtomStore
22
- ): Promise<newConfigResponse> {
23
- try {
24
- Logger.logDebug("GraphQLConfigService: Starting GraphQL client fetch");
25
-
26
- const { colorsConfig, frontendConfig } =
27
- (await GraphQLClient.getColorsAndFrontendConfig()) ?? {};
28
-
29
- Logger.logDebug("GraphQL config fetch completed", {
30
- hasColorsConfig: !!colorsConfig,
31
- hasFrontendConfig: !!frontendConfig,
32
- frontendConfigKeys: frontendConfig ? Object.keys(frontendConfig) : [],
33
- });
34
-
35
- return {
36
- colorsConfig,
37
- frontendConfig,
38
- };
39
- } catch (error) {
40
- Logger.logError(
41
- "GraphQLConfigService: Error during GraphQL config fetch",
42
- error
43
- );
44
- throw error; // Re-throw to be caught by the caller
45
- }
46
- }
1
+ import { useNewOrgConfigContext } from "src/contexts/newOrgConfigContext";
47
2
 
48
3
  export const useNewOrgConfig = () => {
49
- const [oldConfig, setOldConfig] = useState<BasicOrgInfoType | undefined>();
50
-
51
- const [newConfig, setNewConfig] = useState<newConfigResponse | undefined>();
52
-
53
- const [combinedConfig, setCombinedConfig] = useState<
54
- newConfigResponse & BasicOrgInfoType
55
- >();
56
- const orgShortName = useAtomValue(orgShortNameAtom);
57
-
58
- useEffect(() => {
59
- if (orgShortName) {
60
- getOrgInfo(orgShortName).then((oldConfigData) => {
61
- setOldConfig(oldConfigData);
62
- });
63
- fetchGraphQLConfig(getAtomStore()).then((newConfigData) => {
64
- setNewConfig(newConfigData);
65
- });
66
- }
67
- }, [orgShortName]);
68
-
69
- useEffect(() => {
70
- if (oldConfig && newConfig) {
71
- setCombinedConfig;
72
- }
73
- }, [oldConfig, newConfig]);
74
-
75
- if (!orgShortName || !combinedConfig) {
76
- return null;
77
- }
4
+ const { combinedConfig, loading, error } = useNewOrgConfigContext();
78
5
 
79
- return combinedConfig;
6
+ return { ...combinedConfig, loading, error };
80
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