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

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 (95) hide show
  1. package/lib/cjs/common/Constants.js +4 -0
  2. package/lib/cjs/common/telemetry/TelemetryConstants.js +6 -0
  3. package/lib/cjs/common/utils.js +64 -5
  4. package/lib/cjs/components/chatbuttonstateful/ChatButtonStateful.js +4 -0
  5. package/lib/cjs/components/confirmationpanestateful/ConfirmationPaneStateful.js +0 -1
  6. package/lib/cjs/components/headerstateful/HeaderStateful.js +4 -3
  7. package/lib/cjs/components/livechatwidget/common/ActivityStreamHandler.js +44 -0
  8. package/lib/cjs/components/livechatwidget/common/ActivitySubscriber/DefaultActivitySubscriber.js +23 -0
  9. package/lib/cjs/components/livechatwidget/common/ActivitySubscriber/IActivitySubscriber.js +1 -0
  10. package/lib/cjs/components/livechatwidget/common/ActivitySubscriber/PauseActivitySubscriber.js +39 -0
  11. package/lib/cjs/components/livechatwidget/common/ChatAdapterShim.js +70 -0
  12. package/lib/cjs/components/livechatwidget/common/Deferred.js +42 -0
  13. package/lib/cjs/components/livechatwidget/common/authHelper.js +52 -0
  14. package/lib/cjs/components/livechatwidget/common/createAdapter.js +13 -1
  15. package/lib/cjs/components/livechatwidget/common/createMarkdown.js +31 -30
  16. package/lib/cjs/components/livechatwidget/common/defaultProps/dummyDefaultProps.js +8 -3
  17. package/lib/cjs/components/livechatwidget/common/endChat.js +52 -20
  18. package/lib/cjs/components/livechatwidget/common/initWebChatComposer.js +12 -0
  19. package/lib/cjs/components/livechatwidget/common/reconnectChatHelper.js +55 -35
  20. package/lib/cjs/components/livechatwidget/common/setPostChatContextAndLoadSurvey.js +0 -4
  21. package/lib/cjs/components/livechatwidget/common/shareObservable.js +45 -0
  22. package/lib/cjs/components/livechatwidget/common/startChat.js +131 -80
  23. package/lib/cjs/components/livechatwidget/livechatwidgetstateful/LiveChatWidgetStateful.js +153 -110
  24. package/lib/cjs/components/prechatsurveypanestateful/PreChatSurveyPaneStateful.js +4 -8
  25. package/lib/cjs/components/proactivechatpanestateful/ProactiveChatPaneStateful.js +1 -1
  26. package/lib/cjs/components/webchatcontainerstateful/WebChatContainerStateful.js +11 -0
  27. package/lib/cjs/components/webchatcontainerstateful/common/defaultProps/defaultWebChatContainerStatefulProps.js +4 -1
  28. package/lib/cjs/components/webchatcontainerstateful/common/defaultStyles/defaultAdaptiveCardStyles.js +11 -0
  29. package/lib/cjs/components/webchatcontainerstateful/common/mockchatsdk.js +2 -0
  30. package/lib/cjs/components/webchatcontainerstateful/interfaces/IAdaptiveCardStyles.js +1 -0
  31. package/lib/cjs/contexts/common/ConversationState.js +3 -2
  32. package/lib/cjs/contexts/common/LiveChatWidgetActionType.js +1 -0
  33. package/lib/cjs/contexts/common/LiveChatWidgetContextInitialState.js +2 -2
  34. package/lib/cjs/contexts/createReducer.js +8 -0
  35. package/lib/cjs/controller/componentController.js +2 -2
  36. package/lib/esm/common/Constants.js +4 -0
  37. package/lib/esm/common/telemetry/TelemetryConstants.js +6 -0
  38. package/lib/esm/common/utils.js +48 -3
  39. package/lib/esm/components/chatbuttonstateful/ChatButtonStateful.js +4 -0
  40. package/lib/esm/components/confirmationpanestateful/ConfirmationPaneStateful.js +0 -1
  41. package/lib/esm/components/headerstateful/HeaderStateful.js +4 -3
  42. package/lib/esm/components/livechatwidget/common/ActivityStreamHandler.js +34 -0
  43. package/lib/esm/components/livechatwidget/common/ActivitySubscriber/DefaultActivitySubscriber.js +14 -0
  44. package/lib/esm/components/livechatwidget/common/ActivitySubscriber/IActivitySubscriber.js +1 -0
  45. package/lib/esm/components/livechatwidget/common/ActivitySubscriber/PauseActivitySubscriber.js +29 -0
  46. package/lib/esm/components/livechatwidget/common/ChatAdapterShim.js +59 -0
  47. package/lib/esm/components/livechatwidget/common/Deferred.js +33 -0
  48. package/lib/esm/components/livechatwidget/common/authHelper.js +39 -0
  49. package/lib/esm/components/livechatwidget/common/createAdapter.js +12 -2
  50. package/lib/esm/components/livechatwidget/common/createMarkdown.js +31 -30
  51. package/lib/esm/components/livechatwidget/common/defaultProps/dummyDefaultProps.js +8 -3
  52. package/lib/esm/components/livechatwidget/common/endChat.js +53 -21
  53. package/lib/esm/components/livechatwidget/common/initWebChatComposer.js +13 -2
  54. package/lib/esm/components/livechatwidget/common/reconnectChatHelper.js +56 -37
  55. package/lib/esm/components/livechatwidget/common/setPostChatContextAndLoadSurvey.js +0 -4
  56. package/lib/esm/components/livechatwidget/common/shareObservable.js +38 -0
  57. package/lib/esm/components/livechatwidget/common/startChat.js +127 -80
  58. package/lib/esm/components/livechatwidget/livechatwidgetstateful/LiveChatWidgetStateful.js +153 -112
  59. package/lib/esm/components/prechatsurveypanestateful/PreChatSurveyPaneStateful.js +5 -8
  60. package/lib/esm/components/proactivechatpanestateful/ProactiveChatPaneStateful.js +1 -1
  61. package/lib/esm/components/webchatcontainerstateful/WebChatContainerStateful.js +10 -0
  62. package/lib/esm/components/webchatcontainerstateful/common/defaultProps/defaultWebChatContainerStatefulProps.js +3 -1
  63. package/lib/esm/components/webchatcontainerstateful/common/defaultStyles/defaultAdaptiveCardStyles.js +4 -0
  64. package/lib/esm/components/webchatcontainerstateful/common/mockchatsdk.js +2 -0
  65. package/lib/esm/components/webchatcontainerstateful/interfaces/IAdaptiveCardStyles.js +1 -0
  66. package/lib/esm/contexts/common/ConversationState.js +3 -2
  67. package/lib/esm/contexts/common/LiveChatWidgetActionType.js +1 -0
  68. package/lib/esm/contexts/common/LiveChatWidgetContextInitialState.js +2 -2
  69. package/lib/esm/contexts/createReducer.js +8 -0
  70. package/lib/esm/controller/componentController.js +2 -2
  71. package/lib/types/common/Constants.d.ts +2 -0
  72. package/lib/types/common/telemetry/TelemetryConstants.d.ts +6 -1
  73. package/lib/types/common/utils.d.ts +7 -3
  74. package/lib/types/components/headerstateful/interfaces/IHeaderStatefulParams.d.ts +2 -1
  75. package/lib/types/components/livechatwidget/common/ActivityStreamHandler.d.ts +14 -0
  76. package/lib/types/components/livechatwidget/common/ActivitySubscriber/DefaultActivitySubscriber.d.ts +5 -0
  77. package/lib/types/components/livechatwidget/common/ActivitySubscriber/IActivitySubscriber.d.ts +6 -0
  78. package/lib/types/components/livechatwidget/common/ActivitySubscriber/PauseActivitySubscriber.d.ts +7 -0
  79. package/lib/types/components/livechatwidget/common/ChatAdapterShim.d.ts +7 -0
  80. package/lib/types/components/livechatwidget/common/Deferred.d.ts +9 -0
  81. package/lib/types/components/livechatwidget/common/authHelper.d.ts +4 -0
  82. package/lib/types/components/livechatwidget/common/reconnectChatHelper.d.ts +5 -4
  83. package/lib/types/components/livechatwidget/common/shareObservable.d.ts +1 -0
  84. package/lib/types/components/livechatwidget/common/startChat.d.ts +4 -3
  85. package/lib/types/components/livechatwidget/interfaces/ILiveChatWidgetControlProps.d.ts +1 -0
  86. package/lib/types/components/livechatwidget/interfaces/ILiveChatWidgetProps.d.ts +1 -0
  87. package/lib/types/components/reconnectchatpanestateful/interfaces/IReconnectChatPaneStatefulProps.d.ts +0 -1
  88. package/lib/types/components/webchatcontainerstateful/common/defaultStyles/defaultAdaptiveCardStyles.d.ts +2 -0
  89. package/lib/types/components/webchatcontainerstateful/common/mockchatsdk.d.ts +1 -0
  90. package/lib/types/components/webchatcontainerstateful/interfaces/IAdaptiveCardStyles.d.ts +4 -0
  91. package/lib/types/components/webchatcontainerstateful/interfaces/IWebChatContainerStatefulProps.d.ts +2 -0
  92. package/lib/types/contexts/common/ConversationState.d.ts +3 -2
  93. package/lib/types/contexts/common/ILiveChatWidgetContext.d.ts +1 -1
  94. package/lib/types/contexts/common/LiveChatWidgetActionType.d.ts +2 -1
  95. package/package.json +4 -3
