@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.
- package/lib/cjs/common/Constants.js +1 -0
- package/lib/cjs/common/storage/default/defaultCacheManager.js +2 -2
- package/lib/cjs/common/storage/default/defaultClientDataStoreProvider.js +15 -6
- package/lib/cjs/common/telemetry/TelemetryConstants.js +3 -0
- package/lib/cjs/components/livechatwidget/common/defaultProps/dummyDefaultProps.js +3 -2
- package/lib/cjs/components/livechatwidget/common/initWebChatComposer.js +13 -19
- package/lib/cjs/components/livechatwidget/common/startChat.js +21 -2
- package/lib/cjs/components/livechatwidget/livechatwidgetstateful/LiveChatWidgetStateful.js +27 -26
- package/lib/cjs/contexts/common/LiveChatWidgetContextInitialState.js +4 -2
- package/lib/cjs/plugins/newMessageEventHandler.js +1 -1
- package/lib/esm/common/Constants.js +1 -0
- package/lib/esm/common/storage/default/defaultCacheManager.js +2 -2
- package/lib/esm/common/storage/default/defaultClientDataStoreProvider.js +15 -6
- package/lib/esm/common/telemetry/TelemetryConstants.js +3 -0
- package/lib/esm/components/livechatwidget/common/defaultProps/dummyDefaultProps.js +3 -2
- package/lib/esm/components/livechatwidget/common/initWebChatComposer.js +13 -19
- package/lib/esm/components/livechatwidget/common/startChat.js +21 -2
- package/lib/esm/components/livechatwidget/livechatwidgetstateful/LiveChatWidgetStateful.js +28 -27
- package/lib/esm/contexts/common/LiveChatWidgetContextInitialState.js +4 -2
- package/lib/esm/plugins/newMessageEventHandler.js +1 -1
- package/lib/types/common/Constants.d.ts +1 -0
- package/lib/types/common/storage/default/defaultCacheManager.d.ts +1 -1
- package/lib/types/common/storage/default/defaultClientDataStoreProvider.d.ts +1 -1
- package/lib/types/common/telemetry/TelemetryConstants.d.ts +4 -1
- package/lib/types/components/livechatwidget/interfaces/ILiveChatWidgetControlProps.d.ts +1 -0
- 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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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() +
|
|
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
|
|
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
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
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$
|
|
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$
|
|
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$
|
|
149
|
-
|
|
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$
|
|
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$
|
|
169
|
-
var _props$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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
|
|
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.
|
|
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
|
-
|
|
2
|
-
|
|
1
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
2
|
+
|
|
3
3
|
import { LogLevel, TelemetryEvent } from "../../telemetry/TelemetryConstants";
|
|
4
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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() +
|
|
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
|
|
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
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
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$
|
|
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$
|
|
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$
|
|
141
|
-
|
|
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$
|
|
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$
|
|
161
|
-
var _props$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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
|
|
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.
|
|
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"
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@microsoft/omnichannel-chat-widget",
|
|
3
|
-
"version": "0.1.0-main.
|
|
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.
|
|
78
|
-
"@microsoft/omnichannel-chat-sdk": "1.2.1-main.
|
|
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",
|