@microsoft/omnichannel-chat-widget 0.1.0-main.7338c17 → 0.1.0-main.7375e33

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 (162) 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 +52 -6
  5. package/lib/cjs/common/telemetry/TelemetryConstants.js +56 -6
  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 +76 -2
  13. package/lib/cjs/components/callingcontainerstateful/CallingContainerStateful.js +14 -0
  14. package/lib/cjs/components/chatbuttonstateful/ChatButtonStateful.js +20 -4
  15. package/lib/cjs/components/confirmationpanestateful/ConfirmationPaneStateful.js +6 -40
  16. package/lib/cjs/components/footerstateful/FooterStateful.js +4 -5
  17. package/lib/cjs/components/footerstateful/downloadtranscriptstateful/DownloadTranscriptStateful.js +11 -2
  18. package/lib/cjs/components/headerstateful/HeaderStateful.js +13 -10
  19. package/lib/cjs/components/livechatwidget/common/createMarkdown.js +3 -4
  20. package/lib/cjs/components/livechatwidget/common/defaultProps/dummyDefaultProps.js +27 -23
  21. package/lib/cjs/components/livechatwidget/common/endChat.js +141 -50
  22. package/lib/cjs/components/livechatwidget/common/initCallingSdk.js +1 -1
  23. package/lib/cjs/components/livechatwidget/common/initWebChatComposer.js +47 -9
  24. package/lib/cjs/components/livechatwidget/common/reconnectChatHelper.js +107 -22
  25. package/lib/cjs/components/livechatwidget/common/registerTelemetryLoggers.js +6 -17
  26. package/lib/cjs/components/livechatwidget/common/setPostChatContextAndLoadSurvey.js +6 -9
  27. package/lib/cjs/components/livechatwidget/common/startChat.js +143 -51
  28. package/lib/cjs/{assets/assets.d.js → components/livechatwidget/interfaces/IAuthProps.js} +0 -0
  29. package/lib/cjs/components/livechatwidget/livechatwidgetstateful/LiveChatWidgetStateful.js +235 -79
  30. package/lib/cjs/components/postchatloadingpanestateful/PostChatLoadingPaneStateful.js +8 -0
  31. package/lib/cjs/components/prechatsurveypanestateful/PreChatSurveyPaneStateful.js +5 -10
  32. package/lib/cjs/components/proactivechatpanestateful/ProactiveChatPaneStateful.js +19 -3
  33. package/lib/cjs/components/webchatcontainerstateful/WebChatContainerStateful.js +80 -0
  34. package/lib/cjs/components/webchatcontainerstateful/common/mockchatsdk.js +4 -0
  35. package/lib/cjs/components/webchatcontainerstateful/common/utils/FileAttachmentIconManager.js +51 -73
  36. package/lib/cjs/components/webchatcontainerstateful/interfaces/IBotMagicCodeConfig.js +1 -0
  37. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/BotMagicCodeStore.js +14 -0
  38. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityMiddleware.js +25 -48
  39. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachmentMiddleware.js +3 -1
  40. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/cardActionMiddleware.js +52 -0
  41. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/cardActionMiddleware.spec.js +98 -0
  42. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/messageTimestampMiddleware.js +117 -0
  43. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/conversationEndMiddleware.js +6 -6
  44. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/webchattelemetry/WebChatLogger.js +45 -0
  45. package/lib/cjs/contexts/common/ConversationState.js +4 -2
  46. package/lib/cjs/contexts/common/LiveChatWidgetActionType.js +9 -7
  47. package/lib/cjs/contexts/common/LiveChatWidgetContextInitialState.js +8 -3
  48. package/lib/cjs/contexts/createReducer.js +16 -10
  49. package/lib/cjs/controller/componentController.js +5 -5
  50. package/lib/cjs/plugins/newMessageEventHandler.js +99 -0
  51. package/lib/esm/assets/Audios.js +1 -0
  52. package/lib/esm/assets/Icons.js +11 -0
  53. package/lib/esm/common/Constants.js +48 -5
  54. package/lib/esm/common/telemetry/TelemetryConstants.js +52 -5
  55. package/lib/esm/common/telemetry/TelemetryHelper.js +13 -1
  56. package/lib/esm/common/telemetry/TelemetryManager.js +15 -6
  57. package/lib/esm/common/telemetry/defaultConfigs/defaultAriaConfig.js +1 -1
  58. package/lib/esm/common/telemetry/defaultConfigs/defaultTelemetryConfiguration.js +4 -1
  59. package/lib/esm/common/telemetry/loggers/ariaTelemetryLogger.js +36 -14
  60. package/lib/esm/common/telemetry/loggers/consoleLogger.js +6 -5
  61. package/lib/esm/common/utils.js +55 -1
  62. package/lib/esm/components/callingcontainerstateful/CallingContainerStateful.js +14 -0
  63. package/lib/esm/components/chatbuttonstateful/ChatButtonStateful.js +22 -7
  64. package/lib/esm/components/confirmationpanestateful/ConfirmationPaneStateful.js +6 -36
  65. package/lib/esm/components/footerstateful/FooterStateful.js +4 -5
  66. package/lib/esm/components/footerstateful/downloadtranscriptstateful/DownloadTranscriptStateful.js +9 -3
  67. package/lib/esm/components/headerstateful/HeaderStateful.js +14 -11
  68. package/lib/esm/components/livechatwidget/common/createMarkdown.js +3 -3
  69. package/lib/esm/components/livechatwidget/common/defaultProps/dummyDefaultProps.js +25 -24
  70. package/lib/esm/components/livechatwidget/common/endChat.js +139 -50
  71. package/lib/esm/components/livechatwidget/common/initCallingSdk.js +1 -1
  72. package/lib/esm/components/livechatwidget/common/initWebChatComposer.js +42 -11
  73. package/lib/esm/components/livechatwidget/common/reconnectChatHelper.js +98 -23
  74. package/lib/esm/components/livechatwidget/common/registerTelemetryLoggers.js +5 -14
  75. package/lib/esm/components/livechatwidget/common/setPostChatContextAndLoadSurvey.js +6 -9
  76. package/lib/esm/components/livechatwidget/common/startChat.js +142 -54
  77. package/lib/esm/components/livechatwidget/interfaces/IAuthProps.js +1 -0
  78. package/lib/esm/components/livechatwidget/livechatwidgetstateful/LiveChatWidgetStateful.js +221 -79
  79. package/lib/esm/components/postchatloadingpanestateful/PostChatLoadingPaneStateful.js +6 -0
  80. package/lib/esm/components/prechatsurveypanestateful/PreChatSurveyPaneStateful.js +7 -11
  81. package/lib/esm/components/proactivechatpanestateful/ProactiveChatPaneStateful.js +20 -4
  82. package/lib/esm/components/webchatcontainerstateful/WebChatContainerStateful.js +72 -0
  83. package/lib/esm/components/webchatcontainerstateful/common/mockchatsdk.js +4 -0
  84. package/lib/esm/components/webchatcontainerstateful/common/utils/FileAttachmentIconManager.js +2 -12
  85. package/lib/esm/components/webchatcontainerstateful/interfaces/IBotMagicCodeConfig.js +1 -0
  86. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/BotMagicCodeStore.js +5 -0
  87. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityMiddleware.js +23 -46
  88. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachmentMiddleware.js +2 -1
  89. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/cardActionMiddleware.js +41 -0
  90. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/cardActionMiddleware.spec.js +94 -0
  91. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/messageTimestampMiddleware.js +107 -0
  92. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/conversationEndMiddleware.js +6 -6
  93. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/webchattelemetry/WebChatLogger.js +32 -0
  94. package/lib/esm/contexts/common/ConversationState.js +4 -2
  95. package/lib/esm/contexts/common/LiveChatWidgetActionType.js +9 -7
  96. package/lib/esm/contexts/common/LiveChatWidgetContextInitialState.js +8 -3
  97. package/lib/esm/contexts/createReducer.js +16 -9
  98. package/lib/esm/controller/componentController.js +5 -5
  99. package/lib/esm/plugins/newMessageEventHandler.js +82 -0
  100. package/lib/types/assets/Audios.d.ts +1 -0
  101. package/lib/types/assets/Icons.d.ts +11 -0
  102. package/lib/types/common/Constants.d.ts +26 -2
  103. package/lib/types/common/interfaces/IContextDataStore.d.ts +2 -2
  104. package/lib/types/common/telemetry/TelemetryConstants.d.ts +40 -4
  105. package/lib/types/common/telemetry/TelemetryHelper.d.ts +3 -1
  106. package/lib/types/common/telemetry/definitions/Payload.d.ts +12 -9
  107. package/lib/types/common/telemetry/interfaces/ITelemetryConfig.d.ts +3 -3
  108. package/lib/types/common/utils.d.ts +6 -0
  109. package/lib/types/components/confirmationpanestateful/interfaces/IConfirmationPaneStatefulParams.d.ts +5 -2
  110. package/lib/types/components/footerstateful/audionotificationstateful/interfaces/IAudioNotificationStatefulParams.d.ts +0 -1
  111. package/lib/types/components/footerstateful/downloadtranscriptstateful/DownloadTranscriptStateful.d.ts +1 -1
  112. package/lib/types/components/headerstateful/interfaces/IHeaderStatefulParams.d.ts +4 -1
  113. package/lib/types/components/livechatwidget/common/endChat.d.ts +4 -1
  114. package/lib/types/components/livechatwidget/common/reconnectChatHelper.d.ts +6 -2
  115. package/lib/types/components/livechatwidget/common/setPostChatContextAndLoadSurvey.d.ts +1 -1
  116. package/lib/types/components/livechatwidget/common/startChat.d.ts +4 -2
  117. package/lib/types/components/livechatwidget/common/startProactiveChat.d.ts +1 -1
  118. package/lib/types/components/livechatwidget/interfaces/IAuthProps.d.ts +4 -0
  119. package/lib/types/components/livechatwidget/interfaces/ILiveChatWidgetComponentOverrides.d.ts +1 -0
  120. package/lib/types/components/livechatwidget/interfaces/ILiveChatWidgetProps.d.ts +3 -1
  121. package/lib/types/components/reconnectchatpanestateful/interfaces/IReconnectChatPaneStatefulProps.d.ts +1 -1
  122. package/lib/types/components/webchatcontainerstateful/common/mockchatsdk.d.ts +1 -0
  123. package/lib/types/components/webchatcontainerstateful/common/utils/FileAttachmentIconManager.d.ts +1 -1
  124. package/lib/types/components/webchatcontainerstateful/interfaces/IBotMagicCodeConfig.d.ts +4 -0
  125. package/lib/types/components/webchatcontainerstateful/interfaces/IWebChatContainerStatefulProps.d.ts +2 -0
  126. package/lib/types/components/webchatcontainerstateful/webchatcontroller/BotMagicCodeStore.d.ts +3 -0
  127. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityMiddleware.d.ts +1 -2
  128. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/avatarMiddleware.d.ts +1 -1
  129. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/cardActionMiddleware.d.ts +2 -0
  130. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/cardActionMiddleware.spec.d.ts +1 -0
  131. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/messageTimestampMiddleware.d.ts +5 -0
  132. package/lib/types/components/webchatcontainerstateful/webchatcontroller/webchattelemetry/WebChatLogger.d.ts +1 -0
  133. package/lib/types/contexts/common/ConversationState.d.ts +4 -2
  134. package/lib/types/contexts/common/ILiveChatWidgetContext.d.ts +2 -1
  135. package/lib/types/contexts/common/LiveChatWidgetActionType.d.ts +10 -8
  136. package/lib/types/plugins/newMessageEventHandler.d.ts +2 -0
  137. package/package.json +9 -11
  138. package/lib/cjs/assets/audios/newMessageNotification.mp3 +0 -0
  139. package/lib/cjs/assets/icons/archiveIcon.svg +0 -3
  140. package/lib/cjs/assets/icons/audioIcon.svg +0 -6
  141. package/lib/cjs/assets/icons/blankIcon.svg +0 -6
  142. package/lib/cjs/assets/icons/excelIcon.svg +0 -6
  143. package/lib/cjs/assets/icons/imageIcon.svg +0 -6
  144. package/lib/cjs/assets/icons/oneNoteIcon.svg +0 -6
  145. package/lib/cjs/assets/icons/pdfIcon.svg +0 -6
  146. package/lib/cjs/assets/icons/powerpointIcon.svg +0 -6
  147. package/lib/cjs/assets/icons/videoIcon.svg +0 -6
  148. package/lib/cjs/assets/icons/visioIcon.svg +0 -6
  149. package/lib/cjs/assets/icons/wordIcon.svg +0 -6
  150. package/lib/esm/assets/assets.d.js +0 -0
  151. package/lib/esm/assets/audios/newMessageNotification.mp3 +0 -0
  152. package/lib/esm/assets/icons/archiveIcon.svg +0 -3
  153. package/lib/esm/assets/icons/audioIcon.svg +0 -6
  154. package/lib/esm/assets/icons/blankIcon.svg +0 -6
  155. package/lib/esm/assets/icons/excelIcon.svg +0 -6
  156. package/lib/esm/assets/icons/imageIcon.svg +0 -6
  157. package/lib/esm/assets/icons/oneNoteIcon.svg +0 -6
  158. package/lib/esm/assets/icons/pdfIcon.svg +0 -6
  159. package/lib/esm/assets/icons/powerpointIcon.svg +0 -6
  160. package/lib/esm/assets/icons/videoIcon.svg +0 -6
  161. package/lib/esm/assets/icons/visioIcon.svg +0 -6
  162. 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 { BroadcastEvent, LogLevel, TelemetryEvent } from "../../../common/telemetry/TelemetryConstants";
