@microsoft/omnichannel-chat-widget 0.1.0-main.07f52ee → 0.1.0-main.0d584e6

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 (219) hide show
  1. package/README.md +35 -11
  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 +54 -6
  5. package/lib/cjs/common/storage/default/defaultCacheManager.js +34 -0
  6. package/lib/cjs/common/storage/default/defaultClientDataStoreProvider.js +114 -0
  7. package/lib/cjs/common/storage/default/defaultInMemoryDataStore.js +86 -0
  8. package/lib/cjs/common/telemetry/TelemetryConstants.js +73 -4
  9. package/lib/cjs/common/telemetry/TelemetryHelper.js +13 -0
  10. package/lib/cjs/common/telemetry/TelemetryManager.js +17 -6
  11. package/lib/cjs/common/telemetry/defaultConfigs/defaultAriaConfig.js +1 -1
  12. package/lib/cjs/common/telemetry/defaultConfigs/defaultTelemetryConfiguration.js +4 -1
  13. package/lib/cjs/common/telemetry/loggers/ariaTelemetryLogger.js +54 -21
  14. package/lib/cjs/common/telemetry/loggers/consoleLogger.js +6 -5
  15. package/lib/cjs/common/utils.js +89 -2
  16. package/lib/cjs/components/callingcontainerstateful/CallingContainerStateful.js +14 -0
  17. package/lib/cjs/components/chatbuttonstateful/ChatButtonStateful.js +20 -4
  18. package/lib/cjs/components/confirmationpanestateful/ConfirmationPaneStateful.js +10 -44
  19. package/lib/cjs/components/emailtranscriptpanestateful/EmailTranscriptPaneStateful.js +4 -4
  20. package/lib/cjs/components/footerstateful/FooterStateful.js +9 -18
  21. package/lib/cjs/components/footerstateful/downloadtranscriptstateful/DownloadTranscriptStateful.js +11 -2
  22. package/lib/cjs/components/headerstateful/HeaderStateful.js +23 -13
  23. package/lib/cjs/components/livechatwidget/common/ActivityStreamHandler.js +44 -0
  24. package/lib/cjs/components/livechatwidget/common/ActivitySubscriber/DefaultActivitySubscriber.js +23 -0
  25. package/lib/cjs/{assets/assets.d.js → components/livechatwidget/common/ActivitySubscriber/IActivitySubscriber.js} +0 -0
  26. package/lib/cjs/components/livechatwidget/common/ActivitySubscriber/PauseActivitySubscriber.js +39 -0
  27. package/lib/cjs/components/livechatwidget/common/ChatAdapterShim.js +70 -0
  28. package/lib/cjs/components/livechatwidget/common/Deferred.js +42 -0
  29. package/lib/cjs/components/livechatwidget/common/authHelper.js +65 -0
  30. package/lib/cjs/components/livechatwidget/common/createAdapter.js +13 -1
  31. package/lib/cjs/components/livechatwidget/common/createFooter.js +7 -16
  32. package/lib/cjs/components/livechatwidget/common/createInternetConnectionChangeHandler.js +12 -0
  33. package/lib/cjs/components/livechatwidget/common/createMarkdown.js +32 -32
  34. package/lib/cjs/components/livechatwidget/common/defaultProps/dummyDefaultProps.js +45 -26
  35. package/lib/cjs/components/livechatwidget/common/endChat.js +141 -50
  36. package/lib/cjs/components/livechatwidget/common/initCallingSdk.js +1 -1
  37. package/lib/cjs/components/livechatwidget/common/initWebChatComposer.js +51 -9
  38. package/lib/cjs/components/livechatwidget/common/reconnectChatHelper.js +144 -39
  39. package/lib/cjs/components/livechatwidget/common/registerTelemetryLoggers.js +6 -17
  40. package/lib/cjs/components/livechatwidget/common/setPostChatContextAndLoadSurvey.js +6 -9
  41. package/lib/cjs/components/livechatwidget/common/shareObservable.js +45 -0
  42. package/lib/cjs/components/livechatwidget/common/startChat.js +171 -51
  43. package/lib/cjs/components/livechatwidget/common/startProactiveChat.js +3 -3
  44. package/lib/cjs/components/livechatwidget/livechatwidgetstateful/LiveChatWidgetStateful.js +330 -80
  45. package/lib/cjs/components/postchatloadingpanestateful/PostChatLoadingPaneStateful.js +8 -0
  46. package/lib/cjs/components/prechatsurveypanestateful/PreChatSurveyPaneStateful.js +5 -10
  47. package/lib/cjs/components/proactivechatpanestateful/ProactiveChatPaneStateful.js +26 -4
  48. package/lib/cjs/components/proactivechatpanestateful/interfaces/IProactiveChatNotificationConfig.js +1 -0
  49. package/lib/cjs/components/webchatcontainerstateful/WebChatContainerStateful.js +96 -2
  50. package/lib/cjs/components/webchatcontainerstateful/common/defaultProps/defaultWebChatContainerStatefulProps.js +4 -1
  51. package/lib/cjs/components/webchatcontainerstateful/common/defaultStyles/defaultAdaptiveCardStyles.js +11 -0
  52. package/lib/cjs/components/webchatcontainerstateful/common/mockchatsdk.js +6 -0
  53. package/lib/cjs/components/webchatcontainerstateful/common/utils/FileAttachmentIconManager.js +51 -73
  54. package/lib/cjs/components/webchatcontainerstateful/interfaces/IAdaptiveCardStyles.js +1 -0
  55. package/lib/cjs/components/webchatcontainerstateful/interfaces/IBotMagicCodeConfig.js +1 -0
  56. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/BotMagicCodeStore.js +14 -0
  57. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityMiddleware.js +25 -48
  58. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityStatusMiddleware.js +2 -1
  59. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachmentMiddleware.js +3 -1
  60. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/cardActionMiddleware.js +52 -0
  61. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/cardActionMiddleware.spec.js +98 -0
  62. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultReceivedMessageAnchorStyles.js +10 -0
  63. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/messageTimestampMiddleware.js +117 -0
  64. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/conversationEndMiddleware.js +6 -6
  65. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/webchattelemetry/WebChatLogger.js +45 -0
  66. package/lib/cjs/contexts/common/ConversationState.js +4 -2
  67. package/lib/cjs/contexts/common/LiveChatWidgetActionType.js +11 -8
  68. package/lib/cjs/contexts/common/LiveChatWidgetContextInitialState.js +18 -5
  69. package/lib/cjs/contexts/createReducer.js +26 -12
  70. package/lib/cjs/controller/componentController.js +5 -5
  71. package/lib/cjs/plugins/newMessageEventHandler.js +99 -0
  72. package/lib/esm/assets/Audios.js +1 -0
  73. package/lib/esm/assets/Icons.js +11 -0
  74. package/lib/esm/common/Constants.js +50 -5
  75. package/lib/esm/common/storage/default/defaultCacheManager.js +19 -0
  76. package/lib/esm/common/storage/default/defaultClientDataStoreProvider.js +102 -0
  77. package/lib/esm/common/storage/default/defaultInMemoryDataStore.js +71 -0
  78. package/lib/esm/common/telemetry/TelemetryConstants.js +69 -3
  79. package/lib/esm/common/telemetry/TelemetryHelper.js +13 -1
  80. package/lib/esm/common/telemetry/TelemetryManager.js +15 -6
  81. package/lib/esm/common/telemetry/defaultConfigs/defaultAriaConfig.js +1 -1
  82. package/lib/esm/common/telemetry/defaultConfigs/defaultTelemetryConfiguration.js +4 -1
  83. package/lib/esm/common/telemetry/loggers/ariaTelemetryLogger.js +55 -17
  84. package/lib/esm/common/telemetry/loggers/consoleLogger.js +6 -5
  85. package/lib/esm/common/utils.js +64 -1
  86. package/lib/esm/components/callingcontainerstateful/CallingContainerStateful.js +14 -0
  87. package/lib/esm/components/chatbuttonstateful/ChatButtonStateful.js +22 -7
  88. package/lib/esm/components/confirmationpanestateful/ConfirmationPaneStateful.js +10 -40
  89. package/lib/esm/components/emailtranscriptpanestateful/EmailTranscriptPaneStateful.js +4 -4
  90. package/lib/esm/components/footerstateful/FooterStateful.js +9 -18
  91. package/lib/esm/components/footerstateful/downloadtranscriptstateful/DownloadTranscriptStateful.js +9 -3
  92. package/lib/esm/components/headerstateful/HeaderStateful.js +24 -14
  93. package/lib/esm/components/livechatwidget/common/ActivityStreamHandler.js +34 -0
  94. package/lib/esm/components/livechatwidget/common/ActivitySubscriber/DefaultActivitySubscriber.js +14 -0
  95. package/lib/esm/components/livechatwidget/common/ActivitySubscriber/IActivitySubscriber.js +1 -0
  96. package/lib/esm/components/livechatwidget/common/ActivitySubscriber/PauseActivitySubscriber.js +29 -0
  97. package/lib/esm/components/livechatwidget/common/ChatAdapterShim.js +59 -0
  98. package/lib/esm/components/livechatwidget/common/Deferred.js +33 -0
  99. package/lib/esm/components/livechatwidget/common/authHelper.js +50 -0
  100. package/lib/esm/components/livechatwidget/common/createAdapter.js +12 -2
  101. package/lib/esm/components/livechatwidget/common/createFooter.js +4 -15
  102. package/lib/esm/components/livechatwidget/common/createInternetConnectionChangeHandler.js +8 -0
  103. package/lib/esm/components/livechatwidget/common/createMarkdown.js +32 -31
  104. package/lib/esm/components/livechatwidget/common/defaultProps/dummyDefaultProps.js +43 -27
  105. package/lib/esm/components/livechatwidget/common/endChat.js +139 -50
  106. package/lib/esm/components/livechatwidget/common/initCallingSdk.js +1 -1
  107. package/lib/esm/components/livechatwidget/common/initWebChatComposer.js +46 -11
  108. package/lib/esm/components/livechatwidget/common/reconnectChatHelper.js +134 -41
  109. package/lib/esm/components/livechatwidget/common/registerTelemetryLoggers.js +5 -14
  110. package/lib/esm/components/livechatwidget/common/setPostChatContextAndLoadSurvey.js +6 -9
  111. package/lib/esm/components/livechatwidget/common/shareObservable.js +38 -0
  112. package/lib/esm/components/livechatwidget/common/startChat.js +165 -54
  113. package/lib/esm/components/livechatwidget/common/startProactiveChat.js +5 -5
  114. package/lib/esm/components/livechatwidget/livechatwidgetstateful/LiveChatWidgetStateful.js +316 -84
  115. package/lib/esm/components/postchatloadingpanestateful/PostChatLoadingPaneStateful.js +6 -0
  116. package/lib/esm/components/prechatsurveypanestateful/PreChatSurveyPaneStateful.js +7 -11
  117. package/lib/esm/components/proactivechatpanestateful/ProactiveChatPaneStateful.js +25 -5
  118. package/lib/esm/components/proactivechatpanestateful/interfaces/IProactiveChatNotificationConfig.js +1 -0
  119. package/lib/esm/components/webchatcontainerstateful/WebChatContainerStateful.js +86 -2
  120. package/lib/esm/components/webchatcontainerstateful/common/defaultProps/defaultWebChatContainerStatefulProps.js +3 -1
  121. package/lib/esm/components/webchatcontainerstateful/common/defaultStyles/defaultAdaptiveCardStyles.js +4 -0
  122. package/lib/esm/components/webchatcontainerstateful/common/mockchatsdk.js +6 -0
  123. package/lib/esm/components/webchatcontainerstateful/common/utils/FileAttachmentIconManager.js +2 -12
  124. package/lib/esm/components/webchatcontainerstateful/interfaces/IAdaptiveCardStyles.js +1 -0
  125. package/lib/esm/components/webchatcontainerstateful/interfaces/IBotMagicCodeConfig.js +1 -0
  126. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/BotMagicCodeStore.js +5 -0
  127. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityMiddleware.js +23 -46
  128. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityStatusMiddleware.js +2 -1
  129. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachmentMiddleware.js +2 -1
  130. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/cardActionMiddleware.js +41 -0
  131. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/cardActionMiddleware.spec.js +94 -0
  132. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultReceivedMessageAnchorStyles.js +3 -0
  133. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/messageTimestampMiddleware.js +107 -0
  134. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/conversationEndMiddleware.js +6 -6
  135. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/webchattelemetry/WebChatLogger.js +32 -0
  136. package/lib/esm/contexts/common/ConversationState.js +4 -2
  137. package/lib/esm/contexts/common/LiveChatWidgetActionType.js +11 -8
  138. package/lib/esm/contexts/common/LiveChatWidgetContextInitialState.js +16 -5
  139. package/lib/esm/contexts/createReducer.js +26 -11
  140. package/lib/esm/controller/componentController.js +5 -5
  141. package/lib/esm/plugins/newMessageEventHandler.js +82 -0
  142. package/lib/types/assets/Audios.d.ts +1 -0
  143. package/lib/types/assets/Icons.d.ts +11 -0
  144. package/lib/types/common/Constants.d.ts +27 -2
  145. package/lib/types/common/interfaces/IContextDataStore.d.ts +2 -2
  146. package/lib/types/common/storage/default/defaultCacheManager.d.ts +4 -0
  147. package/lib/types/common/storage/default/defaultClientDataStoreProvider.d.ts +2 -0
  148. package/lib/types/common/storage/default/defaultInMemoryDataStore.d.ts +6 -0
  149. package/lib/types/common/telemetry/TelemetryConstants.d.ts +48 -2
  150. package/lib/types/common/telemetry/TelemetryHelper.d.ts +2 -0
  151. package/lib/types/common/telemetry/definitions/Payload.d.ts +12 -9
  152. package/lib/types/common/telemetry/interfaces/ITelemetryConfig.d.ts +3 -3
  153. package/lib/types/common/utils.d.ts +8 -1
  154. package/lib/types/components/confirmationpanestateful/interfaces/IConfirmationPaneStatefulParams.d.ts +5 -2
  155. package/lib/types/components/footerstateful/audionotificationstateful/interfaces/IAudioNotificationStatefulParams.d.ts +0 -1
  156. package/lib/types/components/headerstateful/interfaces/IHeaderStatefulParams.d.ts +5 -1
  157. package/lib/types/components/livechatwidget/common/ActivityStreamHandler.d.ts +14 -0
  158. package/lib/types/components/livechatwidget/common/ActivitySubscriber/DefaultActivitySubscriber.d.ts +5 -0
  159. package/lib/types/components/livechatwidget/common/ActivitySubscriber/IActivitySubscriber.d.ts +6 -0
  160. package/lib/types/components/livechatwidget/common/ActivitySubscriber/PauseActivitySubscriber.d.ts +7 -0
  161. package/lib/types/components/livechatwidget/common/ChatAdapterShim.d.ts +7 -0
  162. package/lib/types/components/livechatwidget/common/Deferred.d.ts +9 -0
  163. package/lib/types/components/livechatwidget/common/authHelper.d.ts +5 -0
  164. package/lib/types/components/livechatwidget/common/endChat.d.ts +4 -1
  165. package/lib/types/components/livechatwidget/common/reconnectChatHelper.d.ts +6 -2
  166. package/lib/types/components/livechatwidget/common/shareObservable.d.ts +1 -0
  167. package/lib/types/components/livechatwidget/common/startChat.d.ts +4 -2
  168. package/lib/types/components/livechatwidget/common/startProactiveChat.d.ts +2 -1
  169. package/lib/types/components/livechatwidget/interfaces/ILiveChatWidgetComponentOverrides.d.ts +1 -0
  170. package/lib/types/components/livechatwidget/interfaces/ILiveChatWidgetControlProps.d.ts +1 -0
  171. package/lib/types/components/livechatwidget/interfaces/ILiveChatWidgetProps.d.ts +2 -1
  172. package/lib/types/components/proactivechatpanestateful/interfaces/IProactiveChatNotificationConfig.d.ts +3 -0
  173. package/lib/types/components/reconnectchatpanestateful/interfaces/IReconnectChatPaneStatefulProps.d.ts +1 -1
  174. package/lib/types/components/webchatcontainerstateful/common/defaultStyles/defaultAdaptiveCardStyles.d.ts +2 -0
  175. package/lib/types/components/webchatcontainerstateful/common/mockchatsdk.d.ts +2 -0
  176. package/lib/types/components/webchatcontainerstateful/common/utils/FileAttachmentIconManager.d.ts +1 -1
  177. package/lib/types/components/webchatcontainerstateful/interfaces/IAdaptiveCardStyles.d.ts +4 -0
  178. package/lib/types/components/webchatcontainerstateful/interfaces/IBotMagicCodeConfig.d.ts +4 -0
  179. package/lib/types/components/webchatcontainerstateful/interfaces/IRenderingMiddlewareProps.d.ts +2 -1
  180. package/lib/types/components/webchatcontainerstateful/interfaces/IWebChatContainerStatefulProps.d.ts +4 -0
  181. package/lib/types/components/webchatcontainerstateful/webchatcontroller/BotMagicCodeStore.d.ts +3 -0
  182. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityMiddleware.d.ts +0 -1
  183. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityStatusMiddleware.d.ts +1 -1
  184. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/cardActionMiddleware.d.ts +2 -0
  185. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/cardActionMiddleware.spec.d.ts +1 -0
  186. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultReceivedMessageAnchorStyles.d.ts +2 -0
  187. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/messageTimestampMiddleware.d.ts +5 -0
  188. package/lib/types/components/webchatcontainerstateful/webchatcontroller/webchattelemetry/WebChatLogger.d.ts +1 -0
  189. package/lib/types/contexts/common/ConversationState.d.ts +4 -2
  190. package/lib/types/contexts/common/ILiveChatWidgetContext.d.ts +4 -2
  191. package/lib/types/contexts/common/LiveChatWidgetActionType.d.ts +12 -9
  192. package/lib/types/contexts/common/LiveChatWidgetContextInitialState.d.ts +1 -2
  193. package/lib/types/plugins/newMessageEventHandler.d.ts +2 -0
  194. package/package.json +11 -12
  195. package/lib/cjs/assets/audios/newMessageNotification.mp3 +0 -0
  196. package/lib/cjs/assets/icons/archiveIcon.svg +0 -3
  197. package/lib/cjs/assets/icons/audioIcon.svg +0 -6
  198. package/lib/cjs/assets/icons/blankIcon.svg +0 -6
  199. package/lib/cjs/assets/icons/excelIcon.svg +0 -6
  200. package/lib/cjs/assets/icons/imageIcon.svg +0 -6
  201. package/lib/cjs/assets/icons/oneNoteIcon.svg +0 -6
  202. package/lib/cjs/assets/icons/pdfIcon.svg +0 -6
  203. package/lib/cjs/assets/icons/powerpointIcon.svg +0 -6
  204. package/lib/cjs/assets/icons/videoIcon.svg +0 -6
  205. package/lib/cjs/assets/icons/visioIcon.svg +0 -6
  206. package/lib/cjs/assets/icons/wordIcon.svg +0 -6
  207. package/lib/esm/assets/assets.d.js +0 -0
  208. package/lib/esm/assets/audios/newMessageNotification.mp3 +0 -0
  209. package/lib/esm/assets/icons/archiveIcon.svg +0 -3
  210. package/lib/esm/assets/icons/audioIcon.svg +0 -6
  211. package/lib/esm/assets/icons/blankIcon.svg +0 -6
  212. package/lib/esm/assets/icons/excelIcon.svg +0 -6
  213. package/lib/esm/assets/icons/imageIcon.svg +0 -6
  214. package/lib/esm/assets/icons/oneNoteIcon.svg +0 -6
  215. package/lib/esm/assets/icons/pdfIcon.svg +0 -6
  216. package/lib/esm/assets/icons/powerpointIcon.svg +0 -6
  217. package/lib/esm/assets/icons/videoIcon.svg +0 -6
  218. package/lib/esm/assets/icons/visioIcon.svg +0 -6
  219. package/lib/esm/assets/icons/wordIcon.svg +0 -6
