@microsoft/omnichannel-chat-widget 0.1.0-main.c9a643a → 0.1.0-main.cda7a31

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 (51) hide show
  1. package/lib/cjs/common/storage/default/defaultCacheManager.js +34 -0
  2. package/lib/cjs/common/storage/default/defaultClientDataStoreProvider.js +114 -0
  3. package/lib/cjs/common/storage/default/defaultInMemoryDataStore.js +86 -0
  4. package/lib/cjs/common/telemetry/TelemetryConstants.js +9 -0
  5. package/lib/cjs/common/telemetry/loggers/ariaTelemetryLogger.js +31 -18
  6. package/lib/cjs/components/confirmationpanestateful/ConfirmationPaneStateful.js +4 -4
  7. package/lib/cjs/components/emailtranscriptpanestateful/EmailTranscriptPaneStateful.js +4 -4
  8. package/lib/cjs/components/footerstateful/FooterStateful.js +5 -13
  9. package/lib/cjs/components/headerstateful/HeaderStateful.js +10 -4
  10. package/lib/cjs/components/livechatwidget/common/createFooter.js +7 -16
  11. package/lib/cjs/components/livechatwidget/common/defaultProps/dummyDefaultProps.js +17 -3
  12. package/lib/cjs/components/livechatwidget/livechatwidgetstateful/LiveChatWidgetStateful.js +53 -29
  13. package/lib/cjs/components/postchatsurveypanestateful/PostChatSurveyPaneStateful.js +6 -4
  14. package/lib/cjs/components/postchatsurveypanestateful/interfaces/IPostChatSurveyPaneStatefulProps.js +1 -0
  15. package/lib/cjs/components/webchatcontainerstateful/WebChatContainerStateful.js +10 -5
  16. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultReceivedMessageAnchorStyles.js +10 -0
  17. package/lib/cjs/contexts/common/LiveChatWidgetActionType.js +1 -1
  18. package/lib/cjs/contexts/common/LiveChatWidgetContextInitialState.js +11 -4
  19. package/lib/cjs/contexts/createReducer.js +2 -2
  20. package/lib/esm/common/storage/default/defaultCacheManager.js +19 -0
  21. package/lib/esm/common/storage/default/defaultClientDataStoreProvider.js +102 -0
  22. package/lib/esm/common/storage/default/defaultInMemoryDataStore.js +71 -0
  23. package/lib/esm/common/telemetry/TelemetryConstants.js +9 -0
  24. package/lib/esm/common/telemetry/loggers/ariaTelemetryLogger.js +29 -13
  25. package/lib/esm/components/confirmationpanestateful/ConfirmationPaneStateful.js +4 -4
  26. package/lib/esm/components/emailtranscriptpanestateful/EmailTranscriptPaneStateful.js +4 -4
  27. package/lib/esm/components/footerstateful/FooterStateful.js +5 -13
  28. package/lib/esm/components/headerstateful/HeaderStateful.js +10 -4
  29. package/lib/esm/components/livechatwidget/common/createFooter.js +4 -15
  30. package/lib/esm/components/livechatwidget/common/defaultProps/dummyDefaultProps.js +17 -3
  31. package/lib/esm/components/livechatwidget/livechatwidgetstateful/LiveChatWidgetStateful.js +53 -29
  32. package/lib/esm/components/postchatsurveypanestateful/PostChatSurveyPaneStateful.js +5 -4
  33. package/lib/esm/components/postchatsurveypanestateful/interfaces/IPostChatSurveyPaneStatefulProps.js +1 -0
  34. package/lib/esm/components/webchatcontainerstateful/WebChatContainerStateful.js +6 -3
  35. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultReceivedMessageAnchorStyles.js +3 -0
  36. package/lib/esm/contexts/common/LiveChatWidgetActionType.js +1 -1
  37. package/lib/esm/contexts/common/LiveChatWidgetContextInitialState.js +9 -4
  38. package/lib/esm/contexts/createReducer.js +2 -2
  39. package/lib/types/common/storage/default/defaultCacheManager.d.ts +4 -0
  40. package/lib/types/common/storage/default/defaultClientDataStoreProvider.d.ts +2 -0
  41. package/lib/types/common/storage/default/defaultInMemoryDataStore.d.ts +6 -0
  42. package/lib/types/common/telemetry/TelemetryConstants.d.ts +2 -0
  43. package/lib/types/components/livechatwidget/interfaces/ILiveChatWidgetProps.d.ts +2 -2
  44. package/lib/types/components/postchatsurveypanestateful/PostChatSurveyPaneStateful.d.ts +2 -2
  45. package/lib/types/components/postchatsurveypanestateful/interfaces/IPostChatSurveyPaneStatefulProps.d.ts +4 -0
  46. package/lib/types/components/webchatcontainerstateful/interfaces/IRenderingMiddlewareProps.d.ts +2 -1
  47. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultReceivedMessageAnchorStyles.d.ts +2 -0
  48. package/lib/types/contexts/common/ILiveChatWidgetContext.d.ts +1 -1
  49. package/lib/types/contexts/common/LiveChatWidgetActionType.d.ts +1 -1
  50. package/lib/types/contexts/common/LiveChatWidgetContextInitialState.d.ts +1 -2
  51. package/package.json +3 -3
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.registerBroadcastServiceForLocalStorage = exports.defaultCacheManager = void 0;
7
+
8
+ var _omnichannelChatComponents = require("@microsoft/omnichannel-chat-components");
9
+
10
+ var _utils = require("../../utils");
11
+
12
+ var _defaultClientDataStoreProvider = require("./defaultClientDataStoreProvider");
13
+
14
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
15
+
16
+ class defaultCacheManager {}
17
+
18
+ exports.defaultCacheManager = defaultCacheManager;
19
+
20
+ _defineProperty(defaultCacheManager, "InternalCache", {});
21
+
22
+ const registerBroadcastServiceForLocalStorage = (orgid, widgetId, widgetInstanceId) => {
23
+ const widgetCacheId = (0, _utils.getWidgetCacheId)(orgid, widgetId, widgetInstanceId);
24
+
25
+ _omnichannelChatComponents.BroadcastService.getMessageByEventName(widgetCacheId).subscribe(msg => {
26
+ try {
27
+ (0, _defaultClientDataStoreProvider.defaultClientDataStoreProvider)().setData(widgetCacheId, JSON.stringify(msg.payload), "localStorage");
28
+ } catch (error) {
29
+ console.error("Error in setting data to localstorage", error);
30
+ }
31
+ });
32
+ };
33
+
34
+ exports.registerBroadcastServiceForLocalStorage = registerBroadcastServiceForLocalStorage;
@@ -0,0 +1,114 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.defaultClientDataStoreProvider = void 0;
7
+
8
+ var _defaultInMemoryDataStore = require("./defaultInMemoryDataStore");
9
+
10
+ var _TelemetryHelper = require("../../telemetry/TelemetryHelper");
11
+
12
+ var _TelemetryConstants = require("../../telemetry/TelemetryConstants");
13
+
14
+ const defaultClientDataStoreProvider = () => {
15
+ const isCookieAllowed = () => {
16
+ try {
17
+ localStorage;
18
+ sessionStorage;
19
+ return true;
20
+ } catch (error) {
21
+ console.error("Third party cookie blocked");
22
+ return false;
23
+ }
24
+ };
25
+
26
+ const TtlInMs = 15 * 60 * 1000; // 15 mins
27
+
28
+ const dataStoreProvider = {
29
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
30
+ setData: (key, data, type) => {
31
+ if (isCookieAllowed()) {
32
+ try {
33
+ if (key) {
34
+ const now = new Date();
35
+ const item = {
36
+ data: data,
37
+ expiry: now.getTime() + TtlInMs
38
+ };
39
+ const strItem = JSON.stringify(item);
40
+
41
+ if (type === "localStorage") {
42
+ localStorage.setItem(key, strItem);
43
+ } else {
44
+ sessionStorage.setItem(key, strItem);
45
+ }
46
+ }
47
+ } catch (error) {
48
+ _TelemetryHelper.TelemetryHelper.logConfigDataEvent(_TelemetryConstants.LogLevel.ERROR, {
49
+ Event: _TelemetryConstants.TelemetryEvent.ClientDataStoreProviderFailed,
50
+ ExceptionDetails: error,
51
+ Description: "Unable to store data in localStorage."
52
+ });
53
+ }
54
+ } else {
55
+ const dataToCache = {
56
+ key: key,
57
+ data: data,
58
+ type: type
59
+ };
60
+ parent.postMessage(dataToCache, "*");
61
+ }
62
+ },
63
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
64
+ getData: (key, type) => {
65
+ if (isCookieAllowed()) {
66
+ let item;
67
+
68
+ if (type === "localStorage") {
69
+ item = localStorage.getItem(key);
70
+ } else {
71
+ item = sessionStorage.getItem(key);
72
+ } //Return item if not expired
73
+
74
+
75
+ let itemInJson = undefined;
76
+
77
+ if (item !== null) {
78
+ itemInJson = JSON.parse(item);
79
+ const now = new Date(); // compare the expiry time of the item with the current time
80
+
81
+ if (now.getTime() > itemInJson.expiry) {
82
+ // If the item is expired, delete the item from storage
83
+ // and return null
84
+ localStorage.removeItem(key);
85
+ return null;
86
+ }
87
+
88
+ return itemInJson.data;
89
+ }
90
+ } else {
91
+ // get data from in memory db when cookie is disabled
92
+ return (0, _defaultInMemoryDataStore.inMemoryDataStore)().getData(key);
93
+ }
94
+ },
95
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
96
+ removeData: (key, type) => {
97
+ if (isCookieAllowed()) {
98
+ if (key) {
99
+ if (type === "localStorage") {
100
+ return localStorage.removeItem(key);
101
+ } else {
102
+ return sessionStorage.removeItem(key);
103
+ }
104
+ }
105
+ } else {
106
+ // get data from in memory db when cookie is disabled
107
+ return (0, _defaultInMemoryDataStore.inMemoryDataStore)().removeData(key);
108
+ }
109
+ }
110
+ };
111
+ return dataStoreProvider;
112
+ };
113
+
114
+ exports.defaultClientDataStoreProvider = defaultClientDataStoreProvider;
@@ -0,0 +1,86 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.inMemoryDataStore = exports.defaultInitializeInMemoryDataStore = void 0;
7
+
8
+ var _TelemetryConstants = require("../../telemetry/TelemetryConstants");
9
+
10
+ var _TelemetryHelper = require("../../telemetry/TelemetryHelper");
11
+
12
+ var _defaultCacheManager = require("./defaultCacheManager");
13
+
14
+ const defaultInitializeInMemoryDataStore = widgetId => {
15
+ try {
16
+ localStorage;
17
+ } catch (error) {
18
+ // Register below events when localStorage is not accessible
19
+ // Listening to event raised from client browser
20
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
21
+ window.addEventListener("message", function (e) {
22
+ try {
23
+ if (e.data.key) {
24
+ const browserData = e.data;
25
+
26
+ if (_defaultCacheManager.defaultCacheManager.InternalCache[browserData.key]) {
27
+ delete _defaultCacheManager.defaultCacheManager.InternalCache[browserData.key];
28
+ }
29
+
30
+ _defaultCacheManager.defaultCacheManager.InternalCache[browserData.key] = browserData.data;
31
+ }
32
+ } catch (error) {
33
+ _TelemetryHelper.TelemetryHelper.logConfigDataEvent(_TelemetryConstants.LogLevel.ERROR, {
34
+ Event: _TelemetryConstants.TelemetryEvent.InMemoryDataStoreFailed,
35
+ ExceptionDetails: error,
36
+ Description: "Unable to register default in-memory cache."
37
+ });
38
+ }
39
+ }); // send cache initialize message to client
40
+
41
+ if (_defaultCacheManager.defaultCacheManager.InternalCache === undefined || {}) {
42
+ parent.postMessage({
43
+ data: "cacheinitialize",
44
+ widgetId: widgetId
45
+ }, "*");
46
+ }
47
+ }
48
+ };
49
+
50
+ exports.defaultInitializeInMemoryDataStore = defaultInitializeInMemoryDataStore;
51
+
52
+ const inMemoryDataStore = () => {
53
+ const dataStoreProvider = {
54
+ getData: key => {
55
+ if (_defaultCacheManager.defaultCacheManager.InternalCache && _defaultCacheManager.defaultCacheManager.InternalCache[key]) {
56
+ return _defaultCacheManager.defaultCacheManager.InternalCache[key];
57
+ }
58
+ },
59
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
60
+ setData: (key, data) => {
61
+ try {
62
+ _defaultCacheManager.defaultCacheManager.InternalCache[key] = data;
63
+ } catch (error) {
64
+ _TelemetryHelper.TelemetryHelper.logConfigDataEvent(_TelemetryConstants.LogLevel.ERROR, {
65
+ Event: _TelemetryConstants.TelemetryEvent.InMemoryDataStoreFailed,
66
+ ExceptionDetails: error,
67
+ Description: "Unable to set data in default in-memory cache."
68
+ });
69
+ }
70
+ },
71
+ removeData: key => {
72
+ try {
73
+ _defaultCacheManager.defaultCacheManager.InternalCache[key] = {};
74
+ } catch (error) {
75
+ _TelemetryHelper.TelemetryHelper.logConfigDataEvent(_TelemetryConstants.LogLevel.ERROR, {
76
+ Event: _TelemetryConstants.TelemetryEvent.InMemoryDataStoreFailed,
77
+ ExceptionDetails: error,
78
+ Description: "Unable to remove data from default in-memory cache."
79
+ });
80
+ }
81
+ }
82
+ };
83
+ return dataStoreProvider;
84
+ };
85
+
86
+ exports.inMemoryDataStore = inMemoryDataStore;
@@ -101,6 +101,8 @@ exports.TelemetryEvent = TelemetryEvent;
101
101
  TelemetryEvent["PostChatContextCallSucceed"] = "PostChatContextCallSucceed";
