@microsoft/omnichannel-chat-widget 0.1.0-main.c461296 → 0.1.0-main.ceb1702

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 (104) hide show
  1. package/README.md +35 -11
  2. package/lib/cjs/common/Constants.js +46 -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 +82 -26
  24. package/lib/cjs/components/livechatwidget/livechatwidgetstateful/LiveChatWidgetStateful.js +200 -43
  25. package/lib/cjs/components/postchatloadingpanestateful/PostChatLoadingPaneStateful.js +8 -0
  26. package/lib/cjs/components/prechatsurveypanestateful/PreChatSurveyPaneStateful.js +5 -6
  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/webchattelemetry/WebChatLogger.js +45 -0
  36. package/lib/cjs/contexts/common/LiveChatWidgetActionType.js +9 -7
  37. package/lib/cjs/contexts/common/LiveChatWidgetContextInitialState.js +3 -1
  38. package/lib/cjs/contexts/createReducer.js +16 -10
  39. package/lib/cjs/controller/componentController.js +1 -1
  40. package/lib/cjs/plugins/newMessageEventHandler.js +10 -13
  41. package/lib/esm/common/Constants.js +42 -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 +82 -30
  63. package/lib/esm/components/livechatwidget/livechatwidgetstateful/LiveChatWidgetStateful.js +188 -46
  64. package/lib/esm/components/postchatloadingpanestateful/PostChatLoadingPaneStateful.js +6 -0
  65. package/lib/esm/components/prechatsurveypanestateful/PreChatSurveyPaneStateful.js +7 -8
  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/webchattelemetry/WebChatLogger.js +32 -0
  75. package/lib/esm/contexts/common/LiveChatWidgetActionType.js +9 -7
  76. package/lib/esm/contexts/common/LiveChatWidgetContextInitialState.js +3 -1
  77. package/lib/esm/contexts/createReducer.js +16 -9
  78. package/lib/esm/controller/componentController.js +1 -1
  79. package/lib/esm/plugins/newMessageEventHandler.js +10 -12
  80. package/lib/types/common/Constants.d.ts +23 -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/common/startChat.d.ts +2 -1
  92. package/lib/types/components/livechatwidget/interfaces/ILiveChatWidgetComponentOverrides.d.ts +1 -0
  93. package/lib/types/components/livechatwidget/interfaces/ILiveChatWidgetProps.d.ts +1 -1
  94. package/lib/types/components/reconnectchatpanestateful/interfaces/IReconnectChatPaneStatefulProps.d.ts +1 -0
  95. package/lib/types/components/webchatcontainerstateful/interfaces/IBotMagicCodeConfig.d.ts +4 -0
  96. package/lib/types/components/webchatcontainerstateful/interfaces/IWebChatContainerStatefulProps.d.ts +2 -0
  97. package/lib/types/components/webchatcontainerstateful/webchatcontroller/BotMagicCodeStore.d.ts +3 -0
  98. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/cardActionMiddleware.d.ts +2 -0
  99. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/cardActionMiddleware.spec.d.ts +1 -0
  100. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/messageTimestampMiddleware.d.ts +5 -0
  101. package/lib/types/components/webchatcontainerstateful/webchatcontroller/webchattelemetry/WebChatLogger.d.ts +1 -0
  102. package/lib/types/contexts/common/ILiveChatWidgetContext.d.ts +2 -0
  103. package/lib/types/contexts/common/LiveChatWidgetActionType.d.ts +10 -8
  104. package/package.json +6 -7
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.prepareStartChat = exports.initStartChat = void 0;
6
+ exports.setupChatState = exports.prepareStartChat = exports.initStartChat = void 0;
7
7
 
8
8
  var _Constants = require("../../../common/Constants");
9
9
 
@@ -35,29 +35,52 @@ 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
48
+ } // Redirecting if unauthenticated reconnect chat expired
43
49
 
44
50
 