@@ -1,17 +1,19 @@
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); }
1
+ function _extends() { _extends = Object.assign ? Object.assign.bind() : 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 { BroadcastService, decodeComponentString } from "@microsoft/omnichannel-chat-components";
3
+ import { BroadcastEvent, LogLevel, TelemetryEvent } from "../../../common/telemetry/TelemetryConstants";
4
+ import { BroadcastService, decodeComponentString, BroadcastServiceInitialize } 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";
8
- import { initStartChat, prepareStartChat } from "../common/startChat";
7
+ import { createTimer, getBroadcastChannelName, getLocaleDirection, getStateFromCache, getWidgetCacheId, getWidgetEndChatEventName, isNullOrEmptyString, isUndefinedOrEmpty } from "../../../common/utils";
8
+ import { getReconnectIdForAuthenticatedChat, handleUnauthenticatedReconnectChat, startUnauthenticatedReconnectChat } from "../common/reconnectChatHelper";
9
+ import { initStartChat, prepareStartChat, setPreChatAndInitiateChat } 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";
11
12
  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,11 @@ 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";
46
+ import { ActivityStreamHandler } from "../common/ActivityStreamHandler";
47
+ import { registerBroadcastServiceForLocalStorage } from "../../../common/storage/default/defaultCacheManager";
48
+ import { defaultClientDataStoreProvider } from "../../../common/storage/default/defaultClientDataStoreProvider";
45
49
  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;
50
+ var _props$webChatContain, _props$styleProps, _chatSDK$omnichannelC, _props$controlProps, _props$controlProps2, _props$webChatContain3, _props$webChatContain4, _props$styleProps2, _props$controlProps14, _props$controlProps15, _props$componentOverr, _props$controlProps16, _props$componentOverr2, _props$controlProps17, _props$componentOverr3, _props$controlProps18, _props$componentOverr4, _props$controlProps19, _props$componentOverr5, _props$controlProps20, _props$componentOverr6, _props$controlProps21, _props$componentOverr7, _props$controlProps22, _props$controlProps23, _props$componentOverr8, _props$controlProps24, _props$componentOverr9, _props$controlProps25, _props$componentOverr10, _props$componentOverr11, _props$componentOverr12;
47
51
 
48
52
  const [state, dispatch] = useChatContextStore(); // eslint-disable-next-line @typescript-eslint/no-explicit-any
49
53
 
@@ -52,7 +56,8 @@ export const LiveChatWidgetStateful = props => {
52
56
  ...((_props$webChatContain = props.webChatContainerProps) === null || _props$webChatContain === void 0 ? void 0 : _props$webChatContain.webChatStyles)
53
57
  }); // eslint-disable-next-line @typescript-eslint/no-explicit-any