102
102
  TelemetryEvent["PostChatContextCallFailed"] = "PostChatContextCallFailed";
103
103
  TelemetryEvent["ParseAdaptiveCardFailed"] = "ParseAdaptiveCardFailed";
104
+ TelemetryEvent["ClientDataStoreProviderFailed"] = "ClientDataStoreProviderFailed";
105
+ TelemetryEvent["InMemoryDataStoreFailed"] = "InMemoryDataStoreFailed";
104
106
  TelemetryEvent["WebChatLoaded"] = "WebChatLoaded";
105
107
  TelemetryEvent["LCWChatButtonClicked"] = "LCWChatButtonClicked";
106
108
  TelemetryEvent["LCWChatButtonShow"] = "LCWChatButtonShow";
@@ -179,6 +181,10 @@ class TelemetryConstants {
179
181
  static map(eventTypeOrScenarioType) {
180
182
  switch (eventTypeOrScenarioType) {
181
183
  case TelemetryEvent.ParseAdaptiveCardFailed:
184
+ case TelemetryEvent.ReceivedNullOrEmptyToken:
185
+ case TelemetryEvent.GetAuthTokenCalled:
186
+ case TelemetryEvent.SuppressBotMagicCodeSucceeded:
187
+ case TelemetryEvent.SuppressBotMagicCodeFailed:
182
188
  return ScenarioType.CONFIG_VALIDATION;
183
189
 
184
190
  case TelemetryEvent.WebChatLoaded:
@@ -221,6 +227,8 @@ class TelemetryConstants {
221
227
  case TelemetryEvent.BrowserUnloadEventStarted:
222
228
  case TelemetryEvent.NetworkDisconnected:
223
229
  case TelemetryEvent.NetworkReconnected:
230
+ case TelemetryEvent.AudioToggleButtonClicked:
231
+ case TelemetryEvent.EmailTranscriptCancelButtonClicked:
224
232
  return ScenarioType.ACTIONS;
225
233
 
226
234
  case TelemetryEvent.StartChatSDKCall:
@@ -237,6 +245,7 @@ class TelemetryConstants {
237
245
  case TelemetryEvent.EndChatSDKCallFailed:
238
246
  case TelemetryEvent.PostChatContextCallFailed:
239
247
  case TelemetryEvent.PostChatContextCallSucceed:
248
+ case TelemetryEvent.GetConversationDetailsException:
240
249
  return ScenarioType.SDK;
241
250
 
242
251
  case TelemetryEvent.VideoCallAcceptButtonClick:
@@ -7,9 +7,7 @@ exports.ariaTelemetryLogger = void 0;
7
7
 
8
8
  var _utils = require("../../utils");
9
9
 
10
- var _AWTEventProperties = _interopRequireDefault(require("@microsoft/omnichannel-chat-sdk/lib/external/aria/webjs/AWTEventProperties"));
11
-
12
- var _AWTLogManager = _interopRequireDefault(require("@microsoft/omnichannel-chat-sdk/lib/external/aria/webjs/AWTLogManager"));
10
+ var _AriaSDK = require("@microsoft/omnichannel-chat-sdk/lib/external/aria/webjs/AriaSDK");
13
11
 
14
12
  var _Enums = require("@microsoft/omnichannel-chat-sdk/lib/external/aria/common/Enums");
15
13
 
@@ -17,8 +15,6 @@ var _Constants = require("../../Constants");
17
15
 
18
16
  var _TelemetryManager = require("../TelemetryManager");
19
17
 
20
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
21
-
22
18
  const ariaTelemetryLogger = (ariaTelemetryKey, disabledCookieUsage, collectiorUriForTelemetry, ariaTelemetryApplicationName) => {
23
19
  let _logger;
24
20
 
@@ -48,10 +44,10 @@ const ariaTelemetryLogger = (ariaTelemetryKey, disabledCookieUsage, collectiorUr
48
44
  }
49
45
 
50
46
  try {
51
- _logger = _AWTLogManager.default.initialize(ariaTelemetryKey, configuration);
47
+ _logger = _AriaSDK.AWTLogManager.initialize(ariaTelemetryKey, configuration);
52
48
 
53
49
  if (_logger === undefined) {
54
- _logger = _AWTLogManager.default.getLogger(ariaTelemetryKey);
50
+ _logger = _AriaSDK.AWTLogManager.getLogger(ariaTelemetryKey);
55
51
  }
56
52
  } catch (error) {
57
53
  console.log(error);
@@ -64,18 +60,35 @@ const ariaTelemetryLogger = (ariaTelemetryKey, disabledCookieUsage, collectiorUr
64
60
  const ariaLogger = {
65
61
  log: (logLevel, telemetryInput) => {
66
62
  try {
67
- let property;
68
- const telemetryInfo = telemetryInput === null || telemetryInput === void 0 ? void 0 : telemetryInput.telemetryInfo;
69
- const eventProperties = new _AWTEventProperties.default();
70
- eventProperties.setName(telemetryInput.scenarioType);
63
+ var _telemetryInput$telem;
71
64
 
72
- if (telemetryInfo) {
73
- for (const key of Object.keys(telemetryInfo)) {
74
- property = typeof telemetryInfo[key] === "object" ? JSON.stringify(telemetryInfo[key]) : telemetryInfo[key];
75
- eventProperties.setProperty(key, property);
76
- }
65
+ const telemetryInfo = telemetryInput === null || telemetryInput === void 0 ? void 0 : (_telemetryInput$telem = telemetryInput.telemetryInfo) === null || _telemetryInput$telem === void 0 ? void 0 : _telemetryInput$telem.telemetryInfo; // eslint-disable-next-line @typescript-eslint/no-explicit-any
77
66
 
78
- eventProperties.setPropertyWithPii(ariaTelemetryApplicationName, _Constants.Constants.LiveChatWidget, _Enums.AWTPiiKind.GenericData);
67
+ const eventProperties = {
68
+ name: telemetryInput.scenarioType,
69
+ properties: {}
70
+ };
71
+
72
+ if (telemetryInfo) {
73
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
74
+ Object.keys(telemetryInfo).forEach((key, index) => {
75
+ if (!(0, _utils.isNullOrUndefined)(telemetryInfo[key]) && !(0, _utils.isNullOrEmptyString)(telemetryInfo[key])) {
76
+ const property = {
77
+ value: typeof telemetryInfo[key] === "object" ? JSON.stringify(telemetryInfo[key]) : telemetryInfo[key],
78
+ type: typeof telemetryInfo[key] === "number" ? _Enums.AWTPropertyType.Double : _Enums.AWTPropertyType.String,
79
+ pii: _Enums.AWTPiiKind.NotSet,
80
+ cc: _Enums.AWTCustomerContentKind.NotSet
81
+ };
82
+ eventProperties.properties[key] = property;
83
+ }
84
+ });
85
+ const nameProperty = {
86
+ value: _Constants.Constants.LiveChatWidget,
87
+ type: _Enums.AWTPropertyType.String,
88
+ pii: _Enums.AWTPiiKind.GenericData,
89
+ cc: _Enums.AWTCustomerContentKind.NotSet
90
+ };
91
+ eventProperties.properties[ariaTelemetryApplicationName] = nameProperty;
79
92
  }
80
93
 
81
94
  logger() ? logger().logEvent(eventProperties) : console.log("Unable to initialize aria logger");
@@ -84,7 +97,7 @@ const ariaTelemetryLogger = (ariaTelemetryKey, disabledCookieUsage, collectiorUr
84
97
  }
85
98
  },
86
99
  dispose: () => {
87
- _AWTLogManager.default.flush(function () {
100
+ _AriaSDK.AWTLogManager.flush(function () {
88
101
  console.log("Aria logger disposed");
89
102
  });
90
103
  }
@@ -81,12 +81,12 @@ const ConfirmationPaneStateful = props => {
81
81
  type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_SHOW_CONFIRMATION,
82
82
  payload: false
83
83
  });
84
- const previousFocused = state.appStates.previousElementOnFocusBeforeModalOpen;
84
+ const previousFocusedElementId = state.appStates.previousElementIdOnFocusBeforeModalOpen;
85
85
 
86
- if (previousFocused) {
87
- (0, _utils.setFocusOnElement)(previousFocused);
86
+ if (previousFocusedElementId) {
87
+ (0, _utils.setFocusOnElement)("#" + previousFocusedElementId);
88
88
  dispatch({
89
- type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_PREVIOUS_FOCUSED_ELEMENT,
89
+ type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_PREVIOUS_FOCUSED_ELEMENT_ID,
90
90
  payload: null
91
91
  });
92
92
  } else {
@@ -50,16 +50,16 @@ const EmailTranscriptPaneStateful = props => {
50
50
  type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_SHOW_EMAIL_TRANSCRIPT_PANE,
51
51
  payload: false
52
52
  });
53
- const previousFocused = state.appStates.previousElementOnFocusBeforeModalOpen;
53
+ const previousFocusedElementId = state.appStates.previousElementIdOnFocusBeforeModalOpen;
54
54
 
55
- if (previousFocused) {
56
- (0, _utils.setFocusOnElement)(previousFocused);
55
+ if (previousFocusedElementId) {
56
+ (0, _utils.setFocusOnElement)("#" + previousFocusedElementId);
57
57
  } else {
58
58
  (0, _utils.setFocusOnSendBox)();
59
59
  }
60
60
 
61
61
  dispatch({
62
- type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_PREVIOUS_FOCUSED_ELEMENT,
62
+ type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_PREVIOUS_FOCUSED_ELEMENT_ID,
63
63
  payload: null
64
64
  });
65
65
  (0, _utils.setTabIndices)(elements, initialTabIndexMap, true);
@@ -79,13 +79,12 @@ const FooterStateful = props => {
79
79
  Description: "Email Transcript button clicked."
80
80
  });
81
81
 
82
- const emailTranscriptButtonId = (footerProps === null || footerProps === void 0 ? void 0 : (_footerProps$controlP = footerProps.controlProps) === null || _footerProps$controlP === void 0 ? void 0 : (_footerProps$controlP2 = _footerProps$controlP.emailTranscriptButtonProps) === null || _footerProps$controlP2 === void 0 ? void 0 : _footerProps$controlP2.id) ?? "oc-lcw-footer-emailtranscript-button";
83
- const emailTranscriptButton = document.getElementById(emailTranscriptButtonId);
82
+ const emailTranscriptButtonId = (footerProps === null || footerProps === void 0 ? void 0 : (_footerProps$controlP = footerProps.controlProps) === null || _footerProps$controlP === void 0 ? void 0 : (_footerProps$controlP2 = _footerProps$controlP.emailTranscriptButtonProps) === null || _footerProps$controlP2 === void 0 ? void 0 : _footerProps$controlP2.id) ?? `${controlProps.id}-emailtranscript-button`;
84
83
 
85
- if (emailTranscriptButton) {
84
+ if (emailTranscriptButtonId) {
86
85
  dispatch({
87
- type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_PREVIOUS_FOCUSED_ELEMENT,
88
- payload: emailTranscriptButton
86
+ type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_PREVIOUS_FOCUSED_ELEMENT_ID,
87
+ payload: emailTranscriptButtonId
89
88
  });
90
89
  }
91
90
 
@@ -110,14 +109,7 @@ const FooterStateful = props => {
110
109
  isAudioMuted: state.appStates.isAudioMuted
111
110
  }
112
111
  };
113
- const footerId = (controlProps === null || controlProps === void 0 ? void 0 : controlProps.id) ?? "oc-lcw-footer";
114
- const footer = document.getElementById(footerId);
115
-
116
- if (footer) {
117
- footer.style.display = hideFooterDisplay ? "none" : "";
118
- }
119
-
120
- return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_omnichannelChatComponents.Footer, {
112
+ return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, !hideFooterDisplay && /*#__PURE__*/_react.default.createElement(_omnichannelChatComponents.Footer, {
121
113
  componentOverrides: footerProps === null || footerProps === void 0 ? void 0 : footerProps.componentOverrides,
122
114
  controlProps: controlProps,
123
115
  styleProps: footerProps === null || footerProps === void 0 ? void 0 : footerProps.styleProps
@@ -59,6 +59,8 @@ const HeaderStateful = props => {
59
59
  });
60
60
  },
61
61
  onCloseClick: async () => {
62
+ var _props$headerProps, _props$headerProps$co, _props$headerProps$co2;
63
+
62
64
  _TelemetryHelper.TelemetryHelper.logActionEvent(_TelemetryConstants.LogLevel.INFO, {
63
65
  Event: _TelemetryConstants.TelemetryEvent.HeaderCloseButtonClicked,
64
66
  Description: "Header Close button clicked."
@@ -76,10 +78,14 @@ const HeaderStateful = props => {
76
78
  await endChat(adapter, skipEndChatSDK, skipCloseChat, postMessageToOtherTabs);
77
79
  }
78
80
 
79
- dispatch({
80
- type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_PREVIOUS_FOCUSED_ELEMENT,
81
- payload: document.getElementById(`${controlProps.id}-closebutton`)
82
- });
81
+ const closeButtonId = ((_props$headerProps = props.headerProps) === null || _props$headerProps === void 0 ? void 0 : (_props$headerProps$co = _props$headerProps.controlProps) === null || _props$headerProps$co === void 0 ? void 0 : (_props$headerProps$co2 = _props$headerProps$co.closeButtonProps) === null || _props$headerProps$co2 === void 0 ? void 0 : _props$headerProps$co2.id) ?? `${controlProps.id}-close-button`;
82
+
83
+ if (closeButtonId) {
84
+ dispatch({
85
+ type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_PREVIOUS_FOCUSED_ELEMENT_ID,
86
+ payload: closeButtonId
87
+ });
88
+ }
83
89
  },
84
90
  ...(headerProps === null || headerProps === void 0 ? void 0 : headerProps.controlProps),
85
91
  hideTitle: state.appStates.conversationState === _ConversationState.ConversationState.Loading || state.appStates.conversationState === _ConversationState.ConversationState.PostchatLoading || (headerProps === null || headerProps === void 0 ? void 0 : (_headerProps$controlP = headerProps.controlProps) === null || _headerProps$controlP === void 0 ? void 0 : _headerProps$controlP.hideTitle),
@@ -16,26 +16,17 @@ var _componentController = require("../../../controller/componentController");
16
16
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
17
17
 
18
18
  const createFooter = (props, state) => {
19
- var _props$footerProps, _props$controlProps, _props$componentOverr, _props$componentOverr2;
20
-
21
- const footerPropsHidden = { ...props.footerProps,
22
- controlProps: { ...((_props$footerProps = props.footerProps) === null || _props$footerProps === void 0 ? void 0 : _props$footerProps.controlProps),
23
- hideDownloadTranscriptButton: true,
24
- hideEmailTranscriptButton: true,
25
- hideAudioNotificationButton: true
26
- }
27
- };
28
- const footer = !((_props$controlProps = props.controlProps) !== null && _props$controlProps !== void 0 && _props$controlProps.hideFooter) && (0, _componentController.shouldShowFooter)(state) ? (0, _omnichannelChatComponents.decodeComponentString)((_props$componentOverr = props.componentOverrides) === null || _props$componentOverr === void 0 ? void 0 : _props$componentOverr.footer) || /*#__PURE__*/_react.default.createElement(_FooterStateful.default, {
19
+ var _props$controlProps, _props$componentOverr;
20
+
21
+ const hideFooterDisplay = !((_props$controlProps = props.controlProps) !== null && _props$controlProps !== void 0 && _props$controlProps.hideFooter) && (0, _componentController.shouldShowFooter)(state) ? false : true;
22
+
23
+ const footer = (0, _omnichannelChatComponents.decodeComponentString)((_props$componentOverr = props.componentOverrides) === null || _props$componentOverr === void 0 ? void 0 : _props$componentOverr.footer) || /*#__PURE__*/_react.default.createElement(_FooterStateful.default, {
29
24
  footerProps: props.footerProps,
30
25
  downloadTranscriptProps: props.downloadTranscriptProps,
31
26
  audioNotificationProps: props.audioNotificationProps,
32
- hideFooterDisplay: false
33
- }) : (0, _omnichannelChatComponents.decodeComponentString)((_props$componentOverr2 = props.componentOverrides) === null || _props$componentOverr2 === void 0 ? void 0 : _props$componentOverr2.footer) || /*#__PURE__*/_react.default.createElement(_FooterStateful.default, {
34
- footerProps: footerPropsHidden,
35
- downloadTranscriptProps: props.downloadTranscriptProps,
36
- audioNotificationProps: props.audioNotificationProps,
37
- hideFooterDisplay: true
27
+ hideFooterDisplay: hideFooterDisplay
38
28
  });
29
+
39
30
  return footer;
40
31
  };
41
32
 
@@ -891,7 +891,7 @@ const dummyDefaultProps = {
891
891
  className: undefined
892
892
  },
893
893
  closeButtonProps: {
894
- id: "oc-lcw-header-minimize-button",
894
+ id: "oc-lcw-header-close-button",
895
895
  type: "icon",
896
896
  iconName: "ChromeClose",
897
897
  ariaLabel: "Close",
@@ -1187,7 +1187,8 @@ const dummyDefaultProps = {
1187
1187
  backgroundColor: "#FFFFFF",
1188
1188
  borderColor: "#F1F1F1"
1189
1189
  }
1190
- }
1190
+ },
1191
+ isCustomerVoiceSurveyCompact: undefined
1191
1192
  },
1192
1193
  proactiveChatPaneProps: {
1193
1194
  componentOverrides: {
@@ -1207,7 +1208,17 @@ const dummyDefaultProps = {
1207
1208
  hideSubtitle: false,
1208
1209
  subtitleText: "Live chat support!",
1209
1210
  hideCloseButton: false,
1210
- closeButtonAriaLabel: "Close Button",
1211
+ closeButtonProps: {
1212
+ id: "oc-lcw-proactivechat-closebutton",
1213
+ type: "icon",
1214
+ iconName: "ChromeClose",
1215
+ ariaLabel: "Close",
1216
+ imageIconProps: undefined,
1217
+ text: "Close",
1218
+ onClick: undefined,
1219
+ className: undefined,
1220
+ hideButtonTitle: true
1221
+ },
1211
1222
  isBodyContainerHorizantal: false,
1212
1223
  hideBodyTitle: false,
1213
1224
  bodyTitleText: "Hi! Have any questions? I am here to help.",
@@ -1676,6 +1687,9 @@ const dummyDefaultProps = {
1676
1687
  },
1677
1688
  attachmentSizeStyles: {
1678
1689
  display: "none"
1690
+ },
1691
+ receivedMessageAnchorStyles: {
1692
+ color: "white"
1679
1693
  }
1680
1694
  },
1681
1695
  localizedTexts: {