@microsoft/omnichannel-chat-widget 0.1.0-main.0ec5410 → 0.1.0-main.1f10a2e

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 (103) hide show
  1. package/README.md +35 -11
  2. package/lib/cjs/common/Constants.js +48 -6
  3. package/lib/cjs/common/telemetry/TelemetryConstants.js +32 -3
  4. package/lib/cjs/common/telemetry/TelemetryHelper.js +13 -0
  5. package/lib/cjs/common/telemetry/TelemetryManager.js +16 -5
  6. package/lib/cjs/common/telemetry/defaultConfigs/defaultAriaConfig.js +1 -1
  7. package/lib/cjs/common/telemetry/defaultConfigs/defaultTelemetryConfiguration.js +4 -1
  8. package/lib/cjs/common/telemetry/loggers/ariaTelemetryLogger.js +33 -13
  9. package/lib/cjs/common/telemetry/loggers/consoleLogger.js +6 -5
  10. package/lib/cjs/common/utils.js +30 -2
  11. package/lib/cjs/components/callingcontainerstateful/CallingContainerStateful.js +14 -0
  12. package/lib/cjs/components/chatbuttonstateful/ChatButtonStateful.js +16 -4
  13. package/lib/cjs/components/confirmationpanestateful/ConfirmationPaneStateful.js +4 -39
  14. package/lib/cjs/components/footerstateful/FooterStateful.js +1 -2
  15. package/lib/cjs/components/footerstateful/downloadtranscriptstateful/DownloadTranscriptStateful.js +11 -2
  16. package/lib/cjs/components/headerstateful/HeaderStateful.js +1 -7
  17. package/lib/cjs/components/livechatwidget/common/defaultProps/dummyDefaultProps.js +12 -15
  18. package/lib/cjs/components/livechatwidget/common/endChat.js +63 -12
  19. package/lib/cjs/components/livechatwidget/common/initCallingSdk.js +1 -1
  20. package/lib/cjs/components/livechatwidget/common/initWebChatComposer.js +15 -3
  21. package/lib/cjs/components/livechatwidget/common/reconnectChatHelper.js +105 -20
  22. package/lib/cjs/components/livechatwidget/common/registerTelemetryLoggers.js +6 -17
  23. package/lib/cjs/components/livechatwidget/common/startChat.js +87 -39
  24. package/lib/cjs/components/livechatwidget/livechatwidgetstateful/LiveChatWidgetStateful.js +186 -34
  25. package/lib/cjs/components/postchatloadingpanestateful/PostChatLoadingPaneStateful.js +8 -0
  26. package/lib/cjs/components/prechatsurveypanestateful/PreChatSurveyPaneStateful.js +4 -5
  27. package/lib/cjs/components/proactivechatpanestateful/ProactiveChatPaneStateful.js +16 -0
  28. package/lib/cjs/components/webchatcontainerstateful/WebChatContainerStateful.js +80 -0
  29. package/lib/cjs/components/webchatcontainerstateful/interfaces/IBotMagicCodeConfig.js +1 -0
  30. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/BotMagicCodeStore.js +14 -0
  31. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityMiddleware.js +16 -2
  32. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/cardActionMiddleware.js +52 -0
  33. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/cardActionMiddleware.spec.js +98 -0
  34. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/messageTimestampMiddleware.js +117 -0
  35. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/conversationEndMiddleware.js +6 -6
  36. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/webchattelemetry/WebChatLogger.js +45 -0
  37. package/lib/cjs/contexts/common/LiveChatWidgetActionType.js +9 -7
  38. package/lib/cjs/contexts/common/LiveChatWidgetContextInitialState.js +3 -1
  39. package/lib/cjs/contexts/createReducer.js +16 -10
  40. package/lib/cjs/plugins/newMessageEventHandler.js +10 -13
  41. package/lib/esm/common/Constants.js +44 -5
  42. package/lib/esm/common/telemetry/TelemetryConstants.js +32 -3
  43. package/lib/esm/common/telemetry/TelemetryHelper.js +13 -1
  44. package/lib/esm/common/telemetry/TelemetryManager.js +14 -5
  45. package/lib/esm/common/telemetry/defaultConfigs/defaultAriaConfig.js +1 -1
  46. package/lib/esm/common/telemetry/defaultConfigs/defaultTelemetryConfiguration.js +4 -1
  47. package/lib/esm/common/telemetry/loggers/ariaTelemetryLogger.js +36 -14
  48. package/lib/esm/common/telemetry/loggers/consoleLogger.js +6 -5
  49. package/lib/esm/common/utils.js +19 -1
  50. package/lib/esm/components/callingcontainerstateful/CallingContainerStateful.js +14 -0
  51. package/lib/esm/components/chatbuttonstateful/ChatButtonStateful.js +18 -7
  52. package/lib/esm/components/confirmationpanestateful/ConfirmationPaneStateful.js +7 -37
  53. package/lib/esm/components/footerstateful/FooterStateful.js +1 -2
  54. package/lib/esm/components/footerstateful/downloadtranscriptstateful/DownloadTranscriptStateful.js +9 -3
  55. package/lib/esm/components/headerstateful/HeaderStateful.js +1 -7
  56. package/lib/esm/components/livechatwidget/common/defaultProps/dummyDefaultProps.js +12 -16
  57. package/lib/esm/components/livechatwidget/common/endChat.js +59 -13
  58. package/lib/esm/components/livechatwidget/common/initCallingSdk.js +1 -1
  59. package/lib/esm/components/livechatwidget/common/initWebChatComposer.js +13 -4
  60. package/lib/esm/components/livechatwidget/common/reconnectChatHelper.js +94 -20
  61. package/lib/esm/components/livechatwidget/common/registerTelemetryLoggers.js +5 -14
  62. package/lib/esm/components/livechatwidget/common/startChat.js +90 -44
  63. package/lib/esm/components/livechatwidget/livechatwidgetstateful/LiveChatWidgetStateful.js +174 -36
  64. package/lib/esm/components/postchatloadingpanestateful/PostChatLoadingPaneStateful.js +6 -0
  65. package/lib/esm/components/prechatsurveypanestateful/PreChatSurveyPaneStateful.js +6 -7
  66. package/lib/esm/components/proactivechatpanestateful/ProactiveChatPaneStateful.js +16 -0
  67. package/lib/esm/components/webchatcontainerstateful/WebChatContainerStateful.js +72 -0
  68. package/lib/esm/components/webchatcontainerstateful/interfaces/IBotMagicCodeConfig.js +1 -0
  69. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/BotMagicCodeStore.js +5 -0
  70. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityMiddleware.js +16 -2
  71. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/cardActionMiddleware.js +41 -0
  72. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/cardActionMiddleware.spec.js +94 -0
  73. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/messageTimestampMiddleware.js +107 -0
  74. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/conversationEndMiddleware.js +6 -6
  75. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/webchattelemetry/WebChatLogger.js +32 -0
  76. package/lib/esm/contexts/common/LiveChatWidgetActionType.js +9 -7
  77. package/lib/esm/contexts/common/LiveChatWidgetContextInitialState.js +3 -1
  78. package/lib/esm/contexts/createReducer.js +16 -9
  79. package/lib/esm/plugins/newMessageEventHandler.js +10 -12
  80. package/lib/types/common/Constants.d.ts +24 -2
  81. package/lib/types/common/interfaces/IContextDataStore.d.ts +2 -2
  82. package/lib/types/common/telemetry/TelemetryConstants.d.ts +27 -5
  83. package/lib/types/common/telemetry/TelemetryHelper.d.ts +2 -0
  84. package/lib/types/common/telemetry/definitions/Payload.d.ts +12 -9
  85. package/lib/types/common/telemetry/interfaces/ITelemetryConfig.d.ts +3 -3
  86. package/lib/types/common/utils.d.ts +3 -0
  87. package/lib/types/components/confirmationpanestateful/interfaces/IConfirmationPaneStatefulParams.d.ts +4 -4
  88. package/lib/types/components/footerstateful/audionotificationstateful/interfaces/IAudioNotificationStatefulParams.d.ts +0 -1
  89. package/lib/types/components/livechatwidget/common/endChat.d.ts +4 -1
  90. package/lib/types/components/livechatwidget/common/reconnectChatHelper.d.ts +5 -2
  91. package/lib/types/components/livechatwidget/interfaces/ILiveChatWidgetComponentOverrides.d.ts +1 -0
  92. package/lib/types/components/livechatwidget/interfaces/ILiveChatWidgetProps.d.ts +1 -1
  93. package/lib/types/components/reconnectchatpanestateful/interfaces/IReconnectChatPaneStatefulProps.d.ts +1 -0
  94. package/lib/types/components/webchatcontainerstateful/interfaces/IBotMagicCodeConfig.d.ts +4 -0
  95. package/lib/types/components/webchatcontainerstateful/interfaces/IWebChatContainerStatefulProps.d.ts +2 -0
  96. package/lib/types/components/webchatcontainerstateful/webchatcontroller/BotMagicCodeStore.d.ts +3 -0
  97. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/cardActionMiddleware.d.ts +2 -0
  98. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/cardActionMiddleware.spec.d.ts +1 -0
  99. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/messageTimestampMiddleware.d.ts +5 -0
  100. package/lib/types/components/webchatcontainerstateful/webchatcontroller/webchattelemetry/WebChatLogger.d.ts +1 -0
  101. package/lib/types/contexts/common/ILiveChatWidgetContext.d.ts +2 -0
  102. package/lib/types/contexts/common/LiveChatWidgetActionType.d.ts +10 -8
  103. package/package.json +6 -7