3
4
  import { BroadcastService, decodeComponentString } from "@microsoft/omnichannel-chat-components";
4
5
  import { Stack } from "@fluentui/react";
5
6
  import React, { useEffect, useRef, useState } from "react";
6
- import { createTimer, getLocaleDirection } from "../../../common/utils";
7
- import { getReconnectIdForAuthenticatedChat, handleUnauthenticatedReconnectChat } from "../common/reconnectChatHelper";
8
- import { initStartChat, prepareStartChat } from "../common/startChat";
7
+ import { createTimer, getLocaleDirection, getStateFromCache, getWidgetCacheId, getWidgetEndChatEventName, 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,12 +43,8 @@ import { startProactiveChat } from "../common/startProactiveChat";
39
43
  import useChatAdapterStore from "../../../hooks/useChatAdapterStore";
40
44
  import useChatContextStore from "../../../hooks/useChatContextStore";
41
45
  import useChatSDKStore from "../../../hooks/useChatSDKStore";
42
- import { LogLevel, TelemetryEvent } from "../../../common/telemetry/TelemetryConstants";
43
- import { disposeTelemetryLoggers } from "../common/disposeTelemetryLoggers";
44
- import { DataStoreManager } from "../../../common/contextDataStore/DataStoreManager";
45
- import { TelemetryHelper } from "../../../common/telemetry/TelemetryHelper";
46
46
  export const LiveChatWidgetStateful = props => {
47
- var _props$webChatContain, _props$styleProps, _props$controlProps, _props$webChatContain3, _props$webChatContain4, _props$styleProps2, _props$controlProps5, _props$componentOverr, _props$controlProps6, _props$componentOverr2, _props$controlProps7, _props$componentOverr3, _props$controlProps8, _props$componentOverr4, _props$controlProps9, _props$componentOverr5, _props$controlProps10, _props$componentOverr6, _props$controlProps11, _props$controlProps12, _props$controlProps13, _props$componentOverr7, _props$controlProps14, _props$componentOverr8, _props$controlProps15, _props$componentOverr9, _props$componentOverr10, _props$componentOverr11;
47
+ var _props$webChatContain, _props$styleProps, _props$controlProps, _props$webChatContain3, _props$webChatContain4, _props$styleProps2, _props$controlProps5, _props$controlProps6, _props$componentOverr, _props$controlProps7, _props$componentOverr2, _props$controlProps8, _props$componentOverr3, _props$controlProps9, _props$componentOverr4, _props$controlProps10, _props$componentOverr5, _props$controlProps11, _props$componentOverr6, _props$controlProps12, _props$componentOverr7, _props$controlProps13, _props$controlProps14, _props$componentOverr8, _props$controlProps15, _props$componentOverr9, _props$controlProps16, _props$componentOverr10, _props$componentOverr11, _props$componentOverr12;
48
48
 
49
49
  const [state, dispatch] = useChatContextStore(); // eslint-disable-next-line @typescript-eslint/no-explicit-any
50
50
 
@@ -53,7 +53,8 @@ export const LiveChatWidgetStateful = props => {
53
53
  ...((_props$webChatContain = props.webChatContainerProps) === null || _props$webChatContain === void 0 ? void 0 : _props$webChatContain.webChatStyles)
54
54
  }); // eslint-disable-next-line @typescript-eslint/no-explicit-any
55
55
 
56
- const chatSDK = useChatSDKStore();
56
+ const chatSDK = useChatSDKStore(); // eslint-disable-next-line @typescript-eslint/no-explicit-any
57
+
57
58
  const [voiceVideoCallingSDK, setVoiceVideoCallingSDK] = useState(undefined);
58
59
  const {
59
60
  Composer
@@ -66,8 +67,37 @@ export const LiveChatWidgetStateful = props => {
66
67
  TelemetryTimers.LcwLoadToChatButtonTimer = createTimer();
67
68
  const widgetElementId = ((_props$controlProps = props.controlProps) === null || _props$controlProps === void 0 ? void 0 : _props$controlProps.id) || "oc-lcw";
68
69
  const currentMessageCountRef = useRef(0);
70
+ let widgetStateEventName = "";
71
+
72
+ const initiateEndChatOnBrowserUnload = () => {
73
+ var _chatSDK$omnichannelC, _chatSDK$omnichannelC2, _DataStoreManager$cli;
74
+
75
+ TelemetryHelper.logActionEvent(LogLevel.INFO, {
76
+ Event: TelemetryEvent.BrowserUnloadEventStarted,
77
+ Description: "Browser unload event received."
78
+ });
79
+ const persistedState = getStateFromCache(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); // End chat if the chat is still active and browser closed
80
+
81
+ if (persistedState.appStates.conversationState === ConversationState.Active) {
82
+ //Browser close scenario/no room for PCS/so just end chat and notify agent immidiately
83
+ endChat(props, chatSDK, setAdapter, setWebChatStyles, dispatch, adapter, false, false, false);
84
+ } // Clean local storage
85
+
86
+
87
+ (_DataStoreManager$cli = DataStoreManager.clientDataStore) === null || _DataStoreManager$cli === void 0 ? void 0 : _DataStoreManager$cli.removeData(widgetStateEventName, "localStorage"); //Dispose calling instance
88
+
89
+ if (voiceVideoCallingSDK) {
90
+ voiceVideoCallingSDK === null || voiceVideoCallingSDK === void 0 ? void 0 : voiceVideoCallingSDK.close();
91
+ } //Message for clearing window[popouTab]
92
+
93
+
94
+ BroadcastService.postMessage({
95
+ eventName: BroadcastEvent.ClosePopoutWindow
96
+ });
97
+ };
98
+
69
99
  useEffect(() => {
70
- var _props$controlProps2, _props$controlProps3, _props$reconnectChatP, _props$controlProps4, _props$chatConfig, _props$chatConfig$Cha, _state$domainStates;
100
+ var _props$controlProps2, _props$controlProps3, _props$chatConfig, _props$chatConfig$Cha, _props$controlProps4, _props$reconnectChatP, _props$chatConfig2, _props$chatConfig2$Li;
71
101
 
72
102
  registerTelemetryLoggers(props, dispatch);
73
103
  createInternetConnectionChangeHandler();
@@ -80,45 +110,67 @@ export const LiveChatWidgetStateful = props => {
80
110
  type: LiveChatWidgetActionType.SET_SKIP_CHAT_BUTTON_RENDERING,
81
111
  payload: ((_props$controlProps2 = props.controlProps) === null || _props$controlProps2 === void 0 ? void 0 : _props$controlProps2.skipChatButtonRendering) || false
82
112
  });
113
+ dispatch({
114
+ type: LiveChatWidgetActionType.SET_E2VV_ENABLED,
115
+ payload: false
116
+ });
83
117
  initCallingSdk(chatSDK, setVoiceVideoCallingSDK).then(sdkCreated => {
84
118
  sdkCreated && dispatch({
85
119
  type: LiveChatWidgetActionType.SET_E2VV_ENABLED,
86
120
  payload: true
87
121
  });
122
+ }); // Initialize global dir
123
+
124
+ const globalDir = ((_props$controlProps3 = props.controlProps) === null || _props$controlProps3 === void 0 ? void 0 : _props$controlProps3.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);
125
+ dispatch({
126
+ type: LiveChatWidgetActionType.SET_GLOBAL_DIR,
127
+ payload: globalDir
88
128
  });
89
129
 
90
- 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) {
130
+ if (!((_props$controlProps4 = props.controlProps) !== null && _props$controlProps4 !== void 0 && _props$controlProps4.skipChatButtonRendering) && (_props$reconnectChatP = props.reconnectChatPaneProps) !== null && _props$reconnectChatP !== void 0 && _props$reconnectChatP.reconnectId) {
91
131
  var _props$reconnectChatP2;
92
132
 
93
- handleUnauthenticatedReconnectChat(dispatch, (_props$reconnectChatP2 = props.reconnectChatPaneProps) === null || _props$reconnectChatP2 === void 0 ? void 0 : _props$reconnectChatP2.reconnectId, initStartChat);
94
- } // Initialize global dir
133
+ startUnauthenticatedReconnectChat(chatSDK, props.authProps, dispatch, setAdapter, (_props$reconnectChatP2 = props.reconnectChatPaneProps) === null || _props$reconnectChatP2 === void 0 ? void 0 : _props$reconnectChatP2.reconnectId, initStartChat);
134
+ return;
135
+ } // Check if auth settings enabled, do not connect to existing chat from cache during refresh/re-load
136
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
137
+
138
+
139
+ 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;
140
+
141
+ if (!isAuthenticationSettingsEnabled) {
142
+ var _state$domainStates;
143
+
144
+ if (!isUndefinedOrEmpty((_state$domainStates = state.domainStates) === null || _state$domainStates === void 0 ? void 0 : _state$domainStates.liveChatContext) && state.appStates.conversationState === ConversationState.Active) {
145
+ var _state$domainStates2;
146
+
147
+ const optionalParams = {
148
+ liveChatContext: (_state$domainStates2 = state.domainStates) === null || _state$domainStates2 === void 0 ? void 0 : _state$domainStates2.liveChatContext
149
+ };
150
+ initStartChat(chatSDK, props.authProps, dispatch, setAdapter, optionalParams);
151
+ return;
152
+ }
153
+ } // All other case should show start chat button, skipChatButtonRendering will take care of it own
95
154
 
96
155
 
97
- 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);
98
156
  dispatch({
99
- type: LiveChatWidgetActionType.SET_GLOBAL_DIR,
100
- payload: globalDir
157
+ type: LiveChatWidgetActionType.SET_CONVERSATION_STATE,
158
+ payload: ConversationState.Closed
101
159
  });
160
+ }, []); // useEffect for when skip chat button rendering
102
161
 