@@ -1,12 +1,12 @@
1
- function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
1
+ function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
2
2
 
3
3
  import { BroadcastEvent, LogLevel, TelemetryEvent } from "../../../common/telemetry/TelemetryConstants";
4
- import { BroadcastService, decodeComponentString } from "@microsoft/omnichannel-chat-components";
4
+ import { BroadcastService, decodeComponentString, BroadcastServiceInitialize } from "@microsoft/omnichannel-chat-components";
5
5
  import { Stack } from "@fluentui/react";
6
6
  import React, { useEffect, useRef, useState } from "react";
7
- import { createTimer, getLocaleDirection, getWidgetCacheId, getWidgetEndChatEventName } from "../../../common/utils";
7
+ import { createTimer, getBroadcastChannelName, getLocaleDirection, getStateFromCache, getWidgetCacheId, getWidgetEndChatEventName, isNullOrEmptyString, isUndefinedOrEmpty } from "../../../common/utils";
8
8
  import { getReconnectIdForAuthenticatedChat, handleUnauthenticatedReconnectChat, startUnauthenticatedReconnectChat } from "../common/reconnectChatHelper";
9
- import { initStartChat, prepareStartChat, setupChatState } from "../common/startChat";
9
+ import { initStartChat, prepareStartChat, setPreChatAndInitiateChat } from "../common/startChat";
10
10
  import { shouldShowCallingContainer, shouldShowChatButton, shouldShowConfirmationPane, shouldShowEmailTranscriptPane, shouldShowHeader, shouldShowLoadingPane, shouldShowOutOfOfficeHoursPane, shouldShowPostChatLoadingPane, shouldShowPostChatSurveyPane, shouldShowPreChatSurveyPane, shouldShowProactiveChatPane, shouldShowReconnectChatPane, shouldShowWebChatContainer } from "../../../controller/componentController";
11
11
  import CallingContainerStateful from "../../callingcontainerstateful/CallingContainerStateful";
12
12
  import ChatButtonStateful from "../../chatbuttonstateful/ChatButtonStateful";
@@ -43,8 +43,10 @@ import { startProactiveChat } from "../common/startProactiveChat";
43
43
  import useChatAdapterStore from "../../../hooks/useChatAdapterStore";
44
44
  import useChatContextStore from "../../../hooks/useChatContextStore";
45
45
  import useChatSDKStore from "../../../hooks/useChatSDKStore";