@@ -35,43 +35,58 @@ var _setPostChatContextAndLoadSurvey = require("./setPostChatContextAndLoadSurve
35
35
 
36
36
  var _updateSessionDataForTelemetry = require("./updateSessionDataForTelemetry");
37
37
 
38
+ var _omnichannelChatComponents = require("@microsoft/omnichannel-chat-components");
39
+
38
40
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
41
+ let optionalParams = {}; // eslint-disable-next-line @typescript-eslint/no-explicit-any
42
+
39
43
  const prepareStartChat = async (props, chatSDK, state, dispatch, setAdapter) => {
44
+ var _props$reconnectChatP;
45
+
40
46
  if (await canConnectToExistingChat(props, chatSDK, state, dispatch, setAdapter)) {
41
47
  return;
42
- } // Getting PreChat Survey Context
43
-
48
+ } // Redirecting if unauthenticated reconnect chat expired
44
49
 
45
- const parseToJson = false;
46
- const preChatSurveyResponse = await chatSDK.getPreChatSurvey(parseToJson);
47
- const showPrechat = state.appStates.conversationState === _ConversationState.ConversationState.ProactiveChat ? preChatSurveyResponse && state.appStates.proactiveChatStates.proactiveChatEnablePrechat : preChatSurveyResponse; // Getting reconnectId for authenticated chat
48
50
 
49
- const reconnectId = await (0, _reconnectChatHelper.getReconnectIdForAuthenticatedChat)(props, chatSDK);
51
+ if ((_props$reconnectChatP = props.reconnectChatPaneProps) !== null && _props$reconnectChatP !== void 0 && _props$reconnectChatP.reconnectId) {
52
+ var _props$reconnectChatP2, _props$reconnectChatP3;
50
53
 
51
- if (reconnectId) {
52
- dispatch({
53
- type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_RECONNECT_ID,
54
- payload: reconnectId
55
- });
56
- dispatch({
57
- type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_CONVERSATION_STATE,
58
- payload: _ConversationState.ConversationState.ReconnectChat
59
- });
60
- } else if (showPrechat) {
61
- dispatch({
62
- type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_PRE_CHAT_SURVEY_RESPONSE,
63
- payload: preChatSurveyResponse
64
- });
65
- dispatch({
66
- type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_CONVERSATION_STATE,
67
- payload: _ConversationState.ConversationState.Prechat
68
- });
54
+ await (0, _reconnectChatHelper.handleRedirectUnauthenticatedReconnectChat)(chatSDK, dispatch, setAdapter, initStartChat, (_props$reconnectChatP2 = props.reconnectChatPaneProps) === null || _props$reconnectChatP2 === void 0 ? void 0 : _props$reconnectChatP2.reconnectId, (_props$reconnectChatP3 = props.reconnectChatPaneProps) === null || _props$reconnectChatP3 === void 0 ? void 0 : _props$reconnectChatP3.redirectInSameWindow);
69
55
  } else {
70
- dispatch({
71
- type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_CONVERSATION_STATE,
72
- payload: _ConversationState.ConversationState.Loading
73
- });
74
- await initStartChat(chatSDK, dispatch, setAdapter);
56
+ // Getting PreChat Survey Context
57
+ const parseToJson = false;
58
+ const preChatSurveyResponse = await chatSDK.getPreChatSurvey(parseToJson);
59
+ const showPrechat = state.appStates.conversationState === _ConversationState.ConversationState.ProactiveChat ? preChatSurveyResponse && state.appStates.proactiveChatStates.proactiveChatEnablePrechat : preChatSurveyResponse; // Getting reconnectId for authenticated chat
60
+
61
+ const reconnectId = await (0, _reconnectChatHelper.getReconnectIdForAuthenticatedChat)(props, chatSDK);
62
+
63
+ if (reconnectId) {
64
+ dispatch({
65
+ type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_RECONNECT_ID,
66
+ payload: reconnectId
67
+ });
68
+ dispatch({
69
+ type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_CONVERSATION_STATE,
70
+ payload: _ConversationState.ConversationState.ReconnectChat
71
+ });
72
+ } else if (showPrechat) {
73
+ dispatch({
74
+ type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_PRE_CHAT_SURVEY_RESPONSE,
75
+ payload: preChatSurveyResponse
76
+ });
77
+ dispatch({
78
+ type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_CONVERSATION_STATE,
79
+ payload: _ConversationState.ConversationState.Prechat
80
+ });
81
+ setCustomContextParams(props, state);
82
+ } else {
83
+ dispatch({
84
+ type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_CONVERSATION_STATE,
85
+ payload: _ConversationState.ConversationState.Loading
86
+ });
87
+ setCustomContextParams(props, state);
88
+ await initStartChat(chatSDK, dispatch, setAdapter);
89
+ }
75
90
  }
76
91
  }; // eslint-disable-next-line @typescript-eslint/no-explicit-any
77
92
 
@@ -82,6 +97,21 @@ const initStartChat = async (chatSDK, dispatch, setAdapter, params, persistedSta
82
97
  try {
83
98
  var _newAdapter$activity$, _TelemetryTimers$Widg;
84
99
 
100
+ let isStartChatSuccessful = false;
101
+
102
+ if (persistedState || params !== null && params !== void 0 && params.liveChatContext) {
103
+ var _persistedState$domai, _persistedState$domai2, _persistedState$domai3, _persistedState$domai4, _persistedState$domai5;
104
+
105
+ // Broadcasting limited cached chat details
106
+ _omnichannelChatComponents.BroadcastService.postMessage({
107
+ eventName: _TelemetryConstants.BroadcastEvent.ChatRetrievedFromCache,
108
+ payload: {
109
+ chatId: persistedState === null || persistedState === void 0 ? void 0 : (_persistedState$domai = persistedState.domainStates) === null || _persistedState$domai === void 0 ? void 0 : (_persistedState$domai2 = _persistedState$domai.liveChatContext) === null || _persistedState$domai2 === void 0 ? void 0 : (_persistedState$domai3 = _persistedState$domai2.chatToken) === null || _persistedState$domai3 === void 0 ? void 0 : _persistedState$domai3.chatId,
110
+ requestId: persistedState === null || persistedState === void 0 ? void 0 : (_persistedState$domai4 = persistedState.domainStates) === null || _persistedState$domai4 === void 0 ? void 0 : (_persistedState$domai5 = _persistedState$domai4.liveChatContext) === null || _persistedState$domai5 === void 0 ? void 0 : _persistedState$domai5.requestId
111
+ }
112
+ });
113
+ }
114
+
85
115
  try {
86
116
  _TelemetryManager.TelemetryTimers.WidgetLoadTimer = (0, _utils.createTimer)();
87
117
 
@@ -89,7 +119,9 @@ const initStartChat = async (chatSDK, dispatch, setAdapter, params, persistedSta
89
119
  Event: _TelemetryConstants.TelemetryEvent.StartChatSDKCall
90
120
  });
91
121
 
92
- await chatSDK.startChat(params);
122
+ optionalParams = Object.assign({}, params, optionalParams);
123
+ await chatSDK.startChat(optionalParams);
124
+ isStartChatSuccessful = true;
93
125
  } catch (error) {
94
126
  _TelemetryHelper.TelemetryHelper.logSDKEvent(_TelemetryConstants.LogLevel.ERROR, {
95
127
  Event: _TelemetryConstants.TelemetryEvent.StartChatMethodException,
@@ -97,6 +129,8 @@ const initStartChat = async (chatSDK, dispatch, setAdapter, params, persistedSta
97
129
  exception: `Failed to setup startChat: ${error}`
98
130
  }
99
131
  });
132
+
133
+ isStartChatSuccessful = false;
100
134
  }
101
135
 
102
136
  const newAdapter = await (0, _createAdapter.createAdapter)(chatSDK);
@@ -124,10 +158,12 @@ const initStartChat = async (chatSDK, dispatch, setAdapter, params, persistedSta
124
158
  await (0, _setPostChatContextAndLoadSurvey.setPostChatContextAndLoadSurvey)(chatSDK, dispatch);
125
159
  await (0, _updateSessionDataForTelemetry.updateSessionDataForTelemetry)(chatSDK, dispatch); // Set app state to Active
126
160
 
127
- dispatch({
128
- type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_CONVERSATION_STATE,
129
- payload: _ConversationState.ConversationState.Active
130
- });
161
+ if (isStartChatSuccessful) {
162
+ dispatch({
163
+ type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_CONVERSATION_STATE,
164
+ payload: _ConversationState.ConversationState.Active
165
+ });
166
+ }
131
167
  } else {
132
168
  dispatch({
133
169
  type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_WIDGET_STATE,
@@ -169,24 +205,36 @@ const initStartChat = async (chatSDK, dispatch, setAdapter, params, persistedSta
169
205
  exports.initStartChat = initStartChat;
170
206
 
171
207
  const canConnectToExistingChat = async (props, chatSDK, state, dispatch, setAdapter) => {
172
- var _DataStoreManager$cli, _persistedState$domai;
208
+ var _chatSDK$omnichannelC, _chatSDK$omnichannelC2, _DataStoreManager$cli, _persistedState$domai6;
173
209
 
174
- const widgetStateFromCache = (_DataStoreManager$cli = _DataStoreManager.DataStoreManager.clientDataStore) === null || _DataStoreManager$cli === void 0 ? void 0 : _DataStoreManager$cli.getData(_Constants.Constants.widgetStateDataKey, "localStorage");
210
+ const widgetStateEventName = (0, _utils.getWidgetCacheId)((chatSDK === null || chatSDK === void 0 ? void 0 : (_chatSDK$omnichannelC = chatSDK.omnichannelConfig) === null || _chatSDK$omnichannelC === void 0 ? void 0 : _chatSDK$omnichannelC.orgId) ?? "", (chatSDK === null || chatSDK === void 0 ? void 0 : (_chatSDK$omnichannelC2 = chatSDK.omnichannelConfig) === null || _chatSDK$omnichannelC2 === void 0 ? void 0 : _chatSDK$omnichannelC2.widgetId) ?? "");
211
+ const widgetStateFromCache = (_DataStoreManager$cli = _DataStoreManager.DataStoreManager.clientDataStore) === null || _DataStoreManager$cli === void 0 ? void 0 : _DataStoreManager$cli.getData(widgetStateEventName, "localStorage");
175
212
  const persistedState = widgetStateFromCache ? JSON.parse(widgetStateFromCache) : undefined;
176
213
 
177
- if (persistedState !== null && persistedState !== void 0 && (_persistedState$domai = persistedState.domainStates) !== null && _persistedState$domai !== void 0 && _persistedState$domai.liveChatContext) {
178
- var _persistedState$domai2;
214
+ if (persistedState !== null && persistedState !== void 0 && (_persistedState$domai6 = persistedState.domainStates) !== null && _persistedState$domai6 !== void 0 && _persistedState$domai6.liveChatContext) {
215
+ var _persistedState$domai7;
179
216
 
180
217
  dispatch({
181
218
  type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_CONVERSATION_STATE,
182
219
  payload: _ConversationState.ConversationState.Loading
183
220
  });
184
221
  const optionalParams = {
185
- liveChatContext: persistedState === null || persistedState === void 0 ? void 0 : (_persistedState$domai2 = persistedState.domainStates) === null || _persistedState$domai2 === void 0 ? void 0 : _persistedState$domai2.liveChatContext
222
+ liveChatContext: persistedState === null || persistedState === void 0 ? void 0 : (_persistedState$domai7 = persistedState.domainStates) === null || _persistedState$domai7 === void 0 ? void 0 : _persistedState$domai7.liveChatContext
186
223
  };
187
224
  await initStartChat(chatSDK, dispatch, setAdapter, optionalParams, persistedState);
188
225
  return true;
189
226
  } else {
190
227
  return false;
191
228
  }
229
+ };
230
+
231
+ const setCustomContextParams = (props, state) => {
232
+ var _props$chatConfig, _state$domainStates;
233
+
234
+ // Add custom context if any only for unauthenticated chat
235
+ if (!((_props$chatConfig = props.chatConfig) !== null && _props$chatConfig !== void 0 && _props$chatConfig.LiveChatConfigAuthSettings) && (_state$domainStates = state.domainStates) !== null && _state$domainStates !== void 0 && _state$domainStates.customContext) {
236
+ optionalParams = Object.assign({}, optionalParams, {
237
+ customContext: state.domainStates.customContext
238
+ });
239
+ }
192
240
  };
@@ -98,7 +98,7 @@ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj &&
98
98
  function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
99
99
 
100
100
  const LiveChatWidgetStateful = props => {
101
- var _props$webChatContain, _props$styleProps, _props$controlProps, _props$webChatContain3, _props$webChatContain4, _props$styleProps2, _props$controlProps5, _props$componentOverr, _props$controlProps6, _props$componentOverr2, _props$controlProps7, _props$componentOverr3, _props$controlProps8, _props$componentOverr4, _props$controlProps9, _props$componentOverr5, _props$controlProps10, _props$componentOverr6, _props$controlProps11, _props$controlProps12, _props$controlProps13, _props$componentOverr7, _props$controlProps14, _props$componentOverr8, _props$controlProps15, _props$componentOverr9, _props$componentOverr10, _props$componentOverr11;
101
+ var _props$webChatContain, _props$styleProps, _props$controlProps, _props$webChatContain3, _props$webChatContain4, _props$styleProps2, _props$controlProps5, _props$componentOverr, _props$controlProps6, _props$componentOverr2, _props$controlProps7, _props$componentOverr3, _props$controlProps8, _props$componentOverr4, _props$controlProps9, _props$componentOverr5, _props$controlProps10, _props$componentOverr6, _props$controlProps11, _props$componentOverr7, _props$controlProps12, _props$controlProps13, _props$componentOverr8, _props$controlProps14, _props$componentOverr9, _props$controlProps15, _props$componentOverr10, _props$componentOverr11, _props$componentOverr12;
102
102
 
103
103
  const [state, dispatch] = (0, _useChatContextStore.default)(); // eslint-disable-next-line @typescript-eslint/no-explicit-any
104
104
 
@@ -107,12 +107,14 @@ const LiveChatWidgetStateful = props => {
107
107
  ...((_props$webChatContain = props.webChatContainerProps) === null || _props$webChatContain === void 0 ? void 0 : _props$webChatContain.webChatStyles)
108
108
  }); // eslint-disable-next-line @typescript-eslint/no-explicit-any
109
109
 
110
- const chatSDK = (0, _useChatSDKStore.default)();
110
+ const chatSDK = (0, _useChatSDKStore.default)(); // eslint-disable-next-line @typescript-eslint/no-explicit-any
111
+
111
112
  const [voiceVideoCallingSDK, setVoiceVideoCallingSDK] = (0, _react2.useState)(undefined);
112
113
  const {
113
114
  Composer
114
115
  } = _botframeworkWebchat.Components;
115
- const canStartProactiveChat = (0, _react2.useRef)(true); // Process general styles
116
+ const canStartProactiveChat = (0, _react2.useRef)(true);
117
+ const canEndChat = (0, _react2.useRef)(true); // Process general styles
116
118
 
117
119
  const generalStyles = {
118
120
  root: Object.assign({}, (0, _getGeneralStylesForButton.getGeneralStylesForButton)(state), (_props$styleProps = props.styleProps) === null || _props$styleProps === void 0 ? void 0 : _props$styleProps.generalStyles)
@@ -120,6 +122,33 @@ const LiveChatWidgetStateful = props => {
120
122
  _TelemetryManager.TelemetryTimers.LcwLoadToChatButtonTimer = (0, _utils.createTimer)();
121
123
  const widgetElementId = ((_props$controlProps = props.controlProps) === null || _props$controlProps === void 0 ? void 0 : _props$controlProps.id) || "oc-lcw";
122
124
  const currentMessageCountRef = (0, _react2.useRef)(0);
125
+ let widgetStateEventName = "";
126
+
127
+ const initiateEndChatOnBrowserUnload = () => {
128
+ var _DataStoreManager$cli;
129
+
130
+ const persistedState = getStateFromCache(); // End chat if the chat is still active and browser closed
131
+
132
+ if (persistedState.appStates.conversationState === _ConversationState.ConversationState.Active) {
133
+ //Browser close scenario/no room for PCS/so just end chat and notify agent immidiately
134
+ (0, _endChat.endChat)(props, chatSDK, setAdapter, setWebChatStyles, dispatch, adapter, false, false, false);
135
+ } // Clean local storage
136
+
137
+
138
+ (_DataStoreManager$cli = _DataStoreManager.DataStoreManager.clientDataStore) === null || _DataStoreManager$cli === void 0 ? void 0 : _DataStoreManager$cli.removeData(widgetStateEventName, "localStorage");
139
+ }; // eslint-disable-next-line @typescript-eslint/no-explicit-any
140
+
141
+
142
+ const getStateFromCache = () => {
143
+ var _chatSDK$omnichannelC, _chatSDK$omnichannelC2, _DataStoreManager$cli2;
144
+
145
+ // Getting updated state from cache
146
+ const widgetStateEventName = (0, _utils.getWidgetCacheId)((chatSDK === null || chatSDK === void 0 ? void 0 : (_chatSDK$omnichannelC = chatSDK.omnichannelConfig) === null || _chatSDK$omnichannelC === void 0 ? void 0 : _chatSDK$omnichannelC.orgId) ?? "", (chatSDK === null || chatSDK === void 0 ? void 0 : (_chatSDK$omnichannelC2 = chatSDK.omnichannelConfig) === null || _chatSDK$omnichannelC2 === void 0 ? void 0 : _chatSDK$omnichannelC2.widgetId) ?? "");
147
+ const widgetStateFromCache = (_DataStoreManager$cli2 = _DataStoreManager.DataStoreManager.clientDataStore) === null || _DataStoreManager$cli2 === void 0 ? void 0 : _DataStoreManager$cli2.getData(widgetStateEventName, "localStorage");
148
+ const persistedState = widgetStateFromCache ? JSON.parse(widgetStateFromCache) : undefined;
149
+ return persistedState;
150
+ };
151
+
123
152
  (0, _react2.useEffect)(() => {
124
153
  var _props$controlProps2, _props$controlProps3, _props$reconnectChatP, _props$controlProps4, _props$chatConfig, _props$chatConfig$Cha, _state$domainStates;
125
154
 
@@ -134,6 +163,10 @@ const LiveChatWidgetStateful = props => {
134
163
  type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_SKIP_CHAT_BUTTON_RENDERING,
135
164
  payload: ((_props$controlProps2 = props.controlProps) === null || _props$controlProps2 === void 0 ? void 0 : _props$controlProps2.skipChatButtonRendering) || false
136
165
  });
166
+ dispatch({
167
+ type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_E2VV_ENABLED,
168
+ payload: false
169
+ });
137
170
  (0, _initCallingSdk.initCallingSdk)(chatSDK, setVoiceVideoCallingSDK).then(sdkCreated => {
138
171
  sdkCreated && dispatch({
139
172
  type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_E2VV_ENABLED,
@@ -144,7 +177,7 @@ const LiveChatWidgetStateful = props => {
144
177
  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) {
145
178
  var _props$reconnectChatP2;
146
179
 
147
- (0, _reconnectChatHelper.handleUnauthenticatedReconnectChat)(dispatch, (_props$reconnectChatP2 = props.reconnectChatPaneProps) === null || _props$reconnectChatP2 === void 0 ? void 0 : _props$reconnectChatP2.reconnectId, _startChat.initStartChat);
180
+ (0, _reconnectChatHelper.startUnauthenticatedReconnectChat)(chatSDK, dispatch, setAdapter, (_props$reconnectChatP2 = props.reconnectChatPaneProps) === null || _props$reconnectChatP2 === void 0 ? void 0 : _props$reconnectChatP2.reconnectId, _startChat.initStartChat);
148
181
  } // Initialize global dir
149
182
 
150
183
 
@@ -154,25 +187,28 @@ const LiveChatWidgetStateful = props => {
154
187
  payload: globalDir
155
188
  });
156
189
 
157
- if ((_state$domainStates = state.domainStates) !== null && _state$domainStates !== void 0 && _state$domainStates.chatToken) {
190
+ if ((_state$domainStates = state.domainStates) !== null && _state$domainStates !== void 0 && _state$domainStates.liveChatContext) {
158
191
  var _state$domainStates2;
159
192
 
160
193
  const optionalParams = {
161
- liveChatContext: {
162
- chatToken: (_state$domainStates2 = state.domainStates) === null || _state$domainStates2 === void 0 ? void 0 : _state$domainStates2.chatToken
163
- }
194
+ liveChatContext: (_state$domainStates2 = state.domainStates) === null || _state$domainStates2 === void 0 ? void 0 : _state$domainStates2.liveChatContext
164
195
  };
165
196
  (0, _startChat.initStartChat)(chatSDK, dispatch, setAdapter, optionalParams);
166
197
  }
167
- }, []);
198
+ }, []); // useEffect for when skip chat button rendering
199
+
168
200
  (0, _react2.useEffect)(() => {
169
201
  if (state.appStates.skipChatButtonRendering) {
170
202
  var _props$reconnectChatP3;
171
203
 
204
+ _omnichannelChatComponents.BroadcastService.postMessage({
205
+ eventName: _TelemetryConstants.BroadcastEvent.ChatInitiated
206
+ });
207
+
172
208
  if ((_props$reconnectChatP3 = props.reconnectChatPaneProps) !== null && _props$reconnectChatP3 !== void 0 && _props$reconnectChatP3.reconnectId && !state.appStates.reconnectId) {
173
- var _props$reconnectChatP4;
209
+ var _props$reconnectChatP4, _props$reconnectChatP5;
174
210
 
175
- (0, _reconnectChatHelper.handleUnauthenticatedReconnectChat)(dispatch, (_props$reconnectChatP4 = props.reconnectChatPaneProps) === null || _props$reconnectChatP4 === void 0 ? void 0 : _props$reconnectChatP4.reconnectId, _startChat.initStartChat);
211
+ (0, _reconnectChatHelper.handleUnauthenticatedReconnectChat)(chatSDK, dispatch, setAdapter, (_props$reconnectChatP4 = props.reconnectChatPaneProps) === null || _props$reconnectChatP4 === void 0 ? void 0 : _props$reconnectChatP4.reconnectId, _startChat.initStartChat, (_props$reconnectChatP5 = props.reconnectChatPaneProps) === null || _props$reconnectChatP5 === void 0 ? void 0 : _props$reconnectChatP5.redirectInSameWindow);
176
212
  } else {
177
213
  (0, _reconnectChatHelper.getReconnectIdForAuthenticatedChat)(props, chatSDK).then(authReconnectId => {
178
214
  if (authReconnectId && !state.appStates.reconnectId) {
@@ -185,6 +221,12 @@ const LiveChatWidgetStateful = props => {
185
221
  payload: _ConversationState.ConversationState.ReconnectChat
186
222
  });
187
223
  } else {
224
+ const chatStartedSkippingChatButtonRendering = {
225
+ eventName: _TelemetryConstants.BroadcastEvent.StartChatSkippingChatButtonRendering
226
+ };
227
+
228
+ _omnichannelChatComponents.BroadcastService.postMessage(chatStartedSkippingChatButtonRendering);
229
+
188
230
  dispatch({
189
231
  type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_CONVERSATION_STATE,
190
232
  payload: _ConversationState.ConversationState.Loading
@@ -194,9 +236,25 @@ const LiveChatWidgetStateful = props => {
194
236
  });
195
237
  }
196
238
  }
197
- }, [state.appStates.skipChatButtonRendering]);
239
+ }, [state.appStates.skipChatButtonRendering]); // useEffect for when skip chat button rendering
240
+
198
241
  (0, _react2.useEffect)(() => {
199
- _omnichannelChatComponents.BroadcastService.getMessageByEventName("StartProactiveChat").subscribe(msg => {
242
+ var _chatSDK$omnichannelC3, _chatSDK$omnichannelC4;
243
+
244
+ // Add the custom context on receiving the SetCustomContext event
245
+ _omnichannelChatComponents.BroadcastService.getMessageByEventName(_TelemetryConstants.BroadcastEvent.SetCustomContext).subscribe(msg => {
246
+ _TelemetryHelper.TelemetryHelper.logActionEvent(_TelemetryConstants.LogLevel.INFO, {
247
+ Event: _TelemetryConstants.TelemetryEvent.CustomContextReceived,
248
+ Description: "CustomContext received."
249
+ });
250
+
251
+ dispatch({
252
+ type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_CUSTOM_CONTEXT,
253
+ payload: msg === null || msg === void 0 ? void 0 : msg.payload
254
+ });
255
+ });
256
+
257
+ _omnichannelChatComponents.BroadcastService.getMessageByEventName(_TelemetryConstants.BroadcastEvent.StartProactiveChat).subscribe(msg => {
200
258
  _TelemetryHelper.TelemetryHelper.logActionEvent(_TelemetryConstants.LogLevel.INFO, {
201
259
  Event: _TelemetryConstants.TelemetryEvent.StartProactiveChatEventReceived,
202
260
  Description: "Start proactive chat event received."
@@ -212,18 +270,103 @@ const LiveChatWidgetStateful = props => {
212
270
  Description: "Start proactive chat method called, when chat was already triggered."
213
271
  });
214
272
  }
273
+ }); // Start chat from SDK Event
274
+
275
+
276
+ _omnichannelChatComponents.BroadcastService.getMessageByEventName(_TelemetryConstants.BroadcastEvent.StartChat).subscribe(() => {
277
+ _TelemetryHelper.TelemetryHelper.logActionEvent(_TelemetryConstants.LogLevel.INFO, {
278
+ Event: _TelemetryConstants.TelemetryEvent.StartChatEventRecevied,
279
+ Description: "Start chat event received."
280
+ });
281
+
282
+ const persistedState = getStateFromCache();
283
+
284
+ if (persistedState.appStates.conversationState === _ConversationState.ConversationState.Closed || persistedState.appStates.conversationState === _ConversationState.ConversationState.InActive || persistedState.appStates.conversationState === _ConversationState.ConversationState.Postchat) {
285
+ _omnichannelChatComponents.BroadcastService.postMessage({
286
+ eventName: _TelemetryConstants.BroadcastEvent.ChatInitiated
287
+ });
288
+
289
+ (0, _startChat.prepareStartChat)(props, chatSDK, state, dispatch, setAdapter);
290
+ } else {
291
+ var _persistedState$domai, _persistedState$domai2, _persistedState$domai3, _persistedState$domai4;
292
+
293
+ dispatch({
294
+ type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_MINIMIZED,
295
+ payload: false
296
+ });
297
+
298
+ _omnichannelChatComponents.BroadcastService.postMessage({
299
+ eventName: _TelemetryConstants.BroadcastEvent.MaximizeChat,
300
+ payload: {
301
+ 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,
302
+ 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
303
+ }
304
+ });
305
+ }
306
+ }); // End chat
307
+
308
+
309
+ _omnichannelChatComponents.BroadcastService.getMessageByEventName(_TelemetryConstants.BroadcastEvent.InitiateEndChat).subscribe(async () => {
310
+ if (canEndChat.current) {
311
+ (0, _endChat.prepareEndChat)(props, chatSDK, setAdapter, setWebChatStyles, dispatch, adapter, state);
312
+ } else {
313
+ const skipEndChatSDK = true;
314
+ const skipCloseChat = false;
315
+ (0, _endChat.endChat)(props, chatSDK, setAdapter, setWebChatStyles, dispatch, adapter, skipEndChatSDK, skipCloseChat);
316
+ }
317
+
318
+ _omnichannelChatComponents.BroadcastService.postMessage({
319
+ eventName: _TelemetryConstants.BroadcastEvent.CloseChat
320
+ });
215
321
  });
216
322
 
323
+ _omnichannelChatComponents.BroadcastService.getMessageByEventName(_TelemetryConstants.BroadcastEvent.InitiateEndChatOnBrowserUnload).subscribe(() => {
324
+ initiateEndChatOnBrowserUnload();
325
+ }); // reset proactive chat params
326
+
327
+
328
+ _omnichannelChatComponents.BroadcastService.getMessageByEventName(_TelemetryConstants.BroadcastEvent.ResetProactiveChatParams).subscribe(async () => {
329
+ dispatch({
330
+ type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_PROACTIVE_CHAT_PARAMS,
331
+ payload: {
332
+ proactiveChatBodyTitle: "",
333
+ proactiveChatEnablePrechat: false,
334
+ proactiveChatInNewWindow: false
335
+ }
336
+ });
337
+ }); // Listen to end chat event from other tabs
338
+
339
+
340
+ const endChatEventName = (0, _utils.getWidgetEndChatEventName)(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);
341
+
342
+ _omnichannelChatComponents.BroadcastService.getMessageByEventName(endChatEventName).subscribe(async () => {
343
+ (0, _endChat.endChat)(props, chatSDK, setAdapter, setWebChatStyles, dispatch, adapter, false, false, false);
344
+ }); // Close popout window
345
+
346
+
217
347
  window.addEventListener("beforeunload", () => {
348
+ _TelemetryHelper.TelemetryHelper.logLoadingEvent(_TelemetryConstants.LogLevel.INFO, {
349
+ Event: _TelemetryConstants.TelemetryEvent.WindowClosed,
350
+ Description: "Closed window."
351
+ });
352
+
218
353
  (0, _disposeTelemetryLoggers.disposeTelemetryLoggers)();
219
354
  });
220
355
 
221
356
  if (state.appStates.conversationEndedByAgent) {
222
357
  (0, _endChat.endChat)(props, chatSDK, setAdapter, setWebChatStyles, dispatch, adapter);
223
- }
358
+ } //Listen to WidgetSize
359
+
360
+
361
+ _omnichannelChatComponents.BroadcastService.getMessageByEventName("WidgetSize").subscribe(msg => {
362
+ dispatch({
363
+ type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_WIDGET_SIZE,
364
+ payload: msg === null || msg === void 0 ? void 0 : msg.payload
365
+ });
366
+ });
224
367
  }, []);
225
368
  (0, _react2.useEffect)(() => {
226
- canStartProactiveChat.current = state.appStates.conversationState === _ConversationState.ConversationState.Closed;
369
+ canEndChat.current = state.appStates.conversationState === _ConversationState.ConversationState.Active;
227
370
 
228
371
  if (state.appStates.conversationState === _ConversationState.ConversationState.Active) {
229
372
  chatSDK === null || chatSDK === void 0 ? void 0 : chatSDK.onNewMessage(() => {
@@ -243,7 +386,10 @@ const LiveChatWidgetStateful = props => {
243
386
  });
244
387
  });
245
388
  }
246
- }, [state.appStates.conversationState]); // Reset the UnreadMessageCount when minimized is toggled and broadcast it.
389
+ }, [state.appStates.conversationState]);
390
+ (0, _react2.useEffect)(() => {
391
+ canStartProactiveChat.current = state.appStates.conversationState === _ConversationState.ConversationState.Closed && !state.appStates.proactiveChatStates.proactiveChatInNewWindow;
392
+ }, [state.appStates.conversationState, state.appStates.proactiveChatStates.proactiveChatInNewWindow]); // Reset the UnreadMessageCount when minimized is toggled and broadcast it.
247
393
 
248
394
  (0, _react2.useEffect)(() => {
249
395
  currentMessageCountRef.current = -1;
@@ -277,30 +423,36 @@ const LiveChatWidgetStateful = props => {
277
423
  setWebChatStyles({ ...webChatStyles,
278
424
  ...((_props$webChatContain2 = props.webChatContainerProps) === null || _props$webChatContain2 === void 0 ? void 0 : _props$webChatContain2.webChatStyles)
279
425
  });
280
- }, [(_props$webChatContain3 = props.webChatContainerProps) === null || _props$webChatContain3 === void 0 ? void 0 : _props$webChatContain3.webChatStyles]);
426
+ }, [(_props$webChatContain3 = props.webChatContainerProps) === null || _props$webChatContain3 === void 0 ? void 0 : _props$webChatContain3.webChatStyles]); // Publish chat widget state
427
+
428
+ (0, _react2.useEffect)(() => {
429
+ var _props$chatSDK, _props$chatSDK$omnich, _props$chatSDK2, _props$chatSDK2$omnic;
430
+
431
+ widgetStateEventName = (0, _utils.getWidgetCacheId)(props === null || props === void 0 ? void 0 : (_props$chatSDK = props.chatSDK) === null || _props$chatSDK === void 0 ? void 0 : (_props$chatSDK$omnich = _props$chatSDK.omnichannelConfig) === null || _props$chatSDK$omnich === void 0 ? void 0 : _props$chatSDK$omnich.orgId, props === null || props === void 0 ? void 0 : (_props$chatSDK2 = props.chatSDK) === null || _props$chatSDK2 === void 0 ? void 0 : (_props$chatSDK2$omnic = _props$chatSDK2.omnichannelConfig) === null || _props$chatSDK2$omnic === void 0 ? void 0 : _props$chatSDK2$omnic.widgetId);
432
+ const chatWidgetStateChangeEvent = {
433
+ eventName: widgetStateEventName,
434
+ payload: { ...state
435
+ }
436
+ };
437
+
438
+ _omnichannelChatComponents.BroadcastService.postMessage(chatWidgetStateChangeEvent);
439
+ }, [state]);
281
440
  const webChatProps = (0, _initWebChatComposer.initWebChatComposer)(props, chatSDK, state, dispatch, setWebChatStyles);
282
441
 
283
442
  const setPostChatContextRelay = () => (0, _setPostChatContextAndLoadSurvey.setPostChatContextAndLoadSurvey)(chatSDK, dispatch); // eslint-disable-next-line @typescript-eslint/no-explicit-any
284
443
 
285
444
 
286
- const endChatRelay = (adapter, skipEndChatSDK, skipCloseChat) => (0, _endChat.endChat)(props, chatSDK, setAdapter, setWebChatStyles, dispatch, adapter, skipEndChatSDK, skipCloseChat);
445
+ const endChatRelay = (adapter, skipEndChatSDK, skipCloseChat) => (0, _endChat.endChat)(props, chatSDK, setAdapter, setWebChatStyles, dispatch, adapter, skipEndChatSDK, skipCloseChat); // eslint-disable-next-line @typescript-eslint/no-explicit-any
287
446
 
288
- const prepareStartChatRelay = () => (0, _startChat.prepareStartChat)(props, chatSDK, state, dispatch, setAdapter); // eslint-disable-next-line @typescript-eslint/no-explicit-any
289
447
 
448
+ const prepareEndChatRelay = (adapter, state) => (0, _endChat.prepareEndChat)(props, chatSDK, setAdapter, setWebChatStyles, dispatch, adapter, state);
290
449
 
291
- const initStartChatRelay = (optionalParams, persistedState) => (0, _startChat.initStartChat)(chatSDK, dispatch, setAdapter, optionalParams, persistedState);
450
+ const prepareStartChatRelay = () => (0, _startChat.prepareStartChat)(props, chatSDK, state, dispatch, setAdapter); // eslint-disable-next-line @typescript-eslint/no-explicit-any
292
451
 
293
- const confirmationPaneProps = (0, _initConfirmationPropsComposer.initConfirmationPropsComposer)(props); // publish chat widget state
294
452
 
295
- (0, _react2.useEffect)(() => {
296
- const chatWidgetStateChangeEvent = {
297
- eventName: _TelemetryConstants.BroadcastEvent.ChatWidgetStateChanged,
298
- payload: { ...state
299
- }
300
- };
453
+ const initStartChatRelay = (optionalParams, persistedState) => (0, _startChat.initStartChat)(chatSDK, dispatch, setAdapter, optionalParams, persistedState);
301
454
 
302
- _omnichannelChatComponents.BroadcastService.postMessage(chatWidgetStateChangeEvent);
303
- }, [state]);
455
+ const confirmationPaneProps = (0, _initConfirmationPropsComposer.initConfirmationPropsComposer)(props);
304
456
  return /*#__PURE__*/_react2.default.createElement(Composer, _extends({}, webChatProps, {
305
457
  styleOptions: webChatStyles,
306
458
  directLine: ((_props$webChatContain4 = props.webChatContainerProps) === null || _props$webChatContain4 === void 0 ? void 0 : _props$webChatContain4.directLine) ?? adapter ?? _defaultWebChatContainerStatefulProps.defaultWebChatContainerStatefulProps.directLine
@@ -322,15 +474,15 @@ const LiveChatWidgetStateful = props => {
322
474
  })), !((_props$controlProps8 = props.controlProps) !== null && _props$controlProps8 !== void 0 && _props$controlProps8.hideLoadingPane) && (0, _componentController.shouldShowLoadingPane)(state) && ((0, _omnichannelChatComponents.decodeComponentString)((_props$componentOverr4 = props.componentOverrides) === null || _props$componentOverr4 === void 0 ? void 0 : _props$componentOverr4.loadingPane) || /*#__PURE__*/_react2.default.createElement(_LoadingPaneStateful.default, props.loadingPaneProps)), !((_props$controlProps9 = props.controlProps) !== null && _props$controlProps9 !== void 0 && _props$controlProps9.hideOutOfOfficeHoursPane) && (0, _componentController.shouldShowOutOfOfficeHoursPane)(state) && ((0, _omnichannelChatComponents.decodeComponentString)((_props$componentOverr5 = props.componentOverrides) === null || _props$componentOverr5 === void 0 ? void 0 : _props$componentOverr5.outOfOfficeHoursPane) || /*#__PURE__*/_react2.default.createElement(_OOOHPaneStateful.default, props.outOfOfficeHoursPaneProps)), !((_props$controlProps10 = props.controlProps) !== null && _props$controlProps10 !== void 0 && _props$controlProps10.hideReconnectChatPane) && (0, _componentController.shouldShowReconnectChatPane)(state) && ((0, _omnichannelChatComponents.decodeComponentString)((_props$componentOverr6 = props.componentOverrides) === null || _props$componentOverr6 === void 0 ? void 0 : _props$componentOverr6.reconnectChatPane) || /*#__PURE__*/_react2.default.createElement(_ReconnectChatPaneStateful.default, {
323
475
  reconnectChatProps: props.reconnectChatPaneProps,
324
476
  initStartChat: initStartChatRelay
325
- })), !((_props$controlProps11 = props.controlProps) !== null && _props$controlProps11 !== void 0 && _props$controlProps11.hidePreChatSurveyPane) && (0, _componentController.shouldShowPreChatSurveyPane)(state) && /*#__PURE__*/_react2.default.createElement(_PreChatSurveyPaneStateful.default, {
477
+ })), !((_props$controlProps11 = props.controlProps) !== null && _props$controlProps11 !== void 0 && _props$controlProps11.hidePreChatSurveyPane) && (0, _componentController.shouldShowPreChatSurveyPane)(state) && ((0, _omnichannelChatComponents.decodeComponentString)((_props$componentOverr7 = props.componentOverrides) === null || _props$componentOverr7 === void 0 ? void 0 : _props$componentOverr7.preChatSurveyPane) || /*#__PURE__*/_react2.default.createElement(_PreChatSurveyPaneStateful.default, {
326
478
  surveyProps: props.preChatSurveyPaneProps,
327
479
  initStartChat: initStartChatRelay
328
- }), !((_props$controlProps12 = props.controlProps) !== null && _props$controlProps12 !== void 0 && _props$controlProps12.hideCallingContainer) && (0, _componentController.shouldShowCallingContainer)(state) && /*#__PURE__*/_react2.default.createElement(_CallingContainerStateful.default, _extends({
480
+ })), !((_props$controlProps12 = props.controlProps) !== null && _props$controlProps12 !== void 0 && _props$controlProps12.hideCallingContainer) && (0, _componentController.shouldShowCallingContainer)(state) && /*#__PURE__*/_react2.default.createElement(_CallingContainerStateful.default, _extends({
329
481
  voiceVideoCallingSdk: voiceVideoCallingSDK
330
- }, props.callingContainerProps)), !((_props$controlProps13 = props.controlProps) !== null && _props$controlProps13 !== void 0 && _props$controlProps13.hideWebChatContainer) && (0, _componentController.shouldShowWebChatContainer)(state) && ((0, _omnichannelChatComponents.decodeComponentString)((_props$componentOverr7 = props.componentOverrides) === null || _props$componentOverr7 === void 0 ? void 0 : _props$componentOverr7.webChatContainer) || /*#__PURE__*/_react2.default.createElement(_WebChatContainerStateful.default, props.webChatContainerProps)), !((_props$controlProps14 = props.controlProps) !== null && _props$controlProps14 !== void 0 && _props$controlProps14.hideConfirmationPane) && (0, _componentController.shouldShowConfirmationPane)(state) && ((0, _omnichannelChatComponents.decodeComponentString)((_props$componentOverr8 = props.componentOverrides) === null || _props$componentOverr8 === void 0 ? void 0 : _props$componentOverr8.confirmationPane) || /*#__PURE__*/_react2.default.createElement(_ConfirmationPaneStateful.default, _extends({}, confirmationPaneProps, {
482
+ }, props.callingContainerProps)), !((_props$controlProps13 = props.controlProps) !== null && _props$controlProps13 !== void 0 && _props$controlProps13.hideWebChatContainer) && (0, _componentController.shouldShowWebChatContainer)(state) && ((0, _omnichannelChatComponents.decodeComponentString)((_props$componentOverr8 = props.componentOverrides) === null || _props$componentOverr8 === void 0 ? void 0 : _props$componentOverr8.webChatContainer) || /*#__PURE__*/_react2.default.createElement(_WebChatContainerStateful.default, props.webChatContainerProps)), !((_props$controlProps14 = props.controlProps) !== null && _props$controlProps14 !== void 0 && _props$controlProps14.hideConfirmationPane) && (0, _componentController.shouldShowConfirmationPane)(state) && ((0, _omnichannelChatComponents.decodeComponentString)((_props$componentOverr9 = props.componentOverrides) === null || _props$componentOverr9 === void 0 ? void 0 : _props$componentOverr9.confirmationPane) || /*#__PURE__*/_react2.default.createElement(_ConfirmationPaneStateful.default, _extends({}, confirmationPaneProps, {
331
483
  setPostChatContext: setPostChatContextRelay,
332
- endChat: endChatRelay
333
- }))), !((_props$controlProps15 = props.controlProps) !== null && _props$controlProps15 !== void 0 && _props$controlProps15.hidePostChatLoadingPane) && (0, _componentController.shouldShowPostChatLoadingPane)(state) && ((0, _omnichannelChatComponents.decodeComponentString)((_props$componentOverr9 = props.componentOverrides) === null || _props$componentOverr9 === void 0 ? void 0 : _props$componentOverr9.postChatLoadingPane) || /*#__PURE__*/_react2.default.createElement(_PostChatLoadingPaneStateful.default, props.postChatLoadingPaneProps)), (0, _componentController.shouldShowPostChatSurveyPane)(state) && ((0, _omnichannelChatComponents.decodeComponentString)((_props$componentOverr10 = props.componentOverrides) === null || _props$componentOverr10 === void 0 ? void 0 : _props$componentOverr10.postChatSurveyPane) || /*#__PURE__*/_react2.default.createElement(_PostChatSurveyPaneStateful.default, _extends({}, props.postChatSurveyPaneProps, props.chatSDK))), (0, _createFooter.createFooter)(props, state), (0, _componentController.shouldShowEmailTranscriptPane)(state) && ((0, _omnichannelChatComponents.decodeComponentString)((_props$componentOverr11 = props.componentOverrides) === null || _props$componentOverr11 === void 0 ? void 0 : _props$componentOverr11.emailTranscriptPane) || /*#__PURE__*/_react2.default.createElement(_EmailTranscriptPaneStateful.default, props.emailTranscriptPane))));
484
+ prepareEndChat: prepareEndChatRelay
485
+ }))), !((_props$controlProps15 = props.controlProps) !== null && _props$controlProps15 !== void 0 && _props$controlProps15.hidePostChatLoadingPane) && (0, _componentController.shouldShowPostChatLoadingPane)(state) && ((0, _omnichannelChatComponents.decodeComponentString)((_props$componentOverr10 = props.componentOverrides) === null || _props$componentOverr10 === void 0 ? void 0 : _props$componentOverr10.postChatLoadingPane) || /*#__PURE__*/_react2.default.createElement(_PostChatLoadingPaneStateful.default, props.postChatLoadingPaneProps)), (0, _componentController.shouldShowPostChatSurveyPane)(state) && ((0, _omnichannelChatComponents.decodeComponentString)((_props$componentOverr11 = props.componentOverrides) === null || _props$componentOverr11 === void 0 ? void 0 : _props$componentOverr11.postChatSurveyPane) || /*#__PURE__*/_react2.default.createElement(_PostChatSurveyPaneStateful.default, _extends({}, props.postChatSurveyPaneProps, props.chatSDK))), (0, _createFooter.createFooter)(props, state), (0, _componentController.shouldShowEmailTranscriptPane)(state) && ((0, _omnichannelChatComponents.decodeComponentString)((_props$componentOverr12 = props.componentOverrides) === null || _props$componentOverr12 === void 0 ? void 0 : _props$componentOverr12.emailTranscriptPane) || /*#__PURE__*/_react2.default.createElement(_EmailTranscriptPaneStateful.default, props.emailTranscriptPane))));
334
486
  };
335
487
 
336
488
  exports.LiveChatWidgetStateful = LiveChatWidgetStateful;
@@ -15,6 +15,10 @@ var _utils = require("../../common/utils");
15
15
 
16
16
  var _useChatContextStore = _interopRequireDefault(require("../../hooks/useChatContextStore"));
17
17
 
18
+ var _TelemetryHelper = require("../../common/telemetry/TelemetryHelper");
19
+
20
+ var _TelemetryConstants = require("../../common/telemetry/TelemetryConstants");
21
+
18
22
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
19
23
 
20
24
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
@@ -46,6 +50,10 @@ const PostChatLoadingPaneStateful = props => {
46
50
  if (firstElement && firstElement[0]) {
47
51
  firstElement[0].focus();
48
52
  }
53
+
54
+ _TelemetryHelper.TelemetryHelper.logLoadingEvent(_TelemetryConstants.LogLevel.INFO, {
55
+ Event: _TelemetryConstants.TelemetryEvent.PostChatSurveyLoadingPaneLoaded
56
+ });
49
57
  }, []);
