@microsoft/omnichannel-chat-widget 1.7.5-main.290ba08 → 1.7.6-main.9b09b06
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/facades/FacadeChatSDK.js +11 -1
- package/lib/cjs/common/telemetry/TelemetryConstants.js +32 -0
- package/lib/cjs/common/telemetry/TelemetryHelper.js +10 -0
- package/lib/cjs/components/chatbuttonstateful/ChatButtonStateful.js +15 -1
- package/lib/cjs/components/confirmationpanestateful/ConfirmationPaneStateful.js +14 -2
- package/lib/cjs/components/emailtranscriptpanestateful/EmailTranscriptPaneStateful.js +16 -2
- package/lib/cjs/components/footerstateful/FooterStateful.js +15 -0
- package/lib/cjs/components/headerstateful/HeaderStateful.js +16 -2
- package/lib/cjs/components/livechatwidget/LiveChatWidget.js +3 -2
- package/lib/cjs/components/livechatwidget/common/createInternetConnectionChangeHandler.js +5 -3
- package/lib/cjs/components/livechatwidget/interfaces/IFeatureConfigProps.js +1 -0
- package/lib/cjs/components/livechatwidget/livechatwidgetstateful/LiveChatWidgetStateful.js +37 -4
- package/lib/cjs/components/loadingpanestateful/LoadingPaneStateful.js +20 -2
- package/lib/cjs/components/notificationpanestateful/NotificationPaneStateful.js +21 -7
- package/lib/cjs/components/ooohpanestateful/OOOHPaneStateful.js +12 -1
- package/lib/cjs/components/postchatloadingpanestateful/PostChatLoadingPaneStateful.js +14 -3
- package/lib/cjs/components/prechatsurveypanestateful/PreChatSurveyPaneStateful.js +13 -0
- package/lib/cjs/components/proactivechatpanestateful/ProactiveChatPaneStateful.js +12 -0
- package/lib/cjs/components/reconnectchatpanestateful/ReconnectChatPaneStateful.js +12 -1
- package/lib/cjs/components/startchaterrorpanestateful/StartChatErrorPaneStateful.js +19 -8
- package/lib/cjs/components/webchatcontainerstateful/WebChatContainerStateful.js +14 -1
- package/lib/cjs/components/webchatcontainerstateful/common/defaultStyles/defaultWebChatStyles.js +2 -1
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/enums/WebChatActionType.js +1 -0
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachmentMiddleware.js +7 -7
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/attachmentProcessingMiddleware.js +4 -4
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/attachmentUploadValidatorMiddleware.js +7 -4
- package/lib/cjs/plugins/createChatTranscript.js +15 -6
- package/lib/esm/common/facades/FacadeChatSDK.js +11 -1
- package/lib/esm/common/telemetry/TelemetryConstants.js +32 -0
- package/lib/esm/common/telemetry/TelemetryHelper.js +10 -0
- package/lib/esm/components/chatbuttonstateful/ChatButtonStateful.js +15 -1
- package/lib/esm/components/confirmationpanestateful/ConfirmationPaneStateful.js +14 -3
- package/lib/esm/components/emailtranscriptpanestateful/EmailTranscriptPaneStateful.js +17 -3
- package/lib/esm/components/footerstateful/FooterStateful.js +14 -0
- package/lib/esm/components/headerstateful/HeaderStateful.js +16 -2
- package/lib/esm/components/livechatwidget/LiveChatWidget.js +3 -2
- package/lib/esm/components/livechatwidget/common/createInternetConnectionChangeHandler.js +5 -3
- package/lib/esm/components/livechatwidget/interfaces/IFeatureConfigProps.js +1 -0
- package/lib/esm/components/livechatwidget/livechatwidgetstateful/LiveChatWidgetStateful.js +37 -4
- package/lib/esm/components/loadingpanestateful/LoadingPaneStateful.js +19 -2
- package/lib/esm/components/notificationpanestateful/NotificationPaneStateful.js +21 -7
- package/lib/esm/components/ooohpanestateful/OOOHPaneStateful.js +12 -1
- package/lib/esm/components/postchatloadingpanestateful/PostChatLoadingPaneStateful.js +14 -3
- package/lib/esm/components/prechatsurveypanestateful/PreChatSurveyPaneStateful.js +13 -1
- package/lib/esm/components/proactivechatpanestateful/ProactiveChatPaneStateful.js +11 -0
- package/lib/esm/components/reconnectchatpanestateful/ReconnectChatPaneStateful.js +12 -1
- package/lib/esm/components/startchaterrorpanestateful/StartChatErrorPaneStateful.js +19 -8
- package/lib/esm/components/webchatcontainerstateful/WebChatContainerStateful.js +14 -1
- package/lib/esm/components/webchatcontainerstateful/common/defaultStyles/defaultWebChatStyles.js +2 -1
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/enums/WebChatActionType.js +1 -0
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachmentMiddleware.js +7 -7
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/attachmentProcessingMiddleware.js +4 -4
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/attachmentUploadValidatorMiddleware.js +7 -4
- package/lib/esm/plugins/createChatTranscript.js +15 -6
- package/lib/types/common/facades/FacadeChatSDK.d.ts +2 -1
- package/lib/types/common/telemetry/TelemetryConstants.d.ts +33 -1
- package/lib/types/common/telemetry/TelemetryHelper.d.ts +2 -1
- package/lib/types/common/telemetry/definitions/Contracts.d.ts +1 -1
- package/lib/types/common/telemetry/definitions/Payload.d.ts +14 -1
- package/lib/types/components/footerstateful/downloadtranscriptstateful/DownloadTranscriptStateful.d.ts +1 -1
- package/lib/types/components/footerstateful/downloadtranscriptstateful/interfaces/IWebChatTranscriptConfig.d.ts +1 -0
- package/lib/types/components/livechatwidget/common/authHelper.d.ts +1 -1
- package/lib/types/components/livechatwidget/common/createAdapter.d.ts +1 -1
- package/lib/types/components/livechatwidget/common/createDownloadTranscriptProps.d.ts +2 -1
- package/lib/types/components/livechatwidget/common/createInternetConnectionChangeHandler.d.ts +2 -1
- package/lib/types/components/livechatwidget/common/endChat.d.ts +1 -1
- package/lib/types/components/livechatwidget/common/getMockChatSDKIfApplicable.d.ts +1 -1
- package/lib/types/components/livechatwidget/common/reconnectChatHelper.d.ts +2 -2
- package/lib/types/components/livechatwidget/common/setPostChatContextAndLoadSurvey.d.ts +1 -1
- package/lib/types/components/livechatwidget/common/startChat.d.ts +2 -2
- package/lib/types/components/livechatwidget/common/startChatErrorHandler.d.ts +1 -1
- package/lib/types/components/livechatwidget/common/startProactiveChat.d.ts +1 -1
- package/lib/types/components/livechatwidget/interfaces/IFeatureConfigProps.d.ts +3 -0
- package/lib/types/components/livechatwidget/interfaces/ILiveChatWidgetProps.d.ts +9 -7
- package/lib/types/components/webchatcontainerstateful/common/utils/FileAttachmentIconManager.d.ts +1 -1
- package/lib/types/components/webchatcontainerstateful/interfaces/IWebChatProps.d.ts +1 -1
- package/lib/types/components/webchatcontainerstateful/webchatcontroller/enums/WebChatActionType.d.ts +2 -1
- package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityMiddleware.d.ts +1 -1
- package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/avatarMiddleware.d.ts +1 -1
- package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/attachmentUploadValidatorMiddleware.d.ts +1 -1
- package/lib/types/hooks/useChatSDKStore.d.ts +1 -1
- package/lib/types/hooks/useDebounce.d.ts +1 -1
- package/package.json +17 -8
|
@@ -1,15 +1,22 @@
|
|
|
1
1
|
import { LogLevel, TelemetryEvent } from "../../common/telemetry/TelemetryConstants";
|
|
2
|
-
import { ConfirmationPane } from "@microsoft/omnichannel-chat-components";
|
|
3
2
|
import React, { useEffect } from "react";
|
|
4
|
-
import { findAllFocusableElement, findParentFocusableElementsWithoutChildContainer, preventFocusToMoveOutOfElement, setFocusOnElement, setFocusOnSendBox, setTabIndices } from "../../common/utils";
|
|
3
|
+
import { createTimer, findAllFocusableElement, findParentFocusableElementsWithoutChildContainer, preventFocusToMoveOutOfElement, setFocusOnElement, setFocusOnSendBox, setTabIndices } from "../../common/utils";
|
|
4
|
+
import { ConfirmationPane } from "@microsoft/omnichannel-chat-components";
|
|
5
|
+
import { ConfirmationState } from "../../common/Constants";
|
|
5
6
|
import { DimLayer } from "../dimlayer/DimLayer";
|
|
6
7
|
import { LiveChatWidgetActionType } from "../../contexts/common/LiveChatWidgetActionType";
|
|
7
8
|
import { TelemetryHelper } from "../../common/telemetry/TelemetryHelper";
|
|
8
9
|
import useChatContextStore from "../../hooks/useChatContextStore";
|
|
9
|
-
|
|
10
|
+
let uiTimer;
|
|
10
11
|
|
|
11
12
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
12
13
|
export const ConfirmationPaneStateful = props => {
|
|
14
|
+
useEffect(() => {
|
|
15
|
+
uiTimer = createTimer();
|
|
16
|
+
TelemetryHelper.logLoadingEvent(LogLevel.INFO, {
|
|
17
|
+
Event: TelemetryEvent.UXConfirmationPaneStart
|
|
18
|
+
});
|
|
19
|
+
}, []);
|
|
13
20
|
const initialTabIndexMap = new Map();
|
|
14
21
|
let elements = [];
|
|
15
22
|
const [state, dispatch] = useChatContextStore();
|
|
@@ -76,6 +83,10 @@ export const ConfirmationPaneStateful = props => {
|
|
|
76
83
|
TelemetryHelper.logLoadingEvent(LogLevel.INFO, {
|
|
77
84
|
Event: TelemetryEvent.ConfirmationPaneLoaded
|
|
78
85
|
});
|
|
86
|
+
TelemetryHelper.logLoadingEvent(LogLevel.INFO, {
|
|
87
|
+
Event: TelemetryEvent.UXConfirmationPaneCompleted,
|
|
88
|
+
ElapsedTimeInMilliseconds: uiTimer.milliSecondsElapsed
|
|
89
|
+
});
|
|
79
90
|
}, []);
|
|
80
91
|
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(DimLayer, {
|
|
81
92
|
brightness: (controlProps === null || controlProps === void 0 ? void 0 : controlProps.brightnessValueOnDim) ?? "0.2"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { LogLevel, TelemetryEvent } from "../../common/telemetry/TelemetryConstants";
|
|
2
2
|
import React, { useCallback, useEffect, useState } from "react";
|
|
3
|
-
import { findAllFocusableElement, findParentFocusableElementsWithoutChildContainer, formatTemplateString, preventFocusToMoveOutOfElement, setFocusOnElement, setFocusOnSendBox, setTabIndices } from "../../common/utils";
|
|
3
|
+
import { createTimer, findAllFocusableElement, findParentFocusableElementsWithoutChildContainer, formatTemplateString, preventFocusToMoveOutOfElement, setFocusOnElement, setFocusOnSendBox, setTabIndices } from "../../common/utils";
|
|
4
4
|
import { DimLayer } from "../dimlayer/DimLayer";
|
|
5
5
|
import { InputValidationPane } from "@microsoft/omnichannel-chat-components";
|
|
6
6
|
import { LiveChatWidgetActionType } from "../../contexts/common/LiveChatWidgetActionType";
|
|
@@ -11,8 +11,16 @@ import { TelemetryHelper } from "../../common/telemetry/TelemetryHelper";
|
|
|
11
11
|
import { defaultMiddlewareLocalizedTexts } from "../webchatcontainerstateful/common/defaultProps/defaultMiddlewareLocalizedTexts";
|
|
12
12
|
import useChatContextStore from "../../hooks/useChatContextStore";
|
|
13
13
|
import useFacadeSDKStore from "../../hooks/useFacadeChatSDKStore";
|
|
14
|
+
let uiTimer;
|
|
14
15
|
export const EmailTranscriptPaneStateful = props => {
|
|
15
16
|
var _props$controlProps;
|
|
17
|
+
// this is to ensure the telemetry is set only once and start the load timer
|
|
18
|
+
useEffect(() => {
|
|
19
|
+
uiTimer = createTimer();
|
|
20
|
+
TelemetryHelper.logLoadingEvent(LogLevel.INFO, {
|
|
21
|
+
Event: TelemetryEvent.UXEmailTranscriptPaneStart
|
|
22
|
+
});
|
|
23
|
+
}, []);
|
|
16
24
|
const initialTabIndexMap = new Map();
|
|
17
25
|
let elements = [];
|
|
18
26
|
const [state, dispatch] = useChatContextStore();
|
|
@@ -44,22 +52,24 @@ export const EmailTranscriptPaneStateful = props => {
|
|
|
44
52
|
attachmentMessage: (props === null || props === void 0 ? void 0 : props.attachmentMessage) ?? "The following attachment was uploaded during the conversation:"
|
|
45
53
|
};
|
|
46
54
|
try {
|
|
55
|
+
var _state$domainStates2, _state$domainStates2$;
|
|
47
56
|
await (facadeChatSDK === null || facadeChatSDK === void 0 ? void 0 : facadeChatSDK.emailLiveChatTranscript(chatTranscriptBody, {
|
|
48
57
|
liveChatContext
|
|
49
58
|
}));
|
|
50
|
-
NotificationHandler.notifySuccess(NotificationScenarios.EmailAddressSaved, defaultMiddlewareLocalizedTexts === null || defaultMiddlewareLocalizedTexts === void 0 ? void 0 : defaultMiddlewareLocalizedTexts.MIDDLEWARE_BANNER_FILE_EMAIL_ADDRESS_RECORDED_SUCCESS);
|
|
59
|
+
NotificationHandler.notifySuccess(NotificationScenarios.EmailAddressSaved, (state === null || state === void 0 ? void 0 : (_state$domainStates2 = state.domainStates) === null || _state$domainStates2 === void 0 ? void 0 : (_state$domainStates2$ = _state$domainStates2.middlewareLocalizedTexts) === null || _state$domainStates2$ === void 0 ? void 0 : _state$domainStates2$.MIDDLEWARE_BANNER_FILE_EMAIL_ADDRESS_RECORDED_SUCCESS) ?? (defaultMiddlewareLocalizedTexts === null || defaultMiddlewareLocalizedTexts === void 0 ? void 0 : defaultMiddlewareLocalizedTexts.MIDDLEWARE_BANNER_FILE_EMAIL_ADDRESS_RECORDED_SUCCESS));
|
|
51
60
|
TelemetryHelper.logActionEvent(LogLevel.INFO, {
|
|
52
61
|
Event: TelemetryEvent.EmailTranscriptSent,
|
|
53
62
|
Description: "Transcript sent to email successfully."
|
|
54
63
|
});
|
|
55
64
|
} catch (ex) {
|
|
65
|
+
var _state$domainStates3, _state$domainStates3$;
|
|
56
66
|
TelemetryHelper.logActionEvent(LogLevel.ERROR, {
|
|
57
67
|
Event: TelemetryEvent.EmailTranscriptFailed,
|
|
58
68
|
ExceptionDetails: {
|
|
59
69
|
exception: ex
|
|
60
70
|
}
|
|
61
71
|
});
|
|
62
|
-
const message = formatTemplateString(defaultMiddlewareLocalizedTexts.MIDDLEWARE_BANNER_FILE_EMAIL_ADDRESS_RECORDED_ERROR, [email]);
|
|
72
|
+
const message = formatTemplateString((state === null || state === void 0 ? void 0 : (_state$domainStates3 = state.domainStates) === null || _state$domainStates3 === void 0 ? void 0 : (_state$domainStates3$ = _state$domainStates3.middlewareLocalizedTexts) === null || _state$domainStates3$ === void 0 ? void 0 : _state$domainStates3$.MIDDLEWARE_BANNER_FILE_EMAIL_ADDRESS_RECORDED_ERROR) ?? defaultMiddlewareLocalizedTexts.MIDDLEWARE_BANNER_FILE_EMAIL_ADDRESS_RECORDED_ERROR, [email]);
|
|
63
73
|
NotificationHandler.notifyError(NotificationScenarios.EmailTranscriptError, (props === null || props === void 0 ? void 0 : props.bannerMessageOnError) ?? message);
|
|
64
74
|
}
|
|
65
75
|
}, [props.attachmentMessage, props.bannerMessageOnError, facadeChatSDK, state.domainStates.liveChatContext]);
|
|
@@ -94,6 +104,10 @@ export const EmailTranscriptPaneStateful = props => {
|
|
|
94
104
|
TelemetryHelper.logLoadingEvent(LogLevel.INFO, {
|
|
95
105
|
Event: TelemetryEvent.EmailTranscriptLoaded
|
|
96
106
|
});
|
|
107
|
+
TelemetryHelper.logLoadingEvent(LogLevel.INFO, {
|
|
108
|
+
Event: TelemetryEvent.UXEmailTranscriptPaneCompleted,
|
|
109
|
+
ElapsedTimeInMilliseconds: uiTimer.milliSecondsElapsed
|
|
110
|
+
});
|
|
97
111
|
}, [initialEmail]);
|
|
98
112
|
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(DimLayer, {
|
|
99
113
|
brightness: (controlProps === null || controlProps === void 0 ? void 0 : controlProps.brightnessValueOnDim) ?? "0.2"
|
|
@@ -9,13 +9,21 @@ import { NewMessageNotificationSoundBase64 } from "../../assets/Audios";
|
|
|
9
9
|
import { NotificationHandler } from "../webchatcontainerstateful/webchatcontroller/notification/NotificationHandler";
|
|
10
10
|
import { NotificationScenarios } from "../webchatcontainerstateful/webchatcontroller/enums/NotificationScenarios";
|
|
11
11
|
import { TelemetryHelper } from "../../common/telemetry/TelemetryHelper";
|
|
12
|
+
import { createTimer } from "../../common/utils";
|
|
12
13
|
import { downloadTranscript } from "./downloadtranscriptstateful/DownloadTranscriptStateful";
|
|
13
14
|
import useChatContextStore from "../../hooks/useChatContextStore";
|
|
14
15
|
import useFacadeSDKStore from "../../hooks/useFacadeChatSDKStore";
|
|
16
|
+
let uiTimer;
|
|
15
17
|
|
|
16
18
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
17
19
|
export const FooterStateful = props => {
|
|
18
20
|
var _footerProps$controlP3;
|
|
21
|
+
useEffect(() => {
|
|
22
|
+
uiTimer = createTimer();
|
|
23
|
+
TelemetryHelper.logLoadingEvent(LogLevel.INFO, {
|
|
24
|
+
Event: TelemetryEvent.UXFooterStart
|
|
25
|
+
});
|
|
26
|
+
}, []);
|
|
19
27
|
const [state, dispatch] = useChatContextStore();
|
|
20
28
|
// hideFooterDisplay - the purpose of this is to keep the footer always "active",
|
|
21
29
|
// but hide it visually in certain states (e.g., loading state) and show in some other states (e.g. active state).
|
|
@@ -92,6 +100,12 @@ export const FooterStateful = props => {
|
|
|
92
100
|
}
|
|
93
101
|
}
|
|
94
102
|
}, [state.appStates.conversationState]);
|
|
103
|
+
useEffect(() => {
|
|
104
|
+
TelemetryHelper.logLoadingEvent(LogLevel.INFO, {
|
|
105
|
+
Event: TelemetryEvent.UXFooterCompleted,
|
|
106
|
+
ElapsedTimeInMilliseconds: uiTimer.milliSecondsElapsed
|
|
107
|
+
});
|
|
108
|
+
}, []);
|
|
95
109
|
return /*#__PURE__*/React.createElement(React.Fragment, null, !hideFooterDisplay && /*#__PURE__*/React.createElement(Footer, {
|
|
96
110
|
componentOverrides: footerProps === null || footerProps === void 0 ? void 0 : footerProps.componentOverrides,
|
|
97
111
|
controlProps: controlProps,
|
|
@@ -1,16 +1,24 @@
|
|
|
1
1
|
import { LogLevel, TelemetryEvent } from "../../common/telemetry/TelemetryConstants";
|
|
2
2
|
import React, { useEffect, useRef, useState } from "react";
|
|
3
|
+
import { ConfirmationState } from "../../common/Constants";
|
|
3
4
|
import { ConversationState } from "../../contexts/common/ConversationState";
|
|
5
|
+
import DraggableEventEmitter from "../draggable/DraggableEventEmitter";
|
|
4
6
|
import { Header } from "@microsoft/omnichannel-chat-components";
|
|
5
7
|
import { LiveChatWidgetActionType } from "../../contexts/common/LiveChatWidgetActionType";
|
|
6
8
|
import { TelemetryHelper } from "../../common/telemetry/TelemetryHelper";
|
|
9
|
+
import { createTimer } from "../../common/utils";
|
|
7
10
|
import { defaultOutOfOfficeHeaderStyleProps } from "./common/styleProps/defaultOutOfOfficeHeaderStyleProps";
|
|
8
11
|
import useChatAdapterStore from "../../hooks/useChatAdapterStore";
|
|
9
12
|
import useChatContextStore from "../../hooks/useChatContextStore";
|
|
10
|
-
|
|
11
|
-
import DraggableEventEmitter from "../draggable/DraggableEventEmitter";
|
|
13
|
+
let uiTimer;
|
|
12
14
|
export const HeaderStateful = props => {
|
|
13
15
|
var _state$domainStates$l, _state$domainStates$l2, _state$domainStates, _headerProps$controlP, _headerProps$controlP2, _headerProps$controlP3, _outOfOfficeHeaderPro, _state$domainStates3;
|
|
16
|
+
useEffect(() => {
|
|
17
|
+
uiTimer = createTimer();
|
|
18
|
+
TelemetryHelper.logLoadingEvent(LogLevel.INFO, {
|
|
19
|
+
Event: TelemetryEvent.UXHeaderStart
|
|
20
|
+
});
|
|
21
|
+
}, []);
|
|
14
22
|
const [state, dispatch] = useChatContextStore();
|
|
15
23
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
16
24
|
const [adapter] = useChatAdapterStore();
|
|
@@ -105,6 +113,12 @@ export const HeaderStateful = props => {
|
|
|
105
113
|
elementId: outOfOperatingHours || state.appStates.conversationState === ConversationState.OutOfOffice ? outOfOfficeControlProps.id : controlProps.id,
|
|
106
114
|
targetWindow: props.draggableEventEmitterTargetWindow ?? window
|
|
107
115
|
};
|
|
116
|
+
useEffect(() => {
|
|
117
|
+
TelemetryHelper.logLoadingEvent(LogLevel.INFO, {
|
|
118
|
+
Event: TelemetryEvent.UXHeaderCompleted,
|
|
119
|
+
ElapsedTimeInMilliseconds: uiTimer.milliSecondsElapsed
|
|
120
|
+
});
|
|
121
|
+
}, []);
|
|
108
122
|
if (props.draggable === true) {
|
|
109
123
|
var _generalStyleProps;
|
|
110
124
|
const styleProps = outOfOperatingHours || state.appStates.conversationState === ConversationState.OutOfOffice ? outOfOfficeStyleProps : headerProps === null || headerProps === void 0 ? void 0 : headerProps.styleProps;
|
|
@@ -11,13 +11,14 @@ import { getMockChatSDKIfApplicable } from "./common/getMockChatSDKIfApplicable"
|
|
|
11
11
|
import { isNullOrUndefined } from "../../common/utils";
|
|
12
12
|
import overridePropsOnMockIfApplicable from "./common/overridePropsOnMockIfApplicable";
|
|
13
13
|
export const LiveChatWidget = props => {
|
|
14
|
-
var _props$mock, _props$chatConfig, _props$chatConfig$Liv;
|
|
14
|
+
var _props$mock, _props$featureConfigP, _props$chatConfig, _props$chatConfig$Liv;
|
|
15
15
|
const reducer = createReducer();
|
|
16
16
|
const [state, dispatch] = useReducer(reducer, getLiveChatWidgetContextInitialState(props));
|
|
17
17
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
18
18
|
const [adapter, setAdapter] = useState(undefined);
|
|
19
19
|
const [facadeChatSDK, setFacadeChatSDK] = useState(undefined);
|
|
20
20
|
const chatSDK = getMockChatSDKIfApplicable(props.chatSDK, props === null || props === void 0 ? void 0 : (_props$mock = props.mock) === null || _props$mock === void 0 ? void 0 : _props$mock.type);
|
|
21
|
+
const disableReauthentication = ((_props$featureConfigP = props.featureConfigProps) === null || _props$featureConfigP === void 0 ? void 0 : _props$featureConfigP.disableReauthentication) === true;
|
|
21
22
|
overridePropsOnMockIfApplicable(props);
|
|
22
23
|
if (!props.chatConfig) {
|
|
23
24
|
throw new Error("chatConfig is required");
|
|
@@ -34,7 +35,7 @@ export const LiveChatWidget = props => {
|
|
|
34
35
|
"getAuthToken": props === null || props === void 0 ? void 0 : props.getAuthToken,
|
|
35
36
|
//when type is not undefined, it means the SDK is mocked
|
|
36
37
|
"isSDKMocked": !isNullOrUndefined(props === null || props === void 0 ? void 0 : (_props$mock2 = props.mock) === null || _props$mock2 === void 0 ? void 0 : _props$mock2.type)
|
|
37
|
-
}));
|
|
38
|
+
}, disableReauthentication));
|
|
38
39
|
}
|
|
39
40
|
return /*#__PURE__*/React.createElement(FacadeChatSDKStore.Provider, {
|
|
40
41
|
value: [facadeChatSDK, setFacadeChatSDK]
|
|
@@ -14,19 +14,21 @@ const isInternetConnected = async () => {
|
|
|
14
14
|
return false;
|
|
15
15
|
}
|
|
16
16
|
};
|
|
17
|
-
export const createInternetConnectionChangeHandler = async
|
|
17
|
+
export const createInternetConnectionChangeHandler = async state => {
|
|
18
18
|
const handler = async () => {
|
|
19
19
|
const connected = await isInternetConnected();
|
|
20
20
|
if (!connected) {
|
|
21
|
+
var _state$domainStates, _state$domainStates$m;
|
|
21
22
|
TelemetryHelper.logActionEvent(LogLevel.WARN, {
|
|
22
23
|
Event: TelemetryEvent.NetworkDisconnected
|
|
23
24
|
});
|
|
24
|
-
NotificationHandler.notifyError(NotificationScenarios.InternetConnection, defaultMiddlewareLocalizedTexts.MIDDLEWARE_BANNER_NO_INTERNET_CONNECTION);
|
|
25
|
+
NotificationHandler.notifyError(NotificationScenarios.InternetConnection, (state === null || state === void 0 ? void 0 : (_state$domainStates = state.domainStates) === null || _state$domainStates === void 0 ? void 0 : (_state$domainStates$m = _state$domainStates.middlewareLocalizedTexts) === null || _state$domainStates$m === void 0 ? void 0 : _state$domainStates$m.MIDDLEWARE_BANNER_NO_INTERNET_CONNECTION) ?? defaultMiddlewareLocalizedTexts.MIDDLEWARE_BANNER_NO_INTERNET_CONNECTION);
|
|
25
26
|
} else {
|
|
27
|
+
var _state$domainStates2, _state$domainStates2$;
|
|
26
28
|
TelemetryHelper.logActionEvent(LogLevel.WARN, {
|
|
27
29
|
Event: TelemetryEvent.NetworkReconnected
|
|
28
30
|
});
|
|
29
|
-
NotificationHandler.notifySuccess(NotificationScenarios.InternetConnection, defaultMiddlewareLocalizedTexts.MIDDLEWARE_BANNER_INTERNET_BACK_ONLINE);
|
|
31
|
+
NotificationHandler.notifySuccess(NotificationScenarios.InternetConnection, (state === null || state === void 0 ? void 0 : (_state$domainStates2 = state.domainStates) === null || _state$domainStates2 === void 0 ? void 0 : (_state$domainStates2$ = _state$domainStates2.middlewareLocalizedTexts) === null || _state$domainStates2$ === void 0 ? void 0 : _state$domainStates2$.MIDDLEWARE_BANNER_INTERNET_BACK_ONLINE) ?? defaultMiddlewareLocalizedTexts.MIDDLEWARE_BANNER_INTERNET_BACK_ONLINE);
|
|
30
32
|
BroadcastService.postMessage({
|
|
31
33
|
eventName: BroadcastEvent.NetworkReconnected
|
|
32
34
|
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -54,8 +54,15 @@ import { startProactiveChat } from "../common/startProactiveChat";
|
|
|
54
54
|
import useChatAdapterStore from "../../../hooks/useChatAdapterStore";
|
|
55
55
|
import useChatContextStore from "../../../hooks/useChatContextStore";
|
|
56
56
|
import useFacadeSDKStore from "../../../hooks/useFacadeChatSDKStore";
|
|
57
|
+
let uiTimer;
|
|
57
58
|
export const LiveChatWidgetStateful = props => {
|
|
58
59
|
var _props$webChatContain, _props$styleProps, _props$controlProps, _props$controlProps3, _state$appStates7, _props$webChatContain5, _state$appStates14, _props$webChatContain7, _props$webChatContain8, _props$controlProps12, _props$draggableChatW, _props$draggableChatW2, _props$draggableChatW3, _props$draggableChatW4, _props$draggableChatW5, _livechatProps$webCha, _props$webChatContain9, _props$webChatContain10, _props$webChatContain11, _props$webChatContain12, _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$compon8, _livechatProps$contro10, _livechatProps$contro11, _livechatProps$compon9, _livechatProps$contro12, _livechatProps$compon10, _livechatProps$contro13, _livechatProps$compon11, _livechatProps$compon12, _livechatProps$compon13;
|
|
60
|
+
useEffect(() => {
|
|
61
|
+
uiTimer = createTimer();
|
|
62
|
+
TelemetryHelper.logLoadingEvent(LogLevel.INFO, {
|
|
63
|
+
Event: TelemetryEvent.UXLivechatwidgetStart
|
|
64
|
+
});
|
|
65
|
+
}, []);
|
|
59
66
|
const [state, dispatch] = useChatContextStore();
|
|
60
67
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
61
68
|
const [adapter, setAdapter] = useChatAdapterStore();
|
|
@@ -212,7 +219,7 @@ export const LiveChatWidgetStateful = props => {
|
|
|
212
219
|
state.domainStates.confirmationState = ConfirmationState.NotSet;
|
|
213
220
|
setupClientDataStore();
|
|
214
221
|
registerTelemetryLoggers(props, dispatch);
|
|
215
|
-
createInternetConnectionChangeHandler();
|
|
222
|
+
createInternetConnectionChangeHandler(state);
|
|
216
223
|
dispatch({
|
|
217
224
|
type: LiveChatWidgetActionType.SET_WIDGET_ELEMENT_ID,
|
|
218
225
|
payload: widgetElementId
|
|
@@ -574,6 +581,26 @@ export const LiveChatWidgetStateful = props => {
|
|
|
574
581
|
eventName: BroadcastEvent.NewMessageNotification
|
|
575
582
|
});
|
|
576
583
|
});
|
|
584
|
+
facadeChatSDK === null || facadeChatSDK === void 0 ? void 0 : facadeChatSDK.onAgentEndSession(event => {
|
|
585
|
+
var _inMemoryState$appSta6;
|
|
586
|
+
const inMemoryState = executeReducer(state, {
|
|
587
|
+
type: LiveChatWidgetActionType.GET_IN_MEMORY_STATE,
|
|
588
|
+
payload: null
|
|
589
|
+
});
|
|
590
|
+
if ("participantsRemoved" in event && (inMemoryState === null || inMemoryState === void 0 ? void 0 : (_inMemoryState$appSta6 = inMemoryState.appStates) === null || _inMemoryState$appSta6 === void 0 ? void 0 : _inMemoryState$appSta6.conversationState) === ConversationState.Active) {
|
|
591
|
+
setWebChatStyles(styles => {
|
|
592
|
+
return {
|
|
593
|
+
...styles,
|
|
594
|
+
hideSendBox: true
|
|
595
|
+
};
|
|
596
|
+
});
|
|
597
|
+
TelemetryHelper.logSDKEvent(LogLevel.INFO, {
|
|
598
|
+
Event: TelemetryEvent.ParticipantsRemovedEvent,
|
|
599
|
+
Description: "Participants removed event received."
|
|
600
|
+
});
|
|
601
|
+
return;
|
|
602
|
+
}
|
|
603
|
+
});
|
|
577
604
|
}
|
|
578
605
|
if (state.appStates.conversationState === ConversationState.InActive) {
|
|
579
606
|
var _props$webChatContain2, _props$webChatContain3;
|
|
@@ -703,13 +730,13 @@ export const LiveChatWidgetStateful = props => {
|
|
|
703
730
|
|
|
704
731
|
// Handle Chat disconnect cases
|
|
705
732
|
useEffect(() => {
|
|
706
|
-
var _inMemoryState$
|
|
733
|
+
var _inMemoryState$appSta7;
|
|
707
734
|
const inMemoryState = executeReducer(state, {
|
|
708
735
|
type: LiveChatWidgetActionType.GET_IN_MEMORY_STATE,
|
|
709
736
|
payload: null
|
|
710
737
|
});
|
|
711
738
|
handleChatDisconnect(props, inMemoryState, setWebChatStyles);
|
|
712
|
-
const chatDisconnectState = inMemoryState === null || inMemoryState === void 0 ? void 0 : (_inMemoryState$
|
|
739
|
+
const chatDisconnectState = inMemoryState === null || inMemoryState === void 0 ? void 0 : (_inMemoryState$appSta7 = inMemoryState.appStates) === null || _inMemoryState$appSta7 === void 0 ? void 0 : _inMemoryState$appSta7.chatDisconnectEventReceived;
|
|
713
740
|
if (chatDisconnectState && adapter) {
|
|
714
741
|
try {
|
|
715
742
|
adapter.end();
|
|
@@ -731,6 +758,12 @@ export const LiveChatWidgetStateful = props => {
|
|
|
731
758
|
payload: (_props$webChatContain6 = props.webChatContainerProps) === null || _props$webChatContain6 === void 0 ? void 0 : _props$webChatContain6.renderingMiddlewareProps
|
|
732
759
|
});
|
|
733
760
|
}, [(_props$webChatContain7 = props.webChatContainerProps) === null || _props$webChatContain7 === void 0 ? void 0 : _props$webChatContain7.renderingMiddlewareProps]);
|
|
761
|
+
useEffect(() => {
|
|
762
|
+
TelemetryHelper.logLoadingEvent(LogLevel.INFO, {
|
|
763
|
+
Event: TelemetryEvent.UXLivechatwidgetCompleted,
|
|
764
|
+
ElapsedTimeInMilliseconds: uiTimer.milliSecondsElapsed
|
|
765
|
+
});
|
|
766
|
+
}, []);
|
|
734
767
|
const initiateEndChatOnBrowserUnload = () => {
|
|
735
768
|
var _DataStoreManager$cli;
|
|
736
769
|
TelemetryHelper.logActionEvent(LogLevel.INFO, {
|
|
@@ -775,7 +808,7 @@ export const LiveChatWidgetStateful = props => {
|
|
|
775
808
|
const chatWidgetDraggableConfig = {
|
|
776
809
|
elementId: widgetElementId,
|
|
777
810
|
channel: ((_props$controlProps12 = props.controlProps) === null || _props$controlProps12 === void 0 ? void 0 : _props$controlProps12.widgetInstanceId) ?? "lcw",
|
|
778
|
-
disabled: ((_props$draggableChatW = props.draggableChatWidgetProps) === null || _props$draggableChatW === void 0 ? void 0 : _props$draggableChatW.disabled)
|
|
811
|
+
disabled: ((_props$draggableChatW = props.draggableChatWidgetProps) === null || _props$draggableChatW === void 0 ? void 0 : _props$draggableChatW.disabled) !== true // Draggable by default, unless explicitly disabled
|
|
779
812
|
};
|
|
780
813
|
|
|
781
814
|
// Disable receiving IDraggableEvent in current window
|
|
@@ -1,16 +1,23 @@
|
|
|
1
1
|
import { LogLevel, TelemetryEvent } from "../../common/telemetry/TelemetryConstants";
|
|
2
2
|
import React, { useEffect } from "react";
|
|
3
|
+
import { createTimer, findAllFocusableElement } from "../../common/utils";
|
|
3
4
|
import { LoadingPane } from "@microsoft/omnichannel-chat-components";
|
|
4
5
|
import { TelemetryHelper } from "../../common/telemetry/TelemetryHelper";
|
|
5
6
|
import { defaultGeneralLoadingPaneStyleProps } from "./common/defaultStyleProps/defaultgeneralLoadingPaneStyleProps";
|
|
6
|
-
import {
|
|
7
|
+
import { errorUILoadingPaneStyleProps } from "./common/errorUIStyleProps/errorUILoadingPaneStyleProps";
|
|
7
8
|
import useChatContextStore from "../../hooks/useChatContextStore";
|
|
8
9
|
import useWindowDimensions from "../../hooks/useWindowDimensions";
|
|
9
|
-
|
|
10
|
+
let uiTimer;
|
|
10
11
|
|
|
11
12
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
12
13
|
export const LoadingPaneStateful = props => {
|
|
13
14
|
var _loadingPaneProps$sty, _startChatErrorPanePr, _startChatErrorPanePr2;
|
|
15
|
+
useEffect(() => {
|
|
16
|
+
uiTimer = createTimer();
|
|
17
|
+
TelemetryHelper.logLoadingEvent(LogLevel.INFO, {
|
|
18
|
+
Event: TelemetryEvent.UXLoadingPaneStart
|
|
19
|
+
});
|
|
20
|
+
}, []);
|
|
14
21
|
const [state] = useChatContextStore();
|
|
15
22
|
const {
|
|
16
23
|
loadingPaneProps,
|
|
@@ -53,6 +60,16 @@ export const LoadingPaneStateful = props => {
|
|
|
53
60
|
Event: TelemetryEvent.LoadingPaneLoaded,
|
|
54
61
|
Description: "Loading pane loaded."
|
|
55
62
|
});
|
|
63
|
+
TelemetryHelper.logLoadingEvent(LogLevel.INFO, {
|
|
64
|
+
Event: TelemetryEvent.UXLoadingPaneCompleted,
|
|
65
|
+
ElapsedTimeInMilliseconds: uiTimer.milliSecondsElapsed
|
|
66
|
+
});
|
|
67
|
+
return () => {
|
|
68
|
+
TelemetryHelper.logLoadingEvent(LogLevel.INFO, {
|
|
69
|
+
Event: TelemetryEvent.LoadingPaneUnloaded,
|
|
70
|
+
Description: "Loading pane unmount."
|
|
71
|
+
});
|
|
72
|
+
};
|
|
56
73
|
}, []);
|
|
57
74
|
return /*#__PURE__*/React.createElement(LoadingPane, {
|
|
58
75
|
componentOverrides: loadingPaneProps === null || loadingPaneProps === void 0 ? void 0 : loadingPaneProps.componentOverrides,
|
|
@@ -1,18 +1,26 @@
|
|
|
1
|
+
import { ConfirmationState, NotificationPaneConstants } from "../../common/Constants";
|
|
2
|
+
import { LogLevel, TelemetryEvent } from "../../common/telemetry/TelemetryConstants";
|
|
1
3
|
import React, { useEffect, useRef } from "react";
|
|
4
|
+
import { LiveChatWidgetActionType } from "../../contexts/common/LiveChatWidgetActionType";
|
|
2
5
|
import { NotificationPane } from "@microsoft/omnichannel-chat-components";
|
|
6
|
+
import { NotificationScenarios } from "../webchatcontainerstateful/webchatcontroller/enums/NotificationScenarios";
|
|
7
|
+
import { TelemetryHelper } from "../../common/telemetry/TelemetryHelper";
|
|
8
|
+
import { createTimer } from "../../common/utils";
|
|
9
|
+
import { defaultChatDisconnectControlProps } from "./defaultProps/defaultChatDisconnectControlProps";
|
|
10
|
+
import { defaultChatDisconnectStyleProps } from "./defaultProps/defaultChatDisconnectStyleProps";
|
|
3
11
|
import { hooks } from "botframework-webchat";
|
|
4
12
|
import { useCallback } from "react";
|
|
5
|
-
import { NotificationScenarios } from "../webchatcontainerstateful/webchatcontroller/enums/NotificationScenarios";
|
|
6
13
|
import useChatAdapterStore from "../../hooks/useChatAdapterStore";
|
|
7
14
|
import useChatContextStore from "../../hooks/useChatContextStore";
|
|
8
|
-
|
|
9
|
-
import { LogLevel, TelemetryEvent } from "../../common/telemetry/TelemetryConstants";
|
|
10
|
-
import { LiveChatWidgetActionType } from "../../contexts/common/LiveChatWidgetActionType";
|
|
11
|
-
import { ConfirmationState, NotificationPaneConstants } from "../../common/Constants";
|
|
12
|
-
import { defaultChatDisconnectStyleProps } from "./defaultProps/defaultChatDisconnectStyleProps";
|
|
13
|
-
import { defaultChatDisconnectControlProps } from "./defaultProps/defaultChatDisconnectControlProps";
|
|
15
|
+
let uiTimer;
|
|
14
16
|
export const NotificationPaneStateful = props => {
|
|
15
17
|
var _state$domainStates, _state$domainStates3;
|
|
18
|
+
useEffect(() => {
|
|
19
|
+
uiTimer = createTimer();
|
|
20
|
+
TelemetryHelper.logLoadingEvent(LogLevel.INFO, {
|
|
21
|
+
Event: TelemetryEvent.UXNotificationPaneStart
|
|
22
|
+
});
|
|
23
|
+
}, []);
|
|
16
24
|
const {
|
|
17
25
|
notificationPaneProps,
|
|
18
26
|
notificationScenarioType,
|
|
@@ -162,6 +170,12 @@ export const NotificationPaneStateful = props => {
|
|
|
162
170
|
// TODO additional scenarios to be added...
|
|
163
171
|
}
|
|
164
172
|
|
|
173
|
+
useEffect(() => {
|
|
174
|
+
TelemetryHelper.logLoadingEvent(LogLevel.INFO, {
|
|
175
|
+
Event: TelemetryEvent.UXNotificationPaneCompleted,
|
|
176
|
+
ElapsedTimeInMilliseconds: uiTimer.milliSecondsElapsed
|
|
177
|
+
});
|
|
178
|
+
}, []);
|
|
165
179
|
return /*#__PURE__*/React.createElement(NotificationPane, genericPropsObj);
|
|
166
180
|
};
|
|
167
181
|
export default NotificationPaneStateful;
|
|
@@ -1,12 +1,19 @@
|
|
|
1
1
|
import { LogLevel, TelemetryEvent } from "../../common/telemetry/TelemetryConstants";
|
|
2
2
|
import React, { useEffect } from "react";
|
|
3
|
+
import { createTimer, findAllFocusableElement } from "../../common/utils";
|
|
3
4
|
import { OutOfOfficeHoursPane } from "@microsoft/omnichannel-chat-components";
|
|
4
5
|
import { TelemetryHelper } from "../../common/telemetry/TelemetryHelper";
|
|
5
6
|
import { defaultGeneralStyleProps } from "./common/defaultStyleProps/defaultgeneralOOOHPaneStyleProps";
|
|
6
|
-
import { findAllFocusableElement } from "../../common/utils";
|
|
7
7
|
import useChatContextStore from "../../hooks/useChatContextStore";
|
|
8
|
+
let uiTimer;
|
|
8
9
|
export const OutOfOfficeHoursPaneStateful = props => {
|
|
9
10
|
var _props$styleProps;
|
|
11
|
+
useEffect(() => {
|
|
12
|
+
uiTimer = createTimer();
|
|
13
|
+
TelemetryHelper.logLoadingEvent(LogLevel.INFO, {
|
|
14
|
+
Event: TelemetryEvent.UXOOHPaneStart
|
|
15
|
+
});
|
|
16
|
+
}, []);
|
|
10
17
|
const [state] = useChatContextStore();
|
|
11
18
|
const generalStyleProps = Object.assign({}, defaultGeneralStyleProps, (_props$styleProps = props.styleProps) === null || _props$styleProps === void 0 ? void 0 : _props$styleProps.generalStyleProps);
|
|
12
19
|
const styleProps = {
|
|
@@ -28,6 +35,10 @@ export const OutOfOfficeHoursPaneStateful = props => {
|
|
|
28
35
|
TelemetryHelper.logLoadingEvent(LogLevel.INFO, {
|
|
29
36
|
Event: TelemetryEvent.OutOfOfficePaneLoaded
|
|
30
37
|
});
|
|
38
|
+
TelemetryHelper.logLoadingEvent(LogLevel.INFO, {
|
|
39
|
+
Event: TelemetryEvent.UXOOHPaneCompleted,
|
|
40
|
+
ElapsedTimeInMilliseconds: uiTimer.milliSecondsElapsed
|
|
41
|
+
});
|
|
31
42
|
}, []);
|
|
32
43
|
return /*#__PURE__*/React.createElement(OutOfOfficeHoursPane, {
|
|
33
44
|
componentOverrides: props.componentOverrides,
|
|
@@ -1,12 +1,19 @@
|
|
|
1
|
+
import { LogLevel, TelemetryEvent } from "../../common/telemetry/TelemetryConstants";
|
|
1
2
|
import React, { useEffect } from "react";
|
|
3
|
+
import { createTimer, findAllFocusableElement } from "../../common/utils";
|
|
2
4
|
import { LoadingPane } from "@microsoft/omnichannel-chat-components";
|
|
5
|
+
import { TelemetryHelper } from "../../common/telemetry/TelemetryHelper";
|
|
3
6
|
import { defaultGeneralPostChatLoadingPaneStyleProps } from "./common/defaultgeneralPostChatLoadingPaneStyleProps";
|
|
4
|
-
import { findAllFocusableElement } from "../../common/utils";
|
|
5
7
|
import useChatContextStore from "../../hooks/useChatContextStore";
|
|
6
|
-
|
|
7
|
-
import { LogLevel, TelemetryEvent } from "../../common/telemetry/TelemetryConstants";
|
|
8
|
+
let uiTimer;
|
|
8
9
|
export const PostChatLoadingPaneStateful = props => {
|
|
9
10
|
var _props$styleProps;
|
|
11
|
+
useEffect(() => {
|
|
12
|
+
uiTimer = createTimer();
|
|
13
|
+
TelemetryHelper.logLoadingEvent(LogLevel.INFO, {
|
|
14
|
+
Event: TelemetryEvent.UXPostChatLoadingPaneStart
|
|
15
|
+
});
|
|
16
|
+
}, []);
|
|
10
17
|
const [state] = useChatContextStore();
|
|
11
18
|
const generalStyleProps = Object.assign({}, defaultGeneralPostChatLoadingPaneStyleProps, (_props$styleProps = props.styleProps) === null || _props$styleProps === void 0 ? void 0 : _props$styleProps.generalStyleProps);
|
|
12
19
|
const styleProps = {
|
|
@@ -33,6 +40,10 @@ export const PostChatLoadingPaneStateful = props => {
|
|
|
33
40
|
TelemetryHelper.logLoadingEvent(LogLevel.INFO, {
|
|
34
41
|
Event: TelemetryEvent.PostChatSurveyLoadingPaneLoaded
|
|
35
42
|
});
|
|
43
|
+
TelemetryHelper.logLoadingEvent(LogLevel.INFO, {
|
|
44
|
+
Event: TelemetryEvent.UXPostChatLoadingPaneCompleted,
|
|
45
|
+
ElapsedTimeInMilliseconds: uiTimer.milliSecondsElapsed
|
|
46
|
+
});
|
|
36
47
|
}, []);
|
|
37
48
|
return /*#__PURE__*/React.createElement(LoadingPane, {
|
|
38
49
|
componentOverrides: props.componentOverrides,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { HtmlAttributeNames, Regex } from "../../common/Constants";
|
|
2
2
|
import { LogLevel, TelemetryEvent } from "../../common/telemetry/TelemetryConstants";
|
|
3
3
|
import React, { useEffect } from "react";
|
|
4
|
-
import { extractPreChatSurveyResponseValues, findAllFocusableElement, getStateFromCache, getWidgetCacheId, isUndefinedOrEmpty, parseAdaptiveCardPayload } from "../../common/utils";
|
|
4
|
+
import { createTimer, extractPreChatSurveyResponseValues, findAllFocusableElement, getStateFromCache, getWidgetCacheId, isUndefinedOrEmpty, parseAdaptiveCardPayload } from "../../common/utils";
|
|
5
5
|
import { ConversationState } from "../../contexts/common/ConversationState";
|
|
6
6
|
import { LiveChatWidgetActionType } from "../../contexts/common/LiveChatWidgetActionType";
|
|
7
7
|
import MarkdownIt from "markdown-it";
|
|
@@ -10,10 +10,18 @@ import { TelemetryHelper } from "../../common/telemetry/TelemetryHelper";
|
|
|
10
10
|
import { defaultGeneralPreChatSurveyPaneStyleProps } from "./common/defaultStyles/defaultGeneralPreChatSurveyPaneStyleProps";
|
|
11
11
|
import { defaultPreChatSurveyLocalizedTexts } from "./common/defaultProps/defaultPreChatSurveyLocalizedTexts";
|
|
12
12
|
import useChatContextStore from "../../hooks/useChatContextStore";
|
|
13
|
+
let uiTimer;
|
|
13
14
|
|
|
14
15
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
15
16
|
export const PreChatSurveyPaneStateful = props => {
|
|
16
17
|
var _surveyProps$stylePro, _props$surveyProps, _props$surveyProps$co;
|
|
18
|
+
useEffect(() => {
|
|
19
|
+
uiTimer = createTimer();
|
|
20
|
+
TelemetryHelper.logLoadingEvent(LogLevel.INFO, {
|
|
21
|
+
Event: TelemetryEvent.UXPrechatPaneStart
|
|
22
|
+
});
|
|
23
|
+
}, []);
|
|
24
|
+
|
|
17
25
|
// Set MarkDown global variable to be used for prechat adaptive cards
|
|
18
26
|
window["markdownit"] = MarkdownIt;
|
|
19
27
|
const [state, dispatch] = useChatContextStore();
|
|
@@ -136,6 +144,10 @@ export const PreChatSurveyPaneStateful = props => {
|
|
|
136
144
|
TelemetryHelper.logLoadingEvent(LogLevel.INFO, {
|
|
137
145
|
Event: TelemetryEvent.PrechatSurveyLoaded
|
|
138
146
|
});
|
|
147
|
+
TelemetryHelper.logLoadingEvent(LogLevel.INFO, {
|
|
148
|
+
Event: TelemetryEvent.UXPrechatPaneCompleted,
|
|
149
|
+
ElapsedTimeInMilliseconds: uiTimer.milliSecondsElapsed
|
|
150
|
+
});
|
|
139
151
|
}, []);
|
|
140
152
|
return /*#__PURE__*/React.createElement(PreChatSurveyPane, {
|
|
141
153
|
controlProps: controlProps,
|
|
@@ -9,10 +9,17 @@ import { ProactiveChatPane } from "@microsoft/omnichannel-chat-components";
|
|
|
9
9
|
import { TelemetryHelper } from "../../common/telemetry/TelemetryHelper";
|
|
10
10
|
import { TelemetryTimers } from "../../common/telemetry/TelemetryManager";
|
|
11
11
|
import useChatContextStore from "../../hooks/useChatContextStore";
|
|
12
|
+
let uiTimer;
|
|
12
13
|
|
|
13
14
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
14
15
|
export const ProactiveChatPaneStateful = props => {
|
|
15
16
|
var _proactiveChatProps$c;
|
|
17
|
+
useEffect(() => {
|
|
18
|
+
uiTimer = createTimer();
|
|
19
|
+
TelemetryHelper.logLoadingEvent(LogLevel.INFO, {
|
|
20
|
+
Event: TelemetryEvent.UXProactiveChatPaneStart
|
|
21
|
+
});
|
|
22
|
+
}, []);
|
|
16
23
|
const [state, dispatch] = useChatContextStore();
|
|
17
24
|
const {
|
|
18
25
|
proactiveChatProps,
|
|
@@ -114,6 +121,10 @@ export const ProactiveChatPaneStateful = props => {
|
|
|
114
121
|
TelemetryHelper.logLoadingEvent(LogLevel.INFO, {
|
|
115
122
|
Event: TelemetryEvent.ProactiveChatPaneLoaded
|
|
116
123
|
});
|
|
124
|
+
TelemetryHelper.logLoadingEvent(LogLevel.INFO, {
|
|
125
|
+
Event: TelemetryEvent.UXProactiveChatCompleted,
|
|
126
|
+
ElapsedTimeInMilliseconds: uiTimer.milliSecondsElapsed
|
|
127
|
+
});
|
|
117
128
|
return () => {
|
|
118
129
|
clearTimeout(timeoutEvent);
|
|
119
130
|
};
|
|
@@ -1,13 +1,21 @@
|
|
|
1
1
|
import { LogLevel, TelemetryEvent } from "../../common/telemetry/TelemetryConstants";
|
|
2
2
|
import React, { useEffect } from "react";
|
|
3
|
+
import { createTimer, setFocusOnElement } from "../../common/utils";
|
|
3
4
|
import { ConversationState } from "../../contexts/common/ConversationState";
|
|
4
5
|
import { LiveChatWidgetActionType } from "../../contexts/common/LiveChatWidgetActionType";
|
|
5
6
|
import { ReconnectChatPane } from "@microsoft/omnichannel-chat-components";
|
|
6
7
|
import { TelemetryHelper } from "../../common/telemetry/TelemetryHelper";
|
|
7
|
-
import { setFocusOnElement } from "../../common/utils";
|
|
8
8
|
import useChatContextStore from "../../hooks/useChatContextStore";
|
|
9
9
|
import useFacadeChatSDKStore from "../../hooks/useFacadeChatSDKStore";
|
|
10
|
+
let uiTimer;
|
|
10
11
|
export const ReconnectChatPaneStateful = props => {
|
|
12
|
+
useEffect(() => {
|
|
13
|
+
uiTimer = createTimer();
|
|
14
|
+
TelemetryHelper.logLoadingEvent(LogLevel.INFO, {
|
|
15
|
+
Event: TelemetryEvent.UXReconnectChatPaneStart,
|
|
16
|
+
ElapsedTimeInMilliseconds: uiTimer.milliSecondsElapsed
|
|
17
|
+
});
|
|
18
|
+
}, []);
|
|
11
19
|
const [state, dispatch] = useChatContextStore();
|
|
12
20
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
13
21
|
//const chatSDK: any = useChatSDKStore();
|
|
@@ -91,6 +99,9 @@ export const ReconnectChatPaneStateful = props => {
|
|
|
91
99
|
TelemetryHelper.logLoadingEvent(LogLevel.INFO, {
|
|
92
100
|
Event: TelemetryEvent.ReconnectChatPaneLoaded
|
|
93
101
|
});
|
|
102
|
+
TelemetryHelper.logLoadingEvent(LogLevel.INFO, {
|
|
103
|
+
Event: TelemetryEvent.UXReconnectChatCompleted
|
|
104
|
+
});
|
|
94
105
|
}, []);
|
|
95
106
|
return /*#__PURE__*/React.createElement(ReconnectChatPane, {
|
|
96
107
|
componentOverrides: reconnectChatProps === null || reconnectChatProps === void 0 ? void 0 : reconnectChatProps.componentOverrides,
|
|
@@ -1,18 +1,25 @@
|
|
|
1
|
+
import { LogLevel, TelemetryEvent } from "../../common/telemetry/TelemetryConstants";
|
|
1
2
|
import React, { useEffect } from "react";
|
|
3
|
+
import { createTimer, findAllFocusableElement } from "../../common/utils";
|
|
2
4
|
import { LoadingPane } from "@microsoft/omnichannel-chat-components";
|
|
3
|
-
import {
|
|
4
|
-
import
|
|
5
|
+
import { StartChatErrorPaneConstants } from "../../common/Constants";
|
|
6
|
+
import { StartChatFailureType } from "../../contexts/common/StartChatFailureType";
|
|
5
7
|
import { TelemetryHelper } from "../../common/telemetry/TelemetryHelper";
|
|
6
|
-
import { LogLevel, TelemetryEvent } from "../../common/telemetry/TelemetryConstants";
|
|
7
8
|
import { defaultStartChatErrorPaneGeneralStyleProps } from "./common/defaultStartChatErrorPaneGeneralStyleProps";
|
|
8
|
-
import { defaultStartChatErrorPaneTitleStyleProps } from "./common/defaultStartChatErrorPaneTitleStyleProps";
|
|
9
|
-
import { defaultStartChatErrorPaneSubtitleStyleProps } from "./common/defaultStartChatErrorPaneSubtitleStyleProps";
|
|
10
|
-
import { defaultStartChatErrorPaneIconStyleProps } from "./common/defaultStartChatErrorPaneIconStyleProps";
|
|
11
9
|
import { defaultStartChatErrorPaneIconImageStyleProps } from "./common/defaultStartChatErrorPaneIconImageProps";
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
10
|
+
import { defaultStartChatErrorPaneIconStyleProps } from "./common/defaultStartChatErrorPaneIconStyleProps";
|
|
11
|
+
import { defaultStartChatErrorPaneSubtitleStyleProps } from "./common/defaultStartChatErrorPaneSubtitleStyleProps";
|
|
12
|
+
import { defaultStartChatErrorPaneTitleStyleProps } from "./common/defaultStartChatErrorPaneTitleStyleProps";
|
|
13
|
+
import useChatContextStore from "../../hooks/useChatContextStore";
|
|
14
|
+
let uiTimer;
|
|
14
15
|
export const StartChatErrorPaneStateful = startChatErrorPaneProps => {
|
|
15
16
|
var _startChatErrorPanePr, _startChatErrorPanePr2, _startChatErrorPanePr3, _startChatErrorPanePr4, _startChatErrorPanePr5, _startChatErrorPanePr6, _startChatErrorPanePr7, _startChatErrorPanePr8, _startChatErrorPanePr9, _startChatErrorPanePr10, _startChatErrorPanePr11;
|
|
17
|
+
useEffect(() => {
|
|
18
|
+
uiTimer = createTimer();
|
|
19
|
+
TelemetryHelper.logLoadingEvent(LogLevel.INFO, {
|
|
20
|
+
Event: TelemetryEvent.UXStartChatErrorPaneStart
|
|
21
|
+
});
|
|
22
|
+
}, []);
|
|
16
23
|
const [state] = useChatContextStore();
|
|
17
24
|
const generalStyleProps = Object.assign({}, defaultStartChatErrorPaneGeneralStyleProps, startChatErrorPaneProps === null || startChatErrorPaneProps === void 0 ? void 0 : (_startChatErrorPanePr = startChatErrorPaneProps.styleProps) === null || _startChatErrorPanePr === void 0 ? void 0 : _startChatErrorPanePr.generalStyleProps);
|
|
18
25
|
const titleStyleProps = Object.assign({}, defaultStartChatErrorPaneTitleStyleProps, startChatErrorPaneProps === null || startChatErrorPaneProps === void 0 ? void 0 : (_startChatErrorPanePr2 = startChatErrorPaneProps.styleProps) === null || _startChatErrorPanePr2 === void 0 ? void 0 : _startChatErrorPanePr2.titleStyleProps);
|
|
@@ -61,6 +68,10 @@ export const StartChatErrorPaneStateful = startChatErrorPaneProps => {
|
|
|
61
68
|
Event: TelemetryEvent.StartChatErrorPaneLoaded,
|
|
62
69
|
Description: "Start chat error pane loaded."
|
|
63
70
|
});
|
|
71
|
+
TelemetryHelper.logLoadingEvent(LogLevel.INFO, {
|
|
72
|
+
Event: TelemetryEvent.UXStartChatErrorCompleted,
|
|
73
|
+
ElapsedTimeInMilliseconds: uiTimer.milliSecondsElapsed
|
|
74
|
+
});
|
|
64
75
|
}, []);
|
|
65
76
|
return /*#__PURE__*/React.createElement(LoadingPane, {
|
|
66
77
|
componentOverrides: startChatErrorPaneProps === null || startChatErrorPaneProps === void 0 ? void 0 : startChatErrorPaneProps.componentOverrides,
|