@microsoft/omnichannel-chat-widget 0.1.0-main.02fa07b → 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 (118) hide show
  1. package/lib/cjs/common/Constants.js +2 -0
  2. package/lib/cjs/common/storage/default/defaultCacheManager.js +34 -0
  3. package/lib/cjs/common/storage/default/defaultClientDataStoreProvider.js +114 -0
  4. package/lib/cjs/common/storage/default/defaultInMemoryDataStore.js +86 -0
  5. package/lib/cjs/common/telemetry/TelemetryConstants.js +15 -0
  6. package/lib/cjs/common/telemetry/loggers/ariaTelemetryLogger.js +31 -18
  7. package/lib/cjs/common/utils.js +20 -7
  8. package/lib/cjs/components/confirmationpanestateful/ConfirmationPaneStateful.js +4 -4
  9. package/lib/cjs/components/emailtranscriptpanestateful/EmailTranscriptPaneStateful.js +4 -4
  10. package/lib/cjs/components/footerstateful/FooterStateful.js +5 -13
  11. package/lib/cjs/components/headerstateful/HeaderStateful.js +14 -7
  12. package/lib/cjs/components/livechatwidget/common/ActivityStreamHandler.js +44 -0
  13. package/lib/cjs/components/livechatwidget/common/ActivitySubscriber/DefaultActivitySubscriber.js +23 -0
  14. package/lib/cjs/components/livechatwidget/common/ActivitySubscriber/IActivitySubscriber.js +1 -0
  15. package/lib/cjs/components/livechatwidget/common/ActivitySubscriber/PauseActivitySubscriber.js +39 -0
  16. package/lib/cjs/components/livechatwidget/common/ChatAdapterShim.js +70 -0
  17. package/lib/cjs/components/livechatwidget/common/Deferred.js +42 -0
  18. package/lib/cjs/components/livechatwidget/common/authHelper.js +65 -0
  19. package/lib/cjs/components/livechatwidget/common/createAdapter.js +13 -1
  20. package/lib/cjs/components/livechatwidget/common/createFooter.js +7 -16
  21. package/lib/cjs/components/livechatwidget/common/createInternetConnectionChangeHandler.js +12 -0
  22. package/lib/cjs/components/livechatwidget/common/createMarkdown.js +31 -30
  23. package/lib/cjs/components/livechatwidget/common/defaultProps/dummyDefaultProps.js +23 -5
  24. package/lib/cjs/components/livechatwidget/common/endChat.js +3 -3
  25. package/lib/cjs/components/livechatwidget/common/initWebChatComposer.js +5 -2
  26. package/lib/cjs/components/livechatwidget/common/reconnectChatHelper.js +55 -35
  27. package/lib/cjs/components/livechatwidget/common/shareObservable.js +45 -0
  28. package/lib/cjs/components/livechatwidget/common/startChat.js +54 -21
  29. package/lib/cjs/components/livechatwidget/livechatwidgetstateful/LiveChatWidgetStateful.js +149 -62
  30. package/lib/cjs/components/prechatsurveypanestateful/PreChatSurveyPaneStateful.js +1 -1
  31. package/lib/cjs/components/webchatcontainerstateful/WebChatContainerStateful.js +16 -2
  32. package/lib/cjs/components/webchatcontainerstateful/common/defaultProps/defaultWebChatContainerStatefulProps.js +4 -1
  33. package/lib/cjs/components/webchatcontainerstateful/common/defaultStyles/defaultAdaptiveCardStyles.js +11 -0
  34. package/lib/cjs/components/webchatcontainerstateful/common/mockchatsdk.js +2 -0
  35. package/lib/cjs/components/webchatcontainerstateful/interfaces/IAdaptiveCardStyles.js +1 -0
  36. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityStatusMiddleware.js +2 -1
  37. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultReceivedMessageAnchorStyles.js +10 -0
  38. package/lib/cjs/contexts/common/LiveChatWidgetActionType.js +2 -1
  39. package/lib/cjs/contexts/common/LiveChatWidgetContextInitialState.js +13 -5
  40. package/lib/cjs/contexts/createReducer.js +10 -2
  41. package/lib/esm/common/Constants.js +2 -0
  42. package/lib/esm/common/storage/default/defaultCacheManager.js +19 -0
  43. package/lib/esm/common/storage/default/defaultClientDataStoreProvider.js +102 -0
  44. package/lib/esm/common/storage/default/defaultInMemoryDataStore.js +71 -0
  45. package/lib/esm/common/telemetry/TelemetryConstants.js +15 -0
  46. package/lib/esm/common/telemetry/loggers/ariaTelemetryLogger.js +29 -13
  47. package/lib/esm/common/utils.js +14 -5
  48. package/lib/esm/components/confirmationpanestateful/ConfirmationPaneStateful.js +4 -4
  49. package/lib/esm/components/emailtranscriptpanestateful/EmailTranscriptPaneStateful.js +4 -4
  50. package/lib/esm/components/footerstateful/FooterStateful.js +5 -13
  51. package/lib/esm/components/headerstateful/HeaderStateful.js +14 -7
  52. package/lib/esm/components/livechatwidget/common/ActivityStreamHandler.js +34 -0
  53. package/lib/esm/components/livechatwidget/common/ActivitySubscriber/DefaultActivitySubscriber.js +14 -0
  54. package/lib/esm/components/livechatwidget/common/ActivitySubscriber/IActivitySubscriber.js +1 -0
  55. package/lib/esm/components/livechatwidget/common/ActivitySubscriber/PauseActivitySubscriber.js +29 -0
  56. package/lib/esm/components/livechatwidget/common/ChatAdapterShim.js +59 -0
  57. package/lib/esm/components/livechatwidget/common/Deferred.js +33 -0
  58. package/lib/esm/components/livechatwidget/common/authHelper.js +50 -0
  59. package/lib/esm/components/livechatwidget/common/createAdapter.js +12 -2
  60. package/lib/esm/components/livechatwidget/common/createFooter.js +4 -15
  61. package/lib/esm/components/livechatwidget/common/createInternetConnectionChangeHandler.js +8 -0
  62. package/lib/esm/components/livechatwidget/common/createMarkdown.js +31 -30
  63. package/lib/esm/components/livechatwidget/common/defaultProps/dummyDefaultProps.js +23 -5
  64. package/lib/esm/components/livechatwidget/common/endChat.js +3 -3
  65. package/lib/esm/components/livechatwidget/common/initWebChatComposer.js +5 -2
  66. package/lib/esm/components/livechatwidget/common/reconnectChatHelper.js +56 -37
  67. package/lib/esm/components/livechatwidget/common/shareObservable.js +38 -0
  68. package/lib/esm/components/livechatwidget/common/startChat.js +50 -22
  69. package/lib/esm/components/livechatwidget/livechatwidgetstateful/LiveChatWidgetStateful.js +148 -64
  70. package/lib/esm/components/prechatsurveypanestateful/PreChatSurveyPaneStateful.js +1 -1
  71. package/lib/esm/components/webchatcontainerstateful/WebChatContainerStateful.js +14 -2
  72. package/lib/esm/components/webchatcontainerstateful/common/defaultProps/defaultWebChatContainerStatefulProps.js +3 -1
  73. package/lib/esm/components/webchatcontainerstateful/common/defaultStyles/defaultAdaptiveCardStyles.js +4 -0
  74. package/lib/esm/components/webchatcontainerstateful/common/mockchatsdk.js +2 -0
  75. package/lib/esm/components/webchatcontainerstateful/interfaces/IAdaptiveCardStyles.js +1 -0
  76. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityStatusMiddleware.js +2 -1
  77. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultReceivedMessageAnchorStyles.js +3 -0
  78. package/lib/esm/contexts/common/LiveChatWidgetActionType.js +2 -1
  79. package/lib/esm/contexts/common/LiveChatWidgetContextInitialState.js +11 -5
  80. package/lib/esm/contexts/createReducer.js +10 -2
  81. package/lib/types/common/Constants.d.ts +1 -0
  82. package/lib/types/common/storage/default/defaultCacheManager.d.ts +4 -0
  83. package/lib/types/common/storage/default/defaultClientDataStoreProvider.d.ts +2 -0
  84. package/lib/types/common/storage/default/defaultInMemoryDataStore.d.ts +6 -0
  85. package/lib/types/common/telemetry/TelemetryConstants.d.ts +7 -1
  86. package/lib/types/common/telemetry/TelemetryHelper.d.ts +1 -1
  87. package/lib/types/common/utils.d.ts +5 -4
  88. package/lib/types/components/footerstateful/downloadtranscriptstateful/DownloadTranscriptStateful.d.ts +1 -1
  89. package/lib/types/components/headerstateful/interfaces/IHeaderStatefulParams.d.ts +2 -1
  90. package/lib/types/components/livechatwidget/common/ActivityStreamHandler.d.ts +14 -0
  91. package/lib/types/components/livechatwidget/common/ActivitySubscriber/DefaultActivitySubscriber.d.ts +5 -0
  92. package/lib/types/components/livechatwidget/common/ActivitySubscriber/IActivitySubscriber.d.ts +6 -0
  93. package/lib/types/components/livechatwidget/common/ActivitySubscriber/PauseActivitySubscriber.d.ts +7 -0
  94. package/lib/types/components/livechatwidget/common/ChatAdapterShim.d.ts +7 -0
  95. package/lib/types/components/livechatwidget/common/Deferred.d.ts +9 -0
  96. package/lib/types/components/livechatwidget/common/authHelper.d.ts +5 -0
  97. package/lib/types/components/livechatwidget/common/endChat.d.ts +1 -1
  98. package/lib/types/components/livechatwidget/common/reconnectChatHelper.d.ts +5 -4
  99. package/lib/types/components/livechatwidget/common/setPostChatContextAndLoadSurvey.d.ts +1 -1
  100. package/lib/types/components/livechatwidget/common/shareObservable.d.ts +1 -0
  101. package/lib/types/components/livechatwidget/common/startChat.d.ts +3 -2
  102. package/lib/types/components/livechatwidget/common/startProactiveChat.d.ts +1 -1
  103. package/lib/types/components/livechatwidget/interfaces/ILiveChatWidgetControlProps.d.ts +1 -0
  104. package/lib/types/components/livechatwidget/interfaces/ILiveChatWidgetProps.d.ts +1 -0
  105. package/lib/types/components/reconnectchatpanestateful/interfaces/IReconnectChatPaneStatefulProps.d.ts +0 -1
  106. package/lib/types/components/webchatcontainerstateful/common/defaultStyles/defaultAdaptiveCardStyles.d.ts +2 -0
  107. package/lib/types/components/webchatcontainerstateful/common/mockchatsdk.d.ts +1 -0
  108. package/lib/types/components/webchatcontainerstateful/interfaces/IAdaptiveCardStyles.d.ts +4 -0
  109. package/lib/types/components/webchatcontainerstateful/interfaces/IRenderingMiddlewareProps.d.ts +2 -1
  110. package/lib/types/components/webchatcontainerstateful/interfaces/IWebChatContainerStatefulProps.d.ts +2 -0
  111. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityMiddleware.d.ts +1 -1
  112. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityStatusMiddleware.d.ts +1 -1
  113. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/avatarMiddleware.d.ts +1 -1
  114. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultReceivedMessageAnchorStyles.d.ts +2 -0
  115. package/lib/types/contexts/common/ILiveChatWidgetContext.d.ts +2 -1
  116. package/lib/types/contexts/common/LiveChatWidgetActionType.d.ts +3 -2
  117. package/lib/types/contexts/common/LiveChatWidgetContextInitialState.d.ts +1 -2
  118. package/package.json +4 -3