54
58
 
55
- const chatSDK = useChatSDKStore();
59
+ const chatSDK = useChatSDKStore(); // eslint-disable-next-line @typescript-eslint/no-explicit-any
60
+
56
61
  const [voiceVideoCallingSDK, setVoiceVideoCallingSDK] = useState(undefined);
57
62
  const {
58
63
  Composer
@@ -62,62 +67,141 @@ export const LiveChatWidgetStateful = props => {
62
67
  const generalStyles = {
63
68
  root: Object.assign({}, getGeneralStylesForButton(state), (_props$styleProps = props.styleProps) === null || _props$styleProps === void 0 ? void 0 : _props$styleProps.generalStyles)
64
69
  };
70
+ const broadcastServiceChannelName = getBroadcastChannelName(chatSDK === null || chatSDK === void 0 ? void 0 : (_chatSDK$omnichannelC = chatSDK.omnichannelConfig) === null || _chatSDK$omnichannelC === void 0 ? void 0 : _chatSDK$omnichannelC.widgetId, ((_props$controlProps = props.controlProps) === null || _props$controlProps === void 0 ? void 0 : _props$controlProps.widgetInstanceId) ?? "");
71
+ BroadcastServiceInitialize(broadcastServiceChannelName);
65
72
  TelemetryTimers.LcwLoadToChatButtonTimer = createTimer();
66
- const widgetElementId = ((_props$controlProps = props.controlProps) === null || _props$controlProps === void 0 ? void 0 : _props$controlProps.id) || "oc-lcw";
73
+ const widgetElementId = ((_props$controlProps2 = props.controlProps) === null || _props$controlProps2 === void 0 ? void 0 : _props$controlProps2.id) || "oc-lcw";
67
74
  const currentMessageCountRef = useRef(0);
75
+ let widgetStateEventName = "";
76
+
77
+ const initiateEndChatOnBrowserUnload = () => {
78
+ var _DataStoreManager$cli;
79
+
80
+ TelemetryHelper.logActionEvent(LogLevel.INFO, {
81
+ Event: TelemetryEvent.BrowserUnloadEventStarted,
82
+ Description: "Browser unload event received."
83
+ });
84
+ endChat(props, chatSDK, setAdapter, setWebChatStyles, dispatch, adapter, false, false, false); // Clean local storage
85
+
86
+ (_DataStoreManager$cli = DataStoreManager.clientDataStore) === null || _DataStoreManager$cli === void 0 ? void 0 : _DataStoreManager$cli.removeData(widgetStateEventName, "localStorage"); //Dispose calling instance
87
+
88
+ if (voiceVideoCallingSDK) {
89
+ voiceVideoCallingSDK === null || voiceVideoCallingSDK === void 0 ? void 0 : voiceVideoCallingSDK.close();
90
+ } //Message for clearing window[popouTab]
91
+
92
+
93
+ BroadcastService.postMessage({
94
+ eventName: BroadcastEvent.ClosePopoutWindow
95
+ });
96
+ };
97
+
68
98
  useEffect(() => {
69
- var _props$controlProps2, _props$controlProps3, _props$reconnectChatP, _props$controlProps4, _props$chatConfig, _props$chatConfig$Cha, _state$domainStates;
99
+ var _props$controlProps4, _props$controlProps5, _props$controlProps6, _props$controlProps8, _props$chatConfig, _props$chatConfig$Cha, _props$controlProps9, _props$reconnectChatP, _props$chatConfig2, _props$chatConfig2$Li, _props$reconnectChatP4, _state$domainStates;
100
+
101
+ // Add default localStorage support for widget
102
+ if (props.contextDataStore === undefined) {
103
+ var _chatSDK$omnichannelC2, _chatSDK$omnichannelC3, _props$controlProps3;
104
+
105
+ registerBroadcastServiceForLocalStorage(chatSDK === null || chatSDK === void 0 ? void 0 : (_chatSDK$omnichannelC2 = chatSDK.omnichannelConfig) === null || _chatSDK$omnichannelC2 === void 0 ? void 0 : _chatSDK$omnichannelC2.orgId, chatSDK === null || chatSDK === void 0 ? void 0 : (_chatSDK$omnichannelC3 = chatSDK.omnichannelConfig) === null || _chatSDK$omnichannelC3 === void 0 ? void 0 : _chatSDK$omnichannelC3.widgetId, (props === null || props === void 0 ? void 0 : (_props$controlProps3 = props.controlProps) === null || _props$controlProps3 === void 0 ? void 0 : _props$controlProps3.widgetInstanceId) ?? "");
106
+ DataStoreManager.clientDataStore = defaultClientDataStoreProvider();
107
+ } else {
108
+ DataStoreManager.clientDataStore = props.contextDataStore;
109
+ }
70
110
 
71
111
  registerTelemetryLoggers(props, dispatch);
72
112
  createInternetConnectionChangeHandler();
73
- DataStoreManager.clientDataStore = props.contextDataStore ?? undefined;
74
113
  dispatch({
75
114
  type: LiveChatWidgetActionType.SET_WIDGET_ELEMENT_ID,
76
115
  payload: widgetElementId
77
116
  });
78
117
  dispatch({
79
118
  type: LiveChatWidgetActionType.SET_SKIP_CHAT_BUTTON_RENDERING,
80
- payload: ((_props$controlProps2 = props.controlProps) === null || _props$controlProps2 === void 0 ? void 0 : _props$controlProps2.skipChatButtonRendering) || false
119
+ payload: ((_props$controlProps4 = props.controlProps) === null || _props$controlProps4 === void 0 ? void 0 : _props$controlProps4.skipChatButtonRendering) || false
120
+ });
121
+ dispatch({
122
+ type: LiveChatWidgetActionType.SET_E2VV_ENABLED,
123
+ payload: false
81
124
  });
125
+
126
+ if ((_props$controlProps5 = props.controlProps) !== null && _props$controlProps5 !== void 0 && _props$controlProps5.widgetInstanceId && !isNullOrEmptyString((_props$controlProps6 = props.controlProps) === null || _props$controlProps6 === void 0 ? void 0 : _props$controlProps6.widgetInstanceId)) {
127
+ var _props$controlProps7;
128
+
129
+ dispatch({
130
+ type: LiveChatWidgetActionType.SET_WIDGET_INSTANCE_ID,
131
+ payload: (_props$controlProps7 = props.controlProps) === null || _props$controlProps7 === void 0 ? void 0 : _props$controlProps7.widgetInstanceId
132
+ });
133
+ }
134
+
82
135
  initCallingSdk(chatSDK, setVoiceVideoCallingSDK).then(sdkCreated => {
83
136
  sdkCreated && dispatch({
84
137
  type: LiveChatWidgetActionType.SET_E2VV_ENABLED,
85
138
  payload: true
86
139
  });
87
- });
88
-
89
- 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
- var _props$reconnectChatP2;
91
-
92
- handleUnauthenticatedReconnectChat(dispatch, (_props$reconnectChatP2 = props.reconnectChatPaneProps) === null || _props$reconnectChatP2 === void 0 ? void 0 : _props$reconnectChatP2.reconnectId, initStartChat);
93
- } // Initialize global dir
140
+ }); // Initialize global dir
94
141
 
95
-
96
- const globalDir = ((_props$controlProps4 = props.controlProps) === null || _props$controlProps4 === void 0 ? void 0 : _props$controlProps4.dir) ?? getLocaleDirection((_props$chatConfig = props.chatConfig) === null || _props$chatConfig === void 0 ? void 0 : (_props$chatConfig$Cha = _props$chatConfig.ChatWidgetLanguage) === null || _props$chatConfig$Cha === void 0 ? void 0 : _props$chatConfig$Cha.msdyn_localeid);
142
+ const globalDir = ((_props$controlProps8 = props.controlProps) === null || _props$controlProps8 === void 0 ? void 0 : _props$controlProps8.dir) ?? getLocaleDirection((_props$chatConfig = props.chatConfig) === null || _props$chatConfig === void 0 ? void 0 : (_props$chatConfig$Cha = _props$chatConfig.ChatWidgetLanguage) === null || _props$chatConfig$Cha === void 0 ? void 0 : _props$chatConfig$Cha.msdyn_localeid);
97
143
  dispatch({
98
144
  type: LiveChatWidgetActionType.SET_GLOBAL_DIR,
99
145
  payload: globalDir
100
146
  });
101
147
 
102
- if ((_state$domainStates = state.domainStates) !== null && _state$domainStates !== void 0 && _state$domainStates.chatToken) {
148
+ if (!((_props$controlProps9 = props.controlProps) !== null && _props$controlProps9 !== void 0 && _props$controlProps9.skipChatButtonRendering) && (_props$reconnectChatP = props.reconnectChatPaneProps) !== null && _props$reconnectChatP !== void 0 && _props$reconnectChatP.reconnectId) {
149
+ var _props$reconnectChatP2, _props$reconnectChatP3;
150
+
151
+ startUnauthenticatedReconnectChat(chatSDK, props.chatConfig, props.getAuthToken, dispatch, setAdapter, (_props$reconnectChatP2 = props.reconnectChatPaneProps) === null || _props$reconnectChatP2 === void 0 ? void 0 : _props$reconnectChatP2.isReconnectEnabled, (_props$reconnectChatP3 = props.reconnectChatPaneProps) === null || _props$reconnectChatP3 === void 0 ? void 0 : _props$reconnectChatP3.reconnectId, initStartChat);
152
+ return;
153
+ } // Checks if reconnectId is present for auth chat. If it is present, then it shows reconnect chat pane,
154
+ // where customer can choose to continue previous conversation or start new conversation
155
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
156
+
157
+
158
+ const isAuthenticationSettingsEnabled = (_props$chatConfig2 = props.chatConfig) !== null && _props$chatConfig2 !== void 0 && (_props$chatConfig2$Li = _props$chatConfig2.LiveChatConfigAuthSettings) !== null && _props$chatConfig2$Li !== void 0 && _props$chatConfig2$Li.msdyn_javascriptclientfunction ? true : false;
159
+
160
+ if (!state.appStates.skipChatButtonRendering && state.appStates.conversationState === ConversationState.Active && isAuthenticationSettingsEnabled === true && (_props$reconnectChatP4 = props.reconnectChatPaneProps) !== null && _props$reconnectChatP4 !== void 0 && _props$reconnectChatP4.isReconnectEnabled) {
161
+ getReconnectIdForAuthenticatedChat(props, chatSDK).then(authReconnectId => {
162
+ if (authReconnectId && !state.appStates.reconnectId) {
163
+ dispatch({
164
+ type: LiveChatWidgetActionType.SET_RECONNECT_ID,
165
+ payload: authReconnectId
166
+ });
167
+ dispatch({
168
+ type: LiveChatWidgetActionType.SET_CONVERSATION_STATE,
169
+ payload: ConversationState.ReconnectChat
170
+ });
171
+ }
172
+ });
173
+ return;
174
+ }
175
+
176
+ if (!state.appStates.skipChatButtonRendering && !isUndefinedOrEmpty((_state$domainStates = state.domainStates) === null || _state$domainStates === void 0 ? void 0 : _state$domainStates.liveChatContext) && state.appStates.conversationState === ConversationState.Active) {
103
177
  var _state$domainStates2;
104
178
 
105
179
  const optionalParams = {
106
- liveChatContext: {
107
- chatToken: (_state$domainStates2 = state.domainStates) === null || _state$domainStates2 === void 0 ? void 0 : _state$domainStates2.chatToken
108
- }
180
+ liveChatContext: (_state$domainStates2 = state.domainStates) === null || _state$domainStates2 === void 0 ? void 0 : _state$domainStates2.liveChatContext
109
181
  };
110
- initStartChat(chatSDK, dispatch, setAdapter, optionalParams);
111
- }
112
- }, []);
182
+ initStartChat(chatSDK, props.chatConfig, props.getAuthToken, dispatch, setAdapter, optionalParams);
183
+ return;
184
+ } // All other case should show start chat button, skipChatButtonRendering will take care of it own
185
+
186
+
187
+ dispatch({
188
+ type: LiveChatWidgetActionType.SET_CONVERSATION_STATE,
189
+ payload: ConversationState.Closed
190
+ });
191
+ }, []); // useEffect for when skip chat button rendering
192
+
113
193
  useEffect(() => {
114
194
  if (state.appStates.skipChatButtonRendering) {
115
- var _props$reconnectChatP3;
195
+ var _props$reconnectChatP5;
196
+
197
+ BroadcastService.postMessage({
198
+ eventName: BroadcastEvent.ChatInitiated
199
+ });
116
200
 
117
- if ((_props$reconnectChatP3 = props.reconnectChatPaneProps) !== null && _props$reconnectChatP3 !== void 0 && _props$reconnectChatP3.reconnectId && !state.appStates.reconnectId) {
118
- var _props$reconnectChatP4;
201
+ if ((_props$reconnectChatP5 = props.reconnectChatPaneProps) !== null && _props$reconnectChatP5 !== void 0 && _props$reconnectChatP5.reconnectId && !state.appStates.reconnectId) {
202
+ var _props$reconnectChatP6, _props$reconnectChatP7, _props$reconnectChatP8;
119
203
 
120
- handleUnauthenticatedReconnectChat(dispatch, (_props$reconnectChatP4 = props.reconnectChatPaneProps) === null || _props$reconnectChatP4 === void 0 ? void 0 : _props$reconnectChatP4.reconnectId, initStartChat);
204
+ handleUnauthenticatedReconnectChat(chatSDK, props.chatConfig, props.getAuthToken, dispatch, setAdapter, (_props$reconnectChatP6 = props.reconnectChatPaneProps) === null || _props$reconnectChatP6 === void 0 ? void 0 : _props$reconnectChatP6.isReconnectEnabled, (_props$reconnectChatP7 = props.reconnectChatPaneProps) === null || _props$reconnectChatP7 === void 0 ? void 0 : _props$reconnectChatP7.reconnectId, initStartChat, (_props$reconnectChatP8 = props.reconnectChatPaneProps) === null || _props$reconnectChatP8 === void 0 ? void 0 : _props$reconnectChatP8.redirectInSameWindow);
121
205
  } else {
122
206
  getReconnectIdForAuthenticatedChat(props, chatSDK).then(authReconnectId => {
123
207
  if (authReconnectId && !state.appStates.reconnectId) {
@@ -130,56 +214,180 @@ export const LiveChatWidgetStateful = props => {
130
214
  payload: ConversationState.ReconnectChat
131
215
  });
132
216
  } else {
133
- dispatch({
134
- type: LiveChatWidgetActionType.SET_CONVERSATION_STATE,
135
- payload: ConversationState.Loading
136
- });
137
- initStartChat(chatSDK, dispatch, setAdapter);
217
+ var _state$domainStates3;
218
+
219
+ const chatStartedSkippingChatButtonRendering = {
220
+ eventName: BroadcastEvent.StartChatSkippingChatButtonRendering
221
+ };
222
+ BroadcastService.postMessage(chatStartedSkippingChatButtonRendering);
223
+
224
+ if (!isUndefinedOrEmpty((_state$domainStates3 = state.domainStates) === null || _state$domainStates3 === void 0 ? void 0 : _state$domainStates3.liveChatContext) && state.appStates.conversationState === ConversationState.Active) {
225
+ var _state$domainStates4;
226
+
227
+ const optionalParams = {
228
+ liveChatContext: (_state$domainStates4 = state.domainStates) === null || _state$domainStates4 === void 0 ? void 0 : _state$domainStates4.liveChatContext
229
+ };
230
+ initStartChat(chatSDK, props.chatConfig, props.getAuthToken, dispatch, setAdapter, optionalParams);
231
+ } else {
232
+ setPreChatAndInitiateChat(chatSDK, props.chatConfig, props.getAuthToken, dispatch, setAdapter);
233
+ }
138
234
  }
139
235
  });
140
236
  }
141
237
  }
142
- }, [state.appStates.skipChatButtonRendering]);
238
+ }, [state.appStates.skipChatButtonRendering]); // useEffect for when skip chat button rendering
239
+
143
240
  useEffect(() => {
144
- BroadcastService.getMessageByEventName("StartProactiveChat").subscribe(msg => {
145
- if (canStartProactiveChat.current) {
241
+ var _chatSDK$omnichannelC8, _chatSDK$omnichannelC9, _props$controlProps12;
242
+
243
+ // Add the custom context on receiving the SetCustomContext event
244
+ BroadcastService.getMessageByEventName(BroadcastEvent.SetCustomContext).subscribe(msg => {
245
+ TelemetryHelper.logActionEvent(LogLevel.INFO, {
246
+ Event: TelemetryEvent.CustomContextReceived,
247
+ Description: "CustomContext received."
248
+ });
249
+ dispatch({
250
+ type: LiveChatWidgetActionType.SET_CUSTOM_CONTEXT,
251
+ payload: msg === null || msg === void 0 ? void 0 : msg.payload
252
+ });
253
+ });
254
+ BroadcastService.getMessageByEventName(BroadcastEvent.StartProactiveChat).subscribe(msg => {
255
+ TelemetryHelper.logActionEvent(LogLevel.INFO, {
256
+ Event: TelemetryEvent.StartProactiveChatEventReceived,
257
+ Description: "Start proactive chat event received."
258
+ });
259
+
260
+ if (canStartProactiveChat.current === true) {
146
261
  var _msg$payload, _msg$payload2, _msg$payload3;
147
262
 
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);
263
+ 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);
264
+ } else {
265
+ TelemetryHelper.logActionEvent(LogLevel.INFO, {
266
+ Event: TelemetryEvent.ChatAlreadyTriggered,
267
+ Description: "Start proactive chat method called, when chat was already triggered."
268
+ });
149
269
  }
150
- });
151
- window.addEventListener("beforeunload", event => {
152
- disposeTelemetryLoggers();
153
- });
270
+ }); // Start chat from SDK Event
154
271
 
155
- if (state.appStates.conversationEndedByAgent) {
156
- endChat(props, chatSDK, setAdapter, setWebChatStyles, dispatch, adapter);
157
- }
158
- }, []);
159
- useEffect(() => {
160
- canStartProactiveChat.current = state.appStates.conversationState === ConversationState.Closed;
272
+ BroadcastService.getMessageByEventName(BroadcastEvent.StartChat).subscribe(() => {
273
+ var _chatSDK$omnichannelC4, _chatSDK$omnichannelC5, _props$controlProps10;
161
274
 
162
- if (state.appStates.conversationState === ConversationState.Active) {
163
- chatSDK === null || chatSDK === void 0 ? void 0 : chatSDK.onNewMessage(() => {
275
+ TelemetryHelper.logActionEvent(LogLevel.INFO, {
276
+ Event: TelemetryEvent.StartChatEventRecevied,
277
+ Description: "Start chat event received."
278
+ });
279
+ const persistedState = getStateFromCache(chatSDK === null || chatSDK === void 0 ? void 0 : (_chatSDK$omnichannelC4 = chatSDK.omnichannelConfig) === null || _chatSDK$omnichannelC4 === void 0 ? void 0 : _chatSDK$omnichannelC4.orgId, chatSDK === null || chatSDK === void 0 ? void 0 : (_chatSDK$omnichannelC5 = chatSDK.omnichannelConfig) === null || _chatSDK$omnichannelC5 === void 0 ? void 0 : _chatSDK$omnichannelC5.widgetId, (props === null || props === void 0 ? void 0 : (_props$controlProps10 = props.controlProps) === null || _props$controlProps10 === void 0 ? void 0 : _props$controlProps10.widgetInstanceId) ?? ""); // Chat not found in cache
280
+
281
+ if (persistedState === undefined) {
282
+ BroadcastService.postMessage({
283
+ eventName: BroadcastEvent.ChatInitiated
284
+ });
285
+ prepareStartChat(props, chatSDK, state, dispatch, setAdapter);
286
+ return;
287
+ } // Chat exist in cache
288
+
289
+
290
+ if (persistedState) {
291
+ var _persistedState$domai, _persistedState$domai2, _persistedState$domai3, _persistedState$domai4;
292
+
293
+ // Only initiate new chat if widget state in cache in one of the followings
294
+ if (persistedState.appStates.conversationState === ConversationState.Closed || persistedState.appStates.conversationState === ConversationState.InActive || persistedState.appStates.conversationState === ConversationState.Postchat) {
295
+ BroadcastService.postMessage({
296
+ eventName: BroadcastEvent.ChatInitiated
297
+ });
298
+ prepareStartChat(props, chatSDK, state, dispatch, setAdapter);
299
+ return;
300
+ } // If minimized, maximize the chat
301
+
302
+
303
+ dispatch({
304
+ type: LiveChatWidgetActionType.SET_MINIMIZED,
305
+ payload: false
306
+ });
164
307
  BroadcastService.postMessage({
165
- eventName: "NewMessageNotification"
308
+ eventName: BroadcastEvent.MaximizeChat,
309
+ payload: {
310
+ height: persistedState === null || persistedState === void 0 ? void 0 : (_persistedState$domai = persistedState.domainStates) === null || _persistedState$domai === void 0 ? void 0 : (_persistedState$domai2 = _persistedState$domai.widgetSize) === null || _persistedState$domai2 === void 0 ? void 0 : _persistedState$domai2.height,
311
+ width: persistedState === null || persistedState === void 0 ? void 0 : (_persistedState$domai3 = persistedState.domainStates) === null || _persistedState$domai3 === void 0 ? void 0 : (_persistedState$domai4 = _persistedState$domai3.widgetSize) === null || _persistedState$domai4 === void 0 ? void 0 : _persistedState$domai4.width
312
+ }
166
313
  });
314
+ }
315
+ }); // End chat
316
+
317
+ BroadcastService.getMessageByEventName(BroadcastEvent.InitiateEndChat).subscribe(async () => {
318
+ if (state.appStates.skipChatButtonRendering !== true) {
319
+ var _chatSDK$omnichannelC6, _chatSDK$omnichannelC7, _props$controlProps11;
320
+
321
+ // This is to ensure to get latest state from cache in multitab
322
+ const persistedState = getStateFromCache(chatSDK === null || chatSDK === void 0 ? void 0 : (_chatSDK$omnichannelC6 = chatSDK.omnichannelConfig) === null || _chatSDK$omnichannelC6 === void 0 ? void 0 : _chatSDK$omnichannelC6.orgId, chatSDK === null || chatSDK === void 0 ? void 0 : (_chatSDK$omnichannelC7 = chatSDK.omnichannelConfig) === null || _chatSDK$omnichannelC7 === void 0 ? void 0 : _chatSDK$omnichannelC7.widgetId, (props === null || props === void 0 ? void 0 : (_props$controlProps11 = props.controlProps) === null || _props$controlProps11 === void 0 ? void 0 : _props$controlProps11.widgetInstanceId) ?? "");
323
+
324
+ if (persistedState && persistedState.appStates.conversationState === ConversationState.Active) {
325
+ prepareEndChat(props, chatSDK, setAdapter, setWebChatStyles, dispatch, adapter, state);
326
+ } else {
327
+ const skipEndChatSDK = true;
328
+ const skipCloseChat = false;
329
+ endChat(props, chatSDK, setAdapter, setWebChatStyles, dispatch, adapter, skipEndChatSDK, skipCloseChat);
330
+ }
331
+ }
332
+
333
+ BroadcastService.postMessage({
334
+ eventName: BroadcastEvent.CloseChat
167
335
  });
168
- } // Track the message count
336
+ }); // End chat on browser unload
337
+
338
+ BroadcastService.getMessageByEventName(BroadcastEvent.InitiateEndChatOnBrowserUnload).subscribe(() => {
339
+ initiateEndChatOnBrowserUnload();
340
+ }); // Listen to end chat event from other tabs
341
+
342
+ const endChatEventName = getWidgetEndChatEventName(chatSDK === null || chatSDK === void 0 ? void 0 : (_chatSDK$omnichannelC8 = chatSDK.omnichannelConfig) === null || _chatSDK$omnichannelC8 === void 0 ? void 0 : _chatSDK$omnichannelC8.orgId, chatSDK === null || chatSDK === void 0 ? void 0 : (_chatSDK$omnichannelC9 = chatSDK.omnichannelConfig) === null || _chatSDK$omnichannelC9 === void 0 ? void 0 : _chatSDK$omnichannelC9.widgetId, ((_props$controlProps12 = props.controlProps) === null || _props$controlProps12 === void 0 ? void 0 : _props$controlProps12.widgetInstanceId) ?? "");
343
+ BroadcastService.getMessageByEventName(endChatEventName).subscribe(async () => {
344
+ endChat(props, chatSDK, setAdapter, setWebChatStyles, dispatch, adapter, false, false, false);
345
+ return;
346
+ }); // When conversation ended by agent
347
+
348
+ if (state.appStates.conversationEndedByAgent) {
349
+ endChat(props, chatSDK, setAdapter, setWebChatStyles, dispatch, adapter);
350
+ } //Listen to WidgetSize, used for minimize to maximize
169
351
 
170
352
 
353
+ BroadcastService.getMessageByEventName("WidgetSize").subscribe(msg => {
354
+ dispatch({
355
+ type: LiveChatWidgetActionType.SET_WIDGET_SIZE,
356
+ payload: msg === null || msg === void 0 ? void 0 : msg.payload
357
+ });
358
+ });
359
+ return () => {
360
+ disposeTelemetryLoggers();
361
+ };
362
+ }, []);
363
+ useEffect(() => {
364
+ // On new message
171
365
  if (state.appStates.conversationState === ConversationState.Active) {
172
366
  chatSDK === null || chatSDK === void 0 ? void 0 : chatSDK.onNewMessage(() => {
367
+ // Track the message count
173
368
  currentMessageCountRef.current++;
174
369
  dispatch({
175
370
  type: LiveChatWidgetActionType.SET_UNREAD_MESSAGE_COUNT,
176
371
  payload: currentMessageCountRef.current + 1
372
+ }); // New message notification
373
+
374
+ BroadcastService.postMessage({
375
+ eventName: BroadcastEvent.NewMessageNotification
177
376
  });
178
377
  });
179
378
  }
180
- }, [state.appStates.conversationState]); // Reset the UnreadMessageCount when minimized is toggled and broadcast it.
379
+ }, [state.appStates.conversationState]);
380
+ useEffect(() => {
381
+ canStartProactiveChat.current = state.appStates.conversationState === ConversationState.Closed && !state.appStates.proactiveChatStates.proactiveChatInNewWindow;
382
+ }, [state.appStates.conversationState, state.appStates.proactiveChatStates.proactiveChatInNewWindow]); // Reset the UnreadMessageCount when minimized is toggled and broadcast it.
181
383
 
