@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.
Files changed (83) hide show
  1. package/lib/cjs/common/facades/FacadeChatSDK.js +11 -1
  2. package/lib/cjs/common/telemetry/TelemetryConstants.js +32 -0
  3. package/lib/cjs/common/telemetry/TelemetryHelper.js +10 -0
  4. package/lib/cjs/components/chatbuttonstateful/ChatButtonStateful.js +15 -1
  5. package/lib/cjs/components/confirmationpanestateful/ConfirmationPaneStateful.js +14 -2
  6. package/lib/cjs/components/emailtranscriptpanestateful/EmailTranscriptPaneStateful.js +16 -2
  7. package/lib/cjs/components/footerstateful/FooterStateful.js +15 -0
  8. package/lib/cjs/components/headerstateful/HeaderStateful.js +16 -2
  9. package/lib/cjs/components/livechatwidget/LiveChatWidget.js +3 -2
  10. package/lib/cjs/components/livechatwidget/common/createInternetConnectionChangeHandler.js +5 -3
  11. package/lib/cjs/components/livechatwidget/interfaces/IFeatureConfigProps.js +1 -0
  12. package/lib/cjs/components/livechatwidget/livechatwidgetstateful/LiveChatWidgetStateful.js +37 -4
  13. package/lib/cjs/components/loadingpanestateful/LoadingPaneStateful.js +20 -2
  14. package/lib/cjs/components/notificationpanestateful/NotificationPaneStateful.js +21 -7
  15. package/lib/cjs/components/ooohpanestateful/OOOHPaneStateful.js +12 -1
  16. package/lib/cjs/components/postchatloadingpanestateful/PostChatLoadingPaneStateful.js +14 -3
  17. package/lib/cjs/components/prechatsurveypanestateful/PreChatSurveyPaneStateful.js +13 -0
  18. package/lib/cjs/components/proactivechatpanestateful/ProactiveChatPaneStateful.js +12 -0
  19. package/lib/cjs/components/reconnectchatpanestateful/ReconnectChatPaneStateful.js +12 -1
  20. package/lib/cjs/components/startchaterrorpanestateful/StartChatErrorPaneStateful.js +19 -8
  21. package/lib/cjs/components/webchatcontainerstateful/WebChatContainerStateful.js +14 -1
  22. package/lib/cjs/components/webchatcontainerstateful/common/defaultStyles/defaultWebChatStyles.js +2 -1
  23. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/enums/WebChatActionType.js +1 -0
  24. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachmentMiddleware.js +7 -7
  25. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/attachmentProcessingMiddleware.js +4 -4
  26. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/attachmentUploadValidatorMiddleware.js +7 -4
  27. package/lib/cjs/plugins/createChatTranscript.js +15 -6
  28. package/lib/esm/common/facades/FacadeChatSDK.js +11 -1
  29. package/lib/esm/common/telemetry/TelemetryConstants.js +32 -0
  30. package/lib/esm/common/telemetry/TelemetryHelper.js +10 -0
  31. package/lib/esm/components/chatbuttonstateful/ChatButtonStateful.js +15 -1
  32. package/lib/esm/components/confirmationpanestateful/ConfirmationPaneStateful.js +14 -3
  33. package/lib/esm/components/emailtranscriptpanestateful/EmailTranscriptPaneStateful.js +17 -3
  34. package/lib/esm/components/footerstateful/FooterStateful.js +14 -0
  35. package/lib/esm/components/headerstateful/HeaderStateful.js +16 -2
  36. package/lib/esm/components/livechatwidget/LiveChatWidget.js +3 -2
  37. package/lib/esm/components/livechatwidget/common/createInternetConnectionChangeHandler.js +5 -3
  38. package/lib/esm/components/livechatwidget/interfaces/IFeatureConfigProps.js +1 -0
  39. package/lib/esm/components/livechatwidget/livechatwidgetstateful/LiveChatWidgetStateful.js +37 -4
  40. package/lib/esm/components/loadingpanestateful/LoadingPaneStateful.js +19 -2
  41. package/lib/esm/components/notificationpanestateful/NotificationPaneStateful.js +21 -7
  42. package/lib/esm/components/ooohpanestateful/OOOHPaneStateful.js +12 -1
  43. package/lib/esm/components/postchatloadingpanestateful/PostChatLoadingPaneStateful.js +14 -3
  44. package/lib/esm/components/prechatsurveypanestateful/PreChatSurveyPaneStateful.js +13 -1
  45. package/lib/esm/components/proactivechatpanestateful/ProactiveChatPaneStateful.js +11 -0
  46. package/lib/esm/components/reconnectchatpanestateful/ReconnectChatPaneStateful.js +12 -1
  47. package/lib/esm/components/startchaterrorpanestateful/StartChatErrorPaneStateful.js +19 -8
  48. package/lib/esm/components/webchatcontainerstateful/WebChatContainerStateful.js +14 -1
  49. package/lib/esm/components/webchatcontainerstateful/common/defaultStyles/defaultWebChatStyles.js +2 -1
  50. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/enums/WebChatActionType.js +1 -0
  51. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachmentMiddleware.js +7 -7
  52. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/attachmentProcessingMiddleware.js +4 -4
  53. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/attachmentUploadValidatorMiddleware.js +7 -4
  54. package/lib/esm/plugins/createChatTranscript.js +15 -6
  55. package/lib/types/common/facades/FacadeChatSDK.d.ts +2 -1
  56. package/lib/types/common/telemetry/TelemetryConstants.d.ts +33 -1
  57. package/lib/types/common/telemetry/TelemetryHelper.d.ts +2 -1
  58. package/lib/types/common/telemetry/definitions/Contracts.d.ts +1 -1
  59. package/lib/types/common/telemetry/definitions/Payload.d.ts +14 -1
  60. package/lib/types/components/footerstateful/downloadtranscriptstateful/DownloadTranscriptStateful.d.ts +1 -1
  61. package/lib/types/components/footerstateful/downloadtranscriptstateful/interfaces/IWebChatTranscriptConfig.d.ts +1 -0
  62. package/lib/types/components/livechatwidget/common/authHelper.d.ts +1 -1
  63. package/lib/types/components/livechatwidget/common/createAdapter.d.ts +1 -1
  64. package/lib/types/components/livechatwidget/common/createDownloadTranscriptProps.d.ts +2 -1
  65. package/lib/types/components/livechatwidget/common/createInternetConnectionChangeHandler.d.ts +2 -1
  66. package/lib/types/components/livechatwidget/common/endChat.d.ts +1 -1
  67. package/lib/types/components/livechatwidget/common/getMockChatSDKIfApplicable.d.ts +1 -1
  68. package/lib/types/components/livechatwidget/common/reconnectChatHelper.d.ts +2 -2
  69. package/lib/types/components/livechatwidget/common/setPostChatContextAndLoadSurvey.d.ts +1 -1
  70. package/lib/types/components/livechatwidget/common/startChat.d.ts +2 -2
  71. package/lib/types/components/livechatwidget/common/startChatErrorHandler.d.ts +1 -1
  72. package/lib/types/components/livechatwidget/common/startProactiveChat.d.ts +1 -1
  73. package/lib/types/components/livechatwidget/interfaces/IFeatureConfigProps.d.ts +3 -0
  74. package/lib/types/components/livechatwidget/interfaces/ILiveChatWidgetProps.d.ts +9 -7
  75. package/lib/types/components/webchatcontainerstateful/common/utils/FileAttachmentIconManager.d.ts +1 -1
  76. package/lib/types/components/webchatcontainerstateful/interfaces/IWebChatProps.d.ts +1 -1
  77. package/lib/types/components/webchatcontainerstateful/webchatcontroller/enums/WebChatActionType.d.ts +2 -1
  78. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityMiddleware.d.ts +1 -1
  79. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/avatarMiddleware.d.ts +1 -1
  80. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/attachmentUploadValidatorMiddleware.d.ts +1 -1
  81. package/lib/types/hooks/useChatSDKStore.d.ts +1 -1
  82. package/lib/types/hooks/useDebounce.d.ts +1 -1
  83. package/package.json +17 -8
