@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
@@ -7,13 +7,13 @@ exports.setPostChatContextAndLoadSurvey = void 0;
7
7
 
8
8
  var _TelemetryConstants = require("../../../common/telemetry/TelemetryConstants");
9
9
 
10
- var _LiveChatWidgetActionType = require("../../../contexts/common/LiveChatWidgetActionType");
11
-
12
- var _TelemetryHelper = require("../../../common/telemetry/TelemetryHelper");
10
+ var _omnichannelChatComponents = require("@microsoft/omnichannel-chat-components");
13
11
 
14
12
  var _ConversationState = require("../../../contexts/common/ConversationState");
15
13
 
16
- var _omnichannelChatComponents = require("@microsoft/omnichannel-chat-components");
14
+ var _LiveChatWidgetActionType = require("../../../contexts/common/LiveChatWidgetActionType");
15
+
16
+ var _TelemetryHelper = require("../../../common/telemetry/TelemetryHelper");
17
17
 
18
18
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
19
19
  const setPostChatContextAndLoadSurvey = async (chatSDK, dispatch, persistedChat) => {
@@ -39,7 +39,8 @@ const setPostChatContextAndLoadSurvey = async (chatSDK, dispatch, persistedChat)
39
39
  exception: ex
40
40
  }
41
41
  });
42
- }
42
+ } // eslint-disable-next-line @typescript-eslint/no-unused-vars
43
+
43
44
 
