@microsoft/omnichannel-chat-widget 0.1.0-main.cf54410 → 0.1.0-main.d5846c0

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 (148) hide show
  1. package/README.md +227 -0
  2. package/lib/cjs/assets/Audios.js +8 -0
  3. package/lib/cjs/assets/Icons.js +28 -0
  4. package/lib/cjs/common/Constants.js +38 -6
  5. package/lib/cjs/common/telemetry/TelemetryConstants.js +48 -4
  6. package/lib/cjs/common/telemetry/TelemetryHelper.js +13 -0
  7. package/lib/cjs/common/telemetry/TelemetryManager.js +17 -6
  8. package/lib/cjs/common/telemetry/defaultConfigs/defaultAriaConfig.js +1 -1
  9. package/lib/cjs/common/telemetry/defaultConfigs/defaultTelemetryConfiguration.js +4 -1
  10. package/lib/cjs/common/telemetry/loggers/ariaTelemetryLogger.js +33 -13
  11. package/lib/cjs/common/telemetry/loggers/consoleLogger.js +6 -5
  12. package/lib/cjs/common/utils.js +30 -2
  13. package/lib/cjs/components/callingcontainerstateful/CallingContainerStateful.js +14 -0
  14. package/lib/cjs/components/chatbuttonstateful/ChatButtonStateful.js +8 -2
  15. package/lib/cjs/components/confirmationpanestateful/ConfirmationPaneStateful.js +8 -41
  16. package/lib/cjs/components/emailtranscriptpanestateful/EmailTranscriptPaneStateful.js +2 -2
  17. package/lib/cjs/components/footerstateful/FooterStateful.js +4 -5
  18. package/lib/cjs/components/footerstateful/downloadtranscriptstateful/DownloadTranscriptStateful.js +1 -1
  19. package/lib/cjs/components/headerstateful/HeaderStateful.js +11 -8
  20. package/lib/cjs/components/livechatwidget/common/createMarkdown.js +3 -4
  21. package/lib/cjs/components/livechatwidget/common/defaultProps/dummyDefaultProps.js +16 -21
  22. package/lib/cjs/components/livechatwidget/common/endChat.js +116 -57
  23. package/lib/cjs/components/livechatwidget/common/initCallingSdk.js +5 -0
  24. package/lib/cjs/components/livechatwidget/common/initWebChatComposer.js +32 -7
  25. package/lib/cjs/components/livechatwidget/common/reconnectChatHelper.js +105 -20
  26. package/lib/cjs/components/livechatwidget/common/registerTelemetryLoggers.js +6 -17
  27. package/lib/cjs/components/livechatwidget/common/setPostChatContextAndLoadSurvey.js +6 -5
  28. package/lib/cjs/components/livechatwidget/common/startChat.js +101 -49
  29. package/lib/cjs/components/livechatwidget/common/startProactiveChat.js +3 -3
  30. package/lib/cjs/components/livechatwidget/livechatwidgetstateful/LiveChatWidgetStateful.js +132 -30
  31. package/lib/cjs/components/loadingpanestateful/LoadingPaneStateful.js +1 -1
  32. package/lib/cjs/components/ooohpanestateful/OOOHPaneStateful.js +8 -0
  33. package/lib/cjs/components/postchatloadingpanestateful/PostChatLoadingPaneStateful.js +8 -0
  34. package/lib/cjs/components/prechatsurveypanestateful/PreChatSurveyPaneStateful.js +9 -10
  35. package/lib/cjs/components/proactivechatpanestateful/ProactiveChatPaneStateful.js +26 -4
  36. package/lib/cjs/{assets/assets.d.js → components/proactivechatpanestateful/interfaces/IProactiveChatNotificationConfig.js} +0 -0
  37. package/lib/cjs/components/webchatcontainerstateful/common/mockchatsdk.js +4 -0
  38. package/lib/cjs/components/webchatcontainerstateful/common/utils/FileAttachmentIconManager.js +51 -73
  39. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityMiddleware.js +9 -46
  40. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachmentMiddleware.js +3 -1
  41. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/conversationEndMiddleware.js +6 -6
  42. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/webchattelemetry/WebChatLogger.js +45 -0
  43. package/lib/cjs/contexts/common/ConversationState.js +3 -2
  44. package/lib/cjs/contexts/common/LiveChatWidgetActionType.js +7 -7
  45. package/lib/cjs/contexts/common/LiveChatWidgetContextInitialState.js +7 -2
  46. package/lib/cjs/contexts/createReducer.js +8 -10
  47. package/lib/cjs/controller/componentController.js +2 -2
  48. package/lib/cjs/plugins/newMessageEventHandler.js +99 -0
  49. package/lib/esm/assets/Audios.js +1 -0
  50. package/lib/esm/assets/Icons.js +11 -0
  51. package/lib/esm/common/Constants.js +34 -5
  52. package/lib/esm/common/telemetry/TelemetryConstants.js +44 -3
  53. package/lib/esm/common/telemetry/TelemetryHelper.js +13 -1
  54. package/lib/esm/common/telemetry/TelemetryManager.js +15 -6
  55. package/lib/esm/common/telemetry/defaultConfigs/defaultAriaConfig.js +1 -1
  56. package/lib/esm/common/telemetry/defaultConfigs/defaultTelemetryConfiguration.js +4 -1
  57. package/lib/esm/common/telemetry/loggers/ariaTelemetryLogger.js +36 -14
  58. package/lib/esm/common/telemetry/loggers/consoleLogger.js +6 -5
  59. package/lib/esm/common/utils.js +19 -1
  60. package/lib/esm/components/callingcontainerstateful/CallingContainerStateful.js +14 -0
  61. package/lib/esm/components/chatbuttonstateful/ChatButtonStateful.js +9 -3
  62. package/lib/esm/components/confirmationpanestateful/ConfirmationPaneStateful.js +8 -37
  63. package/lib/esm/components/emailtranscriptpanestateful/EmailTranscriptPaneStateful.js +2 -2
  64. package/lib/esm/components/footerstateful/FooterStateful.js +4 -5
  65. package/lib/esm/components/footerstateful/downloadtranscriptstateful/DownloadTranscriptStateful.js +1 -1
  66. package/lib/esm/components/headerstateful/HeaderStateful.js +12 -9
  67. package/lib/esm/components/livechatwidget/common/createMarkdown.js +3 -3
  68. package/lib/esm/components/livechatwidget/common/defaultProps/dummyDefaultProps.js +14 -22
  69. package/lib/esm/components/livechatwidget/common/endChat.js +110 -54
  70. package/lib/esm/components/livechatwidget/common/initCallingSdk.js +3 -0
  71. package/lib/esm/components/livechatwidget/common/initWebChatComposer.js +29 -8
  72. package/lib/esm/components/livechatwidget/common/reconnectChatHelper.js +94 -20
  73. package/lib/esm/components/livechatwidget/common/registerTelemetryLoggers.js +5 -14
  74. package/lib/esm/components/livechatwidget/common/setPostChatContextAndLoadSurvey.js +6 -5
  75. package/lib/esm/components/livechatwidget/common/startChat.js +99 -50
  76. package/lib/esm/components/livechatwidget/common/startProactiveChat.js +5 -5
  77. package/lib/esm/components/livechatwidget/livechatwidgetstateful/LiveChatWidgetStateful.js +121 -30
  78. package/lib/esm/components/loadingpanestateful/LoadingPaneStateful.js +1 -1
  79. package/lib/esm/components/ooohpanestateful/OOOHPaneStateful.js +6 -0
  80. package/lib/esm/components/postchatloadingpanestateful/PostChatLoadingPaneStateful.js +6 -0
  81. package/lib/esm/components/prechatsurveypanestateful/PreChatSurveyPaneStateful.js +9 -10
  82. package/lib/esm/components/proactivechatpanestateful/ProactiveChatPaneStateful.js +25 -5
  83. package/lib/esm/components/proactivechatpanestateful/interfaces/IProactiveChatNotificationConfig.js +1 -0
  84. package/lib/esm/components/webchatcontainerstateful/common/mockchatsdk.js +4 -0
  85. package/lib/esm/components/webchatcontainerstateful/common/utils/FileAttachmentIconManager.js +2 -12
  86. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityMiddleware.js +7 -44
  87. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachmentMiddleware.js +2 -1
  88. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/conversationEndMiddleware.js +6 -6
  89. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/webchattelemetry/WebChatLogger.js +32 -0
  90. package/lib/esm/contexts/common/ConversationState.js +3 -2
  91. package/lib/esm/contexts/common/LiveChatWidgetActionType.js +7 -7
  92. package/lib/esm/contexts/common/LiveChatWidgetContextInitialState.js +7 -2
  93. package/lib/esm/contexts/createReducer.js +8 -9
  94. package/lib/esm/controller/componentController.js +2 -2
  95. package/lib/esm/plugins/newMessageEventHandler.js +82 -0
  96. package/lib/types/assets/Audios.d.ts +1 -0
  97. package/lib/types/assets/Icons.d.ts +11 -0
  98. package/lib/types/common/Constants.d.ts +19 -2
  99. package/lib/types/common/interfaces/IContextDataStore.d.ts +1 -1
  100. package/lib/types/common/telemetry/TelemetryConstants.d.ts +32 -1
  101. package/lib/types/common/telemetry/TelemetryHelper.d.ts +2 -0
  102. package/lib/types/common/telemetry/definitions/Payload.d.ts +12 -9
  103. package/lib/types/common/telemetry/interfaces/ITelemetryConfig.d.ts +3 -3
  104. package/lib/types/common/utils.d.ts +3 -0
  105. package/lib/types/components/confirmationpanestateful/interfaces/IConfirmationPaneStatefulParams.d.ts +5 -2
  106. package/lib/types/components/footerstateful/audionotificationstateful/interfaces/IAudioNotificationStatefulParams.d.ts +0 -1
  107. package/lib/types/components/headerstateful/interfaces/IHeaderStatefulParams.d.ts +4 -1
  108. package/lib/types/components/livechatwidget/common/endChat.d.ts +4 -1
  109. package/lib/types/components/livechatwidget/common/reconnectChatHelper.d.ts +5 -2
  110. package/lib/types/components/livechatwidget/common/startProactiveChat.d.ts +2 -1
  111. package/lib/types/components/livechatwidget/interfaces/ILiveChatWidgetComponentOverrides.d.ts +1 -0
  112. package/lib/types/components/livechatwidget/interfaces/ILiveChatWidgetProps.d.ts +1 -1
  113. package/lib/types/components/proactivechatpanestateful/interfaces/IProactiveChatNotificationConfig.d.ts +3 -0
  114. package/lib/types/components/reconnectchatpanestateful/interfaces/IReconnectChatPaneStatefulProps.d.ts +1 -0
  115. package/lib/types/components/webchatcontainerstateful/common/mockchatsdk.d.ts +1 -0
  116. package/lib/types/components/webchatcontainerstateful/common/utils/FileAttachmentIconManager.d.ts +1 -1
  117. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityMiddleware.d.ts +0 -1
  118. package/lib/types/components/webchatcontainerstateful/webchatcontroller/webchattelemetry/WebChatLogger.d.ts +1 -0
  119. package/lib/types/contexts/common/ConversationState.d.ts +3 -2
  120. package/lib/types/contexts/common/ILiveChatWidgetContext.d.ts +1 -0
  121. package/lib/types/contexts/common/LiveChatWidgetActionType.d.ts +7 -7
  122. package/lib/types/plugins/newMessageEventHandler.d.ts +2 -0
  123. package/package.json +9 -11
  124. package/lib/cjs/assets/audios/newMessageNotification.mp3 +0 -0
  125. package/lib/cjs/assets/icons/archiveIcon.svg +0 -3
  126. package/lib/cjs/assets/icons/audioIcon.svg +0 -6
  127. package/lib/cjs/assets/icons/blankIcon.svg +0 -6
  128. package/lib/cjs/assets/icons/excelIcon.svg +0 -6
  129. package/lib/cjs/assets/icons/imageIcon.svg +0 -6
  130. package/lib/cjs/assets/icons/oneNoteIcon.svg +0 -6
  131. package/lib/cjs/assets/icons/pdfIcon.svg +0 -6
  132. package/lib/cjs/assets/icons/powerpointIcon.svg +0 -6
  133. package/lib/cjs/assets/icons/videoIcon.svg +0 -6
  134. package/lib/cjs/assets/icons/visioIcon.svg +0 -6
  135. package/lib/cjs/assets/icons/wordIcon.svg +0 -6
  136. package/lib/esm/assets/assets.d.js +0 -0
  137. package/lib/esm/assets/audios/newMessageNotification.mp3 +0 -0
  138. package/lib/esm/assets/icons/archiveIcon.svg +0 -3
  139. package/lib/esm/assets/icons/audioIcon.svg +0 -6
  140. package/lib/esm/assets/icons/blankIcon.svg +0 -6
  141. package/lib/esm/assets/icons/excelIcon.svg +0 -6
  142. package/lib/esm/assets/icons/imageIcon.svg +0 -6
  143. package/lib/esm/assets/icons/oneNoteIcon.svg +0 -6
  144. package/lib/esm/assets/icons/pdfIcon.svg +0 -6
  145. package/lib/esm/assets/icons/powerpointIcon.svg +0 -6
  146. package/lib/esm/assets/icons/videoIcon.svg +0 -6
  147. package/lib/esm/assets/icons/visioIcon.svg +0 -6
  148. package/lib/esm/assets/icons/wordIcon.svg +0 -6