50
58
  return /*#__PURE__*/_react.default.createElement(_omnichannelChatComponents.LoadingPane, {
51
59
  componentOverrides: props.componentOverrides,
@@ -93,9 +93,10 @@ const PreChatSurveyPaneStateful = props => {
93
93
  });
94
94
 
95
95
  try {
96
- var _DataStoreManager$cli, _persistedState$domai;
96
+ var _state$domainStates, _state$domainStates$t, _state$domainStates$t2, _DataStoreManager$cli, _persistedState$domai;
97
97
 
98
- const widgetStateFromCache = (_DataStoreManager$cli = _DataStoreManager.DataStoreManager.clientDataStore) === null || _DataStoreManager$cli === void 0 ? void 0 : _DataStoreManager$cli.getData(_Constants.Constants.widgetStateDataKey, "localStorage");
98
+ const widgetStateCacheId = (0, _utils.getWidgetCacheId)(((_state$domainStates = state.domainStates) === null || _state$domainStates === void 0 ? void 0 : (_state$domainStates$t = _state$domainStates.telemetryInternalData) === null || _state$domainStates$t === void 0 ? void 0 : _state$domainStates$t.orgId) ?? "", ((_state$domainStates$t2 = state.domainStates.telemetryInternalData) === null || _state$domainStates$t2 === void 0 ? void 0 : _state$domainStates$t2.widgetId) ?? "");
99
+ const widgetStateFromCache = (_DataStoreManager$cli = _DataStoreManager.DataStoreManager.clientDataStore) === null || _DataStoreManager$cli === void 0 ? void 0 : _DataStoreManager$cli.getData(widgetStateCacheId, "localStorage");
99
100
  const persistedState = widgetStateFromCache ? JSON.parse(widgetStateFromCache) : undefined;
100
101
  let optionalParams = {};
101
102
 
@@ -109,9 +110,7 @@ const PreChatSurveyPaneStateful = props => {
109
110
  } else {
110
111
  const prechatResponseValues = (0, _utils.extractPreChatSurveyResponseValues)(state.domainStates.preChatSurveyResponse, values);
111
112
  optionalParams = {
112
- initContext: {
113
- preChatResponse: prechatResponseValues
114
- }
113
+ preChatResponse: prechatResponseValues
115
114
  };
116
115
  setPreChatResponseEmail(values);
117
116
  await initStartChat(optionalParams);
@@ -46,6 +46,14 @@ const ProactiveChatPaneStateful = props => {
46
46
  const handleProactiveChatInviteTimeout = () => {
47
47
  if (!timeoutRemoved) {
48
48
  setTimeoutRemoved(true);
49
+ dispatch({
50
+ type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_PROACTIVE_CHAT_PARAMS,
51
+ payload: {
52
+ proactiveChatBodyTitle: "",
53
+ proactiveChatEnablePrechat: false,
54
+ proactiveChatInNewWindow: false
55
+ }
56
+ });
49
57
  dispatch({
50
58
  type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_CONVERSATION_STATE,
51
59
  payload: _ConversationState.ConversationState.Closed
@@ -111,6 +119,14 @@ const ProactiveChatPaneStateful = props => {
111
119
  Description: "Proactive chat closed."
112
120
  });
113
121
 
122
+ dispatch({
123
+ type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_PROACTIVE_CHAT_PARAMS,
124
+ payload: {
125
+ proactiveChatBodyTitle: "",
126
+ proactiveChatEnablePrechat: false,
127
+ proactiveChatInNewWindow: false
128
+ }
129
+ });
114
130
  dispatch({
115
131
  type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_CONVERSATION_STATE,
116
132
  payload: _ConversationState.ConversationState.Closed