@envive-ai/react-hooks 0.3.1 → 0.3.3

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 (309) hide show
  1. package/dist/application/commerce-api.cjs +6 -4
  2. package/dist/application/commerce-api.js +7 -5
  3. package/dist/application/models/api/nextMessageRequest.d.cts +3 -1
  4. package/dist/application/models/api/nextMessageRequest.d.ts +3 -1
  5. package/dist/application/models/api/response.d.cts +1 -1
  6. package/dist/application/models/api/response.d.ts +1 -1
  7. package/dist/application/models/frontendConfig.d.cts +1 -1
  8. package/dist/application/models/frontendConfig.d.ts +1 -1
  9. package/dist/application/models/guards/api/isApiFormResponse.cjs +1 -1
  10. package/dist/application/models/guards/api/isApiFormResponse.js +1 -1
  11. package/dist/application/models/guards/api/isApiFormSubmittedResponseAttributes.cjs +1 -1
  12. package/dist/application/models/guards/api/isApiFormSubmittedResponseAttributes.js +1 -1
  13. package/dist/application/models/guards/api/isApiOrderResponseAttributes.cjs +2 -2
  14. package/dist/application/models/guards/api/isApiOrderResponseAttributes.js +2 -2
  15. package/dist/application/models/guards/api/isApiProductResponseAttributes.cjs +1 -1
  16. package/dist/application/models/guards/api/isApiProductResponseAttributes.js +1 -1
  17. package/dist/application/models/guards/api/isApiResponse.cjs +1 -1
  18. package/dist/application/models/guards/api/isApiResponse.js +1 -1
  19. package/dist/application/models/guards/api/isApiSearchEventAttributes.cjs +2 -2
  20. package/dist/application/models/guards/api/isApiSearchEventAttributes.js +2 -2
  21. package/dist/application/models/message.cjs +1 -1
  22. package/dist/application/models/message.d.cts +1 -1
  23. package/dist/application/models/message.d.ts +1 -1
  24. package/dist/application/models/message.js +1 -1
  25. package/dist/application/models/validators/validateGraphQLColorsConfig.cjs +2 -1
  26. package/dist/application/models/validators/validateGraphQLColorsConfig.js +2 -1
  27. package/dist/application/models/validators/validateGraphQLFrontendConfig.cjs +1 -1
  28. package/dist/application/models/validators/validateGraphQLFrontendConfig.d.cts +1 -1
  29. package/dist/application/models/validators/validateGraphQLFrontendConfig.d.ts +1 -1
  30. package/dist/application/models/validators/validateGraphQLFrontendConfig.js +1 -1
  31. package/dist/application/models/variantInfo/variantInfo.cjs +4 -1
  32. package/dist/application/models/variantInfo/variantInfo.d.cts +4 -1
  33. package/dist/application/models/variantInfo/variantInfo.d.ts +4 -1
  34. package/dist/application/models/variantInfo/variantInfo.js +4 -1
  35. package/dist/application/utils/analyticsUtils.cjs +2 -2
  36. package/dist/application/utils/analyticsUtils.js +2 -2
  37. package/dist/application/utils/domObserver.cjs +1 -1
  38. package/dist/application/utils/domObserver.js +1 -1
  39. package/dist/application/utils/elementObserver.cjs +1 -1
  40. package/dist/application/utils/elementObserver.d.cts +2 -2
  41. package/dist/application/utils/elementObserver.d.ts +2 -2
  42. package/dist/application/utils/elementObserver.js +1 -1
  43. package/dist/application/utils/mutationHelper.cjs +2 -2
  44. package/dist/application/utils/mutationHelper.js +2 -2
  45. package/dist/application/utils/nodeSelector.cjs +5 -2
  46. package/dist/application/utils/nodeSelector.js +5 -2
  47. package/dist/application/utils/stringUtils.cjs +1 -1
  48. package/dist/application/utils/stringUtils.js +1 -1
  49. package/dist/atoms/app/index.cjs +12 -1
  50. package/dist/atoms/app/index.d.cts +3 -2
  51. package/dist/atoms/app/index.d.ts +3 -2
  52. package/dist/atoms/app/index.js +13 -3
  53. package/dist/atoms/app/variant.cjs +2 -2
  54. package/dist/atoms/app/variant.d.cts +69 -5
  55. package/dist/atoms/app/variant.d.ts +69 -5
  56. package/dist/atoms/app/variant.js +2 -2
  57. package/dist/atoms/chat/chatState.d.cts +15 -15
  58. package/dist/atoms/chat/chatState.d.ts +15 -15
  59. package/dist/atoms/chat/form.d.cts +2 -2
  60. package/dist/atoms/chat/form.d.ts +2 -2
  61. package/dist/atoms/chat/index.cjs +1 -1
  62. package/dist/atoms/chat/index.d.cts +2 -2
  63. package/dist/atoms/chat/index.d.ts +3 -3
  64. package/dist/atoms/chat/index.js +1 -1
  65. package/dist/atoms/chat/lastMessage.d.cts +2 -2
  66. package/dist/atoms/chat/lastMessage.d.ts +2 -2
  67. package/dist/atoms/chat/messageQueue.cjs +1 -35
  68. package/dist/atoms/chat/messageQueue.js +2 -34
  69. package/dist/atoms/chat/performanceMetrics.d.cts +6 -6
  70. package/dist/atoms/chat/performanceMetrics.d.ts +6 -6
  71. package/dist/atoms/chat/renderedWidgetRefs.d.cts +2 -2
  72. package/dist/atoms/chat/replies.cjs +2 -2
  73. package/dist/atoms/chat/replies.d.cts +2 -2
  74. package/dist/atoms/chat/replies.d.ts +2 -2
  75. package/dist/atoms/chat/replies.js +2 -2
  76. package/dist/atoms/chat/suggestions.d.cts +2 -2
  77. package/dist/atoms/chat/suggestions.d.ts +2 -2
  78. package/dist/atoms/globalSearch/globalSearch.d.cts +6 -6
  79. package/dist/atoms/globalSearch/globalSearch.d.ts +5 -5
  80. package/dist/atoms/org/customerService.d.cts +7 -7
  81. package/dist/atoms/org/customerService.d.ts +6 -6
  82. package/dist/atoms/org/graphqlConfig.cjs +1 -1
  83. package/dist/atoms/org/graphqlConfig.d.cts +5 -5
  84. package/dist/atoms/org/graphqlConfig.d.ts +5 -5
  85. package/dist/atoms/org/graphqlConfig.js +1 -1
  86. package/dist/atoms/org/newOrgConfigAtom.d.cts +2 -2
  87. package/dist/atoms/org/newOrgConfigAtom.d.ts +2 -2
  88. package/dist/atoms/org/orgAnalyticsConfig.cjs +1 -1
  89. package/dist/atoms/org/orgAnalyticsConfig.d.cts +6 -6
  90. package/dist/atoms/org/orgAnalyticsConfig.d.ts +6 -6
  91. package/dist/atoms/org/orgAnalyticsConfig.js +1 -1
  92. package/dist/atoms/search/chatSearch.d.cts +17 -17
  93. package/dist/atoms/search/chatSearch.d.ts +17 -17
  94. package/dist/atoms/search/searchAPI.cjs +2 -2
  95. package/dist/atoms/search/searchAPI.d.cts +14 -14
  96. package/dist/atoms/search/searchAPI.d.ts +14 -14
  97. package/dist/atoms/search/searchAPI.js +2 -2
  98. package/dist/atoms/search/searchServiceAdapter.cjs +1 -1
  99. package/dist/atoms/search/searchServiceAdapter.js +1 -1
  100. package/dist/atoms/search/types.d.cts +1 -1
  101. package/dist/atoms/search/types.d.ts +1 -1
  102. package/dist/atoms/search/utils.d.cts +1 -1
  103. package/dist/atoms/search/utils.d.ts +1 -1
  104. package/dist/contexts/amplitudeContext/amplitudeContext.cjs +2 -2
  105. package/dist/contexts/amplitudeContext/amplitudeContext.js +2 -2
  106. package/dist/contexts/cdnContext/cdnContext.cjs +1 -1
  107. package/dist/contexts/cdnContext/cdnContext.js +1 -1
  108. package/dist/contexts/enviveConfigContext/enviveConfigContext.cjs +2 -3
  109. package/dist/contexts/enviveConfigContext/enviveConfigContext.js +2 -3
  110. package/dist/contexts/enviveContext/enviveContext.cjs +56 -0
  111. package/dist/contexts/enviveContext/enviveContext.d.cts +31 -0
  112. package/dist/contexts/enviveContext/enviveContext.d.ts +31 -0
  113. package/dist/contexts/enviveContext/enviveContext.js +55 -0
  114. package/dist/contexts/enviveContext/index.cjs +5 -0
  115. package/dist/contexts/enviveContext/index.d.cts +3 -0
  116. package/dist/contexts/enviveContext/index.d.ts +3 -0
  117. package/dist/contexts/enviveContext/index.js +4 -0
  118. package/dist/contexts/enviveContext/types.cjs +11 -0
  119. package/dist/contexts/enviveContext/types.d.cts +8 -0
  120. package/dist/contexts/enviveContext/types.d.ts +8 -0
  121. package/dist/contexts/enviveContext/types.js +10 -0
  122. package/dist/contexts/featureFlagContext/featureFlagContext.cjs +2 -2
  123. package/dist/contexts/featureFlagContext/featureFlagContext.js +2 -2
  124. package/dist/contexts/featureFlagServiceContext/featureFlagServiceContext.cjs +2 -2
  125. package/dist/contexts/featureFlagServiceContext/featureFlagServiceContext.js +2 -2
  126. package/dist/contexts/graphqlContext/graphqlContext.cjs +2 -2
  127. package/dist/contexts/graphqlContext/graphqlContext.js +2 -2
  128. package/dist/contexts/hardcopyContext/hardcopyContext.cjs +62 -0
  129. package/dist/contexts/hardcopyContext/hardcopyContext.d.cts +23 -0
  130. package/dist/contexts/hardcopyContext/hardcopyContext.d.ts +23 -0
  131. package/dist/contexts/hardcopyContext/hardcopyContext.js +60 -0
  132. package/dist/contexts/hardcopyContext/index.cjs +4 -0
  133. package/dist/contexts/hardcopyContext/index.d.cts +2 -0
  134. package/dist/contexts/hardcopyContext/index.d.ts +2 -0
  135. package/dist/contexts/hardcopyContext/index.js +3 -0
  136. package/dist/contexts/localStorageContext/localStorageContext.cjs +1 -1
  137. package/dist/contexts/localStorageContext/localStorageContext.js +1 -1
  138. package/dist/contexts/newOrgConfigContext/newOrgConfigContext.cjs +1 -1
  139. package/dist/contexts/newOrgConfigContext/newOrgConfigContext.js +1 -1
  140. package/dist/contexts/pageContext/index.cjs +6 -0
  141. package/dist/contexts/pageContext/index.d.cts +3 -0
  142. package/dist/contexts/pageContext/index.d.ts +3 -0
  143. package/dist/contexts/pageContext/index.js +4 -0
  144. package/dist/contexts/pageContext/mapping.cjs +25 -0
  145. package/dist/contexts/pageContext/mapping.d.cts +8 -0
  146. package/dist/contexts/pageContext/mapping.d.ts +8 -0
  147. package/dist/contexts/pageContext/mapping.js +25 -0
  148. package/dist/contexts/pageContext/pageContext.cjs +66 -0
  149. package/dist/contexts/pageContext/pageContext.d.cts +11 -0
  150. package/dist/contexts/pageContext/pageContext.d.ts +11 -0
  151. package/dist/contexts/pageContext/pageContext.js +64 -0
  152. package/dist/contexts/pageContext/types.cjs +0 -0
  153. package/dist/contexts/pageContext/types.d.cts +27 -0
  154. package/dist/contexts/pageContext/types.d.ts +27 -0
  155. package/dist/contexts/pageContext/types.js +1 -0
  156. package/dist/contexts/salesAgentContext/chatAPI.cjs +45 -0
  157. package/dist/contexts/salesAgentContext/chatAPI.d.cts +35 -0
  158. package/dist/contexts/salesAgentContext/chatAPI.d.ts +35 -0
  159. package/dist/contexts/salesAgentContext/chatAPI.js +44 -0
  160. package/dist/contexts/salesAgentContext/index.cjs +20 -0
  161. package/dist/contexts/salesAgentContext/index.d.cts +4 -0
  162. package/dist/contexts/salesAgentContext/index.d.ts +4 -0
  163. package/dist/contexts/salesAgentContext/index.js +5 -0
  164. package/dist/contexts/salesAgentContext/salesAgentContext.cjs +90 -0
  165. package/dist/contexts/salesAgentContext/salesAgentContext.d.cts +22 -0
  166. package/dist/contexts/salesAgentContext/salesAgentContext.d.ts +22 -0
  167. package/dist/contexts/salesAgentContext/salesAgentContext.js +88 -0
  168. package/dist/contexts/salesAgentContext/salesAgentService.cjs +99 -0
  169. package/dist/contexts/salesAgentContext/salesAgentService.js +98 -0
  170. package/dist/contexts/searchContext/searchContext.cjs +2 -2
  171. package/dist/contexts/searchContext/searchContext.js +2 -2
  172. package/dist/contexts/sessionStorageContext/sessionStorageContext.cjs +1 -1
  173. package/dist/contexts/sessionStorageContext/sessionStorageContext.js +1 -1
  174. package/dist/contexts/systemSettingsContext/systemSettingsContext.d.cts +2 -2
  175. package/dist/contexts/types.cjs +11 -1
  176. package/dist/contexts/types.d.cts +10 -2
  177. package/dist/contexts/types.d.ts +10 -2
  178. package/dist/contexts/types.js +11 -2
  179. package/dist/contexts/userIdentityContext/userIdentityContext.cjs +2 -2
  180. package/dist/contexts/userIdentityContext/userIdentityContext.js +2 -2
  181. package/dist/events/index.cjs +2 -4
  182. package/dist/events/index.js +2 -4
  183. package/dist/hooks/AmplitudeOperations/useAmplitudeOperations.cjs +1 -1
  184. package/dist/hooks/AmplitudeOperations/useAmplitudeOperations.js +1 -1
  185. package/dist/hooks/Debounce/useDebounce.cjs +1 -1
  186. package/dist/hooks/Debounce/useDebounce.js +1 -1
  187. package/dist/hooks/ElementObserver/useElementObserver.cjs +2 -2
  188. package/dist/hooks/ElementObserver/useElementObserver.js +2 -2
  189. package/dist/hooks/GrabAndScroll/useGrabAndScroll.d.cts +2 -2
  190. package/dist/hooks/GrabAndScroll/useGrabAndScroll.d.ts +2 -2
  191. package/dist/hooks/GraphQLConfig/useGraphQLConfig.cjs +9 -3
  192. package/dist/hooks/GraphQLConfig/useGraphQLConfig.js +9 -3
  193. package/dist/hooks/IdentifyUser/useIdentifyUser.cjs +1 -1
  194. package/dist/hooks/IdentifyUser/useIdentifyUser.js +1 -1
  195. package/dist/hooks/ImageResolver/useImageResolver.cjs +1 -1
  196. package/dist/hooks/ImageResolver/useImageResolver.js +1 -1
  197. package/dist/hooks/IsSmallScreen/useIsSmallScreen.cjs +1 -1
  198. package/dist/hooks/IsSmallScreen/useIsSmallScreen.js +1 -1
  199. package/dist/hooks/LocalStorageOperations/useLocalStorageOperations.cjs +11 -3
  200. package/dist/hooks/LocalStorageOperations/useLocalStorageOperations.js +11 -3
  201. package/dist/hooks/Search/useRecommendedProducts.cjs +1 -1
  202. package/dist/hooks/Search/useRecommendedProducts.js +1 -1
  203. package/dist/hooks/Search/useSearch.cjs +2 -2
  204. package/dist/hooks/Search/useSearch.js +2 -2
  205. package/dist/hooks/Search/useSearchInput.cjs +1 -1
  206. package/dist/hooks/Search/useSearchInput.js +1 -1
  207. package/dist/hooks/SearchOperations/useSearchOperations.cjs +1 -1
  208. package/dist/hooks/SearchOperations/useSearchOperations.d.cts +1 -1
  209. package/dist/hooks/SearchOperations/useSearchOperations.d.ts +1 -1
  210. package/dist/hooks/SearchOperations/useSearchOperations.js +1 -1
  211. package/dist/hooks/SessionStorageOperations/useSessionStorageOperations.cjs +1 -1
  212. package/dist/hooks/SessionStorageOperations/useSessionStorageOperations.js +1 -1
  213. package/dist/hooks/TrackComponentVisibleEvent/useTrackComponentVisibleEvent.cjs +1 -1
  214. package/dist/hooks/TrackComponentVisibleEvent/useTrackComponentVisibleEvent.js +1 -1
  215. package/dist/hooks/utils.cjs +3 -3
  216. package/dist/hooks/utils.d.cts +1 -1
  217. package/dist/hooks/utils.d.ts +1 -1
  218. package/dist/hooks/utils.js +3 -3
  219. package/package.json +29 -6
  220. package/src/application/commerce-api.ts +12 -10
  221. package/src/application/models/api/nextMessageRequest.ts +2 -0
  222. package/src/application/models/api/response.ts +4 -4
  223. package/src/application/models/api/search.ts +1 -2
  224. package/src/application/models/api/userEvent.ts +1 -2
  225. package/src/application/models/frontendConfig.ts +2 -2
  226. package/src/application/models/guards/api/isApiOrderResponseAttributes.ts +8 -4
  227. package/src/application/models/guards/api/isApiSearchEventAttributes.ts +1 -1
  228. package/src/application/models/index.ts +1 -0
  229. package/src/application/models/message.ts +5 -5
  230. package/src/application/models/utilityTypes/delimiterCase.ts +1 -0
  231. package/src/application/models/validators/validateGraphQLColorsConfig.ts +2 -1
  232. package/src/application/models/validators/validateGraphQLFrontendConfig.ts +1 -1
  233. package/src/application/models/variantInfo/variantInfo.ts +3 -0
  234. package/src/application/utils/analyticsUtils.ts +3 -3
  235. package/src/application/utils/domObserver.ts +1 -0
  236. package/src/application/utils/elementObserver.ts +1 -0
  237. package/src/application/utils/mutationHelper.ts +3 -1
  238. package/src/application/utils/nodeSelector.ts +7 -1
  239. package/src/application/utils/stringUtils.ts +1 -0
  240. package/src/atoms/app/index.ts +17 -6
  241. package/src/atoms/app/variant.ts +11 -13
  242. package/src/atoms/chat/__tests__/messageQueue.test.spec.ts +61 -0
  243. package/src/atoms/chat/index.ts +8 -8
  244. package/src/atoms/chat/messageQueue.ts +2 -48
  245. package/src/atoms/chat/replies.ts +3 -3
  246. package/src/atoms/org/graphqlConfig.ts +0 -1
  247. package/src/atoms/org/orgAnalyticsConfig.ts +1 -1
  248. package/src/atoms/search/searchAPI.ts +1 -1
  249. package/src/atoms/search/searchServiceAdapter.ts +1 -1
  250. package/src/contexts/amplitudeContext/__tests__/amplitudeContext.test.tsx +4 -3
  251. package/src/contexts/amplitudeContext/amplitudeContext.tsx +5 -5
  252. package/src/contexts/cdnContext/cdnContext.tsx +1 -1
  253. package/src/contexts/enviveConfigContext/__tests__/enviveConfigContext.test.tsx +2 -3
  254. package/src/contexts/enviveConfigContext/enviveConfigContext.tsx +3 -3
  255. package/src/contexts/enviveContext/enviveContext.tsx +89 -0
  256. package/src/contexts/enviveContext/index.ts +2 -0
  257. package/src/contexts/enviveContext/types.ts +4 -0
  258. package/src/contexts/featureFlagContext/featureFlagContext.tsx +1 -1
  259. package/src/contexts/featureFlagServiceContext/featureFlagServiceContext.tsx +1 -1
  260. package/src/contexts/graphqlContext/__tests__/graphqlContext.test.tsx +7 -5
  261. package/src/contexts/graphqlContext/graphqlContext.tsx +1 -5
  262. package/src/contexts/hardcopyContext/hardcopyContext.tsx +70 -0
  263. package/src/contexts/hardcopyContext/index.ts +1 -0
  264. package/src/contexts/localStorageContext/__tests__/localStorageContext.test.tsx +9 -3
  265. package/src/contexts/localStorageContext/localStorageContext.tsx +1 -1
  266. package/src/contexts/newOrgConfigContext/__tests__/newOrgConfigContext.test.tsx +2 -3
  267. package/src/contexts/newOrgConfigContext/newOrgConfigContext.tsx +1 -1
  268. package/src/contexts/pageContext/__tests__/pageContext.test.tsx +666 -0
  269. package/src/contexts/pageContext/index.ts +2 -0
  270. package/src/contexts/pageContext/mapping.ts +38 -0
  271. package/src/contexts/pageContext/pageContext.tsx +78 -0
  272. package/src/contexts/pageContext/types.ts +27 -0
  273. package/src/contexts/salesAgentContext/chatAPI.ts +75 -0
  274. package/src/contexts/salesAgentContext/index.ts +3 -0
  275. package/src/contexts/salesAgentContext/salesAgentContext.tsx +128 -0
  276. package/src/contexts/salesAgentContext/salesAgentService.ts +197 -0
  277. package/src/contexts/searchContext/__tests__/searchContext.test.tsx +14 -15
  278. package/src/contexts/searchContext/searchContext.tsx +1 -1
  279. package/src/contexts/sessionStorageContext/sessionStorageContext.tsx +1 -1
  280. package/src/contexts/systemSettingsContext/__tests__/systemSettingsContext.test.tsx +7 -6
  281. package/src/contexts/types.ts +20 -22
  282. package/src/contexts/userIdentityContext/__tests__/userIdentityContext.test.tsx +3 -8
  283. package/src/contexts/userIdentityContext/userIdentityContext.tsx +1 -1
  284. package/src/events/index.ts +5 -7
  285. package/src/hooks/AmplitudeOperations/useAmplitudeOperations.ts +1 -1
  286. package/src/hooks/Debounce/useDebounce.ts +1 -1
  287. package/src/hooks/ElementObserver/useElementObserver.ts +2 -1
  288. package/src/hooks/GraphQLConfig/useGraphQLConfig.ts +4 -2
  289. package/src/hooks/IdentifyUser/useIdentifyUser.ts +1 -1
  290. package/src/hooks/ImageResolver/useImageResolver.ts +2 -0
  291. package/src/hooks/IsSmallScreen/useIsSmallScreen.ts +1 -1
  292. package/src/hooks/LocalStorageOperations/useLocalStorageOperations.ts +20 -4
  293. package/src/hooks/Search/__tests__/useSearch.test.tsx +15 -10
  294. package/src/hooks/Search/useRecommendedProducts.ts +2 -2
  295. package/src/hooks/Search/useSearchInput.ts +1 -1
  296. package/src/hooks/SearchOperations/useSearchOperations.ts +2 -2
  297. package/src/hooks/SessionStorageOperations/useSessionStorageOperations.ts +1 -1
  298. package/src/hooks/TrackComponentVisibleEvent/useTrackComponentVisibleEvent.ts +2 -2
  299. package/src/hooks/utils.ts +3 -2
  300. package/dist/contexts/chatContext/chatContext.cjs +0 -306
  301. package/dist/contexts/chatContext/chatContext.d.cts +0 -15
  302. package/dist/contexts/chatContext/chatContext.d.ts +0 -15
  303. package/dist/contexts/chatContext/chatContext.js +0 -304
  304. package/dist/contexts/chatContext/index.cjs +0 -4
  305. package/dist/contexts/chatContext/index.d.cts +0 -2
  306. package/dist/contexts/chatContext/index.d.ts +0 -2
  307. package/dist/contexts/chatContext/index.js +0 -3
  308. package/src/contexts/chatContext/chatContext.tsx +0 -463
  309. package/src/contexts/chatContext/index.ts +0 -1