@@ -26,7 +26,7 @@ class FacadeChatSDK {
26
26
  isTokenSet() {
27
27
  return !(0, _utils.isNullOrEmptyString)(this.token);
28
28
  }
29
- constructor(input) {
29
+ constructor(input, disableReauthentication) {
30
30
  _defineProperty(this, "chatSDK", void 0);
31
31
  _defineProperty(this, "chatConfig", void 0);
32
32
  _defineProperty(this, "token", "");
@@ -34,11 +34,13 @@ class FacadeChatSDK {
34
34
  _defineProperty(this, "isAuthenticated", void 0);
35
35
  _defineProperty(this, "getAuthToken", void 0);
36
36
  _defineProperty(this, "sdkMocked", void 0);
37
+ _defineProperty(this, "disableReauthentication", void 0);
37
38
  this.chatSDK = input.chatSDK;
38
39
  this.chatConfig = input.chatConfig;
39
40
  this.getAuthToken = input.getAuthToken;
40
41
  this.isAuthenticated = input.isAuthenticated;
41
42
  this.sdkMocked = input.isSDKMocked;
43
+ this.disableReauthentication = disableReauthentication;
42
44
  }
43
45
 
44
46
  //set default expiration to zero, for undefined or missed exp in jwt
@@ -103,6 +105,14 @@ class FacadeChatSDK {
103
105
  }
104
106
  }
105
107
  async tokenRing() {
108
+ if (this.disableReauthentication === true) {
109
+ // facade feature is disabled, so we are bypassing the re authentication and let it fail.
110
+ return {
111
+ result: true,
112
+ message: "Facade is disabled"
113
+ };
114
+ }
115
+
106
116
  // this is needed for storybooks, specifically for reconnect pane which requires authentication bypass
107
117
  if (this.sdkMocked === true) {
108
118
  return {
@@ -141,6 +141,7 @@ exports.TelemetryEvent = TelemetryEvent;
141
141
  TelemetryEvent["ConfirmationCancelButtonClicked"] = "ConfirmationCancelButtonClicked";
142
142
  TelemetryEvent["ConfirmationConfirmButtonClicked"] = "ConfirmationConfirmButtonClicked";
143
143
  TelemetryEvent["LoadingPaneLoaded"] = "LoadingPaneLoaded";
144
+ TelemetryEvent["LoadingPaneUnloaded"] = "LoadingPaneUnloaded";
144
145
  TelemetryEvent["StartChatErrorPaneLoaded"] = "StartChatErrorPaneLoaded";
145
146
  TelemetryEvent["EmailTranscriptLoaded"] = "EmailTranscriptLoaded";
146
147
  TelemetryEvent["OutOfOfficePaneLoaded"] = "OutOfOfficePaneLoaded";
@@ -173,6 +174,7 @@ exports.TelemetryEvent = TelemetryEvent;
173
174
  TelemetryEvent["SetBotAuthProviderNotFound"] = "SetBotAuthProviderNotFound";
174
175
  TelemetryEvent["BotAuthActivityUndefinedSignInId"] = "BotAuthActivityUndefinedSignInId";
175
176
  TelemetryEvent["ThirdPartyCookiesBlocked"] = "ThirdPartyCookiesBlocked";
177
+ TelemetryEvent["ParticipantsRemovedEvent"] = "ParticipantsRemovedEvent";
176
178
  TelemetryEvent["ProcessingHTMLTextMiddlewareFailed"] = "ProcessingHTMLTextMiddlewareFailed";
177
179
  TelemetryEvent["ProcessingSanitizationMiddlewareFailed"] = "ProcessingSanitizationMiddlewareFailed";
178
180
  TelemetryEvent["FormatTagsMiddlewareJSONStringifyFailed"] = "FormatTagsMiddlewareJSONStringifyFailed";
@@ -224,6 +226,36 @@ exports.TelemetryEvent = TelemetryEvent;
224
226
  TelemetryEvent["NewTokenFailed"] = "NewTokenFailed";
225
227
  TelemetryEvent["NewTokenExpired"] = "NewTokenExpired";
226
228
  TelemetryEvent["TokenEmptyOrSame"] = "TokenEmptyOrSame";
229
+ TelemetryEvent["UXFooterStart"] = "UXFooterStart";
230
+ TelemetryEvent["UXFooterCompleted"] = "UXFooterCompleted";
231
+ TelemetryEvent["UXHeaderStart"] = "UXHeaderStart";
232
+ TelemetryEvent["UXHeaderCompleted"] = "UXHeaderCompleted";
233
+ TelemetryEvent["UXLoadingPaneStart"] = "UXLoadingPaneStart";
234
+ TelemetryEvent["UXLoadingPaneCompleted"] = "UXLoadingPaneCompleted";
235
+ TelemetryEvent["UXNotificationPaneStart"] = "UXNotificationPaneStart";
236
+ TelemetryEvent["UXNotificationPaneCompleted"] = "UXNotificationPaneCompleted";
237
+ TelemetryEvent["UXOOHPaneStart"] = "UXOOHPaneStart";
238
+ TelemetryEvent["UXOOHPaneCompleted"] = "UXOOHPaneCompleted";
239
+ TelemetryEvent["UXPostChatLoadingPaneStart"] = "UXPostChatLoadingPaneStart";
240
+ TelemetryEvent["UXPostChatLoadingPaneCompleted"] = "UXPostChatLoadingPaneCompleted";
241
+ TelemetryEvent["UXPrechatPaneStart"] = "UXPrechatPaneStart";
242
+ TelemetryEvent["UXPrechatPaneCompleted"] = "UXPrechatPaneCompleted";
243
+ TelemetryEvent["UXProactiveChatPaneStart"] = "UXProactiveChatPaneStart";
244
+ TelemetryEvent["UXProactiveChatCompleted"] = "UXProactiveChatCompleted";
245
+ TelemetryEvent["UXReconnectChatPaneStart"] = "UXReconnectChatPaneStart";
246
+ TelemetryEvent["UXReconnectChatCompleted"] = "UXReconnectChatCompleted";
247
+ TelemetryEvent["UXStartChatErrorPaneStart"] = "UXStartChatErrorPaneStart";
248
+ TelemetryEvent["UXStartChatErrorCompleted"] = "UXStartChatErrorCompleted";
249
+ TelemetryEvent["UXEmailTranscriptPaneStart"] = "UXEmailTranscriptPaneStart";
250
+ TelemetryEvent["UXEmailTranscriptPaneCompleted"] = "UXEmailTranscriptPaneCompleted";
251
+ TelemetryEvent["UXWebchatContainerStart"] = "UXWebchatContainerStart";
252
+ TelemetryEvent["UXWebchatContainerCompleted"] = "UXWebchatContainerCompleted";
253
+ TelemetryEvent["UXLCWChatButtonStart"] = "UXLCWChatButtonStart";
254
+ TelemetryEvent["UXLCWChatButtonCompleted"] = "UXLCWChatButtonCompleted";
255
+ TelemetryEvent["UXConfirmationPaneStart"] = "UXConfirmationPaneStart";
256
+ TelemetryEvent["UXConfirmationPaneCompleted"] = "UXConfirmationPaneCompleted";
257
+ TelemetryEvent["UXLivechatwidgetStart"] = "UXLivechatwidgetStart";
258
+ TelemetryEvent["UXLivechatwidgetCompleted"] = "UXLivechatwidgetCompleted";
227
259
  })(TelemetryEvent || (exports.TelemetryEvent = TelemetryEvent = {}));
228
260
  class TelemetryConstants {
229
261
  static map(eventTypeOrScenarioType) {
@@ -220,6 +220,16 @@ _defineProperty(TelemetryHelper, "logLoadingEvent", (logLevel, payload) => {
220
220
  };
221
221
  _omnichannelChatComponents.BroadcastService.postMessage(telemetryEvent);
222
222
  });
223
+ _defineProperty(TelemetryHelper, "logUIEvent", (logLevel, payload) => {
224
+ const telemetryEvent = {
225
+ eventName: (payload === null || payload === void 0 ? void 0 : payload.Event) ?? "",
226
+ logLevel: logLevel,
227
+ payload: {
228
+ ...payload
229
+ }
230
+ };
231
+ _omnichannelChatComponents.BroadcastService.postMessage(telemetryEvent);
232
+ });
223
233
  _defineProperty(TelemetryHelper, "logActionEvent", (logLevel, payload) => {
224
234
  const telemetryEvent = {
225
235
  eventName: (payload === null || payload === void 0 ? void 0 : payload.Event) ?? "",
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.default = exports.ChatButtonStateful = 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 _omnichannelChatComponents = require("@microsoft/omnichannel-chat-components");
10
11
  var _Constants = require("../../common/Constants");
11
12
  var _ConversationState = require("../../contexts/common/ConversationState");
@@ -13,13 +14,22 @@ var _LiveChatWidgetActionType = require("../../contexts/common/LiveChatWidgetAct
13
14
  var _TelemetryHelper = require("../../common/telemetry/TelemetryHelper");
14
15
  var _TelemetryManager = require("../../common/telemetry/TelemetryManager");
15
16
  var _defaultOutOfOfficeChatButtonStyleProps = require("./common/styleProps/defaultOutOfOfficeChatButtonStyleProps");
16
- var _utils = require("../../common/utils");
17
17
  var _useChatContextStore = _interopRequireDefault(require("../../hooks/useChatContextStore"));
18
18
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
19
19
  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); }
20
20
  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; }
21
+ let uiTimer;
21
22
  const ChatButtonStateful = props => {
22
23
  var _state$domainStates$l, _state$domainStates$l2, _buttonProps$controlP, _props$buttonProps, _props$buttonProps$co, _props$buttonProps2, _props$buttonProps2$c, _props$buttonProps3, _props$buttonProps3$c;
24
+ // this is to ensure the telemetry is set only once and start the load timer
25
+ (0, _react.useEffect)(() => {
26
+ uiTimer = (0, _utils.createTimer)();
27
+ _TelemetryHelper.TelemetryHelper.logLoadingEvent(_TelemetryConstants.LogLevel.INFO, {
28
+ Event: _TelemetryConstants.TelemetryEvent.UXLCWChatButtonStart
29
+ });
30
+ }, []);
31
+
32
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
23
33
  const [state, dispatch] = (0, _useChatContextStore.default)();
24
34
  const {
25
35
  buttonProps,
@@ -101,6 +111,10 @@ const ChatButtonStateful = props => {
101
111
  payload: true
102
112
  });
103
113
  }
114
+ _TelemetryHelper.TelemetryHelper.logLoadingEvent(_TelemetryConstants.LogLevel.INFO, {
115
+ Event: _TelemetryConstants.TelemetryEvent.UXLCWChatButtonCompleted,
116
+ ElapsedTimeInMilliseconds: uiTimer.milliSecondsElapsed
117
+ });
104
118
  }, []);
105
119
  return /*#__PURE__*/_react.default.createElement(_omnichannelChatComponents.ChatButton, {
106
120
  componentOverrides: buttonProps === null || buttonProps === void 0 ? void 0 : buttonProps.componentOverrides,
@@ -5,19 +5,27 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.default = exports.ConfirmationPaneStateful = void 0;
7
7
  var _TelemetryConstants = require("../../common/telemetry/TelemetryConstants");
8
- var _omnichannelChatComponents = require("@microsoft/omnichannel-chat-components");
9
8
  var _react = _interopRequireWildcard(require("react"));
10
9
  var _utils = require("../../common/utils");
10
+ var _omnichannelChatComponents = require("@microsoft/omnichannel-chat-components");
11
+ var _Constants = require("../../common/Constants");
11
12
  var _DimLayer = require("../dimlayer/DimLayer");
12
13
  var _LiveChatWidgetActionType = require("../../contexts/common/LiveChatWidgetActionType");
13
14
  var _TelemetryHelper = require("../../common/telemetry/TelemetryHelper");
14
15
  var _useChatContextStore = _interopRequireDefault(require("../../hooks/useChatContextStore"));
15
- var _Constants = require("../../common/Constants");
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;
20
+
19
21
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
20
22
  const ConfirmationPaneStateful = props => {
23
+ (0, _react.useEffect)(() => {
24
+ uiTimer = (0, _utils.createTimer)();
25
+ _TelemetryHelper.TelemetryHelper.logLoadingEvent(_TelemetryConstants.LogLevel.INFO, {
26
+ Event: _TelemetryConstants.TelemetryEvent.UXConfirmationPaneStart
27
+ });
28
+ }, []);
21
29
  const initialTabIndexMap = new Map();
22
30
  let elements = [];
23
31
  const [state, dispatch] = (0, _useChatContextStore.default)();
@@ -84,6 +92,10 @@ const ConfirmationPaneStateful = props => {
84
92
  _TelemetryHelper.TelemetryHelper.logLoadingEvent(_TelemetryConstants.LogLevel.INFO, {
85
93
  Event: _TelemetryConstants.TelemetryEvent.ConfirmationPaneLoaded
86
94
  });
95
+ _TelemetryHelper.TelemetryHelper.logLoadingEvent(_TelemetryConstants.LogLevel.INFO, {
96
+ Event: _TelemetryConstants.TelemetryEvent.UXConfirmationPaneCompleted,
97
+ ElapsedTimeInMilliseconds: uiTimer.milliSecondsElapsed
98
+ });
87
99
  }, []);
88
100
  return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_DimLayer.DimLayer, {
89
101
  brightness: (controlProps === null || controlProps === void 0 ? void 0 : controlProps.brightnessValueOnDim) ?? "0.2"
@@ -20,8 +20,16 @@ var _useFacadeChatSDKStore = _interopRequireDefault(require("../../hooks/useFaca
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 EmailTranscriptPaneStateful = props => {
24
25
  var _props$controlProps;
26
+ // this is to ensure the telemetry is set only once and start the load timer
27
+ (0, _react.useEffect)(() => {
28
+ uiTimer = (0, _utils.createTimer)();
29
+ _TelemetryHelper.TelemetryHelper.logLoadingEvent(_TelemetryConstants.LogLevel.INFO, {
30
+ Event: _TelemetryConstants.TelemetryEvent.UXEmailTranscriptPaneStart
31
+ });
32
+ }, []);
25
33
  const initialTabIndexMap = new Map();
26
34
  let elements = [];
27
35
  const [state, dispatch] = (0, _useChatContextStore.default)();
@@ -53,22 +61,24 @@ const EmailTranscriptPaneStateful = props => {
53
61
  attachmentMessage: (props === null || props === void 0 ? void 0 : props.attachmentMessage) ?? "The following attachment was uploaded during the conversation:"
54
62
  };
55
63
  try {
64
+ var _state$domainStates2, _state$domainStates2$;
56
65
  await (facadeChatSDK === null || facadeChatSDK === void 0 ? void 0 : facadeChatSDK.emailLiveChatTranscript(chatTranscriptBody, {
57
66
  liveChatContext
58
67
  }));
59
- _NotificationHandler.NotificationHandler.notifySuccess(_NotificationScenarios.NotificationScenarios.EmailAddressSaved, _defaultMiddlewareLocalizedTexts.defaultMiddlewareLocalizedTexts === null || _defaultMiddlewareLocalizedTexts.defaultMiddlewareLocalizedTexts === void 0 ? void 0 : _defaultMiddlewareLocalizedTexts.defaultMiddlewareLocalizedTexts.MIDDLEWARE_BANNER_FILE_EMAIL_ADDRESS_RECORDED_SUCCESS);
68
+ _NotificationHandler.NotificationHandler.notifySuccess(_NotificationScenarios.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.defaultMiddlewareLocalizedTexts === null || _defaultMiddlewareLocalizedTexts.defaultMiddlewareLocalizedTexts === void 0 ? void 0 : _defaultMiddlewareLocalizedTexts.defaultMiddlewareLocalizedTexts.MIDDLEWARE_BANNER_FILE_EMAIL_ADDRESS_RECORDED_SUCCESS));
60
69
  _TelemetryHelper.TelemetryHelper.logActionEvent(_TelemetryConstants.LogLevel.INFO, {
61
70
  Event: _TelemetryConstants.TelemetryEvent.EmailTranscriptSent,
62
71
  Description: "Transcript sent to email successfully."
63
72
  });
64
73
  } catch (ex) {
74
+ var _state$domainStates3, _state$domainStates3$;
65
75
  _TelemetryHelper.TelemetryHelper.logActionEvent(_TelemetryConstants.LogLevel.ERROR, {
66
76
  Event: _TelemetryConstants.TelemetryEvent.EmailTranscriptFailed,
67
77
  ExceptionDetails: {
68
78
  exception: ex
69
79
  }
70
80
  });
71
- const message = (0, _utils.formatTemplateString)(_defaultMiddlewareLocalizedTexts.defaultMiddlewareLocalizedTexts.MIDDLEWARE_BANNER_FILE_EMAIL_ADDRESS_RECORDED_ERROR, [email]);
81
+ const message = (0, _utils.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.defaultMiddlewareLocalizedTexts.MIDDLEWARE_BANNER_FILE_EMAIL_ADDRESS_RECORDED_ERROR, [email]);
72
82
  _NotificationHandler.NotificationHandler.notifyError(_NotificationScenarios.NotificationScenarios.EmailTranscriptError, (props === null || props === void 0 ? void 0 : props.bannerMessageOnError) ?? message);
73
83
  }
74
84
  }, [props.attachmentMessage, props.bannerMessageOnError, facadeChatSDK, state.domainStates.liveChatContext]);
@@ -103,6 +113,10 @@ const EmailTranscriptPaneStateful = props => {
103
113
  _TelemetryHelper.TelemetryHelper.logLoadingEvent(_TelemetryConstants.LogLevel.INFO, {
104
114
  Event: _TelemetryConstants.TelemetryEvent.EmailTranscriptLoaded
105
115
  });
116
+ _TelemetryHelper.TelemetryHelper.logLoadingEvent(_TelemetryConstants.LogLevel.INFO, {
117
+ Event: _TelemetryConstants.TelemetryEvent.UXEmailTranscriptPaneCompleted,
118
+ ElapsedTimeInMilliseconds: uiTimer.milliSecondsElapsed
119
+ });
106
120
  }, [initialEmail]);
107
121
  return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_DimLayer.DimLayer, {
108
122
  brightness: (controlProps === null || controlProps === void 0 ? void 0 : controlProps.brightnessValueOnDim) ?? "0.2"
@@ -15,15 +15,24 @@ var _Audios = require("../../assets/Audios");
15
15
  var _NotificationHandler = require("../webchatcontainerstateful/webchatcontroller/notification/NotificationHandler");
16
16
  var _NotificationScenarios = require("../webchatcontainerstateful/webchatcontroller/enums/NotificationScenarios");
17
17
  var _TelemetryHelper = require("../../common/telemetry/TelemetryHelper");
18
+ var _utils = require("../../common/utils");
18
19
  var _DownloadTranscriptStateful = require("./downloadtranscriptstateful/DownloadTranscriptStateful");
19
20
  var _useChatContextStore = _interopRequireDefault(require("../../hooks/useChatContextStore"));
20
21
  var _useFacadeChatSDKStore = _interopRequireDefault(require("../../hooks/useFacadeChatSDKStore"));
21
22
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
22
23
  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); }
23
24
  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; }
25
+ let uiTimer;
26
+
24
27
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
25
28
  const FooterStateful = props => {
26
29
  var _footerProps$controlP3;
30
+ (0, _react.useEffect)(() => {
31
+ uiTimer = (0, _utils.createTimer)();
32
+ _TelemetryHelper.TelemetryHelper.logLoadingEvent(_TelemetryConstants.LogLevel.INFO, {
33
+ Event: _TelemetryConstants.TelemetryEvent.UXFooterStart
34
+ });
35
+ }, []);
27
36
  const [state, dispatch] = (0, _useChatContextStore.default)();
28
37
  // hideFooterDisplay - the purpose of this is to keep the footer always "active",
29
38
  // but hide it visually in certain states (e.g., loading state) and show in some other states (e.g. active state).
@@ -100,6 +109,12 @@ const FooterStateful = props => {
100
109
  }
101
110
  }
102
111
  }, [state.appStates.conversationState]);
112
+ (0, _react.useEffect)(() => {
113
+ _TelemetryHelper.TelemetryHelper.logLoadingEvent(_TelemetryConstants.LogLevel.INFO, {
114
+ Event: _TelemetryConstants.TelemetryEvent.UXFooterCompleted,
115
+ ElapsedTimeInMilliseconds: uiTimer.milliSecondsElapsed
116
+ });
117
+ }, []);
103
118
  return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, !hideFooterDisplay && /*#__PURE__*/_react.default.createElement(_omnichannelChatComponents.Footer, {
104
119
  componentOverrides: footerProps === null || footerProps === void 0 ? void 0 : footerProps.componentOverrides,
105
120
  controlProps: controlProps,
@@ -6,20 +6,28 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.default = exports.HeaderStateful = void 0;
7
7
  var _TelemetryConstants = require("../../common/telemetry/TelemetryConstants");
8
8
  var _react = _interopRequireWildcard(require("react"));
9
+ var _Constants = require("../../common/Constants");
9
10
  var _ConversationState = require("../../contexts/common/ConversationState");
11
+ var _DraggableEventEmitter = _interopRequireDefault(require("../draggable/DraggableEventEmitter"));
10
12
  var _omnichannelChatComponents = require("@microsoft/omnichannel-chat-components");
11
13
  var _LiveChatWidgetActionType = require("../../contexts/common/LiveChatWidgetActionType");
12
14
  var _TelemetryHelper = require("../../common/telemetry/TelemetryHelper");
15
+ var _utils = require("../../common/utils");
13
16
  var _defaultOutOfOfficeHeaderStyleProps = require("./common/styleProps/defaultOutOfOfficeHeaderStyleProps");
14
17
  var _useChatAdapterStore = _interopRequireDefault(require("../../hooks/useChatAdapterStore"));
15
18
  var _useChatContextStore = _interopRequireDefault(require("../../hooks/useChatContextStore"));
16
- var _Constants = require("../../common/Constants");
17
- var _DraggableEventEmitter = _interopRequireDefault(require("../draggable/DraggableEventEmitter"));
18
19
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
19
20
  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); }
20
21
  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; }
