@envive-ai/react-hooks 0.3.3 → 0.3.4

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 (462) hide show
  1. package/dist/_virtual/rolldown_runtime.cjs +2 -0
  2. package/dist/_virtual/rolldown_runtime.js +29 -0
  3. package/dist/application/commerce-api.cjs +11 -3
  4. package/dist/application/commerce-api.js +11 -3
  5. package/dist/application/models/api/userEvent.d.cts +4 -2
  6. package/dist/application/models/api/userEvent.d.ts +4 -2
  7. package/dist/application/models/chatElementDisplayLocationV3.cjs +18 -0
  8. package/dist/application/models/chatElementDisplayLocationV3.d.cts +15 -0
  9. package/dist/application/models/chatElementDisplayLocationV3.d.ts +15 -0
  10. package/dist/application/models/chatElementDisplayLocationV3.js +17 -0
  11. package/dist/application/models/colorsConfigV3.cjs +26 -0
  12. package/dist/application/models/colorsConfigV3.d.cts +22 -0
  13. package/dist/application/models/colorsConfigV3.d.ts +22 -0
  14. package/dist/application/models/colorsConfigV3.js +24 -0
  15. package/dist/application/models/featureGates.cjs +2 -1
  16. package/dist/application/models/featureGates.d.cts +2 -1
  17. package/dist/application/models/featureGates.d.ts +2 -1
  18. package/dist/application/models/featureGates.js +2 -1
  19. package/dist/application/models/frontendConfig.d.cts +4 -2
  20. package/dist/application/models/frontendConfig.d.ts +4 -2
  21. package/dist/application/models/frontendConfigV3.d.cts +14 -0
  22. package/dist/application/models/frontendConfigV3.d.ts +14 -0
  23. package/dist/application/models/index.cjs +3 -0
  24. package/dist/application/models/index.d.cts +4 -3
  25. package/dist/application/models/index.d.ts +4 -3
  26. package/dist/application/models/index.js +3 -2
  27. package/dist/application/models/utils/snakeToCamelTransformer.cjs +2 -1
  28. package/dist/application/models/utils/snakeToCamelTransformer.d.cts +7 -2
  29. package/dist/application/models/utils/snakeToCamelTransformer.d.ts +7 -2
  30. package/dist/application/models/utils/snakeToCamelTransformer.js +2 -2
  31. package/dist/application/utils/analyticsUtils.cjs +5 -4
  32. package/dist/application/utils/analyticsUtils.d.cts +1 -1
  33. package/dist/application/utils/analyticsUtils.d.ts +1 -1
  34. package/dist/application/utils/analyticsUtils.js +3 -2
  35. package/dist/application/utils/elementObserver.cjs +1 -1
  36. package/dist/application/utils/elementObserver.js +1 -1
  37. package/dist/application/utils/index.d.cts +1 -1
  38. package/dist/application/utils/index.d.ts +1 -1
  39. package/dist/application/utils/widgetTextFromApiWidgetTextResponse.cjs +14 -0
  40. package/dist/application/utils/widgetTextFromApiWidgetTextResponse.js +13 -0
  41. package/dist/application/utils/widgetTextRequestToApiRequest.cjs +30 -0
  42. package/dist/application/utils/widgetTextRequestToApiRequest.js +29 -0
  43. package/dist/atoms/amplitude/amplitudeTrackEventAtom.cjs +1 -1
  44. package/dist/atoms/amplitude/amplitudeTrackEventAtom.js +1 -1
  45. package/dist/atoms/app/index.cjs +4 -3
  46. package/dist/atoms/app/index.d.cts +3 -3
  47. package/dist/atoms/app/index.d.ts +9 -9
  48. package/dist/atoms/app/index.js +4 -5
  49. package/dist/atoms/app/variant.cjs +5 -1
  50. package/dist/atoms/app/variant.d.cts +11 -4
  51. package/dist/atoms/app/variant.d.ts +11 -4
  52. package/dist/atoms/app/variant.js +4 -2
  53. package/dist/atoms/chat/chatState.cjs +9 -4
  54. package/dist/atoms/chat/chatState.d.cts +25 -18
  55. package/dist/atoms/chat/chatState.d.ts +25 -18
  56. package/dist/atoms/chat/chatState.js +6 -3
  57. package/dist/atoms/chat/form.cjs +4 -4
  58. package/dist/atoms/chat/form.d.cts +2 -2
  59. package/dist/atoms/chat/form.d.ts +2 -2
  60. package/dist/atoms/chat/index.cjs +32 -30
  61. package/dist/atoms/chat/index.d.cts +4 -4
  62. package/dist/atoms/chat/index.d.ts +5 -5
  63. package/dist/atoms/chat/index.js +2 -2
  64. package/dist/atoms/chat/lastMessage.cjs +4 -4
  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/performanceMetrics.d.cts +6 -6
  68. package/dist/atoms/chat/performanceMetrics.d.ts +6 -6
  69. package/dist/atoms/chat/renderedWidgetRefs.d.cts +2 -2
  70. package/dist/atoms/chat/renderedWidgetRefs.d.ts +2 -2
  71. package/dist/atoms/chat/replies.cjs +9 -8
  72. package/dist/atoms/chat/replies.d.cts +3 -3
  73. package/dist/atoms/chat/replies.d.ts +3 -3
  74. package/dist/atoms/chat/replies.js +3 -2
  75. package/dist/atoms/chat/suggestions.cjs +6 -6
  76. package/dist/atoms/chat/suggestions.d.cts +2 -2
  77. package/dist/atoms/chat/suggestions.d.ts +2 -2
  78. package/dist/atoms/envive/enviveConfig.cjs +5 -2
  79. package/dist/atoms/envive/enviveConfig.js +5 -2
  80. package/dist/atoms/globalSearch/globalSearch.d.cts +5 -5
  81. package/dist/atoms/globalSearch/globalSearch.d.ts +5 -5
  82. package/dist/atoms/org/customerService.d.cts +6 -6
  83. package/dist/atoms/org/customerService.d.ts +6 -6
  84. package/dist/atoms/org/graphqlConfig.cjs +1 -3
  85. package/dist/atoms/org/graphqlConfig.d.cts +6 -9
  86. package/dist/atoms/org/graphqlConfig.d.ts +6 -9
  87. package/dist/atoms/org/graphqlConfig.js +2 -3
  88. package/dist/atoms/org/index.cjs +2 -3
  89. package/dist/atoms/org/index.d.cts +2 -2
  90. package/dist/atoms/org/index.d.ts +2 -2
  91. package/dist/atoms/org/index.js +2 -2
  92. package/dist/atoms/org/newOrgConfigAtom.d.cts +2 -2
  93. package/dist/atoms/org/newOrgConfigAtom.d.ts +2 -2
  94. package/dist/atoms/org/orgAnalyticsConfig.d.cts +5 -5
  95. package/dist/atoms/org/orgAnalyticsConfig.d.ts +5 -5
  96. package/dist/atoms/search/chatSearch.cjs +7 -7
  97. package/dist/atoms/search/chatSearch.d.cts +20 -18
  98. package/dist/atoms/search/chatSearch.d.ts +20 -18
  99. package/dist/atoms/search/searchAPI.cjs +1 -1
  100. package/dist/atoms/search/searchAPI.d.cts +15 -14
  101. package/dist/atoms/search/searchAPI.d.ts +15 -14
  102. package/dist/atoms/search/searchAPI.js +1 -1
  103. package/dist/atoms/search/utils.d.cts +1 -1
  104. package/dist/atoms/widget/chatPreviewLoading.cjs +23 -0
  105. package/dist/atoms/widget/chatPreviewLoading.d.cts +26 -0
  106. package/dist/atoms/widget/chatPreviewLoading.d.ts +26 -0
  107. package/dist/atoms/widget/chatPreviewLoading.js +22 -0
  108. package/dist/atoms/widget/index.cjs +3 -0
  109. package/dist/atoms/widget/index.d.cts +2 -0
  110. package/dist/atoms/widget/index.d.ts +2 -0
  111. package/dist/atoms/widget/index.js +3 -0
  112. package/dist/contexts/amplitudeContext/amplitudeContext.cjs +40 -227
  113. package/dist/contexts/amplitudeContext/amplitudeContext.d.cts +4 -39
  114. package/dist/contexts/amplitudeContext/amplitudeContext.d.ts +4 -39
  115. package/dist/contexts/amplitudeContext/amplitudeContext.js +44 -230
  116. package/dist/contexts/amplitudeContext/index.cjs +2 -1
  117. package/dist/contexts/amplitudeContext/index.d.cts +2 -1
  118. package/dist/contexts/amplitudeContext/index.d.ts +2 -1
  119. package/dist/contexts/amplitudeContext/index.js +2 -1
  120. package/dist/contexts/enviveConfigContext/enviveConfigContext.cjs +3 -2
  121. package/dist/contexts/enviveConfigContext/enviveConfigContext.d.cts +2 -1
  122. package/dist/contexts/enviveConfigContext/enviveConfigContext.d.ts +2 -1
  123. package/dist/contexts/enviveConfigContext/enviveConfigContext.js +3 -2
  124. package/dist/contexts/enviveContext/enviveContext.cjs +67 -16
  125. package/dist/contexts/enviveContext/enviveContext.d.cts +9 -1
  126. package/dist/contexts/enviveContext/enviveContext.d.ts +9 -1
  127. package/dist/contexts/enviveContext/enviveContext.js +69 -18
  128. package/dist/contexts/enviveCssContext/enviveCssContext.cjs +96 -24
  129. package/dist/contexts/enviveCssContext/enviveCssContext.js +96 -24
  130. package/dist/contexts/featureFlagServiceContext/featureFlagServiceContext.cjs +5 -7
  131. package/dist/contexts/featureFlagServiceContext/featureFlagServiceContext.d.cts +2 -2
  132. package/dist/contexts/featureFlagServiceContext/featureFlagServiceContext.d.ts +2 -2
  133. package/dist/contexts/featureFlagServiceContext/featureFlagServiceContext.js +5 -7
  134. package/dist/contexts/graphqlContext/graphqlContext.cjs +69 -7
  135. package/dist/contexts/graphqlContext/graphqlContext.d.cts +17 -5
  136. package/dist/contexts/graphqlContext/graphqlContext.d.ts +17 -5
  137. package/dist/contexts/graphqlContext/graphqlContext.js +69 -7
  138. package/dist/contexts/graphqlContext/index.d.cts +2 -2
  139. package/dist/contexts/graphqlContext/index.d.ts +2 -2
  140. package/dist/contexts/graphqlContext/mockV3Config.cjs +208 -0
  141. package/dist/contexts/graphqlContext/mockV3Config.js +207 -0
  142. package/dist/contexts/hardcopyContext/hardcopyContext.cjs +119 -12
  143. package/dist/contexts/hardcopyContext/hardcopyContext.d.cts +3 -2
  144. package/dist/contexts/hardcopyContext/hardcopyContext.d.ts +3 -2
  145. package/dist/contexts/hardcopyContext/hardcopyContext.js +120 -13
  146. package/dist/contexts/newOrgConfigContext/newOrgConfigContext.cjs +7 -8
  147. package/dist/contexts/newOrgConfigContext/newOrgConfigContext.js +8 -9
  148. package/dist/contexts/pageContext/mapping.cjs +5 -1
  149. package/dist/contexts/pageContext/mapping.d.cts +1 -1
  150. package/dist/contexts/pageContext/mapping.d.ts +1 -1
  151. package/dist/contexts/pageContext/mapping.js +5 -1
  152. package/dist/contexts/pageContext/pageContext.cjs +29 -9
  153. package/dist/contexts/pageContext/pageContext.d.cts +5 -2
  154. package/dist/contexts/pageContext/pageContext.d.ts +5 -2
  155. package/dist/contexts/pageContext/pageContext.js +30 -10
  156. package/dist/contexts/pageContext/types.d.cts +5 -1
  157. package/dist/contexts/pageContext/types.d.ts +5 -1
  158. package/dist/contexts/salesAgentContext/chatAPI.cjs +6 -3
  159. package/dist/contexts/salesAgentContext/chatAPI.js +6 -3
  160. package/dist/contexts/salesAgentContext/salesAgentContext.cjs +65 -25
  161. package/dist/contexts/salesAgentContext/salesAgentContext.js +64 -24
  162. package/dist/contexts/salesAgentContext/salesAgentService.cjs +43 -7
  163. package/dist/contexts/salesAgentContext/salesAgentService.js +42 -6
  164. package/dist/contexts/salesAgentContext/statusCodeError.cjs +14 -0
  165. package/dist/contexts/salesAgentContext/statusCodeError.js +13 -0
  166. package/dist/contexts/searchContext/searchContext.cjs +1 -1
  167. package/dist/contexts/searchContext/searchContext.js +1 -1
  168. package/dist/contexts/systemSettingsContext/systemSettingsContext.d.cts +2 -2
  169. package/dist/contexts/types.cjs +2 -13
  170. package/dist/contexts/types.d.cts +12 -16
  171. package/dist/contexts/types.d.ts +12 -16
  172. package/dist/contexts/types.js +3 -13
  173. package/dist/contexts/typesV3.cjs +125 -0
  174. package/dist/contexts/typesV3.d.cts +246 -0
  175. package/dist/contexts/typesV3.d.ts +246 -0
  176. package/dist/contexts/typesV3.js +113 -0
  177. package/dist/contexts/uiConfigContext/index.cjs +4 -0
  178. package/dist/contexts/uiConfigContext/index.d.cts +2 -0
  179. package/dist/contexts/uiConfigContext/index.d.ts +2 -0
  180. package/dist/contexts/uiConfigContext/index.js +3 -0
  181. package/dist/contexts/uiConfigContext/uiConfigContext.cjs +44 -0
  182. package/dist/contexts/uiConfigContext/uiConfigContext.d.cts +15 -0
  183. package/dist/contexts/uiConfigContext/uiConfigContext.d.ts +15 -0
  184. package/dist/contexts/uiConfigContext/uiConfigContext.js +42 -0
  185. package/dist/contexts/userIdentityContext/userIdentityContext.cjs +1 -1
  186. package/dist/contexts/userIdentityContext/userIdentityContext.js +1 -1
  187. package/dist/contexts/widgetConfigContext/index.cjs +4 -0
  188. package/dist/contexts/widgetConfigContext/index.d.cts +2 -0
  189. package/dist/contexts/widgetConfigContext/index.d.ts +2 -0
  190. package/dist/contexts/widgetConfigContext/index.js +3 -0
  191. package/dist/contexts/widgetConfigContext/widgetConfigContext.cjs +67 -0
  192. package/dist/contexts/widgetConfigContext/widgetConfigContext.d.cts +19 -0
  193. package/dist/contexts/widgetConfigContext/widgetConfigContext.d.ts +19 -0
  194. package/dist/contexts/widgetConfigContext/widgetConfigContext.js +65 -0
  195. package/dist/hooks/AmplitudeOperations/useAmplitudeOperations.d.cts +1 -1
  196. package/dist/hooks/AmplitudeOperations/useAmplitudeOperations.d.ts +1 -1
  197. package/dist/hooks/AppDetails/useAppDetails.cjs +2 -4
  198. package/dist/hooks/AppDetails/useAppDetails.js +3 -5
  199. package/dist/hooks/ChatToggle/useChatToggle.cjs +6 -5
  200. package/dist/hooks/ChatToggle/useChatToggle.js +3 -2
  201. package/dist/hooks/ChatToggleAnalytics/useChatToggleAnalytics.cjs +3 -3
  202. package/dist/hooks/GrabAndScroll/useGrabAndScroll.d.cts +2 -2
  203. package/dist/hooks/GrabAndScroll/useGrabAndScroll.d.ts +3 -3
  204. package/dist/hooks/GraphQLConfig/index.cjs +1 -1
  205. package/dist/hooks/GraphQLConfig/index.d.cts +2 -2
  206. package/dist/hooks/GraphQLConfig/index.d.ts +2 -2
  207. package/dist/hooks/GraphQLConfig/index.js +2 -2
  208. package/dist/hooks/GraphQLConfig/useGraphQLConfig.cjs +27 -24
  209. package/dist/hooks/GraphQLConfig/useGraphQLConfig.d.cts +5 -4
  210. package/dist/hooks/GraphQLConfig/useGraphQLConfig.d.ts +5 -4
  211. package/dist/hooks/GraphQLConfig/useGraphQLConfig.js +27 -24
  212. package/dist/hooks/Search/useSearch.cjs +10 -9
  213. package/dist/hooks/Search/useSearch.js +6 -5
  214. package/dist/hooks/Search/useSearchInput.cjs +4 -4
  215. package/dist/hooks/Search/useSearchInput.js +1 -1
  216. package/dist/hooks/TrackComponentVisibleEvent/useTrackComponentVisibleEvent.cjs +5 -4
  217. package/dist/hooks/TrackComponentVisibleEvent/useTrackComponentVisibleEvent.d.cts +1 -1
  218. package/dist/hooks/TrackComponentVisibleEvent/useTrackComponentVisibleEvent.d.ts +1 -1
  219. package/dist/hooks/TrackComponentVisibleEvent/useTrackComponentVisibleEvent.js +3 -2
  220. package/dist/hooks/UpdateAnalyticsProps/useUpdateAnalyticsProps.cjs +3 -2
  221. package/dist/hooks/UpdateAnalyticsProps/useUpdateAnalyticsProps.js +3 -2
  222. package/dist/hooks/utils.d.cts +1 -1
  223. package/dist/node_modules/classnames/index.cjs +52 -0
  224. package/dist/node_modules/classnames/index.js +49 -0
  225. package/dist/packages/components-v3/dist/Container/Container.cjs +11 -0
  226. package/dist/packages/components-v3/dist/Container/Container.js +12 -0
  227. package/dist/packages/components-v3/dist/Container/hooks/useGetCenterContentProperties.cjs +1 -0
  228. package/dist/packages/components-v3/dist/Container/hooks/useGetCenterContentProperties.js +3 -0
  229. package/dist/packages/components-v3/dist/Container/hooks/useGetFluidProperties.cjs +1 -0
  230. package/dist/packages/components-v3/dist/Container/hooks/useGetFluidProperties.js +3 -0
  231. package/dist/packages/components-v3/dist/Container/index.cjs +1 -0
  232. package/dist/packages/components-v3/dist/Container/index.js +3 -0
  233. package/dist/packages/components-v3/dist/Image/Image.cjs +16 -0
  234. package/dist/packages/components-v3/dist/Image/Image.js +17 -0
  235. package/dist/packages/components-v3/dist/Image/hooks/useGetAccessibilityProperties.cjs +1 -0
  236. package/dist/packages/components-v3/dist/Image/hooks/useGetAccessibilityProperties.js +3 -0
  237. package/dist/packages/components-v3/dist/Image/hooks/useGetAspectRatioProperties.cjs +1 -0
  238. package/dist/packages/components-v3/dist/Image/hooks/useGetAspectRatioProperties.js +3 -0
  239. package/dist/packages/components-v3/dist/Image/hooks/useGetObjectFitProperties.cjs +1 -0
  240. package/dist/packages/components-v3/dist/Image/hooks/useGetObjectFitProperties.js +3 -0
  241. package/dist/packages/components-v3/dist/Image/hooks/useGetRoundedProperties.cjs +1 -0
  242. package/dist/packages/components-v3/dist/Image/hooks/useGetRoundedProperties.js +3 -0
  243. package/dist/packages/components-v3/dist/Image/hooks/useGetSkeletonProperties.cjs +1 -0
  244. package/dist/packages/components-v3/dist/Image/hooks/useGetSkeletonProperties.js +3 -0
  245. package/dist/packages/components-v3/dist/Image/hooks/useGetWidthProperties.cjs +1 -0
  246. package/dist/packages/components-v3/dist/Image/hooks/useGetWidthProperties.js +3 -0
  247. package/dist/packages/components-v3/dist/Image/hooks/useHandleImageLoading.cjs +1 -0
  248. package/dist/packages/components-v3/dist/Image/hooks/useHandleImageLoading.js +3 -0
  249. package/dist/packages/components-v3/dist/ImageGallery/ImageGallery.cjs +2 -0
  250. package/dist/packages/components-v3/dist/ImageGallery/ImageGallery.js +4 -0
  251. package/dist/packages/components-v3/dist/ImageGallery/components/ImageItem.cjs +2 -0
  252. package/dist/packages/components-v3/dist/ImageGallery/components/ImageItem.js +4 -0
  253. package/dist/packages/components-v3/dist/ImageGallery/components/Layout.cjs +15 -0
  254. package/dist/packages/components-v3/dist/ImageGallery/components/Layout.js +16 -0
  255. package/dist/packages/components-v3/dist/ImageGallery/components/NormalLayout.cjs +4 -0
  256. package/dist/packages/components-v3/dist/ImageGallery/components/NormalLayout.js +4 -0
  257. package/dist/packages/components-v3/dist/ImageGallery/components/OverlappedLayout.cjs +1 -0
  258. package/dist/packages/components-v3/dist/ImageGallery/components/OverlappedLayout.js +3 -0
  259. package/dist/packages/components-v3/dist/ImageGallery/components/index.cjs +4 -0
  260. package/dist/packages/components-v3/dist/ImageGallery/components/index.js +6 -0
  261. package/dist/packages/components-v3/dist/ImageGallery/hooks/useGetContainerProperties.cjs +1 -0
  262. package/dist/packages/components-v3/dist/ImageGallery/hooks/useGetContainerProperties.js +3 -0
  263. package/dist/packages/components-v3/dist/ImageGallery/index.cjs +2 -0
  264. package/dist/packages/components-v3/dist/ImageGallery/index.js +4 -0
  265. package/dist/packages/components-v3/dist/ImageGallery/types/types.cjs +13 -0
  266. package/dist/packages/components-v3/dist/ImageGallery/types/types.js +12 -0
  267. package/dist/packages/components-v3/dist/PromptButton/PromptButton.cjs +12 -0
  268. package/dist/packages/components-v3/dist/PromptButton/PromptButton.js +13 -0
  269. package/dist/packages/components-v3/dist/PromptButton/components/Icon.cjs +1 -0
  270. package/dist/packages/components-v3/dist/PromptButton/components/Icon.js +3 -0
  271. package/dist/packages/components-v3/dist/PromptButton/components/Label.cjs +3 -0
  272. package/dist/packages/components-v3/dist/PromptButton/components/Label.js +5 -0
  273. package/dist/packages/components-v3/dist/PromptButton/components/Layout.cjs +12 -0
  274. package/dist/packages/components-v3/dist/PromptButton/components/Layout.js +13 -0
  275. package/dist/packages/components-v3/dist/PromptButton/components/Loading.cjs +9 -0
  276. package/dist/packages/components-v3/dist/PromptButton/components/Loading.js +10 -0
  277. package/dist/packages/components-v3/dist/PromptButton/components/index.cjs +4 -0
  278. package/dist/packages/components-v3/dist/PromptButton/components/index.js +6 -0
  279. package/dist/packages/components-v3/dist/PromptButton/hooks/useGetBoldTextProperties.cjs +1 -0
  280. package/dist/packages/components-v3/dist/PromptButton/hooks/useGetBoldTextProperties.js +3 -0
  281. package/dist/packages/components-v3/dist/PromptButton/hooks/useGetLayoutBaseProperties.cjs +8 -0
  282. package/dist/packages/components-v3/dist/PromptButton/hooks/useGetLayoutBaseProperties.js +9 -0
  283. package/dist/packages/components-v3/dist/PromptButton/index.cjs +2 -0
  284. package/dist/packages/components-v3/dist/PromptButton/index.js +4 -0
  285. package/dist/packages/components-v3/dist/PromptButton/types/index.cjs +13 -0
  286. package/dist/packages/components-v3/dist/PromptButton/types/index.js +12 -0
  287. package/dist/packages/components-v3/dist/PromptCarousel/PromptCarousel.cjs +12 -0
  288. package/dist/packages/components-v3/dist/PromptCarousel/PromptCarousel.js +14 -0
  289. package/dist/packages/components-v3/dist/PromptCarousel/components/BlockScrollContainer.cjs +9 -0
  290. package/dist/packages/components-v3/dist/PromptCarousel/components/BlockScrollContainer.js +10 -0
  291. package/dist/packages/components-v3/dist/PromptCarousel/components/ButtonContainerRow.cjs +11 -0
  292. package/dist/packages/components-v3/dist/PromptCarousel/components/ButtonContainerRow.js +12 -0
  293. package/dist/packages/components-v3/dist/PromptCarousel/components/CarouselContentWithBlockScroll.cjs +4 -0
  294. package/dist/packages/components-v3/dist/PromptCarousel/components/CarouselContentWithBlockScroll.js +6 -0
  295. package/dist/packages/components-v3/dist/PromptCarousel/components/CarouselContentWithRowScroll.cjs +4 -0
  296. package/dist/packages/components-v3/dist/PromptCarousel/components/CarouselContentWithRowScroll.js +6 -0
  297. package/dist/packages/components-v3/dist/PromptCarousel/components/index.cjs +3 -0
  298. package/dist/packages/components-v3/dist/PromptCarousel/components/index.js +5 -0
  299. package/dist/packages/components-v3/dist/PromptCarousel/hooks/index.cjs +5 -0
  300. package/dist/packages/components-v3/dist/PromptCarousel/hooks/index.js +7 -0
  301. package/dist/packages/components-v3/dist/PromptCarousel/hooks/useButtonScrollPosition.cjs +1 -0
  302. package/dist/packages/components-v3/dist/PromptCarousel/hooks/useButtonScrollPosition.js +3 -0
  303. package/dist/packages/components-v3/dist/PromptCarousel/hooks/useCarouselAnimation.cjs +3 -0
  304. package/dist/packages/components-v3/dist/PromptCarousel/hooks/useCarouselAnimation.js +5 -0
  305. package/dist/packages/components-v3/dist/PromptCarousel/hooks/useCarouselButtons.cjs +1 -0
  306. package/dist/packages/components-v3/dist/PromptCarousel/hooks/useCarouselButtons.js +3 -0
  307. package/dist/packages/components-v3/dist/PromptCarousel/hooks/useCarouselRefs.cjs +1 -0
  308. package/dist/packages/components-v3/dist/PromptCarousel/hooks/useCarouselRefs.js +3 -0
  309. package/dist/packages/components-v3/dist/PromptCarousel/hooks/useHorizontalScrollAnimation.cjs +1 -0
  310. package/dist/packages/components-v3/dist/PromptCarousel/hooks/useHorizontalScrollAnimation.js +3 -0
  311. package/dist/packages/components-v3/dist/PromptCarousel/index.cjs +2 -0
  312. package/dist/packages/components-v3/dist/PromptCarousel/index.js +4 -0
  313. package/dist/packages/components-v3/dist/PromptCarousel/types/types.cjs +19 -0
  314. package/dist/packages/components-v3/dist/PromptCarousel/types/types.js +17 -0
  315. package/dist/packages/components-v3/dist/Stack/Stack.cjs +36 -0
  316. package/dist/packages/components-v3/dist/Stack/Stack.js +36 -0
  317. package/dist/packages/components-v3/dist/Stack/hooks/useFormatStackChildren.cjs +27 -0
  318. package/dist/packages/components-v3/dist/Stack/hooks/useFormatStackChildren.js +26 -0
  319. package/dist/packages/components-v3/dist/Stack/hooks/useGetAlignProperties.cjs +20 -0
  320. package/dist/packages/components-v3/dist/Stack/hooks/useGetAlignProperties.js +19 -0
  321. package/dist/packages/components-v3/dist/Stack/hooks/useGetDirectionProperties.cjs +19 -0
  322. package/dist/packages/components-v3/dist/Stack/hooks/useGetDirectionProperties.js +18 -0
  323. package/dist/packages/components-v3/dist/Stack/hooks/useGetGapProperties.cjs +16 -0
  324. package/dist/packages/components-v3/dist/Stack/hooks/useGetGapProperties.js +15 -0
  325. package/dist/packages/components-v3/dist/Stack/hooks/useGetJustifyProperties.cjs +21 -0
  326. package/dist/packages/components-v3/dist/Stack/hooks/useGetJustifyProperties.js +20 -0
  327. package/dist/packages/components-v3/dist/Stack/hooks/useGetStyleProperties.cjs +38 -0
  328. package/dist/packages/components-v3/dist/Stack/hooks/useGetStyleProperties.js +38 -0
  329. package/dist/packages/components-v3/dist/Stack/hooks/useGetWrapProperties.cjs +13 -0
  330. package/dist/packages/components-v3/dist/Stack/hooks/useGetWrapProperties.js +12 -0
  331. package/dist/packages/components-v3/dist/Stack/index.cjs +1 -0
  332. package/dist/packages/components-v3/dist/Stack/index.js +3 -0
  333. package/dist/packages/components-v3/dist/Stack/utils/constants.cjs +42 -0
  334. package/dist/packages/components-v3/dist/Stack/utils/constants.js +41 -0
  335. package/dist/packages/components-v3/dist/Typography/Typography.cjs +15 -0
  336. package/dist/packages/components-v3/dist/Typography/Typography.js +16 -0
  337. package/dist/packages/components-v3/dist/Typography/hooks/useGetAccessibilityAttributes.cjs +1 -0
  338. package/dist/packages/components-v3/dist/Typography/hooks/useGetAccessibilityAttributes.js +3 -0
  339. package/dist/packages/components-v3/dist/Typography/hooks/useGetAlignProperties.cjs +1 -0
  340. package/dist/packages/components-v3/dist/Typography/hooks/useGetAlignProperties.js +3 -0
  341. package/dist/packages/components-v3/dist/Typography/hooks/useGetColorProperties.cjs +1 -0
  342. package/dist/packages/components-v3/dist/Typography/hooks/useGetColorProperties.js +3 -0
  343. package/dist/packages/components-v3/dist/Typography/hooks/useGetNoWrapProperties.cjs +1 -0
  344. package/dist/packages/components-v3/dist/Typography/hooks/useGetNoWrapProperties.js +3 -0
  345. package/dist/packages/components-v3/dist/Typography/hooks/useGetNumberOfLinesProperties.cjs +1 -0
  346. package/dist/packages/components-v3/dist/Typography/hooks/useGetNumberOfLinesProperties.js +3 -0
  347. package/dist/packages/components-v3/dist/Typography/hooks/useGetVariantProperties.cjs +1 -0
  348. package/dist/packages/components-v3/dist/Typography/hooks/useGetVariantProperties.js +3 -0
  349. package/dist/packages/components-v3/dist/Typography/index.cjs +1 -0
  350. package/dist/packages/components-v3/dist/Typography/index.js +3 -0
  351. package/dist/packages/components-v3/dist/WidgetWrapper/WidgetWrapper.cjs +12 -0
  352. package/dist/packages/components-v3/dist/WidgetWrapper/WidgetWrapper.js +13 -0
  353. package/dist/packages/components-v3/dist/WidgetWrapper/hooks/useGetWrapperProperties.cjs +1 -0
  354. package/dist/packages/components-v3/dist/WidgetWrapper/hooks/useGetWrapperProperties.js +3 -0
  355. package/dist/packages/components-v3/dist/WidgetWrapper/index.cjs +2 -0
  356. package/dist/packages/components-v3/dist/WidgetWrapper/index.js +4 -0
  357. package/dist/packages/components-v3/dist/WidgetWrapper/types/types.cjs +13 -0
  358. package/dist/packages/components-v3/dist/WidgetWrapper/types/types.js +12 -0
  359. package/dist/packages/components-v3/dist/packages/components-v3/tokens/breakpoints/breakpoints.cjs +25 -0
  360. package/dist/packages/components-v3/dist/packages/components-v3/tokens/breakpoints/breakpoints.js +23 -0
  361. package/dist/packages/components-v3/dist/utils/useCheckIsMobile.cjs +1 -0
  362. package/dist/packages/components-v3/dist/utils/useCheckIsMobile.js +3 -0
  363. package/dist/packages/components-v3/dist/utils/useResponsiveValue.cjs +57 -0
  364. package/dist/packages/components-v3/dist/utils/useResponsiveValue.js +56 -0
  365. package/dist/packages/icons/dist/FourPointStar.cjs +8 -0
  366. package/dist/packages/icons/dist/FourPointStar.js +9 -0
  367. package/dist/packages/icons/dist/_virtual/rolldown_runtime.cjs +28 -0
  368. package/dist/packages/icons/dist/_virtual/rolldown_runtime.js +26 -0
  369. package/dist/packages/icons/dist/node_modules/react/cjs/react-jsx-runtime.development.cjs +697 -0
  370. package/dist/packages/icons/dist/node_modules/react/cjs/react-jsx-runtime.development.js +697 -0
  371. package/dist/packages/icons/dist/node_modules/react/cjs/react-jsx-runtime.production.min.cjs +44 -0
  372. package/dist/packages/icons/dist/node_modules/react/cjs/react-jsx-runtime.production.min.js +44 -0
  373. package/dist/packages/icons/dist/node_modules/react/cjs/react.development.cjs +1529 -0
  374. package/dist/packages/icons/dist/node_modules/react/cjs/react.development.js +1529 -0
  375. package/dist/packages/icons/dist/node_modules/react/cjs/react.production.min.cjs +330 -0
  376. package/dist/packages/icons/dist/node_modules/react/cjs/react.production.min.js +330 -0
  377. package/dist/packages/icons/dist/node_modules/react/index.cjs +14 -0
  378. package/dist/packages/icons/dist/node_modules/react/index.js +14 -0
  379. package/dist/packages/icons/dist/node_modules/react/jsx-runtime.cjs +14 -0
  380. package/dist/packages/icons/dist/node_modules/react/jsx-runtime.js +14 -0
  381. package/dist/services/amplitudeService/amplitudeService.cjs +204 -0
  382. package/dist/services/amplitudeService/amplitudeService.d.cts +75 -0
  383. package/dist/services/amplitudeService/amplitudeService.d.ts +75 -0
  384. package/dist/services/amplitudeService/amplitudeService.js +202 -0
  385. package/dist/services/amplitudeService/index.cjs +4 -0
  386. package/dist/services/amplitudeService/index.d.cts +2 -0
  387. package/dist/services/amplitudeService/index.d.ts +2 -0
  388. package/dist/services/amplitudeService/index.js +3 -0
  389. package/dist/services/enviveConfigService/enviveConfigService.cjs +36 -0
  390. package/dist/services/enviveConfigService/enviveConfigService.d.cts +43 -0
  391. package/dist/services/enviveConfigService/enviveConfigService.d.ts +43 -0
  392. package/dist/services/enviveConfigService/enviveConfigService.js +36 -0
  393. package/dist/services/enviveConfigService/index.cjs +3 -0
  394. package/dist/services/enviveConfigService/index.d.cts +2 -0
  395. package/dist/services/enviveConfigService/index.d.ts +2 -0
  396. package/dist/services/enviveConfigService/index.js +3 -0
  397. package/dist/types/enviveConfig.d.cts +29 -0
  398. package/dist/types/enviveConfig.d.ts +29 -0
  399. package/dist/types/index.d.cts +2 -1
  400. package/dist/types/index.d.ts +2 -1
  401. package/package.json +36 -4
  402. package/src/application/commerce-api.ts +14 -1
  403. package/src/application/models/api/userEvent.ts +3 -1
  404. package/src/application/models/api/widgetText.ts +9 -0
  405. package/src/application/models/api/widgetTextRequest.ts +10 -0
  406. package/src/application/models/chatElementDisplayLocationV3.ts +12 -0
  407. package/src/application/models/colorsConfigV3.ts +26 -0
  408. package/src/application/models/featureGates.ts +1 -0
  409. package/src/application/models/frontendConfig.ts +5 -0
  410. package/src/application/models/frontendConfigV3.ts +10 -0
  411. package/src/application/models/index.ts +1 -0
  412. package/src/application/models/utils/snakeToCamelTransformer.ts +1 -1
  413. package/src/application/utils/elementObserver.ts +2 -2
  414. package/src/application/utils/widgetTextFromApiWidgetTextResponse.ts +30 -0
  415. package/src/application/utils/widgetTextRequestToApiRequest.ts +45 -0
  416. package/src/atoms/amplitude/amplitudeTrackEventAtom.ts +1 -8
  417. package/src/atoms/app/index.ts +3 -3
  418. package/src/atoms/app/variant.ts +5 -0
  419. package/src/atoms/chat/chatState.ts +10 -2
  420. package/src/atoms/envive/enviveConfig.ts +5 -0
  421. package/src/atoms/org/graphqlConfig.ts +0 -1
  422. package/src/atoms/widget/chatPreviewLoading.ts +36 -0
  423. package/src/atoms/widget/index.ts +1 -0
  424. package/src/contexts/amplitudeContext/__tests__/amplitudeContext.test.tsx +197 -187
  425. package/src/contexts/amplitudeContext/amplitudeContext.tsx +56 -334
  426. package/src/contexts/enviveConfigContext/enviveConfigContext.tsx +3 -0
  427. package/src/contexts/enviveContext/enviveContext.tsx +101 -27
  428. package/src/contexts/enviveCssContext/enviveCssContext.tsx +121 -22
  429. package/src/contexts/featureFlagServiceContext/featureFlagServiceContext.tsx +12 -11
  430. package/src/contexts/graphqlContext/graphqlContext.tsx +131 -13
  431. package/src/contexts/graphqlContext/mockV3Config.ts +209 -0
  432. package/src/contexts/hardcopyContext/hardcopyContext.tsx +136 -14
  433. package/src/contexts/newOrgConfigContext/__tests__/newOrgConfigContext.test.tsx +6 -6
  434. package/src/contexts/newOrgConfigContext/newOrgConfigContext.tsx +5 -13
  435. package/src/contexts/pageContext/__tests__/pageContext.test.tsx +24 -8
  436. package/src/contexts/pageContext/mapping.ts +4 -0
  437. package/src/contexts/pageContext/pageContext.tsx +41 -12
  438. package/src/contexts/pageContext/types.ts +4 -0
  439. package/src/contexts/salesAgentContext/chatAPI.ts +1 -0
  440. package/src/contexts/salesAgentContext/salesAgentContext.tsx +94 -42
  441. package/src/contexts/salesAgentContext/salesAgentService.ts +78 -3
  442. package/src/contexts/salesAgentContext/statusCodeError.ts +10 -0
  443. package/src/contexts/searchContext/__tests__/searchContext.test.tsx +8 -2
  444. package/src/contexts/types.ts +15 -19
  445. package/src/contexts/typesV3.ts +316 -0
  446. package/src/contexts/uiConfigContext/__tests__/uiConfigContext.test.tsx +321 -0
  447. package/src/contexts/uiConfigContext/index.ts +1 -0
  448. package/src/contexts/uiConfigContext/uiConfigContext.tsx +44 -0
  449. package/src/contexts/widgetConfigContext/__tests__/widgetConfigContext.test.tsx +512 -0
  450. package/src/contexts/widgetConfigContext/index.ts +1 -0
  451. package/src/contexts/widgetConfigContext/widgetConfigContext.tsx +84 -0
  452. package/src/hooks/AppDetails/useAppDetails.ts +2 -2
  453. package/src/hooks/GraphQLConfig/useGraphQLConfig.ts +22 -21
  454. package/src/hooks/Search/__tests__/useSearch.test.tsx +15 -6
  455. package/src/hooks/Search/useSearch.tsx +6 -5
  456. package/src/services/amplitudeService/__tests__/amplitudeService.test.ts +558 -0
  457. package/src/services/amplitudeService/amplitudeService.ts +324 -0
  458. package/src/services/amplitudeService/index.ts +1 -0
  459. package/src/services/enviveConfigService/enviveConfigService.ts +72 -0
  460. package/src/services/enviveConfigService/index.ts +1 -0
  461. package/src/types/enviveConfig.ts +27 -0
  462. package/src/types/index.ts +1 -0
