@envive-ai/react-hooks 0.3.14 → 0.3.15-beta.1

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 (74) hide show
  1. package/dist/atoms/app/index.d.cts +1 -1
  2. package/dist/atoms/app/index.d.ts +7 -7
  3. package/dist/atoms/app/variant.d.ts +6 -6
  4. package/dist/atoms/chat/chatState.d.cts +18 -18
  5. package/dist/atoms/chat/chatState.d.ts +18 -18
  6. package/dist/atoms/chat/form.d.cts +2 -2
  7. package/dist/atoms/chat/form.d.ts +3 -3
  8. package/dist/atoms/chat/index.d.cts +2 -2
  9. package/dist/atoms/chat/lastMessage.d.ts +2 -2
  10. package/dist/atoms/chat/messageQueue.d.ts +7 -7
  11. package/dist/atoms/chat/performanceMetrics.d.cts +6 -6
  12. package/dist/atoms/chat/performanceMetrics.d.ts +6 -6
  13. package/dist/atoms/chat/renderedWidgetRefs.d.ts +3 -3
  14. package/dist/atoms/chat/replies.d.ts +1 -1
  15. package/dist/atoms/chat/suggestions.d.cts +2 -2
  16. package/dist/atoms/chat/suggestions.d.ts +3 -3
  17. package/dist/atoms/envive/enviveConfig.d.cts +13 -13
  18. package/dist/atoms/envive/enviveConfig.d.ts +13 -13
  19. package/dist/atoms/globalSearch/globalSearch.d.cts +5 -5
  20. package/dist/atoms/globalSearch/globalSearch.d.ts +5 -5
  21. package/dist/atoms/org/customerService.d.cts +6 -6
  22. package/dist/atoms/org/customerService.d.ts +6 -6
  23. package/dist/atoms/org/graphqlConfig.d.cts +4 -4
  24. package/dist/atoms/org/graphqlConfig.d.ts +4 -4
  25. package/dist/atoms/org/newOrgConfigAtom.d.cts +2 -2
  26. package/dist/atoms/org/newOrgConfigAtom.d.ts +2 -2
  27. package/dist/atoms/org/orgAnalyticsConfig.d.cts +5 -5
  28. package/dist/atoms/org/orgAnalyticsConfig.d.ts +5 -5
  29. package/dist/atoms/search/chatSearch.d.cts +17 -17
  30. package/dist/atoms/search/chatSearch.d.ts +17 -17
  31. package/dist/atoms/search/searchAPI.d.cts +13 -13
  32. package/dist/atoms/search/searchAPI.d.ts +13 -13
  33. package/dist/atoms/search/types.d.cts +1 -1
  34. package/dist/atoms/search/utils.d.ts +1 -1
  35. package/dist/atoms/widget/chatPreviewLoading.d.cts +2 -2
  36. package/dist/atoms/widget/chatPreviewLoading.d.ts +2 -2
  37. package/dist/contexts/salesAgentContext/chatAPI.cjs +21 -1
  38. package/dist/contexts/salesAgentContext/chatAPI.js +21 -1
  39. package/dist/contexts/systemSettingsContext/systemSettingsContext.d.cts +2 -2
  40. package/dist/contexts/types.d.cts +1 -1
  41. package/dist/contexts/types.d.ts +1 -1
  42. package/dist/contexts/typesV3.d.cts +1 -1
  43. package/dist/contexts/typesV3.d.ts +1 -1
  44. package/dist/hooks/ChatToggle/useChatToggle.cjs +47 -17
  45. package/dist/hooks/ChatToggle/useChatToggle.d.cts +2 -1
  46. package/dist/hooks/ChatToggle/useChatToggle.d.ts +2 -1
  47. package/dist/hooks/ChatToggle/useChatToggle.js +48 -18
  48. package/dist/hooks/GrabAndScroll/useGrabAndScroll.d.cts +2 -2
  49. package/dist/hooks/GrabAndScroll/useGrabAndScroll.d.ts +2 -2
  50. package/dist/hooks/WidgetInteraction/index.cjs +3 -0
  51. package/dist/hooks/WidgetInteraction/index.d.cts +2 -0
  52. package/dist/hooks/WidgetInteraction/index.d.ts +2 -0
  53. package/dist/hooks/WidgetInteraction/index.js +3 -0
  54. package/dist/hooks/WidgetInteraction/types.cjs +47 -0
  55. package/dist/hooks/WidgetInteraction/types.d.cts +110 -0
  56. package/dist/hooks/WidgetInteraction/types.d.ts +110 -0
  57. package/dist/hooks/WidgetInteraction/types.js +44 -0
  58. package/dist/hooks/WidgetInteraction/useWidgetInteraction.cjs +34 -0
  59. package/dist/hooks/WidgetInteraction/useWidgetInteraction.d.cts +10 -0
  60. package/dist/hooks/WidgetInteraction/useWidgetInteraction.d.ts +10 -0
  61. package/dist/hooks/WidgetInteraction/useWidgetInteraction.js +33 -0
  62. package/dist/hooks/WidgetInteraction/utils.cjs +34 -0
  63. package/dist/hooks/WidgetInteraction/utils.d.cts +8 -0
  64. package/dist/hooks/WidgetInteraction/utils.d.ts +8 -0
  65. package/dist/hooks/WidgetInteraction/utils.js +34 -0
  66. package/dist/hooks/utils.d.cts +1 -1
  67. package/dist/hooks/utils.d.ts +1 -1
  68. package/package.json +13 -1
  69. package/src/contexts/salesAgentContext/chatAPI.ts +39 -6
  70. package/src/hooks/ChatToggle/useChatToggle.ts +35 -2
  71. package/src/hooks/WidgetInteraction/index.ts +1 -0
  72. package/src/hooks/WidgetInteraction/types.ts +139 -0
  73. package/src/hooks/WidgetInteraction/useWidgetInteraction.ts +35 -0
  74. package/src/hooks/WidgetInteraction/utils.ts +44 -0