@@ -1,4 +1,4 @@
1
- import React, { createContext, useContext, useCallback, useMemo } from 'react';
1
+ import React, { createContext, useCallback, useContext, useMemo } from 'react';
2
2
  import Logger from 'src/application/logging/logger';
3
3
  import { StatsigFeatureGate } from '@spiffy-ai/commerce-api-client';
4
4
  import { FeatureGates } from 'src/application/models/featureGates';
@@ -1,4 +1,4 @@
1
- import React, { createContext, useContext, useMemo, ReactNode } from 'react';
1
+ import React, { ReactNode, createContext, useContext, useMemo } from 'react';
2
2
  import { OrgConfigFeatureGate } from 'src/application/models/api/orgConfigResults';
3
3
  import { FeatureGates } from 'src/application/models/featureGates';
4
4
  import Logger from 'src/application/logging/logger';
@@ -1,12 +1,11 @@
1
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';
2
+ import { act, render, screen, waitFor } from '@testing-library/react';
3
+ import { Provider, useAtomValue } from 'jotai';
6
4
  import { EnviveConfigProvider } from 'src/contexts/enviveConfigContext/enviveConfigContext';
7
- import { orgLevelApiKeyAtom, baseUrlAtom } from 'src/atoms/envive/enviveConfig';
5
+ import { baseUrlAtom, orgLevelApiKeyAtom } from 'src/atoms/envive/enviveConfig';
8
6
  import Logger from 'src/application/logging/logger';