46
+ import { ActivityStreamHandler } from "../common/ActivityStreamHandler";
47
+ import { Constants } from "../../../common/Constants";
46
48
  export const LiveChatWidgetStateful = props => {
47
- var _props$webChatContain, _props$styleProps, _props$controlProps, _props$webChatContain3, _props$webChatContain4, _props$styleProps2, _props$controlProps5, _props$controlProps6, _props$componentOverr, _props$controlProps7, _props$componentOverr2, _props$controlProps8, _props$componentOverr3, _props$controlProps9, _props$componentOverr4, _props$controlProps10, _props$componentOverr5, _props$controlProps11, _props$componentOverr6, _props$controlProps12, _props$componentOverr7, _props$controlProps13, _props$controlProps14, _props$componentOverr8, _props$controlProps15, _props$componentOverr9, _props$controlProps16, _props$componentOverr10, _props$componentOverr11, _props$componentOverr12;
49
+ var _props$webChatContain, _props$styleProps, _props$controlProps, _props$webChatContain3, _props$webChatContain4, _props$styleProps2, _props$controlProps14, _props$controlProps15, _props$componentOverr, _props$controlProps16, _props$componentOverr2, _props$controlProps17, _props$componentOverr3, _props$controlProps18, _props$componentOverr4, _props$controlProps19, _props$componentOverr5, _props$controlProps20, _props$componentOverr6, _props$controlProps21, _props$componentOverr7, _props$controlProps22, _props$controlProps23, _props$componentOverr8, _props$controlProps24, _props$componentOverr9, _props$controlProps25, _props$componentOverr10, _props$componentOverr11, _props$componentOverr12;
48
50
 
49
51
  const [state, dispatch] = useChatContextStore(); // eslint-disable-next-line @typescript-eslint/no-explicit-any
50
52
 
@@ -59,8 +61,7 @@ export const LiveChatWidgetStateful = props => {
59
61
  const {
60
62
  Composer
61
63
  } = Components;
62
- const canStartProactiveChat = useRef(true);
63
- const canEndChat = useRef(true); // Process general styles
64
+ const canStartProactiveChat = useRef(true); // Process general styles
64
65
 
65
66
  const generalStyles = {
66
67
  root: Object.assign({}, getGeneralStylesForButton(state), (_props$styleProps = props.styleProps) === null || _props$styleProps === void 0 ? void 0 : _props$styleProps.generalStyles)
@@ -73,31 +74,29 @@ export const LiveChatWidgetStateful = props => {
73
74
  const initiateEndChatOnBrowserUnload = () => {
74
75
  var _DataStoreManager$cli;
75
76
 
76
- const persistedState = getStateFromCache(); // End chat if the chat is still active and browser closed
77
-
78
- if (persistedState.appStates.conversationState === ConversationState.Active) {
79
- //Browser close scenario/no room for PCS/so just end chat and notify agent immidiately
80
- endChat(props, chatSDK, setAdapter, setWebChatStyles, dispatch, adapter, false, false, false);
81
- } // Clean local storage
82
-
77
+ TelemetryHelper.logActionEvent(LogLevel.INFO, {
78
+ Event: TelemetryEvent.BrowserUnloadEventStarted,
79
+ Description: "Browser unload event received."
80
+ });
81
+ endChat(props, chatSDK, setAdapter, setWebChatStyles, dispatch, adapter, false, false, false); // Clean local storage
83
82
 
84
- (_DataStoreManager$cli = DataStoreManager.clientDataStore) === null || _DataStoreManager$cli === void 0 ? void 0 : _DataStoreManager$cli.removeData(widgetStateEventName, "localStorage");
85
- }; // eslint-disable-next-line @typescript-eslint/no-explicit-any
83
+ (_DataStoreManager$cli = DataStoreManager.clientDataStore) === null || _DataStoreManager$cli === void 0 ? void 0 : _DataStoreManager$cli.removeData(widgetStateEventName, "localStorage"); //Dispose calling instance
86
84
 
85
+ if (voiceVideoCallingSDK) {
86
+ voiceVideoCallingSDK === null || voiceVideoCallingSDK === void 0 ? void 0 : voiceVideoCallingSDK.close();
87
+ } //Message for clearing window[popouTab]
87
88
 
88
- const getStateFromCache = () => {
89
- var _chatSDK$omnichannelC, _chatSDK$omnichannelC2, _DataStoreManager$cli2;
90
89
 
91
- // Getting updated state from cache
92
- const widgetStateEventName = getWidgetCacheId((chatSDK === null || chatSDK === void 0 ? void 0 : (_chatSDK$omnichannelC = chatSDK.omnichannelConfig) === null || _chatSDK$omnichannelC === void 0 ? void 0 : _chatSDK$omnichannelC.orgId) ?? "", (chatSDK === null || chatSDK === void 0 ? void 0 : (_chatSDK$omnichannelC2 = chatSDK.omnichannelConfig) === null || _chatSDK$omnichannelC2 === void 0 ? void 0 : _chatSDK$omnichannelC2.widgetId) ?? "");
93
- const widgetStateFromCache = (_DataStoreManager$cli2 = DataStoreManager.clientDataStore) === null || _DataStoreManager$cli2 === void 0 ? void 0 : _DataStoreManager$cli2.getData(widgetStateEventName, "localStorage");
94
- const persistedState = widgetStateFromCache ? JSON.parse(widgetStateFromCache) : undefined;
95
- return persistedState;
90
+ BroadcastService.postMessage({
91
+ eventName: BroadcastEvent.ClosePopoutWindow
92
+ });
96
93
  };
97
94
 
98
95
  useEffect(() => {
99
- var _props$controlProps2, _props$controlProps3, _props$reconnectChatP, _props$controlProps4, _props$chatConfig, _props$chatConfig$Cha, _state$domainStates;
96
+ var _chatSDK$omnichannelC, _props$controlProps2, _props$controlProps3, _props$controlProps4, _props$controlProps5, _props$controlProps7, _props$chatConfig, _props$chatConfig$Cha, _props$controlProps8, _props$reconnectChatP, _props$chatConfig2, _props$chatConfig2$Li;
100
97
 
98
+ const broadcastServiceChannelName = getBroadcastChannelName(chatSDK === null || chatSDK === void 0 ? void 0 : (_chatSDK$omnichannelC = chatSDK.omnichannelConfig) === null || _chatSDK$omnichannelC === void 0 ? void 0 : _chatSDK$omnichannelC.widgetId, ((_props$controlProps2 = props.controlProps) === null || _props$controlProps2 === void 0 ? void 0 : _props$controlProps2.widgetInstanceId) ?? "");
99
+ BroadcastServiceInitialize(broadcastServiceChannelName);
101
100
  registerTelemetryLoggers(props, dispatch);
102
101
  createInternetConnectionChangeHandler();
103
102
  DataStoreManager.clientDataStore = props.contextDataStore ?? undefined;
@@ -107,54 +106,79 @@ export const LiveChatWidgetStateful = props => {
107
106
  });
108
107
  dispatch({
109
108
  type: LiveChatWidgetActionType.SET_SKIP_CHAT_BUTTON_RENDERING,
110
- payload: ((_props$controlProps2 = props.controlProps) === null || _props$controlProps2 === void 0 ? void 0 : _props$controlProps2.skipChatButtonRendering) || false
109
+ payload: ((_props$controlProps3 = props.controlProps) === null || _props$controlProps3 === void 0 ? void 0 : _props$controlProps3.skipChatButtonRendering) || false
111
110
  });
112
111
  dispatch({
113
112
  type: LiveChatWidgetActionType.SET_E2VV_ENABLED,
114
113
  payload: false
115
114
  });
115
+
116
+ if ((_props$controlProps4 = props.controlProps) !== null && _props$controlProps4 !== void 0 && _props$controlProps4.widgetInstanceId && !isNullOrEmptyString((_props$controlProps5 = props.controlProps) === null || _props$controlProps5 === void 0 ? void 0 : _props$controlProps5.widgetInstanceId)) {
117
+ var _props$controlProps6;
118
+
119
+ dispatch({
120
+ type: LiveChatWidgetActionType.SET_WIDGET_INSTANCE_ID,
121
+ payload: (_props$controlProps6 = props.controlProps) === null || _props$controlProps6 === void 0 ? void 0 : _props$controlProps6.widgetInstanceId
122
+ });
123
+ }
124
+
116
125
  initCallingSdk(chatSDK, setVoiceVideoCallingSDK).then(sdkCreated => {
117
126
  sdkCreated && dispatch({
118
127
  type: LiveChatWidgetActionType.SET_E2VV_ENABLED,
119
128
  payload: true
120
129
  });
121
- });
122
-
123
- if (!((_props$controlProps3 = props.controlProps) !== null && _props$controlProps3 !== void 0 && _props$controlProps3.skipChatButtonRendering) && (_props$reconnectChatP = props.reconnectChatPaneProps) !== null && _props$reconnectChatP !== void 0 && _props$reconnectChatP.reconnectId) {
124
- var _props$reconnectChatP2;
125
-
126
- startUnauthenticatedReconnectChat(chatSDK, dispatch, setAdapter, (_props$reconnectChatP2 = props.reconnectChatPaneProps) === null || _props$reconnectChatP2 === void 0 ? void 0 : _props$reconnectChatP2.reconnectId, initStartChat);
127
- } // Initialize global dir
130
+ }); // Initialize global dir
128
131
 
129
-
130
- const globalDir = ((_props$controlProps4 = props.controlProps) === null || _props$controlProps4 === void 0 ? void 0 : _props$controlProps4.dir) ?? getLocaleDirection((_props$chatConfig = props.chatConfig) === null || _props$chatConfig === void 0 ? void 0 : (_props$chatConfig$Cha = _props$chatConfig.ChatWidgetLanguage) === null || _props$chatConfig$Cha === void 0 ? void 0 : _props$chatConfig$Cha.msdyn_localeid);
132
+ const globalDir = ((_props$controlProps7 = props.controlProps) === null || _props$controlProps7 === void 0 ? void 0 : _props$controlProps7.dir) ?? getLocaleDirection((_props$chatConfig = props.chatConfig) === null || _props$chatConfig === void 0 ? void 0 : (_props$chatConfig$Cha = _props$chatConfig.ChatWidgetLanguage) === null || _props$chatConfig$Cha === void 0 ? void 0 : _props$chatConfig$Cha.msdyn_localeid);
131
133
  dispatch({
132
134
  type: LiveChatWidgetActionType.SET_GLOBAL_DIR,
133
135
  payload: globalDir
134
136
  });
135
137
 
136
- if ((_state$domainStates = state.domainStates) !== null && _state$domainStates !== void 0 && _state$domainStates.liveChatContext) {
137
- var _state$domainStates2;
138
+ if (!((_props$controlProps8 = props.controlProps) !== null && _props$controlProps8 !== void 0 && _props$controlProps8.skipChatButtonRendering) && (_props$reconnectChatP = props.reconnectChatPaneProps) !== null && _props$reconnectChatP !== void 0 && _props$reconnectChatP.reconnectId) {
139
+ var _props$reconnectChatP2, _props$reconnectChatP3;
138
140
 
139
- const optionalParams = {
140
- liveChatContext: (_state$domainStates2 = state.domainStates) === null || _state$domainStates2 === void 0 ? void 0 : _state$domainStates2.liveChatContext
141
- };
142
- initStartChat(chatSDK, dispatch, setAdapter, optionalParams);
143
- }
141
+ startUnauthenticatedReconnectChat(chatSDK, props.chatConfig, props.getAuthToken, dispatch, setAdapter, (_props$reconnectChatP2 = props.reconnectChatPaneProps) === null || _props$reconnectChatP2 === void 0 ? void 0 : _props$reconnectChatP2.isReconnectEnabled, (_props$reconnectChatP3 = props.reconnectChatPaneProps) === null || _props$reconnectChatP3 === void 0 ? void 0 : _props$reconnectChatP3.reconnectId, initStartChat);
142
+ return;
143
+ } // Check if auth settings enabled, do not connect to existing chat from cache during refresh/re-load
144
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
145
+
146
+
147
+ const isAuthenticationSettingsEnabled = (_props$chatConfig2 = props.chatConfig) !== null && _props$chatConfig2 !== void 0 && (_props$chatConfig2$Li = _props$chatConfig2.LiveChatConfigAuthSettings) !== null && _props$chatConfig2$Li !== void 0 && _props$chatConfig2$Li.msdyn_javascriptclientfunction ? true : false;
148
+
149
+ if (isAuthenticationSettingsEnabled === false) {
150
+ var _state$domainStates;
151
+
152
+ if (!isUndefinedOrEmpty((_state$domainStates = state.domainStates) === null || _state$domainStates === void 0 ? void 0 : _state$domainStates.liveChatContext) && state.appStates.conversationState === ConversationState.Active) {
153
+ var _state$domainStates2;
154
+
155
+ const optionalParams = {
156
+ liveChatContext: (_state$domainStates2 = state.domainStates) === null || _state$domainStates2 === void 0 ? void 0 : _state$domainStates2.liveChatContext
157
+ };
158
+ initStartChat(chatSDK, props.chatConfig, props.getAuthToken, dispatch, setAdapter, optionalParams);
159
+ return;
160
+ }
161
+ } // All other case should show start chat button, skipChatButtonRendering will take care of it own
162
+
163
+
164
+ dispatch({
165
+ type: LiveChatWidgetActionType.SET_CONVERSATION_STATE,
166
+ payload: ConversationState.Closed
167
+ });
144
168
  }, []); // useEffect for when skip chat button rendering
145
169
 
146
170
  useEffect(() => {
147
171
  if (state.appStates.skipChatButtonRendering) {
148
- var _props$reconnectChatP3;
172
+ var _props$reconnectChatP4;
149
173
 
150
174
  BroadcastService.postMessage({
151
175
  eventName: BroadcastEvent.ChatInitiated
152
176
  });
153
177
 
154
- if ((_props$reconnectChatP3 = props.reconnectChatPaneProps) !== null && _props$reconnectChatP3 !== void 0 && _props$reconnectChatP3.reconnectId && !state.appStates.reconnectId) {
155
- var _props$reconnectChatP4, _props$reconnectChatP5;
178
+ if ((_props$reconnectChatP4 = props.reconnectChatPaneProps) !== null && _props$reconnectChatP4 !== void 0 && _props$reconnectChatP4.reconnectId && !state.appStates.reconnectId) {
179
+ var _props$reconnectChatP5, _props$reconnectChatP6, _props$reconnectChatP7;
156
180
 
157
- handleUnauthenticatedReconnectChat(chatSDK, dispatch, setAdapter, (_props$reconnectChatP4 = props.reconnectChatPaneProps) === null || _props$reconnectChatP4 === void 0 ? void 0 : _props$reconnectChatP4.reconnectId, initStartChat, (_props$reconnectChatP5 = props.reconnectChatPaneProps) === null || _props$reconnectChatP5 === void 0 ? void 0 : _props$reconnectChatP5.redirectInSameWindow);
181
+ handleUnauthenticatedReconnectChat(chatSDK, props.chatConfig, props.getAuthToken, dispatch, setAdapter, (_props$reconnectChatP5 = props.reconnectChatPaneProps) === null || _props$reconnectChatP5 === void 0 ? void 0 : _props$reconnectChatP5.isReconnectEnabled, (_props$reconnectChatP6 = props.reconnectChatPaneProps) === null || _props$reconnectChatP6 === void 0 ? void 0 : _props$reconnectChatP6.reconnectId, initStartChat, (_props$reconnectChatP7 = props.reconnectChatPaneProps) === null || _props$reconnectChatP7 === void 0 ? void 0 : _props$reconnectChatP7.redirectInSameWindow);
158
182
  } else {
159
183
  getReconnectIdForAuthenticatedChat(props, chatSDK).then(authReconnectId => {
160
184
  if (authReconnectId && !state.appStates.reconnectId) {
@@ -171,7 +195,7 @@ export const LiveChatWidgetStateful = props => {
171
195
  eventName: BroadcastEvent.StartChatSkippingChatButtonRendering
172
196
  };
173
197
  BroadcastService.postMessage(chatStartedSkippingChatButtonRendering);
174
- setupChatState(chatSDK, dispatch, setAdapter);
198
+ setPreChatAndInitiateChat(chatSDK, props.chatConfig, props.getAuthToken, dispatch, setAdapter);
175
199
  }
176
200
  });
177
201
  }
@@ -179,7 +203,7 @@ export const LiveChatWidgetStateful = props => {
179
203
  }, [state.appStates.skipChatButtonRendering]); // useEffect for when skip chat button rendering
180
204
 
181
205
  useEffect(() => {
182
- var _chatSDK$omnichannelC3, _chatSDK$omnichannelC4;
206
+ var _chatSDK$omnichannelC6, _chatSDK$omnichannelC7, _props$controlProps11;
183
207
 
184
208
  // Add the custom context on receiving the SetCustomContext event
185
209
  BroadcastService.getMessageByEventName(BroadcastEvent.SetCustomContext).subscribe(msg => {
@@ -198,7 +222,7 @@ export const LiveChatWidgetStateful = props => {
198
222
  Description: "Start proactive chat event received."
199
223
  });
200
224
 
201
- if (canStartProactiveChat.current) {
225
+ if (canStartProactiveChat.current === true) {
202
226
  var _msg$payload, _msg$payload2, _msg$payload3;
203
227
 
204
228
  startProactiveChat(dispatch, msg === null || msg === void 0 ? void 0 : (_msg$payload = msg.payload) === null || _msg$payload === void 0 ? void 0 : _msg$payload.notificationConfig, msg === null || msg === void 0 ? void 0 : (_msg$payload2 = msg.payload) === null || _msg$payload2 === void 0 ? void 0 : _msg$payload2.enablePreChat, msg === null || msg === void 0 ? void 0 : (_msg$payload3 = msg.payload) === null || _msg$payload3 === void 0 ? void 0 : _msg$payload3.inNewWindow);
@@ -211,28 +235,36 @@ export const LiveChatWidgetStateful = props => {
211
235
  }); // Start chat from SDK Event
212
236
 
213
237
  BroadcastService.getMessageByEventName(BroadcastEvent.StartChat).subscribe(() => {
238
+ var _chatSDK$omnichannelC2, _chatSDK$omnichannelC3, _props$controlProps9;
239
+
214
240
  TelemetryHelper.logActionEvent(LogLevel.INFO, {
215
241
  Event: TelemetryEvent.StartChatEventRecevied,
216
242
  Description: "Start chat event received."
217
243
  });
218
- const persistedState = getStateFromCache();
244
+ const persistedState = getStateFromCache(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$controlProps9 = props.controlProps) === null || _props$controlProps9 === void 0 ? void 0 : _props$controlProps9.widgetInstanceId) ?? ""); // Chat not found in cache
219
245
 
220
- if (persistedState && (persistedState.appStates.conversationState === ConversationState.Closed || persistedState.appStates.conversationState === ConversationState.InActive || persistedState.appStates.conversationState === ConversationState.Postchat)) {
221
- // Embedded mode
222
- BroadcastService.postMessage({
223
- eventName: BroadcastEvent.ChatInitiated
224
- });
225
- prepareStartChat(props, chatSDK, state, dispatch, setAdapter);
226
- } else if (!persistedState) {
227
- // Popout chat
246
+ if (persistedState === undefined) {
228
247
  BroadcastService.postMessage({
229
248
  eventName: BroadcastEvent.ChatInitiated
230
249
  });
231
250
  prepareStartChat(props, chatSDK, state, dispatch, setAdapter);
232
- } else {
251
+ return;
252
+ } // Chat exist in cache
253
+
254
+
255
+ if (persistedState) {
233
256
  var _persistedState$domai, _persistedState$domai2, _persistedState$domai3, _persistedState$domai4;
234
257
 
235
- // Minimize to Maximize
258
+ // Only initiate new chat if widget state in cache in one of the followings
259
+ if (persistedState.appStates.conversationState === ConversationState.Closed || persistedState.appStates.conversationState === ConversationState.InActive || persistedState.appStates.conversationState === ConversationState.Postchat) {
260
+ BroadcastService.postMessage({
261
+ eventName: BroadcastEvent.ChatInitiated
262
+ });
263
+ prepareStartChat(props, chatSDK, state, dispatch, setAdapter);
264
+ return;
265
+ } // If minimized, maximize the chat
266
+
267
+
236
268
  dispatch({
237
269
  type: LiveChatWidgetActionType.SET_MINIMIZED,
238
270
  payload: false
@@ -248,49 +280,39 @@ export const LiveChatWidgetStateful = props => {
248
280
  }); // End chat
249
281
 
250
282
  BroadcastService.getMessageByEventName(BroadcastEvent.InitiateEndChat).subscribe(async () => {
251
- if (canEndChat.current) {
252
- prepareEndChat(props, chatSDK, setAdapter, setWebChatStyles, dispatch, adapter, state);
253
- } else {
254
- const skipEndChatSDK = true;
255
- const skipCloseChat = false;
256
- endChat(props, chatSDK, setAdapter, setWebChatStyles, dispatch, adapter, skipEndChatSDK, skipCloseChat);
283
+ if (state.appStates.skipChatButtonRendering !== true) {
284
+ var _chatSDK$omnichannelC4, _chatSDK$omnichannelC5, _props$controlProps10;
285
+
286
+ // This is to ensure to get latest state from cache in multitab
287
+ 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) ?? "");
288
+
289
+ if (persistedState && persistedState.appStates.conversationState === ConversationState.Active) {
290
+ prepareEndChat(props, chatSDK, setAdapter, setWebChatStyles, dispatch, adapter, state);
291
+ } else {
292
+ const skipEndChatSDK = true;
293
+ const skipCloseChat = false;
294
+ endChat(props, chatSDK, setAdapter, setWebChatStyles, dispatch, adapter, skipEndChatSDK, skipCloseChat);
295
+ }
257
296
  }
258
297
 
259
298
  BroadcastService.postMessage({
260
299
  eventName: BroadcastEvent.CloseChat
261
300
  });
262
- });
301
+ }); // End chat on browser unload
302
+
263
303
  BroadcastService.getMessageByEventName(BroadcastEvent.InitiateEndChatOnBrowserUnload).subscribe(() => {
264
304
  initiateEndChatOnBrowserUnload();
265
- }); // reset proactive chat params
266
-
267
- BroadcastService.getMessageByEventName(BroadcastEvent.ResetProactiveChatParams).subscribe(async () => {
268
- dispatch({
269
- type: LiveChatWidgetActionType.SET_PROACTIVE_CHAT_PARAMS,
270
- payload: {
271
- proactiveChatBodyTitle: "",
272
- proactiveChatEnablePrechat: false,
273
- proactiveChatInNewWindow: false
274
- }
275
- });
276
305
  }); // Listen to end chat event from other tabs
277
306
 
278
- const endChatEventName = getWidgetEndChatEventName(chatSDK === null || chatSDK === void 0 ? void 0 : (_chatSDK$omnichannelC3 = chatSDK.omnichannelConfig) === null || _chatSDK$omnichannelC3 === void 0 ? void 0 : _chatSDK$omnichannelC3.orgId, chatSDK === null || chatSDK === void 0 ? void 0 : (_chatSDK$omnichannelC4 = chatSDK.omnichannelConfig) === null || _chatSDK$omnichannelC4 === void 0 ? void 0 : _chatSDK$omnichannelC4.widgetId);
307
+ const endChatEventName = getWidgetEndChatEventName(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$controlProps11 = props.controlProps) === null || _props$controlProps11 === void 0 ? void 0 : _props$controlProps11.widgetInstanceId) ?? "");
279
308
  BroadcastService.getMessageByEventName(endChatEventName).subscribe(async () => {
280
309
  endChat(props, chatSDK, setAdapter, setWebChatStyles, dispatch, adapter, false, false, false);
281
- }); // Close popout window
282
-
283
- window.addEventListener("beforeunload", () => {
284
- TelemetryHelper.logLoadingEvent(LogLevel.INFO, {
285
- Event: TelemetryEvent.WindowClosed,
286
- Description: "Closed window."
287
- });
288
- disposeTelemetryLoggers();
289
- });
310
+ return;
311
+ }); // When conversation ended by agent
290
312
 
291
313
  if (state.appStates.conversationEndedByAgent) {
292
314
  endChat(props, chatSDK, setAdapter, setWebChatStyles, dispatch, adapter);
293
- } //Listen to WidgetSize
315
+ } //Listen to WidgetSize, used for minimize to maximize
294
316
 
295
317
 
296
318
  BroadcastService.getMessageByEventName("WidgetSize").subscribe(msg => {
@@ -299,25 +321,23 @@ export const LiveChatWidgetStateful = props => {
299
321
  payload: msg === null || msg === void 0 ? void 0 : msg.payload
300
322
  });
301
323
  });
324
+ return () => {
325
+ disposeTelemetryLoggers();
326
+ };
302
327
  }, []);
