@microsoft/omnichannel-chat-widget 1.7.4-main.c391e9f → 1.7.4-main.c715d8f
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/telemetry/TelemetryHelper.js +2 -0
- package/lib/cjs/components/footerstateful/FooterStateful.js +12 -9
- package/lib/cjs/components/headerstateful/HeaderStateful.js +4 -0
- package/lib/cjs/components/livechatwidget/common/endChat.js +13 -9
- package/lib/cjs/components/livechatwidget/common/startChat.js +4 -4
- package/lib/esm/common/telemetry/TelemetryHelper.js +2 -0
- package/lib/esm/components/footerstateful/FooterStateful.js +12 -9
- package/lib/esm/components/headerstateful/HeaderStateful.js +4 -0
- package/lib/esm/components/livechatwidget/common/endChat.js +13 -9
- package/lib/esm/components/livechatwidget/common/startChat.js +5 -5
- package/lib/types/common/telemetry/definitions/Payload.d.ts +1 -0
- package/package.json +4 -2
|
@@ -21,6 +21,7 @@ class TelemetryHelper {
|
|
|
21
21
|
case _TelemetryConstants.ScenarioType.WEBCHAT:
|
|
22
22
|
return TelemetryHelper.conformToWebChatContract(level, input);
|
|
23
23
|
case _TelemetryConstants.ScenarioType.OCCHATSDK:
|
|
24
|
+
case _TelemetryConstants.ScenarioType.SDK:
|
|
24
25
|
return TelemetryHelper.conformToOCChatSDKContract(level, input);
|
|
25
26
|
case _TelemetryConstants.ScenarioType.ACTIONS:
|
|
26
27
|
return TelemetryHelper.conformToActionsContract(level, input);
|
|
@@ -156,6 +157,7 @@ class TelemetryHelper {
|
|
|
156
157
|
event.TransactionId = payload.TransactionId;
|
|
157
158
|
event.ElapsedTimeInMilliseconds = payload.ElapsedTimeInMilliseconds;
|
|
158
159
|
event.ExceptionDetails = JSON.stringify(payload.ExceptionDetails);
|
|
160
|
+
event.Description = payload.Description;
|
|
159
161
|
});
|
|
160
162
|
}
|
|
161
163
|
static addChatConfigDataToTelemetry(chatConfig, telemetryInternalData) {
|
|
@@ -17,12 +17,13 @@ var _TelemetryHelper = require("../../common/telemetry/TelemetryHelper");
|
|
|
17
17
|
var _DownloadTranscriptStateful = require("./downloadtranscriptstateful/DownloadTranscriptStateful");
|
|
18
18
|
var _useChatContextStore = _interopRequireDefault(require("../../hooks/useChatContextStore"));
|
|
19
19
|
var _useChatSDKStore = _interopRequireDefault(require("../../hooks/useChatSDKStore"));
|
|
20
|
+
var _ConversationState = require("../../contexts/common/ConversationState");
|
|
20
21
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
21
22
|
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); }
|
|
22
23
|
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; }
|
|
23
24
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
24
25
|
const FooterStateful = props => {
|
|
25
|
-
var _footerProps$controlP3
|
|
26
|
+
var _footerProps$controlP3;
|
|
26
27
|
const [state, dispatch] = (0, _useChatContextStore.default)();
|
|
27
28
|
// hideFooterDisplay - the purpose of this is to keep the footer always "active",
|
|
28
29
|
// but hide it visually in certain states (e.g., loading state) and show in some other states (e.g. active state).
|
|
@@ -90,21 +91,23 @@ const FooterStateful = props => {
|
|
|
90
91
|
}
|
|
91
92
|
};
|
|
92
93
|
(0, _react.useEffect)(() => {
|
|
93
|
-
if (state.appStates.
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
94
|
+
if (state.appStates.conversationState === _ConversationState.ConversationState.Active) {
|
|
95
|
+
if (state.appStates.isAudioMuted === null) {
|
|
96
|
+
var _footerProps$controlP4, _footerProps$controlP5, _footerProps$controlP6;
|
|
97
|
+
dispatch({
|
|
98
|
+
type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_AUDIO_NOTIFICATION,
|
|
99
|
+
payload: footerProps !== null && footerProps !== void 0 && (_footerProps$controlP4 = footerProps.controlProps) !== null && _footerProps$controlP4 !== void 0 && _footerProps$controlP4.hideAudioNotificationButton ? true : (footerProps === null || footerProps === void 0 ? void 0 : (_footerProps$controlP5 = footerProps.controlProps) === null || _footerProps$controlP5 === void 0 ? void 0 : (_footerProps$controlP6 = _footerProps$controlP5.audioNotificationButtonProps) === null || _footerProps$controlP6 === void 0 ? void 0 : _footerProps$controlP6.isAudioMuted) ?? false
|
|
100
|
+
});
|
|
101
|
+
}
|
|
99
102
|
}
|
|
100
|
-
}, []);
|
|
103
|
+
}, [state.appStates.conversationState]);
|
|
101
104
|
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, !hideFooterDisplay && /*#__PURE__*/_react.default.createElement(_omnichannelChatComponents.Footer, {
|
|
102
105
|
componentOverrides: footerProps === null || footerProps === void 0 ? void 0 : footerProps.componentOverrides,
|
|
103
106
|
controlProps: controlProps,
|
|
104
107
|
styleProps: footerProps === null || footerProps === void 0 ? void 0 : footerProps.styleProps
|
|
105
108
|
}), /*#__PURE__*/_react.default.createElement(_AudioNotificationStateful.default, {
|
|
106
109
|
audioSrc: (audioNotificationProps === null || audioNotificationProps === void 0 ? void 0 : audioNotificationProps.audioSrc) ?? _Audios.NewMessageNotificationSoundBase64,
|
|
107
|
-
isAudioMuted: state.appStates.isAudioMuted
|
|
110
|
+
isAudioMuted: state.appStates.isAudioMuted ?? false
|
|
108
111
|
}));
|
|
109
112
|
};
|
|
110
113
|
exports.FooterStateful = FooterStateful;
|
|
@@ -88,6 +88,10 @@ const HeaderStateful = props => {
|
|
|
88
88
|
text: "We're Offline"
|
|
89
89
|
},
|
|
90
90
|
onMinimizeClick: () => {
|
|
91
|
+
_TelemetryHelper.TelemetryHelper.logActionEvent(_TelemetryConstants.LogLevel.INFO, {
|
|
92
|
+
Event: _TelemetryConstants.TelemetryEvent.HeaderMinimizeButtonClicked,
|
|
93
|
+
Description: "Header Minimize button clicked."
|
|
94
|
+
});
|
|
91
95
|
dispatch({
|
|
92
96
|
type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_MINIMIZED,
|
|
93
97
|
payload: true
|
|
@@ -4,8 +4,8 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.prepareEndChat = exports.endVoiceVideoCallIfOngoing = exports.endChatStateCleanUp = exports.endChat = exports.closeChatStateCleanUp = exports.chatSDKStateCleanUp = exports.callingStateCleanUp = void 0;
|
|
7
|
-
var _Constants = require("../../../common/Constants");
|
|
8
7
|
var _TelemetryConstants = require("../../../common/telemetry/TelemetryConstants");
|
|
8
|
+
var _Constants = require("../../../common/Constants");
|
|
9
9
|
var _utils = require("../../../common/utils");
|
|
10
10
|
var _renderSurveyHelpers = require("./renderSurveyHelpers");
|
|
11
11
|
var _omnichannelChatComponents = require("@microsoft/omnichannel-chat-components");
|
|
@@ -140,21 +140,25 @@ const prepareEndChat = async (props, chatSDK, state, dispatch, setAdapter, setWe
|
|
|
140
140
|
exports.prepareEndChat = prepareEndChat;
|
|
141
141
|
const endChat = async (props, chatSDK, state, dispatch, setAdapter, setWebChatStyles, adapter, skipEndChatSDK, skipCloseChat, postMessageToOtherTab) => {
|
|
142
142
|
if (!skipEndChatSDK && chatSDK.conversation) {
|
|
143
|
+
var _inMemoryState$appSta;
|
|
144
|
+
const inMemoryState = (0, _createReducer.executeReducer)(state, {
|
|
145
|
+
type: _LiveChatWidgetActionType.LiveChatWidgetActionType.GET_IN_MEMORY_STATE,
|
|
146
|
+
payload: null
|
|
147
|
+
});
|
|
148
|
+
const endChatOptionalParameters = {
|
|
149
|
+
isSessionEnded: inMemoryState === null || inMemoryState === void 0 ? void 0 : (_inMemoryState$appSta = inMemoryState.appStates) === null || _inMemoryState$appSta === void 0 ? void 0 : _inMemoryState$appSta.chatDisconnectEventReceived
|
|
150
|
+
};
|
|
143
151
|
try {
|
|
144
152
|
_TelemetryHelper.TelemetryHelper.logSDKEvent(_TelemetryConstants.LogLevel.INFO, {
|
|
145
153
|
Event: _TelemetryConstants.TelemetryEvent.EndChatSDKCall
|
|
146
154
|
});
|
|
147
155
|
//Get auth token again if chat continued for longer time, otherwise gets 401 error
|
|
148
156
|
await (0, _authHelper.handleAuthentication)(chatSDK, props.chatConfig, props.getAuthToken);
|
|
149
|
-
await (chatSDK === null || chatSDK === void 0 ? void 0 : chatSDK.endChat());
|
|
157
|
+
await (chatSDK === null || chatSDK === void 0 ? void 0 : chatSDK.endChat(endChatOptionalParameters));
|
|
150
158
|
} catch (ex) {
|
|
151
|
-
var _inMemoryState$
|
|
152
|
-
const inMemoryState = (0, _createReducer.executeReducer)(state, {
|
|
153
|
-
type: _LiveChatWidgetActionType.LiveChatWidgetActionType.GET_IN_MEMORY_STATE,
|
|
154
|
-
payload: null
|
|
155
|
-
});
|
|
159
|
+
var _inMemoryState$appSta2;
|
|
156
160
|
// if the chat was disconnected or ended by the agent, we don't want to log the error
|
|
157
|
-
if (!(inMemoryState !== null && inMemoryState !== void 0 && (_inMemoryState$
|
|
161
|
+
if (!(inMemoryState !== null && inMemoryState !== void 0 && (_inMemoryState$appSta2 = inMemoryState.appStates) !== null && _inMemoryState$appSta2 !== void 0 && _inMemoryState$appSta2.chatDisconnectEventReceived)) {
|
|
158
162
|
_TelemetryHelper.TelemetryHelper.logSDKEvent(_TelemetryConstants.LogLevel.ERROR, {
|
|
159
163
|
Event: _TelemetryConstants.TelemetryEvent.EndChatSDKCallFailed,
|
|
160
164
|
ExceptionDetails: {
|
|
@@ -171,7 +175,7 @@ const endChat = async (props, chatSDK, state, dispatch, setAdapter, setWebChatSt
|
|
|
171
175
|
}
|
|
172
176
|
postMessageToOtherTab = false;
|
|
173
177
|
} finally {
|
|
174
|
-
|
|
178
|
+
endChatStateCleanUp(dispatch);
|
|
175
179
|
}
|
|
176
180
|
}
|
|
177
181
|
if (!skipCloseChat) {
|
|
@@ -377,14 +377,14 @@ const checkIfConversationStillValid = async (chatSDK, dispatch, state) => {
|
|
|
377
377
|
try {
|
|
378
378
|
chatSDK.requestId = requestIdFromCache;
|
|
379
379
|
conversationDetails = await (0, _utils.getConversationDetailsCall)(chatSDK, liveChatContext);
|
|
380
|
-
if (Object.keys(conversationDetails).length === 0) {
|
|
381
|
-
return false;
|
|
382
|
-
}
|
|
383
|
-
if (conversationDetails.state === _Constants.LiveWorkItemState.Closed || conversationDetails.state === _Constants.LiveWorkItemState.WrapUp) {
|
|
380
|
+
if (Object.keys(conversationDetails).length === 0 || (0, _utils.isNullOrUndefined)(conversationDetails.state) || conversationDetails.state === _Constants.LiveWorkItemState.Closed || conversationDetails.state === _Constants.LiveWorkItemState.WrapUp) {
|
|
384
381
|
dispatch({
|
|
385
382
|
type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_LIVE_CHAT_CONTEXT,
|
|
386
383
|
payload: undefined
|
|
387
384
|
});
|
|
385
|
+
if (currentRequestId) {
|
|
386
|
+
chatSDK.requestId = currentRequestId;
|
|
387
|
+
}
|
|
388
388
|
return false;
|
|
389
389
|
}
|
|
390
390
|
return true;
|
|
@@ -15,6 +15,7 @@ export class TelemetryHelper {
|
|
|
15
15
|
case ScenarioType.WEBCHAT:
|
|
16
16
|
return TelemetryHelper.conformToWebChatContract(level, input);
|
|
17
17
|
case ScenarioType.OCCHATSDK:
|
|
18
|
+
case ScenarioType.SDK:
|
|
18
19
|
return TelemetryHelper.conformToOCChatSDKContract(level, input);
|
|
19
20
|
case ScenarioType.ACTIONS:
|
|
20
21
|
return TelemetryHelper.conformToActionsContract(level, input);
|
|
@@ -150,6 +151,7 @@ export class TelemetryHelper {
|
|
|
150
151
|
event.TransactionId = payload.TransactionId;
|
|
151
152
|
event.ElapsedTimeInMilliseconds = payload.ElapsedTimeInMilliseconds;
|
|
152
153
|
event.ExceptionDetails = JSON.stringify(payload.ExceptionDetails);
|
|
154
|
+
event.Description = payload.Description;
|
|
153
155
|
});
|
|
154
156
|
}
|
|
155
157
|
static addChatConfigDataToTelemetry(chatConfig, telemetryInternalData) {
|
|
@@ -11,10 +11,11 @@ import { TelemetryHelper } from "../../common/telemetry/TelemetryHelper";
|
|
|
11
11
|
import { downloadTranscript } from "./downloadtranscriptstateful/DownloadTranscriptStateful";
|
|
12
12
|
import useChatContextStore from "../../hooks/useChatContextStore";
|
|
13
13
|
import useChatSDKStore from "../../hooks/useChatSDKStore";
|
|
14
|
+
import { ConversationState } from "../../contexts/common/ConversationState";
|
|
14
15
|
|
|
15
16
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
16
17
|
export const FooterStateful = props => {
|
|
17
|
-
var _footerProps$controlP3
|
|
18
|
+
var _footerProps$controlP3;
|
|
18
19
|
const [state, dispatch] = useChatContextStore();
|
|
19
20
|
// hideFooterDisplay - the purpose of this is to keep the footer always "active",
|
|
20
21
|
// but hide it visually in certain states (e.g., loading state) and show in some other states (e.g. active state).
|
|
@@ -82,21 +83,23 @@ export const FooterStateful = props => {
|
|
|
82
83
|
}
|
|
83
84
|
};
|
|
84
85
|
useEffect(() => {
|
|
85
|
-
if (state.appStates.
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
86
|
+
if (state.appStates.conversationState === ConversationState.Active) {
|
|
87
|
+
if (state.appStates.isAudioMuted === null) {
|
|
88
|
+
var _footerProps$controlP4, _footerProps$controlP5, _footerProps$controlP6;
|
|
89
|
+
dispatch({
|
|
90
|
+
type: LiveChatWidgetActionType.SET_AUDIO_NOTIFICATION,
|
|
91
|
+
payload: footerProps !== null && footerProps !== void 0 && (_footerProps$controlP4 = footerProps.controlProps) !== null && _footerProps$controlP4 !== void 0 && _footerProps$controlP4.hideAudioNotificationButton ? true : (footerProps === null || footerProps === void 0 ? void 0 : (_footerProps$controlP5 = footerProps.controlProps) === null || _footerProps$controlP5 === void 0 ? void 0 : (_footerProps$controlP6 = _footerProps$controlP5.audioNotificationButtonProps) === null || _footerProps$controlP6 === void 0 ? void 0 : _footerProps$controlP6.isAudioMuted) ?? false
|
|
92
|
+
});
|
|
93
|
+
}
|
|
91
94
|
}
|
|
92
|
-
}, []);
|
|
95
|
+
}, [state.appStates.conversationState]);
|
|
93
96
|
return /*#__PURE__*/React.createElement(React.Fragment, null, !hideFooterDisplay && /*#__PURE__*/React.createElement(Footer, {
|
|
94
97
|
componentOverrides: footerProps === null || footerProps === void 0 ? void 0 : footerProps.componentOverrides,
|
|
95
98
|
controlProps: controlProps,
|
|
96
99
|
styleProps: footerProps === null || footerProps === void 0 ? void 0 : footerProps.styleProps
|
|
97
100
|
}), /*#__PURE__*/React.createElement(AudioNotificationStateful, {
|
|
98
101
|
audioSrc: (audioNotificationProps === null || audioNotificationProps === void 0 ? void 0 : audioNotificationProps.audioSrc) ?? NewMessageNotificationSoundBase64,
|
|
99
|
-
isAudioMuted: state.appStates.isAudioMuted
|
|
102
|
+
isAudioMuted: state.appStates.isAudioMuted ?? false
|
|
100
103
|
}));
|
|
101
104
|
};
|
|
102
105
|
export default FooterStateful;
|
|
@@ -79,6 +79,10 @@ export const HeaderStateful = props => {
|
|
|
79
79
|
text: "We're Offline"
|
|
80
80
|
},
|
|
81
81
|
onMinimizeClick: () => {
|
|
82
|
+
TelemetryHelper.logActionEvent(LogLevel.INFO, {
|
|
83
|
+
Event: TelemetryEvent.HeaderMinimizeButtonClicked,
|
|
84
|
+
Description: "Header Minimize button clicked."
|
|
85
|
+
});
|
|
82
86
|
dispatch({
|
|
83
87
|
type: LiveChatWidgetActionType.SET_MINIMIZED,
|
|
84
88
|
payload: true
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { ConfirmationState, Constants, ConversationEndEntity, ParticipantType, PrepareEndChatDescriptionConstants } from "../../../common/Constants";
|
|
2
1
|
import { BroadcastEvent, LogLevel, TelemetryEvent } from "../../../common/telemetry/TelemetryConstants";
|
|
2
|
+
import { ConfirmationState, Constants, ConversationEndEntity, ParticipantType, PrepareEndChatDescriptionConstants } from "../../../common/Constants";
|
|
3
3
|
import { getConversationDetailsCall, getWidgetEndChatEventName } from "../../../common/utils";
|
|
4
4
|
import { getPostChatContext, initiatePostChat } from "./renderSurveyHelpers";
|
|
5
5
|
import { BroadcastService } from "@microsoft/omnichannel-chat-components";
|
|
@@ -134,21 +134,25 @@ const prepareEndChat = async (props, chatSDK, state, dispatch, setAdapter, setWe
|
|
|
134
134
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
135
135
|
const endChat = async (props, chatSDK, state, dispatch, setAdapter, setWebChatStyles, adapter, skipEndChatSDK, skipCloseChat, postMessageToOtherTab) => {
|
|
136
136
|
if (!skipEndChatSDK && chatSDK.conversation) {
|
|
137
|
+
var _inMemoryState$appSta;
|
|
138
|
+
const inMemoryState = executeReducer(state, {
|
|
139
|
+
type: LiveChatWidgetActionType.GET_IN_MEMORY_STATE,
|
|
140
|
+
payload: null
|
|
141
|
+
});
|
|
142
|
+
const endChatOptionalParameters = {
|
|
143
|
+
isSessionEnded: inMemoryState === null || inMemoryState === void 0 ? void 0 : (_inMemoryState$appSta = inMemoryState.appStates) === null || _inMemoryState$appSta === void 0 ? void 0 : _inMemoryState$appSta.chatDisconnectEventReceived
|
|
144
|
+
};
|
|
137
145
|
try {
|
|
138
146
|
TelemetryHelper.logSDKEvent(LogLevel.INFO, {
|
|
139
147
|
Event: TelemetryEvent.EndChatSDKCall
|
|
140
148
|
});
|
|
141
149
|
//Get auth token again if chat continued for longer time, otherwise gets 401 error
|
|
142
150
|
await handleAuthentication(chatSDK, props.chatConfig, props.getAuthToken);
|
|
143
|
-
await (chatSDK === null || chatSDK === void 0 ? void 0 : chatSDK.endChat());
|
|
151
|
+
await (chatSDK === null || chatSDK === void 0 ? void 0 : chatSDK.endChat(endChatOptionalParameters));
|
|
144
152
|
} catch (ex) {
|
|
145
|
-
var _inMemoryState$
|
|
146
|
-
const inMemoryState = executeReducer(state, {
|
|
147
|
-
type: LiveChatWidgetActionType.GET_IN_MEMORY_STATE,
|
|
148
|
-
payload: null
|
|
149
|
-
});
|
|
153
|
+
var _inMemoryState$appSta2;
|
|
150
154
|
// if the chat was disconnected or ended by the agent, we don't want to log the error
|
|
151
|
-
if (!(inMemoryState !== null && inMemoryState !== void 0 && (_inMemoryState$
|
|
155
|
+
if (!(inMemoryState !== null && inMemoryState !== void 0 && (_inMemoryState$appSta2 = inMemoryState.appStates) !== null && _inMemoryState$appSta2 !== void 0 && _inMemoryState$appSta2.chatDisconnectEventReceived)) {
|
|
152
156
|
TelemetryHelper.logSDKEvent(LogLevel.ERROR, {
|
|
153
157
|
Event: TelemetryEvent.EndChatSDKCallFailed,
|
|
154
158
|
ExceptionDetails: {
|
|
@@ -165,7 +169,7 @@ const endChat = async (props, chatSDK, state, dispatch, setAdapter, setWebChatSt
|
|
|
165
169
|
}
|
|
166
170
|
postMessageToOtherTab = false;
|
|
167
171
|
} finally {
|
|
168
|
-
|
|
172
|
+
endChatStateCleanUp(dispatch);
|
|
169
173
|
}
|
|
170
174
|
}
|
|
171
175
|
if (!skipCloseChat) {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { BroadcastEvent, LogLevel, TelemetryEvent } from "../../../common/telemetry/TelemetryConstants";
|
|
2
2
|
import { Constants, LiveWorkItemState, WidgetLoadCustomErrorString, WidgetLoadTelemetryMessage } from "../../../common/Constants";
|
|
3
|
-
import { checkContactIdError, createTimer, getConversationDetailsCall, getStateFromCache, getWidgetCacheIdfromProps, isNullOrEmptyString, isUndefinedOrEmpty } from "../../../common/utils";
|
|
3
|
+
import { checkContactIdError, createTimer, getConversationDetailsCall, getStateFromCache, getWidgetCacheIdfromProps, isNullOrEmptyString, isNullOrUndefined, isUndefinedOrEmpty } from "../../../common/utils";
|
|
4
4
|
import { getAuthClientFunction, handleAuthentication } from "./authHelper";
|
|
5
5
|
import { handleChatReconnect, isPersistentEnabled, isReconnectEnabled } from "./reconnectChatHelper";
|
|
6
6
|
import { handleStartChatError, logWidgetLoadComplete } from "./startChatErrorHandler";
|
|
@@ -369,14 +369,14 @@ const checkIfConversationStillValid = async (chatSDK, dispatch, state) => {
|
|
|
369
369
|
try {
|
|
370
370
|
chatSDK.requestId = requestIdFromCache;
|
|
371
371
|
conversationDetails = await getConversationDetailsCall(chatSDK, liveChatContext);
|
|
372
|
-
if (Object.keys(conversationDetails).length === 0) {
|
|
373
|
-
return false;
|
|
374
|
-
}
|
|
375
|
-
if (conversationDetails.state === LiveWorkItemState.Closed || conversationDetails.state === LiveWorkItemState.WrapUp) {
|
|
372
|
+
if (Object.keys(conversationDetails).length === 0 || isNullOrUndefined(conversationDetails.state) || conversationDetails.state === LiveWorkItemState.Closed || conversationDetails.state === LiveWorkItemState.WrapUp) {
|
|
376
373
|
dispatch({
|
|
377
374
|
type: LiveChatWidgetActionType.SET_LIVE_CHAT_CONTEXT,
|
|
378
375
|
payload: undefined
|
|
379
376
|
});
|
|
377
|
+
if (currentRequestId) {
|
|
378
|
+
chatSDK.requestId = currentRequestId;
|
|
379
|
+
}
|
|
380
380
|
return false;
|
|
381
381
|
}
|
|
382
382
|
return true;
|
|
@@ -34,6 +34,7 @@ export interface OCChatSDKTelemetryData extends BaseTelemetryData {
|
|
|
34
34
|
ElapsedTimeInMilliseconds?: number;
|
|
35
35
|
TransactionId: string;
|
|
36
36
|
ExceptionDetails?: object;
|
|
37
|
+
Description?: string;
|
|
37
38
|
}
|
|
38
39
|
export interface IC3ClientTelemetryData extends BaseTelemetryData {
|
|
39
40
|
SubscriptionId?: string;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@microsoft/omnichannel-chat-widget",
|
|
3
|
-
"version": "1.7.4-main.
|
|
3
|
+
"version": "1.7.4-main.c715d8f",
|
|
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,10 @@
|
|
|
74
74
|
"webpack-cli": "^4.9.2"
|
|
75
75
|
},
|
|
76
76
|
"dependencies": {
|
|
77
|
+
"@azure/core-tracing": "^1.2.0",
|
|
77
78
|
"@microsoft/omnichannel-chat-components": "1.1.5",
|
|
78
|
-
"@microsoft/omnichannel-chat-sdk": "^1.10.
|
|
79
|
+
"@microsoft/omnichannel-chat-sdk": "^1.10.2",
|
|
80
|
+
"@opentelemetry/api": "^1.9.0",
|
|
79
81
|
"abort-controller-es5": "^2.0.1",
|
|
80
82
|
"dompurify": "^2.5.4",
|
|
81
83
|
"markdown-it": "^12.3.2",
|