@@ -12,15 +12,20 @@ import { createTimer, getStateFromCache, isUndefinedOrEmpty } from "../../../com
12
12
  import { getReconnectIdForAuthenticatedChat, handleRedirectUnauthenticatedReconnectChat } from "./reconnectChatHelper";
13
13
  import { setPostChatContextAndLoadSurvey } from "./setPostChatContextAndLoadSurvey";
14
14
  import { updateSessionDataForTelemetry } from "./updateSessionDataForTelemetry";
15
- import { BroadcastService } from "@microsoft/omnichannel-chat-components"; // eslint-disable-next-line @typescript-eslint/no-explicit-any
15
+ import { BroadcastService } from "@microsoft/omnichannel-chat-components";
16
+ import { ActivityStreamHandler } from "./ActivityStreamHandler";
17
+ import { getAuthClientFunction, handleAuthentication } from "./authHelper"; // eslint-disable-next-line @typescript-eslint/no-explicit-any
16
18
 
17
19
  let optionalParams = {}; // eslint-disable-next-line @typescript-eslint/no-explicit-any
18
20
 
21
+ let widgetInstanceId; // eslint-disable-next-line @typescript-eslint/no-explicit-any
22
+
19
23
  const prepareStartChat = async (props, chatSDK, state, dispatch, setAdapter) => {
20
- var _props$reconnectChatP;
24
+ var _props$controlProps, _props$reconnectChatP;
21
25
 
22
26
  optionalParams = {}; //Resetting to ensure no stale values
23
- // Can connect to existing chat session
27
+
28
+ widgetInstanceId = props === null || props === void 0 ? void 0 : (_props$controlProps = props.controlProps) === null || _props$controlProps === void 0 ? void 0 : _props$controlProps.widgetInstanceId; // Can connect to existing chat session
24
29
 
25
30
  if (await canConnectToExistingChat(props, chatSDK, state, dispatch, setAdapter)) {
26
31
  return;
@@ -28,9 +33,9 @@ const prepareStartChat = async (props, chatSDK, state, dispatch, setAdapter) =>
28
33
 
29
34
 
30
35
  if ((_props$reconnectChatP = props.reconnectChatPaneProps) !== null && _props$reconnectChatP !== void 0 && _props$reconnectChatP.reconnectId) {
31
- var _props$reconnectChatP2, _props$reconnectChatP3;
36
+ var _props$reconnectChatP2, _props$reconnectChatP3, _props$reconnectChatP4;
32
37
 
33
- await handleRedirectUnauthenticatedReconnectChat(chatSDK, dispatch, setAdapter, initStartChat, (_props$reconnectChatP2 = props.reconnectChatPaneProps) === null || _props$reconnectChatP2 === void 0 ? void 0 : _props$reconnectChatP2.reconnectId, (_props$reconnectChatP3 = props.reconnectChatPaneProps) === null || _props$reconnectChatP3 === void 0 ? void 0 : _props$reconnectChatP3.redirectInSameWindow);
38
+ await handleRedirectUnauthenticatedReconnectChat(chatSDK, props.chatConfig, props.getAuthToken, dispatch, setAdapter, initStartChat, (_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, (_props$reconnectChatP4 = props.reconnectChatPaneProps) === null || _props$reconnectChatP4 === void 0 ? void 0 : _props$reconnectChatP4.redirectInSameWindow);
34
39
  return;
35
40
  } // Getting reconnectId for authenticated chat
36
41
 
@@ -47,19 +52,17 @@ const prepareStartChat = async (props, chatSDK, state, dispatch, setAdapter) =>
47
52
  payload: ConversationState.ReconnectChat
48
53
  });
49
54
  return;
50
- } // Set custom context params
55
+ } // Setting Proactive chat settings
51
56
 