@@ -0,0 +1,34 @@
1
+ const require_variantInfo = require('../../application/models/variantInfo/variantInfo.cjs');
2
+ require('../../application/models/index.cjs');
3
+ const require_hooks_WidgetInteraction_types = require('./types.cjs');
4
+
5
+ //#region src/hooks/WidgetInteraction/utils.ts
6
+ const extractPageContext = (pageVariant) => {
7
+ switch (pageVariant.variantType) {
8
+ case require_variantInfo.VariantTypeEnum.Pdp: return {
9
+ page_id: pageVariant.productId,
10
+ page_type: require_hooks_WidgetInteraction_types.WidgetInteractionPageType.PDP
11
+ };
12
+ case require_variantInfo.VariantTypeEnum.Plp: return {
13
+ page_id: pageVariant.plpId,
14
+ page_type: require_hooks_WidgetInteraction_types.WidgetInteractionPageType.PLP
15
+ };
16
+ case require_variantInfo.VariantTypeEnum.Home: return {
17
+ page_id: pageVariant.url,
18
+ page_type: require_hooks_WidgetInteraction_types.WidgetInteractionPageType.HOMEPAGE
19
+ };
20
+ case require_variantInfo.VariantTypeEnum.Other: return {
21
+ page_id: pageVariant.url,
22
+ page_type: require_hooks_WidgetInteraction_types.WidgetInteractionPageType.OTHER
23
+ };
24
+ case require_variantInfo.VariantTypeEnum.FullPageSalesAgent: return {
25
+ page_id: pageVariant.url,
26
+ page_type: require_hooks_WidgetInteraction_types.WidgetInteractionPageType.FULL_PAGE
27
+ };
28
+ }
29
+ return null;
30
+ };
31
+
32
+ //#endregion
33
+ exports.extractPageContext = extractPageContext;
34
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuY2pzIiwibmFtZXMiOlsiVmFyaWFudFR5cGVFbnVtIiwiV2lkZ2V0SW50ZXJhY3Rpb25QYWdlVHlwZSJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ob29rcy9XaWRnZXRJbnRlcmFjdGlvbi91dGlscy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBWYXJpYW50VHlwZUVudW0gfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzJztcbmltcG9ydCB7XG4gIEZ1bGxQYWdlU2FsZXNBZ2VudFZhcmlhbnRJbmZvLFxuICBIb21lVmFyaWFudEluZm8sXG4gIE90aGVyVmFyaWFudEluZm8sXG4gIFBhZ2VWYXJpYW50SW5mbyxcbiAgUERQUGFnZVZhcmlhbnRJbmZvLFxuICBQTFBQYWdlVmFyaWFudEluZm8sXG59IGZyb20gJy4uLy4uL2NvbnRleHRzL3BhZ2VDb250ZXh0L3R5cGVzJztcbmltcG9ydCB7IFdpZGdldEludGVyYWN0aW9uQ29udGV4dCwgV2lkZ2V0SW50ZXJhY3Rpb25QYWdlVHlwZSB9IGZyb20gJy4vdHlwZXMnO1xuXG5leHBvcnQgY29uc3QgZXh0cmFjdFBhZ2VDb250ZXh0ID0gKFxuICBwYWdlVmFyaWFudDogUGFnZVZhcmlhbnRJbmZvLFxuKTogV2lkZ2V0SW50ZXJhY3Rpb25Db250ZXh0IHwgbnVsbCA9PiB7XG4gIHN3aXRjaCAocGFnZVZhcmlhbnQudmFyaWFudFR5cGUpIHtcbiAgICBjYXNlIFZhcmlhbnRUeXBlRW51bS5QZHA6XG4gICAgICByZXR1cm4ge1xuICAgICAgICBwYWdlX2lkOiAocGFnZVZhcmlhbnQgYXMgUERQUGFnZVZhcmlhbnRJbmZvKS5wcm9kdWN0SWQsXG4gICAgICAgIHBhZ2VfdHlwZTogV2lkZ2V0SW50ZXJhY3Rpb25QYWdlVHlwZS5QRFAsXG4gICAgICB9O1xuICAgIGNhc2UgVmFyaWFudFR5cGVFbnVtLlBscDpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHBhZ2VfaWQ6IChwYWdlVmFyaWFudCBhcyBQTFBQYWdlVmFyaWFudEluZm8pLnBscElkLFxuICAgICAgICBwYWdlX3R5cGU6IFdpZGdldEludGVyYWN0aW9uUGFnZVR5cGUuUExQLFxuICAgICAgfTtcbiAgICBjYXNlIFZhcmlhbnRUeXBlRW51bS5Ib21lOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcGFnZV9pZDogKHBhZ2VWYXJpYW50IGFzIEhvbWVWYXJpYW50SW5mbykudXJsLFxuICAgICAgICBwYWdlX3R5cGU6IFdpZGdldEludGVyYWN0aW9uUGFnZVR5cGUuSE9NRVBBR0UsXG4gICAgICB9O1xuICAgIGNhc2UgVmFyaWFudFR5cGVFbnVtLk90aGVyOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcGFnZV9pZDogKHBhZ2VWYXJpYW50IGFzIE90aGVyVmFyaWFudEluZm8pLnVybCxcbiAgICAgICAgcGFnZV90eXBlOiBXaWRnZXRJbnRlcmFjdGlvblBhZ2VUeXBlLk9USEVSLFxuICAgICAgfTtcbiAgICBjYXNlIFZhcmlhbnRUeXBlRW51bS5GdWxsUGFnZVNhbGVzQWdlbnQ6XG4gICAgICByZXR1cm4ge1xuICAgICAgICBwYWdlX2lkOiAocGFnZVZhcmlhbnQgYXMgRnVsbFBhZ2VTYWxlc0FnZW50VmFyaWFudEluZm8pLnVybCxcbiAgICAgICAgcGFnZV90eXBlOiBXaWRnZXRJbnRlcmFjdGlvblBhZ2VUeXBlLkZVTExfUEFHRSxcbiAgICAgIH07XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7O0FBV0EsTUFBYSxzQkFDWCxnQkFDb0M7QUFDcEMsU0FBUSxZQUFZLGFBQXBCO0VBQ0UsS0FBS0Esb0NBQWdCLElBQ25CLFFBQU87R0FDTCxTQUFVLFlBQW1DO0dBQzdDLFdBQVdDLGdFQUEwQjtHQUN0QztFQUNILEtBQUtELG9DQUFnQixJQUNuQixRQUFPO0dBQ0wsU0FBVSxZQUFtQztHQUM3QyxXQUFXQyxnRUFBMEI7R0FDdEM7RUFDSCxLQUFLRCxvQ0FBZ0IsS0FDbkIsUUFBTztHQUNMLFNBQVUsWUFBZ0M7R0FDMUMsV0FBV0MsZ0VBQTBCO0dBQ3RDO0VBQ0gsS0FBS0Qsb0NBQWdCLE1BQ25CLFFBQU87R0FDTCxTQUFVLFlBQWlDO0dBQzNDLFdBQVdDLGdFQUEwQjtHQUN0QztFQUNILEtBQUtELG9DQUFnQixtQkFDbkIsUUFBTztHQUNMLFNBQVUsWUFBOEM7R0FDeEQsV0FBV0MsZ0VBQTBCO0dBQ3RDOztBQUdMLFFBQU8ifQ==
@@ -0,0 +1,8 @@
1
+ import { PageVariantInfo } from "../../contexts/pageContext/types.cjs";
2
+ import { WidgetInteractionContext } from "./types.cjs";
3
+
4
+ //#region src/hooks/WidgetInteraction/utils.d.ts
5
+ declare const extractPageContext: (pageVariant: PageVariantInfo) => WidgetInteractionContext | null;
6
+ //#endregion
7
+ export { extractPageContext };
8
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuZC5jdHMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2hvb2tzL1dpZGdldEludGVyYWN0aW9uL3V0aWxzLmQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGFnZVZhcmlhbnRJbmZvIH0gZnJvbSAnLi4vLi4vY29udGV4dHMvcGFnZUNvbnRleHQvdHlwZXMnO1xuaW1wb3J0IHsgV2lkZ2V0SW50ZXJhY3Rpb25Db250ZXh0IH0gZnJvbSAnLi90eXBlcyc7XG5leHBvcnQgZGVjbGFyZSBjb25zdCBleHRyYWN0UGFnZUNvbnRleHQ6IChwYWdlVmFyaWFudDogUGFnZVZhcmlhbnRJbmZvKSA9PiBXaWRnZXRJbnRlcmFjdGlvbkNvbnRleHQgfCBudWxsO1xuIl0sIm1hcHBpbmdzIjoiOzs7O0FBRUEsSUFBVyxxQkFBcUI7Q0FBQztPQUFXO09BQXVCO0NBQXlCIn0=
@@ -0,0 +1,8 @@
1
+ import { PageVariantInfo } from "../../contexts/pageContext/types.js";
2
+ import { WidgetInteractionContext } from "./types.js";
3
+
4
+ //#region src/hooks/WidgetInteraction/utils.d.ts
5
+ declare const extractPageContext: (pageVariant: PageVariantInfo) => WidgetInteractionContext | null;
6
+ //#endregion
7
+ export { extractPageContext };
8
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuZC50cyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvaG9va3MvV2lkZ2V0SW50ZXJhY3Rpb24vdXRpbHMuZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQYWdlVmFyaWFudEluZm8gfSBmcm9tICcuLi8uLi9jb250ZXh0cy9wYWdlQ29udGV4dC90eXBlcyc7XG5pbXBvcnQgeyBXaWRnZXRJbnRlcmFjdGlvbkNvbnRleHQgfSBmcm9tICcuL3R5cGVzJztcbmV4cG9ydCBkZWNsYXJlIGNvbnN0IGV4dHJhY3RQYWdlQ29udGV4dDogKHBhZ2VWYXJpYW50OiBQYWdlVmFyaWFudEluZm8pID0+IFdpZGdldEludGVyYWN0aW9uQ29udGV4dCB8IG51bGw7XG4iXSwibWFwcGluZ3MiOiI7Ozs7QUFFQSxJQUFXLHFCQUFxQjtDQUFDO09BQVc7T0FBdUI7Q0FBeUIifQ==
@@ -0,0 +1,34 @@
1
+ import { VariantTypeEnum } from "../../application/models/variantInfo/variantInfo.js";
2
+ import "../../application/models/index.js";
3
+ import { WidgetInteractionPageType } from "./types.js";
4
+
5
+ //#region src/hooks/WidgetInteraction/utils.ts
6
+ const extractPageContext = (pageVariant) => {
7
+ switch (pageVariant.variantType) {
8
+ case VariantTypeEnum.Pdp: return {
9
+ page_id: pageVariant.productId,
10
+ page_type: WidgetInteractionPageType.PDP
11
+ };
12
+ case VariantTypeEnum.Plp: return {
13
+ page_id: pageVariant.plpId,
14
+ page_type: WidgetInteractionPageType.PLP
15
+ };
16
+ case VariantTypeEnum.Home: return {
17
+ page_id: pageVariant.url,
18
+ page_type: WidgetInteractionPageType.HOMEPAGE
19
+ };
20
+ case VariantTypeEnum.Other: return {
21
+ page_id: pageVariant.url,
22
+ page_type: WidgetInteractionPageType.OTHER
23
+ };
24
+ case VariantTypeEnum.FullPageSalesAgent: return {
25
+ page_id: pageVariant.url,
26
+ page_type: WidgetInteractionPageType.FULL_PAGE
27
+ };
28
+ }
29
+ return null;
30
+ };
31
+
32
+ //#endregion
33
+ export { extractPageContext };
34
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2hvb2tzL1dpZGdldEludGVyYWN0aW9uL3V0aWxzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFZhcmlhbnRUeXBlRW51bSB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMnO1xuaW1wb3J0IHtcbiAgRnVsbFBhZ2VTYWxlc0FnZW50VmFyaWFudEluZm8sXG4gIEhvbWVWYXJpYW50SW5mbyxcbiAgT3RoZXJWYXJpYW50SW5mbyxcbiAgUGFnZVZhcmlhbnRJbmZvLFxuICBQRFBQYWdlVmFyaWFudEluZm8sXG4gIFBMUFBhZ2VWYXJpYW50SW5mbyxcbn0gZnJvbSAnLi4vLi4vY29udGV4dHMvcGFnZUNvbnRleHQvdHlwZXMnO1xuaW1wb3J0IHsgV2lkZ2V0SW50ZXJhY3Rpb25Db250ZXh0LCBXaWRnZXRJbnRlcmFjdGlvblBhZ2VUeXBlIH0gZnJvbSAnLi90eXBlcyc7XG5cbmV4cG9ydCBjb25zdCBleHRyYWN0UGFnZUNvbnRleHQgPSAoXG4gIHBhZ2VWYXJpYW50OiBQYWdlVmFyaWFudEluZm8sXG4pOiBXaWRnZXRJbnRlcmFjdGlvbkNvbnRleHQgfCBudWxsID0+IHtcbiAgc3dpdGNoIChwYWdlVmFyaWFudC52YXJpYW50VHlwZSkge1xuICAgIGNhc2UgVmFyaWFudFR5cGVFbnVtLlBkcDpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHBhZ2VfaWQ6IChwYWdlVmFyaWFudCBhcyBQRFBQYWdlVmFyaWFudEluZm8pLnByb2R1Y3RJZCxcbiAgICAgICAgcGFnZV90eXBlOiBXaWRnZXRJbnRlcmFjdGlvblBhZ2VUeXBlLlBEUCxcbiAgICAgIH07XG4gICAgY2FzZSBWYXJpYW50VHlwZUVudW0uUGxwOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcGFnZV9pZDogKHBhZ2VWYXJpYW50IGFzIFBMUFBhZ2VWYXJpYW50SW5mbykucGxwSWQsXG4gICAgICAgIHBhZ2VfdHlwZTogV2lkZ2V0SW50ZXJhY3Rpb25QYWdlVHlwZS5QTFAsXG4gICAgICB9O1xuICAgIGNhc2UgVmFyaWFudFR5cGVFbnVtLkhvbWU6XG4gICAgICByZXR1cm4ge1xuICAgICAgICBwYWdlX2lkOiAocGFnZVZhcmlhbnQgYXMgSG9tZVZhcmlhbnRJbmZvKS51cmwsXG4gICAgICAgIHBhZ2VfdHlwZTogV2lkZ2V0SW50ZXJhY3Rpb25QYWdlVHlwZS5IT01FUEFHRSxcbiAgICAgIH07XG4gICAgY2FzZSBWYXJpYW50VHlwZUVudW0uT3RoZXI6XG4gICAgICByZXR1cm4ge1xuICAgICAgICBwYWdlX2lkOiAocGFnZVZhcmlhbnQgYXMgT3RoZXJWYXJpYW50SW5mbykudXJsLFxuICAgICAgICBwYWdlX3R5cGU6IFdpZGdldEludGVyYWN0aW9uUGFnZVR5cGUuT1RIRVIsXG4gICAgICB9O1xuICAgIGNhc2UgVmFyaWFudFR5cGVFbnVtLkZ1bGxQYWdlU2FsZXNBZ2VudDpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHBhZ2VfaWQ6IChwYWdlVmFyaWFudCBhcyBGdWxsUGFnZVNhbGVzQWdlbnRWYXJpYW50SW5mbykudXJsLFxuICAgICAgICBwYWdlX3R5cGU6IFdpZGdldEludGVyYWN0aW9uUGFnZVR5cGUuRlVMTF9QQUdFLFxuICAgICAgfTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFXQSxNQUFhLHNCQUNYLGdCQUNvQztBQUNwQyxTQUFRLFlBQVksYUFBcEI7RUFDRSxLQUFLLGdCQUFnQixJQUNuQixRQUFPO0dBQ0wsU0FBVSxZQUFtQztHQUM3QyxXQUFXLDBCQUEwQjtHQUN0QztFQUNILEtBQUssZ0JBQWdCLElBQ25CLFFBQU87R0FDTCxTQUFVLFlBQW1DO0dBQzdDLFdBQVcsMEJBQTBCO0dBQ3RDO0VBQ0gsS0FBSyxnQkFBZ0IsS0FDbkIsUUFBTztHQUNMLFNBQVUsWUFBZ0M7R0FDMUMsV0FBVywwQkFBMEI7R0FDdEM7RUFDSCxLQUFLLGdCQUFnQixNQUNuQixRQUFPO0dBQ0wsU0FBVSxZQUFpQztHQUMzQyxXQUFXLDBCQUEwQjtHQUN0QztFQUNILEtBQUssZ0JBQWdCLG1CQUNuQixRQUFPO0dBQ0wsU0FBVSxZQUE4QztHQUN4RCxXQUFXLDBCQUEwQjtHQUN0Qzs7QUFHTCxRQUFPIn0=
@@ -19,4 +19,4 @@ declare enum SearchResultsState {
19
19
  declare const getSearchResultsState: (isLoadingSearch: boolean, searchData: SearchResult | null) => SearchResultsState;
20
20
  //#endregion
21
21
  export { SearchResultsState, createAppLoadedEvent, createVisitUserEvent, getSearchResultsState, isElementPartiallyVisible, isWithinBusinessHours };
22
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuZC5jdHMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2hvb2tzL3V0aWxzLmQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU2VhcmNoUmVzdWx0IH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy9hcGkvc2VhcmNoJztcbmltcG9ydCB7IFVzZXJFdmVudCwgVmFyaWFudEluZm8gfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzJztcbmV4cG9ydCBkZWNsYXJlIGNvbnN0IGlzRWxlbWVudFBhcnRpYWxseVZpc2libGU6IChlbD86IEhUTUxEaXZFbGVtZW50IHwgbnVsbCkgPT4gYm9vbGVhbjtcbmV4cG9ydCBkZWNsYXJlIGNvbnN0IGNyZWF0ZUFwcExvYWRlZEV2ZW50OiAoKSA9PiBVc2VyRXZlbnQ7XG5leHBvcnQgZGVjbGFyZSBjb25zdCBjcmVhdGVWaXNpdFVzZXJFdmVudDogKHsgdmFyaWFudEluZm8sIH06IHtcbiAgICB2YXJpYW50SW5mbzogVmFyaWFudEluZm87XG59KSA9PiBVc2VyRXZlbnQgfCB1bmRlZmluZWQ7XG5leHBvcnQgZGVjbGFyZSBjb25zdCBpc1dpdGhpbkJ1c2luZXNzSG91cnM6IChzdGFydFRpbWU6IHN0cmluZywgZW5kVGltZTogc3RyaW5nLCB0aW1lWm9uZTogc3RyaW5nKSA9PiBib29sZWFuO1xuZXhwb3J0IGRlY2xhcmUgZW51bSBTZWFyY2hSZXN1bHRzU3RhdGUge1xuICAgIExvYWRpbmcgPSAwLFxuICAgIFJlc3VsdHMgPSAxLFxuICAgIE5vUmVzdWx0cyA9IDJcbn1cbmV4cG9ydCBkZWNsYXJlIGNvbnN0IGdldFNlYXJjaFJlc3VsdHNTdGF0ZTogKGlzTG9hZGluZ1NlYXJjaDogYm9vbGVhbiwgc2VhcmNoRGF0YTogU2VhcmNoUmVzdWx0IHwgbnVsbCkgPT4gU2VhcmNoUmVzdWx0c1N0YXRlO1xuIl0sIm1hcHBpbmdzIjoiOzs7OztBQUVBLElBQVcsNEJBQTRCLENBQUMsU0FBUyxlQUFlO0FBQ2hFLElBQVcsdUJBQXVCLENBQUMsU0FBUyxVQUFVO0FBQ3RELElBQVcsdUJBQXVCO0NBQUM7T0FBUztPQUFrQjtPQUFBO0NBQUE7QUFDOUQsSUFBVyx3QkFBaUIsQ0FBQSxFQUFBO0FBQzVCLElBQVcscUJBQWdCLENBQUEsRUFBQTtBQUMzQixJQUFXLHdCQUF3QjtDQUFDO09BQVM7T0FBb0I7Q0FBbUIifQ==
22
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuZC5jdHMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2hvb2tzL3V0aWxzLmQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU2VhcmNoUmVzdWx0IH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy9hcGkvc2VhcmNoJztcbmltcG9ydCB7IFVzZXJFdmVudCwgVmFyaWFudEluZm8gfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzJztcbmV4cG9ydCBkZWNsYXJlIGNvbnN0IGlzRWxlbWVudFBhcnRpYWxseVZpc2libGU6IChlbD86IEhUTUxEaXZFbGVtZW50IHwgbnVsbCkgPT4gYm9vbGVhbjtcbmV4cG9ydCBkZWNsYXJlIGNvbnN0IGNyZWF0ZUFwcExvYWRlZEV2ZW50OiAoKSA9PiBVc2VyRXZlbnQ7XG5leHBvcnQgZGVjbGFyZSBjb25zdCBjcmVhdGVWaXNpdFVzZXJFdmVudDogKHsgdmFyaWFudEluZm8sIH06IHtcbiAgICB2YXJpYW50SW5mbzogVmFyaWFudEluZm87XG59KSA9PiBVc2VyRXZlbnQgfCB1bmRlZmluZWQ7XG5leHBvcnQgZGVjbGFyZSBjb25zdCBpc1dpdGhpbkJ1c2luZXNzSG91cnM6IChzdGFydFRpbWU6IHN0cmluZywgZW5kVGltZTogc3RyaW5nLCB0aW1lWm9uZTogc3RyaW5nKSA9PiBib29sZWFuO1xuZXhwb3J0IGRlY2xhcmUgZW51bSBTZWFyY2hSZXN1bHRzU3RhdGUge1xuICAgIExvYWRpbmcgPSAwLFxuICAgIFJlc3VsdHMgPSAxLFxuICAgIE5vUmVzdWx0cyA9IDJcbn1cbmV4cG9ydCBkZWNsYXJlIGNvbnN0IGdldFNlYXJjaFJlc3VsdHNTdGF0ZTogKGlzTG9hZGluZ1NlYXJjaDogYm9vbGVhbiwgc2VhcmNoRGF0YTogU2VhcmNoUmVzdWx0IHwgbnVsbCkgPT4gU2VhcmNoUmVzdWx0c1N0YXRlO1xuIl0sIm1hcHBpbmdzIjoiOzs7OztBQUVBLElBQVcsNEJBQTRCLENBQUMsV0FBVyxlQUFlO0FBQ2xFLElBQVcsdUJBQXVCLENBQUMsV0FBVyxVQUFVO0FBQ3hELElBQVcsdUJBQXVCO0NBQUM7T0FBVztPQUFnQjtPQUFBO0NBQUE7QUFDOUQsSUFBVyx3QkFBaUIsQ0FBQSxJQUFBO0FBQzVCLElBQVcscUJBQWdCLENBQUEsSUFBQTtBQUMzQixJQUFXLHdCQUF3QjtDQUFDO09BQVc7T0FBb0I7Q0FBbUIifQ==
@@ -19,4 +19,4 @@ declare enum SearchResultsState {
19
19
  declare const getSearchResultsState: (isLoadingSearch: boolean, searchData: SearchResult | null) => SearchResultsState;
20
20
  //#endregion
21
21
  export { SearchResultsState, createAppLoadedEvent, createVisitUserEvent, getSearchResultsState, isElementPartiallyVisible, isWithinBusinessHours };
22
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuZC50cyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi9zcmMvaG9va3MvdXRpbHMuZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTZWFyY2hSZXN1bHQgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzL2FwaS9zZWFyY2gnO1xuaW1wb3J0IHsgVXNlckV2ZW50LCBWYXJpYW50SW5mbyB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMnO1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgaXNFbGVtZW50UGFydGlhbGx5VmlzaWJsZTogKGVsPzogSFRNTERpdkVsZW1lbnQgfCBudWxsKSA9PiBib29sZWFuO1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgY3JlYXRlQXBwTG9hZGVkRXZlbnQ6ICgpID0+IFVzZXJFdmVudDtcbmV4cG9ydCBkZWNsYXJlIGNvbnN0IGNyZWF0ZVZpc2l0VXNlckV2ZW50OiAoeyB2YXJpYW50SW5mbywgfToge1xuICAgIHZhcmlhbnRJbmZvOiBWYXJpYW50SW5mbztcbn0pID0+IFVzZXJFdmVudCB8IHVuZGVmaW5lZDtcbmV4cG9ydCBkZWNsYXJlIGNvbnN0IGlzV2l0aGluQnVzaW5lc3NIb3VyczogKHN0YXJ0VGltZTogc3RyaW5nLCBlbmRUaW1lOiBzdHJpbmcsIHRpbWVab25lOiBzdHJpbmcpID0+IGJvb2xlYW47XG5leHBvcnQgZGVjbGFyZSBlbnVtIFNlYXJjaFJlc3VsdHNTdGF0ZSB7XG4gICAgTG9hZGluZyA9IDAsXG4gICAgUmVzdWx0cyA9IDEsXG4gICAgTm9SZXN1bHRzID0gMlxufVxuZXhwb3J0IGRlY2xhcmUgY29uc3QgZ2V0U2VhcmNoUmVzdWx0c1N0YXRlOiAoaXNMb2FkaW5nU2VhcmNoOiBib29sZWFuLCBzZWFyY2hEYXRhOiBTZWFyY2hSZXN1bHQgfCBudWxsKSA9PiBTZWFyY2hSZXN1bHRzU3RhdGU7XG4iXSwibWFwcGluZ3MiOiI7Ozs7O0FBRUEsSUFBVyw0QkFBNEIsQ0FBQyxVQUFVLGVBQWU7QUFDakUsSUFBVyx1QkFBdUIsQ0FBQyxVQUFVLFVBQVU7QUFDdkQsSUFBVyx1QkFBdUI7Q0FBQztPQUFVO09BQWlCO09BQUE7Q0FBQTtBQUM5RCxJQUFXLHdCQUFpQixDQUFBLEdBQUE7QUFDNUIsSUFBVyxxQkFBZ0IsQ0FBQSxHQUFBO0FBQzNCLElBQVcsd0JBQXdCO0NBQUM7T0FBVTtPQUFvQjtDQUFtQiJ9
22
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuZC50cyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi9zcmMvaG9va3MvdXRpbHMuZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTZWFyY2hSZXN1bHQgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzL2FwaS9zZWFyY2gnO1xuaW1wb3J0IHsgVXNlckV2ZW50LCBWYXJpYW50SW5mbyB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMnO1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgaXNFbGVtZW50UGFydGlhbGx5VmlzaWJsZTogKGVsPzogSFRNTERpdkVsZW1lbnQgfCBudWxsKSA9PiBib29sZWFuO1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgY3JlYXRlQXBwTG9hZGVkRXZlbnQ6ICgpID0+IFVzZXJFdmVudDtcbmV4cG9ydCBkZWNsYXJlIGNvbnN0IGNyZWF0ZVZpc2l0VXNlckV2ZW50OiAoeyB2YXJpYW50SW5mbywgfToge1xuICAgIHZhcmlhbnRJbmZvOiBWYXJpYW50SW5mbztcbn0pID0+IFVzZXJFdmVudCB8IHVuZGVmaW5lZDtcbmV4cG9ydCBkZWNsYXJlIGNvbnN0IGlzV2l0aGluQnVzaW5lc3NIb3VyczogKHN0YXJ0VGltZTogc3RyaW5nLCBlbmRUaW1lOiBzdHJpbmcsIHRpbWVab25lOiBzdHJpbmcpID0+IGJvb2xlYW47XG5leHBvcnQgZGVjbGFyZSBlbnVtIFNlYXJjaFJlc3VsdHNTdGF0ZSB7XG4gICAgTG9hZGluZyA9IDAsXG4gICAgUmVzdWx0cyA9IDEsXG4gICAgTm9SZXN1bHRzID0gMlxufVxuZXhwb3J0IGRlY2xhcmUgY29uc3QgZ2V0U2VhcmNoUmVzdWx0c1N0YXRlOiAoaXNMb2FkaW5nU2VhcmNoOiBib29sZWFuLCBzZWFyY2hEYXRhOiBTZWFyY2hSZXN1bHQgfCBudWxsKSA9PiBTZWFyY2hSZXN1bHRzU3RhdGU7XG4iXSwibWFwcGluZ3MiOiI7Ozs7O0FBRUEsSUFBVyw0QkFBNEIsQ0FBQyxTQUFTLGVBQWU7QUFDaEUsSUFBVyx1QkFBdUIsQ0FBQyxTQUFTLFVBQVU7QUFDdEQsSUFBVyx1QkFBdUI7Q0FBQztPQUFTO09BQWtCO09BQUE7Q0FBQTtBQUM5RCxJQUFXLHdCQUFpQixDQUFBLEVBQUE7QUFDNUIsSUFBVyxxQkFBZ0IsQ0FBQSxFQUFBO0FBQzNCLElBQVcsd0JBQXdCO0NBQUM7T0FBUztPQUFvQjtDQUFtQiJ9
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@envive-ai/react-hooks",
3
- "version": "0.3.14",
3
+ "version": "0.3.15-beta.1",
4
4
  "description": "React hooks for connecting to Envive AI services.",
5
5
  "keywords": [
6
6
  "react",
@@ -378,6 +378,18 @@
378
378
  "import": "./dist/hooks/utils.js",
379
379
  "require": "./dist/hooks/utils.cjs"
380
380
  },
381
+ "./hooks/WidgetInteraction": {
382
+ "import": "./dist/hooks/WidgetInteraction/index.js",
383
+ "require": "./dist/hooks/WidgetInteraction/index.cjs"
384
+ },
385
+ "./hooks/WidgetInteraction/types": {
386
+ "import": "./dist/hooks/WidgetInteraction/types.js",
387
+ "require": "./dist/hooks/WidgetInteraction/types.cjs"
388
+ },
389
+ "./hooks/WidgetInteraction/utils": {
390
+ "import": "./dist/hooks/WidgetInteraction/utils.js",
391
+ "require": "./dist/hooks/WidgetInteraction/utils.cjs"
392
+ },
381
393
  "./interceptors": {
382
394
  "import": "./dist/interceptors/index.js",
383
395
  "require": "./dist/interceptors/index.cjs"
@@ -1,6 +1,8 @@
1
1
  // This component will interact with the backend API to get the responses from the sales agent.
2
- import Logger from 'src/application/logging/logger';
3
2
  import { PageVisitCategory, UserEventCategory } from '@spiffy-ai/commerce-api-client';
3
+ import { useAtomValue, useSetAtom } from 'jotai';
4
+ import { useCallback } from 'react';
5
+ import Logger from 'src/application/logging/logger';
4
6
  import {
5
7
  ChatElementDisplayLocationV3,
6
8
  FormSubmittedAttributes,
@@ -9,14 +11,17 @@ import {
9
11
  Suggestion,
10
12
  UserEvent,
11
13
  } from 'src/application/models';
12
- import { useAtomValue, useSetAtom } from 'jotai';
13
- import { useCallback } from 'react';
14
- import { v4 as uuid } from 'uuid';
14
+ import { hasParsedVariantInfoAtom } from 'src/atoms/app';
15
+ import { analyticsContextAtom } from 'src/atoms/app/variant';
15
16
  import { formSubmitAtom, replyEventCategoryAtom } from 'src/atoms/chat';
16
17
  import { queueUserEventAtom } from 'src/atoms/chat/messageQueue';
18
+ import { useWidgetInteraction } from 'src/hooks/WidgetInteraction';
19
+ import {
20
+ WidgetInteractionComponent,
21
+ WidgetInteractionType,
22
+ } from 'src/hooks/WidgetInteraction/types';
17
23
  import { EnviveMetricsEventName } from 'src/services/amplitudeService/amplitudeService';
18
- import { analyticsContextAtom } from 'src/atoms/app/variant';
19
- import { hasParsedVariantInfoAtom } from 'src/atoms/app';
24
+ import { v4 as uuid } from 'uuid';
20
25
  import { SpiffyMetricsEventName, useAmplitude } from '../amplitudeContext';
21
26
 
22
27
  const TRACKED_USER_EVENTS = [
@@ -52,6 +57,7 @@ export const useSalesAgentChatAPI = () => {
52
57
  const setReplyEventCategory = useSetAtom(replyEventCategoryAtom);
53
58
  const setFormSubmit = useSetAtom(formSubmitAtom);
54
59
  const { trackEvent } = useAmplitude();
60
+ const { trackWidgetInteraction } = useWidgetInteraction();
55
61
 
56
62
  const logPageVisit = useCallback(
57
63
  ({ pageVisitCategory }: { pageVisitCategory: PageVisitCategory }) => {
@@ -104,6 +110,19 @@ export const useSalesAgentChatAPI = () => {
104
110
  );
105
111
  const onSuggestionClicked = useCallback(
106
112
  (suggestion: Suggestion, displayLocation: ChatElementDisplayLocationV3) => {
113
+ trackWidgetInteraction({
114
+ eventName: EnviveMetricsEventName.WidgetInteraction,
115
+ trigger: {
116
+ widget: WidgetInteractionComponent.FLOATING_CHAT,
117
+ widget_interaction: WidgetInteractionType.SUGGESTION_CLICKED,
118
+ widget_interaction_data: {
119
+ suggestion_clicked: {
120
+ suggestion_id: suggestion.id,
121
+ },
122
+ },
123
+ },
124
+ });
125
+
107
126
  trackEvent({
108
127
  eventName: SpiffyMetricsEventName.ChatSuggestionClicked,
109
128
  eventProps: {
@@ -159,6 +178,20 @@ export const useSalesAgentChatAPI = () => {
159
178
  displayLocation: ChatElementDisplayLocationV3;
160
179
  }) => {
161
180
  const eventId = uuid();
181
+
182
+ trackWidgetInteraction({
183
+ eventName: EnviveMetricsEventName.WidgetInteraction,
184
+ trigger: {
185
+ widget: WidgetInteractionComponent.FLOATING_CHAT,
186
+ widget_interaction: WidgetInteractionType.MESSAGE_SUBMITTED,
187
+ widget_interaction_data: {
188
+ message_submitted: {
189
+ request_text: query,
190
+ },
191
+ },
192
+ },
193
+ });
194
+
162
195
  trackEvent({
163
196
  eventName: SpiffyMetricsEventName.ChatUserMessageInput,
164
197
  eventProps: {
@@ -1,16 +1,30 @@
1
1
  import { useAtomValue, useSetAtom } from 'jotai';
2
2
  import { ChatElementDisplayLocationV3 } from 'src/application/models';
3
3
  import { chatAtom, chatOnToggleAtom } from 'src/atoms/chat';
4
- import { useAmplitude } from 'src/contexts/amplitudeContext/amplitudeContext';
5
- import { SpiffyMetricsEventName } from 'src/services/amplitudeService/amplitudeService';
4
+ import {
5
+ EnviveMetricsEventName,
6
+ SpiffyMetricsEventName,
7
+ useAmplitude,
8
+ } from 'src/contexts/amplitudeContext/amplitudeContext';
9
+ import { useWidgetInteraction } from '../WidgetInteraction';
10
+ import { WidgetInteractionComponent, WidgetInteractionType } from '../WidgetInteraction/types';
6
11
 
7
12
  export const useChatToggle = () => {
8
13
  const onToggle = useSetAtom(chatOnToggleAtom);
9
14
  const { isOpen } = useAtomValue(chatAtom);
10
15
  const { trackEvent } = useAmplitude();
16
+ const { trackWidgetInteraction } = useWidgetInteraction();
11
17
 
12
18
  const toggle = (triggerLocation: ChatElementDisplayLocationV3, triggerId?: string) => {
13
19
  if (!isOpen) {
20
+ trackWidgetInteraction({
21
+ eventName: EnviveMetricsEventName.WidgetInteraction,
22
+ trigger: {
23
+ widget: WidgetInteractionComponent.FLOATING_BUTTON,
24
+ widget_interaction: WidgetInteractionType.WIDGET_CLICKED,
25
+ },
26
+ });
27
+
14
28
  trackEvent({
15
29
  eventName: SpiffyMetricsEventName.ChatComponentExpanded,
16
30
  eventProps: {
@@ -21,6 +35,14 @@ export const useChatToggle = () => {
21
35
  },
22
36
  });
23
37
  } else {
38
+ trackWidgetInteraction({
39
+ eventName: EnviveMetricsEventName.WidgetInteraction,
40
+ trigger: {
41
+ widget: WidgetInteractionComponent.FLOATING_BUTTON,
42
+ widget_interaction: WidgetInteractionType.WIDGET_COLLAPSED,
43
+ },
44
+ });
45
+
24
46
  trackEvent({
25
47
  eventName: SpiffyMetricsEventName.ChatComponentCollapsed,
26
48
  eventProps: {
@@ -47,10 +69,21 @@ export const useChatToggle = () => {
47
69
  }
48
70
  };
49
71
 
72
+ const onHover = () => {
73
+ trackWidgetInteraction({
74
+ eventName: EnviveMetricsEventName.WidgetInteraction,
75
+ trigger: {
76
+ widget: WidgetInteractionComponent.FLOATING_BUTTON,
77
+ widget_interaction: WidgetInteractionType.WIDGET_HOVERED,
78
+ },
79
+ });
80
+ };
81
+
50
82
  return {
51
83
  toggle,
52
84
  isOpen,
53
85
  openChat,
54
86
  closeChat,
87
+ onHover,
55
88
  };
56
89
  };
@@ -0,0 +1 @@
1
+ export * from './useWidgetInteraction';
@@ -0,0 +1,139 @@
1
+ import { EnviveMetricsEventName, SpiffyMetricsEventName } from '../../contexts/amplitudeContext';
2
+
3
+ export interface WidgetInteractionContext {
4
+ page_type: WidgetInteractionPageType;
5
+ page_id: string;
6
+ }
7
+
8
+ interface WidgetInteractionTrigger {
9
+ interaction_id?: string;
10
+ widget: WidgetInteractionComponent;
11
+ widget_interaction: WidgetInteractionType;
12
+ widget_interaction_data?: WidgetInteractionData | null;
13
+ }
14
+
15
+ export interface InternalWidgetInteraction {
16
+ eventName: SpiffyMetricsEventName | EnviveMetricsEventName;
17
+ context: WidgetInteractionContext;
18
+ trigger: WidgetInteractionTrigger;
19
+ }
20
+
21
+ export interface WidgetInteraction {
22
+ eventName: InternalWidgetInteraction['eventName'];
23
+ trigger: InternalWidgetInteraction['trigger'];
24
+ }
25
+
26
+ export enum WidgetInteractionPageType {
27
+ PDP = 'pdp',
28
+ PLP = 'plp',
29
+ HOMEPAGE = 'homepage',
30
+ SEARCH = 'search',
31
+ OTHER = 'other',
32
+ FULL_PAGE = 'full_page',
33
+ }
34
+
35
+ export enum WidgetInteractionComponent {
36
+ EMBEDDED_WIDGET = 'embedded_widget',
37
+ SUGGESTION_BAR = 'suggestion_bar',
38
+ FLOATING_BUTTON = 'floating_button',
39
+ SOCIAL_PROOF = 'social_proof',
40
+ CHAT_PREVIEW = 'chat_preview',
41
+ FLOATING_CHAT = 'floating_chat',
42
+ SINGLE_IMAGE_PROMPT = 'single_image_prompt',
43
+ IMAGE_PROMPT_CARD = 'image_prompt_card',
44
+ POST_INTERACTION_COMPARISON = 'post_interaction_comparison',
45
+ POST_INTERACTION_EMBEDDED = 'post_interaction_embedded',
46
+ }
47
+
48
+ export enum WidgetInteractionType {
49
+ QUERY_INPUT_CLICKED = 'query_input_clicked',
50
+ SUGGESTION_CLICKED = 'suggestion_clicked',
51
+ WIDGET_CLICKED = 'widget_clicked',
52
+ WIDGET_HOVERED = 'widget_hovered',
53
+ WIDGET_EXPANDED = 'widget_expanded',
54
+ WIDGET_COLLAPSED = 'widget_collapsed',
55
+ SUGGESTION_SCROLLED = 'suggestion_scrolled',
56
+ LINK_CLICKED = 'link_clicked',
57
+ PRODUCT_CARD_CLICKED = 'product_card_clicked',
58
+ TEXT_LINK_CLICKED = 'text_link_clicked',
59
+ ARTICLE_LINK_CLICKED = 'article_link_clicked',
60
+ REVIEW_CARD_CLICKED = 'review_card_clicked',
61
+ MESSAGE_SUBMITTED = 'message_submitted',
62
+ MANUAL_SCROLL_TO_BOTTOM = 'manual_scroll_to_bottom',
63
+ }
64
+
65
+ export type URL = {
66
+ url: string;
67
+ };
68
+
69
+ export type Product = {
70
+ product_id: string;
71
+ };
72
+
73
+ export type Review = {
74
+ review_id: string;
75
+ };
76
+
77
+ export type Suggestion = {
78
+ suggestion_id: string;
79
+ };
80
+
81
+ export type Request = {
82
+ request_text: string;
83
+ };
84
+
85
+ export type Collapse = {
86
+ collapse_source: 'close_button' | 'swipe' | 'body_click';
87
+ };
88
+
89
+ export type SuggestionScrolled = {
90
+ suggestion_scrolled: Suggestion;
91
+ };
92
+
93
+ export type SuggestionClicked = {
94
+ suggestion_clicked: Suggestion;
95
+ };
96
+
97
+ export type SuggestionHovered = {
98
+ suggestion_hovered: Suggestion;
99
+ };
100
+
101
+ export type LinkClicked = {
102
+ link_clicked: URL;
103
+ };
104
+
105
+ export type WidgetCollapsed = {
106
+ widget_collapsed: Collapse;
107
+ };
108
+
109
+ export type TextLinkClicked = {
110
+ text_link_clicked: URL;
111
+ };
112
+
113
+ export type ArticleLinkClicked = {
114
+ article_link_clicked: URL;
115
+ };
116
+
117
+ export type ProductCardClicked = {
118
+ product_card_clicked: Product;
119
+ };
120
+
121
+ export type ReviewCardClicked = {
122
+ review_card_clicked: Review;
123
+ };
124
+
125
+ export type MessageSubmitted = {
126
+ message_submitted: Request;
127
+ };
128
+
129
+ export type WidgetInteractionData =
130
+ | SuggestionScrolled
131
+ | SuggestionClicked
132
+ | SuggestionHovered
133
+ | LinkClicked
134
+ | WidgetCollapsed
135
+ | TextLinkClicked
136
+ | ArticleLinkClicked
137
+ | ProductCardClicked
138
+ | ReviewCardClicked
139
+ | MessageSubmitted;
@@ -0,0 +1,35 @@
1
+ import { useAtomValue } from 'jotai';
2
+ import { pageVariantInfoAtom } from 'src/atoms/app';
3
+ import { useAmplitude } from 'src/contexts/amplitudeContext';
4
+ import { PageVariantInfo } from 'src/contexts/pageContext/types';
5
+ import { v4 as uuid } from 'uuid';
6
+ import { InternalWidgetInteraction, WidgetInteraction } from './types';
7
+ import { extractPageContext } from './utils';
8
+
9
+ export const useWidgetInteraction = () => {
10
+ const { trackEvent } = useAmplitude();
11
+ const variantInfo = useAtomValue(pageVariantInfoAtom);
12
+
13
+ const trackWidgetInteraction = (props: WidgetInteraction) => {
14
+ if (props.trigger) {
15
+ props.trigger.interaction_id = props.trigger.interaction_id || getInteractionId();
16
+ }
17
+
18
+ const eventProps = {
19
+ ...props,
20
+ context: extractPageContext(variantInfo as PageVariantInfo),
21
+ } as InternalWidgetInteraction;
22
+
23
+ trackEvent({
24
+ eventName: props.eventName,
25
+ eventProps: { ...eventProps },
26
+ });
27
+ };
28
+
29
+ const getInteractionId = () => uuid();
30
+
31
+ return {
32
+ trackWidgetInteraction,
33
+ getInteractionId,
34
+ };
35
+ };
@@ -0,0 +1,44 @@
1
+ import { VariantTypeEnum } from 'src/application/models';
2
+ import {
3
+ FullPageSalesAgentVariantInfo,
4
+ HomeVariantInfo,
5
+ OtherVariantInfo,
6
+ PageVariantInfo,
7
+ PDPPageVariantInfo,
8
+ PLPPageVariantInfo,
9
+ } from '../../contexts/pageContext/types';
10
+ import { WidgetInteractionContext, WidgetInteractionPageType } from './types';
11
+
12
+ export const extractPageContext = (
13
+ pageVariant: PageVariantInfo,
14
+ ): WidgetInteractionContext | null => {
15
+ switch (pageVariant.variantType) {
16
+ case VariantTypeEnum.Pdp:
17
+ return {
18
+ page_id: (pageVariant as PDPPageVariantInfo).productId,
19
+ page_type: WidgetInteractionPageType.PDP,
20
+ };
21
+ case VariantTypeEnum.Plp:
22
+ return {
23
+ page_id: (pageVariant as PLPPageVariantInfo).plpId,
24
+ page_type: WidgetInteractionPageType.PLP,
25
+ };
26
+ case VariantTypeEnum.Home:
27
+ return {
28
+ page_id: (pageVariant as HomeVariantInfo).url,
29
+ page_type: WidgetInteractionPageType.HOMEPAGE,
30
+ };
31
+ case VariantTypeEnum.Other:
32
+ return {
33
+ page_id: (pageVariant as OtherVariantInfo).url,
34
+ page_type: WidgetInteractionPageType.OTHER,
35
+ };
36
+ case VariantTypeEnum.FullPageSalesAgent:
37
+ return {
38
+ page_id: (pageVariant as FullPageSalesAgentVariantInfo).url,
39
+ page_type: WidgetInteractionPageType.FULL_PAGE,
40
+ };
41
+ }
42
+
43
+ return null;
44
+ };