103
- if ((_state$domainStates = state.domainStates) !== null && _state$domainStates !== void 0 && _state$domainStates.chatToken) {
104
- var _state$domainStates2;
105
-
106
- const optionalParams = {
107
- liveChatContext: {
108
- chatToken: (_state$domainStates2 = state.domainStates) === null || _state$domainStates2 === void 0 ? void 0 : _state$domainStates2.chatToken
109
- }
110
- };
111
- initStartChat(chatSDK, dispatch, setAdapter, optionalParams);
112
- }
113
- }, []);
114
162
  useEffect(() => {
115
163
  if (state.appStates.skipChatButtonRendering) {
116
164
  var _props$reconnectChatP3;
117
165
 
166
+ BroadcastService.postMessage({
167
+ eventName: BroadcastEvent.ChatInitiated
168
+ });
169
+
118
170
  if ((_props$reconnectChatP3 = props.reconnectChatPaneProps) !== null && _props$reconnectChatP3 !== void 0 && _props$reconnectChatP3.reconnectId && !state.appStates.reconnectId) {
119
- var _props$reconnectChatP4;
171
+ var _props$reconnectChatP4, _props$reconnectChatP5;
120
172
 
121
- handleUnauthenticatedReconnectChat(dispatch, (_props$reconnectChatP4 = props.reconnectChatPaneProps) === null || _props$reconnectChatP4 === void 0 ? void 0 : _props$reconnectChatP4.reconnectId, initStartChat);
173
+ handleUnauthenticatedReconnectChat(chatSDK, props.authProps, dispatch, setAdapter, (_props$reconnectChatP4 = props.reconnectChatPaneProps) === null || _props$reconnectChatP4 === void 0 ? void 0 : _props$reconnectChatP4.reconnectId, initStartChat, (_props$reconnectChatP5 = props.reconnectChatPaneProps) === null || _props$reconnectChatP5 === void 0 ? void 0 : _props$reconnectChatP5.redirectInSameWindow);
122
174
  } else {
123
175
  getReconnectIdForAuthenticatedChat(props, chatSDK).then(authReconnectId => {
124
176
  if (authReconnectId && !state.appStates.reconnectId) {
@@ -131,18 +183,32 @@ export const LiveChatWidgetStateful = props => {
131
183
  payload: ConversationState.ReconnectChat
132
184
  });
133
185
  } else {
134
- dispatch({
135
- type: LiveChatWidgetActionType.SET_CONVERSATION_STATE,
136
- payload: ConversationState.Loading
137
- });
138
- initStartChat(chatSDK, dispatch, setAdapter);
186
+ const chatStartedSkippingChatButtonRendering = {
187
+ eventName: BroadcastEvent.StartChatSkippingChatButtonRendering
188
+ };
189
+ BroadcastService.postMessage(chatStartedSkippingChatButtonRendering);
190
+ setPreChatAndInitiateChat(chatSDK, props.authProps, dispatch, setAdapter);
139
191
  }
140
192
  });
141
193
  }
142
194
  }
143
- }, [state.appStates.skipChatButtonRendering]);
195
+ }, [state.appStates.skipChatButtonRendering]); // useEffect for when skip chat button rendering
196
+
144
197
  useEffect(() => {
145
- BroadcastService.getMessageByEventName("StartProactiveChat").subscribe(msg => {
198
+ var _chatSDK$omnichannelC7, _chatSDK$omnichannelC8;
199
+
200
+ // Add the custom context on receiving the SetCustomContext event
201
+ BroadcastService.getMessageByEventName(BroadcastEvent.SetCustomContext).subscribe(msg => {
202
+ TelemetryHelper.logActionEvent(LogLevel.INFO, {
203
+ Event: TelemetryEvent.CustomContextReceived,
204
+ Description: "CustomContext received."
205
+ });
206
+ dispatch({
207
+ type: LiveChatWidgetActionType.SET_CUSTOM_CONTEXT,
208
+ payload: msg === null || msg === void 0 ? void 0 : msg.payload
209
+ });
210
+ });
211
+ BroadcastService.getMessageByEventName(BroadcastEvent.StartProactiveChat).subscribe(msg => {
146
212
  TelemetryHelper.logActionEvent(LogLevel.INFO, {
147
213
  Event: TelemetryEvent.StartProactiveChatEventReceived,
148
214
  Description: "Start proactive chat event received."
@@ -158,37 +224,106 @@ export const LiveChatWidgetStateful = props => {
158
224
  Description: "Start proactive chat method called, when chat was already triggered."
159
225
  });
160
226
  }
161
- });
162
- window.addEventListener("beforeunload", event => {
163
- disposeTelemetryLoggers();
164
- });
227
+ }); // Start chat from SDK Event
165
228
 
166
- if (state.appStates.conversationEndedByAgent) {
167
- endChat(props, chatSDK, setAdapter, setWebChatStyles, dispatch, adapter);
168
- }
169
- }, []);
170
- useEffect(() => {
171
- canStartProactiveChat.current = state.appStates.conversationState === ConversationState.Closed;
229
+ BroadcastService.getMessageByEventName(BroadcastEvent.StartChat).subscribe(() => {
230
+ var _chatSDK$omnichannelC3, _chatSDK$omnichannelC4;
172
231
 
173
- if (state.appStates.conversationState === ConversationState.Active) {
174
- chatSDK === null || chatSDK === void 0 ? void 0 : chatSDK.onNewMessage(() => {
232
+ TelemetryHelper.logActionEvent(LogLevel.INFO, {
233
+ Event: TelemetryEvent.StartChatEventRecevied,
234
+ Description: "Start chat event received."
235
+ });
236
+ const persistedState = getStateFromCache(chatSDK === null || chatSDK === void 0 ? void 0 : (_chatSDK$omnichannelC3 = chatSDK.omnichannelConfig) === null || _chatSDK$omnichannelC3 === void 0 ? void 0 : _chatSDK$omnichannelC3.orgId, chatSDK === null || chatSDK === void 0 ? void 0 : (_chatSDK$omnichannelC4 = chatSDK.omnichannelConfig) === null || _chatSDK$omnichannelC4 === void 0 ? void 0 : _chatSDK$omnichannelC4.widgetId);
237
+
238
+ if (persistedState && (persistedState.appStates.conversationState === ConversationState.Closed || persistedState.appStates.conversationState === ConversationState.InActive || persistedState.appStates.conversationState === ConversationState.Postchat)) {
239
+ // Embedded mode
240
+ BroadcastService.postMessage({
241
+ eventName: BroadcastEvent.ChatInitiated
242
+ });
243
+ prepareStartChat(props, chatSDK, state, dispatch, setAdapter);
244
+ } else {
245
+ var _persistedState$domai, _persistedState$domai2, _persistedState$domai3, _persistedState$domai4;
246
+
247
+ // Minimize to Maximize
248
+ dispatch({
249
+ type: LiveChatWidgetActionType.SET_MINIMIZED,
250
+ payload: false
251
+ });
175
252
  BroadcastService.postMessage({
176
- eventName: "NewMessageNotification"
253
+ eventName: BroadcastEvent.MaximizeChat,
254
+ payload: {
255
+ 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,
256
+ 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
257
+ }
177
258
  });
259
+ }
260
+ }); // End chat
261
+
262
+ BroadcastService.getMessageByEventName(BroadcastEvent.InitiateEndChat).subscribe(async () => {
263
+ if (state.appStates.skipChatButtonRendering !== true) {
264
+ var _chatSDK$omnichannelC5, _chatSDK$omnichannelC6;
265
+
266
+ // This is to ensure to get latest state from cache in multitab
267
+ const persistedState = getStateFromCache(chatSDK === null || chatSDK === void 0 ? void 0 : (_chatSDK$omnichannelC5 = chatSDK.omnichannelConfig) === null || _chatSDK$omnichannelC5 === void 0 ? void 0 : _chatSDK$omnichannelC5.orgId, chatSDK === null || chatSDK === void 0 ? void 0 : (_chatSDK$omnichannelC6 = chatSDK.omnichannelConfig) === null || _chatSDK$omnichannelC6 === void 0 ? void 0 : _chatSDK$omnichannelC6.widgetId);
268
+
269
+ if (persistedState && persistedState.appStates.conversationState === ConversationState.Active) {
270
+ prepareEndChat(props, chatSDK, setAdapter, setWebChatStyles, dispatch, adapter, state);
271
+ } else {
272
+ const skipEndChatSDK = true;
273
+ const skipCloseChat = false;
274
+ endChat(props, chatSDK, setAdapter, setWebChatStyles, dispatch, adapter, skipEndChatSDK, skipCloseChat);
275
+ }
276
+ }
277
+
278
+ BroadcastService.postMessage({
279
+ eventName: BroadcastEvent.CloseChat
178
280
  });
179
- } // Track the message count
281
+ }); // End chat on browser unload
282
+
283
+ BroadcastService.getMessageByEventName(BroadcastEvent.InitiateEndChatOnBrowserUnload).subscribe(() => {
284
+ initiateEndChatOnBrowserUnload();
285
+ }); // Listen to end chat event from other tabs
180
286
 
287
+ const endChatEventName = getWidgetEndChatEventName(chatSDK === null || chatSDK === void 0 ? void 0 : (_chatSDK$omnichannelC7 = chatSDK.omnichannelConfig) === null || _chatSDK$omnichannelC7 === void 0 ? void 0 : _chatSDK$omnichannelC7.orgId, chatSDK === null || chatSDK === void 0 ? void 0 : (_chatSDK$omnichannelC8 = chatSDK.omnichannelConfig) === null || _chatSDK$omnichannelC8 === void 0 ? void 0 : _chatSDK$omnichannelC8.widgetId);
288
+ BroadcastService.getMessageByEventName(endChatEventName).subscribe(async () => {
289
+ endChat(props, chatSDK, setAdapter, setWebChatStyles, dispatch, adapter, false, false, false);
290
+ }); // When conversation ended by agent
181
291
 
292
+ if (state.appStates.conversationEndedByAgent) {
293
+ endChat(props, chatSDK, setAdapter, setWebChatStyles, dispatch, adapter);
294
+ } //Listen to WidgetSize, used for minimize to maximize
295
+
296
+
297
+ BroadcastService.getMessageByEventName("WidgetSize").subscribe(msg => {
298
+ dispatch({
299
+ type: LiveChatWidgetActionType.SET_WIDGET_SIZE,
300
+ payload: msg === null || msg === void 0 ? void 0 : msg.payload
301
+ });
302
+ });
303
+ return () => {
304
+ disposeTelemetryLoggers();
305
+ };
306
+ }, []);
307
+ useEffect(() => {
308
+ // On new message
182
309
  if (state.appStates.conversationState === ConversationState.Active) {
183
310
  chatSDK === null || chatSDK === void 0 ? void 0 : chatSDK.onNewMessage(() => {
311
+ // Track the message count
184
312
  currentMessageCountRef.current++;
185
313
  dispatch({
186
314
  type: LiveChatWidgetActionType.SET_UNREAD_MESSAGE_COUNT,
187
315
  payload: currentMessageCountRef.current + 1
316
+ }); // New message notification
317
+
318
+ BroadcastService.postMessage({
319
+ eventName: BroadcastEvent.NewMessageNotification
188
320
  });
189
321
  });
190
322
  }
191
- }, [state.appStates.conversationState]); // Reset the UnreadMessageCount when minimized is toggled and broadcast it.
323
+ }, [state.appStates.conversationState]);
324
+ useEffect(() => {
325
+ canStartProactiveChat.current = state.appStates.conversationState === ConversationState.Closed && !state.appStates.proactiveChatStates.proactiveChatInNewWindow;
326
+ }, [state.appStates.conversationState, state.appStates.proactiveChatStates.proactiveChatInNewWindow]); // Reset the UnreadMessageCount when minimized is toggled and broadcast it.
192
327
 
