@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,104 @@
1
+ import React, {
2
+ createContext,
3
+ useContext,
4
+ ReactNode,
5
+ useState,
6
+ useEffect,
7
+ useMemo,
8
+ } from "react";
9
+ import { useAtomValue, useSetAtom } from "jotai";
10
+ import {
11
+ BasicOrgInfoType,
12
+ getOrgInfo,
13
+ } from "src/application/models/supportedOrgs";
14
+ import { useColorsAndFrontendConfig } from "src/hooks/useGraphQLConfig";
15
+ import { orgShortNameAtom } from "src/atoms/envive/enviveConfig";
16
+ import { getAtomStore } from "src/atoms/atomStore/atomStore"; // Import getAtomStore
17
+ import { orgIdAtom } from "src/atoms/org/graphqlConfig"; // Import new atoms
18
+ import { newOrgConfigAtom } from "src/atoms/org/newOrgConfigAtom"; // Import newOrgConfigAtom
19
+ import { OrgConfigFeatureGate } from "src/application/models/api/orgConfigResults"; // Import OrgConfigFeatureGate
20
+ import { FeatureFlagServiceProvider } from "src/contexts/featureFlagServiceContext"; // Import FeatureFlagServiceProvider
21
+ import { ColorsConfigResponse, FrontendConfigResponse } from "./graphqlContext";
22
+
23
+ export interface NewOrgConfigContextType {
24
+ combinedConfig?:
25
+ | (BasicOrgInfoType & {
26
+ colorsConfig?: ColorsConfigResponse;
27
+ frontendConfig?: FrontendConfigResponse;
28
+ })
29
+ | null;
30
+ loading: boolean;
31
+ error: Error | null;
32
+ }
33
+
34
+ const NewOrgConfigContext = createContext<NewOrgConfigContextType | undefined>(
35
+ undefined
36
+ );
37
+
38
+ interface NewOrgConfigProviderProps {
39
+ children: ReactNode;
40
+ }
41
+
42
+ export const NewOrgConfigProvider: React.FC<NewOrgConfigProviderProps> = ({
43
+ children,
44
+ }) => {
45
+ const [oldConfig, setOldConfig] = useState<BasicOrgInfoType | undefined>();
46
+ const orgShortName = useAtomValue(orgShortNameAtom);
47
+ const setNewOrgConfig = useSetAtom(newOrgConfigAtom);
48
+
49
+ const { data: newConfig, loading, error } = useColorsAndFrontendConfig();
50
+
51
+ useEffect(() => {
52
+ if (orgShortName) {
53
+ getOrgInfo(orgShortName).then(setOldConfig);
54
+ }
55
+ }, [orgShortName]);
56
+
57
+ const combinedConfig = useMemo(() => {
58
+ if (!oldConfig || !newConfig) return null;
59
+ return { ...oldConfig, ...newConfig };
60
+ }, [oldConfig, newConfig]);
61
+
62
+ useEffect(() => {
63
+ const atomStore = getAtomStore();
64
+ if (combinedConfig) {
65
+ // TODO: Replace with actual orgId when available in combinedConfig
66
+ atomStore.set(orgIdAtom, "mock-org-id");
67
+
68
+ setNewOrgConfig(combinedConfig);
69
+ }
70
+ }, [combinedConfig, setNewOrgConfig]);
71
+
72
+ const contextValue = useMemo(() => {
73
+ if (!orgShortName || (loading && !oldConfig)) {
74
+ return { combinedConfig: null, loading: true, error: null };
75
+ }
76
+
77
+ if (error) {
78
+ return { combinedConfig: null, loading: false, error };
79
+ }
80
+
81
+ return { combinedConfig, loading: false, error: null };
82
+ }, [orgShortName, loading, error, oldConfig, combinedConfig]);
83
+
84
+ // TODO: Provide actual featureGates when available in combinedConfig
85
+ const featureGates: OrgConfigFeatureGate[] = [];
86
+
87
+ return (
88
+ <NewOrgConfigContext.Provider value={contextValue}>
89
+ <FeatureFlagServiceProvider featureGates={featureGates}>
90
+ {children}
91
+ </FeatureFlagServiceProvider>
92
+ </NewOrgConfigContext.Provider>
93
+ );
94
+ };
95
+
96
+ export const useNewOrgConfigContext = () => {
97
+ const context = useContext(NewOrgConfigContext);
98
+ if (context === undefined) {
99
+ throw new Error(
100
+ "useNewOrgConfigContext must be used within a NewOrgConfigProvider"
101
+ );
102
+ }
103
+ return context;
104
+ };
@@ -1,106 +1,106 @@
1
- import React, {
2
- createContext,
3
- useContext,
4
- ReactNode,
5
- useState,
6
- useEffect,
7
- } from "react";
8
- import { useAtomValue } from "jotai";
9
- import { OrgConfig as OrgConfigType } from "src/application/models/api/orgConfigResults";
10
- import { getAsyncOrgConfig } from "src/atoms/org/org";
11
- import { enviveConfigAtom } from "src/atoms/envive/enviveConfig";
12
- import Logger from "src/application/logging/logger";
1
+ // import React, {
2
+ // createContext,
3
+ // useContext,
4
+ // ReactNode,
5
+ // useState,
6
+ // useEffect,
7
+ // } from "react";
8
+ // import { useAtomValue } from "jotai";
9
+ // import { OrgConfig as OrgConfigType } from "src/application/models/api/orgConfigResults";
10
+ // import { getAsyncOrgConfig } from "src/atoms/org/org";
11
+ // import { enviveConfigAtom } from "src/atoms/envive/enviveConfig";
12
+ // import Logger from "src/application/logging/logger";
13
13
 