51
+ if ((_props$reconnectChatP = props.reconnectChatPaneProps) !== null && _props$reconnectChatP !== void 0 && _props$reconnectChatP.reconnectId) {
52
+ var _props$reconnectChatP2, _props$reconnectChatP3;
53
+
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);
55
+ } else {
56
+ // Getting reconnectId for authenticated chat
57
+ const reconnectId = await (0, _reconnectChatHelper.getReconnectIdForAuthenticatedChat)(props, chatSDK);
58
+
59
+ if (reconnectId) {
60
+ dispatch({
61
+ type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_RECONNECT_ID,
62
+ payload: reconnectId
63
+ });
64
+ dispatch({
65
+ type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_CONVERSATION_STATE,
66
+ payload: _ConversationState.ConversationState.ReconnectChat
67
+ });
68
+ } else {
69
+ setCustomContextParams(props, state);
70
+ setupChatState(chatSDK, dispatch, setAdapter, state.appStates.conversationState === _ConversationState.ConversationState.ProactiveChat, state.appStates.proactiveChatStates.proactiveChatEnablePrechat);
71
+ }
72
+ }
73
+ };
74
+
75
+ exports.prepareStartChat = prepareStartChat;
76
+
77
+ const setupChatState = async (chatSDK, dispatch, setAdapter, isProactiveChat, proactiveChatEnablePrechatState) => {
78
+ // Getting PreChat Survey Context
45
79
  const parseToJson = false;
46
80
  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
-
49
- const reconnectId = await (0, _reconnectChatHelper.getReconnectIdForAuthenticatedChat)(props, chatSDK);
81
+ const showPrechat = isProactiveChat ? preChatSurveyResponse && proactiveChatEnablePrechatState : preChatSurveyResponse;
50
82
 
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) {
83
+ if (showPrechat) {
61
84
  dispatch({
62
85
  type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_PRE_CHAT_SURVEY_RESPONSE,
63
86
  payload: preChatSurveyResponse
@@ -76,12 +99,27 @@ const prepareStartChat = async (props, chatSDK, state, dispatch, setAdapter) =>
76
99
  }; // eslint-disable-next-line @typescript-eslint/no-explicit-any
77
100
 
78
101
 
79
- exports.prepareStartChat = prepareStartChat;
102
+ exports.setupChatState = setupChatState;
80
103
 
81
104
  const initStartChat = async (chatSDK, dispatch, setAdapter, params, persistedState) => {
82
105
  try {
83
106
  var _newAdapter$activity$, _TelemetryTimers$Widg;
84
107
 
108
+ let isStartChatSuccessful = false;
109
+
110
+ if (persistedState || params !== null && params !== void 0 && params.liveChatContext) {
111
+ var _persistedState$domai, _persistedState$domai2, _persistedState$domai3, _persistedState$domai4, _persistedState$domai5;
112
+
113
+ // Broadcasting limited cached chat details
114
+ _omnichannelChatComponents.BroadcastService.postMessage({
115
+ eventName: _TelemetryConstants.BroadcastEvent.ChatRetrievedFromCache,
116
+ payload: {
117
+ 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,
118
+ 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
119
+ }
120
+ });
121
+ }
122
+
85
123
  try {
86
124
  _TelemetryManager.TelemetryTimers.WidgetLoadTimer = (0, _utils.createTimer)();
87
125
 
@@ -89,7 +127,9 @@ const initStartChat = async (chatSDK, dispatch, setAdapter, params, persistedSta
89
127
  Event: _TelemetryConstants.TelemetryEvent.StartChatSDKCall
90
128
  });
91
129
 
92
- await chatSDK.startChat(params);
130
+ optionalParams = Object.assign({}, params, optionalParams);
131
+ await chatSDK.startChat(optionalParams);
132
+ isStartChatSuccessful = true;
93
133
  } catch (error) {
94
134
  _TelemetryHelper.TelemetryHelper.logSDKEvent(_TelemetryConstants.LogLevel.ERROR, {
95
135
  Event: _TelemetryConstants.TelemetryEvent.StartChatMethodException,
@@ -97,6 +137,8 @@ const initStartChat = async (chatSDK, dispatch, setAdapter, params, persistedSta
97
137
  exception: `Failed to setup startChat: ${error}`
98
138
  }
99
139
  });
140
+
141
+ isStartChatSuccessful = false;
100
142
  }
101
143
 
102
144
  const newAdapter = await (0, _createAdapter.createAdapter)(chatSDK);
@@ -124,10 +166,12 @@ const initStartChat = async (chatSDK, dispatch, setAdapter, params, persistedSta
124
166
  await (0, _setPostChatContextAndLoadSurvey.setPostChatContextAndLoadSurvey)(chatSDK, dispatch);
125
167
  await (0, _updateSessionDataForTelemetry.updateSessionDataForTelemetry)(chatSDK, dispatch); // Set app state to Active
126
168
 
127
- dispatch({
128
- type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_CONVERSATION_STATE,
129
- payload: _ConversationState.ConversationState.Active
130
- });
169
+ if (isStartChatSuccessful) {
170
+ dispatch({
171
+ type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_CONVERSATION_STATE,
172
+ payload: _ConversationState.ConversationState.Active
173
+ });
174
+ }
131
175
  } else {
132
176
  dispatch({
133
177
  type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_WIDGET_STATE,
@@ -169,24 +213,36 @@ const initStartChat = async (chatSDK, dispatch, setAdapter, params, persistedSta
169
213
  exports.initStartChat = initStartChat;
170
214
 
171
215
  const canConnectToExistingChat = async (props, chatSDK, state, dispatch, setAdapter) => {
172
- var _DataStoreManager$cli, _persistedState$domai;
216
+ var _chatSDK$omnichannelC, _chatSDK$omnichannelC2, _DataStoreManager$cli, _persistedState$domai6;
173
217
 
174
- const widgetStateFromCache = (_DataStoreManager$cli = _DataStoreManager.DataStoreManager.clientDataStore) === null || _DataStoreManager$cli === void 0 ? void 0 : _DataStoreManager$cli.getData(_Constants.Constants.widgetStateDataKey, "localStorage");
218
+ 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) ?? "");
219
+ const widgetStateFromCache = (_DataStoreManager$cli = _DataStoreManager.DataStoreManager.clientDataStore) === null || _DataStoreManager$cli === void 0 ? void 0 : _DataStoreManager$cli.getData(widgetStateEventName, "localStorage");
175
220
  const persistedState = widgetStateFromCache ? JSON.parse(widgetStateFromCache) : undefined;
176
221
 
177
- if (persistedState !== null && persistedState !== void 0 && (_persistedState$domai = persistedState.domainStates) !== null && _persistedState$domai !== void 0 && _persistedState$domai.liveChatContext) {
178
- var _persistedState$domai2;
222
+ if (persistedState !== null && persistedState !== void 0 && (_persistedState$domai6 = persistedState.domainStates) !== null && _persistedState$domai6 !== void 0 && _persistedState$domai6.liveChatContext) {
223
+ var _persistedState$domai7;
179
224
 
180
225
  dispatch({
181
226
  type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_CONVERSATION_STATE,
182
227
  payload: _ConversationState.ConversationState.Loading
183
228
  });
184
229
  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
230
+ liveChatContext: persistedState === null || persistedState === void 0 ? void 0 : (_persistedState$domai7 = persistedState.domainStates) === null || _persistedState$domai7 === void 0 ? void 0 : _persistedState$domai7.liveChatContext
186
231
  };
187
232
  await initStartChat(chatSDK, dispatch, setAdapter, optionalParams, persistedState);
188
233
  return true;
189
234
  } else {
190
235
  return false;
191
236
  }
237
+ };
238
+
239
+ const setCustomContextParams = (props, state) => {
240
+ var _props$chatConfig, _state$domainStates;
241
+
242
+ // Add custom context if any only for unauthenticated chat
243
+ 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) {
244
+ optionalParams = Object.assign({}, optionalParams, {
245
+ customContext: state.domainStates.customContext
246
+ });
247
+ }
192
248
  };
@@ -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$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;
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,18 +221,36 @@ const LiveChatWidgetStateful = props => {
185
221
  payload: _ConversationState.ConversationState.ReconnectChat
186
222
  });
187
223
  } else {
188
- dispatch({
189
- type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_CONVERSATION_STATE,
190
- payload: _ConversationState.ConversationState.Loading
191
- });
192
- (0, _startChat.initStartChat)(chatSDK, dispatch, setAdapter);
224
+ const chatStartedSkippingChatButtonRendering = {
225
+ eventName: _TelemetryConstants.BroadcastEvent.StartChatSkippingChatButtonRendering
226
+ };
227
+
228
+ _omnichannelChatComponents.BroadcastService.postMessage(chatStartedSkippingChatButtonRendering);
229
+
230
+ (0, _startChat.setupChatState)(chatSDK, dispatch, setAdapter);
193
231
  }
194
232
  });
195
233
  }
