@microsoft/omnichannel-chat-widget 1.7.4 → 1.7.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/lib/cjs/common/telemetry/TelemetryConstants.js +31 -0
  2. package/lib/cjs/common/telemetry/TelemetryHelper.js +10 -0
  3. package/lib/cjs/components/chatbuttonstateful/ChatButtonStateful.js +15 -1
  4. package/lib/cjs/components/confirmationpanestateful/ConfirmationPaneStateful.js +14 -2
  5. package/lib/cjs/components/emailtranscriptpanestateful/EmailTranscriptPaneStateful.js +12 -0
  6. package/lib/cjs/components/footerstateful/FooterStateful.js +15 -0
  7. package/lib/cjs/components/headerstateful/HeaderStateful.js +16 -2
  8. package/lib/cjs/components/livechatwidget/common/initWebChatComposer.js +7 -7
  9. package/lib/cjs/components/livechatwidget/livechatwidgetstateful/LiveChatWidgetStateful.js +35 -2
  10. package/lib/cjs/components/loadingpanestateful/LoadingPaneStateful.js +14 -2
  11. package/lib/cjs/components/notificationpanestateful/NotificationPaneStateful.js +21 -7
  12. package/lib/cjs/components/ooohpanestateful/OOOHPaneStateful.js +12 -1
  13. package/lib/cjs/components/postchatloadingpanestateful/PostChatLoadingPaneStateful.js +14 -3
  14. package/lib/cjs/components/prechatsurveypanestateful/PreChatSurveyPaneStateful.js +13 -0
  15. package/lib/cjs/components/proactivechatpanestateful/ProactiveChatPaneStateful.js +12 -0
  16. package/lib/cjs/components/reconnectchatpanestateful/ReconnectChatPaneStateful.js +12 -1
  17. package/lib/cjs/components/startchaterrorpanestateful/StartChatErrorPaneStateful.js +19 -8
  18. package/lib/cjs/components/webchatcontainerstateful/WebChatContainerStateful.js +14 -1
  19. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachmentMiddleware.js +2 -3
  20. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/index.js +115 -0
  21. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/messageSequenceIdOverrideMiddleware.js +3 -4
  22. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/messageTimestampMiddleware.js +3 -4
  23. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/toastMiddleware.js +2 -3
  24. package/lib/cjs/index.js +25 -0
  25. package/lib/esm/common/telemetry/TelemetryConstants.js +31 -0
  26. package/lib/esm/common/telemetry/TelemetryHelper.js +10 -0
  27. package/lib/esm/components/chatbuttonstateful/ChatButtonStateful.js +15 -1
  28. package/lib/esm/components/confirmationpanestateful/ConfirmationPaneStateful.js +14 -3
  29. package/lib/esm/components/emailtranscriptpanestateful/EmailTranscriptPaneStateful.js +13 -1
  30. package/lib/esm/components/footerstateful/FooterStateful.js +14 -0
  31. package/lib/esm/components/headerstateful/HeaderStateful.js +16 -2
  32. package/lib/esm/components/livechatwidget/common/initWebChatComposer.js +4 -4
  33. package/lib/esm/components/livechatwidget/livechatwidgetstateful/LiveChatWidgetStateful.js +35 -2
  34. package/lib/esm/components/loadingpanestateful/LoadingPaneStateful.js +13 -2
  35. package/lib/esm/components/notificationpanestateful/NotificationPaneStateful.js +21 -7
  36. package/lib/esm/components/ooohpanestateful/OOOHPaneStateful.js +12 -1
  37. package/lib/esm/components/postchatloadingpanestateful/PostChatLoadingPaneStateful.js +14 -3
  38. package/lib/esm/components/prechatsurveypanestateful/PreChatSurveyPaneStateful.js +13 -1
  39. package/lib/esm/components/proactivechatpanestateful/ProactiveChatPaneStateful.js +11 -0
  40. package/lib/esm/components/reconnectchatpanestateful/ReconnectChatPaneStateful.js +12 -1
  41. package/lib/esm/components/startchaterrorpanestateful/StartChatErrorPaneStateful.js +19 -8
  42. package/lib/esm/components/webchatcontainerstateful/WebChatContainerStateful.js +14 -1
  43. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachmentMiddleware.js +2 -3
  44. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/index.js +10 -0
  45. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/messageSequenceIdOverrideMiddleware.js +2 -3
  46. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/messageTimestampMiddleware.js +2 -3
  47. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/toastMiddleware.js +2 -3
  48. package/lib/esm/index.js +2 -1
  49. package/lib/types/common/telemetry/TelemetryConstants.d.ts +32 -1
  50. package/lib/types/common/telemetry/TelemetryHelper.d.ts +1 -0
  51. package/lib/types/common/telemetry/definitions/Payload.d.ts +13 -0
  52. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachmentMiddleware.d.ts +1 -2
  53. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/index.d.ts +10 -0
  54. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/messageSequenceIdOverrideMiddleware.d.ts +1 -2
  55. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/messageTimestampMiddleware.d.ts +1 -2
  56. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/toastMiddleware.d.ts +1 -2
  57. package/lib/types/index.d.ts +1 -0
  58. package/package.json +2 -2