22
+ let uiTimer;
21
23
  const HeaderStateful = props => {
22
24
  var _state$domainStates$l, _state$domainStates$l2, _state$domainStates, _headerProps$controlP, _headerProps$controlP2, _headerProps$controlP3, _outOfOfficeHeaderPro, _state$domainStates3;
25
+ (0, _react.useEffect)(() => {
26
+ uiTimer = (0, _utils.createTimer)();
27
+ _TelemetryHelper.TelemetryHelper.logLoadingEvent(_TelemetryConstants.LogLevel.INFO, {
28
+ Event: _TelemetryConstants.TelemetryEvent.UXHeaderStart
29
+ });
30
+ }, []);
23
31
  const [state, dispatch] = (0, _useChatContextStore.default)();
24
32
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
25
33
  const [adapter] = (0, _useChatAdapterStore.default)();
@@ -114,6 +122,12 @@ const HeaderStateful = props => {
114
122
  elementId: outOfOperatingHours || state.appStates.conversationState === _ConversationState.ConversationState.OutOfOffice ? outOfOfficeControlProps.id : controlProps.id,
115
123
  targetWindow: props.draggableEventEmitterTargetWindow ?? window
116
124
  };
125
+ (0, _react.useEffect)(() => {
126
+ _TelemetryHelper.TelemetryHelper.logLoadingEvent(_TelemetryConstants.LogLevel.INFO, {
127
+ Event: _TelemetryConstants.TelemetryEvent.UXHeaderCompleted,
128
+ ElapsedTimeInMilliseconds: uiTimer.milliSecondsElapsed
129
+ });
130
+ }, []);
117
131
  if (props.draggable === true) {
118
132
  var _generalStyleProps;
119
133
  const styleProps = outOfOperatingHours || state.appStates.conversationState === _ConversationState.ConversationState.OutOfOffice ? outOfOfficeStyleProps : headerProps === null || headerProps === void 0 ? void 0 : headerProps.styleProps;
@@ -20,13 +20,14 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
20
20
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
21
21
  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; }
22
22
  const LiveChatWidget = props => {
23
- var _props$mock, _props$chatConfig, _props$chatConfig$Liv;
23
+ var _props$mock, _props$featureConfigP, _props$chatConfig, _props$chatConfig$Liv;
24
24
  const reducer = (0, _createReducer.createReducer)();
25
25
  const [state, dispatch] = (0, _react.useReducer)(reducer, (0, _LiveChatWidgetContextInitialState.getLiveChatWidgetContextInitialState)(props));
26
26
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
27
27
  const [adapter, setAdapter] = (0, _react.useState)(undefined);
28
28
  const [facadeChatSDK, setFacadeChatSDK] = (0, _react.useState)(undefined);
29
29
  const chatSDK = (0, _getMockChatSDKIfApplicable.getMockChatSDKIfApplicable)(props.chatSDK, props === null || props === void 0 ? void 0 : (_props$mock = props.mock) === null || _props$mock === void 0 ? void 0 : _props$mock.type);
30
+ const disableReauthentication = ((_props$featureConfigP = props.featureConfigProps) === null || _props$featureConfigP === void 0 ? void 0 : _props$featureConfigP.disableReauthentication) === true;
30
31
  (0, _overridePropsOnMockIfApplicable.default)(props);
31
32
  if (!props.chatConfig) {
32
33
  throw new Error("chatConfig is required");
@@ -43,7 +44,7 @@ const LiveChatWidget = props => {
43
44
  "getAuthToken": props === null || props === void 0 ? void 0 : props.getAuthToken,
44
45
  //when type is not undefined, it means the SDK is mocked
45
46
  "isSDKMocked": !(0, _utils.isNullOrUndefined)(props === null || props === void 0 ? void 0 : (_props$mock2 = props.mock) === null || _props$mock2 === void 0 ? void 0 : _props$mock2.type)
46
- }));
47
+ }, disableReauthentication));
47
48
  }
