@envive-ai/react-hooks 0.2.6 → 0.2.7-arthur-2

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 (377) hide show
  1. package/dist/{NewOrgConfig-BfrGpiGk.js → NewOrgConfig-BVByiYPp.js} +2 -2
  2. package/dist/{NewOrgConfig-BxSuoP9C.cjs → NewOrgConfig-CInGtTV6.cjs} +2 -2
  3. package/dist/{SystemSettingsContext-Bkoiobdv.cjs → SystemSettingsContext-150LTxIk.cjs} +2 -2
  4. package/dist/{SystemSettingsContext-B8X_Dvw2.js → SystemSettingsContext-ei5B0dxO.js} +2 -2
  5. package/dist/{TrackComponentVisibleEvent-DMuX-byo.cjs → TrackComponentVisibleEvent-C7-nnBks.cjs} +2 -2
  6. package/dist/{TrackComponentVisibleEvent-DwfGqNTx.js → TrackComponentVisibleEvent-CuwSLbug.js} +2 -2
  7. package/dist/amplitudeContext-BBQ1ATA3.js +265 -0
  8. package/dist/amplitudeContext-BItT9HmT.js +1 -0
  9. package/dist/amplitudeContext-C-0-DDk3.cjs +287 -0
  10. package/dist/{amplitudeContext-B73xamNe.d.cts → amplitudeContext-CCVyp5RU.d.cts} +1 -1
  11. package/dist/amplitudeContext-DPtyVv3Q.cjs +0 -0
  12. package/dist/{amplitudeContext-CiO9T9c-.d.ts → amplitudeContext-DcRur97Z.d.ts} +1 -1
  13. package/dist/{api-bHEYmSiT.js → api-BWSsazAG.js} +3 -3
  14. package/dist/{api-BvygKEiX.cjs → api-DeW6rHj3.cjs} +3 -3
  15. package/dist/{app-Aqkm_SlS.js → app-C_Y-57U5.js} +3 -4
  16. package/dist/{app-BQw_-JGl.cjs → app-XEFPotoH.cjs} +3 -4
  17. package/dist/application/models/graphql/index.cjs +4 -3
  18. package/dist/application/models/graphql/index.d.cts +2 -2
  19. package/dist/application/models/graphql/index.d.ts +2 -2
  20. package/dist/application/models/graphql/index.js +3 -3
  21. package/dist/application/models/guards/api/index.cjs +3 -3
  22. package/dist/application/models/guards/api/index.d.cts +2 -1
  23. package/dist/application/models/guards/api/index.d.ts +2 -1
  24. package/dist/application/models/guards/api/index.js +3 -3
  25. package/dist/application/models/guards/utils.cjs +1 -1
  26. package/dist/application/models/guards/utils.d.cts +1 -1
  27. package/dist/application/models/guards/utils.d.ts +1 -1
  28. package/dist/application/models/guards/utils.js +1 -1
  29. package/dist/application/models/index.cjs +9 -9
  30. package/dist/application/models/index.d.cts +11 -10
  31. package/dist/application/models/index.d.ts +11 -10
  32. package/dist/application/models/index.js +8 -8
  33. package/dist/application/models/variantInfo/index.d.cts +1 -1
  34. package/dist/application/models/variantInfo/index.d.ts +1 -1
  35. package/dist/application/utils/index.cjs +17 -17
  36. package/dist/application/utils/index.d.cts +16 -15
  37. package/dist/application/utils/index.d.ts +16 -15
  38. package/dist/application/utils/index.js +17 -17
  39. package/dist/{atomStore-CmZbgQHc.cjs → atomStore-8ppNkJ_n.cjs} +1 -1
  40. package/dist/{atomStore-DEcDhiLp.js → atomStore-BLYJ2ZoQ.js} +1 -1
  41. package/dist/atoms/app/index.cjs +12 -12
  42. package/dist/atoms/app/index.d.cts +19 -18
  43. package/dist/atoms/app/index.d.ts +14 -13
  44. package/dist/atoms/app/index.js +12 -12
  45. package/dist/atoms/atomStore/index.cjs +1 -1
  46. package/dist/atoms/atomStore/index.js +1 -1
  47. package/dist/atoms/chat/index.cjs +18 -18
  48. package/dist/atoms/chat/index.d.cts +39 -38
  49. package/dist/atoms/chat/index.d.ts +13 -12
  50. package/dist/atoms/chat/index.js +18 -18
  51. package/dist/atoms/globalSearch/index.d.cts +5 -5
  52. package/dist/atoms/org/index.cjs +1 -1
  53. package/dist/atoms/org/index.d.cts +30 -29
  54. package/dist/atoms/org/index.d.ts +30 -29
  55. package/dist/atoms/org/index.js +1 -1
  56. package/dist/atoms/search/index.cjs +20 -20
  57. package/dist/atoms/search/index.d.cts +13 -12
  58. package/dist/atoms/search/index.d.ts +13 -12
  59. package/dist/atoms/search/index.js +20 -20
  60. package/dist/atoms/search/types.d.cts +4 -2
  61. package/dist/atoms/search/types.d.ts +4 -2
  62. package/dist/{cdnContext-Cd0Kvt6g.cjs → cdnContext-Bzqk0s2M.cjs} +2 -2
  63. package/dist/{cdnContext-D8pHA9gh.js → cdnContext-CTC-zBtx.js} +2 -2
  64. package/dist/{chat-U1IgKNij.js → chat-Bzay7QnI.js} +9 -9
  65. package/dist/{chat-DwNALtox.cjs → chat-Ckd1b_z_.cjs} +14 -8
  66. package/dist/{chat-EJbfGWRr.js → chat-ClvJ9xEj.js} +1 -1
  67. package/dist/{chat-CJ9D8n7g.cjs → chat-DCGriB7h.cjs} +1 -1
  68. package/dist/{chatElementDisplayLocation-DWmfNX_u.d.cts → chatElementDisplayLocation-B7vr33eG.d.cts} +1 -1
  69. package/dist/{chatElementDisplayLocation-DbmdwAff.d.ts → chatElementDisplayLocation-D4XF0UfI.d.ts} +1 -1
  70. package/dist/{chatSearch-DtE2cUQw.cjs → chatSearch-Bev4ZI8Z.cjs} +4 -4
  71. package/dist/{chatSearch-Bb2SMr9X.js → chatSearch-DNaGtQyx.js} +4 -4
  72. package/dist/{chatState-BXBN-12W.js → chatState-CcCvgmSM.js} +3 -3
  73. package/dist/{chatState-B3Dyrd9M.cjs → chatState-OkYPVghN.cjs} +3 -3
  74. package/dist/{commerce-api-DXbnMNT8.js → commerce-api-ml5fkEuk.js} +9 -8
  75. package/dist/{commerce-api-Dx02FCQ7.cjs → commerce-api-sQtLuwTh.cjs} +9 -8
  76. package/dist/{common-CuwWqIJ1.cjs → common-DQPvV_S_.cjs} +1 -1
  77. package/dist/{common-Df2bwzd2.js → common-c_4eX0qn.js} +1 -1
  78. package/dist/{components-QGCWJ26c.js → components-CDpaMUjK.js} +1 -1
  79. package/dist/{components-BCfFLf9X.cjs → components-DKwVHIjq.cjs} +1 -1
  80. package/dist/config/index.cjs +4 -4
  81. package/dist/config/index.d.cts +4 -4
  82. package/dist/config/index.d.ts +4 -4
  83. package/dist/config/index.js +4 -4
  84. package/dist/config/locators/components/chat/index.cjs +1 -1
  85. package/dist/config/locators/components/chat/index.d.cts +1 -1
  86. package/dist/config/locators/components/chat/index.d.ts +1 -1
  87. package/dist/config/locators/components/chat/index.js +1 -1
  88. package/dist/config/locators/components/common/index.cjs +1 -1
  89. package/dist/config/locators/components/common/index.d.cts +1 -1
  90. package/dist/config/locators/components/common/index.d.ts +1 -1
  91. package/dist/config/locators/components/common/index.js +1 -1
  92. package/dist/config/locators/components/index.cjs +1 -1
  93. package/dist/config/locators/components/index.d.cts +1 -1
  94. package/dist/config/locators/components/index.d.ts +1 -1
  95. package/dist/config/locators/components/index.js +1 -1
  96. package/dist/config/locators/index.cjs +4 -4
  97. package/dist/config/locators/index.d.cts +4 -4
  98. package/dist/config/locators/index.d.ts +4 -4
  99. package/dist/config/locators/index.js +4 -4
  100. package/dist/contexts/amplitudeContext/index.cjs +17 -16
  101. package/dist/contexts/amplitudeContext/index.d.cts +1 -1
  102. package/dist/contexts/amplitudeContext/index.d.ts +1 -1
  103. package/dist/contexts/amplitudeContext/index.js +17 -16
  104. package/dist/contexts/cdnContext/index.cjs +4 -4
  105. package/dist/contexts/cdnContext/index.js +4 -4
  106. package/dist/contexts/chatContext/index.cjs +25 -25
  107. package/dist/contexts/chatContext/index.d.cts +2 -2
  108. package/dist/contexts/chatContext/index.d.ts +2 -2
  109. package/dist/contexts/chatContext/index.js +25 -25
  110. package/dist/contexts/enviveConfigContext/index.cjs +4 -4
  111. package/dist/contexts/enviveConfigContext/index.d.cts +3 -3
  112. package/dist/contexts/enviveConfigContext/index.d.ts +3 -3
  113. package/dist/contexts/enviveConfigContext/index.js +4 -4
  114. package/dist/contexts/enviveCssContext/index.cjs +15 -15
  115. package/dist/contexts/enviveCssContext/index.js +15 -15
  116. package/dist/contexts/featureFlagContext/index.cjs +6 -6
  117. package/dist/contexts/featureFlagContext/index.d.cts +3 -3
  118. package/dist/contexts/featureFlagContext/index.d.ts +3 -3
  119. package/dist/contexts/featureFlagContext/index.js +6 -6
  120. package/dist/contexts/featureFlagServiceContext/index.cjs +3 -3
  121. package/dist/contexts/featureFlagServiceContext/index.d.cts +4 -4
  122. package/dist/contexts/featureFlagServiceContext/index.d.ts +4 -4
  123. package/dist/contexts/featureFlagServiceContext/index.js +3 -3
  124. package/dist/contexts/graphqlContext/index.cjs +11 -11
  125. package/dist/contexts/graphqlContext/index.d.cts +13 -12
  126. package/dist/contexts/graphqlContext/index.d.ts +13 -12
  127. package/dist/contexts/graphqlContext/index.js +11 -11
  128. package/dist/contexts/localStorageContext/index.cjs +2 -2
  129. package/dist/contexts/localStorageContext/index.js +2 -2
  130. package/dist/contexts/newOrgConfigContext/index.cjs +14 -14
  131. package/dist/contexts/newOrgConfigContext/index.d.cts +14 -13
  132. package/dist/contexts/newOrgConfigContext/index.d.ts +14 -13
  133. package/dist/contexts/newOrgConfigContext/index.js +14 -14
  134. package/dist/contexts/searchContext/index.cjs +18 -18
  135. package/dist/contexts/searchContext/index.d.cts +1 -1
  136. package/dist/contexts/searchContext/index.d.ts +1 -1
  137. package/dist/contexts/searchContext/index.js +18 -18
  138. package/dist/contexts/sessionStorageContext/index.cjs +2 -2
  139. package/dist/contexts/sessionStorageContext/index.js +2 -2
  140. package/dist/contexts/shopifyUrlContext/index.cjs +2 -2
  141. package/dist/contexts/shopifyUrlContext/index.d.cts +3 -3
  142. package/dist/contexts/shopifyUrlContext/index.d.ts +3 -3
  143. package/dist/contexts/shopifyUrlContext/index.js +2 -2
  144. package/dist/contexts/systemSettingsContext/index.cjs +4 -4
  145. package/dist/contexts/systemSettingsContext/index.d.cts +16 -15
  146. package/dist/contexts/systemSettingsContext/index.d.ts +16 -15
  147. package/dist/contexts/systemSettingsContext/index.js +4 -4
  148. package/dist/contexts/types.cjs +1 -1
  149. package/dist/contexts/types.d.cts +3 -3
  150. package/dist/contexts/types.d.ts +3 -3
  151. package/dist/contexts/types.js +1 -1
  152. package/dist/contexts/userIdentityContext/index.cjs +20 -20
  153. package/dist/contexts/userIdentityContext/index.d.cts +1 -1
  154. package/dist/contexts/userIdentityContext/index.d.ts +1 -1
  155. package/dist/contexts/userIdentityContext/index.js +20 -20
  156. package/dist/{enviveConfig-BlIkxiAF.js → enviveConfig-DV8F12B9.js} +3 -3
  157. package/dist/{enviveConfig-B42OJ8bK.cjs → enviveConfig-DZHdtLsQ.cjs} +3 -3
  158. package/dist/{enviveConfigContext-1_EivtCa.js → enviveConfigContext-BS7aNop5.js} +3 -3
  159. package/dist/{enviveConfigContext-Y1ahEAMe.cjs → enviveConfigContext-CTcHUIFP.cjs} +3 -3
  160. package/dist/{featureFlagServiceContext-D3Ge8GH5.cjs → featureFlagServiceContext-CJyYItqu.cjs} +3 -3
  161. package/dist/{featureFlagServiceContext-C5U0bshi.d.ts → featureFlagServiceContext-CpxlOkI9.d.ts} +2 -2
  162. package/dist/{featureFlagServiceContext-CAPrb4e_.js → featureFlagServiceContext-FBM6DdMJ.js} +3 -3
  163. package/dist/{featureFlagServiceContext-CiKWV306.d.cts → featureFlagServiceContext-p5UBwPM3.d.cts} +2 -2
  164. package/dist/{featureGates-D4Me_IZH.js → featureGates-KEwAL8p_.js} +1 -1
  165. package/dist/{featureGates-Bt_Y3kZ7.cjs → featureGates-qU_ulhpC.cjs} +1 -1
  166. package/dist/{frontendConfig-BiD1-j48.d.ts → frontendConfig-Cawh5iqv.d.ts} +6 -3
  167. package/dist/{frontendConfig-tVg0hsWZ.d.cts → frontendConfig-iZipB5FG.d.cts} +6 -3
  168. package/dist/graphql-CkxgqsXP.js +48 -0
  169. package/dist/graphql-i3dtpVTl.cjs +71 -0
  170. package/dist/{graphqlContext-Bf3E-V2T.d.cts → graphqlContext-BeyKU1Dr.d.cts} +2 -2
  171. package/dist/{graphqlContext-CpwAvnro.cjs → graphqlContext-CVbYIftg.cjs} +6 -6
  172. package/dist/{graphqlContext-CDeKzb46.d.ts → graphqlContext-DgkS-UX1.d.ts} +4 -4
  173. package/dist/{graphqlContext-dyWNSWNv.js → graphqlContext-DouNZbYo.js} +5 -5
  174. package/dist/hooks/AmplitudeOperations/index.cjs +18 -18
  175. package/dist/hooks/AmplitudeOperations/index.d.cts +1 -1
  176. package/dist/hooks/AmplitudeOperations/index.d.ts +1 -1
  177. package/dist/hooks/AmplitudeOperations/index.js +18 -18
  178. package/dist/hooks/AppDetails/index.cjs +15 -15
  179. package/dist/hooks/AppDetails/index.d.cts +12 -11
  180. package/dist/hooks/AppDetails/index.d.ts +12 -11
  181. package/dist/hooks/AppDetails/index.js +15 -15
  182. package/dist/hooks/CdnOperations/index.cjs +4 -4
  183. package/dist/hooks/CdnOperations/index.js +4 -4
  184. package/dist/hooks/ChatToggle/index.cjs +18 -18
  185. package/dist/hooks/ChatToggle/index.d.cts +1 -1
  186. package/dist/hooks/ChatToggle/index.d.ts +1 -1
  187. package/dist/hooks/ChatToggle/index.js +18 -18
  188. package/dist/hooks/ChatToggleAnalytics/index.cjs +19 -19
  189. package/dist/hooks/ChatToggleAnalytics/index.d.cts +1 -1
  190. package/dist/hooks/ChatToggleAnalytics/index.d.ts +1 -1
  191. package/dist/hooks/ChatToggleAnalytics/index.js +19 -19
  192. package/dist/hooks/CustomerSupportHandoff/index.cjs +1 -1
  193. package/dist/hooks/CustomerSupportHandoff/index.js +1 -1
  194. package/dist/hooks/Debounce/index.cjs +20 -2
  195. package/dist/hooks/Debounce/index.js +18 -2
  196. package/dist/hooks/ElementObserver/index.d.cts +1 -1
  197. package/dist/hooks/ElementObserver/index.d.ts +1 -1
  198. package/dist/hooks/GrabAndScroll/index.d.ts +2 -2
  199. package/dist/hooks/GraphQLConfig/index.cjs +12 -12
  200. package/dist/hooks/GraphQLConfig/index.d.cts +13 -12
  201. package/dist/hooks/GraphQLConfig/index.d.ts +13 -12
  202. package/dist/hooks/GraphQLConfig/index.js +12 -12
  203. package/dist/hooks/IdentifyUser/index.cjs +20 -20
  204. package/dist/hooks/IdentifyUser/index.js +20 -20
  205. package/dist/hooks/ImageResolver/index.cjs +10 -10
  206. package/dist/hooks/ImageResolver/index.js +10 -10
  207. package/dist/hooks/LocalStorageOperations/index.cjs +2 -2
  208. package/dist/hooks/LocalStorageOperations/index.js +2 -2
  209. package/dist/hooks/MessageFilter/index.cjs +8 -8
  210. package/dist/hooks/MessageFilter/index.d.cts +12 -11
  211. package/dist/hooks/MessageFilter/index.d.ts +12 -11
  212. package/dist/hooks/MessageFilter/index.js +8 -8
  213. package/dist/hooks/NewOrgConfig/index.cjs +15 -15
  214. package/dist/hooks/NewOrgConfig/index.d.cts +14 -13
  215. package/dist/hooks/NewOrgConfig/index.d.ts +14 -13
  216. package/dist/hooks/NewOrgConfig/index.js +15 -15
  217. package/dist/hooks/Search/index.cjs +323 -152
  218. package/dist/hooks/Search/index.d.cts +21 -17
  219. package/dist/hooks/Search/index.d.ts +21 -17
  220. package/dist/hooks/Search/index.js +323 -153
  221. package/dist/hooks/SearchOperations/index.cjs +18 -18
  222. package/dist/hooks/SearchOperations/index.d.cts +1 -1
  223. package/dist/hooks/SearchOperations/index.d.ts +1 -1
  224. package/dist/hooks/SearchOperations/index.js +18 -18
  225. package/dist/hooks/SessionStorageOperations/index.cjs +2 -2
  226. package/dist/hooks/SessionStorageOperations/index.js +2 -2
  227. package/dist/hooks/ShopifyUrlOperations/index.cjs +2 -2
  228. package/dist/hooks/ShopifyUrlOperations/index.d.cts +5 -5
  229. package/dist/hooks/ShopifyUrlOperations/index.d.ts +5 -5
  230. package/dist/hooks/ShopifyUrlOperations/index.js +2 -2
  231. package/dist/hooks/SystemSettingsContext/index.cjs +5 -5
  232. package/dist/hooks/SystemSettingsContext/index.d.cts +12 -11
  233. package/dist/hooks/SystemSettingsContext/index.d.ts +14 -13
  234. package/dist/hooks/SystemSettingsContext/index.js +5 -5
  235. package/dist/hooks/TrackComponentVisibleEvent/index.cjs +17 -17
  236. package/dist/hooks/TrackComponentVisibleEvent/index.d.cts +2 -2
  237. package/dist/hooks/TrackComponentVisibleEvent/index.d.ts +2 -2
  238. package/dist/hooks/TrackComponentVisibleEvent/index.js +17 -17
  239. package/dist/hooks/UpdateAnalyticsProps/index.cjs +16 -16
  240. package/dist/hooks/UpdateAnalyticsProps/index.js +16 -16
  241. package/dist/hooks/utils.d.cts +12 -11
  242. package/dist/hooks/utils.d.ts +12 -11
  243. package/dist/{index-B6xpW8RG.d.ts → index--9_c4tze.d.ts} +1 -1
  244. package/dist/index-BEpDGqnz.d.cts +41 -0
  245. package/dist/{index-D31m6bPU.d.ts → index-BKvFVPUX.d.ts} +1 -1
  246. package/dist/{index-VwfWqyR_.d.ts → index-BNHIIgYk.d.ts} +1 -1
  247. package/dist/index-BUDrAxnl.d.ts +673 -0
  248. package/dist/{index-DzbkQtaK.d.cts → index-CCboEuTO.d.cts} +1 -1
  249. package/dist/{index-wFHfdr6p.d.ts → index-CMJM-3zV.d.ts} +5 -5
  250. package/dist/{index-FQjyuD3D.d.cts → index-COXkY78t.d.cts} +1 -1
  251. package/dist/{index--uHjE7L8.d.ts → index-D7htGSQC.d.ts} +1 -1
  252. package/dist/index-DM_5fh8c.d.ts +101 -0
  253. package/dist/index-DU7uw0ba.d.cts +101 -0
  254. package/dist/{index-Da1s8h5C.d.cts → index-DZtnHhlr.d.cts} +1 -1
  255. package/dist/{index-Bq39XSmY.d.cts → index-DpJzjjpi.d.cts} +34 -34
  256. package/dist/{index-DSRs6N6J.d.ts → index-Dtw-hJdt.d.ts} +1 -1
  257. package/dist/index-Dy3TTIOm.d.cts +673 -0
  258. package/dist/index-ErVcwUnR.d.ts +41 -0
  259. package/dist/{index-Cyq5HiC0.d.cts → index-OkKEOL6H.d.cts} +1 -1
  260. package/dist/{index-9NE86em3.d.cts → index-hAqp0oYb.d.cts} +1 -1
  261. package/dist/interceptors/index.d.cts +13 -12
  262. package/dist/interceptors/index.d.ts +13 -12
  263. package/dist/interceptors/types.d.cts +12 -11
  264. package/dist/interceptors/types.d.ts +12 -11
  265. package/dist/{localStorageContext-DAOJ4be4.js → localStorageContext-CqcSvg2H.js} +2 -2
  266. package/dist/{localStorageContext-C5giszHn.cjs → localStorageContext-DiLfSsqL.cjs} +2 -2
  267. package/dist/{locators-C2fWd-74.js → locators-BMQGmGLq.js} +1 -1
  268. package/dist/{locators-Cx3q6Z_h.cjs → locators-DxYdak1F.cjs} +1 -1
  269. package/dist/{logger-0D_8Ip2L.cjs → logger-TBIl4uIH.cjs} +1 -1
  270. package/dist/{logger-Co0IA3k5.js → logger-W3lqg-4b.js} +1 -1
  271. package/dist/models-CWOgrLCm.js +1284 -0
  272. package/dist/models-DqdLOi2I.cjs +1519 -0
  273. package/dist/{newOrgConfigContext-BMvcqPzD.cjs → newOrgConfigContext-BIDz4ZuO.cjs} +4 -4
  274. package/dist/{newOrgConfigContext-DOdUxlOE.d.cts → newOrgConfigContext-CJI3tsVV.d.cts} +2 -2
  275. package/dist/{newOrgConfigContext-BVyJExeW.d.ts → newOrgConfigContext-CKn7B2rj.d.ts} +2 -2
  276. package/dist/{newOrgConfigContext-6mlrvr1w.js → newOrgConfigContext-u_9UPNcX.js} +4 -4
  277. package/dist/{nodeSelector-DYhDUi7v.d.ts → nodeSelector-B5NfnUHv.d.ts} +1 -1
  278. package/dist/{nodeSelector-B3bPtEjX.d.cts → nodeSelector-vKB44CDB.d.cts} +1 -1
  279. package/dist/{orgAnalyticsConfig-Bm23fw4s.cjs → orgAnalyticsConfig-CGEQtAFs.cjs} +1 -1
  280. package/dist/{orgAnalyticsConfig-CpBmga08.js → orgAnalyticsConfig-i4jozLBB.js} +1 -1
  281. package/dist/responseGenerics-D9bS-Dd6.d.ts +148 -0
  282. package/dist/{index-Cx9e-fRi.d.ts → responseGenerics-DWLV09cQ.d.cts} +4 -40
  283. package/dist/{search-y-ioX5Mz.d.cts → search-6RrxBXD6.d.cts} +1 -1
  284. package/dist/{search-D-UfTjB7.cjs → search-CTVX9gC6.cjs} +2 -2
  285. package/dist/{search-B1OtJe8Z.d.ts → search-DrJiCT7d.d.ts} +1 -1
  286. package/dist/{search-yawhMv22.js → search-NgNrXNS9.js} +2 -2
  287. package/dist/{search-filter-types-BxaNSLs_.d.cts → search-filter-types-BItKtezf.d.cts} +1 -1
  288. package/dist/{search-filter-types-OI9zH3E_.d.ts → search-filter-types-CGFhksO3.d.ts} +1 -1
  289. package/dist/{searchContext-CFuwIIW-.cjs → searchContext-CnDXkawZ.cjs} +6 -6
  290. package/dist/{searchContext-CiqOqTJL.js → searchContext-DtRmshTA.js} +6 -6
  291. package/dist/{sessionStorageContext-BmCW091C.cjs → sessionStorageContext-1Ks_d4Z0.cjs} +2 -2
  292. package/dist/{sessionStorageContext-CNxkqJi1.js → sessionStorageContext-CDcl7NVl.js} +2 -2
  293. package/dist/{shopifyUrlContext-aZMwCfbJ.cjs → shopifyUrlContext-CxjV3qvH.cjs} +2 -2
  294. package/dist/{shopifyUrlContext-BXbI0PIG.js → shopifyUrlContext-D2btP_lY.js} +2 -2
  295. package/dist/{spiffyWidgets-CvEJIuJx.d.ts → spiffyWidgets-CR6F7FRE.d.ts} +1 -1
  296. package/dist/{spiffyWidgets-BuS00VaQ.d.cts → spiffyWidgets-eNbU1gMc.d.cts} +1 -1
  297. package/dist/{systemSettingsContext-SozpUezn.cjs → systemSettingsContext-BejoGzzB.cjs} +2 -2
  298. package/dist/{systemSettingsContext-kz6yyiFF.js → systemSettingsContext-C4dtZ0uZ.js} +2 -2
  299. package/dist/{test-types-DRhqHXw-.d.ts → test-types-BEml_bm3.d.ts} +1 -1
  300. package/dist/{test-types-ThQiO_cc.d.cts → test-types-Dsu8RJZu.d.cts} +1 -1
  301. package/dist/types/index.d.cts +2 -2
  302. package/dist/types/index.d.ts +2 -2
  303. package/dist/{types-r0Z6CwyF.d.ts → types-4LQ7LUCk.d.ts} +2 -2
  304. package/dist/types-BegmH0S1.d.ts +60 -0
  305. package/dist/types-BuvXXGxE.cjs +1 -1
  306. package/dist/types-CtUb63bt.js +76 -0
  307. package/dist/{types-zQGBI-Yo.d.cts → types-DFsSqmWx.d.cts} +2 -2
  308. package/dist/types-DWorwfS-.d.cts +60 -0
  309. package/dist/types-DXnG1tV0.js +1 -1
  310. package/dist/types-UUvB6h05.cjs +106 -0
  311. package/dist/types.d.cts +3 -3
  312. package/dist/types.d.ts +3 -3
  313. package/dist/{unsupportedProductExceptions-B4f9aLjr.cjs → unsupportedProductExceptions-B0yx2bHK.cjs} +1 -1
  314. package/dist/{unsupportedProductExceptions-DlmraJm8.js → unsupportedProductExceptions-Cs66ngs3.js} +1 -1
  315. package/dist/{urlsParser-DhcEZLc_.cjs → urlsParser-COzMdJaX.cjs} +1 -1
  316. package/dist/{urlsParser-DLCzibqU.js → urlsParser-DxjoLj98.js} +1 -1
  317. package/dist/{useAmplitudeOperations-D0nvIYlt.cjs → useAmplitudeOperations-BJXD9v2u.cjs} +2 -2
  318. package/dist/{useAmplitudeOperations-Dhks3PgF.js → useAmplitudeOperations-Dym0Ker8.js} +2 -2
  319. package/dist/{useAppDetails-qyaQIbWE.js → useAppDetails-Dmh16bWE.js} +4 -4
  320. package/dist/{useAppDetails-B9sGmpJ3.cjs → useAppDetails-DsAZ1xQn.cjs} +4 -4
  321. package/dist/{useGraphQLConfig-CgKEfVYc.cjs → useGraphQLConfig-B3DlwmGg.cjs} +2 -2
  322. package/dist/{useGraphQLConfig-BccQUaeW.js → useGraphQLConfig-DSRaDTdT.js} +2 -2
  323. package/dist/{userIdentityContext-BKLedN4R.d.ts → userIdentityContext-C6kApbuk.d.ts} +1 -1
  324. package/dist/userIdentityContext-DF3atBFE.js +119 -0
  325. package/dist/userIdentityContext-DpQTduhF.cjs +136 -0
  326. package/dist/{userIdentityContext-D2oFVFzo.d.cts → userIdentityContext-kU1PIo8K.d.cts} +1 -1
  327. package/dist/{utils-DFPt3FSw.js → utils-B7KTAEmV.js} +4 -4
  328. package/dist/{utils-BhyZiDrE.d.ts → utils-BRkGP1eb.d.ts} +1 -1
  329. package/dist/{utils-B7PAzB_M.d.cts → utils-CBD4g2Nc.d.cts} +4 -4
  330. package/dist/{utils-C6imnLBo.cjs → utils-CDw74BCO.cjs} +1 -1
  331. package/dist/{utils-Cazq8Q3q.cjs → utils-CcC2jZRi.cjs} +4 -4
  332. package/dist/{utils-B3x_9JTY.d.cts → utils-DCrwX6FT.d.cts} +1 -1
  333. package/dist/{utils-C4ci_t0-.js → utils-DIvMgPe8.js} +1 -1
  334. package/dist/{utils-B1v0iXs3.d.ts → utils-QKFAbPT6.d.ts} +4 -4
  335. package/package.json +7 -2
  336. package/src/application/commerce-api.ts +2 -0
  337. package/src/application/models/graphql/index.ts +1 -0
  338. package/src/atoms/app/index.ts +1 -1
  339. package/src/atoms/search/productRetrievalAPI.ts +70 -0
  340. package/src/atoms/search/productRetrievalAdapter.ts +25 -0
  341. package/src/atoms/search/types.ts +13 -0
  342. package/src/contexts/amplitudeContext/__tests__/amplitudeContext.test.tsx +525 -0
  343. package/src/contexts/amplitudeContext/amplitudeContext.tsx +5 -2
  344. package/src/contexts/graphqlContext/__tests__/graphqlContext.test.tsx +790 -0
  345. package/src/contexts/localStorageContext/__tests__/localStorageContext.test.tsx +775 -0
  346. package/src/contexts/newOrgConfigContext/__tests__/newOrgConfigContext.test.tsx +495 -0
  347. package/src/contexts/searchContext/__tests__/searchContext.test.tsx +806 -0
  348. package/src/contexts/systemSettingsContext/__tests__/systemSettingsContext.test.tsx +506 -0
  349. package/src/contexts/types.ts +3 -0
  350. package/src/contexts/userIdentityContext/userIdentityContext.tsx +7 -5
  351. package/src/hooks/Search/useRecommendedProducts.ts +48 -0
  352. package/src/hooks/Search/useSearch.tsx +89 -182
  353. package/src/hooks/Search/useSearchInput.ts +263 -0
  354. package/src/types/FilterAttribute.ts +35 -0
  355. package/dist/amplitudeContext-DOqL2Vn8.js +0 -264
  356. package/dist/amplitudeContext-ZTQMvVTV.cjs +0 -286
  357. package/dist/graphql-OkhsP4ir.js +0 -36
  358. package/dist/graphql-l4dQrsA6.cjs +0 -53
  359. package/dist/index-Bmub8e38.d.cts +0 -98
  360. package/dist/index-CG3P8xE1.d.cts +0 -676
  361. package/dist/index-CiWEYzXl.d.cts +0 -184
  362. package/dist/index-D2VaMPA3.d.ts +0 -98
  363. package/dist/index-fUsw_Mea.d.ts +0 -676
  364. package/dist/models-CkJ-wg9Q.cjs +0 -1537
  365. package/dist/models-UHOY0ak5.js +0 -1296
  366. package/dist/types-BwNrLPSZ.cjs +0 -106
  367. package/dist/types-CKMMb_gX.d.cts +0 -51
  368. package/dist/types-D3uOF0Oy.js +0 -76
  369. package/dist/types-DZPuBnHe.d.ts +0 -51
  370. package/dist/useDebounce-BZDtUAQ8.cjs +0 -26
  371. package/dist/useDebounce-ueblXZI-.js +0 -19
  372. package/dist/userIdentityContext-Cb6lLv6t.cjs +0 -132
  373. package/dist/userIdentityContext-O_DHHPTN.js +0 -115
  374. /package/dist/{AmplitudeOperations-ChZWcSsc.js → AmplitudeOperations-C-ieCm9m.js} +0 -0
  375. /package/dist/{AmplitudeOperations-JggIc1zD.cjs → AmplitudeOperations-p7APchq9.cjs} +0 -0
  376. /package/dist/{index-RcVcRKH7.d.cts → index-A0HvA68Y.d.cts} +0 -0
  377. /package/dist/{index-mHc9_XC3.d.ts → index-DNVvRcKu.d.ts} +0 -0