@@ -17,9 +17,17 @@ var _useChatContextStore = _interopRequireDefault(require("../../hooks/useChatCo
17
17
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
18
18
  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); }
19
19
  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; }
20
+ let uiTimer;
21
+
20
22
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
21
23
  const ProactiveChatPaneStateful = props => {
22
24
  var _proactiveChatProps$c;
25
+ (0, _react.useEffect)(() => {
26
+ uiTimer = (0, _utils.createTimer)();
27
+ _TelemetryHelper.TelemetryHelper.logLoadingEvent(_TelemetryConstants.LogLevel.INFO, {
28
+ Event: _TelemetryConstants.TelemetryEvent.UXProactiveChatPaneStart
29
+ });
30
+ }, []);
23
31
  const [state, dispatch] = (0, _useChatContextStore.default)();
24
32
  const {
25
33
  proactiveChatProps,
@@ -121,6 +129,10 @@ const ProactiveChatPaneStateful = props => {
121
129
  _TelemetryHelper.TelemetryHelper.logLoadingEvent(_TelemetryConstants.LogLevel.INFO, {
122
130
  Event: _TelemetryConstants.TelemetryEvent.ProactiveChatPaneLoaded
123
131
  });
132
+ _TelemetryHelper.TelemetryHelper.logLoadingEvent(_TelemetryConstants.LogLevel.INFO, {
133
+ Event: _TelemetryConstants.TelemetryEvent.UXProactiveChatCompleted,
134
+ ElapsedTimeInMilliseconds: uiTimer.milliSecondsElapsed
135
+ });
124
136
  return () => {
125
137
  clearTimeout(timeoutEvent);
126
138
  };
@@ -6,17 +6,25 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.default = exports.ReconnectChatPaneStateful = void 0;
7
7
  var _TelemetryConstants = require("../../common/telemetry/TelemetryConstants");
8
8
  var _react = _interopRequireWildcard(require("react"));
9
+ var _utils = require("../../common/utils");
9
10
  var _ConversationState = require("../../contexts/common/ConversationState");
10
11
  var _LiveChatWidgetActionType = require("../../contexts/common/LiveChatWidgetActionType");
11
12
  var _omnichannelChatComponents = require("@microsoft/omnichannel-chat-components");
12
13
  var _TelemetryHelper = require("../../common/telemetry/TelemetryHelper");
13
- var _utils = require("../../common/utils");
14
14
  var _useChatContextStore = _interopRequireDefault(require("../../hooks/useChatContextStore"));
15
15
  var _useFacadeChatSDKStore = _interopRequireDefault(require("../../hooks/useFacadeChatSDKStore"));
16
16
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
17
17
  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); }
18
18
  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; }
19
+ let uiTimer;
19
20
  const ReconnectChatPaneStateful = props => {
21
+ (0, _react.useEffect)(() => {
22
+ uiTimer = (0, _utils.createTimer)();
23
+ _TelemetryHelper.TelemetryHelper.logLoadingEvent(_TelemetryConstants.LogLevel.INFO, {
24
+ Event: _TelemetryConstants.TelemetryEvent.UXReconnectChatPaneStart,
25
+ ElapsedTimeInMilliseconds: uiTimer.milliSecondsElapsed
26
+ });
27
+ }, []);
20
28
  const [state, dispatch] = (0, _useChatContextStore.default)();
21
29
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
22
30
  //const chatSDK: any = useChatSDKStore();
@@ -100,6 +108,9 @@ const ReconnectChatPaneStateful = props => {
100
108
  _TelemetryHelper.TelemetryHelper.logLoadingEvent(_TelemetryConstants.LogLevel.INFO, {
101
109
  Event: _TelemetryConstants.TelemetryEvent.ReconnectChatPaneLoaded
102
110
  });
111
+ _TelemetryHelper.TelemetryHelper.logLoadingEvent(_TelemetryConstants.LogLevel.INFO, {
112
+ Event: _TelemetryConstants.TelemetryEvent.UXReconnectChatCompleted
113
+ });
103
114
  }, []);