193
328
  useEffect(() => {
194
329
  currentMessageCountRef.current = -1;
@@ -198,17 +333,17 @@ export const LiveChatWidgetStateful = props => {
198
333
  });
199
334
  const customEvent = {
200
335
  elementType: ElementType.Custom,
201
- eventName: "UnreadMessageCount",
336
+ eventName: BroadcastEvent.UnreadMessageCount,
202
337
  payload: 0
203
338
  };
204
339
  BroadcastService.postMessage(customEvent);
205
340
  }, [state.appStates.isMinimized]); // Broadcast the UnreadMessageCount state on any change.
206
341
 
207
342
  useEffect(() => {
208
- if (state.appStates.isMinimized && state.appStates.unreadMessageCount > 0) {
343
+ if (state.appStates.isMinimized === true && state.appStates.unreadMessageCount > 0) {
209
344
  const customEvent = {
210
345
  elementType: ElementType.Custom,
211
- eventName: "UnreadMessageCount",
346
+ eventName: BroadcastEvent.UnreadMessageCount,
212
347
  payload: `${state.appStates.unreadMessageCount}`
213
348
  };
214
349
  BroadcastService.postMessage(customEvent);
@@ -220,28 +355,35 @@ export const LiveChatWidgetStateful = props => {
220
355
  setWebChatStyles({ ...webChatStyles,
221
356
  ...((_props$webChatContain2 = props.webChatContainerProps) === null || _props$webChatContain2 === void 0 ? void 0 : _props$webChatContain2.webChatStyles)
222
357
  });
223
- }, [(_props$webChatContain3 = props.webChatContainerProps) === null || _props$webChatContain3 === void 0 ? void 0 : _props$webChatContain3.webChatStyles]);
224
- const webChatProps = initWebChatComposer(props, chatSDK, state, dispatch, setWebChatStyles);
225
-
226
- const setPostChatContextRelay = () => setPostChatContextAndLoadSurvey(chatSDK, dispatch);
227
-
228
- const endChatRelay = () => endChat(props, chatSDK, setAdapter, setWebChatStyles, dispatch, adapter);
229
-
230
- const prepareStartChatRelay = () => prepareStartChat(props, chatSDK, state, dispatch, setAdapter); // eslint-disable-next-line @typescript-eslint/no-explicit-any
231
-
232
-
233
- const initStartChatRelay = (optionalParams, persistedState) => initStartChat(chatSDK, dispatch, setAdapter, optionalParams, persistedState);
234
-
235
- const confirmationPaneProps = initConfirmationPropsComposer(props); // publish chat widget state
358
+ }, [(_props$webChatContain3 = props.webChatContainerProps) === null || _props$webChatContain3 === void 0 ? void 0 : _props$webChatContain3.webChatStyles]); // Publish chat widget state
236
359
 
237
360
  useEffect(() => {
361
+ var _props$chatSDK, _props$chatSDK$omnich, _props$chatSDK2, _props$chatSDK2$omnic;
362
+
363
+ 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);
238
364
  const chatWidgetStateChangeEvent = {
239
- eventName: TelemetryEvent.ChatWidgetStateChanged,
365
+ eventName: widgetStateEventName,
240
366
  payload: { ...state
241
367
  }
242
368
  };
243
369
  BroadcastService.postMessage(chatWidgetStateChangeEvent);
244
370
  }, [state]);