@@ -1,10 +1,11 @@
1
1
  function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
2
2
 
3
+ import { BroadcastEvent, LogLevel, TelemetryEvent } from "../../../common/telemetry/TelemetryConstants";
3
4
  import { BroadcastService, decodeComponentString } from "@microsoft/omnichannel-chat-components";
4
5
  import { Stack } from "@fluentui/react";
5
6
  import React, { useEffect, useRef, useState } from "react";
6
- import { createTimer, getLocaleDirection } from "../../../common/utils";
7
- import { getReconnectIdForAuthenticatedChat, handleUnauthenticatedReconnectChat } from "../common/reconnectChatHelper";
7
+ import { createTimer, getLocaleDirection, getWidgetCacheId, getWidgetEndChatEventName } from "../../../common/utils";
8
+ import { getReconnectIdForAuthenticatedChat, handleUnauthenticatedReconnectChat, startUnauthenticatedReconnectChat } from "../common/reconnectChatHelper";
8
9
  import { initStartChat, prepareStartChat } from "../common/startChat";
9
10
  import { shouldShowCallingContainer, shouldShowChatButton, shouldShowConfirmationPane, shouldShowEmailTranscriptPane, shouldShowHeader, shouldShowLoadingPane, shouldShowOutOfOfficeHoursPane, shouldShowPostChatLoadingPane, shouldShowPostChatSurveyPane, shouldShowPreChatSurveyPane, shouldShowProactiveChatPane, shouldShowReconnectChatPane, shouldShowWebChatContainer } from "../../../controller/componentController";
10
11
  import CallingContainerStateful from "../../callingcontainerstateful/CallingContainerStateful";
@@ -12,6 +13,7 @@ import ChatButtonStateful from "../../chatbuttonstateful/ChatButtonStateful";
12
13
  import { Components } from "botframework-webchat";
13
14
  import ConfirmationPaneStateful from "../../confirmationpanestateful/ConfirmationPaneStateful";
14
15
  import { ConversationState } from "../../../contexts/common/ConversationState";
16
+ import { DataStoreManager } from "../../../common/contextDataStore/DataStoreManager";
15
17
  import { ElementType } from "@microsoft/omnichannel-chat-components";
16
18
  import EmailTranscriptPaneStateful from "../../emailtranscriptpanestateful/EmailTranscriptPaneStateful";
17
19
  import HeaderStateful from "../../headerstateful/HeaderStateful";