104
115
  return /*#__PURE__*/_react.default.createElement(_omnichannelChatComponents.ReconnectChatPane, {
105
116
  componentOverrides: reconnectChatProps === null || reconnectChatProps === void 0 ? void 0 : reconnectChatProps.componentOverrides,
@@ -4,24 +4,31 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = exports.StartChatErrorPaneStateful = void 0;
7
+ var _TelemetryConstants = require("../../common/telemetry/TelemetryConstants");
7
8
  var _react = _interopRequireWildcard(require("react"));
8
- var _omnichannelChatComponents = require("@microsoft/omnichannel-chat-components");
9
9
  var _utils = require("../../common/utils");
10
- var _useChatContextStore = _interopRequireDefault(require("../../hooks/useChatContextStore"));
10
+ var _omnichannelChatComponents = require("@microsoft/omnichannel-chat-components");
11
+ var _Constants = require("../../common/Constants");
12
+ var _StartChatFailureType = require("../../contexts/common/StartChatFailureType");
11
13
  var _TelemetryHelper = require("../../common/telemetry/TelemetryHelper");
12
- var _TelemetryConstants = require("../../common/telemetry/TelemetryConstants");
13
14
  var _defaultStartChatErrorPaneGeneralStyleProps = require("./common/defaultStartChatErrorPaneGeneralStyleProps");
14
- var _defaultStartChatErrorPaneTitleStyleProps = require("./common/defaultStartChatErrorPaneTitleStyleProps");
15
- var _defaultStartChatErrorPaneSubtitleStyleProps = require("./common/defaultStartChatErrorPaneSubtitleStyleProps");
16
- var _defaultStartChatErrorPaneIconStyleProps = require("./common/defaultStartChatErrorPaneIconStyleProps");
17
15
  var _defaultStartChatErrorPaneIconImageProps = require("./common/defaultStartChatErrorPaneIconImageProps");
18
- var _Constants = require("../../common/Constants");
19
- var _StartChatFailureType = require("../../contexts/common/StartChatFailureType");
16
+ var _defaultStartChatErrorPaneIconStyleProps = require("./common/defaultStartChatErrorPaneIconStyleProps");
17
+ var _defaultStartChatErrorPaneSubtitleStyleProps = require("./common/defaultStartChatErrorPaneSubtitleStyleProps");
18
+ var _defaultStartChatErrorPaneTitleStyleProps = require("./common/defaultStartChatErrorPaneTitleStyleProps");
19
+ var _useChatContextStore = _interopRequireDefault(require("../../hooks/useChatContextStore"));
20
20
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
21
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); }
22
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; }
23
+ let uiTimer;
23
24
  const StartChatErrorPaneStateful = startChatErrorPaneProps => {
24
25
  var _startChatErrorPanePr, _startChatErrorPanePr2, _startChatErrorPanePr3, _startChatErrorPanePr4, _startChatErrorPanePr5, _startChatErrorPanePr6, _startChatErrorPanePr7, _startChatErrorPanePr8, _startChatErrorPanePr9, _startChatErrorPanePr10, _startChatErrorPanePr11;
26
+ (0, _react.useEffect)(() => {
27
+ uiTimer = (0, _utils.createTimer)();
28
+ _TelemetryHelper.TelemetryHelper.logLoadingEvent(_TelemetryConstants.LogLevel.INFO, {
29
+ Event: _TelemetryConstants.TelemetryEvent.UXStartChatErrorPaneStart
30
+ });
31
+ }, []);
25
32
  const [state] = (0, _useChatContextStore.default)();
26
33
  const generalStyleProps = Object.assign({}, _defaultStartChatErrorPaneGeneralStyleProps.defaultStartChatErrorPaneGeneralStyleProps, startChatErrorPaneProps === null || startChatErrorPaneProps === void 0 ? void 0 : (_startChatErrorPanePr = startChatErrorPaneProps.styleProps) === null || _startChatErrorPanePr === void 0 ? void 0 : _startChatErrorPanePr.generalStyleProps);
27
34
  const titleStyleProps = Object.assign({}, _defaultStartChatErrorPaneTitleStyleProps.defaultStartChatErrorPaneTitleStyleProps, startChatErrorPaneProps === null || startChatErrorPaneProps === void 0 ? void 0 : (_startChatErrorPanePr2 = startChatErrorPaneProps.styleProps) === null || _startChatErrorPanePr2 === void 0 ? void 0 : _startChatErrorPanePr2.titleStyleProps);
@@ -70,6 +77,10 @@ const StartChatErrorPaneStateful = startChatErrorPaneProps => {
70
77
  Event: _TelemetryConstants.TelemetryEvent.StartChatErrorPaneLoaded,
71
78
  Description: "Start chat error pane loaded."
72
79
  });
80
+ _TelemetryHelper.TelemetryHelper.logLoadingEvent(_TelemetryConstants.LogLevel.INFO, {
81
+ Event: _TelemetryConstants.TelemetryEvent.UXStartChatErrorCompleted,
82
+ ElapsedTimeInMilliseconds: uiTimer.milliSecondsElapsed
83
+ });
73
84
  }, []);