14
- interface OrgConfigContextType {
15
- orgConfig: OrgConfigType | undefined;
16
- loading: boolean;
17
- error: Error | undefined;
18
- }
14
+ // interface OrgConfigContextType {
15
+ // orgConfig: OrgConfigType | undefined;
16
+ // loading: boolean;
17
+ // error: Error | undefined;
18
+ // }
19
19
 
20
- const OrgConfigContext = createContext<OrgConfigContextType | undefined>(
21
- undefined
22
- );
20
+ // const OrgConfigContext = createContext<OrgConfigContextType | undefined>(
21
+ // undefined
22
+ // );
23
23
 
24
- interface OrgConfigProviderProps {
25
- children: ReactNode;
26
- }
24
+ // interface OrgConfigProviderProps {
25
+ // children: ReactNode;
26
+ // }
27
27
 
28
- export const OrgConfigProvider: React.FC<OrgConfigProviderProps> = ({
29
- children,
30
- }) => {
31
- const [orgConfig, setOrgConfig] = useState<OrgConfigType | undefined>(
32
- undefined
33
- );
34
- const [loading, setLoading] = useState<boolean>(true);
35
- const [error, setError] = useState<Error | undefined>(undefined);
28
+ // export const OrgConfigProvider: React.FC<OrgConfigProviderProps> = ({
29
+ // children,
30
+ // }) => {
31
+ // const [orgConfig, setOrgConfig] = useState<OrgConfigType | undefined>(
32
+ // undefined
33
+ // );
34
+ // const [loading, setLoading] = useState<boolean>(true);
35
+ // const [error, setError] = useState<Error | undefined>(undefined);
36
36
 
37
- // Watch for EnviveConfig to be available
38
- const enviveConfig = useAtomValue(enviveConfigAtom);
37
+ // // Watch for EnviveConfig to be available
38
+ // const enviveConfig = useAtomValue(enviveConfigAtom);
39
39
 
40
- useEffect(() => {
41
- const fetchOrgConfig = async () => {
42
- try {
43
- setLoading(true);
44
- setError(undefined); // Clear any previous errors
40
+ // useEffect(() => {
41
+ // const fetchOrgConfig = async () => {
42
+ // try {
43
+ // setLoading(true);
44
+ // setError(undefined); // Clear any previous errors
45
45
 
46
- // Check if we have the required dependencies from EnviveConfig
47
- if (!enviveConfig) {
48
- Logger.logDebug(
49
- "OrgConfigProvider: Waiting for EnviveConfig to be available"
50
- );
51
- return; // Don't fetch yet, wait for EnviveConfig
52
- }
46
+ // // Check if we have the required dependencies from EnviveConfig
47
+ // if (!enviveConfig) {
48
+ // Logger.logDebug(
49
+ // "OrgConfigProvider: Waiting for EnviveConfig to be available"
50
+ // );
51
+ // return; // Don't fetch yet, wait for EnviveConfig
52
+ // }
53
53
 
54
- // Check if we have either orgLevelApiKey or orgShortName
55
- const hasApiKey = enviveConfig.orgLevelApiKey;
56
- const hasOrgShortName = enviveConfig.orgShortName;
54
+ // // Check if we have either orgLevelApiKey or orgShortName
55
+ // const hasApiKey = enviveConfig.orgLevelApiKey;
56
+ // const hasOrgShortName = enviveConfig.orgShortName;
57
57
 
58
- if (!hasApiKey && !hasOrgShortName) {
59
- Logger.logWarn(
60
- "OrgConfigProvider: Neither orgLevelApiKey nor orgShortName available in EnviveConfig",
61
- enviveConfig
62
- );
63
- setError(
64
- new Error(
65
- "OrgConfigProvider requires either orgLevelApiKey or orgShortName to be provided in EnviveConfigProvider"
66
- )
67
- );
68
- return;
69
- }
58
+ // if (!hasApiKey && !hasOrgShortName) {
59
+ // Logger.logWarn(
60
+ // "OrgConfigProvider: Neither orgLevelApiKey nor orgShortName available in EnviveConfig",
61
+ // enviveConfig
62
+ // );
63
+ // setError(
64
+ // new Error(
65
+ // "OrgConfigProvider requires either orgLevelApiKey or orgShortName to be provided in EnviveConfigProvider"
66
+ // )
67
+ // );
68
+ // return;
69
+ // }
70
70
 
71
- Logger.logDebug(
72
- "OrgConfigProvider: EnviveConfig available, fetching OrgConfig",
73
- {
74
- hasApiKey: !!hasApiKey,
75
- hasOrgShortName: !!hasOrgShortName,
76
- }
77
- );
71
+ // Logger.logDebug(
72
+ // "OrgConfigProvider: EnviveConfig available, fetching OrgConfig",
73
+ // {
74
+ // hasApiKey: !!hasApiKey,
75
+ // hasOrgShortName: !!hasOrgShortName,
76
+ // }
77
+ // );
78
78
 
79
- const fetchedConfig = await getAsyncOrgConfig();
80
- setOrgConfig(fetchedConfig);
81
- Logger.logDebug("OrgConfigProvider: Successfully fetched OrgConfig");
82
- } catch (err) {
83
- Logger.logError("OrgConfigProvider: Failed to fetch OrgConfig", err);
84
- setError(err as Error);
85
- } finally {
86
- setLoading(false);
87
- }
88
- };
79
+ // const fetchedConfig = await getAsyncOrgConfig();
80
+ // setOrgConfig(fetchedConfig);
81
+ // Logger.logDebug("OrgConfigProvider: Successfully fetched OrgConfig");
82
+ // } catch (err) {
83
+ // Logger.logError("OrgConfigProvider: Failed to fetch OrgConfig", err);
84
+ // setError(err as Error);
85
+ // } finally {
86
+ // setLoading(false);
87
+ // }
88
+ // };
89
89
 
90
- fetchOrgConfig();
91
- }, [enviveConfig]); // Re-run when enviveConfig changes
90
+ // fetchOrgConfig();
91
+ // }, [enviveConfig]); // Re-run when enviveConfig changes
92
92
 
93
- return (
94
- <OrgConfigContext.Provider value={{ orgConfig, loading, error }}>
95
- {children}
96
- </OrgConfigContext.Provider>
97
- );
98
- };
93
+ // return (
94
+ // <OrgConfigContext.Provider value={{ orgConfig, loading, error }}>
95
+ // {children}
96
+ // </OrgConfigContext.Provider>
97
+ // );
98
+ // };
99
99
 