@@ -0,0 +1,512 @@
1
+ import React from 'react';
2
+ import { act, render, screen, waitFor } from '@testing-library/react';
3
+ import Logger from 'src/application/logging/logger';
4
+ import { useNewOrgConfig } from 'src/hooks/NewOrgConfig';
5
+ import { WidgetConfigProvider, useWidgetConfig } from '../widgetConfigContext';
6
+ import { WidgetConfigV3, WidgetTypeV3 } from '../../typesV3';
7
+ import { PromptButtonVariant } from '@envive-ai/react-toolkit-v3/PromptButton';
8
+
9
+ // Mock the Logger to avoid console output in tests
10
+ vi.spyOn(Logger, 'logInfo').mockImplementation(() => {});
11
+ vi.spyOn(Logger, 'logWarn').mockImplementation(() => {});
12
+ vi.spyOn(Logger, 'logError').mockImplementation(() => {});
13
+
14
+ // Mock the useNewOrgConfig hook
15
+ vi.mock('src/hooks/NewOrgConfig', () => ({
16
+ useNewOrgConfig: vi.fn(),
17
+ }));
18
+
19
+ // Component that uses the useWidgetConfig hook
20
+ const MockWidgetConfigComponent: React.FC = () => {
21
+ const { getWidgetConfig, isLoading } = useWidgetConfig();
22
+ const [widgetConfig, setWidgetConfig] = React.useState<WidgetConfigV3 | null>(null);
23
+ const [error, setError] = React.useState<string | null>(null);
24
+ const [isLoadingState, setIsLoadingState] = React.useState(false);
25
+
26
+ const handleGetConfig = async () => {
27
+ setIsLoadingState(true);
28
+ try {
29
+ const config = await getWidgetConfig({
30
+ widgetType: WidgetTypeV3.PromptCarouselV3,
31
+ widgetConfigId: 'test-config-id',
32
+ });
33
+ setWidgetConfig(config);
34
+ setError(null);
35
+ } catch (err: unknown) {
36
+ setError(err instanceof Error ? err.message : 'Unknown error');
37
+ setWidgetConfig(null);
38
+ } finally {
39
+ setIsLoadingState(false);
40
+ }
41
+ };
42
+
43
+ return (
44
+ <div data-testid="widget-config-component">
45
+ <div data-testid="is-loading">{isLoading.toString()}</div>
46
+ <div data-testid="is-loading-state">{isLoadingState.toString()}</div>
47
+ <div data-testid="has-widget-config">{widgetConfig ? 'true' : 'false'}</div>
48
+ <div data-testid="widget-config-id">{widgetConfig?.widgetConfigId || 'not-set'}</div>
49
+ <div data-testid="widget-config-type">{widgetConfig?.type || 'not-set'}</div>
50
+ {error && <div data-testid="error-message">{error}</div>}
51
+ <button
52
+ data-testid="get-config-btn"
53
+ type="button"
54
+ onClick={handleGetConfig}
55
+ >
56
+ Get Config
57
+ </button>
58
+ </div>
59
+ );
60
+ };
61
+
62
+ // Wrapper component for testing
63
+ const TestWrapper: React.FC<{
64
+ children: React.ReactNode;
65
+ mockNewOrgConfig?: {
66
+ frontendConfig?: {
67
+ widgetConfigs?: Record<string, WidgetConfigV3>;
68
+ } | null;
69
+ loading?: boolean;
70
+ };
71
+ }> = ({ children, mockNewOrgConfig = {} }) => {
72
+ const mockUseNewOrgConfig = useNewOrgConfig as ReturnType<typeof vi.fn>;
73
+ mockUseNewOrgConfig.mockReturnValue({
74
+ frontendConfig: mockNewOrgConfig.frontendConfig ?? null,
75
+ loading: mockNewOrgConfig.loading ?? false,
76
+ });
77
+
78
+ return <WidgetConfigProvider>{children}</WidgetConfigProvider>;
79
+ };
80
+
81
+ describe('WidgetConfigProvider', () => {
82
+ beforeEach(() => {
83
+ vi.clearAllMocks();
84
+ });
85
+
86
+ describe('useWidgetConfig Hook Integration', () => {
87
+ it('should provide context through useWidgetConfig hook', async () => {
88
+ const mockWidgetConfig: WidgetConfigV3 = {
89
+ widgetConfigId: 'test-config-id',
90
+ type: WidgetTypeV3.PromptCarouselV3,
91
+ contentId: 'test-content-id',
92
+ };
93
+
94
+ render(
95
+ <TestWrapper
96
+ mockNewOrgConfig={{
97
+ frontendConfig: {
98
+ widgetConfigs: {
99
+ 'test-config-id': mockWidgetConfig,
100
+ },
101
+ },
102
+ loading: false,
103
+ }}
104
+ >
105
+ <MockWidgetConfigComponent />
106
+ </TestWrapper>,
107
+ );
108
+
109
+ await waitFor(() => {
110
+ expect(screen.getByTestId('widget-config-component')).toBeInTheDocument();
111
+ });
112
+
113
+ expect(screen.getByTestId('is-loading')).toHaveTextContent('false');
114
+ });
115
+
116
+ it('should throw error when used outside of WidgetConfigProvider', () => {
117
+ const consoleSpy = vi.spyOn(console, 'error').mockImplementation(() => {});
118
+
119
+ const TestComponent: React.FC = () => {
120
+ try {
121
+ useWidgetConfig();
122
+ return <div data-testid="no-error">No Error</div>;
123
+ } catch (error: unknown) {
124
+ return (
125
+ <div data-testid="error">
126
+ {error instanceof Error ? error.message : 'Unknown error'}
127
+ </div>
128
+ );
129
+ }
130
+ };
131
+
132
+ render(<TestComponent />);
133
+
134
+ expect(screen.getByTestId('error')).toHaveTextContent(
135
+ 'useWidgetConfig must be used within a WidgetConfigProvider',
136
+ );
137
+
138
+ consoleSpy.mockRestore();
139
+ });
140
+ });
141
+
142
+ describe('getWidgetConfig', () => {
143
+ it('should successfully retrieve widget config when config exists', async () => {
144
+ const mockWidgetConfig: WidgetConfigV3 = {
145
+ widgetConfigId: 'test-config-id',
146
+ type: WidgetTypeV3.PromptCarouselV3,
147
+ contentId: 'test-content-id',
148
+ promptButtonType: PromptButtonVariant.LIGHT,
149
+ boldFirstButton: true,
150
+ };
151
+
152
+ render(
153
+ <TestWrapper
154
+ mockNewOrgConfig={{
155
+ frontendConfig: {
156
+ widgetConfigs: {
157
+ 'test-config-id': mockWidgetConfig,
158
+ },
159
+ },
160
+ loading: false,
161
+ }}
162
+ >
163
+ <MockWidgetConfigComponent />
164
+ </TestWrapper>,
165
+ );
166
+
167
+ await waitFor(() => {
168
+ expect(screen.getByTestId('widget-config-component')).toBeInTheDocument();
169
+ });
170
+
171
+ const getConfigButton = screen.getByTestId('get-config-btn');
172
+ await act(async () => {
173
+ getConfigButton.click();
174
+ });
175
+
176
+ await waitFor(() => {
177
+ expect(screen.getByTestId('has-widget-config')).toHaveTextContent('true');
178
+ expect(screen.getByTestId('widget-config-id')).toHaveTextContent('test-config-id');
179
+ expect(screen.getByTestId('widget-config-type')).toHaveTextContent(
180
+ WidgetTypeV3.PromptCarouselV3,
181
+ );
182
+ });
183
+
184
+ expect(screen.queryByTestId('error-message')).not.toBeInTheDocument();
185
+ });
186
+
187
+ it('should throw error when frontend config is loading', async () => {
188
+ render(
189
+ <TestWrapper
190
+ mockNewOrgConfig={{
191
+ frontendConfig: {
192
+ widgetConfigs: {
193
+ 'test-config-id': {
194
+ widgetConfigId: 'test-config-id',
195
+ type: WidgetTypeV3.PromptCarouselV3,
196
+ },
197
+ },
198
+ },
199
+ loading: true,
200
+ }}
201
+ >
202
+ <MockWidgetConfigComponent />
203
+ </TestWrapper>,
204
+ );
205
+
206
+ await waitFor(() => {
207
+ expect(screen.getByTestId('widget-config-component')).toBeInTheDocument();
208
+ });
209
+
210
+ const getConfigButton = screen.getByTestId('get-config-btn');
211
+ await act(async () => {
212
+ getConfigButton.click();
213
+ });
214
+
215
+ await waitFor(() => {
216
+ expect(screen.getByTestId('error-message')).toHaveTextContent('Frontend config is loading');
217
+ });
218
+ });
219
+
220
+ it('should throw error when widget config is not found', async () => {
221
+ render(
222
+ <TestWrapper
223
+ mockNewOrgConfig={{
224
+ frontendConfig: {
225
+ widgetConfigs: {},
226
+ },
227
+ loading: false,
228
+ }}
229
+ >
230
+ <MockWidgetConfigComponent />
231
+ </TestWrapper>,
232
+ );
233
+
234
+ await waitFor(() => {
235
+ expect(screen.getByTestId('widget-config-component')).toBeInTheDocument();
236
+ });
237
+
238
+ const getConfigButton = screen.getByTestId('get-config-btn');
239
+ await act(async () => {
240
+ getConfigButton.click();
241
+ });
242
+
243
+ await waitFor(() => {
244
+ expect(screen.getByTestId('error-message')).toHaveTextContent(
245
+ 'Widget type: PromptCarouselV3 does not match widget config type: undefined',
246
+ );
247
+ });
248
+ });
249
+
250
+ it('should throw error when widget type does not match config type', async () => {
251
+ // Create a mock config with wrong type for testing error handling
252
+ const mockWidgetConfig = {
253
+ widgetConfigId: 'test-config-id',
254
+ type: WidgetTypeV3.ChatPreviewV3, // Different type - using type assertion for test
255
+ } as unknown as WidgetConfigV3;
256
+
257
+ render(
258
+ <TestWrapper
259
+ mockNewOrgConfig={{
260
+ frontendConfig: {
261
+ widgetConfigs: {
262
+ 'test-config-id': mockWidgetConfig,
263
+ },
264
+ },
265
+ loading: false,
266
+ }}
267
+ >
268
+ <MockWidgetConfigComponent />
269
+ </TestWrapper>,
270
+ );
271
+
272
+ await waitFor(() => {
273
+ expect(screen.getByTestId('widget-config-component')).toBeInTheDocument();
274
+ });
275
+
276
+ const getConfigButton = screen.getByTestId('get-config-btn');
277
+ await act(async () => {
278
+ getConfigButton.click();
279
+ });
280
+
281
+ await waitFor(() => {
282
+ expect(screen.getByTestId('error-message')).toHaveTextContent(
283
+ 'Widget type: PromptCarouselV3 does not match widget config type: ChatPreviewV3',
284
+ );
285
+ });
286
+ });
287
+
288
+ it('should throw error when frontendConfig is null', async () => {
289
+ render(
290
+ <TestWrapper
291
+ mockNewOrgConfig={{
292
+ frontendConfig: null,
293
+ loading: false,
294
+ }}
295
+ >
296
+ <MockWidgetConfigComponent />
297
+ </TestWrapper>,
298
+ );
299
+
300
+ await waitFor(() => {
301
+ expect(screen.getByTestId('widget-config-component')).toBeInTheDocument();
302
+ });
303
+
304
+ const getConfigButton = screen.getByTestId('get-config-btn');
305
+ await act(async () => {
306
+ getConfigButton.click();
307
+ });
308
+
309
+ await waitFor(() => {
310
+ expect(screen.getByTestId('error-message')).toHaveTextContent(
311
+ 'Widget type: PromptCarouselV3 does not match widget config type: undefined',
312
+ );
313
+ });
314
+ });
315
+ });
316
+
317
+ describe('isLoading State', () => {
318
+ it('should be true when frontend config is loading', async () => {
319
+ render(
320
+ <TestWrapper
321
+ mockNewOrgConfig={{
322
+ frontendConfig: {
323
+ widgetConfigs: {},
324
+ },
325
+ loading: true,
326
+ }}
327
+ >
328
+ <MockWidgetConfigComponent />
329
+ </TestWrapper>,
330
+ );
331
+
332
+ await waitFor(() => {
333
+ expect(screen.getByTestId('is-loading')).toHaveTextContent('true');
334
+ });
335
+ });
336
+
337
+ it('should be true when widget config is being retrieved', async () => {
338
+ const mockWidgetConfig: WidgetConfigV3 = {
339
+ widgetConfigId: 'test-config-id',
340
+ type: WidgetTypeV3.PromptCarouselV3,
341
+ };
342
+
343
+ render(
344
+ <TestWrapper
345
+ mockNewOrgConfig={{
346
+ frontendConfig: {
347
+ widgetConfigs: {
348
+ 'test-config-id': mockWidgetConfig,
349
+ },
350
+ },
351
+ loading: false,
352
+ }}
353
+ >
354
+ <MockWidgetConfigComponent />
355
+ </TestWrapper>,
356
+ );
357
+
358
+ await waitFor(() => {
359
+ expect(screen.getByTestId('widget-config-component')).toBeInTheDocument();
360
+ });
361
+
362
+ const getConfigButton = screen.getByTestId('get-config-btn');
363
+
364
+ // Click button and check loading state
365
+ await act(async () => {
366
+ getConfigButton.click();
367
+ });
368
+
369
+ // isLoadingState should be true during the async operation
370
+ await waitFor(() => {
371
+ expect(screen.getByTestId('is-loading-state')).toHaveTextContent('false');
372
+ });
373
+ });
374
+
375
+ it('should be false when both frontend config and widget config are not loading', async () => {
376
+ render(
377
+ <TestWrapper
378
+ mockNewOrgConfig={{
379
+ frontendConfig: {
380
+ widgetConfigs: {},
381
+ },
382
+ loading: false,
383
+ }}
384
+ >
385
+ <MockWidgetConfigComponent />
386
+ </TestWrapper>,
387
+ );
388
+
389
+ await waitFor(() => {
390
+ expect(screen.getByTestId('is-loading')).toHaveTextContent('false');
391
+ });
392
+ });
393
+ });
394
+
395
+ describe('Logger Integration', () => {
396
+ it('should log info when retrieving widget config', async () => {
397
+ const logInfoSpy = vi.spyOn(Logger, 'logInfo');
398
+ const mockWidgetConfig: WidgetConfigV3 = {
399
+ widgetConfigId: 'test-config-id',
400
+ type: WidgetTypeV3.PromptCarouselV3,
401
+ };
402
+
403
+ render(
404
+ <TestWrapper
405
+ mockNewOrgConfig={{
406
+ frontendConfig: {
407
+ widgetConfigs: {
408
+ 'test-config-id': mockWidgetConfig,
409
+ },
410
+ },
411
+ loading: false,
412
+ }}
413
+ >
414
+ <MockWidgetConfigComponent />
415
+ </TestWrapper>,
416
+ );
417
+
418
+ await waitFor(() => {
419
+ expect(screen.getByTestId('widget-config-component')).toBeInTheDocument();
420
+ });
421
+
422
+ const getConfigButton = screen.getByTestId('get-config-btn');
423
+ await act(async () => {
424
+ getConfigButton.click();
425
+ });
426
+
427
+ await waitFor(() => {
428
+ expect(logInfoSpy).toHaveBeenCalledWith('widgetConfigContext | retrieving widget config', {
429
+ widgetConfigId: 'test-config-id',
430
+ widgetType: WidgetTypeV3.PromptCarouselV3,
431
+ });
432
+ expect(logInfoSpy).toHaveBeenCalledWith(
433
+ 'widgetConfigContext | returning widget config response',
434
+ mockWidgetConfig,
435
+ );
436
+ });
437
+ });
438
+ });
439
+
440
+ describe('Multiple Widget Config Retrievals', () => {
441
+ it('should handle multiple sequential widget config retrievals', async () => {
442
+ const mockWidgetConfig1: WidgetConfigV3 = {
443
+ widgetConfigId: 'config-1',
444
+ type: WidgetTypeV3.PromptCarouselV3,
445
+ };
446
+ const mockWidgetConfig2: WidgetConfigV3 = {
447
+ widgetConfigId: 'config-2',
448
+ type: WidgetTypeV3.PromptCarouselV3,
449
+ };
450
+
451
+ const TestComponent: React.FC = () => {
452
+ const { getWidgetConfig } = useWidgetConfig();
453
+ const [config1, setConfig1] = React.useState<WidgetConfigV3 | null>(null);
454
+ const [config2, setConfig2] = React.useState<WidgetConfigV3 | null>(null);
455
+
456
+ const handleGetConfigs = async () => {
457
+ const c1 = await getWidgetConfig({
458
+ widgetType: WidgetTypeV3.PromptCarouselV3,
459
+ widgetConfigId: 'config-1',
460
+ });
461
+ setConfig1(c1);
462
+
463
+ const c2 = await getWidgetConfig({
464
+ widgetType: WidgetTypeV3.PromptCarouselV3,
465
+ widgetConfigId: 'config-2',
466
+ });
467
+ setConfig2(c2);
468
+ };
469
+
470
+ return (
471
+ <div>
472
+ <div data-testid="config-1-id">{config1?.widgetConfigId || 'not-set'}</div>
473
+ <div data-testid="config-2-id">{config2?.widgetConfigId || 'not-set'}</div>
474
+ <button
475
+ data-testid="get-configs-btn"
476
+ type="button"
477
+ onClick={handleGetConfigs}
478
+ >
479
+ Get Configs
480
+ </button>
481
+ </div>
482
+ );
483
+ };
484
+
485
+ render(
486
+ <TestWrapper
487
+ mockNewOrgConfig={{
488
+ frontendConfig: {
489
+ widgetConfigs: {
490
+ 'config-1': mockWidgetConfig1,
491
+ 'config-2': mockWidgetConfig2,
492
+ },
493
+ },
494
+ loading: false,
495
+ }}
496
+ >
497
+ <TestComponent />
498
+ </TestWrapper>,
499
+ );
500
+
501
+ const getConfigsButton = screen.getByTestId('get-configs-btn');
502
+ await act(async () => {
503
+ getConfigsButton.click();
504
+ });
505
+
506
+ await waitFor(() => {
507
+ expect(screen.getByTestId('config-1-id')).toHaveTextContent('config-1');
508
+ expect(screen.getByTestId('config-2-id')).toHaveTextContent('config-2');
509
+ });
510
+ });
511
+ });
512
+ });
@@ -0,0 +1 @@
1
+ export * from './widgetConfigContext';
@@ -0,0 +1,84 @@
1
+ import { ReactNode, createContext, useCallback, useContext, useMemo, useState } from 'react';
2
+ import Logger from 'src/application/logging/logger';
3
+ import { useNewOrgConfig } from 'src/hooks/NewOrgConfig';
4
+ import { WidgetConfigV3, WidgetTypeV3 } from '../typesV3';
5
+
6
+ interface WidgetConfigRequest {
7
+ widgetType: WidgetTypeV3;
8
+ widgetConfigId: string;
9
+ }
10
+
11
+ interface WidgetConfigContextType {
12
+ getWidgetConfig: (request: WidgetConfigRequest) => Promise<WidgetConfigV3>;
13
+ isLoading: boolean;
14
+ }
15
+
16
+ const WidgetConfigContext = createContext<WidgetConfigContextType | undefined>(undefined);
17
+
18
+ export const WidgetConfigProvider: React.FC<{ children: ReactNode }> = ({ children }) => {
19
+ const { frontendConfig, loading: isFrontendConfigLoading } = useNewOrgConfig();
20
+ const [isLoadingWidgetConfig, setIsLoadingWidgetConfig] = useState(false);
21
+
22
+ const getWidgetConfig = useCallback(
23
+ async (request: WidgetConfigRequest): Promise<WidgetConfigV3> => {
24
+ setIsLoadingWidgetConfig(true);
25
+ Logger.logInfo('widgetConfigContext | retrieving widget config', {
26
+ widgetConfigId: request.widgetConfigId,
27
+ widgetType: request.widgetType,
28
+ });
29
+ if (isFrontendConfigLoading) {
30
+ setIsLoadingWidgetConfig(false);
31
+ throw new Error('Frontend config is loading');
32
+ }
33
+
34
+ const { widgetConfigId, widgetType } = request;
35
+ const response = frontendConfig?.widgetConfigs?.[widgetConfigId];
36
+ Logger.logInfo('widgetConfigContext | returning widget config response', response);
37
+
38
+ if (
39
+ [
40
+ WidgetTypeV3.SocialProofV3,
41
+ WidgetTypeV3.ChatPreviewV3,
42
+ WidgetTypeV3.ChatPreviewComparisonV3,
43
+ WidgetTypeV3.ChatPreviewLoadingV3,
44
+ ].includes(widgetType)
45
+ ) {
46
+ if (response?.type !== WidgetTypeV3.SocialProofV3) {
47
+ setIsLoadingWidgetConfig(false);
48
+ throw new Error(
49
+ `Widget type: ${widgetType} does not match widget config type: ${response?.type}`,
50
+ );
51
+ }
52
+ } else if (response?.type !== widgetType) {
53
+ setIsLoadingWidgetConfig(false);
54
+ throw new Error(
55
+ `Widget type: ${widgetType} does not match widget config type: ${response?.type}`,
56
+ );
57
+ }
58
+
59
+ if (!response) {
60
+ setIsLoadingWidgetConfig(false);
61
+ throw new Error(
62
+ `No widget config response found for widget type: ${request.widgetType} and widget config id: ${request.widgetConfigId}`,
63
+ );
64
+ }
65
+ setIsLoadingWidgetConfig(false);
66
+ return response;
67
+ },
68
+ [frontendConfig, isFrontendConfigLoading],
69
+ );
70
+
71
+ const isLoading = isFrontendConfigLoading || isLoadingWidgetConfig;
72
+
73
+ const value = useMemo(() => ({ getWidgetConfig, isLoading }), [getWidgetConfig, isLoading]);
74
+
75
+ return <WidgetConfigContext.Provider value={value}>{children}</WidgetConfigContext.Provider>;
76
+ };
77
+
78
+ export const useWidgetConfig = () => {
79
+ const context = useContext(WidgetConfigContext);
80
+ if (!context) {
81
+ throw new Error('useWidgetConfig must be used within a WidgetConfigProvider');
82
+ }
83
+ return context;
84
+ };
@@ -6,9 +6,9 @@ import {
6
6
  contextSourceAtom,
7
7
  envAtom as enviveEnvAtom,
8
8
  orgShortNameAtom as enviveOrgShortNameAtom,
9
+ orgIdAtom,
9
10
  } from 'src/atoms/envive/enviveConfig';