@@ -0,0 +1,790 @@
1
+ import React from "react";
2
+ import { render, screen, waitFor, act } from "@testing-library/react";
3
+ import { Provider } from "jotai";
4
+ import { useAtomValue } from "jotai";
5
+ import { GraphQLProvider, useGraphQLClient } from "../graphqlContext";
6
+ import { EnviveConfigProvider } from "src/contexts/enviveConfigContext/enviveConfigContext";
7
+ import {
8
+ orgLevelApiKeyAtom,
9
+ baseUrlAtom,
10
+ } from "src/atoms/envive/enviveConfig";
11
+ import Logger from "src/application/logging/logger";
12
+ import { getMerchantOrgIdQuery } from "src/application/models/graphql/queries/getMerchantOrgIdQuery";
13
+
14
+ // Mock the Logger to avoid console output in tests
15
+ vi.spyOn(Logger, "logDebug").mockImplementation(() => {});
16
+ vi.spyOn(Logger, "logWarn").mockImplementation(() => {});
17
+ vi.spyOn(Logger, "logError").mockImplementation(() => {});
18
+
19
+ // Mock fetch globally
20
+ global.fetch = vi.fn();
21
+
22
+ // Component that uses the useGraphQLClient hook
23
+ const MockGraphQLComponent: React.FC = () => {
24
+ const client = useGraphQLClient();
25
+
26
+ return (
27
+ <div data-testid="graphql-component">
28
+ <div data-testid="is-ready">{client.isReady.toString()}</div>
29
+ <button
30
+ data-testid="execute-query-btn"
31
+ onClick={async () => {
32
+ try {
33
+ const result = await client.executeQuery("query { test }");
34
+ (window as any).lastQueryResult = result;
35
+ } catch (error) {
36
+ (window as any).lastQueryError = error;
37
+ }
38
+ }}
39
+ >
40
+ Execute Query
41
+ </button>
42
+ <button
43
+ data-testid="get-org-id-btn"
44
+ onClick={async () => {
45
+ try {
46
+ const orgId = await client.getOrgId();
47
+ (window as any).lastOrgId = orgId;
48
+ } catch (error) {
49
+ (window as any).lastOrgIdError = error;
50
+ }
51
+ }}
52
+ >
53
+ Get Org ID
54
+ </button>
55
+ <button
56
+ data-testid="get-config-btn"
57
+ onClick={async () => {
58
+ try {
59
+ const config = await client.getColorsAndFrontendConfig();
60
+ (window as any).lastConfig = config;
61
+ } catch (error) {
62
+ (window as any).lastConfigError = error;
63
+ }
64
+ }}
65
+ >
66
+ Get Config
67
+ </button>
68
+ </div>
69
+ );
70
+ };
71
+
72
+ // Component that reads atoms directly to verify they're set
73
+ const AtomReaderComponent: React.FC = () => {
74
+ const apiKey = useAtomValue(orgLevelApiKeyAtom);
75
+ const baseUrl = useAtomValue(baseUrlAtom);
76
+
77
+ return (
78
+ <div data-testid="atom-reader">
79
+ <div data-testid="atom-api-key">{apiKey || "not-set"}</div>
80
+ <div data-testid="atom-base-url">{baseUrl || "not-set"}</div>
81
+ </div>
82
+ );
83
+ };
84
+
85
+ // Wrapper component to ensure providers are in correct order
86
+ const TestWrapper: React.FC<{
87
+ children: React.ReactNode;
88
+ orgLevelApiKey?: string;
89
+ baseUrl?: string;
90
+ }> = ({ children, orgLevelApiKey, baseUrl }) => {
91
+ return (
92
+ <Provider>
93
+ <EnviveConfigProvider
94
+ identifyingPrefix="test"
95
+ orgLevelApiKey={orgLevelApiKey}
96
+ baseUrl={baseUrl}
97
+ >
98
+ <GraphQLProvider>{children}</GraphQLProvider>
99
+ </EnviveConfigProvider>
100
+ </Provider>
101
+ );
102
+ };
103
+
104
+ describe("GraphQLProvider", () => {
105
+ beforeEach(() => {
106
+ vi.clearAllMocks();
107
+ (global.fetch as any).mockClear();
108
+ // Clear any stored results
109
+ delete (window as any).lastQueryResult;
110
+ delete (window as any).lastQueryError;
111
+ delete (window as any).lastOrgId;
112
+ delete (window as any).lastOrgIdError;
113
+ delete (window as any).lastConfig;
114
+ delete (window as any).lastConfigError;
115
+ });
116
+
117
+ describe("Provider Integration with Jotai Store", () => {
118
+ it("should read atoms correctly when provider is mounted", async () => {
119
+ const testConfig = {
120
+ orgLevelApiKey: "test-api-key",
121
+ baseUrl: "https://test-api.example.com",
122
+ };
123
+
124
+ render(
125
+ <TestWrapper {...testConfig}>
126
+ <AtomReaderComponent />
127
+ </TestWrapper>
128
+ );
129
+
130
+ await waitFor(() => {
131
+ expect(screen.getByTestId("atom-api-key")).toHaveTextContent(
132
+ testConfig.orgLevelApiKey
133
+ );
134
+ });
135
+
136
+ expect(screen.getByTestId("atom-base-url")).toHaveTextContent(
137
+ testConfig.baseUrl
138
+ );
139
+ });
140
+ });
141
+
142
+ describe("useGraphQLClient Hook Integration", () => {
143
+ it("should provide GraphQL context through useGraphQLClient hook", async () => {
144
+ render(
145
+ <TestWrapper
146
+ orgLevelApiKey="test-key"
147
+ baseUrl="https://test-api.example.com"
148
+ >
149
+ <MockGraphQLComponent />
150
+ </TestWrapper>
151
+ );
152
+
153
+ await waitFor(() => {
154
+ expect(screen.getByTestId("is-ready")).toHaveTextContent("true");
155
+ });
156
+
157
+ // Verify all context methods are accessible
158
+ expect(screen.getByTestId("graphql-component")).toBeInTheDocument();
159
+ });
160
+
161
+ it("should throw error when used outside of GraphQLProvider", () => {
162
+ const consoleSpy = vi
163
+ .spyOn(console, "error")
164
+ .mockImplementation(() => {});
165
+
166
+ const TestComponent: React.FC = () => {
167
+ try {
168
+ useGraphQLClient();
169
+ return <div data-testid="no-error">No Error</div>;
170
+ } catch (error: any) {
171
+ return <div data-testid="error">{error.message}</div>;
172
+ }
173
+ };
174
+
175
+ render(
176
+ <Provider>
177
+ <TestComponent />
178
+ </Provider>
179
+ );
180
+
181
+ expect(screen.getByTestId("error")).toHaveTextContent(
182
+ "useGraphQLClient must be used within a GraphQLProvider"
183
+ );
184
+
185
+ consoleSpy.mockRestore();
186
+ });
187
+ });
188
+
189
+ describe("isReady State", () => {
190
+ it("should be false when orgLevelApiKey is missing", async () => {
191
+ render(
192
+ <TestWrapper baseUrl="https://test-api.example.com">
193
+ <MockGraphQLComponent />
194
+ </TestWrapper>
195
+ );
196
+
197
+ await waitFor(() => {
198
+ expect(screen.getByTestId("is-ready")).toHaveTextContent("false");
199
+ });
200
+ });
201
+
202
+ it("should be true when baseUrl is missing but has default value", async () => {
203
+ // Note: baseUrlAtom has a default value, so isReady will be true
204
+ // even if baseUrl is not explicitly provided
205
+ render(
206
+ <TestWrapper orgLevelApiKey="test-key">
207
+ <MockGraphQLComponent />
208
+ </TestWrapper>
209
+ );
210
+
211
+ await waitFor(() => {
212
+ expect(screen.getByTestId("is-ready")).toHaveTextContent("true");
213
+ });
214
+ });
215
+
216
+ it("should be true when all required dependencies are present", async () => {
217
+ render(
218
+ <TestWrapper
219
+ orgLevelApiKey="test-key"
220
+ baseUrl="https://test-api.example.com"
221
+ >
222
+ <MockGraphQLComponent />
223
+ </TestWrapper>
224
+ );
225
+
226
+ await waitFor(() => {
227
+ expect(screen.getByTestId("is-ready")).toHaveTextContent("true");
228
+ });
229
+ });
230
+ });
231
+
232
+ describe("executeQuery", () => {
233
+ it("should execute a GraphQL query successfully", async () => {
234
+ const mockResponse = {
235
+ data: { test: "result" },
236
+ };
237
+
238
+ (global.fetch as any).mockResolvedValueOnce({
239
+ ok: true,
240
+ json: async () => mockResponse,
241
+ });
242
+
243
+ render(
244
+ <TestWrapper
245
+ orgLevelApiKey="test-key"
246
+ baseUrl="https://test-api.example.com"
247
+ >
248
+ <MockGraphQLComponent />
249
+ </TestWrapper>
250
+ );
251
+
252
+ await waitFor(() => {
253
+ expect(screen.getByTestId("is-ready")).toHaveTextContent("true");
254
+ });
255
+
256
+ await act(async () => {
257
+ screen.getByTestId("execute-query-btn").click();
258
+ });
259
+
260
+ await waitFor(() => {
261
+ expect((window as any).lastQueryResult).toEqual(mockResponse.data);
262
+ });
263
+
264
+ expect(global.fetch).toHaveBeenCalledWith(
265
+ "https://test-api.example.com/v1/graphql",
266
+ {
267
+ method: "POST",
268
+ headers: {
269
+ "Content-Type": "application/json",
270
+ Authorization: "Bearer test-key",
271
+ },
272
+ body: JSON.stringify({ query: "query { test }", variables: undefined }),
273
+ }
274
+ );
275
+ });
276
+
277
+ it("should execute a query with variables", async () => {
278
+ const mockResponse = {
279
+ data: { result: "success" },
280
+ };
281
+
282
+ (global.fetch as any).mockResolvedValueOnce({
283
+ ok: true,
284
+ json: async () => mockResponse,
285
+ });
286
+
287
+ const TestComponent: React.FC = () => {
288
+ const client = useGraphQLClient();
289
+ React.useEffect(() => {
290
+ if (client.isReady) {
291
+ client
292
+ .executeQuery("query Test($id: String)", { id: "123" })
293
+ .then((result) => {
294
+ (window as any).lastQueryResult = result;
295
+ });
296
+ }
297
+ }, [client]);
298
+
299
+ return <div>Test</div>;
300
+ };
301
+
302
+ render(
303
+ <TestWrapper
304
+ orgLevelApiKey="test-key"
305
+ baseUrl="https://test-api.example.com"
306
+ >
307
+ <TestComponent />
308
+ </TestWrapper>
309
+ );
310
+
311
+ await waitFor(() => {
312
+ expect((window as any).lastQueryResult).toEqual(mockResponse.data);
313
+ });
314
+
315
+ expect(global.fetch).toHaveBeenCalledWith(
316
+ "https://test-api.example.com/v1/graphql",
317
+ {
318
+ method: "POST",
319
+ headers: {
320
+ "Content-Type": "application/json",
321
+ Authorization: "Bearer test-key",
322
+ },
323
+ body: JSON.stringify({
324
+ query: "query Test($id: String)",
325
+ variables: { id: "123" },
326
+ }),
327
+ }
328
+ );
329
+ });
330
+
331
+ it("should throw error when client is not ready", async () => {
332
+ const TestComponent: React.FC = () => {
333
+ const client = useGraphQLClient();
334
+ React.useEffect(() => {
335
+ client
336
+ .executeQuery("query { test }")
337
+ .catch((error) => {
338
+ (window as any).lastQueryError = error;
339
+ });
340
+ }, [client]);
341
+
342
+ return <div>Test</div>;
343
+ };
344
+
345
+ render(
346
+ <TestWrapper baseUrl="https://test-api.example.com">
347
+ <TestComponent />
348
+ </TestWrapper>
349
+ );
350
+
351
+ await waitFor(() => {
352
+ expect((window as any).lastQueryError).toBeDefined();
353
+ expect((window as any).lastQueryError.message).toBe(
354
+ "GraphQL client not ready - missing apiKey or baseUrl"
355
+ );
356
+ });
357
+ });
358
+
359
+ it("should throw error when fetch fails", async () => {
360
+ (global.fetch as any).mockResolvedValueOnce({
361
+ ok: false,
362
+ statusText: "Internal Server Error",
363
+ });
364
+
365
+ render(
366
+ <TestWrapper
367
+ orgLevelApiKey="test-key"
368
+ baseUrl="https://test-api.example.com"
369
+ >
370
+ <MockGraphQLComponent />
371
+ </TestWrapper>
372
+ );
373
+
374
+ await waitFor(() => {
375
+ expect(screen.getByTestId("is-ready")).toHaveTextContent("true");
376
+ });
377
+
378
+ await act(async () => {
379
+ screen.getByTestId("execute-query-btn").click();
380
+ });
381
+
382
+ await waitFor(() => {
383
+ expect((window as any).lastQueryError).toBeDefined();
384
+ expect((window as any).lastQueryError.message).toContain(
385
+ "GraphQL request failed"
386
+ );
387
+ });
388
+ });
389
+
390
+ it("should throw error when GraphQL response contains errors", async () => {
391
+ const mockResponse = {
392
+ data: null,
393
+ errors: [{ message: "GraphQL error" }],
394
+ };
395
+
396
+ (global.fetch as any).mockResolvedValueOnce({
397
+ ok: true,
398
+ json: async () => mockResponse,
399
+ });
400
+
401
+ render(
402
+ <TestWrapper
403
+ orgLevelApiKey="test-key"
404
+ baseUrl="https://test-api.example.com"
405
+ >
406
+ <MockGraphQLComponent />
407
+ </TestWrapper>
408
+ );
409
+
410
+ await waitFor(() => {
411
+ expect(screen.getByTestId("is-ready")).toHaveTextContent("true");
412
+ });
413
+
414
+ await act(async () => {
415
+ screen.getByTestId("execute-query-btn").click();
416
+ });
417
+
418
+ await waitFor(() => {
419
+ expect((window as any).lastQueryError).toBeDefined();
420
+ expect((window as any).lastQueryError.message).toContain(
421
+ "GraphQL errors"
422
+ );
423
+ });
424
+ });
425
+ });
426
+
427
+ describe("getOrgId", () => {
428
+ it("should fetch and return org ID successfully", async () => {
429
+ const mockOrgId = "org-123";
430
+ const mockResponse = {
431
+ data: {
432
+ me: {
433
+ org: {
434
+ id: mockOrgId,
435
+ },
436
+ },
437
+ },
438
+ };
439
+
440
+ (global.fetch as any).mockResolvedValueOnce({
441
+ ok: true,
442
+ json: async () => mockResponse,
443
+ });
444
+
445
+ render(
446
+ <TestWrapper
447
+ orgLevelApiKey="test-key"
448
+ baseUrl="https://test-api.example.com"
449
+ >
450
+ <MockGraphQLComponent />
451
+ </TestWrapper>
452
+ );
453
+
454
+ await waitFor(() => {
455
+ expect(screen.getByTestId("is-ready")).toHaveTextContent("true");
456
+ });
457
+
458
+ await act(async () => {
459
+ screen.getByTestId("get-org-id-btn").click();
460
+ });
461
+
462
+ await waitFor(() => {
463
+ expect((window as any).lastOrgId).toBe(mockOrgId);
464
+ });
465
+
466
+ expect(global.fetch).toHaveBeenCalledWith(
467
+ "https://test-api.example.com/v1/graphql",
468
+ expect.objectContaining({
469
+ body: JSON.stringify({
470
+ query: getMerchantOrgIdQuery,
471
+ variables: undefined,
472
+ }),
473
+ })
474
+ );
475
+ });
476
+
477
+ it("should return undefined when org ID is not available", async () => {
478
+ const mockResponse = {
479
+ data: {
480
+ me: {
481
+ org: null,
482
+ },
483
+ },
484
+ };
485
+
486
+ (global.fetch as any).mockResolvedValueOnce({
487
+ ok: true,
488
+ json: async () => mockResponse,
489
+ });
490
+
491
+ render(
492
+ <TestWrapper
493
+ orgLevelApiKey="test-key"
494
+ baseUrl="https://test-api.example.com"
495
+ >
496
+ <MockGraphQLComponent />
497
+ </TestWrapper>
498
+ );
499
+
500
+ await waitFor(() => {
501
+ expect(screen.getByTestId("is-ready")).toHaveTextContent("true");
502
+ });
503
+
504
+ await act(async () => {
505
+ screen.getByTestId("get-org-id-btn").click();
506
+ });
507
+
508
+ await waitFor(() => {
509
+ expect((window as any).lastOrgId).toBeUndefined();
510
+ });
511
+ });
512
+
513
+ it("should return undefined when org.id is empty string", async () => {
514
+ const mockResponse = {
515
+ data: {
516
+ me: {
517
+ org: {
518
+ id: "",
519
+ },
520
+ },
521
+ },
522
+ };
523
+
524
+ (global.fetch as any).mockResolvedValueOnce({
525
+ ok: true,
526
+ json: async () => mockResponse,
527
+ });
528
+
529
+ render(
530
+ <TestWrapper
531
+ orgLevelApiKey="test-key"
532
+ baseUrl="https://test-api.example.com"
533
+ >
534
+ <MockGraphQLComponent />
535
+ </TestWrapper>
536
+ );
537
+
538
+ await waitFor(() => {
539
+ expect(screen.getByTestId("is-ready")).toHaveTextContent("true");
540
+ });
541
+
542
+ await act(async () => {
543
+ screen.getByTestId("get-org-id-btn").click();
544
+ });
545
+
546
+ await waitFor(() => {
547
+ expect((window as any).lastOrgId).toBeUndefined();
548
+ });
549
+ });
550
+ });
551
+
552
+ describe("getColorsAndFrontendConfig", () => {
553
+ it("should fetch and return colors and frontend config successfully", async () => {
554
+ const mockColorsConfig = {
555
+ accent_primary: "#FF0000",
556
+ accent_secondary: "#00FF00",
557
+ background_dark: "#000000",
558
+ };
559
+ const mockFrontendConfig = {
560
+ merchant_override_css: "test-css",
561
+ page_variants: [],
562
+ };
563
+
564
+ const mockResponse = {
565
+ data: {
566
+ me: {
567
+ getProductsConfigByVersion: {
568
+ colors: {
569
+ values: mockColorsConfig,
570
+ },
571
+ frontend: {
572
+ values: mockFrontendConfig,
573
+ },
574
+ },
575
+ },
576
+ },
577
+ };
578
+
579
+ (global.fetch as any).mockResolvedValueOnce({
580
+ ok: true,
581
+ json: async () => mockResponse,
582
+ });
583
+
584
+ render(
585
+ <TestWrapper
586
+ orgLevelApiKey="test-key"
587
+ baseUrl="https://test-api.example.com"
588
+ >
589
+ <MockGraphQLComponent />
590
+ </TestWrapper>
591
+ );
592
+
593
+ await waitFor(() => {
594
+ expect(screen.getByTestId("is-ready")).toHaveTextContent("true");
595
+ });
596
+
597
+ await act(async () => {
598
+ screen.getByTestId("get-config-btn").click();
599
+ });
600
+
601
+ await waitFor(() => {
602
+ const config = (window as any).lastConfig;
603
+ expect(config).toBeDefined();
604
+ expect(config.colorsConfig).toBeDefined();
605
+ expect(config.frontendConfig).toBeDefined();
606
+ });
607
+ });
608
+
609
+ it("should handle missing colors and frontend config gracefully", async () => {
610
+ const mockResponse = {
611
+ data: {
612
+ me: {
613
+ getProductsConfigByVersion: null,
614
+ },
615
+ },
616
+ };
617
+
618
+ (global.fetch as any).mockResolvedValueOnce({
619
+ ok: true,
620
+ json: async () => mockResponse,
621
+ });
622
+
623
+ render(
624
+ <TestWrapper
625
+ orgLevelApiKey="test-key"
626
+ baseUrl="https://test-api.example.com"
627
+ >
628
+ <MockGraphQLComponent />
629
+ </TestWrapper>
630
+ );
631
+
632
+ await waitFor(() => {
633
+ expect(screen.getByTestId("is-ready")).toHaveTextContent("true");
634
+ });
635
+
636
+ await act(async () => {
637
+ screen.getByTestId("get-config-btn").click();
638
+ });
639
+
640
+ await waitFor(() => {
641
+ const config = (window as any).lastConfig;
642
+ expect(config).toBeDefined();
643
+ expect(config.colorsConfig).toBeUndefined();
644
+ expect(config.frontendConfig).toBeUndefined();
645
+ });
646
+ });
647
+
648
+ it("should handle errors and return undefined configs", async () => {
649
+ const logErrorSpy = vi.spyOn(Logger, "logError");
650
+
651
+ (global.fetch as any).mockRejectedValueOnce(new Error("Network error"));
652
+
653
+ render(
654
+ <TestWrapper
655
+ orgLevelApiKey="test-key"
656
+ baseUrl="https://test-api.example.com"
657
+ >
658
+ <MockGraphQLComponent />
659
+ </TestWrapper>
660
+ );
661
+
662
+ await waitFor(() => {
663
+ expect(screen.getByTestId("is-ready")).toHaveTextContent("true");
664
+ });
665
+
666
+ await act(async () => {
667
+ screen.getByTestId("get-config-btn").click();
668
+ });
669
+
670
+ await waitFor(() => {
671
+ const config = (window as any).lastConfig;
672
+ expect(config).toBeDefined();
673
+ expect(config.colorsConfig).toBeUndefined();
674
+ expect(config.frontendConfig).toBeUndefined();
675
+ expect(logErrorSpy).toHaveBeenCalledWith(
676
+ "Error fetching graphql colors and frontend config",
677
+ expect.any(Error)
678
+ );
679
+ });
680
+ });
681
+
682
+ it("should transform snake_case to camelCase", async () => {
683
+ const mockColorsConfig = {
684
+ accent_primary: "#FF0000",
685
+ accent_secondary: "#00FF00",
686
+ };
687
+ const mockFrontendConfig = {
688
+ merchant_override_css: "test-css",
689
+ page_variants: [],
690
+ };
691
+
692
+ const mockResponse = {
693
+ data: {
694
+ me: {
695
+ getProductsConfigByVersion: {
696
+ colors: {
697
+ values: mockColorsConfig,
698
+ },
699
+ frontend: {
700
+ values: mockFrontendConfig,
701
+ },
702
+ },
703
+ },
704
+ },
705
+ };
706
+
707
+ (global.fetch as any).mockResolvedValueOnce({
708
+ ok: true,
709
+ json: async () => mockResponse,
710
+ });
711
+
712
+ const TestComponent: React.FC = () => {
713
+ const client = useGraphQLClient();
714
+ const [config, setConfig] = React.useState<any>(null);
715
+
716
+ React.useEffect(() => {
717
+ if (client.isReady) {
718
+ client.getColorsAndFrontendConfig().then(setConfig);
719
+ }
720
+ }, [client]);
721
+
722
+ return (
723
+ <div>
724
+ {config && (
725
+ <div data-testid="config-display">
726
+ <div data-testid="has-colors">
727
+ {config.colorsConfig ? "yes" : "no"}
728
+ </div>
729
+ <div data-testid="has-frontend">
730
+ {config.frontendConfig ? "yes" : "no"}
731
+ </div>
732
+ </div>
733
+ )}
734
+ </div>
735
+ );
736
+ };
737
+
738
+ render(
739
+ <TestWrapper
740
+ orgLevelApiKey="test-key"
741
+ baseUrl="https://test-api.example.com"
742
+ >
743
+ <TestComponent />
744
+ </TestWrapper>
745
+ );
746
+
747
+ await waitFor(() => {
748
+ expect(screen.getByTestId("has-colors")).toHaveTextContent("yes");
749
+ expect(screen.getByTestId("has-frontend")).toHaveTextContent("yes");
750
+ });
751
+ });
752
+ });
753
+
754
+ describe("Context Value Memoization", () => {
755
+ it("should maintain stable context value references", async () => {
756
+ let contextValue1: any;
757
+ let contextValue2: any;
758
+
759
+ const Component1: React.FC = () => {
760
+ const context = useGraphQLClient();
761
+ contextValue1 = context;
762
+ return <div>Component1</div>;
763
+ };
764
+
765
+ const Component2: React.FC = () => {
766
+ const context = useGraphQLClient();
767
+ contextValue2 = context;
768
+ return <div>Component2</div>;
769
+ };
770
+
771
+ render(
772
+ <TestWrapper
773
+ orgLevelApiKey="test-key"
774
+ baseUrl="https://test-api.example.com"
775
+ >
776
+ <Component1 />
777
+ <Component2 />
778
+ </TestWrapper>
779
+ );
780
+
781
+ await waitFor(() => {
782
+ expect(contextValue1).toBeDefined();
783
+ expect(contextValue2).toBeDefined();
784
+ // Both components should receive the same context instance
785
+ expect(contextValue1).toBe(contextValue2);
786
+ });
787
+ });
788
+ });
789
+ });
790
+