182
384
  useEffect(() => {
385
+ if (state.appStates.isMinimized) {
386
+ ActivityStreamHandler.cork();
387
+ } else {
388
+ setTimeout(() => ActivityStreamHandler.uncork(), 500);
389
+ }
390
+
183
391
  currentMessageCountRef.current = -1;
184
392
  dispatch({
185
393
  type: LiveChatWidgetActionType.SET_UNREAD_MESSAGE_COUNT,
@@ -187,17 +395,17 @@ export const LiveChatWidgetStateful = props => {
187
395
  });
188
396
  const customEvent = {
189
397
  elementType: ElementType.Custom,
190
- eventName: "UnreadMessageCount",
398
+ eventName: BroadcastEvent.UnreadMessageCount,
191
399
  payload: 0
192
400
  };
193
401
  BroadcastService.postMessage(customEvent);
194
402
  }, [state.appStates.isMinimized]); // Broadcast the UnreadMessageCount state on any change.
195
403
 
196
404
  useEffect(() => {
197
- if (state.appStates.isMinimized && state.appStates.unreadMessageCount > 0) {
405
+ if (state.appStates.isMinimized === true && state.appStates.unreadMessageCount > 0) {
198
406
  const customEvent = {
199
407
  elementType: ElementType.Custom,
200
- eventName: "UnreadMessageCount",
408
+ eventName: BroadcastEvent.UnreadMessageCount,
201
409
  payload: `${state.appStates.unreadMessageCount}`
202
410
  };
203
411
  BroadcastService.postMessage(customEvent);
@@ -209,28 +417,52 @@ export const LiveChatWidgetStateful = props => {
209
417
  setWebChatStyles({ ...webChatStyles,
210
418
  ...((_props$webChatContain2 = props.webChatContainerProps) === null || _props$webChatContain2 === void 0 ? void 0 : _props$webChatContain2.webChatStyles)
211
419
  });
212
- }, [(_props$webChatContain3 = props.webChatContainerProps) === null || _props$webChatContain3 === void 0 ? void 0 : _props$webChatContain3.webChatStyles]);
213
- const webChatProps = initWebChatComposer(props, chatSDK, state, dispatch, setWebChatStyles);
214
-
215
- const setPostChatContextRelay = () => setPostChatContextAndLoadSurvey(chatSDK, dispatch);
216
-
217
- const endChatRelay = () => endChat(props, chatSDK, setAdapter, setWebChatStyles, dispatch, adapter);
218
-
219
- const prepareStartChatRelay = () => prepareStartChat(props, chatSDK, state, dispatch, setAdapter); // eslint-disable-next-line @typescript-eslint/no-explicit-any
420
+ }, [(_props$webChatContain3 = props.webChatContainerProps) === null || _props$webChatContain3 === void 0 ? void 0 : _props$webChatContain3.webChatStyles]); // Publish chat widget state
220
421
 
422
+ useEffect(() => {
423
+ var _props$chatSDK, _props$chatSDK$omnich, _props$chatSDK2, _props$chatSDK2$omnic, _props$controlProps13;
221
424
 
222
- const initStartChatRelay = (optionalParams, persistedState) => initStartChat(chatSDK, dispatch, setAdapter, optionalParams, persistedState);
223
-
224
- const confirmationPaneProps = initConfirmationPropsComposer(props); // publish chat widget state
425
+ // Only activate these windows events when conversation state is active and chat widget is in popout mode
426
+ // Ghost chat scenarios
225
427
 
226
- useEffect(() => {
428
+ /* COMMENTING THIS CODE FOR PARITY WITH OLD LCW
429
+ if (state.appStates.conversationState === ConversationState.Active &&
430
+ props.controlProps?.skipChatButtonRendering === true) {
431
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
432
+
433
+ window.onbeforeunload = function () {
434
+ const prompt = Constants.BrowserUnloadConfirmationMessage;
435
+ return prompt;
436
+ };
437
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
438
+ window.onunload = function () {
439
+ initiateEndChatOnBrowserUnload();
440
+ };
441
+ }*/
442
+ 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, (props === null || props === void 0 ? void 0 : (_props$controlProps13 = props.controlProps) === null || _props$controlProps13 === void 0 ? void 0 : _props$controlProps13.widgetInstanceId) ?? "");
227
443
  const chatWidgetStateChangeEvent = {
228
- eventName: TelemetryEvent.ChatWidgetStateChanged,
444
+ eventName: widgetStateEventName,
229
445
  payload: { ...state
230
446
  }
231
447
  };
232
448
  BroadcastService.postMessage(chatWidgetStateChangeEvent);
233
449
  }, [state]);
450
+ const webChatProps = initWebChatComposer(props, chatSDK, state, dispatch, setWebChatStyles);
451
+
452
+ const setPostChatContextRelay = () => setPostChatContextAndLoadSurvey(chatSDK, dispatch); // eslint-disable-next-line @typescript-eslint/no-explicit-any
453
+
454
+
455
+ const endChatRelay = (adapter, skipEndChatSDK, skipCloseChat, postMessageToOtherTab) => endChat(props, chatSDK, setAdapter, setWebChatStyles, dispatch, adapter, skipEndChatSDK, skipCloseChat, postMessageToOtherTab); // eslint-disable-next-line @typescript-eslint/no-explicit-any
456
+
457
+
458
+ const prepareEndChatRelay = (adapter, state) => prepareEndChat(props, chatSDK, setAdapter, setWebChatStyles, dispatch, adapter, state);
459
+
460
+ const prepareStartChatRelay = () => prepareStartChat(props, chatSDK, state, dispatch, setAdapter); // eslint-disable-next-line @typescript-eslint/no-explicit-any
461
+
462
+
463
+ const initStartChatRelay = (optionalParams, persistedState) => initStartChat(chatSDK, props.chatConfig, props.getAuthToken, dispatch, setAdapter, optionalParams, persistedState);
464
+
465
+ const confirmationPaneProps = initConfirmationPropsComposer(props);
234
466
  return /*#__PURE__*/React.createElement(Composer, _extends({}, webChatProps, {
235
467
  styleOptions: webChatStyles,
236
468
  directLine: ((_props$webChatContain4 = props.webChatContainerProps) === null || _props$webChatContain4 === void 0 ? void 0 : _props$webChatContain4.directLine) ?? adapter ?? defaultWebChatContainerStatefulProps.directLine
@@ -238,28 +470,28 @@ export const LiveChatWidgetStateful = props => {
238
470
  id: widgetElementId,
239
471
  styles: generalStyles,
240
472
  className: (_props$styleProps2 = props.styleProps) === null || _props$styleProps2 === void 0 ? void 0 : _props$styleProps2.className
241
- }, !((_props$controlProps5 = props.controlProps) !== null && _props$controlProps5 !== void 0 && _props$controlProps5.hideChatButton) && shouldShowChatButton(state) && (decodeComponentString((_props$componentOverr = props.componentOverrides) === null || _props$componentOverr === void 0 ? void 0 : _props$componentOverr.chatButton) || /*#__PURE__*/React.createElement(ChatButtonStateful, {
473
+ }, !((_props$controlProps14 = props.controlProps) !== null && _props$controlProps14 !== void 0 && _props$controlProps14.hideChatButton) && !((_props$controlProps15 = props.controlProps) !== null && _props$controlProps15 !== void 0 && _props$controlProps15.skipChatButtonRendering) && shouldShowChatButton(state) && (decodeComponentString((_props$componentOverr = props.componentOverrides) === null || _props$componentOverr === void 0 ? void 0 : _props$componentOverr.chatButton) || /*#__PURE__*/React.createElement(ChatButtonStateful, {
242
474
  buttonProps: props.chatButtonProps,
243
475
  outOfOfficeButtonProps: props.outOfOfficeChatButtonProps,
244
476
  startChat: prepareStartChatRelay
245
- })), !((_props$controlProps6 = props.controlProps) !== null && _props$controlProps6 !== void 0 && _props$controlProps6.hideProactiveChatPane) && shouldShowProactiveChatPane(state) && (decodeComponentString((_props$componentOverr2 = props.componentOverrides) === null || _props$componentOverr2 === void 0 ? void 0 : _props$componentOverr2.proactiveChatPane) || /*#__PURE__*/React.createElement(ProactiveChatPaneStateful, {
477
+ })), !((_props$controlProps16 = props.controlProps) !== null && _props$controlProps16 !== void 0 && _props$controlProps16.hideProactiveChatPane) && shouldShowProactiveChatPane(state) && (decodeComponentString((_props$componentOverr2 = props.componentOverrides) === null || _props$componentOverr2 === void 0 ? void 0 : _props$componentOverr2.proactiveChatPane) || /*#__PURE__*/React.createElement(ProactiveChatPaneStateful, {
246
478
  proactiveChatProps: props.proactiveChatPaneProps,
247
479
  startChat: prepareStartChatRelay
248
- })), !((_props$controlProps7 = props.controlProps) !== null && _props$controlProps7 !== void 0 && _props$controlProps7.hideHeader) && shouldShowHeader(state) && (decodeComponentString((_props$componentOverr3 = props.componentOverrides) === null || _props$componentOverr3 === void 0 ? void 0 : _props$componentOverr3.header) || /*#__PURE__*/React.createElement(HeaderStateful, {
480
+ })), !((_props$controlProps17 = props.controlProps) !== null && _props$controlProps17 !== void 0 && _props$controlProps17.hideHeader) && shouldShowHeader(state) && (decodeComponentString((_props$componentOverr3 = props.componentOverrides) === null || _props$componentOverr3 === void 0 ? void 0 : _props$componentOverr3.header) || /*#__PURE__*/React.createElement(HeaderStateful, {
249
481
  headerProps: props.headerProps,
250
482
  outOfOfficeHeaderProps: props.outOfOfficeHeaderProps,
251
483
  endChat: endChatRelay
252
- })), !((_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, {
484
+ })), !((_props$controlProps18 = props.controlProps) !== null && _props$controlProps18 !== void 0 && _props$controlProps18.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$controlProps19 = props.controlProps) !== null && _props$controlProps19 !== void 0 && _props$controlProps19.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$controlProps20 = props.controlProps) !== null && _props$controlProps20 !== void 0 && _props$controlProps20.hideReconnectChatPane) && shouldShowReconnectChatPane(state) && (decodeComponentString((_props$componentOverr6 = props.componentOverrides) === null || _props$componentOverr6 === void 0 ? void 0 : _props$componentOverr6.reconnectChatPane) || /*#__PURE__*/React.createElement(ReconnectChatPaneStateful, {
253
485
  reconnectChatProps: props.reconnectChatPaneProps,
254
486
  initStartChat: initStartChatRelay
255
- })), !((_props$controlProps11 = props.controlProps) !== null && _props$controlProps11 !== void 0 && _props$controlProps11.hidePreChatSurveyPane) && shouldShowPreChatSurveyPane(state) && /*#__PURE__*/React.createElement(PreChatSurveyPaneStateful, {
487
+ })), !((_props$controlProps21 = props.controlProps) !== null && _props$controlProps21 !== void 0 && _props$controlProps21.hidePreChatSurveyPane) && shouldShowPreChatSurveyPane(state) && (decodeComponentString((_props$componentOverr7 = props.componentOverrides) === null || _props$componentOverr7 === void 0 ? void 0 : _props$componentOverr7.preChatSurveyPane) || /*#__PURE__*/React.createElement(PreChatSurveyPaneStateful, {
256
488
  surveyProps: props.preChatSurveyPaneProps,
257
489
  initStartChat: initStartChatRelay
258
- }), !((_props$controlProps12 = props.controlProps) !== null && _props$controlProps12 !== void 0 && _props$controlProps12.hideCallingContainer) && shouldShowCallingContainer(state) && /*#__PURE__*/React.createElement(CallingContainerStateful, _extends({
490
+ })), !((_props$controlProps22 = props.controlProps) !== null && _props$controlProps22 !== void 0 && _props$controlProps22.hideCallingContainer) && shouldShowCallingContainer(state) && /*#__PURE__*/React.createElement(CallingContainerStateful, _extends({
259
491
  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, {
492
+ }, props.callingContainerProps)), !((_props$controlProps23 = props.controlProps) !== null && _props$controlProps23 !== void 0 && _props$controlProps23.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$controlProps24 = props.controlProps) !== null && _props$controlProps24 !== void 0 && _props$controlProps24.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
493
  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))));
494
+ prepareEndChat: prepareEndChatRelay
495
+ }))), !((_props$controlProps25 = props.controlProps) !== null && _props$controlProps25 !== void 0 && _props$controlProps25.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
496
  };
265
497
  export default LiveChatWidgetStateful;
@@ -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,