@@ -23,12 +25,14 @@ import PostChatSurveyPaneStateful from "../../postchatsurveypanestateful/PostCha
23
25
  import PreChatSurveyPaneStateful from "../../prechatsurveypanestateful/PreChatSurveyPaneStateful";
24
26
  import ProactiveChatPaneStateful from "../../proactivechatpanestateful/ProactiveChatPaneStateful";
25
27
  import ReconnectChatPaneStateful from "../../reconnectchatpanestateful/ReconnectChatPaneStateful";
28
+ import { TelemetryHelper } from "../../../common/telemetry/TelemetryHelper";
26
29
  import { TelemetryTimers } from "../../../common/telemetry/TelemetryManager";
27
30
  import WebChatContainerStateful from "../../webchatcontainerstateful/WebChatContainerStateful";
28
31
  import { createFooter } from "../common/createFooter";
29
32
  import { createInternetConnectionChangeHandler } from "../common/createInternetConnectionChangeHandler";
30
33
  import { defaultWebChatContainerStatefulProps } from "../../webchatcontainerstateful/common/defaultProps/defaultWebChatContainerStatefulProps";
31
- import { endChat } from "../common/endChat";
34
+ import { disposeTelemetryLoggers } from "../common/disposeTelemetryLoggers";
35
+ import { endChat, prepareEndChat } from "../common/endChat";
32
36
  import { getGeneralStylesForButton } from "../common/getGeneralStylesForButton";
33
37
  import { initCallingSdk } from "../common/initCallingSdk";
34
38
  import { initConfirmationPropsComposer } from "../common/initConfirmationPropsComposer";
@@ -39,11 +43,8 @@ import { startProactiveChat } from "../common/startProactiveChat";
39
43
  import useChatAdapterStore from "../../../hooks/useChatAdapterStore";
40
44
  import useChatContextStore from "../../../hooks/useChatContextStore";
41
45
  import useChatSDKStore from "../../../hooks/useChatSDKStore";
42
- import { TelemetryEvent } from "../../../common/telemetry/TelemetryConstants";
43
- import { disposeTelemetryLoggers } from "../common/disposeTelemetryLoggers";
44
- import { DataStoreManager } from "../../../common/contextDataStore/DataStoreManager";
45
46
  export const LiveChatWidgetStateful = props => {
46
- var _props$webChatContain, _props$styleProps, _props$controlProps, _props$webChatContain3, _props$webChatContain4, _props$styleProps2, _props$controlProps5, _props$componentOverr, _props$controlProps6, _props$componentOverr2, _props$controlProps7, _props$componentOverr3, _props$controlProps8, _props$componentOverr4, _props$controlProps9, _props$componentOverr5, _props$controlProps10, _props$componentOverr6, _props$controlProps11, _props$controlProps12, _props$controlProps13, _props$componentOverr7, _props$controlProps14, _props$componentOverr8, _props$controlProps15, _props$componentOverr9, _props$componentOverr10, _props$componentOverr11;
47
+ var _props$webChatContain, _props$styleProps, _props$controlProps, _props$webChatContain3, _props$webChatContain4, _props$styleProps2, _props$controlProps5, _props$componentOverr, _props$controlProps6, _props$componentOverr2, _props$controlProps7, _props$componentOverr3, _props$controlProps8, _props$componentOverr4, _props$controlProps9, _props$componentOverr5, _props$controlProps10, _props$componentOverr6, _props$controlProps11, _props$componentOverr7, _props$controlProps12, _props$controlProps13, _props$componentOverr8, _props$controlProps14, _props$componentOverr9, _props$controlProps15, _props$componentOverr10, _props$componentOverr11, _props$componentOverr12;
47
48
 
48
49
  const [state, dispatch] = useChatContextStore(); // eslint-disable-next-line @typescript-eslint/no-explicit-any
49
50
 
@@ -52,12 +53,14 @@ export const LiveChatWidgetStateful = props => {
52
53
  ...((_props$webChatContain = props.webChatContainerProps) === null || _props$webChatContain === void 0 ? void 0 : _props$webChatContain.webChatStyles)
53
54
  }); // eslint-disable-next-line @typescript-eslint/no-explicit-any
54
55
 
55
- const chatSDK = useChatSDKStore();
56
+ const chatSDK = useChatSDKStore(); // eslint-disable-next-line @typescript-eslint/no-explicit-any
57
+
56
58
  const [voiceVideoCallingSDK, setVoiceVideoCallingSDK] = useState(undefined);
57
59
  const {
58
60
  Composer
59
61
  } = Components;
60
- const canStartProactiveChat = useRef(true); // Process general styles
62
+ const canStartProactiveChat = useRef(true);
63
+ const canEndChat = useRef(true); // Process general styles
61
64
 
62
65
  const generalStyles = {
63
66
  root: Object.assign({}, getGeneralStylesForButton(state), (_props$styleProps = props.styleProps) === null || _props$styleProps === void 0 ? void 0 : _props$styleProps.generalStyles)
@@ -79,6 +82,10 @@ export const LiveChatWidgetStateful = props => {
79
82
  type: LiveChatWidgetActionType.SET_SKIP_CHAT_BUTTON_RENDERING,
80
83
  payload: ((_props$controlProps2 = props.controlProps) === null || _props$controlProps2 === void 0 ? void 0 : _props$controlProps2.skipChatButtonRendering) || false
81
84
  });