10
11
  import { chatIdAtom, userIdAtom } from 'src/atoms/app/index';
11
- import { useOrgId } from 'src/hooks/GraphQLConfig/useGraphQLConfig';
12
12
 
13
13
  export interface AppDetails {
14
14
  orgId: string;
@@ -21,7 +21,7 @@ export interface AppDetails {
21
21
  }
22
22
 
23
23
  export const useAppDetails = (): AppDetails => {
24
- const { orgId: fetchedOrgId } = useOrgId(); // Get orgId from useOrgId hook
24
+ const fetchedOrgId = useAtomValue(orgIdAtom);
25
25
  const orgId = fetchedOrgId ?? ''; // Provide a default empty string if undefined
26
26
 
27
27
  const orgShortName = useAtomValue(enviveOrgShortNameAtom) ?? 'spiffy-ai';
@@ -1,6 +1,4 @@
1
- import { useAtom } from 'jotai';
2
1
  import { useCallback, useEffect, useState } from 'react';
3
- import { orgIdAtom } from 'src/atoms/org/graphqlConfig';
4
2
  import { GraphQlConfigValues, useGraphQLClient } from 'src/contexts/graphqlContext/graphqlContext';
5
3
 
6
4
  export const useColorsAndFrontendConfig = () => {
@@ -32,31 +30,34 @@ export const useColorsAndFrontendConfig = () => {
32
30
  return { data, loading, error, refetch: fetchConfig };
33
31
  };
34
32
 
35
- export const useOrgId = () => {
36
- const { getOrgId, isReady } = useGraphQLClient();
37
- const [orgId, setOrgId] = useAtom(orgIdAtom);
33
+ export const useUIConfig = () => {
34
+ const { getConfig, isReady } = useGraphQLClient();
35
+ const [data, setData] = useState<GraphQlConfigValues>({});
38
36
  const [loading, setLoading] = useState(false);
39
37
  const [error, setError] = useState<Error | null>(null);
40
38
 
41
- useEffect(() => {
39
+ const fetchConfig = useCallback(async () => {
42
40
  if (!isReady) return;
41
+ if (loading) return;
42
+ if (Object.keys(data).length > 0) return;
43
43
 
44
- const fetchOrgId = async () => {
45
- setLoading(true);
46
- setError(null);
44
+ setLoading(true);
45
+ setError(null);
47
46
 
48
- try {
49
- const id = await getOrgId();
50
- setOrgId(id);
51
- } catch (err) {
52
- setError(err instanceof Error ? err : new Error('Unknown error'));
53
- } finally {
54
- setLoading(false);
55
- }
56
- };
47
+ try {
48
+ const result = await getConfig();
49
+ setData(result);
50
+ } catch (err) {
51
+ setError(err instanceof Error ? err : new Error('Unknown error'));
52
+ } finally {
53
+ setLoading(false);
54
+ }
55
+ }, [data, getConfig, isReady, loading]);
57
56
 
58
- fetchOrgId();
59
- }, [getOrgId, isReady, setOrgId]);
57
+ console.log('====== useUIConfig hook ======', isReady, loading, data, error);
58
+ useEffect(() => {
59
+ fetchConfig();
60
+ }, [fetchConfig]);
60
61
 
61
- return { orgId, loading, error };
62
+ return { data, loading, error, refetch: fetchConfig };
62
63
  };