371
+ const webChatProps = initWebChatComposer(props, chatSDK, state, dispatch, setWebChatStyles);
372
+
373
+ const setPostChatContextRelay = () => setPostChatContextAndLoadSurvey(chatSDK, dispatch); // eslint-disable-next-line @typescript-eslint/no-explicit-any
374
+
375
+
376
+ const endChatRelay = (adapter, skipEndChatSDK, skipCloseChat) => endChat(props, chatSDK, setAdapter, setWebChatStyles, dispatch, adapter, skipEndChatSDK, skipCloseChat); // eslint-disable-next-line @typescript-eslint/no-explicit-any
377
+
378
+
379
+ const prepareEndChatRelay = (adapter, state) => prepareEndChat(props, chatSDK, setAdapter, setWebChatStyles, dispatch, adapter, state);
380
+
381
+ const prepareStartChatRelay = () => prepareStartChat(props, chatSDK, state, dispatch, setAdapter); // eslint-disable-next-line @typescript-eslint/no-explicit-any
382
+
383
+
384
+ const initStartChatRelay = (optionalParams, persistedState) => initStartChat(chatSDK, props.authProps, dispatch, setAdapter, optionalParams, persistedState);
385
+
386
+ const confirmationPaneProps = initConfirmationPropsComposer(props);
245
387
  return /*#__PURE__*/React.createElement(Composer, _extends({}, webChatProps, {
246
388
  styleOptions: webChatStyles,
247
389
  directLine: ((_props$webChatContain4 = props.webChatContainerProps) === null || _props$webChatContain4 === void 0 ? void 0 : _props$webChatContain4.directLine) ?? adapter ?? defaultWebChatContainerStatefulProps.directLine
@@ -249,28 +391,28 @@ export const LiveChatWidgetStateful = props => {
249
391
  id: widgetElementId,
250
392
  styles: generalStyles,
251
393
  className: (_props$styleProps2 = props.styleProps) === null || _props$styleProps2 === void 0 ? void 0 : _props$styleProps2.className
252
- }, !((_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, {
394
+ }, !((_props$controlProps5 = props.controlProps) !== null && _props$controlProps5 !== void 0 && _props$controlProps5.hideChatButton) && !((_props$controlProps6 = props.controlProps) !== null && _props$controlProps6 !== void 0 && _props$controlProps6.skipChatButtonRendering) && shouldShowChatButton(state) && (decodeComponentString((_props$componentOverr = props.componentOverrides) === null || _props$componentOverr === void 0 ? void 0 : _props$componentOverr.chatButton) || /*#__PURE__*/React.createElement(ChatButtonStateful, {
253
395
  buttonProps: props.chatButtonProps,
254
396
  outOfOfficeButtonProps: props.outOfOfficeChatButtonProps,
255
397
  startChat: prepareStartChatRelay
256
- })), !((_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, {
398
+ })), !((_props$controlProps7 = props.controlProps) !== null && _props$controlProps7 !== void 0 && _props$controlProps7.hideProactiveChatPane) && shouldShowProactiveChatPane(state) && (decodeComponentString((_props$componentOverr2 = props.componentOverrides) === null || _props$componentOverr2 === void 0 ? void 0 : _props$componentOverr2.proactiveChatPane) || /*#__PURE__*/React.createElement(ProactiveChatPaneStateful, {
257
399
  proactiveChatProps: props.proactiveChatPaneProps,
258
400
  startChat: prepareStartChatRelay
259
- })), !((_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, {
401
+ })), !((_props$controlProps8 = props.controlProps) !== null && _props$controlProps8 !== void 0 && _props$controlProps8.hideHeader) && shouldShowHeader(state) && (decodeComponentString((_props$componentOverr3 = props.componentOverrides) === null || _props$componentOverr3 === void 0 ? void 0 : _props$componentOverr3.header) || /*#__PURE__*/React.createElement(HeaderStateful, {
260
402
  headerProps: props.headerProps,
261
403
  outOfOfficeHeaderProps: props.outOfOfficeHeaderProps,
262
404
  endChat: endChatRelay
263
- })), !((_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, {
405
+ })), !((_props$controlProps9 = props.controlProps) !== null && _props$controlProps9 !== void 0 && _props$controlProps9.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$controlProps10 = props.controlProps) !== null && _props$controlProps10 !== void 0 && _props$controlProps10.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$controlProps11 = props.controlProps) !== null && _props$controlProps11 !== void 0 && _props$controlProps11.hideReconnectChatPane) && shouldShowReconnectChatPane(state) && (decodeComponentString((_props$componentOverr6 = props.componentOverrides) === null || _props$componentOverr6 === void 0 ? void 0 : _props$componentOverr6.reconnectChatPane) || /*#__PURE__*/React.createElement(ReconnectChatPaneStateful, {
264
406
  reconnectChatProps: props.reconnectChatPaneProps,
265
407
  initStartChat: initStartChatRelay
266
- })), !((_props$controlProps11 = props.controlProps) !== null && _props$controlProps11 !== void 0 && _props$controlProps11.hidePreChatSurveyPane) && shouldShowPreChatSurveyPane(state) && /*#__PURE__*/React.createElement(PreChatSurveyPaneStateful, {
408
+ })), !((_props$controlProps12 = props.controlProps) !== null && _props$controlProps12 !== void 0 && _props$controlProps12.hidePreChatSurveyPane) && shouldShowPreChatSurveyPane(state) && (decodeComponentString((_props$componentOverr7 = props.componentOverrides) === null || _props$componentOverr7 === void 0 ? void 0 : _props$componentOverr7.preChatSurveyPane) || /*#__PURE__*/React.createElement(PreChatSurveyPaneStateful, {
267
409
  surveyProps: props.preChatSurveyPaneProps,
268
410
  initStartChat: initStartChatRelay
269
- }), !((_props$controlProps12 = props.controlProps) !== null && _props$controlProps12 !== void 0 && _props$controlProps12.hideCallingContainer) && shouldShowCallingContainer(state) && /*#__PURE__*/React.createElement(CallingContainerStateful, _extends({
411
+ })), !((_props$controlProps13 = props.controlProps) !== null && _props$controlProps13 !== void 0 && _props$controlProps13.hideCallingContainer) && shouldShowCallingContainer(state) && /*#__PURE__*/React.createElement(CallingContainerStateful, _extends({
270
412
  voiceVideoCallingSdk: voiceVideoCallingSDK
271
- }, 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, {
413
+ }, props.callingContainerProps)), !((_props$controlProps14 = props.controlProps) !== null && _props$controlProps14 !== void 0 && _props$controlProps14.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$controlProps15 = props.controlProps) !== null && _props$controlProps15 !== void 0 && _props$controlProps15.hideConfirmationPane) && shouldShowConfirmationPane(state) && (decodeComponentString((_props$componentOverr9 = props.componentOverrides) === null || _props$componentOverr9 === void 0 ? void 0 : _props$componentOverr9.confirmationPane) || /*#__PURE__*/React.createElement(ConfirmationPaneStateful, _extends({}, confirmationPaneProps, {
272
414
  setPostChatContext: setPostChatContextRelay,
273
- endChat: endChatRelay
274
- }))), !((_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))));
415
+ prepareEndChat: prepareEndChatRelay
416
+ }))), !((_props$controlProps16 = props.controlProps) !== null && _props$controlProps16 !== void 0 && _props$controlProps16.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))));
275
417
  };