85
+ dispatch({
86
+ type: LiveChatWidgetActionType.SET_E2VV_ENABLED,
87
+ payload: false
88
+ });
82
89
  initCallingSdk(chatSDK, setVoiceVideoCallingSDK).then(sdkCreated => {
83
90
  sdkCreated && dispatch({
84
91
  type: LiveChatWidgetActionType.SET_E2VV_ENABLED,
@@ -89,7 +96,7 @@ export const LiveChatWidgetStateful = props => {
89
96
  if (!((_props$controlProps3 = props.controlProps) !== null && _props$controlProps3 !== void 0 && _props$controlProps3.skipChatButtonRendering) && (_props$reconnectChatP = props.reconnectChatPaneProps) !== null && _props$reconnectChatP !== void 0 && _props$reconnectChatP.reconnectId) {
90
97
  var _props$reconnectChatP2;
91
98
 
92
- handleUnauthenticatedReconnectChat(dispatch, (_props$reconnectChatP2 = props.reconnectChatPaneProps) === null || _props$reconnectChatP2 === void 0 ? void 0 : _props$reconnectChatP2.reconnectId, initStartChat);
99
+ startUnauthenticatedReconnectChat(chatSDK, dispatch, setAdapter, (_props$reconnectChatP2 = props.reconnectChatPaneProps) === null || _props$reconnectChatP2 === void 0 ? void 0 : _props$reconnectChatP2.reconnectId, initStartChat);
93
100
  } // Initialize global dir
94
101
 
95
102
 
@@ -99,13 +106,11 @@ export const LiveChatWidgetStateful = props => {
99
106
  payload: globalDir
100
107
  });
101
108
 
102
- if ((_state$domainStates = state.domainStates) !== null && _state$domainStates !== void 0 && _state$domainStates.chatToken) {
109
+ if ((_state$domainStates = state.domainStates) !== null && _state$domainStates !== void 0 && _state$domainStates.liveChatContext) {
103
110
  var _state$domainStates2;
104
111
 
105
112
  const optionalParams = {
106
- liveChatContext: {
107
- chatToken: (_state$domainStates2 = state.domainStates) === null || _state$domainStates2 === void 0 ? void 0 : _state$domainStates2.chatToken
108
- }
113
+ liveChatContext: (_state$domainStates2 = state.domainStates) === null || _state$domainStates2 === void 0 ? void 0 : _state$domainStates2.liveChatContext
109
114
  };
110
115
  initStartChat(chatSDK, dispatch, setAdapter, optionalParams);
111
116
  }
@@ -115,9 +120,9 @@ export const LiveChatWidgetStateful = props => {
115
120
  var _props$reconnectChatP3;
116
121
 
117
122
  if ((_props$reconnectChatP3 = props.reconnectChatPaneProps) !== null && _props$reconnectChatP3 !== void 0 && _props$reconnectChatP3.reconnectId && !state.appStates.reconnectId) {
118
- var _props$reconnectChatP4;
123
+ var _props$reconnectChatP4, _props$reconnectChatP5;
119
124
 
120
- handleUnauthenticatedReconnectChat(dispatch, (_props$reconnectChatP4 = props.reconnectChatPaneProps) === null || _props$reconnectChatP4 === void 0 ? void 0 : _props$reconnectChatP4.reconnectId, initStartChat);
125
+ handleUnauthenticatedReconnectChat(chatSDK, dispatch, setAdapter, (_props$reconnectChatP4 = props.reconnectChatPaneProps) === null || _props$reconnectChatP4 === void 0 ? void 0 : _props$reconnectChatP4.reconnectId, initStartChat, (_props$reconnectChatP5 = props.reconnectChatPaneProps) === null || _props$reconnectChatP5 === void 0 ? void 0 : _props$reconnectChatP5.redirectInSameWindow);
121
126
  } else {
122
127
  getReconnectIdForAuthenticatedChat(props, chatSDK).then(authReconnectId => {
123
128
  if (authReconnectId && !state.appStates.reconnectId) {
@@ -130,6 +135,10 @@ export const LiveChatWidgetStateful = props => {
130
135
  payload: ConversationState.ReconnectChat
131
136
  });
132
137
  } else {
138
+ const chatStartedSkippingChatButtonRendering = {
139
+ eventName: BroadcastEvent.StartChatSkippingChatButtonRendering
140
+ };
141
+ BroadcastService.postMessage(chatStartedSkippingChatButtonRendering);
133
142
  dispatch({
134
143
  type: LiveChatWidgetActionType.SET_CONVERSATION_STATE,
135
144
  payload: ConversationState.Loading
@@ -141,14 +150,88 @@ export const LiveChatWidgetStateful = props => {
141
150
  }
142
151
  }, [state.appStates.skipChatButtonRendering]);
143
152
  useEffect(() => {
144
- BroadcastService.getMessageByEventName("StartProactiveChat").subscribe(msg => {
153
+ var _chatSDK$omnichannelC, _chatSDK$omnichannelC2;
154
+
155
+ // Add the custom context on receiving the SetCustomContext event
156
+ BroadcastService.getMessageByEventName(BroadcastEvent.SetCustomContext).subscribe(msg => {
157
+ TelemetryHelper.logActionEvent(LogLevel.INFO, {
158
+ Event: TelemetryEvent.CustomContextReceived,
159
+ Description: "CustomContext received."
160
+ });
161
+ dispatch({
162
+ type: LiveChatWidgetActionType.SET_CUSTOM_CONTEXT,
163
+ payload: msg === null || msg === void 0 ? void 0 : msg.payload
164
+ });
165
+ });
166
+ BroadcastService.getMessageByEventName(BroadcastEvent.StartProactiveChat).subscribe(msg => {
167
+ TelemetryHelper.logActionEvent(LogLevel.INFO, {
168
+ Event: TelemetryEvent.StartProactiveChatEventReceived,
169
+ Description: "Start proactive chat event received."
170
+ });
171
+
145
172
  if (canStartProactiveChat.current) {
146
173
  var _msg$payload, _msg$payload2, _msg$payload3;
147
174
 
148
- startProactiveChat(dispatch, msg === null || msg === void 0 ? void 0 : (_msg$payload = msg.payload) === null || _msg$payload === void 0 ? void 0 : _msg$payload.bodyTitle, msg === null || msg === void 0 ? void 0 : (_msg$payload2 = msg.payload) === null || _msg$payload2 === void 0 ? void 0 : _msg$payload2.showPrechat, msg === null || msg === void 0 ? void 0 : (_msg$payload3 = msg.payload) === null || _msg$payload3 === void 0 ? void 0 : _msg$payload3.inNewWindow);
175
+ startProactiveChat(dispatch, msg === null || msg === void 0 ? void 0 : (_msg$payload = msg.payload) === null || _msg$payload === void 0 ? void 0 : _msg$payload.notificationConfig, msg === null || msg === void 0 ? void 0 : (_msg$payload2 = msg.payload) === null || _msg$payload2 === void 0 ? void 0 : _msg$payload2.enablePreChat, msg === null || msg === void 0 ? void 0 : (_msg$payload3 = msg.payload) === null || _msg$payload3 === void 0 ? void 0 : _msg$payload3.inNewWindow);
176
+ } else {
177
+ TelemetryHelper.logActionEvent(LogLevel.INFO, {
178
+ Event: TelemetryEvent.ChatAlreadyTriggered,
179
+ Description: "Start proactive chat method called, when chat was already triggered."
180
+ });
181
+ }
182
+ }); // start chat from SDK Event
183
+
184
+ BroadcastService.getMessageByEventName(BroadcastEvent.StartChat).subscribe(() => {
185
+ TelemetryHelper.logActionEvent(LogLevel.INFO, {
186
+ Event: TelemetryEvent.StartChatEventRecevied,
187
+ Description: "Start chat event received."
188
+ });
189
+
190
+ if (state.appStates.isMinimized) {
191
+ dispatch({
192
+ type: LiveChatWidgetActionType.SET_MINIMIZED,
193
+ payload: false
194
+ });
195
+ } else {
196
+ prepareStartChat(props, chatSDK, state, dispatch, setAdapter);
197
+ }
198
+ }); // end chat from SDK Event
199
+
200
+ BroadcastService.getMessageByEventName(BroadcastEvent.EndChat).subscribe(async () => {
201
+ TelemetryHelper.logActionEvent(LogLevel.INFO, {
202
+ Event: TelemetryEvent.EndChatEventReceived,
203
+ Description: "End chat event received."
204
+ });
205
+
206
+ if (canEndChat.current) {
207
+ prepareEndChat(props, chatSDK, setAdapter, setWebChatStyles, dispatch, adapter, state);
208
+ } else {
209
+ const skipEndChatSDK = true;
210
+ const skipCloseChat = false;
211
+ endChat(props, chatSDK, setAdapter, setWebChatStyles, dispatch, adapter, skipEndChatSDK, skipCloseChat);
149
212
  }
213
+ }); // Listen to end chat event from other tabs
214
+
215
+ const endChatEventName = getWidgetEndChatEventName(chatSDK === null || chatSDK === void 0 ? void 0 : (_chatSDK$omnichannelC = chatSDK.omnichannelConfig) === null || _chatSDK$omnichannelC === void 0 ? void 0 : _chatSDK$omnichannelC.orgId, chatSDK === null || chatSDK === void 0 ? void 0 : (_chatSDK$omnichannelC2 = chatSDK.omnichannelConfig) === null || _chatSDK$omnichannelC2 === void 0 ? void 0 : _chatSDK$omnichannelC2.widgetId);
216
+ BroadcastService.getMessageByEventName(endChatEventName).subscribe(async () => {
217
+ endChat(props, chatSDK, setAdapter, setWebChatStyles, dispatch, adapter, false, false, false);
218
+ }); // Close popout window
219
+
220
+ BroadcastService.getMessageByEventName(BroadcastEvent.ClosePopoutWindow).subscribe(() => {
221
+ TelemetryHelper.logActionEvent(LogLevel.INFO, {
222
+ Event: TelemetryEvent.ClosePopoutWindowEventRecevied,
223
+ Description: "Close popout window event received."
224
+ });
225
+ dispatch({
226
+ type: LiveChatWidgetActionType.SET_PROACTIVE_CHAT_PARAMS,
227
+ payload: {
228
+ proactiveChatBodyTitle: "",
229
+ proactiveChatEnablePrechat: false,
230
+ proactiveChatInNewWindow: false
231
+ }
232
+ });
150
233
  });
151
- window.addEventListener("beforeunload", event => {
234
+ window.addEventListener("beforeunload", () => {
152
235
  disposeTelemetryLoggers();
153
236
  });
154
237
 
@@ -158,11 +241,12 @@ export const LiveChatWidgetStateful = props => {
158
241
  }, []);
159
242
  useEffect(() => {
160
243
  canStartProactiveChat.current = state.appStates.conversationState === ConversationState.Closed;
244
+ canEndChat.current = state.appStates.conversationState === ConversationState.Active;
161
245
 
162
246
  if (state.appStates.conversationState === ConversationState.Active) {
163
247
  chatSDK === null || chatSDK === void 0 ? void 0 : chatSDK.onNewMessage(() => {
164
248
  BroadcastService.postMessage({
165
- eventName: "NewMessageNotification"
249
+ eventName: BroadcastEvent.NewMessageNotification
166
250
  });
167
251
  });
168
252
  } // Track the message count
@@ -187,7 +271,7 @@ export const LiveChatWidgetStateful = props => {
187
271
  });
188
272
  const customEvent = {
189
273
  elementType: ElementType.Custom,
190
- eventName: "UnreadMessageCount",
274
+ eventName: BroadcastEvent.UnreadMessageCount,
191
275
  payload: 0
192
276
  };
193
277
  BroadcastService.postMessage(customEvent);
@@ -197,7 +281,7 @@ export const LiveChatWidgetStateful = props => {
197
281
  if (state.appStates.isMinimized && state.appStates.unreadMessageCount > 0) {
198
282
  const customEvent = {
199
283
  elementType: ElementType.Custom,
200
- eventName: "UnreadMessageCount",
284
+ eventName: BroadcastEvent.UnreadMessageCount,
201
285
  payload: `${state.appStates.unreadMessageCount}`
202
286
  };
203
287
  BroadcastService.postMessage(customEvent);
@@ -212,9 +296,13 @@ export const LiveChatWidgetStateful = props => {
212
296
  }, [(_props$webChatContain3 = props.webChatContainerProps) === null || _props$webChatContain3 === void 0 ? void 0 : _props$webChatContain3.webChatStyles]);
213
297
  const webChatProps = initWebChatComposer(props, chatSDK, state, dispatch, setWebChatStyles);
214
298
 
215
- const setPostChatContextRelay = () => setPostChatContextAndLoadSurvey(chatSDK, dispatch);
299
+ const setPostChatContextRelay = () => setPostChatContextAndLoadSurvey(chatSDK, dispatch); // eslint-disable-next-line @typescript-eslint/no-explicit-any
300
+
216
301
 
217
- const endChatRelay = () => endChat(props, chatSDK, setAdapter, setWebChatStyles, dispatch, adapter);
302
+ const endChatRelay = (adapter, skipEndChatSDK, skipCloseChat) => endChat(props, chatSDK, setAdapter, setWebChatStyles, dispatch, adapter, skipEndChatSDK, skipCloseChat); // eslint-disable-next-line @typescript-eslint/no-explicit-any
303
+
304
+
305
+ const prepareEndChatRelay = (adapter, state) => prepareEndChat(props, chatSDK, setAdapter, setWebChatStyles, dispatch, adapter, state);
218
306
 
219
307
  const prepareStartChatRelay = () => prepareStartChat(props, chatSDK, state, dispatch, setAdapter); // eslint-disable-next-line @typescript-eslint/no-explicit-any
220
308
 
@@ -224,8 +312,11 @@ export const LiveChatWidgetStateful = props => {
224
312
  const confirmationPaneProps = initConfirmationPropsComposer(props); // publish chat widget state
225
313
 
226
314
  useEffect(() => {
315
+ var _props$chatSDK, _props$chatSDK$omnich, _props$chatSDK2, _props$chatSDK2$omnic;
316
+
317
+ const widgetStateEventName = getWidgetCacheId(props === null || props === void 0 ? void 0 : (_props$chatSDK = props.chatSDK) === null || _props$chatSDK === void 0 ? void 0 : (_props$chatSDK$omnich = _props$chatSDK.omnichannelConfig) === null || _props$chatSDK$omnich === void 0 ? void 0 : _props$chatSDK$omnich.orgId, props === null || props === void 0 ? void 0 : (_props$chatSDK2 = props.chatSDK) === null || _props$chatSDK2 === void 0 ? void 0 : (_props$chatSDK2$omnic = _props$chatSDK2.omnichannelConfig) === null || _props$chatSDK2$omnic === void 0 ? void 0 : _props$chatSDK2$omnic.widgetId);
227
318
  const chatWidgetStateChangeEvent = {
228
- eventName: TelemetryEvent.ChatWidgetStateChanged,
319
+ eventName: widgetStateEventName,
229
320
  payload: { ...state
230
321
  }
231
322
  };
@@ -252,14 +343,14 @@ export const LiveChatWidgetStateful = props => {
252
343
  })), !((_props$controlProps8 = props.controlProps) !== null && _props$controlProps8 !== void 0 && _props$controlProps8.hideLoadingPane) && shouldShowLoadingPane(state) && (decodeComponentString((_props$componentOverr4 = props.componentOverrides) === null || _props$componentOverr4 === void 0 ? void 0 : _props$componentOverr4.loadingPane) || /*#__PURE__*/React.createElement(LoadingPaneStateful, props.loadingPaneProps)), !((_props$controlProps9 = props.controlProps) !== null && _props$controlProps9 !== void 0 && _props$controlProps9.hideOutOfOfficeHoursPane) && shouldShowOutOfOfficeHoursPane(state) && (decodeComponentString((_props$componentOverr5 = props.componentOverrides) === null || _props$componentOverr5 === void 0 ? void 0 : _props$componentOverr5.outOfOfficeHoursPane) || /*#__PURE__*/React.createElement(OutOfOfficeHoursPaneStateful, props.outOfOfficeHoursPaneProps)), !((_props$controlProps10 = props.controlProps) !== null && _props$controlProps10 !== void 0 && _props$controlProps10.hideReconnectChatPane) && shouldShowReconnectChatPane(state) && (decodeComponentString((_props$componentOverr6 = props.componentOverrides) === null || _props$componentOverr6 === void 0 ? void 0 : _props$componentOverr6.reconnectChatPane) || /*#__PURE__*/React.createElement(ReconnectChatPaneStateful, {
253
344
  reconnectChatProps: props.reconnectChatPaneProps,
254
345
  initStartChat: initStartChatRelay
255
- })), !((_props$controlProps11 = props.controlProps) !== null && _props$controlProps11 !== void 0 && _props$controlProps11.hidePreChatSurveyPane) && shouldShowPreChatSurveyPane(state) && /*#__PURE__*/React.createElement(PreChatSurveyPaneStateful, {
346
+ })), !((_props$controlProps11 = props.controlProps) !== null && _props$controlProps11 !== void 0 && _props$controlProps11.hidePreChatSurveyPane) && shouldShowPreChatSurveyPane(state) && (decodeComponentString((_props$componentOverr7 = props.componentOverrides) === null || _props$componentOverr7 === void 0 ? void 0 : _props$componentOverr7.preChatSurveyPane) || /*#__PURE__*/React.createElement(PreChatSurveyPaneStateful, {
256
347
  surveyProps: props.preChatSurveyPaneProps,
257
348
  initStartChat: initStartChatRelay
258
- }), !((_props$controlProps12 = props.controlProps) !== null && _props$controlProps12 !== void 0 && _props$controlProps12.hideCallingContainer) && shouldShowCallingContainer(state) && /*#__PURE__*/React.createElement(CallingContainerStateful, _extends({
349
+ })), !((_props$controlProps12 = props.controlProps) !== null && _props$controlProps12 !== void 0 && _props$controlProps12.hideCallingContainer) && shouldShowCallingContainer(state) && /*#__PURE__*/React.createElement(CallingContainerStateful, _extends({
259
350
  voiceVideoCallingSdk: voiceVideoCallingSDK
260
- }, props.callingContainerProps)), !((_props$controlProps13 = props.controlProps) !== null && _props$controlProps13 !== void 0 && _props$controlProps13.hideWebChatContainer) && shouldShowWebChatContainer(state) && (decodeComponentString((_props$componentOverr7 = props.componentOverrides) === null || _props$componentOverr7 === void 0 ? void 0 : _props$componentOverr7.webChatContainer) || /*#__PURE__*/React.createElement(WebChatContainerStateful, props.webChatContainerProps)), !((_props$controlProps14 = props.controlProps) !== null && _props$controlProps14 !== void 0 && _props$controlProps14.hideConfirmationPane) && shouldShowConfirmationPane(state) && (decodeComponentString((_props$componentOverr8 = props.componentOverrides) === null || _props$componentOverr8 === void 0 ? void 0 : _props$componentOverr8.confirmationPane) || /*#__PURE__*/React.createElement(ConfirmationPaneStateful, _extends({}, confirmationPaneProps, {
351
+ }, props.callingContainerProps)), !((_props$controlProps13 = props.controlProps) !== null && _props$controlProps13 !== void 0 && _props$controlProps13.hideWebChatContainer) && shouldShowWebChatContainer(state) && (decodeComponentString((_props$componentOverr8 = props.componentOverrides) === null || _props$componentOverr8 === void 0 ? void 0 : _props$componentOverr8.webChatContainer) || /*#__PURE__*/React.createElement(WebChatContainerStateful, props.webChatContainerProps)), !((_props$controlProps14 = props.controlProps) !== null && _props$controlProps14 !== void 0 && _props$controlProps14.hideConfirmationPane) && shouldShowConfirmationPane(state) && (decodeComponentString((_props$componentOverr9 = props.componentOverrides) === null || _props$componentOverr9 === void 0 ? void 0 : _props$componentOverr9.confirmationPane) || /*#__PURE__*/React.createElement(ConfirmationPaneStateful, _extends({}, confirmationPaneProps, {
261
352
  setPostChatContext: setPostChatContextRelay,
262
- endChat: endChatRelay
263
- }))), !((_props$controlProps15 = props.controlProps) !== null && _props$controlProps15 !== void 0 && _props$controlProps15.hidePostChatLoadingPane) && shouldShowPostChatLoadingPane(state) && (decodeComponentString((_props$componentOverr9 = props.componentOverrides) === null || _props$componentOverr9 === void 0 ? void 0 : _props$componentOverr9.postChatLoadingPane) || /*#__PURE__*/React.createElement(PostChatLoadingPaneStateful, props.postChatLoadingPaneProps)), shouldShowPostChatSurveyPane(state) && (decodeComponentString((_props$componentOverr10 = props.componentOverrides) === null || _props$componentOverr10 === void 0 ? void 0 : _props$componentOverr10.postChatSurveyPane) || /*#__PURE__*/React.createElement(PostChatSurveyPaneStateful, _extends({}, props.postChatSurveyPaneProps, props.chatSDK))), createFooter(props, state), shouldShowEmailTranscriptPane(state) && (decodeComponentString((_props$componentOverr11 = props.componentOverrides) === null || _props$componentOverr11 === void 0 ? void 0 : _props$componentOverr11.emailTranscriptPane) || /*#__PURE__*/React.createElement(EmailTranscriptPaneStateful, props.emailTranscriptPane))));
353
+ prepareEndChat: prepareEndChatRelay
354
+ }))), !((_props$controlProps15 = props.controlProps) !== null && _props$controlProps15 !== void 0 && _props$controlProps15.hidePostChatLoadingPane) && shouldShowPostChatLoadingPane(state) && (decodeComponentString((_props$componentOverr10 = props.componentOverrides) === null || _props$componentOverr10 === void 0 ? void 0 : _props$componentOverr10.postChatLoadingPane) || /*#__PURE__*/React.createElement(PostChatLoadingPaneStateful, props.postChatLoadingPaneProps)), shouldShowPostChatSurveyPane(state) && (decodeComponentString((_props$componentOverr11 = props.componentOverrides) === null || _props$componentOverr11 === void 0 ? void 0 : _props$componentOverr11.postChatSurveyPane) || /*#__PURE__*/React.createElement(PostChatSurveyPaneStateful, _extends({}, props.postChatSurveyPaneProps, props.chatSDK))), createFooter(props, state), shouldShowEmailTranscriptPane(state) && (decodeComponentString((_props$componentOverr12 = props.componentOverrides) === null || _props$componentOverr12 === void 0 ? void 0 : _props$componentOverr12.emailTranscriptPane) || /*#__PURE__*/React.createElement(EmailTranscriptPaneStateful, props.emailTranscriptPane))));
264
355
  };
265
356
  export default LiveChatWidgetStateful;
@@ -26,7 +26,7 @@ export const LoadingPaneStateful = props => {
26
26
  firstElement[0].focus();
27
27
  }
28
28
 
29
- TelemetryHelper.logActionEvent(LogLevel.INFO, {
29
+ TelemetryHelper.logLoadingEvent(LogLevel.INFO, {
30
30
  Event: TelemetryEvent.LoadingPaneLoaded,
31
31
  Description: "Loading pane loaded."
32
32
  });
@@ -1,5 +1,7 @@
1
+ import { LogLevel, TelemetryEvent } from "../../common/telemetry/TelemetryConstants";
1
2
  import React, { useEffect } from "react";
2
3
  import { OutOfOfficeHoursPane } from "@microsoft/omnichannel-chat-components";
4
+ import { TelemetryHelper } from "../../common/telemetry/TelemetryHelper";
3
5
  import { defaultGeneralStyleProps } from "./common/defaultStyleProps/defaultgeneralOOOHPaneStyleProps";
4
6
  import { findAllFocusableElement } from "../../common/utils";
5
7
  import useChatContextStore from "../../hooks/useChatContextStore";
@@ -23,6 +25,10 @@ export const OutOfOfficeHoursPaneStateful = props => {
23
25
  if (firstElement && firstElement[0]) {
24
26
  firstElement[0].focus();
25
27
  }
28
+
29
+ TelemetryHelper.logLoadingEvent(LogLevel.INFO, {
30
+ Event: TelemetryEvent.OutOfOfficePaneLoaded
31
+ });
26
32
  }, []);
27
33
  return /*#__PURE__*/React.createElement(OutOfOfficeHoursPane, {
28
34
  componentOverrides: props.componentOverrides,
@@ -3,6 +3,8 @@ import { LoadingPane } from "@microsoft/omnichannel-chat-components";
3
3
  import { defaultGeneralPostChatLoadingPaneStyleProps } from "./common/defaultgeneralPostChatLoadingPaneStyleProps";
4
4
  import { findAllFocusableElement } from "../../common/utils";
5
5
  import useChatContextStore from "../../hooks/useChatContextStore";
6
+ import { TelemetryHelper } from "../../common/telemetry/TelemetryHelper";
7
+ import { LogLevel, TelemetryEvent } from "../../common/telemetry/TelemetryConstants";
6
8
  export const PostChatLoadingPaneStateful = props => {
7
9
  var _props$styleProps;
8
10
 
@@ -28,6 +30,10 @@ export const PostChatLoadingPaneStateful = props => {
28
30
  if (firstElement && firstElement[0]) {
29
31
  firstElement[0].focus();
30
32
  }
33
+
34
+ TelemetryHelper.logLoadingEvent(LogLevel.INFO, {
35
+ Event: TelemetryEvent.PostChatSurveyLoadingPaneLoaded
36
+ });
31
37
  }, []);
32
38
  return /*#__PURE__*/React.createElement(LoadingPane, {
33
39
  componentOverrides: props.componentOverrides,
@@ -1,15 +1,15 @@
1
+ import { HtmlAttributeNames, Regex } from "../../common/Constants";
1
2
  import { LogLevel, TelemetryEvent } from "../../common/telemetry/TelemetryConstants";
2
3
  import React, { useEffect } from "react";
3
- import { extractPreChatSurveyResponseValues, findAllFocusableElement, parseAdaptiveCardPayload } from "../../common/utils";
4
+ import { extractPreChatSurveyResponseValues, findAllFocusableElement, getWidgetCacheId, parseAdaptiveCardPayload } from "../../common/utils";
4
5
  import { ConversationState } from "../../contexts/common/ConversationState";
6
+ import { DataStoreManager } from "../../common/contextDataStore/DataStoreManager";
5
7
  import { LiveChatWidgetActionType } from "../../contexts/common/LiveChatWidgetActionType";
6
8
  import { PreChatSurveyPane } from "@microsoft/omnichannel-chat-components";
7
- import { Constants, HtmlAttributeNames, Regex } from "../../common/Constants";
8
9
  import { TelemetryHelper } from "../../common/telemetry/TelemetryHelper";
9
10
  import { defaultGeneralPreChatSurveyPaneStyleProps } from "./common/defaultStyles/defaultGeneralPreChatSurveyPaneStyleProps";
10
11
  import { defaultPreChatSurveyLocalizedTexts } from "./common/defaultProps/defaultPreChatSurveyLocalizedTexts";
11
- import useChatContextStore from "../../hooks/useChatContextStore";
12
- import { DataStoreManager } from "../../common/contextDataStore/DataStoreManager"; // eslint-disable-next-line @typescript-eslint/no-explicit-any
12
+ import useChatContextStore from "../../hooks/useChatContextStore"; // eslint-disable-next-line @typescript-eslint/no-explicit-any
13
13
 
14
14
  export const PreChatSurveyPaneStateful = props => {
15
15
  var _surveyProps$stylePro, _props$surveyProps, _props$surveyProps$co;
@@ -40,7 +40,7 @@ export const PreChatSurveyPaneStateful = props => {
40
40
  try {
41
41
  return parseAdaptiveCardPayload(payload, requiredFieldMissingMessage);
42
42
  } catch (ex) {
43
- TelemetryHelper.logLoadingEvent(LogLevel.ERROR, {
43
+ TelemetryHelper.logConfigDataEvent(LogLevel.ERROR, {
44
44
  Event: TelemetryEvent.ParseAdaptiveCardFailed,
45
45
  Description: "Adaptive Card JSON Parse Failed.",
46
46
  ExceptionDetails: {
@@ -67,9 +67,10 @@ export const PreChatSurveyPaneStateful = props => {
67
67
  });
68
68
 
69
69
  try {
70
- var _DataStoreManager$cli, _persistedState$domai;
70
+ var _state$domainStates, _state$domainStates$t, _state$domainStates$t2, _DataStoreManager$cli, _persistedState$domai;
71
71
 
72
- const widgetStateFromCache = (_DataStoreManager$cli = DataStoreManager.clientDataStore) === null || _DataStoreManager$cli === void 0 ? void 0 : _DataStoreManager$cli.getData(Constants.widgetStateDataKey, "localStorage");
72
+ const widgetStateCacheId = getWidgetCacheId(((_state$domainStates = state.domainStates) === null || _state$domainStates === void 0 ? void 0 : (_state$domainStates$t = _state$domainStates.telemetryInternalData) === null || _state$domainStates$t === void 0 ? void 0 : _state$domainStates$t.orgId) ?? "", ((_state$domainStates$t2 = state.domainStates.telemetryInternalData) === null || _state$domainStates$t2 === void 0 ? void 0 : _state$domainStates$t2.widgetId) ?? "");
73
+ const widgetStateFromCache = (_DataStoreManager$cli = DataStoreManager.clientDataStore) === null || _DataStoreManager$cli === void 0 ? void 0 : _DataStoreManager$cli.getData(widgetStateCacheId, "localStorage");
73
74
  const persistedState = widgetStateFromCache ? JSON.parse(widgetStateFromCache) : undefined;
74
75
  let optionalParams = {};
75
76
 
@@ -83,9 +84,7 @@ export const PreChatSurveyPaneStateful = props => {
83
84
  } else {
84
85
  const prechatResponseValues = extractPreChatSurveyResponseValues(state.domainStates.preChatSurveyResponse, values);
85
86
  optionalParams = {
86
- initContext: {
87
- preChatResponse: prechatResponseValues
88
- }
87
+ preChatResponse: prechatResponseValues
89
88
  };
90
89
  setPreChatResponseEmail(values);
91
90
  await initStartChat(optionalParams);
@@ -1,4 +1,4 @@
1
- import { LogLevel, TelemetryEvent } from "../../common/telemetry/TelemetryConstants";
1
+ import { BroadcastEvent, LogLevel, TelemetryEvent } from "../../common/telemetry/TelemetryConstants";
2
2
  import React, { useEffect, useState } from "react";
3
3
  import { createTimer, setFocusOnElement } from "../../common/utils";
4
4
  import { BroadcastService } from "@microsoft/omnichannel-chat-components";
@@ -24,11 +24,19 @@ export const ProactiveChatPaneStateful = props => {
24
24
  const handleProactiveChatInviteTimeout = () => {
25
25
  if (!timeoutRemoved) {
26
26
  setTimeoutRemoved(true);
27
+ dispatch({
28
+ type: LiveChatWidgetActionType.SET_PROACTIVE_CHAT_PARAMS,
29
+ payload: {
30
+ proactiveChatBodyTitle: "",
31
+ proactiveChatEnablePrechat: false,
32
+ proactiveChatInNewWindow: false
33
+ }
34
+ });
27
35
  dispatch({
28
36
  type: LiveChatWidgetActionType.SET_CONVERSATION_STATE,
29
37
  payload: ConversationState.Closed
30
38
  });
31
- TelemetryHelper.logLoadingEvent(LogLevel.INFO, {
39
+ TelemetryHelper.logActionEvent(LogLevel.INFO, {
32
40
  Event: TelemetryEvent.ProactiveChatRejected,
33
41
  ElapsedTimeInMilliseconds: TelemetryTimers.LcwLoadToChatButtonTimer.milliSecondsElapsed,
34
42
  Description: "Proactive chat invitation timed out."
@@ -51,12 +59,12 @@ export const ProactiveChatPaneStateful = props => {
51
59
  if (state.appStates.proactiveChatStates.proactiveChatInNewWindow) {
52
60
  // TODO: BroadcastService: replace with the sdk broadcast service, when in place
53
61
  const startPopoutChatEvent = {
54
- eventName: "StartPopoutChat"
62
+ eventName: BroadcastEvent.ProactiveChatStartPopoutChat
55
63
  };
56
64
  BroadcastService.postMessage(startPopoutChatEvent);
57
65
  dispatch({
58
- type: LiveChatWidgetActionType.SET_SKIP_CHAT_BUTTON_RENDERING,
59
- payload: true
66
+ type: LiveChatWidgetActionType.SET_CONVERSATION_STATE,
67
+ payload: ConversationState.Closed
60
68
  });
61
69
  } else if (((_state$domainStates$l = state.domainStates.liveChatConfig) === null || _state$domainStates$l === void 0 ? void 0 : (_state$domainStates$l2 = _state$domainStates$l.LiveWSAndLiveChatEngJoin) === null || _state$domainStates$l2 === void 0 ? void 0 : _state$domainStates$l2.OutOfOperatingHours) === "True") {
62
70
  dispatch({
@@ -68,6 +76,10 @@ export const ProactiveChatPaneStateful = props => {
68
76
  payload: ConversationState.OutOfOffice
69
77
  });
70
78
  } else {
79
+ const proactiveChatStarted = {
80
+ eventName: BroadcastEvent.ProactiveChatStartChat
81
+ };
82
+ BroadcastService.postMessage(proactiveChatStarted);
71
83
  await startChat();
72
84
  }
73
85
  },
@@ -77,6 +89,14 @@ export const ProactiveChatPaneStateful = props => {
77
89
  Event: TelemetryEvent.ProactiveChatClosed,
78
90
  Description: "Proactive chat closed."
79
91
  });
92
+ dispatch({
93
+ type: LiveChatWidgetActionType.SET_PROACTIVE_CHAT_PARAMS,
94
+ payload: {
95
+ proactiveChatBodyTitle: "",
96
+ proactiveChatEnablePrechat: false,
97
+ proactiveChatInNewWindow: false
98
+ }
99
+ });
80
100
  dispatch({
81
101
  type: LiveChatWidgetActionType.SET_CONVERSATION_STATE,
82
102
  payload: ConversationState.Closed
@@ -14,6 +14,10 @@ export class MockChatSDK {
14
14
  return null;
15
15
  }
16
16
 
17
+ getChatToken() {
18
+ return null;
19
+ }
20
+
17
21
  createChatAdapter() {
18
22
  return new MockAdapter();
19
23
  } // eslint-disable-next-line @typescript-eslint/no-unused-vars
@@ -1,16 +1,6 @@
1
- import { BrowserVendor } from "../../webchatcontroller/enums/BrowserVendor";
1
+ import { ArchiveIcon, AudioIcon, BlankIcon, ExcelIcon, ImageIcon, OneNoteIcon, PDFIcon, PowerpointIcon, VideoIcon, VisioIcon, WordIcon } from "../../../../assets/Icons";
2
2
  import { getBrowserName, isChromiumEdge } from "./BrowserInfo";
3
- import ArchiveIcon from "../../../../assets/icons/archiveIcon.svg";
4
- import AudioIcon from "../../../../assets/icons/audioIcon.svg";
5
- import BlankIcon from "../../../../assets/icons/blankIcon.svg";
6
- import VideoIcon from "../../../../assets/icons/videoIcon.svg";
7
- import ImageIcon from "../../../../assets/icons/imageIcon.svg";
8
- import WordIcon from "../../../../assets/icons/wordIcon.svg";
9
- import OneNoteIcon from "../../../../assets/icons/oneNoteIcon.svg";
10
- import PowerpointIcon from "../../../../assets/icons/powerpointIcon.svg";
11
- import VisioIcon from "../../../../assets/icons/visioIcon.svg";
12
- import PDFIcon from "../../../../assets/icons/pdfIcon.svg";
13
- import ExcelIcon from "../../../../assets/icons/excelIcon.svg";
3
+ import { BrowserVendor } from "../../webchatcontroller/enums/BrowserVendor";
14
4
  import { Constants } from "../../../../common/Constants";
15
5
  const FileAttachmentIconMap = {
16
6
  "aac": AudioIcon,
@@ -5,59 +5,19 @@
5
5
  * 1. Renders system messages differently, according to Microsoft LiveChatWidget styles
6
6
  * 2. Changes the font size of user messages
7
7
  * 3. Decodes certain html characters that came through from chat services
8
- * 4. Triggers end conversation sequence when the chat thread is deleted
9
8
  ******/
10
- import React from "react";
9
+ import { LogLevel, TelemetryEvent } from "../../../../../common/telemetry/TelemetryConstants";
11
10
  import { Constants } from "../../../../../common/Constants";
12
11
  import { DirectLineActivityType } from "../../enums/DirectLineActivityType";
13
12
  import { DirectLineSenderRole } from "../../enums/DirectLineSenderRole";
14
13
  import { MessageTypes } from "../../enums/MessageType";
14
+ import React from "react";
15
+ import { TelemetryHelper } from "../../../../../common/telemetry/TelemetryHelper";
15
16
  import { defaultSystemMessageStyles } from "./defaultStyles/defaultSystemMessageStyles";
16
17
  import { defaultUserMessageStyles } from "./defaultStyles/defaultUserMessageStyles";
17
18
  import { escapeHtml } from "../../../../../common/utils";
18
- import { TelemetryHelper } from "../../../../../common/telemetry/TelemetryHelper";
19
- import { LogLevel, TelemetryEvent } from "../../../../../common/telemetry/TelemetryConstants";
20
19
  const loggedSystemMessages = new Array(); // eslint-disable-next-line @typescript-eslint/no-explicit-any
21
20
 
22
- const handleThreadUpdate = channelData => {
23
- var _channelData$properti, _channelData$properti2;
24
-
25
- TelemetryHelper.logActionEvent(LogLevel.INFO, {
26
- Event: TelemetryEvent.IC3ThreadUpdateEventReceived,
27
- Description: "IC3 ThreadUpdateEvent Received"
28
- });
29
-
30
- const postConversationEndedAction = () => {
31
- TelemetryHelper.logActionEvent(LogLevel.INFO, {
32
- Event: TelemetryEvent.ConversationEndedThreadEventReceived,
33
- Description: "Conversation is ended by agent side or by timeout."
34
- });
35
- }; // If the Thread is deleted, then display post conversation survey if enabled.
36
-
37
-
38
- const isThreadDeleted = (channelData === null || channelData === void 0 ? void 0 : (_channelData$properti = channelData.properties) === null || _channelData$properti === void 0 ? void 0 : (_channelData$properti2 = _channelData$properti.isdeleted) === null || _channelData$properti2 === void 0 ? void 0 : _channelData$properti2.toLowerCase()) === Constants.true;
39
-
40
- if (isThreadDeleted) {
41
- postConversationEndedAction();
42
- return;
43
- } //check if customer is still in the thread
44
-
45
-
46
- if (channelData.members && channelData.members.length > 0) {
47
- for (let i = 0; i < channelData.members.length; i++) {
48
- const id = channelData.members[i].id;
49
- const tag = channelData.members[i].tag; // In case of ACS customer is not removed from thread and has "left" tag
50
-
51
- if (id.startsWith(Constants.visitorIdPrefix) && tag !== Constants.left) {
52
- return;
53
- }
54
- }
55
- }
56
-
57
- postConversationEndedAction();
58
- }; // eslint-disable-next-line @typescript-eslint/no-explicit-any
59
-
60
-
61
21
  const handleSystemMessage = (next, args, card, systemMessageStyleProps) => {
62
22
  var _card$activity, _card$activity$channe, _card$activity$channe2, _card$activity2, _card$activity2$chann, _card$activity3, _card$activity3$chann, _card$activity3$chann2, _card$activity4, _card$activity4$chann, _card$activity5, _card$activity5$chann, _card$nextVisibleActi, _card$nextVisibleActi2, _card$activity6, _card$activity6$chann, _card$activity7, _card$nextVisibleActi3, _card$activity8;
63
23
 
@@ -108,7 +68,10 @@ export const createActivityMiddleware = (systemMessageStyleProps, userMessageSty
108
68
  var _card$activity$channe3;
109
69
 
110
70
  if (((_card$activity$channe3 = card.activity.channelData) === null || _card$activity$channe3 === void 0 ? void 0 : _card$activity$channe3.type) === MessageTypes.Thread) {
111
- handleThreadUpdate(card.activity.channelData);
71
+ TelemetryHelper.logActionEvent(LogLevel.INFO, {
72
+ Event: TelemetryEvent.IC3ThreadUpdateEventReceived,
73
+ Description: "IC3 ThreadUpdateEvent Received"
74
+ });
112
75
  }
113
76
 
114
77
  return () => false;
@@ -8,6 +8,7 @@
8
8
  import { Constants, MimeTypes, WebChatMiddlewareConstants } from "../../../../../common/Constants";
9
9
  import React from "react";
10
10
  import { getFileAttachmentIconData, isInlineMediaSupported } from "../../../common/utils/FileAttachmentIconManager";
11
+ import { BroadcastEvent } from "../../../../../common/telemetry/TelemetryConstants";
11
12
  import { BroadcastService } from "@microsoft/omnichannel-chat-components";
12
13
  import { WebChatActionType } from "../../enums/WebChatActionType";
13
14
  import { defaultAttachmentAdaptiveCardStyles } from "./defaultStyles/defaultAtttachmentAdaptiveCardStyles";
@@ -187,7 +188,7 @@ const createAttachmentMiddleware = enableInlinePlaying => {
187
188
  } catch (e) {
188
189
  const errorData = "Unable to parse the adaptive card format";
189
190
  BroadcastService.postMessage({
190
- eventName: "InvalidAdaptiveCardFormat",
191
+ eventName: BroadcastEvent.InvalidAdaptiveCardFormat,
191
192
  payload: {
192
193
  Message: errorData,
193
194
  ExceptionDetails: e