52
57
 
53
- setCustomContextParams(props, chatSDK); // Setting Proactive chat settings
54
-
55
58
  const isProactiveChat = state.appStates.conversationState === ConversationState.ProactiveChat;
56
59
  const isPreChatEnabledInProactiveChat = state.appStates.proactiveChatStates.proactiveChatEnablePrechat; //Setting PreChat and intiate chat
57
60
 
58
- setPreChatAndInitiateChat(chatSDK, dispatch, setAdapter, isProactiveChat, isPreChatEnabledInProactiveChat);
61
+ setPreChatAndInitiateChat(chatSDK, props.chatConfig, props.getAuthToken, dispatch, setAdapter, isProactiveChat, isPreChatEnabledInProactiveChat);
59
62
  }; // eslint-disable-next-line @typescript-eslint/no-explicit-any
60
63
 
61
64
 
62
- const setPreChatAndInitiateChat = async (chatSDK, dispatch, setAdapter, isProactiveChat, proactiveChatEnablePrechatState) => {
65
+ const setPreChatAndInitiateChat = async (chatSDK, chatConfig, getAuthToken, dispatch, setAdapter, isProactiveChat, proactiveChatEnablePrechatState) => {
63
66
  // Getting prechat Survey Context
64
67
  const parseToJson = false;
65
68
  const preChatSurveyResponse = await chatSDK.getPreChatSurvey(parseToJson);
@@ -82,14 +85,25 @@ const setPreChatAndInitiateChat = async (chatSDK, dispatch, setAdapter, isProact
82
85
  type: LiveChatWidgetActionType.SET_CONVERSATION_STATE,
83
86
  payload: ConversationState.Loading
84
87
  });
85
- await initStartChat(chatSDK, dispatch, setAdapter);
88
+ await initStartChat(chatSDK, chatConfig, getAuthToken, dispatch, setAdapter);
86
89
  }; // eslint-disable-next-line @typescript-eslint/no-explicit-any