74
85
  return /*#__PURE__*/_react.default.createElement(_omnichannelChatComponents.LoadingPane, {
75
86
  componentOverrides: startChatErrorPaneProps === null || startChatErrorPaneProps === void 0 ? void 0 : startChatErrorPaneProps.componentOverrides,
@@ -7,6 +7,7 @@ exports.default = exports.WebChatContainerStateful = void 0;
7
7
  var _react = require("@fluentui/react");
8
8
  var _TelemetryConstants = require("../../common/telemetry/TelemetryConstants");
9
9
  var _react2 = _interopRequireWildcard(require("react"));
10
+ var _utils = require("../../common/utils");
10
11
  var _BotMagicCodeStore = require("./webchatcontroller/BotMagicCodeStore");
11
12
  var _botframeworkWebchat = require("botframework-webchat");
12
13
  var _Constants = require("../../common/Constants");
@@ -23,12 +24,12 @@ var _defaultSentMessageAnchorStyles = require("./webchatcontroller/middlewares/r
23
24
  var _defaultSystemMessageBoxStyles = require("./webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultSystemMessageBoxStyles");
24
25
  var _defaultUserMessageBoxStyles = require("./webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultUserMessageBoxStyles");
25
26
  var _defaultWebChatContainerStatefulProps = require("./common/defaultProps/defaultWebChatContainerStatefulProps");
26
- var _utils = require("../../common/utils");
27
27
  var _ = require("../..");
28
28
  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); }
29
29
  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; }
30
30
  /* eslint-disable @typescript-eslint/no-explicit-any */
31
31
 
32
+ let uiTimer;
32
33
  const broadcastChannelMessageEvent = "message";
33
34
  const postActivity = activity => {
34
35
  // eslint-disable-line @typescript-eslint/no-explicit-any
@@ -56,6 +57,12 @@ const createMagicCodeSuccessResponse = signin => {
56
57
  };
57
58
  const WebChatContainerStateful = props => {
58
59
  var _webChatContainerProp, _webChatContainerProp2, _webChatContainerProp3, _webChatContainerProp4, _webChatContainerProp5, _webChatContainerProp6, _webChatContainerProp7, _props$webChatContain5, _props$webChatContain6, _defaultWebChatContai, _props$webChatContain7, _props$webChatContain8, _defaultWebChatContai2, _webChatContainerProp8, _webChatContainerProp9, _webChatContainerProp10, _webChatContainerProp11, _webChatContainerProp12, _webChatContainerProp13, _webChatContainerProp14, _webChatContainerProp15, _props$webChatContain9, _props$webChatContain10;
60
+ (0, _react2.useEffect)(() => {
61
+ uiTimer = (0, _utils.createTimer)();
62
+ _TelemetryHelper.TelemetryHelper.logLoadingEvent(_TelemetryConstants.LogLevel.INFO, {
63
+ Event: _TelemetryConstants.TelemetryEvent.UXWebchatContainerCompleted
64
+ });
65
+ }, []);
59
66
  const {
60
67
  BasicWebChat
61
68
  } = _botframeworkWebchat.Components;
@@ -151,6 +158,12 @@ const WebChatContainerStateful = props => {
151
158
  };
152
159
  magicCodeBroadcastChannel.addEventListener(broadcastChannelMessageEvent, eventListener);
153
160
  }, []);