196
234
  }
197
- }, [state.appStates.skipChatButtonRendering]);
235
+ }, [state.appStates.skipChatButtonRendering]); // useEffect for when skip chat button rendering
236
+
198
237
  (0, _react2.useEffect)(() => {
199
- _omnichannelChatComponents.BroadcastService.getMessageByEventName("StartProactiveChat").subscribe(msg => {
238
+ var _chatSDK$omnichannelC3, _chatSDK$omnichannelC4;
239
+
240
+ // Add the custom context on receiving the SetCustomContext event
241
+ _omnichannelChatComponents.BroadcastService.getMessageByEventName(_TelemetryConstants.BroadcastEvent.SetCustomContext).subscribe(msg => {
242
+ _TelemetryHelper.TelemetryHelper.logActionEvent(_TelemetryConstants.LogLevel.INFO, {
243
+ Event: _TelemetryConstants.TelemetryEvent.CustomContextReceived,
244
+ Description: "CustomContext received."
245
+ });
246
+
247
+ dispatch({
248
+ type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_CUSTOM_CONTEXT,
249
+ payload: msg === null || msg === void 0 ? void 0 : msg.payload
250
+ });
251
+ });
252
+
253
+ _omnichannelChatComponents.BroadcastService.getMessageByEventName(_TelemetryConstants.BroadcastEvent.StartProactiveChat).subscribe(msg => {
200
254
  _TelemetryHelper.TelemetryHelper.logActionEvent(_TelemetryConstants.LogLevel.INFO, {
201
255
  Event: _TelemetryConstants.TelemetryEvent.StartProactiveChatEventReceived,
202
256
  Description: "Start proactive chat event received."
@@ -212,18 +266,112 @@ const LiveChatWidgetStateful = props => {
212
266
  Description: "Start proactive chat method called, when chat was already triggered."
213
267
  });
214
268
  }
269
+ }); // Start chat from SDK Event
270
+
271
+
272
+ _omnichannelChatComponents.BroadcastService.getMessageByEventName(_TelemetryConstants.BroadcastEvent.StartChat).subscribe(() => {
273
+ _TelemetryHelper.TelemetryHelper.logActionEvent(_TelemetryConstants.LogLevel.INFO, {
274
+ Event: _TelemetryConstants.TelemetryEvent.StartChatEventRecevied,
275
+ Description: "Start chat event received."
276
+ });
277
+
278
+ const persistedState = getStateFromCache();
279
+
280
+ if (persistedState && (persistedState.appStates.conversationState === _ConversationState.ConversationState.Closed || persistedState.appStates.conversationState === _ConversationState.ConversationState.InActive || persistedState.appStates.conversationState === _ConversationState.ConversationState.Postchat)) {
281
+ // Embedded mode
282
+ _omnichannelChatComponents.BroadcastService.postMessage({
283
+ eventName: _TelemetryConstants.BroadcastEvent.ChatInitiated
284
+ });
285
+
286
+ (0, _startChat.prepareStartChat)(props, chatSDK, state, dispatch, setAdapter);
287
+ } else if (!persistedState) {
288
+ // Popout chat
289
+ _omnichannelChatComponents.BroadcastService.postMessage({
290
+ eventName: _TelemetryConstants.BroadcastEvent.ChatInitiated
291
+ });
292
+
293
+ (0, _startChat.prepareStartChat)(props, chatSDK, state, dispatch, setAdapter);
294
+ } else {
295
+ var _persistedState$domai, _persistedState$domai2, _persistedState$domai3, _persistedState$domai4;
296
+
297
+ // Minimize to Maximize
298
+ dispatch({
299
+ type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_MINIMIZED,
300
+ payload: false
301
+ });
302
+
303
+ _omnichannelChatComponents.BroadcastService.postMessage({
304
+ eventName: _TelemetryConstants.BroadcastEvent.MaximizeChat,
305
+ payload: {
306
+ 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,
307
+ 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
308
+ }
309
+ });
310
+ }
311
+ }); // End chat
312
+
313
+
314
+ _omnichannelChatComponents.BroadcastService.getMessageByEventName(_TelemetryConstants.BroadcastEvent.InitiateEndChat).subscribe(async () => {
315
+ if (canEndChat.current) {
316
+ (0, _endChat.prepareEndChat)(props, chatSDK, setAdapter, setWebChatStyles, dispatch, adapter, state);
317
+ } else {
318
+ const skipEndChatSDK = true;
319
+ const skipCloseChat = false;
320
+ (0, _endChat.endChat)(props, chatSDK, setAdapter, setWebChatStyles, dispatch, adapter, skipEndChatSDK, skipCloseChat);
321
+ }
322
+
323
+ _omnichannelChatComponents.BroadcastService.postMessage({
324
+ eventName: _TelemetryConstants.BroadcastEvent.CloseChat
325
+ });
215
326
  });
216
327
 
328
+ _omnichannelChatComponents.BroadcastService.getMessageByEventName(_TelemetryConstants.BroadcastEvent.InitiateEndChatOnBrowserUnload).subscribe(() => {
329
+ initiateEndChatOnBrowserUnload();
330
+ }); // reset proactive chat params
331
+
332
+
333
+ _omnichannelChatComponents.BroadcastService.getMessageByEventName(_TelemetryConstants.BroadcastEvent.ResetProactiveChatParams).subscribe(async () => {
334
+ dispatch({
335
+ type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_PROACTIVE_CHAT_PARAMS,
336
+ payload: {
337
+ proactiveChatBodyTitle: "",
338
+ proactiveChatEnablePrechat: false,
339
+ proactiveChatInNewWindow: false
340
+ }
341
+ });
342
+ }); // Listen to end chat event from other tabs
343
+
344
+
345
+ 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);
346
+
347
+ _omnichannelChatComponents.BroadcastService.getMessageByEventName(endChatEventName).subscribe(async () => {
348
+ (0, _endChat.endChat)(props, chatSDK, setAdapter, setWebChatStyles, dispatch, adapter, false, false, false);
349
+ }); // Close popout window
350
+
351
+
217
352
  window.addEventListener("beforeunload", () => {
353
+ _TelemetryHelper.TelemetryHelper.logLoadingEvent(_TelemetryConstants.LogLevel.INFO, {
354
+ Event: _TelemetryConstants.TelemetryEvent.WindowClosed,
355
+ Description: "Closed window."
356
+ });
357
+
218
358
  (0, _disposeTelemetryLoggers.disposeTelemetryLoggers)();
219
359
  });
220
360
 
221
361
  if (state.appStates.conversationEndedByAgent) {
222
362
  (0, _endChat.endChat)(props, chatSDK, setAdapter, setWebChatStyles, dispatch, adapter);
223
- }
363
+ } //Listen to WidgetSize
364
+
365
+
366
+ _omnichannelChatComponents.BroadcastService.getMessageByEventName("WidgetSize").subscribe(msg => {
367
+ dispatch({
368
+ type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_WIDGET_SIZE,
369
+ payload: msg === null || msg === void 0 ? void 0 : msg.payload
370
+ });
371
+ });
224
372
  }, []);