303
328
  useEffect(() => {
304
- canEndChat.current = state.appStates.conversationState === ConversationState.Active;
305
-
306
- if (state.appStates.conversationState === ConversationState.Active) {
307
- chatSDK === null || chatSDK === void 0 ? void 0 : chatSDK.onNewMessage(() => {
308
- BroadcastService.postMessage({
309
- eventName: BroadcastEvent.NewMessageNotification
310
- });
311
- });
312
- } // Track the message count
313
-
314
-
329
+ // On new message
315
330
  if (state.appStates.conversationState === ConversationState.Active) {
316
331
  chatSDK === null || chatSDK === void 0 ? void 0 : chatSDK.onNewMessage(() => {
332
+ // Track the message count
317
333
  currentMessageCountRef.current++;
318
334
  dispatch({
319
335
  type: LiveChatWidgetActionType.SET_UNREAD_MESSAGE_COUNT,
320
336
  payload: currentMessageCountRef.current + 1
337
+ }); // New message notification
338
+
339
+ BroadcastService.postMessage({
340
+ eventName: BroadcastEvent.NewMessageNotification
321
341
  });
322
342
  });
323
343
  }
@@ -327,6 +347,12 @@ export const LiveChatWidgetStateful = props => {
327
347
  }, [state.appStates.conversationState, state.appStates.proactiveChatStates.proactiveChatInNewWindow]); // Reset the UnreadMessageCount when minimized is toggled and broadcast it.
328
348
 
329
349
  useEffect(() => {
350
+ if (state.appStates.isMinimized) {
351
+ ActivityStreamHandler.cork();
352
+ } else {
353
+ setTimeout(() => ActivityStreamHandler.uncork(), 500);
354
+ }
355
+
330
356
  currentMessageCountRef.current = -1;
331
357
  dispatch({
332
358
  type: LiveChatWidgetActionType.SET_UNREAD_MESSAGE_COUNT,
@@ -341,7 +367,7 @@ export const LiveChatWidgetStateful = props => {
341
367
  }, [state.appStates.isMinimized]); // Broadcast the UnreadMessageCount state on any change.
342
368
 
343
369
  useEffect(() => {
344
- if (state.appStates.isMinimized && state.appStates.unreadMessageCount > 0) {
370
+ if (state.appStates.isMinimized === true && state.appStates.unreadMessageCount > 0) {
345
371
  const customEvent = {
346
372
  elementType: ElementType.Custom,
347
373
  eventName: BroadcastEvent.UnreadMessageCount,
@@ -359,9 +385,24 @@ export const LiveChatWidgetStateful = props => {
359
385
  }, [(_props$webChatContain3 = props.webChatContainerProps) === null || _props$webChatContain3 === void 0 ? void 0 : _props$webChatContain3.webChatStyles]); // Publish chat widget state
360
386
 
361
387
  useEffect(() => {
362
- var _props$chatSDK, _props$chatSDK$omnich, _props$chatSDK2, _props$chatSDK2$omnic;
388
+ var _props$controlProps12, _props$chatSDK, _props$chatSDK$omnich, _props$chatSDK2, _props$chatSDK2$omnic, _props$controlProps13;
389
+
390
+ // Only activate these windows events when conversation state is active and chat widget is in popout mode
391
+ // Ghost chat scenarios
392
+ if (state.appStates.conversationState === ConversationState.Active && ((_props$controlProps12 = props.controlProps) === null || _props$controlProps12 === void 0 ? void 0 : _props$controlProps12.skipChatButtonRendering) === true) {
393
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
394
+ window.onbeforeunload = function () {
395
+ const prompt = Constants.BrowserUnloadConfirmationMessage;
396
+ return prompt;
397
+ }; // eslint-disable-next-line @typescript-eslint/no-explicit-any
398
+
399
+
400
+ window.onunload = function () {
401
+ initiateEndChatOnBrowserUnload();
402
+ };
403
+ }
363
404
 
364
- 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);
405
+ 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) ?? "");
365
406
  const chatWidgetStateChangeEvent = {
366
407
  eventName: widgetStateEventName,
367
408
  payload: { ...state
@@ -374,7 +415,7 @@ export const LiveChatWidgetStateful = props => {
374
415
  const setPostChatContextRelay = () => setPostChatContextAndLoadSurvey(chatSDK, dispatch); // eslint-disable-next-line @typescript-eslint/no-explicit-any
375
416
 
376
417
 
377
- const endChatRelay = (adapter, skipEndChatSDK, skipCloseChat) => endChat(props, chatSDK, setAdapter, setWebChatStyles, dispatch, adapter, skipEndChatSDK, skipCloseChat); // eslint-disable-next-line @typescript-eslint/no-explicit-any
418
+ const endChatRelay = (adapter, skipEndChatSDK, skipCloseChat, postMessageToOtherTab) => endChat(props, chatSDK, setAdapter, setWebChatStyles, dispatch, adapter, skipEndChatSDK, skipCloseChat, postMessageToOtherTab); // eslint-disable-next-line @typescript-eslint/no-explicit-any
378
419
 
379
420
 
380
421
  const prepareEndChatRelay = (adapter, state) => prepareEndChat(props, chatSDK, setAdapter, setWebChatStyles, dispatch, adapter, state);
@@ -382,7 +423,7 @@ export const LiveChatWidgetStateful = props => {
382
423
  const prepareStartChatRelay = () => prepareStartChat(props, chatSDK, state, dispatch, setAdapter); // eslint-disable-next-line @typescript-eslint/no-explicit-any
383
424
 
384
425
 
385
- const initStartChatRelay = (optionalParams, persistedState) => initStartChat(chatSDK, dispatch, setAdapter, optionalParams, persistedState);
426
+ const initStartChatRelay = (optionalParams, persistedState) => initStartChat(chatSDK, props.chatConfig, props.getAuthToken, dispatch, setAdapter, optionalParams, persistedState);
386
427
 
387
428
  const confirmationPaneProps = initConfirmationPropsComposer(props);
388
429
  return /*#__PURE__*/React.createElement(Composer, _extends({}, webChatProps, {
@@ -392,28 +433,28 @@ export const LiveChatWidgetStateful = props => {
392
433
  id: widgetElementId,
393
434
  styles: generalStyles,
394
435
  className: (_props$styleProps2 = props.styleProps) === null || _props$styleProps2 === void 0 ? void 0 : _props$styleProps2.className
395
- }, !((_props$controlProps5 = props.controlProps) !== null && _props$controlProps5 !== void 0 && _props$controlProps5.hideChatButton) && !((_props$controlProps6 = props.controlProps) !== null && _props$controlProps6 !== void 0 && _props$controlProps6.skipChatButtonRendering) && shouldShowChatButton(state) && (decodeComponentString((_props$componentOverr = props.componentOverrides) === null || _props$componentOverr === void 0 ? void 0 : _props$componentOverr.chatButton) || /*#__PURE__*/React.createElement(ChatButtonStateful, {
436
+ }, !((_props$controlProps14 = props.controlProps) !== null && _props$controlProps14 !== void 0 && _props$controlProps14.hideChatButton) && !((_props$controlProps15 = props.controlProps) !== null && _props$controlProps15 !== void 0 && _props$controlProps15.skipChatButtonRendering) && shouldShowChatButton(state) && (decodeComponentString((_props$componentOverr = props.componentOverrides) === null || _props$componentOverr === void 0 ? void 0 : _props$componentOverr.chatButton) || /*#__PURE__*/React.createElement(ChatButtonStateful, {
396
437
  buttonProps: props.chatButtonProps,
397
438
  outOfOfficeButtonProps: props.outOfOfficeChatButtonProps,
398
439
  startChat: prepareStartChatRelay
399
- })), !((_props$controlProps7 = props.controlProps) !== null && _props$controlProps7 !== void 0 && _props$controlProps7.hideProactiveChatPane) && shouldShowProactiveChatPane(state) && (decodeComponentString((_props$componentOverr2 = props.componentOverrides) === null || _props$componentOverr2 === void 0 ? void 0 : _props$componentOverr2.proactiveChatPane) || /*#__PURE__*/React.createElement(ProactiveChatPaneStateful, {
440
+ })), !((_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, {
400
441
  proactiveChatProps: props.proactiveChatPaneProps,
401
442
  startChat: prepareStartChatRelay
402
- })), !((_props$controlProps8 = props.controlProps) !== null && _props$controlProps8 !== void 0 && _props$controlProps8.hideHeader) && shouldShowHeader(state) && (decodeComponentString((_props$componentOverr3 = props.componentOverrides) === null || _props$componentOverr3 === void 0 ? void 0 : _props$componentOverr3.header) || /*#__PURE__*/React.createElement(HeaderStateful, {
443
+ })), !((_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, {
403
444
  headerProps: props.headerProps,
404
445
  outOfOfficeHeaderProps: props.outOfOfficeHeaderProps,
405
446
  endChat: endChatRelay
406
- })), !((_props$controlProps9 = props.controlProps) !== null && _props$controlProps9 !== void 0 && _props$controlProps9.hideLoadingPane) && shouldShowLoadingPane(state) && (decodeComponentString((_props$componentOverr4 = props.componentOverrides) === null || _props$componentOverr4 === void 0 ? void 0 : _props$componentOverr4.loadingPane) || /*#__PURE__*/React.createElement(LoadingPaneStateful, props.loadingPaneProps)), !((_props$controlProps10 = props.controlProps) !== null && _props$controlProps10 !== void 0 && _props$controlProps10.hideOutOfOfficeHoursPane) && shouldShowOutOfOfficeHoursPane(state) && (decodeComponentString((_props$componentOverr5 = props.componentOverrides) === null || _props$componentOverr5 === void 0 ? void 0 : _props$componentOverr5.outOfOfficeHoursPane) || /*#__PURE__*/React.createElement(OutOfOfficeHoursPaneStateful, props.outOfOfficeHoursPaneProps)), !((_props$controlProps11 = props.controlProps) !== null && _props$controlProps11 !== void 0 && _props$controlProps11.hideReconnectChatPane) && shouldShowReconnectChatPane(state) && (decodeComponentString((_props$componentOverr6 = props.componentOverrides) === null || _props$componentOverr6 === void 0 ? void 0 : _props$componentOverr6.reconnectChatPane) || /*#__PURE__*/React.createElement(ReconnectChatPaneStateful, {
447
+ })), !((_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, {
407
448
  reconnectChatProps: props.reconnectChatPaneProps,
408
449
  initStartChat: initStartChatRelay
409
- })), !((_props$controlProps12 = props.controlProps) !== null && _props$controlProps12 !== void 0 && _props$controlProps12.hidePreChatSurveyPane) && shouldShowPreChatSurveyPane(state) && (decodeComponentString((_props$componentOverr7 = props.componentOverrides) === null || _props$componentOverr7 === void 0 ? void 0 : _props$componentOverr7.preChatSurveyPane) || /*#__PURE__*/React.createElement(PreChatSurveyPaneStateful, {
450
+ })), !((_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, {
410
451
  surveyProps: props.preChatSurveyPaneProps,
411
452
  initStartChat: initStartChatRelay
412
- })), !((_props$controlProps13 = props.controlProps) !== null && _props$controlProps13 !== void 0 && _props$controlProps13.hideCallingContainer) && shouldShowCallingContainer(state) && /*#__PURE__*/React.createElement(CallingContainerStateful, _extends({
453
+ })), !((_props$controlProps22 = props.controlProps) !== null && _props$controlProps22 !== void 0 && _props$controlProps22.hideCallingContainer) && shouldShowCallingContainer(state) && /*#__PURE__*/React.createElement(CallingContainerStateful, _extends({
413
454
  voiceVideoCallingSdk: voiceVideoCallingSDK
414
- }, props.callingContainerProps)), !((_props$controlProps14 = props.controlProps) !== null && _props$controlProps14 !== void 0 && _props$controlProps14.hideWebChatContainer) && shouldShowWebChatContainer(state) && (decodeComponentString((_props$componentOverr8 = props.componentOverrides) === null || _props$componentOverr8 === void 0 ? void 0 : _props$componentOverr8.webChatContainer) || /*#__PURE__*/React.createElement(WebChatContainerStateful, props.webChatContainerProps)), !((_props$controlProps15 = props.controlProps) !== null && _props$controlProps15 !== void 0 && _props$controlProps15.hideConfirmationPane) && shouldShowConfirmationPane(state) && (decodeComponentString((_props$componentOverr9 = props.componentOverrides) === null || _props$componentOverr9 === void 0 ? void 0 : _props$componentOverr9.confirmationPane) || /*#__PURE__*/React.createElement(ConfirmationPaneStateful, _extends({}, confirmationPaneProps, {
455
+ }, 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, {
415
456
  setPostChatContext: setPostChatContextRelay,
416
457
  prepareEndChat: prepareEndChatRelay
417
- }))), !((_props$controlProps16 = props.controlProps) !== null && _props$controlProps16 !== void 0 && _props$controlProps16.hidePostChatLoadingPane) && shouldShowPostChatLoadingPane(state) && (decodeComponentString((_props$componentOverr10 = props.componentOverrides) === null || _props$componentOverr10 === void 0 ? void 0 : _props$componentOverr10.postChatLoadingPane) || /*#__PURE__*/React.createElement(PostChatLoadingPaneStateful, props.postChatLoadingPaneProps)), shouldShowPostChatSurveyPane(state) && (decodeComponentString((_props$componentOverr11 = props.componentOverrides) === null || _props$componentOverr11 === void 0 ? void 0 : _props$componentOverr11.postChatSurveyPane) || /*#__PURE__*/React.createElement(PostChatSurveyPaneStateful, _extends({}, props.postChatSurveyPaneProps, props.chatSDK))), createFooter(props, state), shouldShowEmailTranscriptPane(state) && (decodeComponentString((_props$componentOverr12 = props.componentOverrides) === null || _props$componentOverr12 === void 0 ? void 0 : _props$componentOverr12.emailTranscriptPane) || /*#__PURE__*/React.createElement(EmailTranscriptPaneStateful, props.emailTranscriptPane))));
458
+ }))), !((_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))));
418
459
  };
419
460
  export default LiveChatWidgetStateful;
@@ -1,9 +1,8 @@
1
1
  import { HtmlAttributeNames, Regex } from "../../common/Constants";
2
2
  import { LogLevel, TelemetryEvent } from "../../common/telemetry/TelemetryConstants";
3
3
  import React, { useEffect } from "react";
4
- import { extractPreChatSurveyResponseValues, findAllFocusableElement, getWidgetCacheId, parseAdaptiveCardPayload } from "../../common/utils";
4
+ import { extractPreChatSurveyResponseValues, findAllFocusableElement, getStateFromCache, isUndefinedOrEmpty, parseAdaptiveCardPayload } from "../../common/utils";
5
5
  import { ConversationState } from "../../contexts/common/ConversationState";
6
- import { DataStoreManager } from "../../common/contextDataStore/DataStoreManager";
7
6
  import { LiveChatWidgetActionType } from "../../contexts/common/LiveChatWidgetActionType";
8
7
  import { PreChatSurveyPane } from "@microsoft/omnichannel-chat-components";
9
8
  import { TelemetryHelper } from "../../common/telemetry/TelemetryHelper";
@@ -67,14 +66,12 @@ export const PreChatSurveyPaneStateful = props => {
67
66
  });
68
67
 
69
68
  try {
70
- var _state$domainStates, _state$domainStates$t, _state$domainStates$t2, _DataStoreManager$cli, _persistedState$domai;
69
+ var _state$domainStates, _state$domainStates$t, _state$domainStates$t2, _persistedState$domai, _persistedState$appSt;
71
70
 
72
- const widgetStateCacheId = getWidgetCacheId(((_state$domainStates = state.domainStates) === null || _state$domainStates === void 0 ? void 0 : (_state$domainStates$t = _state$domainStates.telemetryInternalData) === null || _state$domainStates$t === void 0 ? void 0 : _state$domainStates$t.orgId) ?? "", ((_state$domainStates$t2 = state.domainStates.telemetryInternalData) === null || _state$domainStates$t2 === void 0 ? void 0 : _state$domainStates$t2.widgetId) ?? "");
73
- const widgetStateFromCache = (_DataStoreManager$cli = DataStoreManager.clientDataStore) === null || _DataStoreManager$cli === void 0 ? void 0 : _DataStoreManager$cli.getData(widgetStateCacheId, "localStorage");
74
- const persistedState = widgetStateFromCache ? JSON.parse(widgetStateFromCache) : undefined;
75
- let optionalParams = {};
71
+ const persistedState = getStateFromCache(((_state$domainStates = state.domainStates) === null || _state$domainStates === void 0 ? void 0 : (_state$domainStates$t = _state$domainStates.telemetryInternalData) === null || _state$domainStates$t === void 0 ? void 0 : _state$domainStates$t.orgId) ?? "", ((_state$domainStates$t2 = state.domainStates.telemetryInternalData) === null || _state$domainStates$t2 === void 0 ? void 0 : _state$domainStates$t2.widgetId) ?? "", state.domainStates.widgetInstanceId ?? "");
72
+ let optionalParams = {}; //Connect to Active chats and chat is not popout
76
73
 
77
- if (persistedState !== null && persistedState !== void 0 && (_persistedState$domai = persistedState.domainStates) !== null && _persistedState$domai !== void 0 && _persistedState$domai.liveChatContext && !state.appStates.skipChatButtonRendering) {
74
+ if (persistedState && !isUndefinedOrEmpty(persistedState === null || persistedState === void 0 ? void 0 : (_persistedState$domai = persistedState.domainStates) === null || _persistedState$domai === void 0 ? void 0 : _persistedState$domai.liveChatContext) && (persistedState === null || persistedState === void 0 ? void 0 : (_persistedState$appSt = persistedState.appStates) === null || _persistedState$appSt === void 0 ? void 0 : _persistedState$appSt.conversationState) === ConversationState.Active && !state.appStates.skipChatButtonRendering) {
78
75
  var _persistedState$domai2;
79
76
 
80
77
  optionalParams = {
@@ -103,7 +103,7 @@ export const ProactiveChatPaneStateful = props => {
103
103
  });
104
104
  },
105
105
  ...(proactiveChatProps === null || proactiveChatProps === void 0 ? void 0 : proactiveChatProps.controlProps),
106
- bodyTitleText: state.appStates.proactiveChatStates.proactiveChatBodyTitle ?? (proactiveChatProps === null || proactiveChatProps === void 0 ? void 0 : (_proactiveChatProps$c = proactiveChatProps.controlProps) === null || _proactiveChatProps$c === void 0 ? void 0 : _proactiveChatProps$c.bodyTitleText)
106
+ bodyTitleText: state.appStates.proactiveChatStates.proactiveChatBodyTitle ? state.appStates.proactiveChatStates.proactiveChatBodyTitle : proactiveChatProps === null || proactiveChatProps === void 0 ? void 0 : (_proactiveChatProps$c = proactiveChatProps.controlProps) === null || _proactiveChatProps$c === void 0 ? void 0 : _proactiveChatProps$c.bodyTitleText
107
107
  };
108
108
  useEffect(() => {
109
109
  setFocusOnElement(document.getElementById(controlProps.id + "-startbutton"));
@@ -12,6 +12,7 @@ import { WebChatActionType } from "./webchatcontroller/enums/WebChatActionType";
12
12
  import { WebChatStoreLoader } from "./webchatcontroller/WebChatStoreLoader";
13
13
  import { Constants } from "../../common/Constants";
14
14
  import { BotMagicCodeStore } from "./webchatcontroller/BotMagicCodeStore";
15
+ import { defaultAdaptiveCardStyles } from "./common/defaultStyles/defaultAdaptiveCardStyles";
15
16
  const broadcastChannelMessageEvent = "message";
16
17
 
17
18
  const postActivity = activity => {
@@ -41,6 +42,8 @@ const createMagicCodeSuccessResponse = signin => {
41
42
  };
42
43
 
43
44
  export const WebChatContainerStateful = props => {
45
+ var _props$adaptiveCardSt, _props$adaptiveCardSt2;
46
+
44
47
  const {
45
48
  BasicWebChat
46
49
  } = Components;
@@ -109,6 +112,13 @@ export const WebChatContainerStateful = props => {
109
112
  magicCodeBroadcastChannel.addEventListener(broadcastChannelMessageEvent, eventListener);
110
113
  }, []);
111
114
  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("style", null, `
115
+
116
+ .webchat__bubble__content>div#ms_lcw_webchat_adaptive_card {
117
+ background: ${(props === null || props === void 0 ? void 0 : (_props$adaptiveCardSt = props.adaptiveCardStyles) === null || _props$adaptiveCardSt === void 0 ? void 0 : _props$adaptiveCardSt.background) ?? defaultAdaptiveCardStyles.background};
118
+ }
119
+
120
+ div[class="ac-textBlock"]>p{color:${(props === null || props === void 0 ? void 0 : (_props$adaptiveCardSt2 = props.adaptiveCardStyles) === null || _props$adaptiveCardSt2 === void 0 ? void 0 : _props$adaptiveCardSt2.color) ?? defaultAdaptiveCardStyles.color};}
121
+
112
122
  .ms_lcw_webchat_received_message img.webchat__markdown__external-link-icon {
113
123
  background-image : url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIzIDMgMTggMTgiICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGQ9Ik03LjI1MDEgNC41MDAxN0gxMC43NDk1QzExLjE2MzcgNC41MDAxNyAxMS40OTk1IDQuODM1OTYgMTEuNDk5NSA1LjI1MDE3QzExLjQ5OTUgNS42Mjk4NiAxMS4yMTczIDUuOTQzNjYgMTAuODUxMyA1Ljk5MzMyTDEwLjc0OTUgNi4wMDAxN0g3LjI0OTc0QzYuMDcwNzkgNS45OTk2MSA1LjEwMzQ5IDYuOTA2NTYgNS4wMDc4NiA4LjA2MTEyTDUuMDAwMjggOC4yMjAwM0w1LjAwMzEyIDE2Ljc1MDdDNS4wMDM0MyAxNy45NDE1IDUuOTI4ODUgMTguOTE2MSA3LjA5OTY2IDE4Ljk5NDlMNy4yNTM3MSAxOS4wMDAxTDE1Ljc1MTggMTguOTg4NEMxNi45NDE1IDE4Ljk4NjggMTcuOTE0NSAxOC4wNjIgMTcuOTkzNSAxNi44OTIzTDE3Ljk5ODcgMTYuNzM4NFYxMy4yMzIxQzE3Ljk5ODcgMTIuODE3OSAxOC4zMzQ1IDEyLjQ4MjEgMTguNzQ4NyAxMi40ODIxQzE5LjEyODQgMTIuNDgyMSAxOS40NDIyIDEyLjc2NDMgMTkuNDkxOCAxMy4xMzAzTDE5LjQ5ODcgMTMuMjMyMVYxNi43Mzg0QzE5LjQ5ODcgMTguNzQwNyAxNy45MjkzIDIwLjM3NjkgMTUuOTUyOCAyMC40ODI5TDE1Ljc1MzggMjAuNDg4NEw3LjI1ODI3IDIwLjUwMDFMNy4wNTQ5NSAyMC40OTQ5QzUuMTQyMzkgMjAuMzk1NCAzLjYwODk1IDE4Ljg2MjcgMy41MDgzNyAxNi45NTAyTDMuNTAzMTIgMTYuNzUxMUwzLjUwMDg5IDguMjUyN0wzLjUwNTI5IDguMDUwMkMzLjYwNTM5IDYuMTM3NDkgNS4xMzg2NyA0LjYwNDQ5IDcuMDUwOTYgNC41MDUyN0w3LjI1MDEgNC41MDAxN0gxMC43NDk1SDcuMjUwMVpNMTMuNzQ4MSAzLjAwMTQ2TDIwLjMwMTggMy4wMDE5N0wyMC40MDE0IDMuMDE1NzVMMjAuNTAyMiAzLjA0MzkzTDIwLjU1OSAzLjA2ODAzQzIwLjYxMjIgMy4wOTEyMiAyMC42NjM0IDMuMTIxNjMgMjAuNzExMSAzLjE1ODg1TDIwLjc4MDQgMy4yMjE1NkwyMC44NjQxIDMuMzIwMTRMMjAuOTE4MyAzLjQxMDI1TDIwLjk1NyAzLjUwMDU3TDIwLjk3NjIgMy41NjQ3NkwyMC45ODk4IDMuNjI4NjJMMjAuOTk5MiAzLjcyMjgyTDIwLjk5OTcgMTAuMjU1NEMyMC45OTk3IDEwLjY2OTYgMjAuNjYzOSAxMS4wMDU0IDIwLjI0OTcgMTEuMDA1NEMxOS44NyAxMS4wMDU0IDE5LjU1NjIgMTAuNzIzMiAxOS41MDY1IDEwLjM1NzFMMTkuNDk5NyAxMC4yNTU0TDE5LjQ5ODkgNS41NjE0N0wxMi4yNzk3IDEyLjc4NDdDMTIuMDEzNCAxMy4wNTEgMTEuNTk2OCAxMy4wNzUzIDExLjMwMzEgMTIuODU3NUwxMS4yMTkgMTIuNzg0OUMxMC45NTI3IDEyLjUxODcgMTAuOTI4NCAxMi4xMDIxIDExLjE0NjIgMTEuODA4NEwxMS4yMTg4IDExLjcyNDNMMTguNDM2OSA0LjUwMTQ2SDEzLjc0ODFDMTMuMzY4NCA0LjUwMTQ2IDEzLjA1NDYgNC4yMTkzMSAxMy4wMDUgMy44NTMyNEwxMi45OTgxIDMuNzUxNDZDMTIuOTk4MSAzLjM3MTc3IDEzLjI4MDMgMy4wNTc5NyAxMy42NDY0IDMuMDA4MzFMMTMuNzQ4MSAzLjAwMTQ2WiIgZmlsbD0iI0ZGRkZGRiIgLz48L3N2Zz4) !important;
114
124
  height: '.75em';
@@ -2,11 +2,13 @@ import MockAdapter from "../mockadapter";
2
2
  import { defaultWebChatStatefulContainerStyles } from "../defaultStyles/defaultWebChatStatefulContainerStyles";
3
3
  import { defaultWebChatStatefulProps } from "./defaultWebChatStatefulProps";
4
4
  import { defaultWebChatStatefulStyles } from "../defaultStyles/defaultWebChatContainerStatefulStyles";
5
+ import { defaultAdaptiveCardStyles } from "../defaultStyles/defaultAdaptiveCardStyles";
5
6
  export const defaultWebChatContainerStatefulProps = {
6
7
  webChatStyles: defaultWebChatStatefulStyles,
7
8
  webChatProps: defaultWebChatStatefulProps,
8
9
  containerStyles: defaultWebChatStatefulContainerStyles,
9
10
  disableNewLineMarkdownSupport: false,
10
11
  disableMarkdownMessageFormatting: false,
11
- directLine: new MockAdapter()
12
+ directLine: new MockAdapter(),
13
+ adaptiveCardStyles: defaultAdaptiveCardStyles
12
14
  };
@@ -0,0 +1,4 @@
1
+ export const defaultAdaptiveCardStyles = {
2
+ background: "white",
3
+ color: "black"
4
+ };
@@ -4,6 +4,8 @@ import MockAdapter from "./mockadapter";
4
4
  export class MockChatSDK {
5
5
  constructor() {
6
6
  _defineProperty(this, "sleep", ms => new Promise(r => setTimeout(r, ms)));
7
+
8
+ _defineProperty(this, "isMockModeOn", true);
7
9
  }
8
10
 
9
11
  async startChat() {
@@ -8,6 +8,7 @@ export let ConversationState;
8
8
  ConversationState[ConversationState["ProactiveChat"] = 4] = "ProactiveChat";
9
9
  ConversationState[ConversationState["Active"] = 5] = "Active";
10
10
  ConversationState[ConversationState["InActive"] = 6] = "InActive";
11
- ConversationState[ConversationState["Postchat"] = 7] = "Postchat";
12
- ConversationState[ConversationState["Closed"] = 8] = "Closed";
11
+ ConversationState[ConversationState["PostchatLoading"] = 7] = "PostchatLoading";
12
+ ConversationState[ConversationState["Postchat"] = 8] = "Postchat";
13
+ ConversationState[ConversationState["Closed"] = 9] = "Closed";
13
14
  })(ConversationState || (ConversationState = {}));