44
45
  _omnichannelChatComponents.BroadcastService.getMessageByEventName("LoadPostChatSurvey").subscribe(msg => {
45
46
  dispatch({
@@ -5,12 +5,14 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.prepareStartChat = exports.initStartChat = void 0;
7
7
 
8
- var _TelemetryConstants = require("../../../common/telemetry/TelemetryConstants");
9
-
10
8
  var _Constants = require("../../../common/Constants");
11
9
 
10
+ var _TelemetryConstants = require("../../../common/telemetry/TelemetryConstants");
11
+
12
12
  var _ConversationState = require("../../../contexts/common/ConversationState");
13
13
 
14
+ var _DataStoreManager = require("../../../common/contextDataStore/DataStoreManager");
15
+
14
16
  var _LiveChatWidgetActionType = require("../../../contexts/common/LiveChatWidgetActionType");
15
17
 
16
18
  var _NotificationHandler = require("../../webchatcontainerstateful/webchatcontroller/notification/NotificationHandler");
@@ -23,53 +25,68 @@ var _TelemetryManager = require("../../../common/telemetry/TelemetryManager");
23
25
 
24
26
  var _createAdapter = require("./createAdapter");
25
27
 
28
+ var _newMessageEventHandler = require("../../../plugins/newMessageEventHandler");
29
+
26
30
  var _utils = require("../../../common/utils");
27
31
 
28
32
  var _reconnectChatHelper = require("./reconnectChatHelper");
29
33
 
30
- var _updateSessionDataForTelemetry = require("./updateSessionDataForTelemetry");
31
-
32
34
  var _setPostChatContextAndLoadSurvey = require("./setPostChatContextAndLoadSurvey");
33
35
 
34
- var _DataStoreManager = require("../../../common/contextDataStore/DataStoreManager");
36
+ var _updateSessionDataForTelemetry = require("./updateSessionDataForTelemetry");
37
+
38
+ var _omnichannelChatComponents = require("@microsoft/omnichannel-chat-components");
35
39
 
36
40
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
41
+ let optionalParams = {}; // eslint-disable-next-line @typescript-eslint/no-explicit-any
42
+
37
43
  const prepareStartChat = async (props, chatSDK, state, dispatch, setAdapter) => {
44
+ var _props$reconnectChatP;
45
+
38
46
  if (await canConnectToExistingChat(props, chatSDK, state, dispatch, setAdapter)) {
39
47
  return;
40
- } // Getting PreChat Survey Context
48
+ } // Redirecting if unauthenticated reconnect chat expired
41
49
 
42
50
 
43
- const parseToJson = false;
44
- const preChatSurveyResponse = await chatSDK.getPreChatSurvey(parseToJson);
45
- const showPrechat = state.appStates.conversationState === _ConversationState.ConversationState.ProactiveChat ? preChatSurveyResponse && state.appStates.proactiveChatStates.proactiveChatEnablePrechat : preChatSurveyResponse; // Getting reconnectId for authenticated chat
51
+ if ((_props$reconnectChatP = props.reconnectChatPaneProps) !== null && _props$reconnectChatP !== void 0 && _props$reconnectChatP.reconnectId) {
52
+ var _props$reconnectChatP2, _props$reconnectChatP3;
46
53
 
47
- const reconnectId = await (0, _reconnectChatHelper.getReconnectIdForAuthenticatedChat)(props, chatSDK);
48
-
49
- if (reconnectId) {
50
- dispatch({
51
- type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_RECONNECT_ID,
52
- payload: reconnectId
53
- });
54
- dispatch({
55
- type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_CONVERSATION_STATE,
56
- payload: _ConversationState.ConversationState.ReconnectChat
57
- });
58
- } else if (showPrechat) {
59
- dispatch({
60
- type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_PRE_CHAT_SURVEY_RESPONSE,
61
- payload: preChatSurveyResponse
62
- });
63
- dispatch({
64
- type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_CONVERSATION_STATE,
65
- payload: _ConversationState.ConversationState.Prechat
66
- });
54
+ await (0, _reconnectChatHelper.handleRedirectUnauthenticatedReconnectChat)(chatSDK, dispatch, setAdapter, initStartChat, (_props$reconnectChatP2 = props.reconnectChatPaneProps) === null || _props$reconnectChatP2 === void 0 ? void 0 : _props$reconnectChatP2.reconnectId, (_props$reconnectChatP3 = props.reconnectChatPaneProps) === null || _props$reconnectChatP3 === void 0 ? void 0 : _props$reconnectChatP3.redirectInSameWindow);
67
55
  } else {
68
- dispatch({
69
- type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_CONVERSATION_STATE,
70
- payload: _ConversationState.ConversationState.Loading
71
- });
72
- await initStartChat(chatSDK, dispatch, setAdapter);
56
+ // Getting PreChat Survey Context
57
+ const parseToJson = false;
58
+ const preChatSurveyResponse = await chatSDK.getPreChatSurvey(parseToJson);
59
+ const showPrechat = state.appStates.conversationState === _ConversationState.ConversationState.ProactiveChat ? preChatSurveyResponse && state.appStates.proactiveChatStates.proactiveChatEnablePrechat : preChatSurveyResponse; // Getting reconnectId for authenticated chat
60
+
61
+ const reconnectId = await (0, _reconnectChatHelper.getReconnectIdForAuthenticatedChat)(props, chatSDK);
62
+
63
+ if (reconnectId) {
64
+ dispatch({
65
+ type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_RECONNECT_ID,
66
+ payload: reconnectId
67
+ });
68
+ dispatch({
69
+ type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_CONVERSATION_STATE,
70
+ payload: _ConversationState.ConversationState.ReconnectChat
71
+ });
72
+ } else if (showPrechat) {
73
+ dispatch({
74
+ type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_PRE_CHAT_SURVEY_RESPONSE,
75
+ payload: preChatSurveyResponse
76
+ });
77
+ dispatch({
78
+ type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_CONVERSATION_STATE,
79
+ payload: _ConversationState.ConversationState.Prechat
80
+ });
81
+ setCustomContextParams(props, state);
82
+ } else {
83
+ dispatch({
84
+ type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_CONVERSATION_STATE,
85
+ payload: _ConversationState.ConversationState.Loading
86
+ });
87
+ setCustomContextParams(props, state);
88
+ await initStartChat(chatSDK, dispatch, setAdapter);
89
+ }
73
90
  }
74
91
  }; // eslint-disable-next-line @typescript-eslint/no-explicit-any
75
92
 
@@ -78,27 +95,48 @@ exports.prepareStartChat = prepareStartChat;
78
95
 
79
96
  const initStartChat = async (chatSDK, dispatch, setAdapter, params, persistedState) => {
80
97
  try {
81
- var _TelemetryTimers$Widg;
98
+ var _newAdapter$activity$, _TelemetryTimers$Widg;
99
+
100
+ let isStartChatSuccessful = false;
101
+
102
+ if (persistedState || params !== null && params !== void 0 && params.liveChatContext) {
103
+ var _persistedState$domai, _persistedState$domai2, _persistedState$domai3, _persistedState$domai4, _persistedState$domai5;
104
+
105
+ // Broadcasting limited cached chat details
106
+ _omnichannelChatComponents.BroadcastService.postMessage({
107
+ eventName: _TelemetryConstants.BroadcastEvent.ChatRetrievedFromCache,
108
+ payload: {
109
+ chatId: persistedState === null || persistedState === void 0 ? void 0 : (_persistedState$domai = persistedState.domainStates) === null || _persistedState$domai === void 0 ? void 0 : (_persistedState$domai2 = _persistedState$domai.liveChatContext) === null || _persistedState$domai2 === void 0 ? void 0 : (_persistedState$domai3 = _persistedState$domai2.chatToken) === null || _persistedState$domai3 === void 0 ? void 0 : _persistedState$domai3.chatId,
110
+ requestId: persistedState === null || persistedState === void 0 ? void 0 : (_persistedState$domai4 = persistedState.domainStates) === null || _persistedState$domai4 === void 0 ? void 0 : (_persistedState$domai5 = _persistedState$domai4.liveChatContext) === null || _persistedState$domai5 === void 0 ? void 0 : _persistedState$domai5.requestId
111
+ }
112
+ });
113
+ }
82
114
 
83
115
  try {
84
116
  _TelemetryManager.TelemetryTimers.WidgetLoadTimer = (0, _utils.createTimer)();
85
117
 
86
- _TelemetryHelper.TelemetryHelper.logConfigDataEvent(_TelemetryConstants.LogLevel.INFO, {
118
+ _TelemetryHelper.TelemetryHelper.logSDKEvent(_TelemetryConstants.LogLevel.INFO, {
87
119
  Event: _TelemetryConstants.TelemetryEvent.StartChatSDKCall
88
120
  });
89
121
 
90
- await chatSDK.startChat(params);
122
+ optionalParams = Object.assign({}, params, optionalParams);
123
+ await chatSDK.startChat(optionalParams);
124
+ isStartChatSuccessful = true;
91
125
  } catch (error) {
92
- _TelemetryHelper.TelemetryHelper.logLoadingEvent(_TelemetryConstants.LogLevel.ERROR, {
126
+ _TelemetryHelper.TelemetryHelper.logSDKEvent(_TelemetryConstants.LogLevel.ERROR, {
93
127
  Event: _TelemetryConstants.TelemetryEvent.StartChatMethodException,
94
128
  ExceptionDetails: {
95
129
  exception: `Failed to setup startChat: ${error}`
96
130
  }
97
131
  });
132
+
133
+ isStartChatSuccessful = false;
98
134
  }
99
135
 
100
136
  const newAdapter = await (0, _createAdapter.createAdapter)(chatSDK);
101
137
  setAdapter(newAdapter);
138
+ const chatToken = await chatSDK.getChatToken();
139
+ newAdapter === null || newAdapter === void 0 ? void 0 : (_newAdapter$activity$ = newAdapter.activity$) === null || _newAdapter$activity$ === void 0 ? void 0 : _newAdapter$activity$.subscribe((0, _newMessageEventHandler.createOnNewAdapterActivityHandler)(chatToken === null || chatToken === void 0 ? void 0 : chatToken.chatId, chatToken === null || chatToken === void 0 ? void 0 : chatToken.visitorId));
102
140
 
103
141
  if (!persistedState) {
104
142
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
@@ -120,10 +158,12 @@ const initStartChat = async (chatSDK, dispatch, setAdapter, params, persistedSta
120
158
  await (0, _setPostChatContextAndLoadSurvey.setPostChatContextAndLoadSurvey)(chatSDK, dispatch);
121
159
  await (0, _updateSessionDataForTelemetry.updateSessionDataForTelemetry)(chatSDK, dispatch); // Set app state to Active
122
160
 
123
- dispatch({
124
- type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_CONVERSATION_STATE,
125
- payload: _ConversationState.ConversationState.Active
126
- });
161
+ if (isStartChatSuccessful) {
162
+ dispatch({
163
+ type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_CONVERSATION_STATE,
164
+ payload: _ConversationState.ConversationState.Active
165
+ });
166
+ }
127
167
  } else {
128
168
  dispatch({
129
169
  type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_WIDGET_STATE,
@@ -139,9 +179,9 @@ const initStartChat = async (chatSDK, dispatch, setAdapter, params, persistedSta
139
179
  });
140
180
  } catch (ex) {
141
181
  _TelemetryHelper.TelemetryHelper.logLoadingEvent(_TelemetryConstants.LogLevel.ERROR, {
142
- Event: _TelemetryConstants.TelemetryEvent.StartChatFailed,
182
+ Event: _TelemetryConstants.TelemetryEvent.WidgetLoadFailed,
143
183
  ExceptionDetails: {
144
- Exception: `Start Chat Failed: ${ex}`
184
+ Exception: `Widget load Failed: ${ex}`
145
185
  }
146
186
  });
147
187
 
@@ -165,24 +205,36 @@ const initStartChat = async (chatSDK, dispatch, setAdapter, params, persistedSta
165
205
  exports.initStartChat = initStartChat;
166
206
 
167
207
  const canConnectToExistingChat = async (props, chatSDK, state, dispatch, setAdapter) => {
168
- var _DataStoreManager$cli, _persistedState$domai;
208
+ var _chatSDK$omnichannelC, _chatSDK$omnichannelC2, _DataStoreManager$cli, _persistedState$domai6;
169
209
 
170
- const widgetStateFromCache = (_DataStoreManager$cli = _DataStoreManager.DataStoreManager.clientDataStore) === null || _DataStoreManager$cli === void 0 ? void 0 : _DataStoreManager$cli.getData(_Constants.Constants.widgetStateDataKey, "localStorage");
210
+ const widgetStateEventName = (0, _utils.getWidgetCacheId)((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) ?? "");
211
+ const widgetStateFromCache = (_DataStoreManager$cli = _DataStoreManager.DataStoreManager.clientDataStore) === null || _DataStoreManager$cli === void 0 ? void 0 : _DataStoreManager$cli.getData(widgetStateEventName, "localStorage");
171
212
  const persistedState = widgetStateFromCache ? JSON.parse(widgetStateFromCache) : undefined;
172
213
 
173
- if (persistedState !== null && persistedState !== void 0 && (_persistedState$domai = persistedState.domainStates) !== null && _persistedState$domai !== void 0 && _persistedState$domai.liveChatContext) {
174
- var _persistedState$domai2;
214
+ if (persistedState !== null && persistedState !== void 0 && (_persistedState$domai6 = persistedState.domainStates) !== null && _persistedState$domai6 !== void 0 && _persistedState$domai6.liveChatContext) {
215
+ var _persistedState$domai7;
175
216
 
176
217
  dispatch({
177
218
  type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_CONVERSATION_STATE,
178
219
  payload: _ConversationState.ConversationState.Loading
179
220
  });
180
221
  const optionalParams = {
181
- liveChatContext: persistedState === null || persistedState === void 0 ? void 0 : (_persistedState$domai2 = persistedState.domainStates) === null || _persistedState$domai2 === void 0 ? void 0 : _persistedState$domai2.liveChatContext
222
+ liveChatContext: persistedState === null || persistedState === void 0 ? void 0 : (_persistedState$domai7 = persistedState.domainStates) === null || _persistedState$domai7 === void 0 ? void 0 : _persistedState$domai7.liveChatContext
182
223
  };
183
224
  await initStartChat(chatSDK, dispatch, setAdapter, optionalParams, persistedState);
184
225
  return true;
185
226
  } else {
186
227
  return false;
187
228
  }
229
+ };
230
+
231
+ const setCustomContextParams = (props, state) => {
232
+ var _props$chatConfig, _state$domainStates;
233
+
234
+ // Add custom context if any only for unauthenticated chat
235
+ if (!((_props$chatConfig = props.chatConfig) !== null && _props$chatConfig !== void 0 && _props$chatConfig.LiveChatConfigAuthSettings) && (_state$domainStates = state.domainStates) !== null && _state$domainStates !== void 0 && _state$domainStates.customContext) {
236
+ optionalParams = Object.assign({}, optionalParams, {
237
+ customContext: state.domainStates.customContext
238
+ });
239
+ }
188
240
  };
@@ -16,12 +16,12 @@ var _TelemetryHelper = require("../../../common/telemetry/TelemetryHelper");
16
16
  var _TelemetryManager = require("../../../common/telemetry/TelemetryManager");
17
17
 
18
18
  // Defines startProactiveChat callback
19
- const startProactiveChat = (dispatch, bodyTitle, showPrechat, inNewWindow) => {
19
+ const startProactiveChat = (dispatch, notificationConfig, enablePreChat, inNewWindow) => {
20
20
  dispatch({
21
21
  type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_PROACTIVE_CHAT_PARAMS,
22
22
  payload: {
23
- proactiveChatBodyTitle: bodyTitle ?? "",
24
- proactiveChatEnablePrechat: showPrechat ?? false,
23
+ proactiveChatBodyTitle: notificationConfig && notificationConfig.message ? notificationConfig.message : "",
24
+ proactiveChatEnablePrechat: enablePreChat ?? false,
25
25
  proactiveChatInNewWindow: inNewWindow ?? false
26
26
  }
27
27
  });
@@ -5,6 +5,8 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.default = exports.LiveChatWidgetStateful = void 0;
7
7
 
8
+ var _TelemetryConstants = require("../../../common/telemetry/TelemetryConstants");
9
+
8
10
  var _omnichannelChatComponents = require("@microsoft/omnichannel-chat-components");
9
11
 
10
12
  var _react = require("@fluentui/react");
@@ -29,6 +31,8 @@ var _ConfirmationPaneStateful = _interopRequireDefault(require("../../confirmati
29
31
 
30
32
  var _ConversationState = require("../../../contexts/common/ConversationState");
31
33
 
34
+ var _DataStoreManager = require("../../../common/contextDataStore/DataStoreManager");
35
+
32
36
  var _EmailTranscriptPaneStateful = _interopRequireDefault(require("../../emailtranscriptpanestateful/EmailTranscriptPaneStateful"));
33
37
 
34
38
  var _HeaderStateful = _interopRequireDefault(require("../../headerstateful/HeaderStateful"));
@@ -49,6 +53,8 @@ var _ProactiveChatPaneStateful = _interopRequireDefault(require("../../proactive
49
53
 
50
54
  var _ReconnectChatPaneStateful = _interopRequireDefault(require("../../reconnectchatpanestateful/ReconnectChatPaneStateful"));
51
55
 
56
+ var _TelemetryHelper = require("../../../common/telemetry/TelemetryHelper");
57
+
52
58
  var _TelemetryManager = require("../../../common/telemetry/TelemetryManager");
53
59
 
54
60
  var _WebChatContainerStateful = _interopRequireDefault(require("../../webchatcontainerstateful/WebChatContainerStateful"));
@@ -59,6 +65,8 @@ var _createInternetConnectionChangeHandler = require("../common/createInternetCo
59
65
 
60
66
  var _defaultWebChatContainerStatefulProps = require("../../webchatcontainerstateful/common/defaultProps/defaultWebChatContainerStatefulProps");
61
67
 
68
+ var _disposeTelemetryLoggers = require("../common/disposeTelemetryLoggers");
69
+
62
70
  var _endChat = require("../common/endChat");
63
71
 
64
72
  var _getGeneralStylesForButton = require("../common/getGeneralStylesForButton");
@@ -81,12 +89,6 @@ var _useChatContextStore = _interopRequireDefault(require("../../../hooks/useCha
81
89
 
82
90
  var _useChatSDKStore = _interopRequireDefault(require("../../../hooks/useChatSDKStore"));
83
91
 
84
- var _TelemetryConstants = require("../../../common/telemetry/TelemetryConstants");
85
-
86
- var _disposeTelemetryLoggers = require("../common/disposeTelemetryLoggers");
87
-
88
- var _DataStoreManager = require("../../../common/contextDataStore/DataStoreManager");
89
-
90
92
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
91
93
 
92
94
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
@@ -96,7 +98,7 @@ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj &&
96
98
  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); }
97
99
 
98
100
  const LiveChatWidgetStateful = props => {
99
- 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;
101
+ 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;
100
102
 
101
103
  const [state, dispatch] = (0, _useChatContextStore.default)(); // eslint-disable-next-line @typescript-eslint/no-explicit-any
102
104
 
@@ -105,12 +107,14 @@ const LiveChatWidgetStateful = props => {
105
107
  ...((_props$webChatContain = props.webChatContainerProps) === null || _props$webChatContain === void 0 ? void 0 : _props$webChatContain.webChatStyles)
106
108
  }); // eslint-disable-next-line @typescript-eslint/no-explicit-any
107
109
 
108
- const chatSDK = (0, _useChatSDKStore.default)();
110
+ const chatSDK = (0, _useChatSDKStore.default)(); // eslint-disable-next-line @typescript-eslint/no-explicit-any
111
+
109
112
  const [voiceVideoCallingSDK, setVoiceVideoCallingSDK] = (0, _react2.useState)(undefined);
110
113
  const {
111
114
  Composer
112
115
  } = _botframeworkWebchat.Components;
113
- const canStartProactiveChat = (0, _react2.useRef)(true); // Process general styles
116
+ const canStartProactiveChat = (0, _react2.useRef)(true);
117
+ const canEndChat = (0, _react2.useRef)(true); // Process general styles
114
118
 
115
119
  const generalStyles = {
116
120
  root: Object.assign({}, (0, _getGeneralStylesForButton.getGeneralStylesForButton)(state), (_props$styleProps = props.styleProps) === null || _props$styleProps === void 0 ? void 0 : _props$styleProps.generalStyles)
@@ -132,6 +136,10 @@ const LiveChatWidgetStateful = props => {
132
136
  type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_SKIP_CHAT_BUTTON_RENDERING,
133
137
  payload: ((_props$controlProps2 = props.controlProps) === null || _props$controlProps2 === void 0 ? void 0 : _props$controlProps2.skipChatButtonRendering) || false
134
138
  });
139
+ dispatch({
140
+ type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_E2VV_ENABLED,
141
+ payload: false
142
+ });
135
143
  (0, _initCallingSdk.initCallingSdk)(chatSDK, setVoiceVideoCallingSDK).then(sdkCreated => {
136
144
  sdkCreated && dispatch({
137
145
  type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_E2VV_ENABLED,
@@ -142,7 +150,7 @@ const LiveChatWidgetStateful = props => {
142
150
  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) {
143
151
  var _props$reconnectChatP2;
144
152
 
145
- (0, _reconnectChatHelper.handleUnauthenticatedReconnectChat)(dispatch, (_props$reconnectChatP2 = props.reconnectChatPaneProps) === null || _props$reconnectChatP2 === void 0 ? void 0 : _props$reconnectChatP2.reconnectId, _startChat.initStartChat);
153
+ (0, _reconnectChatHelper.startUnauthenticatedReconnectChat)(chatSDK, dispatch, setAdapter, (_props$reconnectChatP2 = props.reconnectChatPaneProps) === null || _props$reconnectChatP2 === void 0 ? void 0 : _props$reconnectChatP2.reconnectId, _startChat.initStartChat);
146
154
  } // Initialize global dir
147
155
 
148
156
 
@@ -152,13 +160,11 @@ const LiveChatWidgetStateful = props => {
152
160
  payload: globalDir
153
161
  });
154
162
 
155
- if ((_state$domainStates = state.domainStates) !== null && _state$domainStates !== void 0 && _state$domainStates.chatToken) {
163
+ if ((_state$domainStates = state.domainStates) !== null && _state$domainStates !== void 0 && _state$domainStates.liveChatContext) {
156
164
  var _state$domainStates2;
157
165
 
158
166
  const optionalParams = {
159
- liveChatContext: {
160
- chatToken: (_state$domainStates2 = state.domainStates) === null || _state$domainStates2 === void 0 ? void 0 : _state$domainStates2.chatToken
161
- }
167
+ liveChatContext: (_state$domainStates2 = state.domainStates) === null || _state$domainStates2 === void 0 ? void 0 : _state$domainStates2.liveChatContext
162
168
  };
163
169
  (0, _startChat.initStartChat)(chatSDK, dispatch, setAdapter, optionalParams);
164
170
  }
@@ -168,9 +174,9 @@ const LiveChatWidgetStateful = props => {
168
174
  var _props$reconnectChatP3;
169
175
 
170
176
  if ((_props$reconnectChatP3 = props.reconnectChatPaneProps) !== null && _props$reconnectChatP3 !== void 0 && _props$reconnectChatP3.reconnectId && !state.appStates.reconnectId) {
171
- var _props$reconnectChatP4;
177
+ var _props$reconnectChatP4, _props$reconnectChatP5;
172
178
 
173
- (0, _reconnectChatHelper.handleUnauthenticatedReconnectChat)(dispatch, (_props$reconnectChatP4 = props.reconnectChatPaneProps) === null || _props$reconnectChatP4 === void 0 ? void 0 : _props$reconnectChatP4.reconnectId, _startChat.initStartChat);
179
+ (0, _reconnectChatHelper.handleUnauthenticatedReconnectChat)(chatSDK, dispatch, setAdapter, (_props$reconnectChatP4 = props.reconnectChatPaneProps) === null || _props$reconnectChatP4 === void 0 ? void 0 : _props$reconnectChatP4.reconnectId, _startChat.initStartChat, (_props$reconnectChatP5 = props.reconnectChatPaneProps) === null || _props$reconnectChatP5 === void 0 ? void 0 : _props$reconnectChatP5.redirectInSameWindow);
174
180
  } else {
175
181
  (0, _reconnectChatHelper.getReconnectIdForAuthenticatedChat)(props, chatSDK).then(authReconnectId => {
176
182
  if (authReconnectId && !state.appStates.reconnectId) {
@@ -183,6 +189,12 @@ const LiveChatWidgetStateful = props => {
183
189
  payload: _ConversationState.ConversationState.ReconnectChat
184
190
  });
185
191
  } else {
192
+ const chatStartedSkippingChatButtonRendering = {
193
+ eventName: _TelemetryConstants.BroadcastEvent.StartChatSkippingChatButtonRendering
194
+ };
195
+
196
+ _omnichannelChatComponents.BroadcastService.postMessage(chatStartedSkippingChatButtonRendering);
197
+
186
198
  dispatch({
187
199
  type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_CONVERSATION_STATE,
188
200
  payload: _ConversationState.ConversationState.Loading
@@ -194,15 +206,97 @@ const LiveChatWidgetStateful = props => {
194
206
  }
195
207
  }, [state.appStates.skipChatButtonRendering]);
196
208
  (0, _react2.useEffect)(() => {
197
- _omnichannelChatComponents.BroadcastService.getMessageByEventName("StartProactiveChat").subscribe(msg => {
209
+ var _chatSDK$omnichannelC, _chatSDK$omnichannelC2;
210
+
211
+ // Add the custom context on receiving the SetCustomContext event
212
+ _omnichannelChatComponents.BroadcastService.getMessageByEventName(_TelemetryConstants.BroadcastEvent.SetCustomContext).subscribe(msg => {
213
+ _TelemetryHelper.TelemetryHelper.logActionEvent(_TelemetryConstants.LogLevel.INFO, {
214
+ Event: _TelemetryConstants.TelemetryEvent.CustomContextReceived,
215
+ Description: "CustomContext received."
216
+ });
217
+
218
+ dispatch({
219
+ type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_CUSTOM_CONTEXT,
220
+ payload: msg === null || msg === void 0 ? void 0 : msg.payload
221
+ });
222
+ });
223
+
224
+ _omnichannelChatComponents.BroadcastService.getMessageByEventName(_TelemetryConstants.BroadcastEvent.StartProactiveChat).subscribe(msg => {
225
+ _TelemetryHelper.TelemetryHelper.logActionEvent(_TelemetryConstants.LogLevel.INFO, {
226
+ Event: _TelemetryConstants.TelemetryEvent.StartProactiveChatEventReceived,
227
+ Description: "Start proactive chat event received."
228
+ });
229
+
198
230
  if (canStartProactiveChat.current) {
199
231
  var _msg$payload, _msg$payload2, _msg$payload3;
200
232
 
201
- (0, _startProactiveChat.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);
233
+ (0, _startProactiveChat.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);
234
+ } else {
235
+ _TelemetryHelper.TelemetryHelper.logActionEvent(_TelemetryConstants.LogLevel.INFO, {
236
+ Event: _TelemetryConstants.TelemetryEvent.ChatAlreadyTriggered,
237
+ Description: "Start proactive chat method called, when chat was already triggered."
238
+ });
202
239
  }
240
+ }); // start chat from SDK Event
241
+
242
+
243
+ _omnichannelChatComponents.BroadcastService.getMessageByEventName(_TelemetryConstants.BroadcastEvent.StartChat).subscribe(() => {
244
+ _TelemetryHelper.TelemetryHelper.logActionEvent(_TelemetryConstants.LogLevel.INFO, {
245
+ Event: _TelemetryConstants.TelemetryEvent.StartChatEventRecevied,
246
+ Description: "Start chat event received."
247
+ });
248
+
249
+ if (state.appStates.isMinimized) {
250
+ dispatch({
251
+ type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_MINIMIZED,
252
+ payload: false
253
+ });
254
+ } else {
255
+ (0, _startChat.prepareStartChat)(props, chatSDK, state, dispatch, setAdapter);
256
+ }
257
+ }); // end chat from SDK Event
258
+
259
+
260
+ _omnichannelChatComponents.BroadcastService.getMessageByEventName(_TelemetryConstants.BroadcastEvent.EndChat).subscribe(async () => {
261
+ _TelemetryHelper.TelemetryHelper.logActionEvent(_TelemetryConstants.LogLevel.INFO, {
262
+ Event: _TelemetryConstants.TelemetryEvent.EndChatEventReceived,
263
+ Description: "End chat event received."
264
+ });
265
+
266
+ if (canEndChat.current) {
267
+ (0, _endChat.prepareEndChat)(props, chatSDK, setAdapter, setWebChatStyles, dispatch, adapter, state);
268
+ } else {
269
+ const skipEndChatSDK = true;
270
+ const skipCloseChat = false;
271
+ (0, _endChat.endChat)(props, chatSDK, setAdapter, setWebChatStyles, dispatch, adapter, skipEndChatSDK, skipCloseChat);
272
+ }
273
+ }); // Listen to end chat event from other tabs
274
+
275
+
276
+ const endChatEventName = (0, _utils.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);
277
+
278
+ _omnichannelChatComponents.BroadcastService.getMessageByEventName(endChatEventName).subscribe(async () => {
279
+ (0, _endChat.endChat)(props, chatSDK, setAdapter, setWebChatStyles, dispatch, adapter, false, false, false);
280
+ }); // Close popout window
281
+
282
+
283
+ _omnichannelChatComponents.BroadcastService.getMessageByEventName(_TelemetryConstants.BroadcastEvent.ClosePopoutWindow).subscribe(() => {
284
+ _TelemetryHelper.TelemetryHelper.logActionEvent(_TelemetryConstants.LogLevel.INFO, {
285
+ Event: _TelemetryConstants.TelemetryEvent.ClosePopoutWindowEventRecevied,
286
+ Description: "Close popout window event received."
287
+ });
288
+
289
+ dispatch({
290
+ type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_PROACTIVE_CHAT_PARAMS,
291
+ payload: {
292
+ proactiveChatBodyTitle: "",
293
+ proactiveChatEnablePrechat: false,
294
+ proactiveChatInNewWindow: false
295
+ }
296
+ });
203
297
  });
204
298
 
205
- window.addEventListener("beforeunload", event => {
299
+ window.addEventListener("beforeunload", () => {
206
300
  (0, _disposeTelemetryLoggers.disposeTelemetryLoggers)();
207
301
  });
208
302
 
@@ -212,11 +306,12 @@ const LiveChatWidgetStateful = props => {
212
306
  }, []);
213
307
  (0, _react2.useEffect)(() => {
214
308
  canStartProactiveChat.current = state.appStates.conversationState === _ConversationState.ConversationState.Closed;
309
+ canEndChat.current = state.appStates.conversationState === _ConversationState.ConversationState.Active;
215
310
 
216
311
  if (state.appStates.conversationState === _ConversationState.ConversationState.Active) {
217
312
  chatSDK === null || chatSDK === void 0 ? void 0 : chatSDK.onNewMessage(() => {
218
313
  _omnichannelChatComponents.BroadcastService.postMessage({
219
- eventName: "NewMessageNotification"
314
+ eventName: _TelemetryConstants.BroadcastEvent.NewMessageNotification
220
315
  });
221
316
  });
222
317
  } // Track the message count
@@ -241,7 +336,7 @@ const LiveChatWidgetStateful = props => {
241
336
  });
242
337
  const customEvent = {
243
338
  elementType: _omnichannelChatComponents.ElementType.Custom,
244
- eventName: "UnreadMessageCount",
339
+ eventName: _TelemetryConstants.BroadcastEvent.UnreadMessageCount,
245
340
  payload: 0
246
341
  };
247
342
 
@@ -252,7 +347,7 @@ const LiveChatWidgetStateful = props => {
252
347
  if (state.appStates.isMinimized && state.appStates.unreadMessageCount > 0) {
253
348
  const customEvent = {
254
349
  elementType: _omnichannelChatComponents.ElementType.Custom,
255
- eventName: "UnreadMessageCount",
350
+ eventName: _TelemetryConstants.BroadcastEvent.UnreadMessageCount,
256
351
  payload: `${state.appStates.unreadMessageCount}`
257
352
  };
258
353
 
@@ -268,9 +363,13 @@ const LiveChatWidgetStateful = props => {
268
363
  }, [(_props$webChatContain3 = props.webChatContainerProps) === null || _props$webChatContain3 === void 0 ? void 0 : _props$webChatContain3.webChatStyles]);
269
364
  const webChatProps = (0, _initWebChatComposer.initWebChatComposer)(props, chatSDK, state, dispatch, setWebChatStyles);
270
365
 
271
- const setPostChatContextRelay = () => (0, _setPostChatContextAndLoadSurvey.setPostChatContextAndLoadSurvey)(chatSDK, dispatch);
366
+ const setPostChatContextRelay = () => (0, _setPostChatContextAndLoadSurvey.setPostChatContextAndLoadSurvey)(chatSDK, dispatch); // eslint-disable-next-line @typescript-eslint/no-explicit-any
367
+
368
+
369
+ const endChatRelay = (adapter, skipEndChatSDK, skipCloseChat) => (0, _endChat.endChat)(props, chatSDK, setAdapter, setWebChatStyles, dispatch, adapter, skipEndChatSDK, skipCloseChat); // eslint-disable-next-line @typescript-eslint/no-explicit-any
272
370
 
273
- const endChatRelay = () => (0, _endChat.endChat)(props, chatSDK, setAdapter, setWebChatStyles, dispatch, adapter);
371
+
372
+ const prepareEndChatRelay = (adapter, state) => (0, _endChat.prepareEndChat)(props, chatSDK, setAdapter, setWebChatStyles, dispatch, adapter, state);
274
373
 
275
374
  const prepareStartChatRelay = () => (0, _startChat.prepareStartChat)(props, chatSDK, state, dispatch, setAdapter); // eslint-disable-next-line @typescript-eslint/no-explicit-any
276
375
 
@@ -280,8 +379,11 @@ const LiveChatWidgetStateful = props => {
280
379
  const confirmationPaneProps = (0, _initConfirmationPropsComposer.initConfirmationPropsComposer)(props); // publish chat widget state
281
380
 
282
381
  (0, _react2.useEffect)(() => {
382
+ var _props$chatSDK, _props$chatSDK$omnich, _props$chatSDK2, _props$chatSDK2$omnic;
383
+
384
+ const widgetStateEventName = (0, _utils.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);
283
385
  const chatWidgetStateChangeEvent = {
284
- eventName: _TelemetryConstants.TelemetryEvent.ChatWidgetStateChanged,
386
+ eventName: widgetStateEventName,
285
387
  payload: { ...state
286
388
  }
287
389
  };
@@ -309,15 +411,15 @@ const LiveChatWidgetStateful = props => {
309
411
  })), !((_props$controlProps8 = props.controlProps) !== null && _props$controlProps8 !== void 0 && _props$controlProps8.hideLoadingPane) && (0, _componentController.shouldShowLoadingPane)(state) && ((0, _omnichannelChatComponents.decodeComponentString)((_props$componentOverr4 = props.componentOverrides) === null || _props$componentOverr4 === void 0 ? void 0 : _props$componentOverr4.loadingPane) || /*#__PURE__*/_react2.default.createElement(_LoadingPaneStateful.default, props.loadingPaneProps)), !((_props$controlProps9 = props.controlProps) !== null && _props$controlProps9 !== void 0 && _props$controlProps9.hideOutOfOfficeHoursPane) && (0, _componentController.shouldShowOutOfOfficeHoursPane)(state) && ((0, _omnichannelChatComponents.decodeComponentString)((_props$componentOverr5 = props.componentOverrides) === null || _props$componentOverr5 === void 0 ? void 0 : _props$componentOverr5.outOfOfficeHoursPane) || /*#__PURE__*/_react2.default.createElement(_OOOHPaneStateful.default, props.outOfOfficeHoursPaneProps)), !((_props$controlProps10 = props.controlProps) !== null && _props$controlProps10 !== void 0 && _props$controlProps10.hideReconnectChatPane) && (0, _componentController.shouldShowReconnectChatPane)(state) && ((0, _omnichannelChatComponents.decodeComponentString)((_props$componentOverr6 = props.componentOverrides) === null || _props$componentOverr6 === void 0 ? void 0 : _props$componentOverr6.reconnectChatPane) || /*#__PURE__*/_react2.default.createElement(_ReconnectChatPaneStateful.default, {
310
412
  reconnectChatProps: props.reconnectChatPaneProps,
311
413
  initStartChat: initStartChatRelay
312
- })), !((_props$controlProps11 = props.controlProps) !== null && _props$controlProps11 !== void 0 && _props$controlProps11.hidePreChatSurveyPane) && (0, _componentController.shouldShowPreChatSurveyPane)(state) && /*#__PURE__*/_react2.default.createElement(_PreChatSurveyPaneStateful.default, {
414
+ })), !((_props$controlProps11 = props.controlProps) !== null && _props$controlProps11 !== void 0 && _props$controlProps11.hidePreChatSurveyPane) && (0, _componentController.shouldShowPreChatSurveyPane)(state) && ((0, _omnichannelChatComponents.decodeComponentString)((_props$componentOverr7 = props.componentOverrides) === null || _props$componentOverr7 === void 0 ? void 0 : _props$componentOverr7.preChatSurveyPane) || /*#__PURE__*/_react2.default.createElement(_PreChatSurveyPaneStateful.default, {
313
415
  surveyProps: props.preChatSurveyPaneProps,
314
416
  initStartChat: initStartChatRelay
315
- }), !((_props$controlProps12 = props.controlProps) !== null && _props$controlProps12 !== void 0 && _props$controlProps12.hideCallingContainer) && (0, _componentController.shouldShowCallingContainer)(state) && /*#__PURE__*/_react2.default.createElement(_CallingContainerStateful.default, _extends({
417
+ })), !((_props$controlProps12 = props.controlProps) !== null && _props$controlProps12 !== void 0 && _props$controlProps12.hideCallingContainer) && (0, _componentController.shouldShowCallingContainer)(state) && /*#__PURE__*/_react2.default.createElement(_CallingContainerStateful.default, _extends({
316
418
  voiceVideoCallingSdk: voiceVideoCallingSDK
317
- }, props.callingContainerProps)), !((_props$controlProps13 = props.controlProps) !== null && _props$controlProps13 !== void 0 && _props$controlProps13.hideWebChatContainer) && (0, _componentController.shouldShowWebChatContainer)(state) && ((0, _omnichannelChatComponents.decodeComponentString)((_props$componentOverr7 = props.componentOverrides) === null || _props$componentOverr7 === void 0 ? void 0 : _props$componentOverr7.webChatContainer) || /*#__PURE__*/_react2.default.createElement(_WebChatContainerStateful.default, props.webChatContainerProps)), !((_props$controlProps14 = props.controlProps) !== null && _props$controlProps14 !== void 0 && _props$controlProps14.hideConfirmationPane) && (0, _componentController.shouldShowConfirmationPane)(state) && ((0, _omnichannelChatComponents.decodeComponentString)((_props$componentOverr8 = props.componentOverrides) === null || _props$componentOverr8 === void 0 ? void 0 : _props$componentOverr8.confirmationPane) || /*#__PURE__*/_react2.default.createElement(_ConfirmationPaneStateful.default, _extends({}, confirmationPaneProps, {
419
+ }, props.callingContainerProps)), !((_props$controlProps13 = props.controlProps) !== null && _props$controlProps13 !== void 0 && _props$controlProps13.hideWebChatContainer) && (0, _componentController.shouldShowWebChatContainer)(state) && ((0, _omnichannelChatComponents.decodeComponentString)((_props$componentOverr8 = props.componentOverrides) === null || _props$componentOverr8 === void 0 ? void 0 : _props$componentOverr8.webChatContainer) || /*#__PURE__*/_react2.default.createElement(_WebChatContainerStateful.default, props.webChatContainerProps)), !((_props$controlProps14 = props.controlProps) !== null && _props$controlProps14 !== void 0 && _props$controlProps14.hideConfirmationPane) && (0, _componentController.shouldShowConfirmationPane)(state) && ((0, _omnichannelChatComponents.decodeComponentString)((_props$componentOverr9 = props.componentOverrides) === null || _props$componentOverr9 === void 0 ? void 0 : _props$componentOverr9.confirmationPane) || /*#__PURE__*/_react2.default.createElement(_ConfirmationPaneStateful.default, _extends({}, confirmationPaneProps, {
318
420
  setPostChatContext: setPostChatContextRelay,
319
- endChat: endChatRelay
320
- }))), !((_props$controlProps15 = props.controlProps) !== null && _props$controlProps15 !== void 0 && _props$controlProps15.hidePostChatLoadingPane) && (0, _componentController.shouldShowPostChatLoadingPane)(state) && ((0, _omnichannelChatComponents.decodeComponentString)((_props$componentOverr9 = props.componentOverrides) === null || _props$componentOverr9 === void 0 ? void 0 : _props$componentOverr9.postChatLoadingPane) || /*#__PURE__*/_react2.default.createElement(_PostChatLoadingPaneStateful.default, props.postChatLoadingPaneProps)), (0, _componentController.shouldShowPostChatSurveyPane)(state) && ((0, _omnichannelChatComponents.decodeComponentString)((_props$componentOverr10 = props.componentOverrides) === null || _props$componentOverr10 === void 0 ? void 0 : _props$componentOverr10.postChatSurveyPane) || /*#__PURE__*/_react2.default.createElement(_PostChatSurveyPaneStateful.default, _extends({}, props.postChatSurveyPaneProps, props.chatSDK))), (0, _createFooter.createFooter)(props, state), (0, _componentController.shouldShowEmailTranscriptPane)(state) && ((0, _omnichannelChatComponents.decodeComponentString)((_props$componentOverr11 = props.componentOverrides) === null || _props$componentOverr11 === void 0 ? void 0 : _props$componentOverr11.emailTranscriptPane) || /*#__PURE__*/_react2.default.createElement(_EmailTranscriptPaneStateful.default, props.emailTranscriptPane))));
421
+ prepareEndChat: prepareEndChatRelay
422
+ }))), !((_props$controlProps15 = props.controlProps) !== null && _props$controlProps15 !== void 0 && _props$controlProps15.hidePostChatLoadingPane) && (0, _componentController.shouldShowPostChatLoadingPane)(state) && ((0, _omnichannelChatComponents.decodeComponentString)((_props$componentOverr10 = props.componentOverrides) === null || _props$componentOverr10 === void 0 ? void 0 : _props$componentOverr10.postChatLoadingPane) || /*#__PURE__*/_react2.default.createElement(_PostChatLoadingPaneStateful.default, props.postChatLoadingPaneProps)), (0, _componentController.shouldShowPostChatSurveyPane)(state) && ((0, _omnichannelChatComponents.decodeComponentString)((_props$componentOverr11 = props.componentOverrides) === null || _props$componentOverr11 === void 0 ? void 0 : _props$componentOverr11.postChatSurveyPane) || /*#__PURE__*/_react2.default.createElement(_PostChatSurveyPaneStateful.default, _extends({}, props.postChatSurveyPaneProps, props.chatSDK))), (0, _createFooter.createFooter)(props, state), (0, _componentController.shouldShowEmailTranscriptPane)(state) && ((0, _omnichannelChatComponents.decodeComponentString)((_props$componentOverr12 = props.componentOverrides) === null || _props$componentOverr12 === void 0 ? void 0 : _props$componentOverr12.emailTranscriptPane) || /*#__PURE__*/_react2.default.createElement(_EmailTranscriptPaneStateful.default, props.emailTranscriptPane))));
321
423
  };
322
424
 
323
425
  exports.LiveChatWidgetStateful = LiveChatWidgetStateful;
@@ -46,7 +46,7 @@ const LoadingPaneStateful = props => {
46
46
  firstElement[0].focus();
47
47
  }
48
48
 
49
- _TelemetryHelper.TelemetryHelper.logActionEvent(_TelemetryConstants.LogLevel.INFO, {
49
+ _TelemetryHelper.TelemetryHelper.logLoadingEvent(_TelemetryConstants.LogLevel.INFO, {
50
50
  Event: _TelemetryConstants.TelemetryEvent.LoadingPaneLoaded,
51
51
  Description: "Loading pane loaded."
52
52
  });