@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.
- package/dist/atoms/app/index.d.cts +1 -1
- package/dist/atoms/app/index.d.ts +7 -7
- package/dist/atoms/app/variant.d.ts +6 -6
- package/dist/atoms/chat/chatState.d.cts +18 -18
- package/dist/atoms/chat/chatState.d.ts +18 -18
- package/dist/atoms/chat/form.d.cts +2 -2
- package/dist/atoms/chat/form.d.ts +3 -3
- package/dist/atoms/chat/index.d.cts +2 -2
- package/dist/atoms/chat/lastMessage.d.ts +2 -2
- package/dist/atoms/chat/messageQueue.d.ts +7 -7
- package/dist/atoms/chat/performanceMetrics.d.cts +6 -6
- package/dist/atoms/chat/performanceMetrics.d.ts +6 -6
- package/dist/atoms/chat/renderedWidgetRefs.d.ts +3 -3
- package/dist/atoms/chat/replies.d.ts +1 -1
- package/dist/atoms/chat/suggestions.d.cts +2 -2
- package/dist/atoms/chat/suggestions.d.ts +3 -3
- package/dist/atoms/envive/enviveConfig.d.cts +13 -13
- package/dist/atoms/envive/enviveConfig.d.ts +13 -13
- package/dist/atoms/globalSearch/globalSearch.d.cts +5 -5
- package/dist/atoms/globalSearch/globalSearch.d.ts +5 -5
- package/dist/atoms/org/customerService.d.cts +6 -6
- package/dist/atoms/org/customerService.d.ts +6 -6
- package/dist/atoms/org/graphqlConfig.d.cts +4 -4
- package/dist/atoms/org/graphqlConfig.d.ts +4 -4
- package/dist/atoms/org/newOrgConfigAtom.d.cts +2 -2
- package/dist/atoms/org/newOrgConfigAtom.d.ts +2 -2
- package/dist/atoms/org/orgAnalyticsConfig.d.cts +5 -5
- package/dist/atoms/org/orgAnalyticsConfig.d.ts +5 -5
- package/dist/atoms/search/chatSearch.d.cts +17 -17
- package/dist/atoms/search/chatSearch.d.ts +17 -17
- package/dist/atoms/search/searchAPI.d.cts +13 -13
- package/dist/atoms/search/searchAPI.d.ts +13 -13
- package/dist/atoms/search/types.d.cts +1 -1
- package/dist/atoms/search/utils.d.ts +1 -1
- package/dist/atoms/widget/chatPreviewLoading.d.cts +2 -2
- package/dist/atoms/widget/chatPreviewLoading.d.ts +2 -2
- package/dist/contexts/salesAgentContext/chatAPI.cjs +21 -1
- package/dist/contexts/salesAgentContext/chatAPI.js +21 -1
- package/dist/contexts/systemSettingsContext/systemSettingsContext.d.cts +2 -2
- package/dist/contexts/types.d.cts +1 -1
- package/dist/contexts/types.d.ts +1 -1
- package/dist/contexts/typesV3.d.cts +1 -1
- package/dist/contexts/typesV3.d.ts +1 -1
- package/dist/hooks/ChatToggle/useChatToggle.cjs +47 -17
- package/dist/hooks/ChatToggle/useChatToggle.d.cts +2 -1
- package/dist/hooks/ChatToggle/useChatToggle.d.ts +2 -1
- package/dist/hooks/ChatToggle/useChatToggle.js +48 -18
- package/dist/hooks/GrabAndScroll/useGrabAndScroll.d.cts +2 -2
- package/dist/hooks/GrabAndScroll/useGrabAndScroll.d.ts +2 -2
- package/dist/hooks/WidgetInteraction/index.cjs +3 -0
- package/dist/hooks/WidgetInteraction/index.d.cts +2 -0
- package/dist/hooks/WidgetInteraction/index.d.ts +2 -0
- package/dist/hooks/WidgetInteraction/index.js +3 -0
- package/dist/hooks/WidgetInteraction/types.cjs +47 -0
- package/dist/hooks/WidgetInteraction/types.d.cts +110 -0
- package/dist/hooks/WidgetInteraction/types.d.ts +110 -0
- package/dist/hooks/WidgetInteraction/types.js +44 -0
- package/dist/hooks/WidgetInteraction/useWidgetInteraction.cjs +34 -0
- package/dist/hooks/WidgetInteraction/useWidgetInteraction.d.cts +10 -0
- package/dist/hooks/WidgetInteraction/useWidgetInteraction.d.ts +10 -0
- package/dist/hooks/WidgetInteraction/useWidgetInteraction.js +33 -0
- package/dist/hooks/WidgetInteraction/utils.cjs +34 -0
- package/dist/hooks/WidgetInteraction/utils.d.cts +8 -0
- package/dist/hooks/WidgetInteraction/utils.d.ts +8 -0
- package/dist/hooks/WidgetInteraction/utils.js +34 -0
- package/dist/hooks/utils.d.cts +1 -1
- package/dist/hooks/utils.d.ts +1 -1
- package/package.json +13 -1
- package/src/contexts/salesAgentContext/chatAPI.ts +39 -6
- package/src/hooks/ChatToggle/useChatToggle.ts +35 -2
- package/src/hooks/WidgetInteraction/index.ts +1 -0
- package/src/hooks/WidgetInteraction/types.ts +139 -0
- package/src/hooks/WidgetInteraction/useWidgetInteraction.ts +35 -0
- 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=
|
package/dist/hooks/utils.d.cts
CHANGED
|
@@ -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,
|
|
22
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuZC5jdHMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2hvb2tzL3V0aWxzLmQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU2VhcmNoUmVzdWx0IH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy9hcGkvc2VhcmNoJztcbmltcG9ydCB7IFVzZXJFdmVudCwgVmFyaWFudEluZm8gfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzJztcbmV4cG9ydCBkZWNsYXJlIGNvbnN0IGlzRWxlbWVudFBhcnRpYWxseVZpc2libGU6IChlbD86IEhUTUxEaXZFbGVtZW50IHwgbnVsbCkgPT4gYm9vbGVhbjtcbmV4cG9ydCBkZWNsYXJlIGNvbnN0IGNyZWF0ZUFwcExvYWRlZEV2ZW50OiAoKSA9PiBVc2VyRXZlbnQ7XG5leHBvcnQgZGVjbGFyZSBjb25zdCBjcmVhdGVWaXNpdFVzZXJFdmVudDogKHsgdmFyaWFudEluZm8sIH06IHtcbiAgICB2YXJpYW50SW5mbzogVmFyaWFudEluZm87XG59KSA9PiBVc2VyRXZlbnQgfCB1bmRlZmluZWQ7XG5leHBvcnQgZGVjbGFyZSBjb25zdCBpc1dpdGhpbkJ1c2luZXNzSG91cnM6IChzdGFydFRpbWU6IHN0cmluZywgZW5kVGltZTogc3RyaW5nLCB0aW1lWm9uZTogc3RyaW5nKSA9PiBib29sZWFuO1xuZXhwb3J0IGRlY2xhcmUgZW51bSBTZWFyY2hSZXN1bHRzU3RhdGUge1xuICAgIExvYWRpbmcgPSAwLFxuICAgIFJlc3VsdHMgPSAxLFxuICAgIE5vUmVzdWx0cyA9IDJcbn1cbmV4cG9ydCBkZWNsYXJlIGNvbnN0IGdldFNlYXJjaFJlc3VsdHNTdGF0ZTogKGlzTG9hZGluZ1NlYXJjaDogYm9vbGVhbiwgc2VhcmNoRGF0YTogU2VhcmNoUmVzdWx0IHwgbnVsbCkgPT4gU2VhcmNoUmVzdWx0c1N0YXRlO1xuIl0sIm1hcHBpbmdzIjoiOzs7OztBQUVBLElBQVcsNEJBQTRCLENBQUMsV0FBVyxlQUFlO0FBQ2xFLElBQVcsdUJBQXVCLENBQUMsV0FBVyxVQUFVO0FBQ3hELElBQVcsdUJBQXVCO0NBQUM7T0FBVztPQUFnQjtPQUFBO0NBQUE7QUFDOUQsSUFBVyx3QkFBaUIsQ0FBQSxJQUFBO0FBQzVCLElBQVcscUJBQWdCLENBQUEsSUFBQTtBQUMzQixJQUFXLHdCQUF3QjtDQUFDO09BQVc7T0FBb0I7Q0FBbUIifQ==
|
package/dist/hooks/utils.d.ts
CHANGED
|
@@ -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+
|
|
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.
|
|
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 {
|
|
13
|
-
import {
|
|
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 {
|
|
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 {
|
|
5
|
-
|
|
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
|
+
};
|