48
49
  return /*#__PURE__*/_react.default.createElement(_FacadeChatSDKStore.FacadeChatSDKStore.Provider, {
49
50
  value: [facadeChatSDK, setFacadeChatSDK]
@@ -20,19 +20,21 @@ const isInternetConnected = async () => {
20
20
  return false;
21
21
  }
22
22
  };
23
- const createInternetConnectionChangeHandler = async () => {
23
+ const createInternetConnectionChangeHandler = async state => {
24
24
  const handler = async () => {
25
25
  const connected = await isInternetConnected();
26
26
  if (!connected) {
27
+ var _state$domainStates, _state$domainStates$m;
27
28
  _TelemetryHelper.TelemetryHelper.logActionEvent(_TelemetryConstants.LogLevel.WARN, {
28
29
  Event: _TelemetryConstants.TelemetryEvent.NetworkDisconnected
29
30
  });
30
- _NotificationHandler.NotificationHandler.notifyError(_NotificationScenarios.NotificationScenarios.InternetConnection, _defaultMiddlewareLocalizedTexts.defaultMiddlewareLocalizedTexts.MIDDLEWARE_BANNER_NO_INTERNET_CONNECTION);
31
+ _NotificationHandler.NotificationHandler.notifyError(_NotificationScenarios.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.defaultMiddlewareLocalizedTexts.MIDDLEWARE_BANNER_NO_INTERNET_CONNECTION);
31
32
  } else {
33
+ var _state$domainStates2, _state$domainStates2$;
32
34
  _TelemetryHelper.TelemetryHelper.logActionEvent(_TelemetryConstants.LogLevel.WARN, {
33
35
  Event: _TelemetryConstants.TelemetryEvent.NetworkReconnected
34
36
  });
35
- _NotificationHandler.NotificationHandler.notifySuccess(_NotificationScenarios.NotificationScenarios.InternetConnection, _defaultMiddlewareLocalizedTexts.defaultMiddlewareLocalizedTexts.MIDDLEWARE_BANNER_INTERNET_BACK_ONLINE);
37
+ _NotificationHandler.NotificationHandler.notifySuccess(_NotificationScenarios.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.defaultMiddlewareLocalizedTexts.MIDDLEWARE_BANNER_INTERNET_BACK_ONLINE);
36
38
  _omnichannelChatComponents.BroadcastService.postMessage({
37
39
  eventName: _TelemetryConstants.BroadcastEvent.NetworkReconnected
38
40
  });
@@ -62,8 +62,15 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
62
62
  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); }
63
63
  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; }
64
64
  function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
65
+ let uiTimer;
65
66
  const LiveChatWidgetStateful = props => {
66
67
  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;
68
+ (0, _react2.useEffect)(() => {
69
+ uiTimer = (0, _utils.createTimer)();
70
+ _TelemetryHelper.TelemetryHelper.logLoadingEvent(_TelemetryConstants.LogLevel.INFO, {
71
+ Event: _TelemetryConstants.TelemetryEvent.UXLivechatwidgetStart
72
+ });
73
+ }, []);
67
74
  const [state, dispatch] = (0, _useChatContextStore.default)();
68
75
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
69
76
  const [adapter, setAdapter] = (0, _useChatAdapterStore.default)();
@@ -220,7 +227,7 @@ const LiveChatWidgetStateful = props => {
220
227
  state.domainStates.confirmationState = _Constants.ConfirmationState.NotSet;
221
228
  setupClientDataStore();
222
229
  (0, _registerTelemetryLoggers.registerTelemetryLoggers)(props, dispatch);
223
- (0, _createInternetConnectionChangeHandler.createInternetConnectionChangeHandler)();
230
+ (0, _createInternetConnectionChangeHandler.createInternetConnectionChangeHandler)(state);
224
231
  dispatch({
225
232
  type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_WIDGET_ELEMENT_ID,
226
233
  payload: widgetElementId
@@ -582,6 +589,26 @@ const LiveChatWidgetStateful = props => {
582
589
  eventName: _TelemetryConstants.BroadcastEvent.NewMessageNotification
583
590
  });
584
591
  });
592
+ facadeChatSDK === null || facadeChatSDK === void 0 ? void 0 : facadeChatSDK.onAgentEndSession(event => {
593
+ var _inMemoryState$appSta6;
594
+ const inMemoryState = (0, _createReducer.executeReducer)(state, {
595
+ type: _LiveChatWidgetActionType.LiveChatWidgetActionType.GET_IN_MEMORY_STATE,
596
+ payload: null
597
+ });
598
+ 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.ConversationState.Active) {
599
+ setWebChatStyles(styles => {
600
+ return {
601
+ ...styles,
602
+ hideSendBox: true
603
+ };
604
+ });
605
+ _TelemetryHelper.TelemetryHelper.logSDKEvent(_TelemetryConstants.LogLevel.INFO, {
606
+ Event: _TelemetryConstants.TelemetryEvent.ParticipantsRemovedEvent,
607
+ Description: "Participants removed event received."
608
+ });
609
+ return;
610
+ }
611
+ });
585
612
  }
586
613
  if (state.appStates.conversationState === _ConversationState.ConversationState.InActive) {
587
614
  var _props$webChatContain2, _props$webChatContain3;
@@ -711,13 +738,13 @@ const LiveChatWidgetStateful = props => {
711
738
 
712
739
  // Handle Chat disconnect cases
713
740
  (0, _react2.useEffect)(() => {
714
- var _inMemoryState$appSta6;
741
+ var _inMemoryState$appSta7;
715
742
  const inMemoryState = (0, _createReducer.executeReducer)(state, {
716
743
  type: _LiveChatWidgetActionType.LiveChatWidgetActionType.GET_IN_MEMORY_STATE,
717
744
  payload: null
718
745
  });
719
746
  (0, _chatDisconnectHelper.handleChatDisconnect)(props, inMemoryState, setWebChatStyles);
720
- const chatDisconnectState = inMemoryState === null || inMemoryState === void 0 ? void 0 : (_inMemoryState$appSta6 = inMemoryState.appStates) === null || _inMemoryState$appSta6 === void 0 ? void 0 : _inMemoryState$appSta6.chatDisconnectEventReceived;
747
+ const chatDisconnectState = inMemoryState === null || inMemoryState === void 0 ? void 0 : (_inMemoryState$appSta7 = inMemoryState.appStates) === null || _inMemoryState$appSta7 === void 0 ? void 0 : _inMemoryState$appSta7.chatDisconnectEventReceived;
721
748
  if (chatDisconnectState && adapter) {
722
749
  try {
723
750
  adapter.end();
@@ -739,6 +766,12 @@ const LiveChatWidgetStateful = props => {
739
766
  payload: (_props$webChatContain6 = props.webChatContainerProps) === null || _props$webChatContain6 === void 0 ? void 0 : _props$webChatContain6.renderingMiddlewareProps
740
767
  });
741
768
  }, [(_props$webChatContain7 = props.webChatContainerProps) === null || _props$webChatContain7 === void 0 ? void 0 : _props$webChatContain7.renderingMiddlewareProps]);
769
+ (0, _react2.useEffect)(() => {
770
+ _TelemetryHelper.TelemetryHelper.logLoadingEvent(_TelemetryConstants.LogLevel.INFO, {
771
+ Event: _TelemetryConstants.TelemetryEvent.UXLivechatwidgetCompleted,
772
+ ElapsedTimeInMilliseconds: uiTimer.milliSecondsElapsed
773
+ });
774
+ }, []);
742
775
  const initiateEndChatOnBrowserUnload = () => {
743
776
  var _DataStoreManager$cli;
744
777
  _TelemetryHelper.TelemetryHelper.logActionEvent(_TelemetryConstants.LogLevel.INFO, {
@@ -783,7 +816,7 @@ const LiveChatWidgetStateful = props => {
783
816
  const chatWidgetDraggableConfig = {
784
817
  elementId: widgetElementId,
785
818
  channel: ((_props$controlProps12 = props.controlProps) === null || _props$controlProps12 === void 0 ? void 0 : _props$controlProps12.widgetInstanceId) ?? "lcw",
786
- disabled: ((_props$draggableChatW = props.draggableChatWidgetProps) === null || _props$draggableChatW === void 0 ? void 0 : _props$draggableChatW.disabled) === true ?? false // Draggable by default, unless explicitly disabled
819
+ disabled: ((_props$draggableChatW = props.draggableChatWidgetProps) === null || _props$draggableChatW === void 0 ? void 0 : _props$draggableChatW.disabled) !== true // Draggable by default, unless explicitly disabled
787
820
  };
788
821
 
789
822
  // Disable receiving IDraggableEvent in current window
@@ -6,19 +6,27 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.default = exports.LoadingPaneStateful = 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 _omnichannelChatComponents = require("@microsoft/omnichannel-chat-components");
10
11
  var _TelemetryHelper = require("../../common/telemetry/TelemetryHelper");
11
12
  var _defaultgeneralLoadingPaneStyleProps = require("./common/defaultStyleProps/defaultgeneralLoadingPaneStyleProps");
12
- var _utils = require("../../common/utils");
13
+ var _errorUILoadingPaneStyleProps = require("./common/errorUIStyleProps/errorUILoadingPaneStyleProps");
13
14
  var _useChatContextStore = _interopRequireDefault(require("../../hooks/useChatContextStore"));
14
15
  var _useWindowDimensions = _interopRequireDefault(require("../../hooks/useWindowDimensions"));
15
- var _errorUILoadingPaneStyleProps = require("./common/errorUIStyleProps/errorUILoadingPaneStyleProps");
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;
20
+
19
21
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
20
22
  const LoadingPaneStateful = props => {
21
23
  var _loadingPaneProps$sty, _startChatErrorPanePr, _startChatErrorPanePr2;
24
+ (0, _react.useEffect)(() => {
25
+ uiTimer = (0, _utils.createTimer)();
26
+ _TelemetryHelper.TelemetryHelper.logLoadingEvent(_TelemetryConstants.LogLevel.INFO, {
27
+ Event: _TelemetryConstants.TelemetryEvent.UXLoadingPaneStart
28
+ });
29
+ }, []);
22
30
  const [state] = (0, _useChatContextStore.default)();
23
31
  const {
24
32
  loadingPaneProps,
@@ -61,6 +69,16 @@ const LoadingPaneStateful = props => {
61
69
  Event: _TelemetryConstants.TelemetryEvent.LoadingPaneLoaded,
62
70
  Description: "Loading pane loaded."
63
71
  });
72
+ _TelemetryHelper.TelemetryHelper.logLoadingEvent(_TelemetryConstants.LogLevel.INFO, {
73
+ Event: _TelemetryConstants.TelemetryEvent.UXLoadingPaneCompleted,
74
+ ElapsedTimeInMilliseconds: uiTimer.milliSecondsElapsed
75
+ });
76
+ return () => {
77
+ _TelemetryHelper.TelemetryHelper.logLoadingEvent(_TelemetryConstants.LogLevel.INFO, {
78
+ Event: _TelemetryConstants.TelemetryEvent.LoadingPaneUnloaded,
79
+ Description: "Loading pane unmount."
80
+ });
81
+ };
64
82
  }, []);
65
83
  return /*#__PURE__*/_react.default.createElement(_omnichannelChatComponents.LoadingPane, {
66
84
  componentOverrides: loadingPaneProps === null || loadingPaneProps === void 0 ? void 0 : loadingPaneProps.componentOverrides,
@@ -4,23 +4,31 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = exports.NotificationPaneStateful = void 0;
7
+ var _Constants = require("../../common/Constants");
8
+ var _TelemetryConstants = require("../../common/telemetry/TelemetryConstants");
7
9
  var _react = _interopRequireWildcard(require("react"));
10
+ var _LiveChatWidgetActionType = require("../../contexts/common/LiveChatWidgetActionType");
8
11
  var _omnichannelChatComponents = require("@microsoft/omnichannel-chat-components");
9
- var _botframeworkWebchat = require("botframework-webchat");
10
12
  var _NotificationScenarios = require("../webchatcontainerstateful/webchatcontroller/enums/NotificationScenarios");
11
- var _useChatAdapterStore = _interopRequireDefault(require("../../hooks/useChatAdapterStore"));
12
- var _useChatContextStore = _interopRequireDefault(require("../../hooks/useChatContextStore"));
13
13
  var _TelemetryHelper = require("../../common/telemetry/TelemetryHelper");
14
- var _TelemetryConstants = require("../../common/telemetry/TelemetryConstants");
15
- var _LiveChatWidgetActionType = require("../../contexts/common/LiveChatWidgetActionType");
16
- var _Constants = require("../../common/Constants");
17
- var _defaultChatDisconnectStyleProps = require("./defaultProps/defaultChatDisconnectStyleProps");
14
+ var _utils = require("../../common/utils");
18
15
  var _defaultChatDisconnectControlProps = require("./defaultProps/defaultChatDisconnectControlProps");
16
+ var _defaultChatDisconnectStyleProps = require("./defaultProps/defaultChatDisconnectStyleProps");
17
+ var _botframeworkWebchat = require("botframework-webchat");
18
+ var _useChatAdapterStore = _interopRequireDefault(require("../../hooks/useChatAdapterStore"));
19
+ var _useChatContextStore = _interopRequireDefault(require("../../hooks/useChatContextStore"));
19
20
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
20
21
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
21
22
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
23
+ let uiTimer;
22
24
  const NotificationPaneStateful = props => {
23
25
  var _state$domainStates, _state$domainStates3;
26
+ (0, _react.useEffect)(() => {
27
+ uiTimer = (0, _utils.createTimer)();
28
+ _TelemetryHelper.TelemetryHelper.logLoadingEvent(_TelemetryConstants.LogLevel.INFO, {
29
+ Event: _TelemetryConstants.TelemetryEvent.UXNotificationPaneStart
30
+ });
31
+ }, []);
24
32
  const {
25
33
  notificationPaneProps,
26
34
  notificationScenarioType,
@@ -170,6 +178,12 @@ const NotificationPaneStateful = props => {
170
178
  // TODO additional scenarios to be added...
171
179
  }
172
180
 
181
+ (0, _react.useEffect)(() => {
182
+ _TelemetryHelper.TelemetryHelper.logLoadingEvent(_TelemetryConstants.LogLevel.INFO, {
183
+ Event: _TelemetryConstants.TelemetryEvent.UXNotificationPaneCompleted,
184
+ ElapsedTimeInMilliseconds: uiTimer.milliSecondsElapsed
185
+ });
186
+ }, []);
173
187
  return /*#__PURE__*/_react.default.createElement(_omnichannelChatComponents.NotificationPane, genericPropsObj);
174
188
  };
175
189
  exports.NotificationPaneStateful = NotificationPaneStateful;