225
373
  (0, _react2.useEffect)(() => {
226
- canStartProactiveChat.current = state.appStates.conversationState === _ConversationState.ConversationState.Closed;
374
+ canEndChat.current = state.appStates.conversationState === _ConversationState.ConversationState.Active;
227
375
 
228
376
  if (state.appStates.conversationState === _ConversationState.ConversationState.Active) {
229
377
  chatSDK === null || chatSDK === void 0 ? void 0 : chatSDK.onNewMessage(() => {
@@ -243,7 +391,10 @@ const LiveChatWidgetStateful = props => {
243
391
  });
244
392
  });
245
393
  }
246
- }, [state.appStates.conversationState]); // Reset the UnreadMessageCount when minimized is toggled and broadcast it.
394
+ }, [state.appStates.conversationState]);
395
+ (0, _react2.useEffect)(() => {
396
+ canStartProactiveChat.current = state.appStates.conversationState === _ConversationState.ConversationState.Closed && !state.appStates.proactiveChatStates.proactiveChatInNewWindow;
397
+ }, [state.appStates.conversationState, state.appStates.proactiveChatStates.proactiveChatInNewWindow]); // Reset the UnreadMessageCount when minimized is toggled and broadcast it.
247
398
 
248
399
  (0, _react2.useEffect)(() => {
249
400
  currentMessageCountRef.current = -1;
@@ -277,30 +428,36 @@ const LiveChatWidgetStateful = props => {
277
428
  setWebChatStyles({ ...webChatStyles,
278
429
  ...((_props$webChatContain2 = props.webChatContainerProps) === null || _props$webChatContain2 === void 0 ? void 0 : _props$webChatContain2.webChatStyles)
279
430
  });
280
- }, [(_props$webChatContain3 = props.webChatContainerProps) === null || _props$webChatContain3 === void 0 ? void 0 : _props$webChatContain3.webChatStyles]);
431
+ }, [(_props$webChatContain3 = props.webChatContainerProps) === null || _props$webChatContain3 === void 0 ? void 0 : _props$webChatContain3.webChatStyles]); // Publish chat widget state
432
+
433
+ (0, _react2.useEffect)(() => {
434
+ var _props$chatSDK, _props$chatSDK$omnich, _props$chatSDK2, _props$chatSDK2$omnic;
435
+
436
+ 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);
437
+ const chatWidgetStateChangeEvent = {
438
+ eventName: widgetStateEventName,
439
+ payload: { ...state
440
+ }
441
+ };
442
+
443
+ _omnichannelChatComponents.BroadcastService.postMessage(chatWidgetStateChangeEvent);
444
+ }, [state]);
281
445
  const webChatProps = (0, _initWebChatComposer.initWebChatComposer)(props, chatSDK, state, dispatch, setWebChatStyles);