276
418
  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,
@@ -1,9 +1,8 @@
1
- import { Constants, HtmlAttributeNames, Regex } from "../../common/Constants";
1
+ import { HtmlAttributeNames, Regex } from "../../common/Constants";
2
2
  import { LogLevel, TelemetryEvent } from "../../common/telemetry/TelemetryConstants";
3
3
  import React, { useEffect } from "react";
4
- import { extractPreChatSurveyResponseValues, findAllFocusableElement, parseAdaptiveCardPayload } from "../../common/utils";
4
+ import { extractPreChatSurveyResponseValues, findAllFocusableElement, getStateFromCache, isUndefinedOrEmpty, parseAdaptiveCardPayload } from "../../common/utils";
5
5
  import { ConversationState } from "../../contexts/common/ConversationState";
6
- import { DataStoreManager } from "../../common/contextDataStore/DataStoreManager";
7
6
  import { LiveChatWidgetActionType } from "../../contexts/common/LiveChatWidgetActionType";
8
7
  import { PreChatSurveyPane } from "@microsoft/omnichannel-chat-components";
9
8
  import { TelemetryHelper } from "../../common/telemetry/TelemetryHelper";
@@ -67,13 +66,12 @@ export const PreChatSurveyPaneStateful = props => {
67
66
  });