100
- export const useOrgConfig = () => {
101
- const context = useContext(OrgConfigContext);
102
- if (context === undefined) {
103
- throw new Error("useOrgConfig must be used within an OrgConfigProvider");
104
- }
105
- return context;
106
- };
100
+ // export const useOrgConfig = () => {
101
+ // const context = useContext(OrgConfigContext);
102
+ // if (context === undefined) {
103
+ // throw new Error("useOrgConfig must be used within an OrgConfigProvider");
104
+ // }
105
+ // return context;
106
+ // };
@@ -0,0 +1,187 @@
1
+ import React, {
2
+ createContext,
3
+ useContext,
4
+ useCallback,
5
+ useMemo,
6
+ useEffect,
7
+ } from "react";
8
+ import { useAtomValue } from "jotai";
9
+ import {
10
+ Configuration,
11
+ ResponseCategory,
12
+ ResponseError,
13
+ SearchApi,
14
+ } from "@spiffy-ai/commerce-api-client";
15
+ import { baseUrlAtom } from "src/atoms/envive/enviveConfig";
16
+ import Logger from "src/application/logging/logger";
17
+ import { useAppDetails } from "src/hooks/useAppDetails";
18
+ import { useEnviveConfig } from "src/contexts/enviveConfigContext";
19
+ import { SessionRestartRequired } from "src/types/exceptions/sessionExceptions";
20
+ import { UnsupportedProductException } from "src/types/exceptions/unsupportedProductExceptions";
21
+ import { SearchResult, SearchParams } from "../application/models/api/search";
22
+ import {
23
+ setSearchServiceFunction,
24
+ clearSearchServiceFunction,
25
+ } from "../atoms/search/searchServiceAdapter";
26
+
27
+ const transformProductResponses = (products: SearchResult["products"]) =>
28
+ products.map((data) => ({
29
+ id: data.id,
30
+ responseId: data.response_id,
31
+ category: ResponseCategory.Product,
32
+ description: data.description,
33
+ imageUrl: data.image_url,
34
+ imageUrls: data.image_urls,
35
+ title: data.title,
36
+ url: data.url,
37
+ originalPrice: data.original_price,
38
+ salePrice: data.sale_price,
39
+ averageRating: data.average_rating,
40
+ numberReviews: data.number_reviews,
41
+ metadata: data.metadata,
42
+ isForGrid: data.is_for_grid,
43
+ colors: data.colors,
44
+ sizes: data.sizes,
45
+ filters: data.filters,
46
+ }));
47
+
48
+ async function errorResponseBody(error: ResponseError) {
49
+ try {
50
+ return await error.response.json();
51
+ } catch {
52
+ return {};
53
+ }
54
+ }
55
+
56
+ async function throwSessionRestartRequiredIf(errorMsg: string, error: unknown) {
57
+ if (!(error instanceof ResponseError)) {
58
+ Logger.logInfo(errorMsg, error);
59
+ throw error;
60
+ }
61
+
62
+ const errorResponse = await errorResponseBody(error);
63
+ if (
64
+ errorResponse?.message?.toLowerCase() === "unsupported product" ||
65
+ errorResponse?.app_code?.toUpperCase() === "PRODUCT_NOT_FOUND"
66
+ ) {
67
+ throw new UnsupportedProductException();
68
+ } else if (
69
+ errorResponse?.app_code?.toUpperCase() === "RESTART_SESSION" ||
70
+ errorResponse?.sub_code?.toUpperCase() === "NOT_FOUND"
71
+ ) {
72
+ Logger.logInfo(
73
+ "Session does not exist. Re-start session",
74
+ error,
75
+ error.response,
76
+ errorResponse
77
+ );
78
+ throw new SessionRestartRequired();
79
+ }
80
+
81
+ Logger.logInfo(errorMsg, error);
82
+ throw error;
83
+ }
84
+
85
+ interface SearchContextValue {
86
+ searchProducts: (params: SearchParams) => Promise<SearchResult>;
87
+ isReady: boolean;
88
+ }
89
+
90
+ const SearchContext = createContext<SearchContextValue | undefined>(undefined);
91
+
92
+ export const SearchProvider: React.FC<{ children: React.ReactNode }> = ({
93
+ children,
94
+ }) => {
95
+ const { orgLevelApiKey, publicKey } = useEnviveConfig();
96
+ const apiKey = orgLevelApiKey || publicKey; // Replicate apiKeyAtom logic
97
+ const appDetails = useAppDetails();
98
+ const baseUrl = useAtomValue(baseUrlAtom);
99
+
100
+ const isReady = Boolean(apiKey && appDetails && baseUrl);
101
+
102
+ const searchApi = useMemo(() => {
103
+ if (!isReady) return null;
104
+
105
+ const config: Configuration = new Configuration({
106
+ accessToken: apiKey,
107
+ basePath: baseUrl,
108
+ headers: {
109
+ "Content-Type": "application/json",
110
+ Accept: "application/json",
111
+ },
112
+ });
113
+ return new SearchApi(config);
114
+ }, [apiKey, baseUrl, isReady]);
115
+
116
+ const searchProducts = useCallback(
117
+ async (params: SearchParams): Promise<SearchResult> => {
118
+ if (!isReady || !searchApi) {
119
+ throw new Error("SearchService not ready - missing dependencies");
120
+ }
121
+
122
+ try {
123
+ const response = await searchApi.v1SearchQueryGet({
124
+ query: params.query,
125
+ limit: params.limit,
126
+ org_id: appDetails.orgId,
127
+ user_id: appDetails.userId,
128
+ });
129
+ const {
130
+ products,
131
+ filters,
132
+ search_response_id: searchResponseId,
133
+ } = response;
134
+
135
+ return {
136
+ products: transformProductResponses(products) || [],
137
+ filters: filters || [],
138
+ totalProductCount: products?.length || 0,
139
+ searchResponseId: searchResponseId || "",
140
+ };
141
+ } catch (error) {
142
+ await throwSessionRestartRequiredIf("Failed to search products", error);
143
+ // This part will not be reached if an exception is thrown, but it's required for type safety
144
+ return {
145
+ products: [],
146
+ filters: [],
147
+ totalProductCount: 0,
148
+ searchResponseId: "",
149
+ };
150
+ }
151
+ },
152
+ [searchApi, isReady, appDetails]
153
+ );
154
+
155
+ // Register the search function with the adapter for use in atoms
156
+ useEffect(() => {
157
+ if (isReady) {
158
+ setSearchServiceFunction(searchProducts);
159
+ } else {
160
+ clearSearchServiceFunction();
161
+ }
162
+
163
+ return () => {
164
+ clearSearchServiceFunction();
165
+ };
166
+ }, [searchProducts, isReady]);
167
+
168
+ const value = useMemo(
169
+ () => ({
170
+ searchProducts,
171
+ isReady,
172
+ }),
173
+ [searchProducts, isReady]
174
+ );
175
+
176
+ return (
177
+ <SearchContext.Provider value={value}>{children}</SearchContext.Provider>
178
+ );
179
+ };
180
+
181
+ export const useSearchService = () => {
182
+ const context = useContext(SearchContext);
183
+ if (!context) {
184
+ throw new Error("useSearchService must be used within a SearchProvider");
185
+ }
186
+ return context;
187
+ };
@@ -0,0 +1,80 @@
1
+ import React, {
2
+ createContext,
3
+ useContext,
4
+ useCallback,
5
+ useMemo,
6
+ useEffect,
7
+ } from "react";
8
+ import Logger from "../application/logging/logger";
9
+
10
+ interface SessionStorageContextType {
11
+ setItem: (key: string, value: string) => void;
12
+ getItem: (key: string) => string | null;
13
+ isAvailable: boolean;
14
+ }
15
+
16
+ const SessionStorageContext = createContext<SessionStorageContextType | null>(
17
+ null
18
+ );
19
+
20
+ export const SessionStorageProvider: React.FC<{
21
+ children: React.ReactNode;
22
+ }> = ({ children }) => {
23
+ const isAvailable = useMemo(() => {
24
+ try {
25
+ return typeof window !== "undefined" && !!window.sessionStorage;
26
+ } catch {
27
+ return false;
28
+ }
29
+ }, []);
30
+
31
+ useEffect(() => {
32
+ if (!isAvailable) {
33
+ Logger.logError("sessionStorage is not available", undefined);
34
+ }
35
+ }, [isAvailable]);
36
+
37
+ const setItem = useCallback(
38
+ (key: string, value: string) => {
39
+ if (!isAvailable) return;
40
+ sessionStorage.setItem(key, value);
41
+ window.dispatchEvent(
42
+ new StorageEvent("storage", { key, newValue: value })
43
+ );
44
+ },
45
+ [isAvailable]
46
+ );
47
+
48
+ const getItem = useCallback(
49
+ (key: string) => {
50
+ if (!isAvailable) return null;
51
+ return sessionStorage.getItem(key);
52
+ },
53
+ [isAvailable]
54
+ );
55
+
56
+ const value = useMemo(
57
+ () => ({
58
+ setItem,
59
+ getItem,
60
+ isAvailable,
61
+ }),
62
+ [setItem, getItem, isAvailable]
63
+ );
64
+
65
+ return (
66
+ <SessionStorageContext.Provider value={value}>
67
+ {children}
68
+ </SessionStorageContext.Provider>
69
+ );
70
+ };
71
+
72
+ export const useSessionStorage = () => {
73
+ const context = useContext(SessionStorageContext);
74
+ if (!context) {
75
+ throw new Error(
76
+ "useSessionStorage must be used within a SessionStorageProvider"
77
+ );
78
+ }
79
+ return context;
80
+ };
@@ -0,0 +1,97 @@
1
+ import React, { createContext, useCallback, useContext, useMemo } from "react";
2
+ import { IdExtractor } from "src/contexts/types";
3
+ import { parseHref } from "src/application/utils/urlsParser";
4
+
5
+ interface ShopifyUrlContextType {
6
+ getTrimmedPathName: () => string | null;
7
+ getPlpOrPdpId: (extractor: IdExtractor) => string | null;
8
+ isOnPdpPage: () => boolean;
9
+ isOnPlpPage: () => boolean;
10
+ isReady: boolean;
11
+ }
12
+
13
+ const ShopifyUrlContext = createContext<ShopifyUrlContextType | undefined>(
14
+ undefined
15
+ );
16
+
17
+ export const ShopifyUrlProvider: React.FC<{ children: React.ReactNode }> = ({
18
+ children,
19
+ }) => {
20
+ const isReady = true; // No external dependencies, so always ready
21
+
22
+ const getTrimmedPathName = useCallback((): string | null => {
23
+ let { pathname } = window.location;
24
+ // strip out the proxy path so local dev still works
25
+ pathname = pathname.replace("/proxy", "");
26
+ // remove trailing hash if it exists
27
+ pathname = pathname.replace(/#.*$/, "");
28
+ // remove trailing /, ie. some URLs can end with '/' like /collections/cast-iron/
29
+ pathname = pathname.replace(/\/$/, "");
30
+
31
+ if (pathname === undefined || pathname === null || pathname.length === 0) {
32
+ return null;
33
+ }
34
+
35
+ return pathname;
36
+ }, []);
37
+
38
+ const getPlpOrPdpId = useCallback(
39
+ (extractor: IdExtractor): string | null => {
40
+ if (extractor === "shopify-product-variant-id") {
41
+ const parsedHref = parseHref(window.location.href);
42
+ const variantId = parsedHref?.urlSearchParams?.get("variant");
43
+ if (!variantId) {
44
+ return getPlpOrPdpId("shopify-product-id");
45
+ }
46
+ return variantId;
47
+ }
48
+
49
+ const pathSegment =
50
+ extractor === "shopify-product-id" ? "products" : "collections";
51
+ const tokens = getTrimmedPathName()?.split("/");
52
+ const idIndex = tokens?.findIndex((token) => token === pathSegment);
53
+ if (idIndex !== undefined && idIndex >= 0 && tokens) {
54
+ return decodeURIComponent(tokens[idIndex + 1]);
55
+ }
56
+ return null;
57
+ },
58
+ [getTrimmedPathName]
59
+ );
60
+
61
+ const isOnPdpPage = useCallback((): boolean => {
62
+ return getTrimmedPathName()?.includes("/products") ?? false;
63
+ }, [getTrimmedPathName]);
64
+
65
+ const isOnPlpPage = useCallback((): boolean => {
66
+ return (
67
+ (getTrimmedPathName()?.includes("/collections") &&
68
+ !getTrimmedPathName()?.includes("/products")) ??
69
+ false
70
+ );
71
+ }, [getTrimmedPathName]);
72
+
73
+ const value = useMemo(
74
+ () => ({
75
+ getTrimmedPathName,
76
+ getPlpOrPdpId,
77
+ isOnPdpPage,
78
+ isOnPlpPage,
79
+ isReady,
80
+ }),
81
+ [getTrimmedPathName, getPlpOrPdpId, isOnPdpPage, isOnPlpPage, isReady]
82
+ );
83
+
84
+ return (
85
+ <ShopifyUrlContext.Provider value={value}>
86
+ {children}
87
+ </ShopifyUrlContext.Provider>
88
+ );
89
+ };
90
+
91
+ export const useShopifyUrl = () => {
92
+ const context = useContext(ShopifyUrlContext);
93
+ if (!context) {
94
+ throw new Error("useShopifyUrl must be used within a ShopifyUrlProvider");
95
+ }
96
+ return context;
97
+ };