@microsoft/omnichannel-chat-widget 0.1.0-main.6d898a1 → 0.1.0-main.72ced10

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 (26) hide show
  1. package/lib/cjs/common/Constants.js +1 -0
  2. package/lib/cjs/common/storage/default/defaultCacheManager.js +2 -2
  3. package/lib/cjs/common/storage/default/defaultClientDataStoreProvider.js +15 -6
  4. package/lib/cjs/common/telemetry/TelemetryConstants.js +3 -0
  5. package/lib/cjs/components/livechatwidget/common/defaultProps/dummyDefaultProps.js +3 -2
  6. package/lib/cjs/components/livechatwidget/common/initWebChatComposer.js +13 -19
  7. package/lib/cjs/components/livechatwidget/common/startChat.js +21 -2
  8. package/lib/cjs/components/livechatwidget/livechatwidgetstateful/LiveChatWidgetStateful.js +27 -26
  9. package/lib/cjs/contexts/common/LiveChatWidgetContextInitialState.js +4 -2
  10. package/lib/cjs/plugins/newMessageEventHandler.js +1 -1
  11. package/lib/esm/common/Constants.js +1 -0
  12. package/lib/esm/common/storage/default/defaultCacheManager.js +2 -2
  13. package/lib/esm/common/storage/default/defaultClientDataStoreProvider.js +15 -6
  14. package/lib/esm/common/telemetry/TelemetryConstants.js +3 -0
  15. package/lib/esm/components/livechatwidget/common/defaultProps/dummyDefaultProps.js +3 -2
  16. package/lib/esm/components/livechatwidget/common/initWebChatComposer.js +13 -19
  17. package/lib/esm/components/livechatwidget/common/startChat.js +21 -2
  18. package/lib/esm/components/livechatwidget/livechatwidgetstateful/LiveChatWidgetStateful.js +28 -27
  19. package/lib/esm/contexts/common/LiveChatWidgetContextInitialState.js +4 -2
  20. package/lib/esm/plugins/newMessageEventHandler.js +1 -1
  21. package/lib/types/common/Constants.d.ts +1 -0
  22. package/lib/types/common/storage/default/defaultCacheManager.d.ts +1 -1
  23. package/lib/types/common/storage/default/defaultClientDataStoreProvider.d.ts +1 -1
  24. package/lib/types/common/telemetry/TelemetryConstants.d.ts +4 -1
  25. package/lib/types/components/livechatwidget/interfaces/ILiveChatWidgetControlProps.d.ts +1 -0
  26. package/package.json +3 -3