9
7
  import { getMerchantOrgIdQuery } from 'src/application/models/graphql/queries/getMerchantOrgIdQuery';
8
+ import { GraphQLProvider, useGraphQLClient } from '../graphqlContext';
10
9
 
11
10
  // Mock the Logger to avoid console output in tests
12
11
  vi.spyOn(Logger, 'logDebug').mockImplementation(() => {});
@@ -25,6 +24,7 @@ const MockGraphQLComponent: React.FC = () => {
25
24
  <div data-testid="is-ready">{client.isReady.toString()}</div>
26
25
  <button
27
26
  data-testid="execute-query-btn"
27
+ type="button"
28
28
  onClick={async () => {
29
29
  try {
30
30
  const result = await client.executeQuery('query { test }');
@@ -38,6 +38,7 @@ const MockGraphQLComponent: React.FC = () => {
38
38
  </button>
39
39
  <button
40
40
  data-testid="get-org-id-btn"
41
+ type="button"
41
42
  onClick={async () => {
42
43
  try {
43
44
  const orgId = await client.getOrgId();
@@ -51,6 +52,7 @@ const MockGraphQLComponent: React.FC = () => {
51
52
  </button>
52
53
  <button
53
54
  data-testid="get-config-btn"
55
+ type="button"
54
56
  onClick={async () => {
55
57
  try {
56
58
  const config = await client.getColorsAndFrontendConfig();
@@ -1,16 +1,12 @@
1
- import React, { createContext, useContext, useCallback, useMemo, ReactNode } from 'react';
1
+ import React, { ReactNode, createContext, useCallback, useContext, useMemo } from 'react';
2
2
  import { useAtomValue } from 'jotai';
3
3
  import { baseUrlAtom, orgLevelApiKeyAtom } from 'src/atoms/envive/enviveConfig';
4
4
  import { getMerchantOrgIdQuery } from 'src/application/models/graphql/queries/getMerchantOrgIdQuery';
5
5
  import { validateGraphQLOrgId } from 'src/application/models/validators/validateGraphQLOrgId';
6
6
  import {
7
- getMerchantColorsQuery,
8
7
  GetMerchantColorsQueryData,
9
- getMerchantFrontendConfigQuery,
10
8
  GetMerchantFrontendConfigQueryData,
11
9
  } from 'src/application/models/graphql';
12
- import { validateGraphQLColorsConfig } from 'src/application/models/validators/validateGraphQLColorsConfig';
13
- import { validateGraphQLFrontendConfig } from 'src/application/models/validators/validateGraphQLFrontendConfig';
14
10
  import { ColorMapping } from 'src/application/models/colorsConfig';
15
11
  import { FrontendConfig } from 'src/application/models/frontendConfig';
16
12
  import Logger from 'src/application/logging/logger';
@@ -0,0 +1,70 @@
1
+ import { UserEvent } from '@spiffy-ai/commerce-api-client';
2
+ import { ReactNode, createContext, useCallback, useContext, useMemo } from 'react';
3
+ import Logger from 'src/application/logging/logger';
4
+ import { WidgetTypeV3 } from '../types';
5
+
6
+ interface HardcopyRequest {
7
+ widgetType: WidgetTypeV3;
8
+ userEvent: UserEvent;
9
+ }
10
+
11
+ export type HardcopyResponse = {
12
+ language: string;
13
+ values: Record<string, string | string[]>;
14
+ };
15
+
16
+ interface HardcopyContextType {
17
+ getHardcopy: (HardcopyRequest: HardcopyRequest) => Promise<HardcopyResponse>;
18
+ }
19
+
20
+ // These are just sample responses for the sake of testing.
21
+ // As we start to build the actual widgets we should determine what the actual
22
+ // values and their names should be.
23
+ const MOCK_HARDCOPY_RESPONSE: Partial<Record<WidgetTypeV3, HardcopyResponse>> = {
24
+ [WidgetTypeV3.SuggestionBarV3]: {
25
+ language: 'en',
26
+ values: {
27
+ suggestionBarButtons: ['Button 1', 'Button 2', 'Button 3'],
28
+ },
29
+ },
30
+ [WidgetTypeV3.ChatPreviewV3]: {
31
+ language: 'en',
32
+ values: {
33
+ chatPreviewTitle: 'Chat Preview Title',
34
+ typewriterTextPrefix: 'Want to know',
35
+ typewriterTexts: ['more about this product?', 'what others are saying?', 'how to use it?'],
36
+ suggestionButtons: ['Button 1', 'Button 2', 'Button 3'],
37
+ footerText: 'Ask me anything...',
38
+
39
+ chatPreviewDescription: 'Chat Preview Description',
40
+ },
41
+ },
42
+ };
43
+
44
+ const HardcopyContext = createContext<HardcopyContextType | undefined>(undefined);
45
+
46
+ export const HardcopyProvider: React.FC<{ children: ReactNode }> = ({ children }) => {
47
+ const languages = useMemo(() => navigator.languages, []);
48
+
49
+ const getHardcopy = useCallback(async (request: HardcopyRequest): Promise<HardcopyResponse> => {
50
+ Logger.logInfo('hardcopyContext | retrieving hardcopy', languages);
51
+ const response = MOCK_HARDCOPY_RESPONSE[request.widgetType];
52
+ Logger.logInfo('hardcopyContext | returning hardcopy response', response);
53
+ if (!response) {
54
+ throw new Error(`No hardcopy response found for widget type: ${request.widgetType}`);
55
+ }
56
+ return response;
57
+ }, []);
58
+
59
+ const value = useMemo(() => ({ getHardcopy }), [getHardcopy]);
60
+
61
+ return <HardcopyContext.Provider value={value}>{children}</HardcopyContext.Provider>;
62
+ };
63
+
64
+ export const useHardcopy = () => {
65
+ const context = useContext(HardcopyContext);
66
+ if (!context) {
67
+ throw new Error('useHardcopy must be used within a HardcopyProvider');
68
+ }
69
+ return context;
70
+ };
@@ -0,0 +1 @@
1
+ export * from './hardcopyContext';
@@ -1,8 +1,8 @@
1
1
  import React from 'react';
2
- import { render, screen, waitFor, act } from '@testing-library/react';
3
- import { LocalStorageProvider, useLocalStorage, LocalStorageKeys } from '../localStorageContext';
2
+ import { act, render, screen, waitFor } from '@testing-library/react';
4
3
  import Logger from 'src/application/logging/logger';
5
4
  import { LocalStorageEventListener } from 'src/application/models/localStorageEventListener';
5
+ import { LocalStorageKeys, LocalStorageProvider, useLocalStorage } from '../localStorageContext';
6
6
 
7
7
  // Mock the Logger to avoid console output in tests
8
8
  vi.spyOn(Logger, 'logDebug').mockImplementation(() => {});
@@ -56,6 +56,7 @@ const MockLocalStorageComponent: React.FC = () => {
56
56
  <div data-testid="event-received">{eventReceived.toString()}</div>
57
57
  <button
58
58
  data-testid="set-item-btn"
59
+ type="button"
59
60
  onClick={() => {
60
61
  setItem('test-key', 'test-value');
61
62
  setTestValue(getItem('test-key'));
@@ -65,6 +66,7 @@ const MockLocalStorageComponent: React.FC = () => {
65
66
  </button>
66
67
  <button
67
68
  data-testid="set-spiffy-on-true-btn"
69
+ type="button"
68
70
  onClick={() => {
69
71
  setSpiffyOnFeatureFlag(true);
70
72
  setSpiffyOnValue(getSpiffyOnFeatureFlag());
@@ -74,6 +76,7 @@ const MockLocalStorageComponent: React.FC = () => {
74
76
  </button>
75
77
  <button
76
78
  data-testid="set-spiffy-on-false-btn"
79
+ type="button"
77
80
  onClick={() => {
78
81
  setSpiffyOnFeatureFlag(false);
79
82
  setSpiffyOnValue(getSpiffyOnFeatureFlag());
@@ -83,6 +86,7 @@ const MockLocalStorageComponent: React.FC = () => {
83
86
  </button>
84
87
  <button
85
88
  data-testid="trigger-event-btn"
89
+ type="button"
86
90
  onClick={() => {
87
91
  setItem('test-listener-key', 'event-value');
88
92
  }}
@@ -479,7 +483,9 @@ describe('LocalStorageProvider', () => {
479
483
  });
480
484
 
481
485
  // Wait a bit to ensure listener is attached
482
- await new Promise(resolve => setTimeout(resolve, 50));
486
+ await new Promise(resolve => {
487
+ setTimeout(resolve, 50);
488
+ });
483
489
 
484
490
  await act(async () => {
485
491
  screen.getByTestId('trigger-event-btn').click();
@@ -1,4 +1,4 @@
1
- import React, { createContext, useContext, useCallback, useMemo, useEffect } from 'react';
1
+ import React, { createContext, useCallback, useContext, useEffect, useMemo } from 'react';
2
2
  import Logger from 'src/application/logging/logger';
3
3
  import { LocalStorageEventListener } from 'src/application/models/localStorageEventListener';
4
4
 
@@ -1,14 +1,13 @@
1
1
  import React from 'react';
2
2
  import { render, screen, waitFor } from '@testing-library/react';
3
- import { Provider } from 'jotai';
4
- import { useAtomValue } from 'jotai';
5
- import { NewOrgConfigProvider, useNewOrgConfigContext } from '../newOrgConfigContext';
3
+ import { Provider, useAtomValue } from 'jotai';
6
4
  import { EnviveConfigProvider } from 'src/contexts/enviveConfigContext/enviveConfigContext';
7
5
  import { GraphQLProvider } from 'src/contexts/graphqlContext/graphqlContext';
8
6
  import { LocalStorageProvider } from 'src/contexts/localStorageContext/localStorageContext';
9
7
  import { newOrgConfigAtom } from 'src/atoms/org/newOrgConfigAtom';
10
8
  import { orgShortNameAtom } from 'src/atoms/envive/enviveConfig';
11
9
  import { useColorsAndFrontendConfig } from 'src/hooks/GraphQLConfig/useGraphQLConfig';
10
+ import { NewOrgConfigProvider, useNewOrgConfigContext } from '../newOrgConfigContext';
12
11
 
13
12
  // Mock the useColorsAndFrontendConfig hook
14
13
  vi.mock('src/hooks/GraphQLConfig/useGraphQLConfig', () => ({
@@ -1,4 +1,4 @@
1
- import React, { createContext, useContext, ReactNode, useMemo } from 'react';
1
+ import React, { ReactNode, createContext, useContext, useMemo } from 'react';
2
2
  import { useAtomValue, useSetAtom } from 'jotai';
3
3
  import { useColorsAndFrontendConfig } from 'src/hooks/GraphQLConfig/useGraphQLConfig';
4
4
  import { orgShortNameAtom } from 'src/atoms/envive/enviveConfig';