161
+ (0, _react2.useEffect)(() => {
162
+ _TelemetryHelper.TelemetryHelper.logLoadingEvent(_TelemetryConstants.LogLevel.INFO, {
163
+ Event: _TelemetryConstants.TelemetryEvent.UXWebchatContainerCompleted,
164
+ ElapsedTimeInMilliseconds: uiTimer.milliSecondsElapsed
165
+ });
166
+ }, []);
154
167
  return /*#__PURE__*/_react2.default.createElement(_react2.default.Fragment, null, /*#__PURE__*/_react2.default.createElement("style", null, `
155
168
  .webchat__stacked-layout__content .ac-pushButton {
156
169
  cursor: pointer;
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.default = void 0;
6
+ exports.createAttachmentMiddleware = void 0;
7
7
  var _Constants = require("../../../../../common/Constants");
8
8
  var _react = _interopRequireDefault(require("react"));
9
9
  var _FileAttachmentIconManager = require("../../../common/utils/FileAttachmentIconManager");
@@ -199,5 +199,4 @@ const createAttachmentMiddleware = enableInlinePlaying => {
199
199
  };
200
200
  return attachmentMiddleware;
201
201
  };
202
- var _default = createAttachmentMiddleware;
203
- exports.default = _default;
202
+ exports.createAttachmentMiddleware = createAttachmentMiddleware;
@@ -0,0 +1,115 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ var _activityMiddleware = require("./activityMiddleware");
7
+ Object.keys(_activityMiddleware).forEach(function (key) {
8
+ if (key === "default" || key === "__esModule") return;
9
+ if (key in exports && exports[key] === _activityMiddleware[key]) return;
10
+ Object.defineProperty(exports, key, {
11
+ enumerable: true,
12
+ get: function () {
13
+ return _activityMiddleware[key];
14
+ }
15
+ });
16
+ });
17
+ var _activityStatusMiddleware = require("./activityStatusMiddleware");
18
+ Object.keys(_activityStatusMiddleware).forEach(function (key) {
19
+ if (key === "default" || key === "__esModule") return;
20
+ if (key in exports && exports[key] === _activityStatusMiddleware[key]) return;
21
+ Object.defineProperty(exports, key, {
22
+ enumerable: true,
23
+ get: function () {
24
+ return _activityStatusMiddleware[key];
25
+ }
26
+ });
27
+ });
28
+ var _attachmentMiddleware = require("./attachmentMiddleware");
29
+ Object.keys(_attachmentMiddleware).forEach(function (key) {
30
+ if (key === "default" || key === "__esModule") return;
31
+ if (key in exports && exports[key] === _attachmentMiddleware[key]) return;
32
+ Object.defineProperty(exports, key, {
33
+ enumerable: true,
34
+ get: function () {
35
+ return _attachmentMiddleware[key];
36
+ }
37
+ });
38
+ });
39
+ var _avatarMiddleware = require("./avatarMiddleware");
40
+ Object.keys(_avatarMiddleware).forEach(function (key) {
41
+ if (key === "default" || key === "__esModule") return;
42
+ if (key in exports && exports[key] === _avatarMiddleware[key]) return;
43
+ Object.defineProperty(exports, key, {
44
+ enumerable: true,
45
+ get: function () {
46
+ return _avatarMiddleware[key];
47
+ }
48
+ });
49
+ });
50
+ var _cardActionMiddleware = require("./cardActionMiddleware");
51
+ Object.keys(_cardActionMiddleware).forEach(function (key) {
52
+ if (key === "default" || key === "__esModule") return;
53
+ if (key in exports && exports[key] === _cardActionMiddleware[key]) return;
54
+ Object.defineProperty(exports, key, {
55
+ enumerable: true,
56
+ get: function () {
57
+ return _cardActionMiddleware[key];
58
+ }
59
+ });
60
+ });
61
+ var _groupActivitiesMiddleware = require("./groupActivitiesMiddleware");
62
+ Object.keys(_groupActivitiesMiddleware).forEach(function (key) {
63
+ if (key === "default" || key === "__esModule") return;
64
+ if (key in exports && exports[key] === _groupActivitiesMiddleware[key]) return;
65
+ Object.defineProperty(exports, key, {
66
+ enumerable: true,
67
+ get: function () {
68
+ return _groupActivitiesMiddleware[key];
69
+ }
70
+ });
71
+ });
72
+ var _messageSequenceIdOverrideMiddleware = require("./messageSequenceIdOverrideMiddleware");
73
+ Object.keys(_messageSequenceIdOverrideMiddleware).forEach(function (key) {
74
+ if (key === "default" || key === "__esModule") return;
75
+ if (key in exports && exports[key] === _messageSequenceIdOverrideMiddleware[key]) return;
76
+ Object.defineProperty(exports, key, {
77
+ enumerable: true,
78
+ get: function () {
79
+ return _messageSequenceIdOverrideMiddleware[key];
80
+ }
81
+ });
82
+ });
83
+ var _messageTimestampMiddleware = require("./messageTimestampMiddleware");
84
+ Object.keys(_messageTimestampMiddleware).forEach(function (key) {
85
+ if (key === "default" || key === "__esModule") return;
86
+ if (key in exports && exports[key] === _messageTimestampMiddleware[key]) return;
87
+ Object.defineProperty(exports, key, {
88
+ enumerable: true,
89
+ get: function () {
90
+ return _messageTimestampMiddleware[key];
91
+ }
92
+ });
93
+ });
94
+ var _toastMiddleware = require("./toastMiddleware");
95
+ Object.keys(_toastMiddleware).forEach(function (key) {
96
+ if (key === "default" || key === "__esModule") return;
97
+ if (key in exports && exports[key] === _toastMiddleware[key]) return;
98
+ Object.defineProperty(exports, key, {
99
+ enumerable: true,
100
+ get: function () {
101
+ return _toastMiddleware[key];
102
+ }
103
+ });
104
+ });
105
+ var _typingIndicatorMiddleware = require("./typingIndicatorMiddleware");
106
+ Object.keys(_typingIndicatorMiddleware).forEach(function (key) {
107
+ if (key === "default" || key === "__esModule") return;
108
+ if (key in exports && exports[key] === _typingIndicatorMiddleware[key]) return;
109
+ Object.defineProperty(exports, key, {
110
+ enumerable: true,
111
+ get: function () {
112
+ return _typingIndicatorMiddleware[key];
113
+ }
114
+ });
115
+ });
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.default = void 0;
6
+ exports.createMessageSequenceIdOverrideMiddleware = void 0;
7
7
  var _WebChatActionType = require("../../enums/WebChatActionType");
8
8
  var _Constants = require("../../../../../common/Constants");
9
9
  // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unused-vars
@@ -18,6 +18,7 @@ const createMessageSequenceIdOverrideMiddleware = _ref => {
18
18
  return next(action);
19
19
  };
20
20
  };
21
+ exports.createMessageSequenceIdOverrideMiddleware = createMessageSequenceIdOverrideMiddleware;
21
22
  const isApplicable = action => {
22
23
  return action.type === _WebChatActionType.WebChatActionType.DIRECT_LINE_INCOMING_ACTIVITY && isValidChannel(action) && isWebSequenceIdPresent(action) && lookupOriginalMessageId(action) !== undefined;
23
24
  };
@@ -60,6 +61,4 @@ const extractOriginalMessageId = action => {
60
61
  const lookupOriginalMessageId = action => {
61
62
  var _action$payload4, _action$payload4$acti, _action$payload4$acti2, _action$payload4$acti3;
62
63
  return action === null || action === void 0 ? void 0 : (_action$payload4 = action.payload) === null || _action$payload4 === void 0 ? void 0 : (_action$payload4$acti = _action$payload4.activity) === null || _action$payload4$acti === void 0 ? void 0 : (_action$payload4$acti2 = _action$payload4$acti.channelData) === null || _action$payload4$acti2 === void 0 ? void 0 : (_action$payload4$acti3 = _action$payload4$acti2.metadata) === null || _action$payload4$acti3 === void 0 ? void 0 : _action$payload4$acti3.OriginalMessageId;
63
- };
64
- var _default = createMessageSequenceIdOverrideMiddleware;
65
- exports.default = _default;
64
+ };
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.default = void 0;
6
+ exports.createMessageTimeStampMiddleware = void 0;
7
7
  var _WebChatActionType = require("../../enums/WebChatActionType");
8
8
  var _Constants = require("../../../../../common/Constants");
9
9
  // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unused-vars
@@ -18,6 +18,7 @@ const createMessageTimeStampMiddleware = _ref => {
18
18
  return next(action);
19
19
  };
20
20
  };
21
+ exports.createMessageTimeStampMiddleware = createMessageTimeStampMiddleware;
21
22
  const isApplicable = action => {
22
23
  return action.type === _WebChatActionType.WebChatActionType.DIRECT_LINE_INCOMING_ACTIVITY && isPVAConversation(action) && isPayloadValid(action) && isValidChannel(action);
23
24
  };
@@ -84,6 +85,4 @@ const tagLookup = (action, tag) => {
84
85
  }
85
86
  }
86
87
  return null;
87
- };
88
- var _default = createMessageTimeStampMiddleware;
89
- exports.default = _default;
88
+ };
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.default = void 0;
6
+ exports.createToastMiddleware = void 0;
7
7
  var _react = _interopRequireDefault(require("react"));
8
8
  var _NotificationScenarios = require("../../enums/NotificationScenarios");
9
9
  var _NotificationPaneStateful = _interopRequireDefault(require("../../../../notificationpanestateful/NotificationPaneStateful"));
@@ -31,5 +31,4 @@ const createToastMiddleware = (notificationPaneProps, endChat) => {
31
31
  };
32
32
  return toastMiddleware;
33
33
  };
34
- var _default = createToastMiddleware;
35
- exports.default = _default;
34
+ exports.createToastMiddleware = createToastMiddleware;
package/lib/cjs/index.js CHANGED
@@ -3,6 +3,19 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
+ var _exportNames = {
7
+ BroadcastService: true,
8
+ decodeComponentString: true,
9
+ encodeComponentString: true,
10
+ getWidgetCacheId: true,
11
+ getWidgetEndChatEventName: true,
12
+ ConversationState: true,
13
+ useChatContextStore: true,
14
+ useChatSDKStore: true,
15
+ useFacadeChatSDKStore: true,
16
+ LiveChatWidget: true,
17
+ getMockChatSDKIfApplicable: true
18
+ };
6
19
  Object.defineProperty(exports, "BroadcastService", {
7
20
  enumerable: true,
8
21
  get: function () {
@@ -77,4 +90,16 @@ var _useChatSDKStore = _interopRequireDefault(require("./hooks/useChatSDKStore")
77
90
  var _useFacadeChatSDKStore = _interopRequireDefault(require("./hooks/useFacadeChatSDKStore"));
78
91
  var _LiveChatWidget = _interopRequireDefault(require("./components/livechatwidget/LiveChatWidget"));
79
92
  var _getMockChatSDKIfApplicable = require("./components/livechatwidget/common/getMockChatSDKIfApplicable");
93
+ var _renderingmiddlewares = require("./components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares");
94
+ Object.keys(_renderingmiddlewares).forEach(function (key) {
95
+ if (key === "default" || key === "__esModule") return;
96
+ if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
97
+ if (key in exports && exports[key] === _renderingmiddlewares[key]) return;
98
+ Object.defineProperty(exports, key, {
99
+ enumerable: true,
100
+ get: function () {
101
+ return _renderingmiddlewares[key];
102
+ }
103
+ });
104
+ });
80
105
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
@@ -167,6 +167,7 @@ export let TelemetryEvent;
167
167
  TelemetryEvent["SetBotAuthProviderNotFound"] = "SetBotAuthProviderNotFound";
168
168
  TelemetryEvent["BotAuthActivityUndefinedSignInId"] = "BotAuthActivityUndefinedSignInId";
169
169
  TelemetryEvent["ThirdPartyCookiesBlocked"] = "ThirdPartyCookiesBlocked";
170
+ TelemetryEvent["ParticipantsRemovedEvent"] = "ParticipantsRemovedEvent";
170
171
  TelemetryEvent["ProcessingHTMLTextMiddlewareFailed"] = "ProcessingHTMLTextMiddlewareFailed";
171
172
  TelemetryEvent["ProcessingSanitizationMiddlewareFailed"] = "ProcessingSanitizationMiddlewareFailed";
172
173
  TelemetryEvent["FormatTagsMiddlewareJSONStringifyFailed"] = "FormatTagsMiddlewareJSONStringifyFailed";
@@ -218,6 +219,36 @@ export let TelemetryEvent;
218
219
  TelemetryEvent["NewTokenFailed"] = "NewTokenFailed";
219
220
  TelemetryEvent["NewTokenExpired"] = "NewTokenExpired";
220
221
  TelemetryEvent["TokenEmptyOrSame"] = "TokenEmptyOrSame";
222
+ TelemetryEvent["UXFooterStart"] = "UXFooterStart";
223
+ TelemetryEvent["UXFooterCompleted"] = "UXFooterCompleted";
224
+ TelemetryEvent["UXHeaderStart"] = "UXHeaderStart";
225
+ TelemetryEvent["UXHeaderCompleted"] = "UXHeaderCompleted";
226
+ TelemetryEvent["UXLoadingPaneStart"] = "UXLoadingPaneStart";
227
+ TelemetryEvent["UXLoadingPaneCompleted"] = "UXLoadingPaneCompleted";
228
+ TelemetryEvent["UXNotificationPaneStart"] = "UXNotificationPaneStart";
229
+ TelemetryEvent["UXNotificationPaneCompleted"] = "UXNotificationPaneCompleted";
230
+ TelemetryEvent["UXOOHPaneStart"] = "UXOOHPaneStart";
231
+ TelemetryEvent["UXOOHPaneCompleted"] = "UXOOHPaneCompleted";
232
+ TelemetryEvent["UXPostChatLoadingPaneStart"] = "UXPostChatLoadingPaneStart";
233
+ TelemetryEvent["UXPostChatLoadingPaneCompleted"] = "UXPostChatLoadingPaneCompleted";
234
+ TelemetryEvent["UXPrechatPaneStart"] = "UXPrechatPaneStart";
235
+ TelemetryEvent["UXPrechatPaneCompleted"] = "UXPrechatPaneCompleted";
236
+ TelemetryEvent["UXProactiveChatPaneStart"] = "UXProactiveChatPaneStart";
237
+ TelemetryEvent["UXProactiveChatCompleted"] = "UXProactiveChatCompleted";
238
+ TelemetryEvent["UXReconnectChatPaneStart"] = "UXReconnectChatPaneStart";
239
+ TelemetryEvent["UXReconnectChatCompleted"] = "UXReconnectChatCompleted";
240
+ TelemetryEvent["UXStartChatErrorPaneStart"] = "UXStartChatErrorPaneStart";
241
+ TelemetryEvent["UXStartChatErrorCompleted"] = "UXStartChatErrorCompleted";
242
+ TelemetryEvent["UXEmailTranscriptPaneStart"] = "UXEmailTranscriptPaneStart";
243
+ TelemetryEvent["UXEmailTranscriptPaneCompleted"] = "UXEmailTranscriptPaneCompleted";
244
+ TelemetryEvent["UXWebchatContainerStart"] = "UXWebchatContainerStart";
245
+ TelemetryEvent["UXWebchatContainerCompleted"] = "UXWebchatContainerCompleted";
246
+ TelemetryEvent["UXLCWChatButtonStart"] = "UXLCWChatButtonStart";
247
+ TelemetryEvent["UXLCWChatButtonCompleted"] = "UXLCWChatButtonCompleted";
248
+ TelemetryEvent["UXConfirmationPaneStart"] = "UXConfirmationPaneStart";
249
+ TelemetryEvent["UXConfirmationPaneCompleted"] = "UXConfirmationPaneCompleted";
250
+ TelemetryEvent["UXLivechatwidgetStart"] = "UXLivechatwidgetStart";
251
+ TelemetryEvent["UXLivechatwidgetCompleted"] = "UXLivechatwidgetCompleted";
221
252
  })(TelemetryEvent || (TelemetryEvent = {}));
222
253
  export class TelemetryConstants {
223
254
  static map(eventTypeOrScenarioType) {
@@ -213,6 +213,16 @@ _defineProperty(TelemetryHelper, "logLoadingEvent", (logLevel, payload) => {
213
213
  };
214
214
  BroadcastService.postMessage(telemetryEvent);
215
215
  });
216
+ _defineProperty(TelemetryHelper, "logUIEvent", (logLevel, payload) => {
217
+ const telemetryEvent = {
218
+ eventName: (payload === null || payload === void 0 ? void 0 : payload.Event) ?? "",
219
+ logLevel: logLevel,
220
+ payload: {
221
+ ...payload
222
+ }
223
+ };
224
+ BroadcastService.postMessage(telemetryEvent);
225
+ });
216
226
  _defineProperty(TelemetryHelper, "logActionEvent", (logLevel, payload) => {
217
227
  const telemetryEvent = {
218
228
  eventName: (payload === null || payload === void 0 ? void 0 : payload.Event) ?? "",
@@ -1,5 +1,6 @@
1
1
  import { LogLevel, TelemetryEvent } from "../../common/telemetry/TelemetryConstants";
2
2
  import React, { useEffect, useRef, useState } from "react";
3
+ import { createTimer, setFocusOnElement } from "../../common/utils";
3
4
  import { ChatButton } from "@microsoft/omnichannel-chat-components";
4
5
  import { Constants } from "../../common/Constants";
5
6
  import { ConversationState } from "../../contexts/common/ConversationState";
@@ -7,10 +8,19 @@ import { LiveChatWidgetActionType } from "../../contexts/common/LiveChatWidgetAc
7
8
  import { TelemetryHelper } from "../../common/telemetry/TelemetryHelper";
8
9
  import { TelemetryTimers } from "../../common/telemetry/TelemetryManager";
9
10
  import { defaultOutOfOfficeChatButtonStyleProps } from "./common/styleProps/defaultOutOfOfficeChatButtonStyleProps";
10
- import { setFocusOnElement } from "../../common/utils";
11
11
  import useChatContextStore from "../../hooks/useChatContextStore";
12
+ let uiTimer;
12
13
  export const ChatButtonStateful = props => {
13
14
  var _state$domainStates$l, _state$domainStates$l2, _buttonProps$controlP, _props$buttonProps, _props$buttonProps$co, _props$buttonProps2, _props$buttonProps2$c, _props$buttonProps3, _props$buttonProps3$c;
15
+ // this is to ensure the telemetry is set only once and start the load timer
16
+ useEffect(() => {
17
+ uiTimer = createTimer();
18
+ TelemetryHelper.logLoadingEvent(LogLevel.INFO, {
19
+ Event: TelemetryEvent.UXLCWChatButtonStart
20
+ });
21
+ }, []);
22
+
23
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
14
24
  const [state, dispatch] = useChatContextStore();
15
25
  const {
16
26
  buttonProps,
@@ -92,6 +102,10 @@ export const ChatButtonStateful = props => {
92
102
  payload: true
93
103
  });
94
104
  }
105
+ TelemetryHelper.logLoadingEvent(LogLevel.INFO, {
106
+ Event: TelemetryEvent.UXLCWChatButtonCompleted,
107
+ ElapsedTimeInMilliseconds: uiTimer.milliSecondsElapsed
108
+ });
95
109
  }, []);
96
110
  return /*#__PURE__*/React.createElement(ChatButton, {
97
111
  componentOverrides: buttonProps === null || buttonProps === void 0 ? void 0 : buttonProps.componentOverrides,
@@ -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
- import { ConfirmationState } from "../../common/Constants";
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();
@@ -94,6 +102,10 @@ export const EmailTranscriptPaneStateful = props => {
94
102
  TelemetryHelper.logLoadingEvent(LogLevel.INFO, {
95
103
  Event: TelemetryEvent.EmailTranscriptLoaded
96
104
  });
105
+ TelemetryHelper.logLoadingEvent(LogLevel.INFO, {
106
+ Event: TelemetryEvent.UXEmailTranscriptPaneCompleted,
107
+ ElapsedTimeInMilliseconds: uiTimer.milliSecondsElapsed
108
+ });
97
109
  }, [initialEmail]);
98
110
  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(DimLayer, {
99
111
  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,