@@ -89,6 +89,7 @@ _defineProperty(Constants, "internetConnectionTestUrlText", "Omnichannel Connect
89
89
  _defineProperty(Constants, "ChatWidgetStateChangedPrefix", "ChatWidgetStateChanged");
90
90
  _defineProperty(Constants, "PostChatLoadingDurationInMs", 2000);
91
91
  _defineProperty(Constants, "BrowserUnloadConfirmationMessage", "Do you want to leave chat?");
92
+ _defineProperty(Constants, "CacheTtlInMinutes", 15);
92
93
  const Regex = (_class = class Regex {}, _defineProperty(_class, "EmailRegex", "(?:[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?\\.)+[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?|\\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-zA-Z0-9-]*[a-zA-Z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])"), _class);
93
94
  exports.Regex = Regex;
94
95
  class HtmlIdNames {}
@@ -13,11 +13,11 @@ function _toPrimitive(input, hint) { if (typeof input !== "object" || input ===
13
13
  class defaultCacheManager {}
14
14
  exports.defaultCacheManager = defaultCacheManager;
15
15
  _defineProperty(defaultCacheManager, "InternalCache", {});
16
- const registerBroadcastServiceForLocalStorage = (orgid, widgetId, widgetInstanceId) => {
16
+ const registerBroadcastServiceForLocalStorage = (orgid, widgetId, widgetInstanceId, ttlInMins) => {
17
17
  const widgetCacheId = (0, _utils.getWidgetCacheId)(orgid, widgetId, widgetInstanceId);
18
18
  _omnichannelChatComponents.BroadcastService.getMessageByEventName(widgetCacheId).subscribe(msg => {
19
19
  try {
20
- (0, _defaultClientDataStoreProvider.defaultClientDataStoreProvider)().setData(widgetCacheId, JSON.stringify(msg.payload), "localStorage");
20
+ (0, _defaultClientDataStoreProvider.defaultClientDataStoreProvider)(ttlInMins).setData(widgetCacheId, JSON.stringify(msg.payload), "localStorage");
21
21
  } catch (error) {
22
22
  console.error("Error in setting data to localstorage", error);
23
23
  }
@@ -4,21 +4,30 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.defaultClientDataStoreProvider = void 0;
7
- var _defaultInMemoryDataStore = require("./defaultInMemoryDataStore");
8
- var _TelemetryHelper = require("../../telemetry/TelemetryHelper");
9
7
  var _TelemetryConstants = require("../../telemetry/TelemetryConstants");
10
- const defaultClientDataStoreProvider = () => {
8
+ var _TelemetryHelper = require("../../telemetry/TelemetryHelper");
9
+ var _defaultInMemoryDataStore = require("./defaultInMemoryDataStore");
10
+ /* eslint-disable @typescript-eslint/no-explicit-any */
11
+
12
+ const defaultClientDataStoreProvider = function () {
13
+ let cacheTtlinMins = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
14
+ let ttlInMs = 0;
11
15
  const isCookieAllowed = () => {
12
16
  try {
13
17
  localStorage;
14
18
  sessionStorage;
15
19
  return true;
16
20
  } catch (error) {
17
- console.error("Third party cookie blocked");
21
+ if (!window.TPCWarningShown) {
22
+ console.warn("Third party cookies blocked.");
23
+ window.TPCWarningShown = true;
24
+ }
18
25
  return false;
19
26
  }
20
27
  };
21
- const TtlInMs = 15 * 60 * 1000; // 15 mins
28
+ if (ttlInMs == 0) {
29
+ ttlInMs = cacheTtlinMins * 60 * 1000;
30
+ }
22
31
  const dataStoreProvider = {
23
32
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
24
33
  setData: (key, data, type) => {
@@ -28,7 +37,7 @@ const defaultClientDataStoreProvider = () => {
28
37
  const now = new Date();
29
38
  const item = {
30
39
  data: data,
31
- expiry: now.getTime() + TtlInMs
40
+ expiry: now.getTime() + ttlInMs
32
41
  };
33
42
  const strItem = JSON.stringify(item);
34
43
  if (type === "localStorage") {
@@ -54,6 +54,8 @@ exports.BroadcastEvent = BroadcastEvent;
54
54
  BroadcastEvent["InitiateEndChatOnBrowserUnload"] = "InitiateEndChatOnBrowserUnload";
55
55
  BroadcastEvent["ClosePopoutWindow"] = "ClosePopoutWindow";
56
56
  BroadcastEvent["RaiseErrorEvent"] = "RaiseErrorEvent";
57
+ BroadcastEvent["NetworkDisconnected"] = "NetworkDisconnected";
58
+ BroadcastEvent["NetworkReconnected"] = "NetworkReconnected";
57
59
  })(BroadcastEvent || (exports.BroadcastEvent = BroadcastEvent = {}));
58
60
  let TelemetryEvent;
59
61
  exports.TelemetryEvent = TelemetryEvent;
@@ -170,6 +172,7 @@ exports.TelemetryEvent = TelemetryEvent;
170
172
  TelemetryEvent["ReconnectChatMinimize"] = "ReconnectChatMinimize";
171
173
  TelemetryEvent["MessageSent"] = "MessageSent";
172
174
  TelemetryEvent["MessageReceived"] = "MessageReceived";
175
+ TelemetryEvent["SystemMessageReceived"] = "SystemMessageReceived";
173
176
  TelemetryEvent["CustomContextReceived"] = "CustomContextReceived";
174
177
  TelemetryEvent["NetworkDisconnected"] = "NetworkDisconnected";
175
178
  TelemetryEvent["NetworkReconnected"] = "NetworkReconnected";
@@ -1123,7 +1123,8 @@ const dummyDefaultProps = {
1123
1123
  dir: "auto",
1124
1124
  hideOOOHPane: false,
1125
1125
  hideTitle: false,
1126
- titleText: "Thanks for contacting us. You have reached us outside of our operating hours. An agent will respond when we open."
1126
+ titleText: "Thanks for contacting us. You have reached us outside of our operating hours. An agent will respond when we open. Please see link https://microsoft.com",
1127
+ openLinkInNewTab: true
1127
1128
  },
1128
1129
  styleProps: {
1129
1130
  generalStyleProps: {
@@ -1166,7 +1167,7 @@ const dummyDefaultProps = {
1166
1167
  subtitleText: "Please take a moment to give us feedback about your chat experience. We are loading the survey for you now."
1167
1168
  },
1168
1169
  styleProps: {
1169
- // ...[Existing chat button style props]
1170
+ // ...[Existing loading pane style props]
1170
1171
  generalStyleProps: {
1171
1172
  position: "initial",
1172
1173
  width: "100%",
@@ -68,25 +68,19 @@ const initWebChatComposer = (props, chatSDK, state, dispatch, setWebChatStyles)
68
68
  };
69
69
  });
70
70
  }
71
- if (isPostChatEnabled === "true") {
72
- if (postChatSurveyMode === _PostChatSurveyMode.PostChatSurveyMode.Embed) {
73
- _WebChatStoreLoader.WebChatStoreLoader.store = null;
74
- dispatch({
75
- type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_CONVERSATION_STATE,
76
- payload: _ConversationState.ConversationState.PostchatLoading
77
- });
78
- await (0, _utils.addDelayInMs)(_Constants.Constants.PostChatLoadingDurationInMs);
79
- const loadPostChatEvent = {
80
- eventName: _TelemetryConstants.BroadcastEvent.LoadPostChatSurvey
81
- };
82
- _omnichannelChatComponents.BroadcastService.postMessage(loadPostChatEvent);
83
- } else if (postChatSurveyMode === _PostChatSurveyMode.PostChatSurveyMode.Link) {
84
- dispatch({
85
- type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_CONVERSATION_STATE,
86
- payload: _ConversationState.ConversationState.InActive
87
- });
88
- }
89
- } else {
71
+ if (isPostChatEnabled === "true" && postChatSurveyMode === _PostChatSurveyMode.PostChatSurveyMode.Embed && state.appStates.conversationState === _ConversationState.ConversationState.Active) {
72
+ _WebChatStoreLoader.WebChatStoreLoader.store = null;
73
+ dispatch({
74
+ type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_CONVERSATION_STATE,
75
+ payload: _ConversationState.ConversationState.PostchatLoading
76
+ });
77
+ await (0, _utils.addDelayInMs)(_Constants.Constants.PostChatLoadingDurationInMs);
78
+ const loadPostChatEvent = {
79
+ eventName: _TelemetryConstants.BroadcastEvent.LoadPostChatSurvey
80
+ };
81
+ _omnichannelChatComponents.BroadcastService.postMessage(loadPostChatEvent);
82
+ }
83
+ if (state.appStates.conversationState === _ConversationState.ConversationState.Active) {
90
84
  dispatch({
91
85
  type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_CONVERSATION_STATE,
92
86
  payload: _ConversationState.ConversationState.InActive
@@ -93,6 +93,7 @@ const setPreChatAndInitiateChat = async (chatSDK, dispatch, setAdapter, isProact
93
93
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
94
94
  exports.setPreChatAndInitiateChat = setPreChatAndInitiateChat;
95
95
  const initStartChat = async (chatSDK, chatConfig, getAuthToken, dispatch, setAdapter, params, persistedState) => {
96
+ let isStartChatSuccessful = false;
96
97
  try {
97
98
  var _newAdapter$activity$, _TelemetryTimers$Widg;
98
99
  //Start widget load timer
@@ -109,7 +110,6 @@ const initStartChat = async (chatSDK, chatConfig, getAuthToken, dispatch, setAda
109
110
  return;
110
111
  }
111
112
  }
112
- let isStartChatSuccessful = false;
113
113
 
114
114
  //Check if chat retrieved from cache
115
115
  if (persistedState || params !== null && params !== void 0 && params.liveChatContext) {
@@ -123,11 +123,13 @@ const initStartChat = async (chatSDK, chatConfig, getAuthToken, dispatch, setAda
123
123
  });
124
124
  }
125
125
  try {
126
+ var _window$Microsoft, _window$Microsoft$Dyn, _window$Microsoft$Dyn2, _window$Microsoft$Dyn3;
126
127
  // Set custom context params
127
128
  setCustomContextParams(chatSDK);
128
129
  const defaultOptionalParams = {
129
130
  sendDefaultInitContext: true,
130
- isProactiveChat: !!(params !== null && params !== void 0 && params.isProactiveChat)
131
+ isProactiveChat: !!(params !== null && params !== void 0 && params.isProactiveChat),
132
+ portalContactId: (_window$Microsoft = window.Microsoft) === null || _window$Microsoft === void 0 ? void 0 : (_window$Microsoft$Dyn = _window$Microsoft.Dynamic365) === null || _window$Microsoft$Dyn === void 0 ? void 0 : (_window$Microsoft$Dyn2 = _window$Microsoft$Dyn.Portal) === null || _window$Microsoft$Dyn2 === void 0 ? void 0 : (_window$Microsoft$Dyn3 = _window$Microsoft$Dyn2.User) === null || _window$Microsoft$Dyn3 === void 0 ? void 0 : _window$Microsoft$Dyn3.contactId
131
133
  };
132
134
  const startChatOptionalParams = Object.assign({}, params, optionalParams, defaultOptionalParams);
133
135
  await chatSDK.startChat(startChatOptionalParams);
@@ -228,6 +230,12 @@ const initStartChat = async (chatSDK, chatConfig, getAuthToken, dispatch, setAda
228
230
  type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_CONVERSATION_STATE,
229
231
  payload: _ConversationState.ConversationState.Loading
230
232
  });
233
+
234
+ // If sessionInit was successful but LCW startchat failed due to some reason e.g adapter didn't load
235
+ // we need to directly endChat to avoid leaving ghost chats in OC, not disturbing any other UI state
236
+ if (isStartChatSuccessful === true) {
237
+ await forceEndChat(chatSDK);
238
+ }
231
239
  } finally {
232
240
  optionalParams = {};
233
241
  widgetInstanceId = "";
@@ -236,6 +244,17 @@ const initStartChat = async (chatSDK, chatConfig, getAuthToken, dispatch, setAda
236
244
 
237
245
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
238
246
  exports.initStartChat = initStartChat;
247
+ const forceEndChat = async chatSDK => {
248
+ _TelemetryHelper.TelemetryHelper.logLoadingEvent(_TelemetryConstants.LogLevel.ERROR, {
249
+ Event: _TelemetryConstants.TelemetryEvent.WidgetLoadFailed,
250
+ ExceptionDetails: {
251
+ Exception: "SessionInit was successful, but widget load failed."
252
+ }
253
+ });
254
+ chatSDK === null || chatSDK === void 0 ? void 0 : chatSDK.endChat();
255
+ };
256
+
257
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
239
258
  const canConnectToExistingChat = async (props, chatSDK, state, dispatch, setAdapter) => {
240
259
  var _chatSDK$omnichannelC, _chatSDK$omnichannelC2, _props$controlProps2, _persistedState$domai6, _persistedState$appSt;
241
260
  // By pass this function in case of popout chat
@@ -55,7 +55,7 @@ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "functio
55
55
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
56
56
  function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
57
57
  const LiveChatWidgetStateful = props => {
58
- var _props$webChatContain, _props$styleProps, _chatSDK$omnichannelC, _props$controlProps, _props$controlProps2, _props$webChatContain3, _props$webChatContain4, _props$styleProps2, _props$controlProps13, _props$controlProps14, _props$componentOverr, _props$controlProps15, _props$componentOverr2, _props$controlProps16, _props$componentOverr3, _props$controlProps17, _props$componentOverr4, _props$controlProps18, _props$componentOverr5, _props$controlProps19, _props$componentOverr6, _props$controlProps20, _props$componentOverr7, _props$controlProps21, _props$controlProps22, _props$componentOverr8, _props$controlProps23, _props$componentOverr9, _props$controlProps24, _props$componentOverr10, _props$componentOverr11, _props$componentOverr12;
58
+ var _props$webChatContain, _props$styleProps, _chatSDK$omnichannelC, _props$controlProps, _props$controlProps2, _props$webChatContain3, _props$webChatContain4, _props$styleProps2, _props$controlProps14, _props$controlProps15, _props$componentOverr, _props$controlProps16, _props$componentOverr2, _props$controlProps17, _props$componentOverr3, _props$controlProps18, _props$componentOverr4, _props$controlProps19, _props$componentOverr5, _props$controlProps20, _props$componentOverr6, _props$controlProps21, _props$componentOverr7, _props$controlProps22, _props$controlProps23, _props$componentOverr8, _props$controlProps24, _props$componentOverr9, _props$controlProps25, _props$componentOverr10, _props$componentOverr11, _props$componentOverr12;
59
59
  const [state, dispatch] = (0, _useChatContextStore.default)();
60
60
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
61
61
  const [adapter, setAdapter] = (0, _useChatAdapterStore.default)();
@@ -142,12 +142,13 @@ const LiveChatWidgetStateful = props => {
142
142
  }
143
143
  };
144
144
  (0, _react2.useEffect)(() => {
145
- var _props$controlProps4, _props$controlProps5, _props$controlProps6, _props$chatConfig, _props$chatConfig$Liv, _props$controlProps8, _props$chatConfig2, _props$chatConfig2$Ch;
145
+ var _props$controlProps5, _props$controlProps6, _props$controlProps7, _props$chatConfig, _props$chatConfig$Liv, _props$controlProps9, _props$chatConfig2, _props$chatConfig2$Ch;
146
146
  // Add default localStorage support for widget
147
147
  if (props.contextDataStore === undefined) {
148
- var _chatSDK$omnichannelC2, _chatSDK$omnichannelC3, _props$controlProps3;
149
- (0, _defaultCacheManager.registerBroadcastServiceForLocalStorage)(chatSDK === null || chatSDK === void 0 ? void 0 : (_chatSDK$omnichannelC2 = chatSDK.omnichannelConfig) === null || _chatSDK$omnichannelC2 === void 0 ? void 0 : _chatSDK$omnichannelC2.orgId, chatSDK === null || chatSDK === void 0 ? void 0 : (_chatSDK$omnichannelC3 = chatSDK.omnichannelConfig) === null || _chatSDK$omnichannelC3 === void 0 ? void 0 : _chatSDK$omnichannelC3.widgetId, (props === null || props === void 0 ? void 0 : (_props$controlProps3 = props.controlProps) === null || _props$controlProps3 === void 0 ? void 0 : _props$controlProps3.widgetInstanceId) ?? "");
150
- _DataStoreManager.DataStoreManager.clientDataStore = (0, _defaultClientDataStoreProvider.defaultClientDataStoreProvider)();
148
+ var _props$controlProps3, _chatSDK$omnichannelC2, _chatSDK$omnichannelC3, _props$controlProps4;
149
+ const cacheTtlInMins = (props === null || props === void 0 ? void 0 : (_props$controlProps3 = props.controlProps) === null || _props$controlProps3 === void 0 ? void 0 : _props$controlProps3.cacheTtlInMins) ?? _Constants.Constants.CacheTtlInMinutes;
150
+ _DataStoreManager.DataStoreManager.clientDataStore = (0, _defaultClientDataStoreProvider.defaultClientDataStoreProvider)(cacheTtlInMins);
151
+ (0, _defaultCacheManager.registerBroadcastServiceForLocalStorage)(chatSDK === null || chatSDK === void 0 ? void 0 : (_chatSDK$omnichannelC2 = chatSDK.omnichannelConfig) === null || _chatSDK$omnichannelC2 === void 0 ? void 0 : _chatSDK$omnichannelC2.orgId, chatSDK === null || chatSDK === void 0 ? void 0 : (_chatSDK$omnichannelC3 = chatSDK.omnichannelConfig) === null || _chatSDK$omnichannelC3 === void 0 ? void 0 : _chatSDK$omnichannelC3.widgetId, (props === null || props === void 0 ? void 0 : (_props$controlProps4 = props.controlProps) === null || _props$controlProps4 === void 0 ? void 0 : _props$controlProps4.widgetInstanceId) ?? "", cacheTtlInMins);
151
152
  } else {
152
153
  _DataStoreManager.DataStoreManager.clientDataStore = props.contextDataStore;
153
154
  }
@@ -159,17 +160,17 @@ const LiveChatWidgetStateful = props => {
159
160
  });
160
161
  dispatch({
161
162
  type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_START_CHAT_BUTTON_DISPLAY,
162
- payload: ((_props$controlProps4 = props.controlProps) === null || _props$controlProps4 === void 0 ? void 0 : _props$controlProps4.hideStartChatButton) || false
163
+ payload: ((_props$controlProps5 = props.controlProps) === null || _props$controlProps5 === void 0 ? void 0 : _props$controlProps5.hideStartChatButton) || false
163
164
  });
164
165
  dispatch({
165
166
  type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_E2VV_ENABLED,
166
167
  payload: false
167
168
  });
168
- if ((_props$controlProps5 = props.controlProps) !== null && _props$controlProps5 !== void 0 && _props$controlProps5.widgetInstanceId && !(0, _utils.isNullOrEmptyString)((_props$controlProps6 = props.controlProps) === null || _props$controlProps6 === void 0 ? void 0 : _props$controlProps6.widgetInstanceId)) {
169
- var _props$controlProps7;
169
+ if ((_props$controlProps6 = props.controlProps) !== null && _props$controlProps6 !== void 0 && _props$controlProps6.widgetInstanceId && !(0, _utils.isNullOrEmptyString)((_props$controlProps7 = props.controlProps) === null || _props$controlProps7 === void 0 ? void 0 : _props$controlProps7.widgetInstanceId)) {
170
+ var _props$controlProps8;
170
171
  dispatch({
171
172
  type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_WIDGET_INSTANCE_ID,
172
- payload: (_props$controlProps7 = props.controlProps) === null || _props$controlProps7 === void 0 ? void 0 : _props$controlProps7.widgetInstanceId
173
+ payload: (_props$controlProps8 = props.controlProps) === null || _props$controlProps8 === void 0 ? void 0 : _props$controlProps8.widgetInstanceId
173
174
  });
174
175
  }
175
176
  if (((_props$chatConfig = props.chatConfig) === null || _props$chatConfig === void 0 ? void 0 : (_props$chatConfig$Liv = _props$chatConfig.LiveWSAndLiveChatEngJoin) === null || _props$chatConfig$Liv === void 0 ? void 0 : _props$chatConfig$Liv.msdyn_callingoptions) !== _Constants.E2VVOptions.NoCalling) {
@@ -182,7 +183,7 @@ const LiveChatWidgetStateful = props => {
182
183
  }
183
184
 
184
185
  // Initialize global dir
185
- const globalDir = ((_props$controlProps8 = props.controlProps) === null || _props$controlProps8 === void 0 ? void 0 : _props$controlProps8.dir) ?? (0, _utils.getLocaleDirection)((_props$chatConfig2 = props.chatConfig) === null || _props$chatConfig2 === void 0 ? void 0 : (_props$chatConfig2$Ch = _props$chatConfig2.ChatWidgetLanguage) === null || _props$chatConfig2$Ch === void 0 ? void 0 : _props$chatConfig2$Ch.msdyn_localeid);
186
+ const globalDir = ((_props$controlProps9 = props.controlProps) === null || _props$controlProps9 === void 0 ? void 0 : _props$controlProps9.dir) ?? (0, _utils.getLocaleDirection)((_props$chatConfig2 = props.chatConfig) === null || _props$chatConfig2 === void 0 ? void 0 : (_props$chatConfig2$Ch = _props$chatConfig2.ChatWidgetLanguage) === null || _props$chatConfig2$Ch === void 0 ? void 0 : _props$chatConfig2$Ch.msdyn_localeid);
186
187
  dispatch({
187
188
  type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_GLOBAL_DIR,
188
189
  payload: globalDir
@@ -208,7 +209,7 @@ const LiveChatWidgetStateful = props => {
208
209
 
209
210
  // useEffect for custom context
210
211
  (0, _react2.useEffect)(() => {
211
- var _chatSDK$omnichannelC8, _chatSDK$omnichannelC9, _props$controlProps11;
212
+ var _chatSDK$omnichannelC8, _chatSDK$omnichannelC9, _props$controlProps12;
212
213
  // Add the custom context on receiving the SetCustomContext event
213
214
  _omnichannelChatComponents.BroadcastService.getMessageByEventName(_TelemetryConstants.BroadcastEvent.SetCustomContext).subscribe(msg => {
214
215
  _TelemetryHelper.TelemetryHelper.logActionEvent(_TelemetryConstants.LogLevel.INFO, {
@@ -238,12 +239,12 @@ const LiveChatWidgetStateful = props => {
238
239
 
239
240
  // Start chat from SDK Event
240
241
  _omnichannelChatComponents.BroadcastService.getMessageByEventName(_TelemetryConstants.BroadcastEvent.StartChat).subscribe(() => {
241
- var _chatSDK$omnichannelC4, _chatSDK$omnichannelC5, _props$controlProps9;
242
+ var _chatSDK$omnichannelC4, _chatSDK$omnichannelC5, _props$controlProps10;
242
243
  _TelemetryHelper.TelemetryHelper.logActionEvent(_TelemetryConstants.LogLevel.INFO, {
243
244
  Event: _TelemetryConstants.TelemetryEvent.StartChatEventRecevied,
244
245
  Description: "Start chat event received."
245
246
  });
246
- const persistedState = (0, _utils.getStateFromCache)(chatSDK === null || chatSDK === void 0 ? void 0 : (_chatSDK$omnichannelC4 = chatSDK.omnichannelConfig) === null || _chatSDK$omnichannelC4 === void 0 ? void 0 : _chatSDK$omnichannelC4.orgId, chatSDK === null || chatSDK === void 0 ? void 0 : (_chatSDK$omnichannelC5 = chatSDK.omnichannelConfig) === null || _chatSDK$omnichannelC5 === void 0 ? void 0 : _chatSDK$omnichannelC5.widgetId, (props === null || props === void 0 ? void 0 : (_props$controlProps9 = props.controlProps) === null || _props$controlProps9 === void 0 ? void 0 : _props$controlProps9.widgetInstanceId) ?? "");
247
+ const persistedState = (0, _utils.getStateFromCache)(chatSDK === null || chatSDK === void 0 ? void 0 : (_chatSDK$omnichannelC4 = chatSDK.omnichannelConfig) === null || _chatSDK$omnichannelC4 === void 0 ? void 0 : _chatSDK$omnichannelC4.orgId, chatSDK === null || chatSDK === void 0 ? void 0 : (_chatSDK$omnichannelC5 = chatSDK.omnichannelConfig) === null || _chatSDK$omnichannelC5 === void 0 ? void 0 : _chatSDK$omnichannelC5.widgetId, (props === null || props === void 0 ? void 0 : (_props$controlProps10 = props.controlProps) === null || _props$controlProps10 === void 0 ? void 0 : _props$controlProps10.widgetInstanceId) ?? "");
247
248
 
248
249
  // Chat not found in cache
249
250
  if (persistedState === undefined) {
@@ -284,9 +285,9 @@ const LiveChatWidgetStateful = props => {
284
285
  // End chat
285
286
  _omnichannelChatComponents.BroadcastService.getMessageByEventName(_TelemetryConstants.BroadcastEvent.InitiateEndChat).subscribe(async () => {
286
287
  if (state.appStates.hideStartChatButton === false) {
287
- var _chatSDK$omnichannelC6, _chatSDK$omnichannelC7, _props$controlProps10;
288
+ var _chatSDK$omnichannelC6, _chatSDK$omnichannelC7, _props$controlProps11;
288
289
  // This is to ensure to get latest state from cache in multitab
289
- const persistedState = (0, _utils.getStateFromCache)(chatSDK === null || chatSDK === void 0 ? void 0 : (_chatSDK$omnichannelC6 = chatSDK.omnichannelConfig) === null || _chatSDK$omnichannelC6 === void 0 ? void 0 : _chatSDK$omnichannelC6.orgId, chatSDK === null || chatSDK === void 0 ? void 0 : (_chatSDK$omnichannelC7 = chatSDK.omnichannelConfig) === null || _chatSDK$omnichannelC7 === void 0 ? void 0 : _chatSDK$omnichannelC7.widgetId, (props === null || props === void 0 ? void 0 : (_props$controlProps10 = props.controlProps) === null || _props$controlProps10 === void 0 ? void 0 : _props$controlProps10.widgetInstanceId) ?? "");
290
+ const persistedState = (0, _utils.getStateFromCache)(chatSDK === null || chatSDK === void 0 ? void 0 : (_chatSDK$omnichannelC6 = chatSDK.omnichannelConfig) === null || _chatSDK$omnichannelC6 === void 0 ? void 0 : _chatSDK$omnichannelC6.orgId, chatSDK === null || chatSDK === void 0 ? void 0 : (_chatSDK$omnichannelC7 = chatSDK.omnichannelConfig) === null || _chatSDK$omnichannelC7 === void 0 ? void 0 : _chatSDK$omnichannelC7.widgetId, (props === null || props === void 0 ? void 0 : (_props$controlProps11 = props.controlProps) === null || _props$controlProps11 === void 0 ? void 0 : _props$controlProps11.widgetInstanceId) ?? "");
290
291
  if (persistedState && persistedState.appStates.conversationState === _ConversationState.ConversationState.Active) {
291
292
  (0, _endChat.prepareEndChat)(props, chatSDK, setAdapter, setWebChatStyles, dispatch, adapter, state);
292
293
  } else {
@@ -306,7 +307,7 @@ const LiveChatWidgetStateful = props => {
306
307
  });
307
308
 
308
309
  // Listen to end chat event from other tabs
309
- const endChatEventName = (0, _utils.getWidgetEndChatEventName)(chatSDK === null || chatSDK === void 0 ? void 0 : (_chatSDK$omnichannelC8 = chatSDK.omnichannelConfig) === null || _chatSDK$omnichannelC8 === void 0 ? void 0 : _chatSDK$omnichannelC8.orgId, chatSDK === null || chatSDK === void 0 ? void 0 : (_chatSDK$omnichannelC9 = chatSDK.omnichannelConfig) === null || _chatSDK$omnichannelC9 === void 0 ? void 0 : _chatSDK$omnichannelC9.widgetId, ((_props$controlProps11 = props.controlProps) === null || _props$controlProps11 === void 0 ? void 0 : _props$controlProps11.widgetInstanceId) ?? "");
310
+ const endChatEventName = (0, _utils.getWidgetEndChatEventName)(chatSDK === null || chatSDK === void 0 ? void 0 : (_chatSDK$omnichannelC8 = chatSDK.omnichannelConfig) === null || _chatSDK$omnichannelC8 === void 0 ? void 0 : _chatSDK$omnichannelC8.orgId, chatSDK === null || chatSDK === void 0 ? void 0 : (_chatSDK$omnichannelC9 = chatSDK.omnichannelConfig) === null || _chatSDK$omnichannelC9 === void 0 ? void 0 : _chatSDK$omnichannelC9.widgetId, ((_props$controlProps12 = props.controlProps) === null || _props$controlProps12 === void 0 ? void 0 : _props$controlProps12.widgetInstanceId) ?? "");
310
311
  _omnichannelChatComponents.BroadcastService.getMessageByEventName(endChatEventName).subscribe(async () => {
311
312
  (0, _endChat.endChat)(props, chatSDK, setAdapter, setWebChatStyles, dispatch, adapter, false, false, false);
312
313
  return;
@@ -411,7 +412,7 @@ const LiveChatWidgetStateful = props => {
411
412
 
412
413
  // Publish chat widget state
413
414
  (0, _react2.useEffect)(() => {
414
- var _props$chatSDK, _props$chatSDK$omnich, _props$chatSDK2, _props$chatSDK2$omnic, _props$controlProps12;
415
+ var _props$chatSDK, _props$chatSDK$omnich, _props$chatSDK2, _props$chatSDK2$omnic, _props$controlProps13;
415
416
  // Only activate these windows events when conversation state is active and chat widget is in popout mode
416
417
  // Ghost chat scenarios
417
418
  /* COMMENTING THIS CODE FOR PARITY WITH OLD LCW
@@ -429,7 +430,7 @@ const LiveChatWidgetStateful = props => {
429
430
  };
430
431
  }*/
431
432
 
432
- 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, (props === null || props === void 0 ? void 0 : (_props$controlProps12 = props.controlProps) === null || _props$controlProps12 === void 0 ? void 0 : _props$controlProps12.widgetInstanceId) ?? "");
433
+ 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, (props === null || props === void 0 ? void 0 : (_props$controlProps13 = props.controlProps) === null || _props$controlProps13 === void 0 ? void 0 : _props$controlProps13.widgetInstanceId) ?? "");
433
434
  const chatWidgetStateChangeEvent = {
434
435
  eventName: widgetStateEventName,
435
436
  payload: {
@@ -491,29 +492,29 @@ const LiveChatWidgetStateful = props => {
491
492
  id: widgetElementId,
492
493
  styles: generalStyles,
493
494
  className: (_props$styleProps2 = props.styleProps) === null || _props$styleProps2 === void 0 ? void 0 : _props$styleProps2.className
494
- }, !((_props$controlProps13 = props.controlProps) !== null && _props$controlProps13 !== void 0 && _props$controlProps13.hideChatButton) && !((_props$controlProps14 = props.controlProps) !== null && _props$controlProps14 !== void 0 && _props$controlProps14.hideStartChatButton) && (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, {
495
+ }, !((_props$controlProps14 = props.controlProps) !== null && _props$controlProps14 !== void 0 && _props$controlProps14.hideChatButton) && !((_props$controlProps15 = props.controlProps) !== null && _props$controlProps15 !== void 0 && _props$controlProps15.hideStartChatButton) && (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, {
495
496
  buttonProps: props.chatButtonProps,
496
497
  outOfOfficeButtonProps: props.outOfOfficeChatButtonProps,
497
498
  startChat: prepareStartChatRelay
498
- })), !((_props$controlProps15 = props.controlProps) !== null && _props$controlProps15 !== void 0 && _props$controlProps15.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, {
499
+ })), !((_props$controlProps16 = props.controlProps) !== null && _props$controlProps16 !== void 0 && _props$controlProps16.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, {
499
500
  proactiveChatProps: props.proactiveChatPaneProps,
500
501
  startChat: prepareStartChatRelay
501
- })), !((_props$controlProps16 = props.controlProps) !== null && _props$controlProps16 !== void 0 && _props$controlProps16.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, {
502
+ })), !((_props$controlProps17 = props.controlProps) !== null && _props$controlProps17 !== void 0 && _props$controlProps17.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, {
502
503
  headerProps: props.headerProps,
503
504
  outOfOfficeHeaderProps: props.outOfOfficeHeaderProps,
504
505
  endChat: endChatRelay
505
- })), !((_props$controlProps17 = props.controlProps) !== null && _props$controlProps17 !== void 0 && _props$controlProps17.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$controlProps18 = props.controlProps) !== null && _props$controlProps18 !== void 0 && _props$controlProps18.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$controlProps19 = props.controlProps) !== null && _props$controlProps19 !== void 0 && _props$controlProps19.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, {
506
+ })), !((_props$controlProps18 = props.controlProps) !== null && _props$controlProps18 !== void 0 && _props$controlProps18.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$controlProps19 = props.controlProps) !== null && _props$controlProps19 !== void 0 && _props$controlProps19.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$controlProps20 = props.controlProps) !== null && _props$controlProps20 !== void 0 && _props$controlProps20.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, {
506
507
  reconnectChatProps: props.reconnectChatPaneProps,
507
508
  initStartChat: initStartChatRelay
508
- })), !((_props$controlProps20 = props.controlProps) !== null && _props$controlProps20 !== void 0 && _props$controlProps20.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, {
509
+ })), !((_props$controlProps21 = props.controlProps) !== null && _props$controlProps21 !== void 0 && _props$controlProps21.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, {
509
510
  surveyProps: props.preChatSurveyPaneProps,
510
511
  initStartChat: initStartChatRelay
511
- })), !((_props$controlProps21 = props.controlProps) !== null && _props$controlProps21 !== void 0 && _props$controlProps21.hideCallingContainer) && (0, _componentController.shouldShowCallingContainer)(state) && /*#__PURE__*/_react2.default.createElement(_CallingContainerStateful.default, _extends({
512
+ })), !((_props$controlProps22 = props.controlProps) !== null && _props$controlProps22 !== void 0 && _props$controlProps22.hideCallingContainer) && (0, _componentController.shouldShowCallingContainer)(state) && /*#__PURE__*/_react2.default.createElement(_CallingContainerStateful.default, _extends({
512
513
  voiceVideoCallingSdk: voiceVideoCallingSDK
513
- }, props.callingContainerProps)), !((_props$controlProps22 = props.controlProps) !== null && _props$controlProps22 !== void 0 && _props$controlProps22.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$controlProps23 = props.controlProps) !== null && _props$controlProps23 !== void 0 && _props$controlProps23.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, {
514
+ }, props.callingContainerProps)), !((_props$controlProps23 = props.controlProps) !== null && _props$controlProps23 !== void 0 && _props$controlProps23.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$controlProps24 = props.controlProps) !== null && _props$controlProps24 !== void 0 && _props$controlProps24.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, {
514
515
  setPostChatContext: setPostChatContextRelay,
515
516
  prepareEndChat: prepareEndChatRelay
516
- }))), !((_props$controlProps24 = props.controlProps) !== null && _props$controlProps24 !== void 0 && _props$controlProps24.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)))));
517
+ }))), !((_props$controlProps25 = props.controlProps) !== null && _props$controlProps25 !== void 0 && _props$controlProps25.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)))));
517
518
  };
518
519
  exports.LiveChatWidgetStateful = LiveChatWidgetStateful;
519
520
  var _default = LiveChatWidgetStateful;
@@ -8,10 +8,12 @@ var _ConversationState = require("./ConversationState");
8
8
  var _defaultMiddlewareLocalizedTexts = require("../../components/webchatcontainerstateful/common/defaultProps/defaultMiddlewareLocalizedTexts");
9
9
  var _utils = require("../../common/utils");
10
10
  var _defaultClientDataStoreProvider = require("../../common/storage/default/defaultClientDataStoreProvider");
11
+ var _Constants = require("../../common/Constants");
11
12
  const getLiveChatWidgetContextInitialState = props => {
12
- var _props$chatSDK, _props$chatSDK$omnich, _props$chatSDK2, _props$chatSDK2$omnic, _props$controlProps, _props$webChatContain;
13
+ var _props$chatSDK, _props$chatSDK$omnich, _props$chatSDK2, _props$chatSDK2$omnic, _props$controlProps, _props$controlProps2, _props$webChatContain;
13
14
  const widgetCacheId = (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, (props === null || props === void 0 ? void 0 : (_props$controlProps = props.controlProps) === null || _props$controlProps === void 0 ? void 0 : _props$controlProps.widgetInstanceId) ?? "");
14
- const initialState = (0, _defaultClientDataStoreProvider.defaultClientDataStoreProvider)().getData(widgetCacheId, "localStorage");
15
+ const cacheTtlInMins = (props === null || props === void 0 ? void 0 : (_props$controlProps2 = props.controlProps) === null || _props$controlProps2 === void 0 ? void 0 : _props$controlProps2.cacheTtlInMins) ?? _Constants.Constants.CacheTtlInMinutes;
16
+ const initialState = (0, _defaultClientDataStoreProvider.defaultClientDataStoreProvider)(cacheTtlInMins).getData(widgetCacheId, "localStorage");
15
17
  if (!(0, _utils.isNullOrUndefined)(initialState)) {
16
18
  return JSON.parse(initialState);
17
19
  }
@@ -46,7 +46,7 @@ const createOnNewAdapterActivityHandler = (chatId, userId) => {
46
46
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
47
47
  payload.messageType = _Constants.Constants.systemMessageTag;
48
48
  _TelemetryHelper.TelemetryHelper.logActionEvent(_TelemetryConstants.LogLevel.INFO, {
49
- Event: _TelemetryConstants.TelemetryEvent.MessageReceived,
49
+ Event: _TelemetryConstants.TelemetryEvent.SystemMessageReceived,
50
50
  Description: "System message received"
51
51
  });
52
52
  } else {
@@ -82,6 +82,7 @@ _defineProperty(Constants, "internetConnectionTestUrlText", "Omnichannel Connect
82
82
  _defineProperty(Constants, "ChatWidgetStateChangedPrefix", "ChatWidgetStateChanged");
83
83
  _defineProperty(Constants, "PostChatLoadingDurationInMs", 2000);
84
84
  _defineProperty(Constants, "BrowserUnloadConfirmationMessage", "Do you want to leave chat?");
85
+ _defineProperty(Constants, "CacheTtlInMinutes", 15);
85
86
  export const Regex = (_class = class Regex {}, _defineProperty(_class, "EmailRegex", "(?:[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?\\.)+[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?|\\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-zA-Z0-9-]*[a-zA-Z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])"), _class);
86
87
  export class HtmlIdNames {}
87
88
  _defineProperty(HtmlIdNames, "MSLiveChatWidget", "MSLiveChatWidget");
@@ -6,11 +6,11 @@ import { getWidgetCacheId } from "../../utils";
6
6
  import { defaultClientDataStoreProvider } from "./defaultClientDataStoreProvider";
7
7
  export class defaultCacheManager {}
8
8
  _defineProperty(defaultCacheManager, "InternalCache", {});
9
- export const registerBroadcastServiceForLocalStorage = (orgid, widgetId, widgetInstanceId) => {
9
+ export const registerBroadcastServiceForLocalStorage = (orgid, widgetId, widgetInstanceId, ttlInMins) => {
10
10
  const widgetCacheId = getWidgetCacheId(orgid, widgetId, widgetInstanceId);
11
11
  BroadcastService.getMessageByEventName(widgetCacheId).subscribe(msg => {
12
12
  try {
13
- defaultClientDataStoreProvider().setData(widgetCacheId, JSON.stringify(msg.payload), "localStorage");
13
+ defaultClientDataStoreProvider(ttlInMins).setData(widgetCacheId, JSON.stringify(msg.payload), "localStorage");
14
14
  } catch (error) {
15
15
  console.error("Error in setting data to localstorage", error);
16
16
  }
@@ -1,18 +1,27 @@
1
- import { inMemoryDataStore } from "./defaultInMemoryDataStore";
2
- import { TelemetryHelper } from "../../telemetry/TelemetryHelper";
1
+ /* eslint-disable @typescript-eslint/no-explicit-any */
2
+
3
3
  import { LogLevel, TelemetryEvent } from "../../telemetry/TelemetryConstants";
4
- export const defaultClientDataStoreProvider = () => {
4
+ import { TelemetryHelper } from "../../telemetry/TelemetryHelper";
5
+ import { inMemoryDataStore } from "./defaultInMemoryDataStore";
6
+ export const defaultClientDataStoreProvider = function () {
7
+ let cacheTtlinMins = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
8
+ let ttlInMs = 0;
5
9
  const isCookieAllowed = () => {
6
10
  try {
7
11
  localStorage;
8
12
  sessionStorage;
9
13
  return true;
10
14
  } catch (error) {
11
- console.error("Third party cookie blocked");
15
+ if (!window.TPCWarningShown) {
16
+ console.warn("Third party cookies blocked.");
17
+ window.TPCWarningShown = true;
18
+ }
12
19
  return false;
13
20
  }
14
21
  };
15
- const TtlInMs = 15 * 60 * 1000; // 15 mins
22
+ if (ttlInMs == 0) {
23
+ ttlInMs = cacheTtlinMins * 60 * 1000;
24
+ }
16
25
  const dataStoreProvider = {
17
26
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
18
27
  setData: (key, data, type) => {
@@ -22,7 +31,7 @@ export const defaultClientDataStoreProvider = () => {
22
31
  const now = new Date();
23
32
  const item = {
24
33
  data: data,
25
- expiry: now.getTime() + TtlInMs
34
+ expiry: now.getTime() + ttlInMs
26
35
  };
27
36
  const strItem = JSON.stringify(item);
28
37
  if (type === "localStorage") {
@@ -49,6 +49,8 @@ export let BroadcastEvent;
49
49
  BroadcastEvent["InitiateEndChatOnBrowserUnload"] = "InitiateEndChatOnBrowserUnload";
50
50
  BroadcastEvent["ClosePopoutWindow"] = "ClosePopoutWindow";
51
51
  BroadcastEvent["RaiseErrorEvent"] = "RaiseErrorEvent";
52
+ BroadcastEvent["NetworkDisconnected"] = "NetworkDisconnected";
53
+ BroadcastEvent["NetworkReconnected"] = "NetworkReconnected";
52
54
  })(BroadcastEvent || (BroadcastEvent = {}));
53
55
  export let TelemetryEvent;
54
56
  (function (TelemetryEvent) {
@@ -164,6 +166,7 @@ export let TelemetryEvent;
164
166
  TelemetryEvent["ReconnectChatMinimize"] = "ReconnectChatMinimize";
165
167
  TelemetryEvent["MessageSent"] = "MessageSent";
166
168
  TelemetryEvent["MessageReceived"] = "MessageReceived";
169
+ TelemetryEvent["SystemMessageReceived"] = "SystemMessageReceived";
167
170
  TelemetryEvent["CustomContextReceived"] = "CustomContextReceived";
168
171
  TelemetryEvent["NetworkDisconnected"] = "NetworkDisconnected";
169
172
  TelemetryEvent["NetworkReconnected"] = "NetworkReconnected";
@@ -1117,7 +1117,8 @@ export const dummyDefaultProps = {
1117
1117
  dir: "auto",
1118
1118
  hideOOOHPane: false,
1119
1119
  hideTitle: false,
1120
- titleText: "Thanks for contacting us. You have reached us outside of our operating hours. An agent will respond when we open."
1120
+ titleText: "Thanks for contacting us. You have reached us outside of our operating hours. An agent will respond when we open. Please see link https://microsoft.com",
1121
+ openLinkInNewTab: true
1121
1122
  },
1122
1123
  styleProps: {
1123
1124
  generalStyleProps: {
@@ -1160,7 +1161,7 @@ export const dummyDefaultProps = {
1160
1161
  subtitleText: "Please take a moment to give us feedback about your chat experience. We are loading the survey for you now."
1161
1162
  },
1162
1163
  styleProps: {
1163
- // ...[Existing chat button style props]
1164
+ // ...[Existing loading pane style props]
1164
1165
  generalStyleProps: {
1165
1166
  position: "initial",
1166
1167
  width: "100%",
@@ -62,25 +62,19 @@ export const initWebChatComposer = (props, chatSDK, state, dispatch, setWebChatS
62
62
  };
63
63
  });
64
64
  }
65
- if (isPostChatEnabled === "true") {
66
- if (postChatSurveyMode === PostChatSurveyMode.Embed) {
67
- WebChatStoreLoader.store = null;
68
- dispatch({
69
- type: LiveChatWidgetActionType.SET_CONVERSATION_STATE,
70
- payload: ConversationState.PostchatLoading
71
- });
72
- await addDelayInMs(Constants.PostChatLoadingDurationInMs);
73
- const loadPostChatEvent = {
74
- eventName: BroadcastEvent.LoadPostChatSurvey
75
- };
76
- BroadcastService.postMessage(loadPostChatEvent);
77
- } else if (postChatSurveyMode === PostChatSurveyMode.Link) {
78
- dispatch({
79
- type: LiveChatWidgetActionType.SET_CONVERSATION_STATE,
80
- payload: ConversationState.InActive
81
- });
82
- }
83
- } else {
65
+ if (isPostChatEnabled === "true" && postChatSurveyMode === PostChatSurveyMode.Embed && state.appStates.conversationState === ConversationState.Active) {
66
+ WebChatStoreLoader.store = null;
67
+ dispatch({
68
+ type: LiveChatWidgetActionType.SET_CONVERSATION_STATE,
69
+ payload: ConversationState.PostchatLoading
70
+ });
71
+ await addDelayInMs(Constants.PostChatLoadingDurationInMs);
72
+ const loadPostChatEvent = {
73
+ eventName: BroadcastEvent.LoadPostChatSurvey
74
+ };
75
+ BroadcastService.postMessage(loadPostChatEvent);
76
+ }
77
+ if (state.appStates.conversationState === ConversationState.Active) {
84
78
  dispatch({
85
79
  type: LiveChatWidgetActionType.SET_CONVERSATION_STATE,
86
80
  payload: ConversationState.InActive
@@ -86,6 +86,7 @@ const setPreChatAndInitiateChat = async (chatSDK, dispatch, setAdapter, isProact
86
86
 
87
87
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
88
88
  const initStartChat = async (chatSDK, chatConfig, getAuthToken, dispatch, setAdapter, params, persistedState) => {
89
+ let isStartChatSuccessful = false;
89
90
  try {
90
91
  var _newAdapter$activity$, _TelemetryTimers$Widg;
91
92
  //Start widget load timer
@@ -102,7 +103,6 @@ const initStartChat = async (chatSDK, chatConfig, getAuthToken, dispatch, setAda
102
103
  return;
103
104
  }
104
105
  }
105
- let isStartChatSuccessful = false;
106
106
 
107
107
  //Check if chat retrieved from cache
108
108
  if (persistedState || params !== null && params !== void 0 && params.liveChatContext) {
@@ -116,11 +116,13 @@ const initStartChat = async (chatSDK, chatConfig, getAuthToken, dispatch, setAda
116
116
  });
117
117
  }
118
118
  try {
119
+ var _window$Microsoft, _window$Microsoft$Dyn, _window$Microsoft$Dyn2, _window$Microsoft$Dyn3;
119
120
  // Set custom context params
120
121
  setCustomContextParams(chatSDK);
121
122
  const defaultOptionalParams = {
122
123
  sendDefaultInitContext: true,
123
- isProactiveChat: !!(params !== null && params !== void 0 && params.isProactiveChat)
124
+ isProactiveChat: !!(params !== null && params !== void 0 && params.isProactiveChat),
125
+ portalContactId: (_window$Microsoft = window.Microsoft) === null || _window$Microsoft === void 0 ? void 0 : (_window$Microsoft$Dyn = _window$Microsoft.Dynamic365) === null || _window$Microsoft$Dyn === void 0 ? void 0 : (_window$Microsoft$Dyn2 = _window$Microsoft$Dyn.Portal) === null || _window$Microsoft$Dyn2 === void 0 ? void 0 : (_window$Microsoft$Dyn3 = _window$Microsoft$Dyn2.User) === null || _window$Microsoft$Dyn3 === void 0 ? void 0 : _window$Microsoft$Dyn3.contactId
124
126
  };
125
127
  const startChatOptionalParams = Object.assign({}, params, optionalParams, defaultOptionalParams);
126
128
  await chatSDK.startChat(startChatOptionalParams);
@@ -221,12 +223,29 @@ const initStartChat = async (chatSDK, chatConfig, getAuthToken, dispatch, setAda
221
223
  type: LiveChatWidgetActionType.SET_CONVERSATION_STATE,
222
224
  payload: ConversationState.Loading
223
225
  });
226
+
227
+ // If sessionInit was successful but LCW startchat failed due to some reason e.g adapter didn't load
228
+ // we need to directly endChat to avoid leaving ghost chats in OC, not disturbing any other UI state
229
+ if (isStartChatSuccessful === true) {
230
+ await forceEndChat(chatSDK);
231
+ }
224
232
  } finally {
225
233
  optionalParams = {};
226
234
  widgetInstanceId = "";
227
235
  }
228
236
  };
229
237
 
238
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
239
+ const forceEndChat = async chatSDK => {
240
+ TelemetryHelper.logLoadingEvent(LogLevel.ERROR, {
241
+ Event: TelemetryEvent.WidgetLoadFailed,
242
+ ExceptionDetails: {
243
+ Exception: "SessionInit was successful, but widget load failed."
244
+ }
245
+ });
246
+ chatSDK === null || chatSDK === void 0 ? void 0 : chatSDK.endChat();
247
+ };
248
+
230
249
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
231
250
  const canConnectToExistingChat = async (props, chatSDK, state, dispatch, setAdapter) => {
232
251
  var _chatSDK$omnichannelC, _chatSDK$omnichannelC2, _props$controlProps2, _persistedState$domai6, _persistedState$appSt;
@@ -14,7 +14,7 @@ import { Components } from "botframework-webchat";
14
14
  import ConfirmationPaneStateful from "../../confirmationpanestateful/ConfirmationPaneStateful";
15
15
  import { ConversationState } from "../../../contexts/common/ConversationState";
16
16
  import { DataStoreManager } from "../../../common/contextDataStore/DataStoreManager";
17
- import { E2VVOptions } from "../../../common/Constants";
17
+ import { Constants, E2VVOptions } from "../../../common/Constants";
18
18
  import { ElementType } from "@microsoft/omnichannel-chat-components";
19
19
  import EmailTranscriptPaneStateful from "../../emailtranscriptpanestateful/EmailTranscriptPaneStateful";
20
20
  import HeaderStateful from "../../headerstateful/HeaderStateful";
@@ -47,7 +47,7 @@ import useChatAdapterStore from "../../../hooks/useChatAdapterStore";
47
47
  import useChatContextStore from "../../../hooks/useChatContextStore";
48
48
  import useChatSDKStore from "../../../hooks/useChatSDKStore";
49
49
  export const LiveChatWidgetStateful = props => {
50
- var _props$webChatContain, _props$styleProps, _chatSDK$omnichannelC, _props$controlProps, _props$controlProps2, _props$webChatContain3, _props$webChatContain4, _props$styleProps2, _props$controlProps13, _props$controlProps14, _props$componentOverr, _props$controlProps15, _props$componentOverr2, _props$controlProps16, _props$componentOverr3, _props$controlProps17, _props$componentOverr4, _props$controlProps18, _props$componentOverr5, _props$controlProps19, _props$componentOverr6, _props$controlProps20, _props$componentOverr7, _props$controlProps21, _props$controlProps22, _props$componentOverr8, _props$controlProps23, _props$componentOverr9, _props$controlProps24, _props$componentOverr10, _props$componentOverr11, _props$componentOverr12;
50
+ var _props$webChatContain, _props$styleProps, _chatSDK$omnichannelC, _props$controlProps, _props$controlProps2, _props$webChatContain3, _props$webChatContain4, _props$styleProps2, _props$controlProps14, _props$controlProps15, _props$componentOverr, _props$controlProps16, _props$componentOverr2, _props$controlProps17, _props$componentOverr3, _props$controlProps18, _props$componentOverr4, _props$controlProps19, _props$componentOverr5, _props$controlProps20, _props$componentOverr6, _props$controlProps21, _props$componentOverr7, _props$controlProps22, _props$controlProps23, _props$componentOverr8, _props$controlProps24, _props$componentOverr9, _props$controlProps25, _props$componentOverr10, _props$componentOverr11, _props$componentOverr12;
51
51
  const [state, dispatch] = useChatContextStore();
52
52
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
53
53
  const [adapter, setAdapter] = useChatAdapterStore();
@@ -134,12 +134,13 @@ export const LiveChatWidgetStateful = props => {
134
134
  }
135
135
  };
136
136
  useEffect(() => {
137
- var _props$controlProps4, _props$controlProps5, _props$controlProps6, _props$chatConfig, _props$chatConfig$Liv, _props$controlProps8, _props$chatConfig2, _props$chatConfig2$Ch;
137
+ var _props$controlProps5, _props$controlProps6, _props$controlProps7, _props$chatConfig, _props$chatConfig$Liv, _props$controlProps9, _props$chatConfig2, _props$chatConfig2$Ch;
138
138
  // Add default localStorage support for widget
139
139
  if (props.contextDataStore === undefined) {
140
- var _chatSDK$omnichannelC2, _chatSDK$omnichannelC3, _props$controlProps3;
141
- registerBroadcastServiceForLocalStorage(chatSDK === null || chatSDK === void 0 ? void 0 : (_chatSDK$omnichannelC2 = chatSDK.omnichannelConfig) === null || _chatSDK$omnichannelC2 === void 0 ? void 0 : _chatSDK$omnichannelC2.orgId, chatSDK === null || chatSDK === void 0 ? void 0 : (_chatSDK$omnichannelC3 = chatSDK.omnichannelConfig) === null || _chatSDK$omnichannelC3 === void 0 ? void 0 : _chatSDK$omnichannelC3.widgetId, (props === null || props === void 0 ? void 0 : (_props$controlProps3 = props.controlProps) === null || _props$controlProps3 === void 0 ? void 0 : _props$controlProps3.widgetInstanceId) ?? "");
142
- DataStoreManager.clientDataStore = defaultClientDataStoreProvider();
140
+ var _props$controlProps3, _chatSDK$omnichannelC2, _chatSDK$omnichannelC3, _props$controlProps4;
141
+ const cacheTtlInMins = (props === null || props === void 0 ? void 0 : (_props$controlProps3 = props.controlProps) === null || _props$controlProps3 === void 0 ? void 0 : _props$controlProps3.cacheTtlInMins) ?? Constants.CacheTtlInMinutes;
142
+ DataStoreManager.clientDataStore = defaultClientDataStoreProvider(cacheTtlInMins);
143
+ registerBroadcastServiceForLocalStorage(chatSDK === null || chatSDK === void 0 ? void 0 : (_chatSDK$omnichannelC2 = chatSDK.omnichannelConfig) === null || _chatSDK$omnichannelC2 === void 0 ? void 0 : _chatSDK$omnichannelC2.orgId, chatSDK === null || chatSDK === void 0 ? void 0 : (_chatSDK$omnichannelC3 = chatSDK.omnichannelConfig) === null || _chatSDK$omnichannelC3 === void 0 ? void 0 : _chatSDK$omnichannelC3.widgetId, (props === null || props === void 0 ? void 0 : (_props$controlProps4 = props.controlProps) === null || _props$controlProps4 === void 0 ? void 0 : _props$controlProps4.widgetInstanceId) ?? "", cacheTtlInMins);
143
144
  } else {
144
145
  DataStoreManager.clientDataStore = props.contextDataStore;
145
146
  }
@@ -151,17 +152,17 @@ export const LiveChatWidgetStateful = props => {
151
152
  });
152
153
  dispatch({
153
154
  type: LiveChatWidgetActionType.SET_START_CHAT_BUTTON_DISPLAY,
154
- payload: ((_props$controlProps4 = props.controlProps) === null || _props$controlProps4 === void 0 ? void 0 : _props$controlProps4.hideStartChatButton) || false
155
+ payload: ((_props$controlProps5 = props.controlProps) === null || _props$controlProps5 === void 0 ? void 0 : _props$controlProps5.hideStartChatButton) || false
155
156
  });
156
157
  dispatch({
157
158
  type: LiveChatWidgetActionType.SET_E2VV_ENABLED,
158
159
  payload: false
159
160
  });
160
- if ((_props$controlProps5 = props.controlProps) !== null && _props$controlProps5 !== void 0 && _props$controlProps5.widgetInstanceId && !isNullOrEmptyString((_props$controlProps6 = props.controlProps) === null || _props$controlProps6 === void 0 ? void 0 : _props$controlProps6.widgetInstanceId)) {
161
- var _props$controlProps7;
161
+ if ((_props$controlProps6 = props.controlProps) !== null && _props$controlProps6 !== void 0 && _props$controlProps6.widgetInstanceId && !isNullOrEmptyString((_props$controlProps7 = props.controlProps) === null || _props$controlProps7 === void 0 ? void 0 : _props$controlProps7.widgetInstanceId)) {
162
+ var _props$controlProps8;
162
163
  dispatch({
163
164
  type: LiveChatWidgetActionType.SET_WIDGET_INSTANCE_ID,
164
- payload: (_props$controlProps7 = props.controlProps) === null || _props$controlProps7 === void 0 ? void 0 : _props$controlProps7.widgetInstanceId
165
+ payload: (_props$controlProps8 = props.controlProps) === null || _props$controlProps8 === void 0 ? void 0 : _props$controlProps8.widgetInstanceId
165
166
  });
166
167
  }
167
168
  if (((_props$chatConfig = props.chatConfig) === null || _props$chatConfig === void 0 ? void 0 : (_props$chatConfig$Liv = _props$chatConfig.LiveWSAndLiveChatEngJoin) === null || _props$chatConfig$Liv === void 0 ? void 0 : _props$chatConfig$Liv.msdyn_callingoptions) !== E2VVOptions.NoCalling) {
@@ -174,7 +175,7 @@ export const LiveChatWidgetStateful = props => {
174
175
  }
175
176
 
176
177
  // Initialize global dir
177
- const globalDir = ((_props$controlProps8 = props.controlProps) === null || _props$controlProps8 === void 0 ? void 0 : _props$controlProps8.dir) ?? getLocaleDirection((_props$chatConfig2 = props.chatConfig) === null || _props$chatConfig2 === void 0 ? void 0 : (_props$chatConfig2$Ch = _props$chatConfig2.ChatWidgetLanguage) === null || _props$chatConfig2$Ch === void 0 ? void 0 : _props$chatConfig2$Ch.msdyn_localeid);
178
+ const globalDir = ((_props$controlProps9 = props.controlProps) === null || _props$controlProps9 === void 0 ? void 0 : _props$controlProps9.dir) ?? getLocaleDirection((_props$chatConfig2 = props.chatConfig) === null || _props$chatConfig2 === void 0 ? void 0 : (_props$chatConfig2$Ch = _props$chatConfig2.ChatWidgetLanguage) === null || _props$chatConfig2$Ch === void 0 ? void 0 : _props$chatConfig2$Ch.msdyn_localeid);
178
179
  dispatch({
179
180
  type: LiveChatWidgetActionType.SET_GLOBAL_DIR,
180
181
  payload: globalDir
@@ -200,7 +201,7 @@ export const LiveChatWidgetStateful = props => {
200
201
 
201
202
  // useEffect for custom context
202
203
  useEffect(() => {
203
- var _chatSDK$omnichannelC8, _chatSDK$omnichannelC9, _props$controlProps11;
204
+ var _chatSDK$omnichannelC8, _chatSDK$omnichannelC9, _props$controlProps12;
204
205
  // Add the custom context on receiving the SetCustomContext event
205
206
  BroadcastService.getMessageByEventName(BroadcastEvent.SetCustomContext).subscribe(msg => {
206
207
  TelemetryHelper.logActionEvent(LogLevel.INFO, {
@@ -230,12 +231,12 @@ export const LiveChatWidgetStateful = props => {
230
231
 
231
232
  // Start chat from SDK Event
232
233
  BroadcastService.getMessageByEventName(BroadcastEvent.StartChat).subscribe(() => {
233
- var _chatSDK$omnichannelC4, _chatSDK$omnichannelC5, _props$controlProps9;
234
+ var _chatSDK$omnichannelC4, _chatSDK$omnichannelC5, _props$controlProps10;
234
235
  TelemetryHelper.logActionEvent(LogLevel.INFO, {
235
236
  Event: TelemetryEvent.StartChatEventRecevied,
236
237
  Description: "Start chat event received."
237
238
  });
238
- const persistedState = getStateFromCache(chatSDK === null || chatSDK === void 0 ? void 0 : (_chatSDK$omnichannelC4 = chatSDK.omnichannelConfig) === null || _chatSDK$omnichannelC4 === void 0 ? void 0 : _chatSDK$omnichannelC4.orgId, chatSDK === null || chatSDK === void 0 ? void 0 : (_chatSDK$omnichannelC5 = chatSDK.omnichannelConfig) === null || _chatSDK$omnichannelC5 === void 0 ? void 0 : _chatSDK$omnichannelC5.widgetId, (props === null || props === void 0 ? void 0 : (_props$controlProps9 = props.controlProps) === null || _props$controlProps9 === void 0 ? void 0 : _props$controlProps9.widgetInstanceId) ?? "");
239
+ const persistedState = getStateFromCache(chatSDK === null || chatSDK === void 0 ? void 0 : (_chatSDK$omnichannelC4 = chatSDK.omnichannelConfig) === null || _chatSDK$omnichannelC4 === void 0 ? void 0 : _chatSDK$omnichannelC4.orgId, chatSDK === null || chatSDK === void 0 ? void 0 : (_chatSDK$omnichannelC5 = chatSDK.omnichannelConfig) === null || _chatSDK$omnichannelC5 === void 0 ? void 0 : _chatSDK$omnichannelC5.widgetId, (props === null || props === void 0 ? void 0 : (_props$controlProps10 = props.controlProps) === null || _props$controlProps10 === void 0 ? void 0 : _props$controlProps10.widgetInstanceId) ?? "");
239
240
 
240
241
  // Chat not found in cache
241
242
  if (persistedState === undefined) {
@@ -276,9 +277,9 @@ export const LiveChatWidgetStateful = props => {
276
277
  // End chat
277
278
  BroadcastService.getMessageByEventName(BroadcastEvent.InitiateEndChat).subscribe(async () => {
278
279
  if (state.appStates.hideStartChatButton === false) {
279
- var _chatSDK$omnichannelC6, _chatSDK$omnichannelC7, _props$controlProps10;
280
+ var _chatSDK$omnichannelC6, _chatSDK$omnichannelC7, _props$controlProps11;
280
281
  // This is to ensure to get latest state from cache in multitab
281
- const persistedState = getStateFromCache(chatSDK === null || chatSDK === void 0 ? void 0 : (_chatSDK$omnichannelC6 = chatSDK.omnichannelConfig) === null || _chatSDK$omnichannelC6 === void 0 ? void 0 : _chatSDK$omnichannelC6.orgId, chatSDK === null || chatSDK === void 0 ? void 0 : (_chatSDK$omnichannelC7 = chatSDK.omnichannelConfig) === null || _chatSDK$omnichannelC7 === void 0 ? void 0 : _chatSDK$omnichannelC7.widgetId, (props === null || props === void 0 ? void 0 : (_props$controlProps10 = props.controlProps) === null || _props$controlProps10 === void 0 ? void 0 : _props$controlProps10.widgetInstanceId) ?? "");
282
+ const persistedState = getStateFromCache(chatSDK === null || chatSDK === void 0 ? void 0 : (_chatSDK$omnichannelC6 = chatSDK.omnichannelConfig) === null || _chatSDK$omnichannelC6 === void 0 ? void 0 : _chatSDK$omnichannelC6.orgId, chatSDK === null || chatSDK === void 0 ? void 0 : (_chatSDK$omnichannelC7 = chatSDK.omnichannelConfig) === null || _chatSDK$omnichannelC7 === void 0 ? void 0 : _chatSDK$omnichannelC7.widgetId, (props === null || props === void 0 ? void 0 : (_props$controlProps11 = props.controlProps) === null || _props$controlProps11 === void 0 ? void 0 : _props$controlProps11.widgetInstanceId) ?? "");
282
283
  if (persistedState && persistedState.appStates.conversationState === ConversationState.Active) {
283
284
  prepareEndChat(props, chatSDK, setAdapter, setWebChatStyles, dispatch, adapter, state);
284
285
  } else {
@@ -298,7 +299,7 @@ export const LiveChatWidgetStateful = props => {
298
299
  });
299
300
 
300
301
  // Listen to end chat event from other tabs
301
- const endChatEventName = getWidgetEndChatEventName(chatSDK === null || chatSDK === void 0 ? void 0 : (_chatSDK$omnichannelC8 = chatSDK.omnichannelConfig) === null || _chatSDK$omnichannelC8 === void 0 ? void 0 : _chatSDK$omnichannelC8.orgId, chatSDK === null || chatSDK === void 0 ? void 0 : (_chatSDK$omnichannelC9 = chatSDK.omnichannelConfig) === null || _chatSDK$omnichannelC9 === void 0 ? void 0 : _chatSDK$omnichannelC9.widgetId, ((_props$controlProps11 = props.controlProps) === null || _props$controlProps11 === void 0 ? void 0 : _props$controlProps11.widgetInstanceId) ?? "");
302
+ const endChatEventName = getWidgetEndChatEventName(chatSDK === null || chatSDK === void 0 ? void 0 : (_chatSDK$omnichannelC8 = chatSDK.omnichannelConfig) === null || _chatSDK$omnichannelC8 === void 0 ? void 0 : _chatSDK$omnichannelC8.orgId, chatSDK === null || chatSDK === void 0 ? void 0 : (_chatSDK$omnichannelC9 = chatSDK.omnichannelConfig) === null || _chatSDK$omnichannelC9 === void 0 ? void 0 : _chatSDK$omnichannelC9.widgetId, ((_props$controlProps12 = props.controlProps) === null || _props$controlProps12 === void 0 ? void 0 : _props$controlProps12.widgetInstanceId) ?? "");
302
303
  BroadcastService.getMessageByEventName(endChatEventName).subscribe(async () => {
303
304
  endChat(props, chatSDK, setAdapter, setWebChatStyles, dispatch, adapter, false, false, false);
304
305
  return;
@@ -403,7 +404,7 @@ export const LiveChatWidgetStateful = props => {
403
404
 
404
405
  // Publish chat widget state
405
406
  useEffect(() => {
406
- var _props$chatSDK, _props$chatSDK$omnich, _props$chatSDK2, _props$chatSDK2$omnic, _props$controlProps12;
407
+ var _props$chatSDK, _props$chatSDK$omnich, _props$chatSDK2, _props$chatSDK2$omnic, _props$controlProps13;
407
408
  // Only activate these windows events when conversation state is active and chat widget is in popout mode
408
409
  // Ghost chat scenarios
409
410
  /* COMMENTING THIS CODE FOR PARITY WITH OLD LCW
@@ -421,7 +422,7 @@ export const LiveChatWidgetStateful = props => {
421
422
  };
422
423
  }*/
423
424
 
424
- widgetStateEventName = getWidgetCacheId(props === null || props === void 0 ? void 0 : (_props$chatSDK = props.chatSDK) === null || _props$chatSDK === void 0 ? void 0 : (_props$chatSDK$omnich = _props$chatSDK.omnichannelConfig) === null || _props$chatSDK$omnich === void 0 ? void 0 : _props$chatSDK$omnich.orgId, props === null || props === void 0 ? void 0 : (_props$chatSDK2 = props.chatSDK) === null || _props$chatSDK2 === void 0 ? void 0 : (_props$chatSDK2$omnic = _props$chatSDK2.omnichannelConfig) === null || _props$chatSDK2$omnic === void 0 ? void 0 : _props$chatSDK2$omnic.widgetId, (props === null || props === void 0 ? void 0 : (_props$controlProps12 = props.controlProps) === null || _props$controlProps12 === void 0 ? void 0 : _props$controlProps12.widgetInstanceId) ?? "");
425
+ widgetStateEventName = getWidgetCacheId(props === null || props === void 0 ? void 0 : (_props$chatSDK = props.chatSDK) === null || _props$chatSDK === void 0 ? void 0 : (_props$chatSDK$omnich = _props$chatSDK.omnichannelConfig) === null || _props$chatSDK$omnich === void 0 ? void 0 : _props$chatSDK$omnich.orgId, props === null || props === void 0 ? void 0 : (_props$chatSDK2 = props.chatSDK) === null || _props$chatSDK2 === void 0 ? void 0 : (_props$chatSDK2$omnic = _props$chatSDK2.omnichannelConfig) === null || _props$chatSDK2$omnic === void 0 ? void 0 : _props$chatSDK2$omnic.widgetId, (props === null || props === void 0 ? void 0 : (_props$controlProps13 = props.controlProps) === null || _props$controlProps13 === void 0 ? void 0 : _props$controlProps13.widgetInstanceId) ?? "");
425
426
  const chatWidgetStateChangeEvent = {
426
427
  eventName: widgetStateEventName,
427
428
  payload: {
@@ -483,28 +484,28 @@ export const LiveChatWidgetStateful = props => {
483
484
  id: widgetElementId,
484
485
  styles: generalStyles,
485
486
  className: (_props$styleProps2 = props.styleProps) === null || _props$styleProps2 === void 0 ? void 0 : _props$styleProps2.className
486
- }, !((_props$controlProps13 = props.controlProps) !== null && _props$controlProps13 !== void 0 && _props$controlProps13.hideChatButton) && !((_props$controlProps14 = props.controlProps) !== null && _props$controlProps14 !== void 0 && _props$controlProps14.hideStartChatButton) && shouldShowChatButton(state) && (decodeComponentString((_props$componentOverr = props.componentOverrides) === null || _props$componentOverr === void 0 ? void 0 : _props$componentOverr.chatButton) || /*#__PURE__*/React.createElement(ChatButtonStateful, {
487
+ }, !((_props$controlProps14 = props.controlProps) !== null && _props$controlProps14 !== void 0 && _props$controlProps14.hideChatButton) && !((_props$controlProps15 = props.controlProps) !== null && _props$controlProps15 !== void 0 && _props$controlProps15.hideStartChatButton) && shouldShowChatButton(state) && (decodeComponentString((_props$componentOverr = props.componentOverrides) === null || _props$componentOverr === void 0 ? void 0 : _props$componentOverr.chatButton) || /*#__PURE__*/React.createElement(ChatButtonStateful, {
487
488
  buttonProps: props.chatButtonProps,
488
489
  outOfOfficeButtonProps: props.outOfOfficeChatButtonProps,
489
490
  startChat: prepareStartChatRelay
490
- })), !((_props$controlProps15 = props.controlProps) !== null && _props$controlProps15 !== void 0 && _props$controlProps15.hideProactiveChatPane) && shouldShowProactiveChatPane(state) && (decodeComponentString((_props$componentOverr2 = props.componentOverrides) === null || _props$componentOverr2 === void 0 ? void 0 : _props$componentOverr2.proactiveChatPane) || /*#__PURE__*/React.createElement(ProactiveChatPaneStateful, {
491
+ })), !((_props$controlProps16 = props.controlProps) !== null && _props$controlProps16 !== void 0 && _props$controlProps16.hideProactiveChatPane) && shouldShowProactiveChatPane(state) && (decodeComponentString((_props$componentOverr2 = props.componentOverrides) === null || _props$componentOverr2 === void 0 ? void 0 : _props$componentOverr2.proactiveChatPane) || /*#__PURE__*/React.createElement(ProactiveChatPaneStateful, {
491
492
  proactiveChatProps: props.proactiveChatPaneProps,
492
493
  startChat: prepareStartChatRelay
493
- })), !((_props$controlProps16 = props.controlProps) !== null && _props$controlProps16 !== void 0 && _props$controlProps16.hideHeader) && shouldShowHeader(state) && (decodeComponentString((_props$componentOverr3 = props.componentOverrides) === null || _props$componentOverr3 === void 0 ? void 0 : _props$componentOverr3.header) || /*#__PURE__*/React.createElement(HeaderStateful, {
494
+ })), !((_props$controlProps17 = props.controlProps) !== null && _props$controlProps17 !== void 0 && _props$controlProps17.hideHeader) && shouldShowHeader(state) && (decodeComponentString((_props$componentOverr3 = props.componentOverrides) === null || _props$componentOverr3 === void 0 ? void 0 : _props$componentOverr3.header) || /*#__PURE__*/React.createElement(HeaderStateful, {
494
495
  headerProps: props.headerProps,
495
496
  outOfOfficeHeaderProps: props.outOfOfficeHeaderProps,
496
497
  endChat: endChatRelay
497
- })), !((_props$controlProps17 = props.controlProps) !== null && _props$controlProps17 !== void 0 && _props$controlProps17.hideLoadingPane) && shouldShowLoadingPane(state) && (decodeComponentString((_props$componentOverr4 = props.componentOverrides) === null || _props$componentOverr4 === void 0 ? void 0 : _props$componentOverr4.loadingPane) || /*#__PURE__*/React.createElement(LoadingPaneStateful, props.loadingPaneProps)), !((_props$controlProps18 = props.controlProps) !== null && _props$controlProps18 !== void 0 && _props$controlProps18.hideOutOfOfficeHoursPane) && shouldShowOutOfOfficeHoursPane(state) && (decodeComponentString((_props$componentOverr5 = props.componentOverrides) === null || _props$componentOverr5 === void 0 ? void 0 : _props$componentOverr5.outOfOfficeHoursPane) || /*#__PURE__*/React.createElement(OutOfOfficeHoursPaneStateful, props.outOfOfficeHoursPaneProps)), !((_props$controlProps19 = props.controlProps) !== null && _props$controlProps19 !== void 0 && _props$controlProps19.hideReconnectChatPane) && shouldShowReconnectChatPane(state) && (decodeComponentString((_props$componentOverr6 = props.componentOverrides) === null || _props$componentOverr6 === void 0 ? void 0 : _props$componentOverr6.reconnectChatPane) || /*#__PURE__*/React.createElement(ReconnectChatPaneStateful, {
498
+ })), !((_props$controlProps18 = props.controlProps) !== null && _props$controlProps18 !== void 0 && _props$controlProps18.hideLoadingPane) && shouldShowLoadingPane(state) && (decodeComponentString((_props$componentOverr4 = props.componentOverrides) === null || _props$componentOverr4 === void 0 ? void 0 : _props$componentOverr4.loadingPane) || /*#__PURE__*/React.createElement(LoadingPaneStateful, props.loadingPaneProps)), !((_props$controlProps19 = props.controlProps) !== null && _props$controlProps19 !== void 0 && _props$controlProps19.hideOutOfOfficeHoursPane) && shouldShowOutOfOfficeHoursPane(state) && (decodeComponentString((_props$componentOverr5 = props.componentOverrides) === null || _props$componentOverr5 === void 0 ? void 0 : _props$componentOverr5.outOfOfficeHoursPane) || /*#__PURE__*/React.createElement(OutOfOfficeHoursPaneStateful, props.outOfOfficeHoursPaneProps)), !((_props$controlProps20 = props.controlProps) !== null && _props$controlProps20 !== void 0 && _props$controlProps20.hideReconnectChatPane) && shouldShowReconnectChatPane(state) && (decodeComponentString((_props$componentOverr6 = props.componentOverrides) === null || _props$componentOverr6 === void 0 ? void 0 : _props$componentOverr6.reconnectChatPane) || /*#__PURE__*/React.createElement(ReconnectChatPaneStateful, {
498
499
  reconnectChatProps: props.reconnectChatPaneProps,
499
500
  initStartChat: initStartChatRelay
500
- })), !((_props$controlProps20 = props.controlProps) !== null && _props$controlProps20 !== void 0 && _props$controlProps20.hidePreChatSurveyPane) && shouldShowPreChatSurveyPane(state) && (decodeComponentString((_props$componentOverr7 = props.componentOverrides) === null || _props$componentOverr7 === void 0 ? void 0 : _props$componentOverr7.preChatSurveyPane) || /*#__PURE__*/React.createElement(PreChatSurveyPaneStateful, {
501
+ })), !((_props$controlProps21 = props.controlProps) !== null && _props$controlProps21 !== void 0 && _props$controlProps21.hidePreChatSurveyPane) && shouldShowPreChatSurveyPane(state) && (decodeComponentString((_props$componentOverr7 = props.componentOverrides) === null || _props$componentOverr7 === void 0 ? void 0 : _props$componentOverr7.preChatSurveyPane) || /*#__PURE__*/React.createElement(PreChatSurveyPaneStateful, {
501
502
  surveyProps: props.preChatSurveyPaneProps,
502
503
  initStartChat: initStartChatRelay
503
- })), !((_props$controlProps21 = props.controlProps) !== null && _props$controlProps21 !== void 0 && _props$controlProps21.hideCallingContainer) && shouldShowCallingContainer(state) && /*#__PURE__*/React.createElement(CallingContainerStateful, _extends({
504
+ })), !((_props$controlProps22 = props.controlProps) !== null && _props$controlProps22 !== void 0 && _props$controlProps22.hideCallingContainer) && shouldShowCallingContainer(state) && /*#__PURE__*/React.createElement(CallingContainerStateful, _extends({
504
505
  voiceVideoCallingSdk: voiceVideoCallingSDK
505
- }, props.callingContainerProps)), !((_props$controlProps22 = props.controlProps) !== null && _props$controlProps22 !== void 0 && _props$controlProps22.hideWebChatContainer) && shouldShowWebChatContainer(state) && (decodeComponentString((_props$componentOverr8 = props.componentOverrides) === null || _props$componentOverr8 === void 0 ? void 0 : _props$componentOverr8.webChatContainer) || /*#__PURE__*/React.createElement(WebChatContainerStateful, props.webChatContainerProps)), !((_props$controlProps23 = props.controlProps) !== null && _props$controlProps23 !== void 0 && _props$controlProps23.hideConfirmationPane) && shouldShowConfirmationPane(state) && (decodeComponentString((_props$componentOverr9 = props.componentOverrides) === null || _props$componentOverr9 === void 0 ? void 0 : _props$componentOverr9.confirmationPane) || /*#__PURE__*/React.createElement(ConfirmationPaneStateful, _extends({}, confirmationPaneProps, {
506
+ }, props.callingContainerProps)), !((_props$controlProps23 = props.controlProps) !== null && _props$controlProps23 !== void 0 && _props$controlProps23.hideWebChatContainer) && shouldShowWebChatContainer(state) && (decodeComponentString((_props$componentOverr8 = props.componentOverrides) === null || _props$componentOverr8 === void 0 ? void 0 : _props$componentOverr8.webChatContainer) || /*#__PURE__*/React.createElement(WebChatContainerStateful, props.webChatContainerProps)), !((_props$controlProps24 = props.controlProps) !== null && _props$controlProps24 !== void 0 && _props$controlProps24.hideConfirmationPane) && shouldShowConfirmationPane(state) && (decodeComponentString((_props$componentOverr9 = props.componentOverrides) === null || _props$componentOverr9 === void 0 ? void 0 : _props$componentOverr9.confirmationPane) || /*#__PURE__*/React.createElement(ConfirmationPaneStateful, _extends({}, confirmationPaneProps, {
506
507
  setPostChatContext: setPostChatContextRelay,
507
508
  prepareEndChat: prepareEndChatRelay
508
- }))), !((_props$controlProps24 = props.controlProps) !== null && _props$controlProps24 !== void 0 && _props$controlProps24.hidePostChatLoadingPane) && shouldShowPostChatLoadingPane(state) && (decodeComponentString((_props$componentOverr10 = props.componentOverrides) === null || _props$componentOverr10 === void 0 ? void 0 : _props$componentOverr10.postChatLoadingPane) || /*#__PURE__*/React.createElement(PostChatLoadingPaneStateful, props.postChatLoadingPaneProps)), shouldShowPostChatSurveyPane(state) && (decodeComponentString((_props$componentOverr11 = props.componentOverrides) === null || _props$componentOverr11 === void 0 ? void 0 : _props$componentOverr11.postChatSurveyPane) || /*#__PURE__*/React.createElement(PostChatSurveyPaneStateful, _extends({}, props.postChatSurveyPaneProps, props.chatSDK))), createFooter(props, state), shouldShowEmailTranscriptPane(state) && (decodeComponentString((_props$componentOverr12 = props.componentOverrides) === null || _props$componentOverr12 === void 0 ? void 0 : _props$componentOverr12.emailTranscriptPane) || /*#__PURE__*/React.createElement(EmailTranscriptPaneStateful, props.emailTranscriptPane)))));
509
+ }))), !((_props$controlProps25 = props.controlProps) !== null && _props$controlProps25 !== void 0 && _props$controlProps25.hidePostChatLoadingPane) && shouldShowPostChatLoadingPane(state) && (decodeComponentString((_props$componentOverr10 = props.componentOverrides) === null || _props$componentOverr10 === void 0 ? void 0 : _props$componentOverr10.postChatLoadingPane) || /*#__PURE__*/React.createElement(PostChatLoadingPaneStateful, props.postChatLoadingPaneProps)), shouldShowPostChatSurveyPane(state) && (decodeComponentString((_props$componentOverr11 = props.componentOverrides) === null || _props$componentOverr11 === void 0 ? void 0 : _props$componentOverr11.postChatSurveyPane) || /*#__PURE__*/React.createElement(PostChatSurveyPaneStateful, _extends({}, props.postChatSurveyPaneProps, props.chatSDK))), createFooter(props, state), shouldShowEmailTranscriptPane(state) && (decodeComponentString((_props$componentOverr12 = props.componentOverrides) === null || _props$componentOverr12 === void 0 ? void 0 : _props$componentOverr12.emailTranscriptPane) || /*#__PURE__*/React.createElement(EmailTranscriptPaneStateful, props.emailTranscriptPane)))));
509
510
  };
510
511
  export default LiveChatWidgetStateful;
@@ -2,10 +2,12 @@ import { ConversationState } from "./ConversationState";
2
2
  import { defaultMiddlewareLocalizedTexts } from "../../components/webchatcontainerstateful/common/defaultProps/defaultMiddlewareLocalizedTexts";
3
3
  import { getWidgetCacheId, isNullOrUndefined } from "../../common/utils";
4
4
  import { defaultClientDataStoreProvider } from "../../common/storage/default/defaultClientDataStoreProvider";
5
+ import { Constants } from "../../common/Constants";
5
6
  export const getLiveChatWidgetContextInitialState = props => {
6
- var _props$chatSDK, _props$chatSDK$omnich, _props$chatSDK2, _props$chatSDK2$omnic, _props$controlProps, _props$webChatContain;
7
+ var _props$chatSDK, _props$chatSDK$omnich, _props$chatSDK2, _props$chatSDK2$omnic, _props$controlProps, _props$controlProps2, _props$webChatContain;
7
8
  const widgetCacheId = getWidgetCacheId(props === null || props === void 0 ? void 0 : (_props$chatSDK = props.chatSDK) === null || _props$chatSDK === void 0 ? void 0 : (_props$chatSDK$omnich = _props$chatSDK.omnichannelConfig) === null || _props$chatSDK$omnich === void 0 ? void 0 : _props$chatSDK$omnich.orgId, props === null || props === void 0 ? void 0 : (_props$chatSDK2 = props.chatSDK) === null || _props$chatSDK2 === void 0 ? void 0 : (_props$chatSDK2$omnic = _props$chatSDK2.omnichannelConfig) === null || _props$chatSDK2$omnic === void 0 ? void 0 : _props$chatSDK2$omnic.widgetId, (props === null || props === void 0 ? void 0 : (_props$controlProps = props.controlProps) === null || _props$controlProps === void 0 ? void 0 : _props$controlProps.widgetInstanceId) ?? "");
8
- const initialState = defaultClientDataStoreProvider().getData(widgetCacheId, "localStorage");
9
+ const cacheTtlInMins = (props === null || props === void 0 ? void 0 : (_props$controlProps2 = props.controlProps) === null || _props$controlProps2 === void 0 ? void 0 : _props$controlProps2.cacheTtlInMins) ?? Constants.CacheTtlInMinutes;
10
+ const initialState = defaultClientDataStoreProvider(cacheTtlInMins).getData(widgetCacheId, "localStorage");
9
11
  if (!isNullOrUndefined(initialState)) {
10
12
  return JSON.parse(initialState);
11
13
  }
@@ -40,7 +40,7 @@ export const createOnNewAdapterActivityHandler = (chatId, userId) => {
40
40
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
41
41
  payload.messageType = Constants.systemMessageTag;
42
42
  TelemetryHelper.logActionEvent(LogLevel.INFO, {
43
- Event: TelemetryEvent.MessageReceived,
43
+ Event: TelemetryEvent.SystemMessageReceived,
44
44
  Description: "System message received"
45
45
  });
46
46
  } else {
@@ -78,6 +78,7 @@ export declare class Constants {
78
78
  static readonly ChatWidgetStateChangedPrefix = "ChatWidgetStateChanged";
79
79
  static readonly PostChatLoadingDurationInMs = 2000;
80
80
  static readonly BrowserUnloadConfirmationMessage = "Do you want to leave chat?";
81
+ static readonly CacheTtlInMinutes = 15;
81
82
  }
82
83
  export declare const Regex: {
83
84
  new (): {};
@@ -1,4 +1,4 @@
1
1
  export declare class defaultCacheManager {
2
2
  static InternalCache: any;
3
3
  }
4
- export declare const registerBroadcastServiceForLocalStorage: (orgid: string, widgetId: string, widgetInstanceId: string) => void;
4
+ export declare const registerBroadcastServiceForLocalStorage: (orgid: string, widgetId: string, widgetInstanceId: string, ttlInMins: number) => void;
@@ -1,2 +1,2 @@
1
1
  import { IContextDataStore } from "../../interfaces/IContextDataStore";
2
- export declare const defaultClientDataStoreProvider: () => IContextDataStore;
2
+ export declare const defaultClientDataStoreProvider: (cacheTtlinMins?: number) => IContextDataStore;
@@ -42,7 +42,9 @@ export declare enum BroadcastEvent {
42
42
  CloseChat = "CloseChat",
43
43
  InitiateEndChatOnBrowserUnload = "InitiateEndChatOnBrowserUnload",
44
44
  ClosePopoutWindow = "ClosePopoutWindow",
45
- RaiseErrorEvent = "RaiseErrorEvent"
45
+ RaiseErrorEvent = "RaiseErrorEvent",
46
+ NetworkDisconnected = "NetworkDisconnected",
47
+ NetworkReconnected = "NetworkReconnected"
46
48
  }
47
49
  export declare enum TelemetryEvent {
48
50
  CallAdded = "CallAdded",
@@ -157,6 +159,7 @@ export declare enum TelemetryEvent {
157
159
  ReconnectChatMinimize = "ReconnectChatMinimize",
158
160
  MessageSent = "MessageSent",
159
161
  MessageReceived = "MessageReceived",
162
+ SystemMessageReceived = "SystemMessageReceived",
160
163
  CustomContextReceived = "CustomContextReceived",
161
164
  NetworkDisconnected = "NetworkDisconnected",
162
165
  NetworkReconnected = "NetworkReconnected"
@@ -15,4 +15,5 @@ export interface ILiveChatWidgetControlProps {
15
15
  hideWebChatContainer?: boolean;
16
16
  hideStartChatButton?: boolean;
17
17
  widgetInstanceId?: string | undefined;
18
+ cacheTtlInMins?: number;
18
19
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@microsoft/omnichannel-chat-widget",
3
- "version": "0.1.0-main.6d898a1",
3
+ "version": "0.1.0-main.72ced10",
4
4
  "description": "Microsoft Omnichannel Chat Widget",
5
5
  "main": "lib/cjs/index.js",
6
6
  "types": "lib/types/index.d.ts",
@@ -74,8 +74,8 @@
74
74
  },
75
75
  "dependencies": {
76
76
  "@fluentui/react": "^8.49.1",
77
- "@microsoft/omnichannel-chat-components": "0.1.0-main.501b425",
78
- "@microsoft/omnichannel-chat-sdk": "1.2.1-main.94ae8ab",
77
+ "@microsoft/omnichannel-chat-components": "0.1.0-main.d5e0dfe",
78
+ "@microsoft/omnichannel-chat-sdk": "1.2.1-main.aaf8f21",
79
79
  "abort-controller-es5": "^2.0.1",
80
80
  "dompurify": "^2.3.4",
81
81
  "markdown-it": "^12.3.2",