282
446
 
283
447
  const setPostChatContextRelay = () => (0, _setPostChatContextAndLoadSurvey.setPostChatContextAndLoadSurvey)(chatSDK, dispatch); // eslint-disable-next-line @typescript-eslint/no-explicit-any
284
448
 
285
449
 
286
- const endChatRelay = (adapter, skipEndChatSDK, skipCloseChat) => (0, _endChat.endChat)(props, chatSDK, setAdapter, setWebChatStyles, dispatch, adapter, skipEndChatSDK, skipCloseChat);
450
+ 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
451
 
288
- const prepareStartChatRelay = () => (0, _startChat.prepareStartChat)(props, chatSDK, state, dispatch, setAdapter); // eslint-disable-next-line @typescript-eslint/no-explicit-any
289
452
 
453
+ const prepareEndChatRelay = (adapter, state) => (0, _endChat.prepareEndChat)(props, chatSDK, setAdapter, setWebChatStyles, dispatch, adapter, state);
290
454
 
291
- const initStartChatRelay = (optionalParams, persistedState) => (0, _startChat.initStartChat)(chatSDK, dispatch, setAdapter, optionalParams, persistedState);
455
+ const prepareStartChatRelay = () => (0, _startChat.prepareStartChat)(props, chatSDK, state, dispatch, setAdapter); // eslint-disable-next-line @typescript-eslint/no-explicit-any
292
456
 
