@microsoft/omnichannel-chat-widget 1.4.0 → 1.4.1-main.22cb7d3
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/README.md +1 -1
- package/lib/cjs/common/utils.js +19 -2
- package/lib/cjs/components/emailtranscriptpanestateful/EmailTranscriptPaneStateful.js +4 -1
- package/lib/cjs/components/livechatwidget/common/endChat.js +18 -15
- package/lib/cjs/components/livechatwidget/common/reconnectChatHelper.js +1 -1
- package/lib/cjs/components/livechatwidget/common/renderSurveyHelpers.js +11 -9
- package/lib/cjs/components/livechatwidget/livechatwidgetstateful/LiveChatWidgetStateful.js +46 -32
- package/lib/cjs/components/webchatcontainerstateful/WebChatContainerStateful.js +22 -9
- package/lib/cjs/components/webchatcontainerstateful/common/defaultProps/defaultMiddlewareLocalizedTexts.js +3 -1
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/enums/NotificationScenarios.js +1 -0
- package/lib/esm/common/utils.js +16 -0
- package/lib/esm/components/emailtranscriptpanestateful/EmailTranscriptPaneStateful.js +5 -2
- package/lib/esm/components/livechatwidget/common/endChat.js +18 -18
- package/lib/esm/components/livechatwidget/common/reconnectChatHelper.js +1 -1
- package/lib/esm/components/livechatwidget/common/renderSurveyHelpers.js +11 -9
- package/lib/esm/components/livechatwidget/livechatwidgetstateful/LiveChatWidgetStateful.js +49 -35
- package/lib/esm/components/webchatcontainerstateful/WebChatContainerStateful.js +22 -9
- package/lib/esm/components/webchatcontainerstateful/common/defaultProps/defaultMiddlewareLocalizedTexts.js +3 -1
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/enums/NotificationScenarios.js +1 -0
- package/lib/types/common/utils.d.ts +9 -0
- package/lib/types/components/livechatwidget/common/endChat.d.ts +5 -2
- package/lib/types/components/livechatwidget/common/renderSurveyHelpers.d.ts +1 -1
- package/lib/types/components/livechatwidget/interfaces/ILiveChatWidgetControlProps.d.ts +1 -0
- package/lib/types/components/webchatcontainerstateful/webchatcontroller/enums/NotificationScenarios.d.ts +1 -0
- package/lib/types/contexts/common/ILiveChatWidgetLocalizedTexts.d.ts +9 -0
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -125,7 +125,7 @@ These are components that are included in the ```@microsoft/omnichannel-chat-com
|
|
|
125
125
|
| ProactiveChatSurveyPane | A pane that holds more information than a normal chat button and can be configured to proactively pop up | [IProactiveChatPaneProps](https://github.com/microsoft/omnichannel-chat-widget/blob/main/chat-components/src/components/proactivechatpane/interfaces/IProactiveChatPaneProps.ts) |
|
|
126
126
|
| ReconnectChatPane | The pane that shows up when the customer is re-connecting to the chat to add additional conversation | [IReconnectChatPaneProps](https://github.com/microsoft/omnichannel-chat-widget/blob/main/chat-components/src/components/reconnectchatpane/interfaces/IReconnectChatPaneProps.ts) |
|
|
127
127
|
|
|
128
|
-
> :warning: Because the components extend Microsoft's [Fluent UI](https://developer.microsoft.com/en-us/fluentui#/) components, the base interface for all the ```styleProps``` in the above table is [IStyle](https://github.com/microsoft/fluentui/blob/master/packages/merge-styles/src/IStyle.ts), which extends the [IRawStyleBase](https://
|
|
128
|
+
> :warning: Because the components extend Microsoft's [Fluent UI](https://developer.microsoft.com/en-us/fluentui#/) components, the base interface for all the ```styleProps``` in the above table is [IStyle](https://github.com/microsoft/fluentui/blob/master/packages/merge-styles/src/IStyle.ts), which extends the [IRawStyleBase](https://github.com/microsoft/fluentui/blob/master/packages/merge-styles/src/IRawStyleBase.ts#L280) interface, which is the most useful reference.
|
|
129
129
|
|
|
130
130
|
### Stateful Components
|
|
131
131
|
|
package/lib/cjs/common/utils.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.setTabIndices = exports.setFocusOnSendBox = exports.setFocusOnElement = exports.preventFocusToMoveOutOfElement = exports.parseAdaptiveCardPayload = exports.newGuid = exports.isUndefinedOrEmpty = exports.isNullOrUndefined = exports.isNullOrEmptyString = exports.getWidgetEndChatEventName = exports.getWidgetCacheIdfromProps = exports.getWidgetCacheId = exports.getTimestampHourMinute = exports.getStateFromCache = exports.getLocaleDirection = exports.getIconText = exports.getDomain = exports.getConversationDetailsCall = exports.getBroadcastChannelName = exports.findParentFocusableElementsWithoutChildContainer = exports.findAllFocusableElement = exports.extractPreChatSurveyResponseValues = exports.escapeHtml = exports.debounceLeading = exports.createTimer = exports.createFileAndDownload = exports.checkContactIdError = exports.changeLanguageCodeFormatForWebChat = exports.addDelayInMs = void 0;
|
|
6
|
+
exports.setTabIndices = exports.setFocusOnSendBox = exports.setFocusOnElement = exports.preventFocusToMoveOutOfElement = exports.parseAdaptiveCardPayload = exports.newGuid = exports.isUndefinedOrEmpty = exports.isNullOrUndefined = exports.isNullOrEmptyString = exports.getWidgetEndChatEventName = exports.getWidgetCacheIdfromProps = exports.getWidgetCacheId = exports.getTimestampHourMinute = exports.getStateFromCache = exports.getLocaleDirection = exports.getIconText = exports.getDomain = exports.getConversationDetailsCall = exports.getBroadcastChannelName = exports.formatTemplateString = exports.findParentFocusableElementsWithoutChildContainer = exports.findAllFocusableElement = exports.extractPreChatSurveyResponseValues = exports.escapeHtml = exports.debounceLeading = exports.createTimer = exports.createFileAndDownload = exports.checkContactIdError = exports.changeLanguageCodeFormatForWebChat = exports.addDelayInMs = void 0;
|
|
7
7
|
var _Constants = require("./Constants");
|
|
8
8
|
var _TelemetryConstants = require("./telemetry/TelemetryConstants");
|
|
9
9
|
var _omnichannelChatComponents = require("@microsoft/omnichannel-chat-components");
|
|
@@ -431,4 +431,21 @@ const createFileAndDownload = (fileName, blobData, mimeType) => {
|
|
|
431
431
|
aElement.click();
|
|
432
432
|
document.body.removeChild(aElement);
|
|
433
433
|
};
|
|
434
|
-
|
|
434
|
+
|
|
435
|
+
/**
|
|
436
|
+
*
|
|
437
|
+
* Replace placeholders with format {0}..{n} , in a string with values
|
|
438
|
+
*
|
|
439
|
+
* @param template String with placeholders to be replaced
|
|
440
|
+
* @param values array of values to replace the placeholders
|
|
441
|
+
* @returns formatted string with replaced values
|
|
442
|
+
*/
|
|
443
|
+
// use of any for values as array of any type is passed
|
|
444
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
445
|
+
exports.createFileAndDownload = createFileAndDownload;
|
|
446
|
+
const formatTemplateString = (templateMessage, values) => {
|
|
447
|
+
return templateMessage.replace(/{(\d+)}/g, (match, index) => {
|
|
448
|
+
return typeof values[index] !== "undefined" ? values[index] : match;
|
|
449
|
+
});
|
|
450
|
+
};
|
|
451
|
+
exports.formatTemplateString = formatTemplateString;
|
|
@@ -16,6 +16,7 @@ var _Constants = require("../../common/Constants");
|
|
|
16
16
|
var _TelemetryHelper = require("../../common/telemetry/TelemetryHelper");
|
|
17
17
|
var _useChatContextStore = _interopRequireDefault(require("../../hooks/useChatContextStore"));
|
|
18
18
|
var _useChatSDKStore = _interopRequireDefault(require("../../hooks/useChatSDKStore"));
|
|
19
|
+
var _defaultMiddlewareLocalizedTexts = require("../webchatcontainerstateful/common/defaultProps/defaultMiddlewareLocalizedTexts");
|
|
19
20
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
20
21
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
21
22
|
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; }
|
|
@@ -55,6 +56,7 @@ const EmailTranscriptPaneStateful = props => {
|
|
|
55
56
|
};
|
|
56
57
|
try {
|
|
57
58
|
await (chatSDK === null || chatSDK === void 0 ? void 0 : chatSDK.emailLiveChatTranscript(chatTranscriptBody));
|
|
59
|
+
_NotificationHandler.NotificationHandler.notifySuccess(_NotificationScenarios.NotificationScenarios.EmailAddressSaved, _defaultMiddlewareLocalizedTexts.defaultMiddlewareLocalizedTexts === null || _defaultMiddlewareLocalizedTexts.defaultMiddlewareLocalizedTexts === void 0 ? void 0 : _defaultMiddlewareLocalizedTexts.defaultMiddlewareLocalizedTexts.MIDDLEWARE_BANNER_FILE_EMAIL_ADDRESS_RECORDED_SUCCESS);
|
|
58
60
|
_TelemetryHelper.TelemetryHelper.logActionEvent(_TelemetryConstants.LogLevel.INFO, {
|
|
59
61
|
Event: _TelemetryConstants.TelemetryEvent.EmailTranscriptSent,
|
|
60
62
|
Description: "Transcript sent to email successfully."
|
|
@@ -66,7 +68,8 @@ const EmailTranscriptPaneStateful = props => {
|
|
|
66
68
|
exception: ex
|
|
67
69
|
}
|
|
68
70
|
});
|
|
69
|
-
|
|
71
|
+
const message = (0, _utils.formatTemplateString)(_defaultMiddlewareLocalizedTexts.defaultMiddlewareLocalizedTexts.MIDDLEWARE_BANNER_FILE_EMAIL_ADDRESS_RECORDED_ERROR, [email]);
|
|
72
|
+
_NotificationHandler.NotificationHandler.notifyError(_NotificationScenarios.NotificationScenarios.EmailTranscriptError, (props === null || props === void 0 ? void 0 : props.bannerMessageOnError) ?? message);
|
|
70
73
|
}
|
|
71
74
|
},
|
|
72
75
|
onCancel: () => {
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.prepareEndChat = exports.endVoiceVideoCallIfOngoing = exports.endChat = void 0;
|
|
6
|
+
exports.prepareEndChat = exports.endVoiceVideoCallIfOngoing = exports.endChatStateCleanUp = exports.endChat = exports.closeChatStateCleanUp = exports.callingStateCleanUp = void 0;
|
|
7
7
|
var _Constants = require("../../../common/Constants");
|
|
8
8
|
var _TelemetryConstants = require("../../../common/telemetry/TelemetryConstants");
|
|
9
9
|
var _authHelper = require("./authHelper");
|
|
@@ -15,10 +15,11 @@ var _LiveChatWidgetActionType = require("../../../contexts/common/LiveChatWidget
|
|
|
15
15
|
var _TelemetryHelper = require("../../../common/telemetry/TelemetryHelper");
|
|
16
16
|
var _WebChatStoreLoader = require("../../webchatcontainerstateful/webchatcontroller/WebChatStoreLoader");
|
|
17
17
|
var _defaultWebChatContainerStatefulProps = require("../../webchatcontainerstateful/common/defaultProps/defaultWebChatContainerStatefulProps");
|
|
18
|
+
var _TelemetryManager = require("../../../common/telemetry/TelemetryManager");
|
|
18
19
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
19
|
-
const prepareEndChat = async (props, chatSDK, state, dispatch, setAdapter, setWebChatStyles, adapter
|
|
20
|
+
const prepareEndChat = async (props, chatSDK, state, dispatch, setAdapter, setWebChatStyles, adapter) => {
|
|
20
21
|
try {
|
|
21
|
-
var _conversationDetails$, _state$domainStates
|
|
22
|
+
var _conversationDetails$, _state$domainStates;
|
|
22
23
|
// Use Case: If call is ongoing, end the call by simulating end call button click
|
|
23
24
|
endVoiceVideoCallIfOngoing(chatSDK, dispatch);
|
|
24
25
|
const conversationDetails = await (0, _utils.getConversationDetailsCall)(chatSDK);
|
|
@@ -28,7 +29,7 @@ const prepareEndChat = async (props, chatSDK, state, dispatch, setAdapter, setWe
|
|
|
28
29
|
var _state$appStates;
|
|
29
30
|
// If ended by customer, just close chat
|
|
30
31
|
if ((state === null || state === void 0 ? void 0 : (_state$appStates = state.appStates) === null || _state$appStates === void 0 ? void 0 : _state$appStates.conversationEndedBy) === _Constants.ConversationEndEntity.Customer) {
|
|
31
|
-
await endChat(props, chatSDK, state, dispatch, setAdapter, setWebChatStyles, adapter, false, false, true
|
|
32
|
+
await endChat(props, chatSDK, state, dispatch, setAdapter, setWebChatStyles, adapter, false, false, true);
|
|
32
33
|
}
|
|
33
34
|
// Use Case: If ended by Agent, stay chat in InActive state
|
|
34
35
|
return;
|
|
@@ -43,15 +44,13 @@ const prepareEndChat = async (props, chatSDK, state, dispatch, setAdapter, setWe
|
|
|
43
44
|
}
|
|
44
45
|
|
|
45
46
|
// Use Case: Can render post chat scenarios
|
|
46
|
-
await (0, _renderSurveyHelpers.getPostChatContext)(chatSDK, state, dispatch);
|
|
47
|
-
|
|
48
47
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
49
|
-
const postchatContext = state === null || state === void 0 ? void 0 : (_state$domainStates = state.domainStates) === null || _state$domainStates === void 0 ? void 0 : _state$domainStates.postChatContext;
|
|
48
|
+
const postchatContext = (await (0, _renderSurveyHelpers.getPostChatContext)(chatSDK, state, dispatch)) ?? (state === null || state === void 0 ? void 0 : (_state$domainStates = state.domainStates) === null || _state$domainStates === void 0 ? void 0 : _state$domainStates.postChatContext);
|
|
50
49
|
if (postchatContext === undefined) {
|
|
51
50
|
var _state$appStates2;
|
|
52
51
|
// For Customer intiated conversations, just close chat widget
|
|
53
52
|
if ((state === null || state === void 0 ? void 0 : (_state$appStates2 = state.appStates) === null || _state$appStates2 === void 0 ? void 0 : _state$appStates2.conversationEndedBy) === _Constants.ConversationEndEntity.Customer) {
|
|
54
|
-
await endChat(props, chatSDK, state, dispatch, setAdapter, setWebChatStyles, adapter, false, false, true
|
|
53
|
+
await endChat(props, chatSDK, state, dispatch, setAdapter, setWebChatStyles, adapter, false, false, true);
|
|
55
54
|
return;
|
|
56
55
|
}
|
|
57
56
|
|
|
@@ -62,10 +61,10 @@ const prepareEndChat = async (props, chatSDK, state, dispatch, setAdapter, setWe
|
|
|
62
61
|
});
|
|
63
62
|
return;
|
|
64
63
|
}
|
|
65
|
-
endChat(props, chatSDK, state, dispatch, setAdapter, setWebChatStyles, adapter, false, true, true
|
|
64
|
+
endChat(props, chatSDK, state, dispatch, setAdapter, setWebChatStyles, adapter, false, true, true);
|
|
66
65
|
|
|
67
66
|
// Initiate post chat render
|
|
68
|
-
if (
|
|
67
|
+
if (postchatContext) {
|
|
69
68
|
await (0, _renderSurveyHelpers.initiatePostChat)(props, conversationDetails, state, dispatch, postchatContext);
|
|
70
69
|
return;
|
|
71
70
|
}
|
|
@@ -80,7 +79,7 @@ const prepareEndChat = async (props, chatSDK, state, dispatch, setAdapter, setWe
|
|
|
80
79
|
|
|
81
80
|
//Close chat widget for any failure in embedded to allow to show start chat button
|
|
82
81
|
if (((_props$controlProps = props.controlProps) === null || _props$controlProps === void 0 ? void 0 : _props$controlProps.hideStartChatButton) === false) {
|
|
83
|
-
await endChat(props, chatSDK, state, dispatch, setAdapter, setWebChatStyles, adapter, false, false, true
|
|
82
|
+
await endChat(props, chatSDK, state, dispatch, setAdapter, setWebChatStyles, adapter, false, false, true);
|
|
84
83
|
}
|
|
85
84
|
} finally {
|
|
86
85
|
//Chat token clean up
|
|
@@ -90,8 +89,7 @@ const prepareEndChat = async (props, chatSDK, state, dispatch, setAdapter, setWe
|
|
|
90
89
|
|
|
91
90
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
92
91
|
exports.prepareEndChat = prepareEndChat;
|
|
93
|
-
const endChat = async
|
|
94
|
-
let uwid = arguments.length > 10 && arguments[10] !== undefined ? arguments[10] : "";
|
|
92
|
+
const endChat = async (props, chatSDK, state, dispatch, setAdapter, setWebChatStyles, adapter, skipEndChatSDK, skipCloseChat, postMessageToOtherTab) => {
|
|
95
93
|
if (!skipEndChatSDK && chatSDK.conversation) {
|
|
96
94
|
try {
|
|
97
95
|
_TelemetryHelper.TelemetryHelper.logSDKEvent(_TelemetryConstants.LogLevel.INFO, {
|
|
@@ -143,11 +141,13 @@ const endChat = async function (props, chatSDK, state, dispatch, setAdapter, set
|
|
|
143
141
|
closeChatWidget(dispatch, props, state);
|
|
144
142
|
}
|
|
145
143
|
}
|
|
146
|
-
if (postMessageToOtherTab
|
|
144
|
+
if (postMessageToOtherTab) {
|
|
147
145
|
const endChatEventName = await getEndChatEventName(chatSDK, props);
|
|
148
146
|
_omnichannelChatComponents.BroadcastService.postMessage({
|
|
149
147
|
eventName: endChatEventName,
|
|
150
|
-
payload:
|
|
148
|
+
payload: {
|
|
149
|
+
runtimeId: _TelemetryManager.TelemetryManager.InternalTelemetryData.lcwRuntimeId
|
|
150
|
+
}
|
|
151
151
|
});
|
|
152
152
|
}
|
|
153
153
|
};
|
|
@@ -174,6 +174,7 @@ const callingStateCleanUp = async dispatch => {
|
|
|
174
174
|
payload: true
|
|
175
175
|
});
|
|
176
176
|
};
|
|
177
|
+
exports.callingStateCleanUp = callingStateCleanUp;
|
|
177
178
|
const endChatStateCleanUp = async dispatch => {
|
|
178
179
|
// Need to clear these states immediately when chat ended from OC.
|
|
179
180
|
dispatch({
|
|
@@ -189,6 +190,7 @@ const endChatStateCleanUp = async dispatch => {
|
|
|
189
190
|
payload: false
|
|
190
191
|
});
|
|
191
192
|
};
|
|
193
|
+
exports.endChatStateCleanUp = endChatStateCleanUp;
|
|
192
194
|
const closeChatStateCleanUp = async dispatch => {
|
|
193
195
|
dispatch({
|
|
194
196
|
type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_CHAT_TOKEN,
|
|
@@ -226,6 +228,7 @@ const closeChatStateCleanUp = async dispatch => {
|
|
|
226
228
|
};
|
|
227
229
|
|
|
228
230
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
231
|
+
exports.closeChatStateCleanUp = closeChatStateCleanUp;
|
|
229
232
|
const endVoiceVideoCallIfOngoing = async (chatSDK, dispatch) => {
|
|
230
233
|
let callId = "";
|
|
231
234
|
try {
|
|
@@ -25,7 +25,7 @@ const handleChatReconnect = async (chatSDK, props, dispatch, setAdapter, initSta
|
|
|
25
25
|
// Get chat reconnect context
|
|
26
26
|
const reconnectChatContext = await getChatReconnectContext(chatSDK, props.chatConfig, props, isAuthenticatedChat);
|
|
27
27
|
|
|
28
|
-
//Redirect if enabled
|
|
28
|
+
// Redirect if enabled
|
|
29
29
|
if (reconnectChatContext !== null && reconnectChatContext !== void 0 && reconnectChatContext.redirectURL) {
|
|
30
30
|
var _props$reconnectChatP;
|
|
31
31
|
redirectPage(reconnectChatContext.redirectURL, (_props$reconnectChatP = props.reconnectChatPaneProps) === null || _props$reconnectChatP === void 0 ? void 0 : _props$reconnectChatP.redirectInSameWindow);
|
|
@@ -48,24 +48,25 @@ const setSurveyMode = async (props, participantType, state, dispatch) => {
|
|
|
48
48
|
return;
|
|
49
49
|
}
|
|
50
50
|
};
|
|
51
|
-
|
|
51
|
+
|
|
52
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
53
|
+
const renderSurvey = async (postChatContext, dispatch) => {
|
|
52
54
|
if (postChatSurveyMode === _PostChatSurveyMode.PostChatSurveyMode.Link) {
|
|
53
55
|
setWidgetStateToInactive(dispatch);
|
|
54
56
|
return;
|
|
55
57
|
}
|
|
56
58
|
if (postChatSurveyMode === _PostChatSurveyMode.PostChatSurveyMode.Embed) {
|
|
57
|
-
await embedModePostChatWorkflow(
|
|
59
|
+
await embedModePostChatWorkflow(postChatContext, dispatch);
|
|
58
60
|
}
|
|
59
61
|
};
|
|
60
62
|
|
|
61
63
|
// Function for embed mode postchat workflow which is essentially same for both customer and agent
|
|
62
64
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
63
|
-
const embedModePostChatWorkflow = async (
|
|
64
|
-
var _state$domainStates2;
|
|
65
|
+
const embedModePostChatWorkflow = async (postChatContext, dispatch) => {
|
|
65
66
|
_TelemetryHelper.TelemetryHelper.logActionEvent(_TelemetryConstants.LogLevel.INFO, {
|
|
66
67
|
Event: _TelemetryConstants.TelemetryEvent.EmbedModePostChatWorkflowStarted
|
|
67
68
|
});
|
|
68
|
-
if (
|
|
69
|
+
if (postChatContext) {
|
|
69
70
|
dispatch({
|
|
70
71
|
type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_CONVERSATION_STATE,
|
|
71
72
|
payload: _ConversationState.ConversationState.PostchatLoading
|
|
@@ -76,7 +77,7 @@ const embedModePostChatWorkflow = async (state, dispatch) => {
|
|
|
76
77
|
payload: _ConversationState.ConversationState.Postchat
|
|
77
78
|
});
|
|
78
79
|
} else {
|
|
79
|
-
const error = `Conversation was Ended but App State was not set correctly: postChatContext = ${
|
|
80
|
+
const error = `Conversation was Ended but App State was not set correctly: postChatContext = ${postChatContext}`;
|
|
80
81
|
_TelemetryHelper.TelemetryHelper.logActionEvent(_TelemetryConstants.LogLevel.ERROR, {
|
|
81
82
|
Event: _TelemetryConstants.TelemetryEvent.AppStatesException,
|
|
82
83
|
ExceptionDetails: {
|
|
@@ -92,7 +93,7 @@ const initiatePostChat = async (props, conversationDetailsParam, state, dispatch
|
|
|
92
93
|
conversationDetails = conversationDetailsParam;
|
|
93
94
|
const participantType = ((_conversationDetails = conversationDetails) === null || _conversationDetails === void 0 ? void 0 : _conversationDetails.participantType) ?? postchatContext.participantType;
|
|
94
95
|
await setSurveyMode(props, participantType, state, dispatch);
|
|
95
|
-
await renderSurvey(
|
|
96
|
+
await renderSurvey(postchatContext, dispatch);
|
|
96
97
|
};
|
|
97
98
|
|
|
98
99
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
@@ -107,8 +108,8 @@ const isPostChatEnabled = (props, state) => {
|
|
|
107
108
|
exports.checkPostChatEnabled = isPostChatEnabled;
|
|
108
109
|
const getPostChatContext = async (chatSDK, state, dispatch) => {
|
|
109
110
|
try {
|
|
110
|
-
var _state$
|
|
111
|
-
if ((state === null || state === void 0 ? void 0 : (_state$
|
|
111
|
+
var _state$domainStates2;
|
|
112
|
+
if ((state === null || state === void 0 ? void 0 : (_state$domainStates2 = state.domainStates) === null || _state$domainStates2 === void 0 ? void 0 : _state$domainStates2.postChatContext) === undefined) {
|
|
112
113
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
113
114
|
const context = await chatSDK.getPostChatSurveyContext();
|
|
114
115
|
_TelemetryHelper.TelemetryHelper.logSDKEvent(_TelemetryConstants.LogLevel.INFO, {
|
|
@@ -119,6 +120,7 @@ const getPostChatContext = async (chatSDK, state, dispatch) => {
|
|
|
119
120
|
type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_POST_CHAT_CONTEXT,
|
|
120
121
|
payload: context
|
|
121
122
|
});
|
|
123
|
+
return context;
|
|
122
124
|
}
|
|
123
125
|
} catch (error) {
|
|
124
126
|
_TelemetryHelper.TelemetryHelper.logSDKEvent(_TelemetryConstants.LogLevel.INFO, {
|
|
@@ -55,12 +55,13 @@ var _useChatAdapterStore = _interopRequireDefault(require("../../../hooks/useCha
|
|
|
55
55
|
var _useChatContextStore = _interopRequireDefault(require("../../../hooks/useChatContextStore"));
|
|
56
56
|
var _useChatSDKStore = _interopRequireDefault(require("../../../hooks/useChatSDKStore"));
|
|
57
57
|
var _defaultAdaptiveCardStyles = require("../../webchatcontainerstateful/common/defaultStyles/defaultAdaptiveCardStyles");
|
|
58
|
+
var _omnichannelChatSdk = require("@microsoft/omnichannel-chat-sdk");
|
|
58
59
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
59
60
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
60
61
|
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; }
|
|
61
62
|
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); }
|
|
62
63
|
const LiveChatWidgetStateful = props => {
|
|
63
|
-
var _props$webChatContain, _props$styleProps,
|
|
64
|
+
var _props$webChatContain, _props$styleProps, _props$controlProps, _props$controlProps3, _state$appStates7, _props$webChatContain5, _state$appStates14, _props$webChatContain6, _props$controlProps12, _props$draggableChatW, _props$draggableChatW2, _props$draggableChatW3, _props$draggableChatW4, _props$draggableChatW5, _props$webChatContain7, _props$webChatContain8, _props$webChatContain9, _props$webChatContain10, _livechatProps$webCha, _livechatProps$styleP, _livechatProps$contro, _livechatProps$contro2, _livechatProps$compon, _livechatProps$contro3, _livechatProps$compon2, _livechatProps$contro4, _livechatProps$compon3, _livechatProps$contro5, _livechatProps$compon4, _livechatProps$contro6, _livechatProps$compon5, _livechatProps$contro7, _livechatProps$compon6, _livechatProps$contro8, _livechatProps$compon7, _livechatProps$contro9, _livechatProps$contro10, _livechatProps$compon8, _livechatProps$contro11, _livechatProps$compon9, _livechatProps$contro12, _livechatProps$compon10, _livechatProps$compon11, _livechatProps$compon12;
|
|
64
65
|
const [state, dispatch] = (0, _useChatContextStore.default)();
|
|
65
66
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
66
67
|
const [adapter, setAdapter] = (0, _useChatAdapterStore.default)();
|
|
@@ -84,17 +85,20 @@ const LiveChatWidgetStateful = props => {
|
|
|
84
85
|
|
|
85
86
|
//Scrollbar styles
|
|
86
87
|
const scrollbarProps = Object.assign({}, _defaultScrollBarProps.defaultScrollBarProps, props === null || props === void 0 ? void 0 : props.scrollBarProps);
|
|
87
|
-
|
|
88
|
-
|
|
88
|
+
|
|
89
|
+
// In case the broadcast channel is already initialized elsewhere; One tab can only hold 1 instance
|
|
90
|
+
if ((props === null || props === void 0 ? void 0 : (_props$controlProps = props.controlProps) === null || _props$controlProps === void 0 ? void 0 : _props$controlProps.skipBroadcastChannelInit) !== true) {
|
|
91
|
+
var _chatSDK$omnichannelC, _props$controlProps2;
|
|
92
|
+
const broadcastServiceChannelName = (0, _utils.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) ?? "");
|
|
93
|
+
(0, _omnichannelChatComponents.BroadcastServiceInitialize)(broadcastServiceChannelName);
|
|
94
|
+
}
|
|
89
95
|
_TelemetryManager.TelemetryTimers.LcwLoadToChatButtonTimer = (0, _utils.createTimer)();
|
|
90
|
-
const widgetElementId = ((_props$
|
|
96
|
+
const widgetElementId = ((_props$controlProps3 = props.controlProps) === null || _props$controlProps3 === void 0 ? void 0 : _props$controlProps3.id) || "oc-lcw";
|
|
91
97
|
const currentMessageCountRef = (0, _react2.useRef)(0);
|
|
92
98
|
let widgetStateEventId = "";
|
|
93
99
|
const lastLWICheckTimeRef = (0, _react2.useRef)(0);
|
|
94
100
|
let optionalParams;
|
|
95
101
|
let activeCachedChatExist = false;
|
|
96
|
-
const uwid = (0, _react2.useRef)(""); // its an uniqueid per chatr instance
|
|
97
|
-
|
|
98
102
|
const setOptionalParams = () => {
|
|
99
103
|
var _state$appStates, _state$domainStates, _state$appStates3;
|
|
100
104
|
if (!(0, _utils.isUndefinedOrEmpty)((_state$appStates = state.appStates) === null || _state$appStates === void 0 ? void 0 : _state$appStates.reconnectId)) {
|
|
@@ -179,8 +183,8 @@ const LiveChatWidgetStateful = props => {
|
|
|
179
183
|
// Add default localStorage support for widget
|
|
180
184
|
const widgetCacheId = (0, _utils.getWidgetCacheIdfromProps)(props);
|
|
181
185
|
if (props.contextDataStore === undefined) {
|
|
182
|
-
var _props$
|
|
183
|
-
const cacheTtlInMins = (props === null || props === void 0 ? void 0 : (_props$
|
|
186
|
+
var _props$controlProps4;
|
|
187
|
+
const cacheTtlInMins = (props === null || props === void 0 ? void 0 : (_props$controlProps4 = props.controlProps) === null || _props$controlProps4 === void 0 ? void 0 : _props$controlProps4.cacheTtlInMins) ?? _Constants.Constants.CacheTtlInMinutes;
|
|
184
188
|
const storageType = (props === null || props === void 0 ? void 0 : props.useSessionStorage) === true ? _Constants.StorageType.sessionStorage : _Constants.StorageType.localStorage;
|
|
185
189
|
_DataStoreManager.DataStoreManager.clientDataStore = (0, _defaultClientDataStoreProvider.defaultClientDataStoreProvider)(cacheTtlInMins, storageType);
|
|
186
190
|
(0, _defaultCacheManager.registerBroadcastServiceForStorage)(widgetCacheId, cacheTtlInMins, storageType);
|
|
@@ -189,30 +193,29 @@ const LiveChatWidgetStateful = props => {
|
|
|
189
193
|
}
|
|
190
194
|
};
|
|
191
195
|
(0, _react2.useEffect)(() => {
|
|
192
|
-
var _props$
|
|
196
|
+
var _props$controlProps5, _props$controlProps6, _props$controlProps7, _props$chatConfig, _props$chatConfig$Liv, _props$controlProps9, _props$chatConfig2, _props$chatConfig2$Ch, _state$appStates5;
|
|
193
197
|
state.domainStates.confirmationPaneConfirmedOptionClicked = false;
|
|
194
198
|
state.domainStates.confirmationState = _Constants.ConfirmationState.NotSet;
|
|
195
199
|
setupClientDataStore();
|
|
196
200
|
(0, _registerTelemetryLoggers.registerTelemetryLoggers)(props, dispatch);
|
|
197
201
|
(0, _createInternetConnectionChangeHandler.createInternetConnectionChangeHandler)();
|
|
198
|
-
uwid.current = (0, _utils.newGuid)();
|
|
199
202
|
dispatch({
|
|
200
203
|
type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_WIDGET_ELEMENT_ID,
|
|
201
204
|
payload: widgetElementId
|
|
202
205
|
});
|
|
203
206
|
dispatch({
|
|
204
207
|
type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_START_CHAT_BUTTON_DISPLAY,
|
|
205
|
-
payload: ((_props$
|
|
208
|
+
payload: ((_props$controlProps5 = props.controlProps) === null || _props$controlProps5 === void 0 ? void 0 : _props$controlProps5.hideStartChatButton) || false
|
|
206
209
|
});
|
|
207
210
|
dispatch({
|
|
208
211
|
type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_E2VV_ENABLED,
|
|
209
212
|
payload: false
|
|
210
213
|
});
|
|
211
|
-
if ((_props$
|
|
212
|
-
var _props$
|
|
214
|
+
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)) {
|
|
215
|
+
var _props$controlProps8;
|
|
213
216
|
dispatch({
|
|
214
217
|
type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_WIDGET_INSTANCE_ID,
|
|
215
|
-
payload: (_props$
|
|
218
|
+
payload: (_props$controlProps8 = props.controlProps) === null || _props$controlProps8 === void 0 ? void 0 : _props$controlProps8.widgetInstanceId
|
|
216
219
|
});
|
|
217
220
|
}
|
|
218
221
|
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) {
|
|
@@ -231,7 +234,7 @@ const LiveChatWidgetStateful = props => {
|
|
|
231
234
|
}
|
|
232
235
|
|
|
233
236
|
// Initialize global dir
|
|
234
|
-
const globalDir = ((_props$
|
|
237
|
+
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);
|
|
235
238
|
dispatch({
|
|
236
239
|
type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_GLOBAL_DIR,
|
|
237
240
|
payload: globalDir
|
|
@@ -267,7 +270,7 @@ const LiveChatWidgetStateful = props => {
|
|
|
267
270
|
|
|
268
271
|
// useEffect for custom context
|
|
269
272
|
(0, _react2.useEffect)(() => {
|
|
270
|
-
var _chatSDK$omnichannelC2, _chatSDK$omnichannelC3, _props$
|
|
273
|
+
var _chatSDK$omnichannelC2, _chatSDK$omnichannelC3, _props$controlProps11;
|
|
271
274
|
// Add the custom context on receiving the SetCustomContext event
|
|
272
275
|
_omnichannelChatComponents.BroadcastService.getMessageByEventName(_TelemetryConstants.BroadcastEvent.SetCustomContext).subscribe(msg => {
|
|
273
276
|
_TelemetryHelper.TelemetryHelper.logActionEvent(_TelemetryConstants.LogLevel.INFO, {
|
|
@@ -300,8 +303,8 @@ const LiveChatWidgetStateful = props => {
|
|
|
300
303
|
_omnichannelChatComponents.BroadcastService.getMessageByEventName(_TelemetryConstants.BroadcastEvent.HideChatVisibilityChangeEvent).subscribe(async event => {
|
|
301
304
|
var _event$payload;
|
|
302
305
|
if ((event === null || event === void 0 ? void 0 : (_event$payload = event.payload) === null || _event$payload === void 0 ? void 0 : _event$payload.isChatHidden) !== undefined) {
|
|
303
|
-
var _props$
|
|
304
|
-
if ((_props$
|
|
306
|
+
var _props$controlProps10;
|
|
307
|
+
if ((_props$controlProps10 = props.controlProps) !== null && _props$controlProps10 !== void 0 && _props$controlProps10.hideStartChatButton) {
|
|
305
308
|
var _event$payload2;
|
|
306
309
|
dispatch({
|
|
307
310
|
type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_MINIMIZED,
|
|
@@ -328,23 +331,27 @@ const LiveChatWidgetStateful = props => {
|
|
|
328
331
|
|
|
329
332
|
// Start chat from SDK Event
|
|
330
333
|
_omnichannelChatComponents.BroadcastService.getMessageByEventName(_TelemetryConstants.BroadcastEvent.StartChat).subscribe(msg => {
|
|
331
|
-
var _msg$payload4;
|
|
334
|
+
var _msg$payload4, _msg$payload5, _msg$payload6;
|
|
335
|
+
// If the startChat event is not initiated by the same tab. Ignore the call
|
|
336
|
+
if (!(0, _utils.isNullOrUndefined)(msg === null || msg === void 0 ? void 0 : (_msg$payload4 = msg.payload) === null || _msg$payload4 === void 0 ? void 0 : _msg$payload4.runtimeId) && (msg === null || msg === void 0 ? void 0 : (_msg$payload5 = msg.payload) === null || _msg$payload5 === void 0 ? void 0 : _msg$payload5.runtimeId) !== _TelemetryManager.TelemetryManager.InternalTelemetryData.lcwRuntimeId) {
|
|
337
|
+
return;
|
|
338
|
+
}
|
|
332
339
|
let stateWithUpdatedContext = state;
|
|
333
|
-
if (msg !== null && msg !== void 0 && (_msg$
|
|
334
|
-
var _msg$
|
|
340
|
+
if (msg !== null && msg !== void 0 && (_msg$payload6 = msg.payload) !== null && _msg$payload6 !== void 0 && _msg$payload6.customContext) {
|
|
341
|
+
var _msg$payload7, _msg$payload8;
|
|
335
342
|
_TelemetryHelper.TelemetryHelper.logActionEvent(_TelemetryConstants.LogLevel.INFO, {
|
|
336
343
|
Event: _TelemetryConstants.TelemetryEvent.CustomContextReceived,
|
|
337
344
|
Description: "CustomContext received through startChat event."
|
|
338
345
|
});
|
|
339
346
|
dispatch({
|
|
340
347
|
type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_CUSTOM_CONTEXT,
|
|
341
|
-
payload: msg === null || msg === void 0 ? void 0 : (_msg$
|
|
348
|
+
payload: msg === null || msg === void 0 ? void 0 : (_msg$payload7 = msg.payload) === null || _msg$payload7 === void 0 ? void 0 : _msg$payload7.customContext
|
|
342
349
|
});
|
|
343
350
|
stateWithUpdatedContext = {
|
|
344
351
|
...state,
|
|
345
352
|
domainStates: {
|
|
346
353
|
...state.domainStates,
|
|
347
|
-
customContext: msg === null || msg === void 0 ? void 0 : (_msg$
|
|
354
|
+
customContext: msg === null || msg === void 0 ? void 0 : (_msg$payload8 = msg.payload) === null || _msg$payload8 === void 0 ? void 0 : _msg$payload8.customContext
|
|
348
355
|
}
|
|
349
356
|
};
|
|
350
357
|
}
|
|
@@ -420,11 +427,18 @@ const LiveChatWidgetStateful = props => {
|
|
|
420
427
|
});
|
|
421
428
|
|
|
422
429
|
// Listen to end chat event from other tabs
|
|
423
|
-
const endChatEventName = (0, _utils.getWidgetEndChatEventName)(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$
|
|
430
|
+
const endChatEventName = (0, _utils.getWidgetEndChatEventName)(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$controlProps11 = props.controlProps) === null || _props$controlProps11 === void 0 ? void 0 : _props$controlProps11.widgetInstanceId) ?? "");
|
|
424
431
|
_omnichannelChatComponents.BroadcastService.getMessageByEventName(endChatEventName).subscribe(msg => {
|
|
425
|
-
|
|
426
|
-
if (msg.payload !==
|
|
432
|
+
var _msg$payload9;
|
|
433
|
+
if ((msg === null || msg === void 0 ? void 0 : (_msg$payload9 = msg.payload) === null || _msg$payload9 === void 0 ? void 0 : _msg$payload9.runtimeId) !== _TelemetryManager.TelemetryManager.InternalTelemetryData.lcwRuntimeId) {
|
|
427
434
|
(0, _endChat.endChat)(props, chatSDK, state, dispatch, setAdapter, setWebChatStyles, adapter, true, false, false);
|
|
435
|
+
(0, _endChat.endChatStateCleanUp)(dispatch);
|
|
436
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
437
|
+
chatSDK.requestId = (0, _omnichannelChatSdk.uuidv4)();
|
|
438
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
439
|
+
chatSDK.chatToken = {};
|
|
440
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
441
|
+
chatSDK.reconnectId = null;
|
|
428
442
|
return;
|
|
429
443
|
}
|
|
430
444
|
});
|
|
@@ -552,13 +566,13 @@ const LiveChatWidgetStateful = props => {
|
|
|
552
566
|
|
|
553
567
|
// If start chat failed, and C2 is trying to close chat widget
|
|
554
568
|
if (state !== null && state !== void 0 && (_state$appStates9 = state.appStates) !== null && _state$appStates9 !== void 0 && _state$appStates9.startChatFailed || (state === null || state === void 0 ? void 0 : (_state$appStates10 = state.appStates) === null || _state$appStates10 === void 0 ? void 0 : _state$appStates10.conversationState) === _ConversationState.ConversationState.Postchat) {
|
|
555
|
-
(0, _endChat.endChat)(props, chatSDK, state, dispatch, setAdapter, setWebChatStyles, adapter, true, false, true
|
|
569
|
+
(0, _endChat.endChat)(props, chatSDK, state, dispatch, setAdapter, setWebChatStyles, adapter, true, false, true);
|
|
556
570
|
return;
|
|
557
571
|
}
|
|
558
572
|
|
|
559
573
|
// Scenario -> Chat was InActive and closing the chat (Refresh scenario on post chat)
|
|
560
574
|
if ((state === null || state === void 0 ? void 0 : (_state$appStates11 = state.appStates) === null || _state$appStates11 === void 0 ? void 0 : _state$appStates11.conversationState) === _ConversationState.ConversationState.InActive) {
|
|
561
|
-
(0, _endChat.endChat)(props, chatSDK, state, dispatch, setAdapter, setWebChatStyles, adapter, false, false, true
|
|
575
|
+
(0, _endChat.endChat)(props, chatSDK, state, dispatch, setAdapter, setWebChatStyles, adapter, false, false, true);
|
|
562
576
|
return;
|
|
563
577
|
}
|
|
564
578
|
if ((state === null || state === void 0 ? void 0 : (_state$appStates12 = state.appStates) === null || _state$appStates12 === void 0 ? void 0 : _state$appStates12.conversationEndedBy) === _Constants.ConversationEndEntity.Agent || (state === null || state === void 0 ? void 0 : (_state$appStates13 = state.appStates) === null || _state$appStates13 === void 0 ? void 0 : _state$appStates13.conversationEndedBy) === _Constants.ConversationEndEntity.Bot) {
|
|
@@ -569,7 +583,7 @@ const LiveChatWidgetStateful = props => {
|
|
|
569
583
|
}
|
|
570
584
|
|
|
571
585
|
// All other cases
|
|
572
|
-
(0, _endChat.prepareEndChat)(props, chatSDK, state, dispatch, setAdapter, setWebChatStyles, adapter
|
|
586
|
+
(0, _endChat.prepareEndChat)(props, chatSDK, state, dispatch, setAdapter, setWebChatStyles, adapter);
|
|
573
587
|
}, [state === null || state === void 0 ? void 0 : (_state$appStates14 = state.appStates) === null || _state$appStates14 === void 0 ? void 0 : _state$appStates14.conversationEndedBy]);
|
|
574
588
|
|
|
575
589
|
// Publish chat widget state
|
|
@@ -627,13 +641,13 @@ const LiveChatWidgetStateful = props => {
|
|
|
627
641
|
};
|
|
628
642
|
const setPostChatContextRelay = () => (0, _setPostChatContextAndLoadSurvey.setPostChatContextAndLoadSurvey)(chatSDK, dispatch);
|
|
629
643
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
630
|
-
const endChatRelay = (adapter, skipEndChatSDK, skipCloseChat, postMessageToOtherTab) => (0, _endChat.endChat)(props, chatSDK, state, dispatch, setAdapter, setWebChatStyles, adapter, skipEndChatSDK, skipCloseChat, postMessageToOtherTab
|
|
644
|
+
const endChatRelay = (adapter, skipEndChatSDK, skipCloseChat, postMessageToOtherTab) => (0, _endChat.endChat)(props, chatSDK, state, dispatch, setAdapter, setWebChatStyles, adapter, skipEndChatSDK, skipCloseChat, postMessageToOtherTab);
|
|
631
645
|
const prepareStartChatRelay = () => (0, _startChat.prepareStartChat)(props, chatSDK, state, dispatch, setAdapter);
|
|
632
646
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
633
647
|
const initStartChatRelay = (optionalParams, persistedState) => (0, _startChat.initStartChat)(chatSDK, dispatch, setAdapter, state, props, optionalParams, persistedState);
|
|
634
648
|
const confirmationPaneProps = (0, _initConfirmationPropsComposer.initConfirmationPropsComposer)(props);
|
|
635
649
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
636
|
-
const prepareEndChatRelay = () => (0, _endChat.prepareEndChat)(props, chatSDK, state, dispatch, setAdapter, setWebChatStyles, adapter
|
|
650
|
+
const prepareEndChatRelay = () => (0, _endChat.prepareEndChat)(props, chatSDK, state, dispatch, setAdapter, setWebChatStyles, adapter);
|
|
637
651
|
const webChatProps = (0, _initWebChatComposer.initWebChatComposer)(props, state, dispatch, chatSDK, endChatRelay);
|
|
638
652
|
const downloadTranscriptProps = (0, _createDownloadTranscriptProps.default)(props.downloadTranscriptProps, {
|
|
639
653
|
...(_defaultWebChatContainerStatefulProps.defaultWebChatContainerStatefulProps === null || _defaultWebChatContainerStatefulProps.defaultWebChatContainerStatefulProps === void 0 ? void 0 : _defaultWebChatContainerStatefulProps.defaultWebChatContainerStatefulProps.webChatStyles),
|
|
@@ -645,7 +659,7 @@ const LiveChatWidgetStateful = props => {
|
|
|
645
659
|
};
|
|
646
660
|
const chatWidgetDraggableConfig = {
|
|
647
661
|
elementId: widgetElementId,
|
|
648
|
-
channel: ((_props$
|
|
662
|
+
channel: ((_props$controlProps12 = props.controlProps) === null || _props$controlProps12 === void 0 ? void 0 : _props$controlProps12.widgetInstanceId) ?? "lcw",
|
|
649
663
|
disabled: ((_props$draggableChatW = props.draggableChatWidgetProps) === null || _props$draggableChatW === void 0 ? void 0 : _props$draggableChatW.disabled) === true ?? false // Draggable by default, unless explicitly disabled
|
|
650
664
|
};
|
|
651
665
|
|
|
@@ -55,13 +55,11 @@ const createMagicCodeSuccessResponse = signin => {
|
|
|
55
55
|
};
|
|
56
56
|
};
|
|
57
57
|
const WebChatContainerStateful = props => {
|
|
58
|
-
var _webChatContainerProp, _webChatContainerProp2, _webChatContainerProp3, _webChatContainerProp4, _webChatContainerProp5, _webChatContainerProp6, _props$
|
|
58
|
+
var _webChatContainerProp, _webChatContainerProp2, _webChatContainerProp3, _webChatContainerProp4, _webChatContainerProp5, _webChatContainerProp6, _props$webChatContain5, _props$webChatContain6, _defaultWebChatContai, _props$webChatContain7, _props$webChatContain8, _defaultWebChatContai2, _webChatContainerProp7, _webChatContainerProp8, _webChatContainerProp9, _webChatContainerProp10, _webChatContainerProp11, _webChatContainerProp12, _webChatContainerProp13, _webChatContainerProp14;
|
|
59
59
|
const {
|
|
60
60
|
BasicWebChat
|
|
61
61
|
} = _botframeworkWebchat.Components;
|
|
62
62
|
const [state, dispatch] = (0, _.useChatContextStore)();
|
|
63
|
-
const magicCodeBroadcastChannel = new window.BroadcastChannel(_Constants.Constants.magicCodeBroadcastChannel); // eslint-disable-line @typescript-eslint/no-explicit-any
|
|
64
|
-
const magicCodeResponseBroadcastChannel = new window.BroadcastChannel(_Constants.Constants.magicCodeResponseBroadcastChannel); // eslint-disable-line @typescript-eslint/no-explicit-any
|
|
65
63
|
const {
|
|
66
64
|
webChatContainerProps,
|
|
67
65
|
contextDataStore
|
|
@@ -69,7 +67,7 @@ const WebChatContainerStateful = props => {
|
|
|
69
67
|
const containerStyles = {
|
|
70
68
|
root: Object.assign({}, _defaultWebChatContainerStatefulProps.defaultWebChatContainerStatefulProps.containerStyles, webChatContainerProps === null || webChatContainerProps === void 0 ? void 0 : webChatContainerProps.containerStyles, {
|
|
71
69
|
display: state.appStates.isMinimized ? "none" : ""
|
|
72
|
-
}) // Use this instead of removing WebChat from the picture so that the activity observer inside the adapter is not invoked
|
|
70
|
+
}) // Use this instead of removing WebChat from the picture so that the activity observer inside the adapter is not invoked
|
|
73
71
|
};
|
|
74
72
|
|
|
75
73
|
const localizedTexts = {
|
|
@@ -103,6 +101,21 @@ const WebChatContainerStateful = props => {
|
|
|
103
101
|
}
|
|
104
102
|
}, []);
|
|
105
103
|
(0, _react2.useEffect)(() => {
|
|
104
|
+
var _props$webChatContain3, _props$webChatContain4;
|
|
105
|
+
if (!((_props$webChatContain3 = props.webChatContainerProps) !== null && _props$webChatContain3 !== void 0 && (_props$webChatContain4 = _props$webChatContain3.botMagicCode) !== null && _props$webChatContain4 !== void 0 && _props$webChatContain4.disabled)) {
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
if (!window.BroadcastChannel) {
|
|
109
|
+
// eslint-disable-line @typescript-eslint/no-explicit-any
|
|
110
|
+
_TelemetryHelper.TelemetryHelper.logActionEvent(_TelemetryConstants.LogLevel.ERROR, {
|
|
111
|
+
Event: _TelemetryConstants.TelemetryEvent.SuppressBotMagicCodeFailed,
|
|
112
|
+
Description: "BroadcastChannel not supported by default on current browser"
|
|
113
|
+
});
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
const magicCodeBroadcastChannel = new window.BroadcastChannel(_Constants.Constants.magicCodeBroadcastChannel); // eslint-disable-line @typescript-eslint/no-explicit-any
|
|
117
|
+
const magicCodeResponseBroadcastChannel = new window.BroadcastChannel(_Constants.Constants.magicCodeResponseBroadcastChannel); // eslint-disable-line @typescript-eslint/no-explicit-any
|
|
118
|
+
|
|
106
119
|
const eventListener = event => {
|
|
107
120
|
// eslint-disable-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-empty-function
|
|
108
121
|
const {
|
|
@@ -156,8 +169,8 @@ const WebChatContainerStateful = props => {
|
|
|
156
169
|
div[class="ac-input-container"] * {white-space:${(webChatContainerProps === null || webChatContainerProps === void 0 ? void 0 : (_webChatContainerProp6 = webChatContainerProps.adaptiveCardStyles) === null || _webChatContainerProp6 === void 0 ? void 0 : _webChatContainerProp6.textWhiteSpace) ?? _defaultAdaptiveCardStyles.defaultAdaptiveCardStyles.textWhiteSpace}}
|
|
157
170
|
|
|
158
171
|
.ms_lcw_webchat_received_message>div.webchat__stacked-layout>div.webchat__stacked-layout__main>div.webchat__stacked-layout__content>div.webchat__stacked-layout__message-row>[class^=webchat]:not(.webchat__bubble--from-user)>.webchat__bubble__content {
|
|
159
|
-
background-color: ${((_props$
|
|
160
|
-
color:${((_props$
|
|
172
|
+
background-color: ${((_props$webChatContain5 = props.webChatContainerProps) === null || _props$webChatContain5 === void 0 ? void 0 : (_props$webChatContain6 = _props$webChatContain5.webChatStyles) === null || _props$webChatContain6 === void 0 ? void 0 : _props$webChatContain6.bubbleBackground) ?? ((_defaultWebChatContai = _defaultWebChatContainerStatefulProps.defaultWebChatContainerStatefulProps.webChatStyles) === null || _defaultWebChatContai === void 0 ? void 0 : _defaultWebChatContai.bubbleBackground)};
|
|
173
|
+
color:${((_props$webChatContain7 = props.webChatContainerProps) === null || _props$webChatContain7 === void 0 ? void 0 : (_props$webChatContain8 = _props$webChatContain7.webChatStyles) === null || _props$webChatContain8 === void 0 ? void 0 : _props$webChatContain8.bubbleTextColor) ?? ((_defaultWebChatContai2 = _defaultWebChatContainerStatefulProps.defaultWebChatContainerStatefulProps.webChatStyles) === null || _defaultWebChatContai2 === void 0 ? void 0 : _defaultWebChatContai2.bubbleTextColor)};
|
|
161
174
|
}
|
|
162
175
|
|
|
163
176
|
div[class="ac-textBlock"] a:link,
|
|
@@ -165,11 +178,11 @@ const WebChatContainerStateful = props => {
|
|
|
165
178
|
div[class="ac-textBlock"] a:hover,
|
|
166
179
|
div[class="ac-textBlock"] a:active {
|
|
167
180
|
color: ${(webChatContainerProps === null || webChatContainerProps === void 0 ? void 0 : (_webChatContainerProp7 = webChatContainerProps.adaptiveCardStyles) === null || _webChatContainerProp7 === void 0 ? void 0 : _webChatContainerProp7.anchorColor) ?? _defaultAdaptiveCardStyles.defaultAdaptiveCardStyles.anchorColor};
|
|
168
|
-
}
|
|
181
|
+
}
|
|
169
182
|
|
|
170
183
|
.webchat__stacked-layout__content .ac-actionSet > .ac-pushButton > div {white-space: ${(webChatContainerProps === null || webChatContainerProps === void 0 ? void 0 : (_webChatContainerProp8 = webChatContainerProps.adaptiveCardStyles) === null || _webChatContainerProp8 === void 0 ? void 0 : _webChatContainerProp8.buttonWhiteSpace) ?? _defaultAdaptiveCardStyles.defaultAdaptiveCardStyles.buttonWhiteSpace} !important;}
|
|
171
184
|
|
|
172
|
-
.ms_lcw_webchat_received_message img.webchat__markdown__external-link-icon {
|
|
185
|
+
.ms_lcw_webchat_received_message img.webchat__markdown__external-link-icon {
|
|
173
186
|
background-image : url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIzIDMgMTggMTgiICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGQ9Ik03LjI1MDEgNC41MDAxN0gxMC43NDk1QzExLjE2MzcgNC41MDAxNyAxMS40OTk1IDQuODM1OTYgMTEuNDk5NSA1LjI1MDE3QzExLjQ5OTUgNS42Mjk4NiAxMS4yMTczIDUuOTQzNjYgMTAuODUxMyA1Ljk5MzMyTDEwLjc0OTUgNi4wMDAxN0g3LjI0OTc0QzYuMDcwNzkgNS45OTk2MSA1LjEwMzQ5IDYuOTA2NTYgNS4wMDc4NiA4LjA2MTEyTDUuMDAwMjggOC4yMjAwM0w1LjAwMzEyIDE2Ljc1MDdDNS4wMDM0MyAxNy45NDE1IDUuOTI4ODUgMTguOTE2MSA3LjA5OTY2IDE4Ljk5NDlMNy4yNTM3MSAxOS4wMDAxTDE1Ljc1MTggMTguOTg4NEMxNi45NDE1IDE4Ljk4NjggMTcuOTE0NSAxOC4wNjIgMTcuOTkzNSAxNi44OTIzTDE3Ljk5ODcgMTYuNzM4NFYxMy4yMzIxQzE3Ljk5ODcgMTIuODE3OSAxOC4zMzQ1IDEyLjQ4MjEgMTguNzQ4NyAxMi40ODIxQzE5LjEyODQgMTIuNDgyMSAxOS40NDIyIDEyLjc2NDMgMTkuNDkxOCAxMy4xMzAzTDE5LjQ5ODcgMTMuMjMyMVYxNi43Mzg0QzE5LjQ5ODcgMTguNzQwNyAxNy45MjkzIDIwLjM3NjkgMTUuOTUyOCAyMC40ODI5TDE1Ljc1MzggMjAuNDg4NEw3LjI1ODI3IDIwLjUwMDFMNy4wNTQ5NSAyMC40OTQ5QzUuMTQyMzkgMjAuMzk1NCAzLjYwODk1IDE4Ljg2MjcgMy41MDgzNyAxNi45NTAyTDMuNTAzMTIgMTYuNzUxMUwzLjUwMDg5IDguMjUyN0wzLjUwNTI5IDguMDUwMkMzLjYwNTM5IDYuMTM3NDkgNS4xMzg2NyA0LjYwNDQ5IDcuMDUwOTYgNC41MDUyN0w3LjI1MDEgNC41MDAxN0gxMC43NDk1SDcuMjUwMVpNMTMuNzQ4MSAzLjAwMTQ2TDIwLjMwMTggMy4wMDE5N0wyMC40MDE0IDMuMDE1NzVMMjAuNTAyMiAzLjA0MzkzTDIwLjU1OSAzLjA2ODAzQzIwLjYxMjIgMy4wOTEyMiAyMC42NjM0IDMuMTIxNjMgMjAuNzExMSAzLjE1ODg1TDIwLjc4MDQgMy4yMjE1NkwyMC44NjQxIDMuMzIwMTRMMjAuOTE4MyAzLjQxMDI1TDIwLjk1NyAzLjUwMDU3TDIwLjk3NjIgMy41NjQ3NkwyMC45ODk4IDMuNjI4NjJMMjAuOTk5MiAzLjcyMjgyTDIwLjk5OTcgMTAuMjU1NEMyMC45OTk3IDEwLjY2OTYgMjAuNjYzOSAxMS4wMDU0IDIwLjI0OTcgMTEuMDA1NEMxOS44NyAxMS4wMDU0IDE5LjU1NjIgMTAuNzIzMiAxOS41MDY1IDEwLjM1NzFMMTkuNDk5NyAxMC4yNTU0TDE5LjQ5ODkgNS41NjE0N0wxMi4yNzk3IDEyLjc4NDdDMTIuMDEzNCAxMy4wNTEgMTEuNTk2OCAxMy4wNzUzIDExLjMwMzEgMTIuODU3NUwxMS4yMTkgMTIuNzg0OUMxMC45NTI3IDEyLjUxODcgMTAuOTI4NCAxMi4xMDIxIDExLjE0NjIgMTEuODA4NEwxMS4yMTg4IDExLjcyNDNMMTguNDM2OSA0LjUwMTQ2SDEzLjc0ODFDMTMuMzY4NCA0LjUwMTQ2IDEzLjA1NDYgNC4yMTkzMSAxMy4wMDUgMy44NTMyNEwxMi45OTgxIDMuNzUxNDZDMTIuOTk4MSAzLjM3MTc3IDEzLjI4MDMgMy4wNTc5NyAxMy42NDY0IDMuMDA4MzFMMTMuNzQ4MSAzLjAwMTQ2WiIgZmlsbD0iI0ZGRkZGRiIgLz48L3N2Zz4) !important;
|
|
174
187
|
height: '.75em';
|
|
175
188
|
marginLeft: '.25em';
|
|
@@ -187,7 +200,7 @@ const WebChatContainerStateful = props => {
|
|
|
187
200
|
.ms_lcw_webchat_received_message a:hover,
|
|
188
201
|
.ms_lcw_webchat_received_message a:active {
|
|
189
202
|
color: ${(webChatContainerProps === null || webChatContainerProps === void 0 ? void 0 : (_webChatContainerProp11 = webChatContainerProps.renderingMiddlewareProps) === null || _webChatContainerProp11 === void 0 ? void 0 : (_webChatContainerProp12 = _webChatContainerProp11.receivedMessageAnchorStyles) === null || _webChatContainerProp12 === void 0 ? void 0 : _webChatContainerProp12.color) ?? (_defaultReceivedMessageAnchorStyles.defaultReceivedMessageAnchorStyles === null || _defaultReceivedMessageAnchorStyles.defaultReceivedMessageAnchorStyles === void 0 ? void 0 : _defaultReceivedMessageAnchorStyles.defaultReceivedMessageAnchorStyles.color)};
|
|
190
|
-
}
|
|
203
|
+
}
|
|
191
204
|
.ms_lcw_webchat_sent_message a:link,
|
|
192
205
|
.ms_lcw_webchat_sent_message a:visited,
|
|
193
206
|
.ms_lcw_webchat_sent_message a:hover,
|
|
@@ -32,6 +32,8 @@ const defaultMiddlewareLocalizedTexts = {
|
|
|
32
32
|
MIDDLEWARE_MESSAGE_RETRY: "Retry",
|
|
33
33
|
MIDDLEWARE_BANNER_CHAT_DISCONNECT: "Your conversation has been disconnected. For additional assistance, please start a new chat.",
|
|
34
34
|
THIRD_PARTY_COOKIES_BLOCKED_ALERT_MESSAGE: "Third party cookies are blocked. Reloading this page will start a new conversation.",
|
|
35
|
-
MIDDLEWARE_BANNER_FILE_IS_MALICIOUS: "{0} has been blocked because the file may contain a malware."
|
|
35
|
+
MIDDLEWARE_BANNER_FILE_IS_MALICIOUS: "{0} has been blocked because the file may contain a malware.",
|
|
36
|
+
MIDDLEWARE_BANNER_FILE_EMAIL_ADDRESS_RECORDED_SUCCESS: "Email will be sent after chat ends!",
|
|
37
|
+
MIDDLEWARE_BANNER_FILE_EMAIL_ADDRESS_RECORDED_ERROR: "Email {0} could not be saved, try again later."
|
|
36
38
|
};
|
|
37
39
|
exports.defaultMiddlewareLocalizedTexts = defaultMiddlewareLocalizedTexts;
|
package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/enums/NotificationScenarios.js
CHANGED
|
@@ -10,6 +10,7 @@ exports.NotificationScenarios = NotificationScenarios;
|
|
|
10
10
|
NotificationScenarios["Connection"] = "connection";
|
|
11
11
|
NotificationScenarios["DownloadTranscriptError"] = "download transcript";
|
|
12
12
|
NotificationScenarios["EmailTranscriptError"] = "email transcript";
|
|
13
|
+
NotificationScenarios["EmailAddressSaved"] = "email address saved";
|
|
13
14
|
NotificationScenarios["AttachmentError"] = "attachment";
|
|
14
15
|
NotificationScenarios["InternetConnection"] = "internet connection";
|
|
15
16
|
NotificationScenarios["MaxSizeError"] = "max size";
|