68
67
 
69
68
  try {
70
- var _DataStoreManager$cli, _persistedState$domai;
69
+ var _state$domainStates, _state$domainStates$t, _state$domainStates$t2, _persistedState$domai, _persistedState$appSt;
71
70
 
72
- const widgetStateFromCache = (_DataStoreManager$cli = DataStoreManager.clientDataStore) === null || _DataStoreManager$cli === void 0 ? void 0 : _DataStoreManager$cli.getData(Constants.widgetStateDataKey, "localStorage");
73
- const persistedState = widgetStateFromCache ? JSON.parse(widgetStateFromCache) : undefined;
74
- let optionalParams = {};
71
+ const persistedState = getStateFromCache(((_state$domainStates = state.domainStates) === null || _state$domainStates === void 0 ? void 0 : (_state$domainStates$t = _state$domainStates.telemetryInternalData) === null || _state$domainStates$t === void 0 ? void 0 : _state$domainStates$t.orgId) ?? "", ((_state$domainStates$t2 = state.domainStates.telemetryInternalData) === null || _state$domainStates$t2 === void 0 ? void 0 : _state$domainStates$t2.widgetId) ?? "");
72
+ let optionalParams = {}; //Connect to Active chats and chat is not popout
75
73
 
76
- if (persistedState !== null && persistedState !== void 0 && (_persistedState$domai = persistedState.domainStates) !== null && _persistedState$domai !== void 0 && _persistedState$domai.liveChatContext) {
74
+ if (persistedState && !isUndefinedOrEmpty(persistedState === null || persistedState === void 0 ? void 0 : (_persistedState$domai = persistedState.domainStates) === null || _persistedState$domai === void 0 ? void 0 : _persistedState$domai.liveChatContext) && (persistedState === null || persistedState === void 0 ? void 0 : (_persistedState$appSt = persistedState.appStates) === null || _persistedState$appSt === void 0 ? void 0 : _persistedState$appSt.conversationState) === ConversationState.Active && !state.appStates.skipChatButtonRendering) {
77
75
  var _persistedState$domai2;
78
76
 
79
77
  optionalParams = {
@@ -83,9 +81,7 @@ export const PreChatSurveyPaneStateful = props => {
83
81
  } else {
84
82
  const prechatResponseValues = extractPreChatSurveyResponseValues(state.domainStates.preChatSurveyResponse, values);
85
83
  optionalParams = {
86
- initContext: {
87
- preChatResponse: prechatResponseValues
88
- }
84
+ preChatResponse: prechatResponseValues
89
85
  };
90
86
  setPreChatResponseEmail(values);
91
87
  await initStartChat(optionalParams);
@@ -1,4 +1,4 @@
1
- import { LogLevel, TelemetryEvent } from "../../common/telemetry/TelemetryConstants";
1
+ import { BroadcastEvent, LogLevel, TelemetryEvent } from "../../common/telemetry/TelemetryConstants";
2
2
  import React, { useEffect, useState } from "react";
3
3
  import { createTimer, setFocusOnElement } from "../../common/utils";
4
4
  import { BroadcastService } from "@microsoft/omnichannel-chat-components";
@@ -24,6 +24,14 @@ export const ProactiveChatPaneStateful = props => {
24
24
  const handleProactiveChatInviteTimeout = () => {
25
25
  if (!timeoutRemoved) {
26
26
  setTimeoutRemoved(true);
27
+ dispatch({
28
+ type: LiveChatWidgetActionType.SET_PROACTIVE_CHAT_PARAMS,
29
+ payload: {
30
+ proactiveChatBodyTitle: "",
31
+ proactiveChatEnablePrechat: false,
32
+ proactiveChatInNewWindow: false
33
+ }
34
+ });
27
35
  dispatch({
28
36
  type: LiveChatWidgetActionType.SET_CONVERSATION_STATE,
29
37
  payload: ConversationState.Closed
@@ -51,7 +59,7 @@ export const ProactiveChatPaneStateful = props => {
51
59
  if (state.appStates.proactiveChatStates.proactiveChatInNewWindow) {
52
60
  // TODO: BroadcastService: replace with the sdk broadcast service, when in place
53
61
  const startPopoutChatEvent = {
54
- eventName: TelemetryEvent.ProactiveChatStartPopoutChat
62
+ eventName: BroadcastEvent.ProactiveChatStartPopoutChat
55
63
  };
56
64
  BroadcastService.postMessage(startPopoutChatEvent);
57
65
  dispatch({
@@ -69,7 +77,7 @@ export const ProactiveChatPaneStateful = props => {
69
77
  });
70
78
  } else {
71
79
  const proactiveChatStarted = {
72
- eventName: TelemetryEvent.ProactiveChatStartChat
80
+ eventName: BroadcastEvent.ProactiveChatStartChat
73
81
  };
74
82
  BroadcastService.postMessage(proactiveChatStarted);
75
83
  await startChat();
@@ -81,13 +89,21 @@ export const ProactiveChatPaneStateful = props => {
81
89
  Event: TelemetryEvent.ProactiveChatClosed,
82
90
  Description: "Proactive chat closed."
83
91
  });
92
+ dispatch({
93
+ type: LiveChatWidgetActionType.SET_PROACTIVE_CHAT_PARAMS,
94
+ payload: {
95
+ proactiveChatBodyTitle: "",
96
+ proactiveChatEnablePrechat: false,
97
+ proactiveChatInNewWindow: false
98
+ }
99
+ });
84
100
  dispatch({
85
101
  type: LiveChatWidgetActionType.SET_CONVERSATION_STATE,
86
102
  payload: ConversationState.Closed
87
103
  });
88
104
  },
89
105
  ...(proactiveChatProps === null || proactiveChatProps === void 0 ? void 0 : proactiveChatProps.controlProps),
90
- bodyTitleText: state.appStates.proactiveChatStates.proactiveChatBodyTitle ?? (proactiveChatProps === null || proactiveChatProps === void 0 ? void 0 : (_proactiveChatProps$c = proactiveChatProps.controlProps) === null || _proactiveChatProps$c === void 0 ? void 0 : _proactiveChatProps$c.bodyTitleText)
106
+ bodyTitleText: state.appStates.proactiveChatStates.proactiveChatBodyTitle ? state.appStates.proactiveChatStates.proactiveChatBodyTitle : proactiveChatProps === null || proactiveChatProps === void 0 ? void 0 : (_proactiveChatProps$c = proactiveChatProps.controlProps) === null || _proactiveChatProps$c === void 0 ? void 0 : _proactiveChatProps$c.bodyTitleText
91
107
  };
92
108
  useEffect(() => {
93
109
  setFocusOnElement(document.getElementById(controlProps.id + "-startbutton"));