293
- const confirmationPaneProps = (0, _initConfirmationPropsComposer.initConfirmationPropsComposer)(props); // publish chat widget state
294
457
 
295
- (0, _react2.useEffect)(() => {
296
- const chatWidgetStateChangeEvent = {
297
- eventName: _TelemetryConstants.BroadcastEvent.ChatWidgetStateChanged,
298
- payload: { ...state
299
- }
300
- };
458
+ const initStartChatRelay = (optionalParams, persistedState) => (0, _startChat.initStartChat)(chatSDK, dispatch, setAdapter, optionalParams, persistedState);
301
459
 
302
- _omnichannelChatComponents.BroadcastService.postMessage(chatWidgetStateChangeEvent);
303
- }, [state]);
460
+ const confirmationPaneProps = (0, _initConfirmationPropsComposer.initConfirmationPropsComposer)(props);
304
461
  return /*#__PURE__*/_react2.default.createElement(Composer, _extends({}, webChatProps, {
305
462
  styleOptions: webChatStyles,
306
463
  directLine: ((_props$webChatContain4 = props.webChatContainerProps) === null || _props$webChatContain4 === void 0 ? void 0 : _props$webChatContain4.directLine) ?? adapter ?? _defaultWebChatContainerStatefulProps.defaultWebChatContainerStatefulProps.directLine
@@ -308,29 +465,29 @@ const LiveChatWidgetStateful = props => {
308
465
  id: widgetElementId,
309
466
  styles: generalStyles,
310
467
  className: (_props$styleProps2 = props.styleProps) === null || _props$styleProps2 === void 0 ? void 0 : _props$styleProps2.className
311
- }, !((_props$controlProps5 = props.controlProps) !== null && _props$controlProps5 !== void 0 && _props$controlProps5.hideChatButton) && (0, _componentController.shouldShowChatButton)(state) && ((0, _omnichannelChatComponents.decodeComponentString)((_props$componentOverr = props.componentOverrides) === null || _props$componentOverr === void 0 ? void 0 : _props$componentOverr.chatButton) || /*#__PURE__*/_react2.default.createElement(_ChatButtonStateful.default, {
468
+ }, !((_props$controlProps5 = props.controlProps) !== null && _props$controlProps5 !== void 0 && _props$controlProps5.hideChatButton) && !((_props$controlProps6 = props.controlProps) !== null && _props$controlProps6 !== void 0 && _props$controlProps6.skipChatButtonRendering) && (0, _componentController.shouldShowChatButton)(state) && ((0, _omnichannelChatComponents.decodeComponentString)((_props$componentOverr = props.componentOverrides) === null || _props$componentOverr === void 0 ? void 0 : _props$componentOverr.chatButton) || /*#__PURE__*/_react2.default.createElement(_ChatButtonStateful.default, {
312
469
  buttonProps: props.chatButtonProps,
313
470
  outOfOfficeButtonProps: props.outOfOfficeChatButtonProps,
314
471
  startChat: prepareStartChatRelay
315
- })), !((_props$controlProps6 = props.controlProps) !== null && _props$controlProps6 !== void 0 && _props$controlProps6.hideProactiveChatPane) && (0, _componentController.shouldShowProactiveChatPane)(state) && ((0, _omnichannelChatComponents.decodeComponentString)((_props$componentOverr2 = props.componentOverrides) === null || _props$componentOverr2 === void 0 ? void 0 : _props$componentOverr2.proactiveChatPane) || /*#__PURE__*/_react2.default.createElement(_ProactiveChatPaneStateful.default, {
472
+ })), !((_props$controlProps7 = props.controlProps) !== null && _props$controlProps7 !== void 0 && _props$controlProps7.hideProactiveChatPane) && (0, _componentController.shouldShowProactiveChatPane)(state) && ((0, _omnichannelChatComponents.decodeComponentString)((_props$componentOverr2 = props.componentOverrides) === null || _props$componentOverr2 === void 0 ? void 0 : _props$componentOverr2.proactiveChatPane) || /*#__PURE__*/_react2.default.createElement(_ProactiveChatPaneStateful.default, {
316
473
  proactiveChatProps: props.proactiveChatPaneProps,
317
474
  startChat: prepareStartChatRelay
318
- })), !((_props$controlProps7 = props.controlProps) !== null && _props$controlProps7 !== void 0 && _props$controlProps7.hideHeader) && (0, _componentController.shouldShowHeader)(state) && ((0, _omnichannelChatComponents.decodeComponentString)((_props$componentOverr3 = props.componentOverrides) === null || _props$componentOverr3 === void 0 ? void 0 : _props$componentOverr3.header) || /*#__PURE__*/_react2.default.createElement(_HeaderStateful.default, {
475
+ })), !((_props$controlProps8 = props.controlProps) !== null && _props$controlProps8 !== void 0 && _props$controlProps8.hideHeader) && (0, _componentController.shouldShowHeader)(state) && ((0, _omnichannelChatComponents.decodeComponentString)((_props$componentOverr3 = props.componentOverrides) === null || _props$componentOverr3 === void 0 ? void 0 : _props$componentOverr3.header) || /*#__PURE__*/_react2.default.createElement(_HeaderStateful.default, {
319
476
  headerProps: props.headerProps,
320
477
  outOfOfficeHeaderProps: props.outOfOfficeHeaderProps,
321
478
  endChat: endChatRelay
322
- })), !((_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, {
479
+ })), !((_props$controlProps9 = props.controlProps) !== null && _props$controlProps9 !== void 0 && _props$controlProps9.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$controlProps10 = props.controlProps) !== null && _props$controlProps10 !== void 0 && _props$controlProps10.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$controlProps11 = props.controlProps) !== null && _props$controlProps11 !== void 0 && _props$controlProps11.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
480
  reconnectChatProps: props.reconnectChatPaneProps,
324
481
  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, {
482
+ })), !((_props$controlProps12 = props.controlProps) !== null && _props$controlProps12 !== void 0 && _props$controlProps12.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
483
  surveyProps: props.preChatSurveyPaneProps,
327
484
  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({
485
+ })), !((_props$controlProps13 = props.controlProps) !== null && _props$controlProps13 !== void 0 && _props$controlProps13.hideCallingContainer) && (0, _componentController.shouldShowCallingContainer)(state) && /*#__PURE__*/_react2.default.createElement(_CallingContainerStateful.default, _extends({
329
486
  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, {
487
+ }, props.callingContainerProps)), !((_props$controlProps14 = props.controlProps) !== null && _props$controlProps14 !== void 0 && _props$controlProps14.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$controlProps15 = props.controlProps) !== null && _props$controlProps15 !== void 0 && _props$controlProps15.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
488
  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))));
489
+ prepareEndChat: prepareEndChatRelay
490
+ }))), !((_props$controlProps16 = props.controlProps) !== null && _props$controlProps16 !== void 0 && _props$controlProps16.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
491
  };
335
492
 
336
493
  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,13 +93,14 @@ 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
 
102
- if (persistedState !== null && persistedState !== void 0 && (_persistedState$domai = persistedState.domainStates) !== null && _persistedState$domai !== void 0 && _persistedState$domai.liveChatContext) {
103
+ if (persistedState !== null && persistedState !== void 0 && (_persistedState$domai = persistedState.domainStates) !== null && _persistedState$domai !== void 0 && _persistedState$domai.liveChatContext && !state.appStates.skipChatButtonRendering) {
103
104
  var _persistedState$domai2;
104
105
 
105
106
  optionalParams = {
@@ -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);