87
90
 
88
91
 
89
- const initStartChat = async (chatSDK, dispatch, setAdapter, params, persistedState) => {
92
+ const initStartChat = async (chatSDK, chatConfig, getAuthToken, dispatch, setAdapter, params, persistedState) => {
90
93
  try {
91
94
  var _newAdapter$activity$, _TelemetryTimers$Widg;
92
95
 
96
+ const authClientFunction = getAuthClientFunction(chatConfig);
97
+
98
+ if (getAuthToken && authClientFunction) {
99
+ // set auth token to chat sdk before start chat
100
+ const authSuccess = await handleAuthentication(chatSDK, chatConfig, getAuthToken);
101
+
102
+ if (!authSuccess) {
103
+ return;
104
+ }
105
+ }
106
+
93
107
  let isStartChatSuccessful = false; //Check if chat retrieved from cache
94
108
 
95
109
  if (persistedState || params !== null && params !== void 0 && params.liveChatContext) {
@@ -109,8 +123,9 @@ const initStartChat = async (chatSDK, dispatch, setAdapter, params, persistedSta
109
123
  TelemetryTimers.WidgetLoadTimer = createTimer();
110
124
  TelemetryHelper.logSDKEvent(LogLevel.INFO, {
111
125
  Event: TelemetryEvent.StartChatSDKCall
112
- }); // Set optional params
126
+ }); // Set custom context params
113
127
 
128
+ setCustomContextParams(chatSDK);
114
129
  optionalParams = Object.assign({}, params, optionalParams);
115
130
  await chatSDK.startChat(optionalParams);
116
131
  isStartChatSuccessful = true;
@@ -162,6 +177,7 @@ const initStartChat = async (chatSDK, dispatch, setAdapter, params, persistedSta
162
177
  await updateSessionDataForTelemetry(chatSDK, dispatch); // Set app state to Active
163
178
 
164
179
  if (isStartChatSuccessful) {
180
+ ActivityStreamHandler.uncork();
165
181
  dispatch({
166
182
  type: LiveChatWidgetActionType.SET_CONVERSATION_STATE,
167
183
  payload: ConversationState.Active
@@ -194,19 +210,20 @@ const initStartChat = async (chatSDK, dispatch, setAdapter, params, persistedSta
194
210
  }
195
211
  } finally {
196
212
  optionalParams = {};
213
+ widgetInstanceId = "";
197
214
  }
198
215
  }; // eslint-disable-next-line @typescript-eslint/no-explicit-any
199
216
 
200
217
 
201
218
  const canConnectToExistingChat = async (props, chatSDK, state, dispatch, setAdapter) => {
202
- var _chatSDK$omnichannelC, _chatSDK$omnichannelC2, _persistedState$domai6, _persistedState$appSt;
219
+ var _chatSDK$omnichannelC, _chatSDK$omnichannelC2, _props$controlProps2, _persistedState$domai6, _persistedState$appSt;
203
220
 
204
221
  // By pass this function in case of popout chat
205
222
  if (state.appStates.skipChatButtonRendering === true) {
206
223
  return false;
207
224
  }
208
225
 
209
- 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); //Connect to only active chat session
226
+ 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, (props === null || props === void 0 ? void 0 : (_props$controlProps2 = props.controlProps) === null || _props$controlProps2 === void 0 ? void 0 : _props$controlProps2.widgetInstanceId) ?? ""); //Connect to only active chat session
210
227
 
211
228
  if (persistedState && !isUndefinedOrEmpty(persistedState === null || persistedState === void 0 ? void 0 : (_persistedState$domai6 = persistedState.domainStates) === null || _persistedState$domai6 === void 0 ? void 0 : _persistedState$domai6.liveChatContext) && (persistedState === null || persistedState === void 0 ? void 0 : (_persistedState$appSt = persistedState.appStates) === null || _persistedState$appSt === void 0 ? void 0 : _persistedState$appSt.conversationState) === ConversationState.Active) {
212
229
  var _persistedState$domai7;
@@ -218,7 +235,7 @@ const canConnectToExistingChat = async (props, chatSDK, state, dispatch, setAdap
218
235
  const optionalParams = {
219
236
  liveChatContext: persistedState === null || persistedState === void 0 ? void 0 : (_persistedState$domai7 = persistedState.domainStates) === null || _persistedState$domai7 === void 0 ? void 0 : _persistedState$domai7.liveChatContext
220
237
  };
221
- await initStartChat(chatSDK, dispatch, setAdapter, optionalParams, persistedState);
238
+ await initStartChat(chatSDK, props.chatConfig, props.getAuthToken, dispatch, setAdapter, optionalParams, persistedState);
222
239
  return true;
223
240
  } else {
224
241
  return false;
@@ -226,17 +243,28 @@ const canConnectToExistingChat = async (props, chatSDK, state, dispatch, setAdap
226
243
  }; // eslint-disable-next-line @typescript-eslint/no-explicit-any
227
244
 
228
245
 
229
- const setCustomContextParams = (props, chatSDK) => {
230
- var _chatSDK$omnichannelC3, _chatSDK$omnichannelC4, _props$chatConfig, _persistedState$domai8;
246
+ const setCustomContextParams = chatSDK => {
247
+ var _chatSDK$omnichannelC3, _chatSDK$omnichannelC4, _persistedState$domai8;
231
248
 
232
249
  // Add custom context only for unauthenticated chat
233
- 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);
250
+ 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, widgetInstanceId ?? "");
251
+
252
+ if (!isUndefinedOrEmpty(persistedState === null || persistedState === void 0 ? void 0 : (_persistedState$domai8 = persistedState.domainStates) === null || _persistedState$domai8 === void 0 ? void 0 : _persistedState$domai8.customContext)) {
253
+ var _persistedState$domai9, _persistedState$domai10;
234
254
 
235
- if (!((_props$chatConfig = props.chatConfig) !== null && _props$chatConfig !== void 0 && _props$chatConfig.LiveChatConfigAuthSettings) && !isUndefinedOrEmpty(persistedState === null || persistedState === void 0 ? void 0 : (_persistedState$domai8 = persistedState.domainStates) === null || _persistedState$domai8 === void 0 ? void 0 : _persistedState$domai8.customContext)) {
236
- var _persistedState$domai9;
255
+ if (persistedState !== null && persistedState !== void 0 && (_persistedState$domai9 = persistedState.domainStates.liveChatConfig) !== null && _persistedState$domai9 !== void 0 && _persistedState$domai9.LiveChatConfigAuthSettings) {
256
+ const errorMessage = "Use of custom context with authenticated chat is deprecated. The chat would not go through.";
257
+ TelemetryHelper.logSDKEvent(LogLevel.WARN, {
258
+ Event: TelemetryEvent.StartChatMethodException,
259
+ ExceptionDetails: {
260
+ exception: errorMessage
261
+ }
262
+ });
263
+ throw new Error(errorMessage);
264
+ }
237
265
 
238
266
  optionalParams = Object.assign({}, optionalParams, {
239
- customContext: persistedState === null || persistedState === void 0 ? void 0 : (_persistedState$domai9 = persistedState.domainStates) === null || _persistedState$domai9 === void 0 ? void 0 : _persistedState$domai9.customContext
267
+ customContext: persistedState === null || persistedState === void 0 ? void 0 : (_persistedState$domai10 = persistedState.domainStates) === null || _persistedState$domai10 === void 0 ? void 0 : _persistedState$domai10.customContext
240
268
  });
241
269
  }
242
270
  };
@@ -1,10 +1,10 @@
1
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
3
  import { BroadcastEvent, LogLevel, TelemetryEvent } from "../../../common/telemetry/TelemetryConstants";
4
- import { BroadcastService, decodeComponentString } from "@microsoft/omnichannel-chat-components";
4
+ import { BroadcastService, decodeComponentString, BroadcastServiceInitialize } from "@microsoft/omnichannel-chat-components";
5
5
  import { Stack } from "@fluentui/react";
6
6
  import React, { useEffect, useRef, useState } from "react";
7
- import { createTimer, getLocaleDirection, getStateFromCache, getWidgetCacheId, getWidgetEndChatEventName, isUndefinedOrEmpty } from "../../../common/utils";
7
+ import { createTimer, getBroadcastChannelName, getLocaleDirection, getStateFromCache, getWidgetCacheId, getWidgetEndChatEventName, isNullOrEmptyString, isUndefinedOrEmpty } from "../../../common/utils";
8
8
  import { getReconnectIdForAuthenticatedChat, handleUnauthenticatedReconnectChat, startUnauthenticatedReconnectChat } from "../common/reconnectChatHelper";
9
9
  import { initStartChat, prepareStartChat, setPreChatAndInitiateChat } from "../common/startChat";
10
10
  import { shouldShowCallingContainer, shouldShowChatButton, shouldShowConfirmationPane, shouldShowEmailTranscriptPane, shouldShowHeader, shouldShowLoadingPane, shouldShowOutOfOfficeHoursPane, shouldShowPostChatLoadingPane, shouldShowPostChatSurveyPane, shouldShowPreChatSurveyPane, shouldShowProactiveChatPane, shouldShowReconnectChatPane, shouldShowWebChatContainer } from "../../../controller/componentController";
@@ -43,8 +43,11 @@ import { startProactiveChat } from "../common/startProactiveChat";
43
43
  import useChatAdapterStore from "../../../hooks/useChatAdapterStore";
44
44
  import useChatContextStore from "../../../hooks/useChatContextStore";
45
45
  import useChatSDKStore from "../../../hooks/useChatSDKStore";
46
+ import { ActivityStreamHandler } from "../common/ActivityStreamHandler";
47
+ import { registerBroadcastServiceForLocalStorage } from "../../../common/storage/default/defaultCacheManager";
48
+ import { defaultClientDataStoreProvider } from "../../../common/storage/default/defaultClientDataStoreProvider";
46
49
  export const LiveChatWidgetStateful = props => {
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;
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;
48
51
 
49
52
  const [state, dispatch] = useChatContextStore(); // eslint-disable-next-line @typescript-eslint/no-explicit-any
50
53
 
@@ -64,27 +67,28 @@ export const LiveChatWidgetStateful = props => {
64
67
  const generalStyles = {
65
68
  root: Object.assign({}, getGeneralStylesForButton(state), (_props$styleProps = props.styleProps) === null || _props$styleProps === void 0 ? void 0 : _props$styleProps.generalStyles)
66
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);
67
72
  TelemetryTimers.LcwLoadToChatButtonTimer = createTimer();
68
- 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";
69
74
  const currentMessageCountRef = useRef(0);
70
75
  let widgetStateEventName = "";
71
76
 
72
77
  const initiateEndChatOnBrowserUnload = () => {
73
- var _chatSDK$omnichannelC, _chatSDK$omnichannelC2, _DataStoreManager$cli;
78
+ var _DataStoreManager$cli;
74
79
 
75
80
  TelemetryHelper.logActionEvent(LogLevel.INFO, {
76
81
  Event: TelemetryEvent.BrowserUnloadEventStarted,
77
82
  Description: "Browser unload event received."
78
83
  });
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
84
+ endChat(props, chatSDK, setAdapter, setWebChatStyles, dispatch, adapter, false, false, false); // Clean local storage
80
85
 
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
86
+ (_DataStoreManager$cli = DataStoreManager.clientDataStore) === null || _DataStoreManager$cli === void 0 ? void 0 : _DataStoreManager$cli.removeData(widgetStateEventName, "localStorage"); //Dispose calling instance
85
87
 
88
+ if (voiceVideoCallingSDK) {
89
+ voiceVideoCallingSDK === null || voiceVideoCallingSDK === void 0 ? void 0 : voiceVideoCallingSDK.close();
90
+ } //Message for clearing window[popouTab]
86
91
 
87
- (_DataStoreManager$cli = DataStoreManager.clientDataStore) === null || _DataStoreManager$cli === void 0 ? void 0 : _DataStoreManager$cli.removeData(widgetStateEventName, "localStorage"); //Message for clearing window[popouTab]
88
92
 
89
93
  BroadcastService.postMessage({
90
94
  eventName: BroadcastEvent.ClosePopoutWindow
@@ -92,59 +96,91 @@ export const LiveChatWidgetStateful = props => {
92
96
  };
93
97
 
94
98
  useEffect(() => {
95
- var _props$controlProps2, _props$controlProps3, _props$reconnectChatP, _props$controlProps4, _props$chatConfig, _props$chatConfig$Cha, _props$chatConfig2, _props$chatConfig2$Li;
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
+ }
96
110
 
97
111
  registerTelemetryLoggers(props, dispatch);
98
112
  createInternetConnectionChangeHandler();
99
- DataStoreManager.clientDataStore = props.contextDataStore ?? undefined;
100
113
  dispatch({
101
114
  type: LiveChatWidgetActionType.SET_WIDGET_ELEMENT_ID,
102
115
  payload: widgetElementId
103
116
  });
104
117
  dispatch({
105
118
  type: LiveChatWidgetActionType.SET_SKIP_CHAT_BUTTON_RENDERING,
106
- 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
107
120
  });
108
121
  dispatch({
109
122
  type: LiveChatWidgetActionType.SET_E2VV_ENABLED,
110
123
  payload: false
111
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
+
112
135
  initCallingSdk(chatSDK, setVoiceVideoCallingSDK).then(sdkCreated => {
113
136
  sdkCreated && dispatch({
114
137
  type: LiveChatWidgetActionType.SET_E2VV_ENABLED,
115
138
  payload: true
116
139
  });
117
- });
118
-
119
- 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) {
120
- var _props$reconnectChatP2;
121
-
122
- startUnauthenticatedReconnectChat(chatSDK, dispatch, setAdapter, (_props$reconnectChatP2 = props.reconnectChatPaneProps) === null || _props$reconnectChatP2 === void 0 ? void 0 : _props$reconnectChatP2.reconnectId, initStartChat);
123
- } // Initialize global dir
124
-
140
+ }); // Initialize global dir
125
141
 
126
- 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);
127
143
  dispatch({
128
144
  type: LiveChatWidgetActionType.SET_GLOBAL_DIR,
129
145
  payload: globalDir
130
- }); //Check if auth settings enabled, do not connect to existing chat from cache during refresh/re-load
146
+ });
147
+
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
131
155
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
132
156
 
157
+
133
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;
134
- console.log("isAuthenticationSettingsEnabled:" + isAuthenticationSettingsEnabled);
135
159
 
136
- if (!isAuthenticationSettingsEnabled) {
137
- var _state$domainStates;
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
+ }
138
175
 
139
- if (!isUndefinedOrEmpty((_state$domainStates = state.domainStates) === null || _state$domainStates === void 0 ? void 0 : _state$domainStates.liveChatContext) && state.appStates.conversationState === ConversationState.Active) {
140
- var _state$domainStates2;
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) {
177
+ var _state$domainStates2;
141
178
 
142
- const optionalParams = {
143
- liveChatContext: (_state$domainStates2 = state.domainStates) === null || _state$domainStates2 === void 0 ? void 0 : _state$domainStates2.liveChatContext
144
- };
145
- initStartChat(chatSDK, dispatch, setAdapter, optionalParams);
146
- return;
147
- }
179
+ const optionalParams = {
180
+ liveChatContext: (_state$domainStates2 = state.domainStates) === null || _state$domainStates2 === void 0 ? void 0 : _state$domainStates2.liveChatContext
181
+ };
182
+ initStartChat(chatSDK, props.chatConfig, props.getAuthToken, dispatch, setAdapter, optionalParams);
183
+ return;
148
184
  } // All other case should show start chat button, skipChatButtonRendering will take care of it own
149
185
 
150
186
 
@@ -156,16 +192,16 @@ export const LiveChatWidgetStateful = props => {
156
192
 
157
193
  useEffect(() => {
158
194
  if (state.appStates.skipChatButtonRendering) {
159
- var _props$reconnectChatP3;
195
+ var _props$reconnectChatP5;
160
196
 
161
197
  BroadcastService.postMessage({
162
198
  eventName: BroadcastEvent.ChatInitiated
163
199
  });
164
200
 
165
- if ((_props$reconnectChatP3 = props.reconnectChatPaneProps) !== null && _props$reconnectChatP3 !== void 0 && _props$reconnectChatP3.reconnectId && !state.appStates.reconnectId) {
166
- var _props$reconnectChatP4, _props$reconnectChatP5;
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;
167
203
 
168
- handleUnauthenticatedReconnectChat(chatSDK, dispatch, setAdapter, (_props$reconnectChatP4 = props.reconnectChatPaneProps) === null || _props$reconnectChatP4 === void 0 ? void 0 : _props$reconnectChatP4.reconnectId, initStartChat, (_props$reconnectChatP5 = props.reconnectChatPaneProps) === null || _props$reconnectChatP5 === void 0 ? void 0 : _props$reconnectChatP5.redirectInSameWindow);
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);
169
205
  } else {
170
206
  getReconnectIdForAuthenticatedChat(props, chatSDK).then(authReconnectId => {
171
207
  if (authReconnectId && !state.appStates.reconnectId) {
@@ -178,11 +214,23 @@ export const LiveChatWidgetStateful = props => {
178
214
  payload: ConversationState.ReconnectChat
179
215
  });
180
216
  } else {
217
+ var _state$domainStates3;
218
+
181
219
  const chatStartedSkippingChatButtonRendering = {
182
220
  eventName: BroadcastEvent.StartChatSkippingChatButtonRendering
183
221
  };
184
222
  BroadcastService.postMessage(chatStartedSkippingChatButtonRendering);
185
- setPreChatAndInitiateChat(chatSDK, dispatch, setAdapter);
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
+ }
186
234
  }
187
235
  });
188
236
  }
@@ -190,7 +238,7 @@ export const LiveChatWidgetStateful = props => {
190
238
  }, [state.appStates.skipChatButtonRendering]); // useEffect for when skip chat button rendering
191
239
 
192
240
  useEffect(() => {
193
- var _chatSDK$omnichannelC7, _chatSDK$omnichannelC8;
241
+ var _chatSDK$omnichannelC8, _chatSDK$omnichannelC9, _props$controlProps12;
194
242
 
195
243
  // Add the custom context on receiving the SetCustomContext event
196
244
  BroadcastService.getMessageByEventName(BroadcastEvent.SetCustomContext).subscribe(msg => {
@@ -209,7 +257,7 @@ export const LiveChatWidgetStateful = props => {
209
257
  Description: "Start proactive chat event received."
210
258
  });
211
259
 
212
- if (canStartProactiveChat.current) {
260
+ if (canStartProactiveChat.current === true) {
213
261
  var _msg$payload, _msg$payload2, _msg$payload3;
214
262
 
215
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);
@@ -222,24 +270,36 @@ export const LiveChatWidgetStateful = props => {
222
270
  }); // Start chat from SDK Event
223
271
 
224
272
  BroadcastService.getMessageByEventName(BroadcastEvent.StartChat).subscribe(() => {
225
- var _chatSDK$omnichannelC3, _chatSDK$omnichannelC4;
273
+ var _chatSDK$omnichannelC4, _chatSDK$omnichannelC5, _props$controlProps10;
226
274
 
227
275
  TelemetryHelper.logActionEvent(LogLevel.INFO, {
228
276
  Event: TelemetryEvent.StartChatEventRecevied,
229
277
  Description: "Start chat event received."
230
278
  });
231
- 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);
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
232
280
 
233
- if (persistedState && (persistedState.appStates.conversationState === ConversationState.Closed || persistedState.appStates.conversationState === ConversationState.InActive || persistedState.appStates.conversationState === ConversationState.Postchat)) {
234
- // Embedded mode
281
+ if (persistedState === undefined) {
235
282
  BroadcastService.postMessage({
236
283
  eventName: BroadcastEvent.ChatInitiated
237
284
  });
238
285
  prepareStartChat(props, chatSDK, state, dispatch, setAdapter);
239
- } else {
286
+ return;
287
+ } // Chat exist in cache
288
+
289
+
290
+ if (persistedState) {
240
291
  var _persistedState$domai, _persistedState$domai2, _persistedState$domai3, _persistedState$domai4;
241
292
 
242
- // Minimize to Maximize
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
+
243
303
  dispatch({
244
304
  type: LiveChatWidgetActionType.SET_MINIMIZED,
245
305
  payload: false
@@ -256,10 +316,10 @@ export const LiveChatWidgetStateful = props => {
256
316
 
257
317
  BroadcastService.getMessageByEventName(BroadcastEvent.InitiateEndChat).subscribe(async () => {
258
318
  if (state.appStates.skipChatButtonRendering !== true) {
259
- var _chatSDK$omnichannelC5, _chatSDK$omnichannelC6;
319
+ var _chatSDK$omnichannelC6, _chatSDK$omnichannelC7, _props$controlProps11;
260
320
 
261
321
  // This is to ensure to get latest state from cache in multitab
262
- 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);
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) ?? "");
263
323
 
264
324
  if (persistedState && persistedState.appStates.conversationState === ConversationState.Active) {
265
325
  prepareEndChat(props, chatSDK, setAdapter, setWebChatStyles, dispatch, adapter, state);
@@ -279,9 +339,10 @@ export const LiveChatWidgetStateful = props => {
279
339
  initiateEndChatOnBrowserUnload();
280
340
  }); // Listen to end chat event from other tabs
281
341
 
282
- 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);
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) ?? "");
283
343
  BroadcastService.getMessageByEventName(endChatEventName).subscribe(async () => {
284
344
  endChat(props, chatSDK, setAdapter, setWebChatStyles, dispatch, adapter, false, false, false);
345
+ return;
285
346
  }); // When conversation ended by agent
286
347
 
287
348
  if (state.appStates.conversationEndedByAgent) {
@@ -321,6 +382,12 @@ export const LiveChatWidgetStateful = props => {
321
382
  }, [state.appStates.conversationState, state.appStates.proactiveChatStates.proactiveChatInNewWindow]); // Reset the UnreadMessageCount when minimized is toggled and broadcast it.
322
383
 
323
384
  useEffect(() => {
385
+ if (state.appStates.isMinimized) {
386
+ ActivityStreamHandler.cork();
387
+ } else {
388
+ setTimeout(() => ActivityStreamHandler.uncork(), 500);
389
+ }
390
+
324
391
  currentMessageCountRef.current = -1;
325
392
  dispatch({
326
393
  type: LiveChatWidgetActionType.SET_UNREAD_MESSAGE_COUNT,
@@ -353,9 +420,26 @@ export const LiveChatWidgetStateful = props => {
353
420
  }, [(_props$webChatContain3 = props.webChatContainerProps) === null || _props$webChatContain3 === void 0 ? void 0 : _props$webChatContain3.webChatStyles]); // Publish chat widget state
354
421
 
355
422
  useEffect(() => {
356
- var _props$chatSDK, _props$chatSDK$omnich, _props$chatSDK2, _props$chatSDK2$omnic;
357
-
358
- 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);
423
+ var _props$chatSDK, _props$chatSDK$omnich, _props$chatSDK2, _props$chatSDK2$omnic, _props$controlProps13;
424
+
425
+ // Only activate these windows events when conversation state is active and chat widget is in popout mode
426
+ // Ghost chat scenarios
427
+
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) ?? "");
359
443
  const chatWidgetStateChangeEvent = {
360
444
  eventName: widgetStateEventName,
361
445
  payload: { ...state
@@ -368,7 +452,7 @@ export const LiveChatWidgetStateful = props => {
368
452
  const setPostChatContextRelay = () => setPostChatContextAndLoadSurvey(chatSDK, dispatch); // eslint-disable-next-line @typescript-eslint/no-explicit-any
369
453
 
370
454
 
371
- const endChatRelay = (adapter, skipEndChatSDK, skipCloseChat) => endChat(props, chatSDK, setAdapter, setWebChatStyles, dispatch, adapter, skipEndChatSDK, skipCloseChat); // eslint-disable-next-line @typescript-eslint/no-explicit-any
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
372
456
 
373
457
 
374
458
  const prepareEndChatRelay = (adapter, state) => prepareEndChat(props, chatSDK, setAdapter, setWebChatStyles, dispatch, adapter, state);
@@ -376,7 +460,7 @@ export const LiveChatWidgetStateful = props => {
376
460
  const prepareStartChatRelay = () => prepareStartChat(props, chatSDK, state, dispatch, setAdapter); // eslint-disable-next-line @typescript-eslint/no-explicit-any
377
461
 
378
462
 
379
- const initStartChatRelay = (optionalParams, persistedState) => initStartChat(chatSDK, dispatch, setAdapter, optionalParams, persistedState);
463
+ const initStartChatRelay = (optionalParams, persistedState) => initStartChat(chatSDK, props.chatConfig, props.getAuthToken, dispatch, setAdapter, optionalParams, persistedState);
380
464
 
381
465
  const confirmationPaneProps = initConfirmationPropsComposer(props);
382
466
  return /*#__PURE__*/React.createElement(Composer, _extends({}, webChatProps, {
@@ -386,28 +470,28 @@ export const LiveChatWidgetStateful = props => {
386
470
  id: widgetElementId,
387
471
  styles: generalStyles,
388
472
  className: (_props$styleProps2 = props.styleProps) === null || _props$styleProps2 === void 0 ? void 0 : _props$styleProps2.className
389
- }, !((_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, {
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, {
390
474
  buttonProps: props.chatButtonProps,
391
475
  outOfOfficeButtonProps: props.outOfOfficeChatButtonProps,
392
476
  startChat: prepareStartChatRelay
393
- })), !((_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, {
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, {
394
478
  proactiveChatProps: props.proactiveChatPaneProps,
395
479
  startChat: prepareStartChatRelay
396
- })), !((_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, {
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, {
397
481
  headerProps: props.headerProps,
398
482
  outOfOfficeHeaderProps: props.outOfOfficeHeaderProps,
399
483
  endChat: endChatRelay
400
- })), !((_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, {
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, {
401
485
  reconnectChatProps: props.reconnectChatPaneProps,
402
486
  initStartChat: initStartChatRelay
403
- })), !((_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, {
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, {
404
488
  surveyProps: props.preChatSurveyPaneProps,
405
489
  initStartChat: initStartChatRelay
406
- })), !((_props$controlProps13 = props.controlProps) !== null && _props$controlProps13 !== void 0 && _props$controlProps13.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({
407
491
  voiceVideoCallingSdk: voiceVideoCallingSDK
408
- }, 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, {
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, {
409
493
  setPostChatContext: setPostChatContextRelay,
410
494
  prepareEndChat: prepareEndChatRelay
411
- }))), !((_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))));
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))));
412
496
  };
413
497
  export default LiveChatWidgetStateful;