@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
@@ -1,7 +1,6 @@
1
1
  import { getDomain, isNullOrEmptyString, isNullOrUndefined } from "../../utils";
2
- import AWTEventProperties from "@microsoft/omnichannel-chat-sdk/lib/external/aria/webjs/AWTEventProperties";
3
- import AWTLogManager from "@microsoft/omnichannel-chat-sdk/lib/external/aria/webjs/AWTLogManager";
4
- import { AWTPiiKind } from "@microsoft/omnichannel-chat-sdk/lib/external/aria/common/Enums";
2
+ import { AWTLogManager } from "@microsoft/omnichannel-chat-sdk/lib/external/aria/webjs/AriaSDK";
3
+ import { AWTCustomerContentKind, AWTPiiKind, AWTPropertyType } from "@microsoft/omnichannel-chat-sdk/lib/external/aria/common/Enums";
5
4
  import { Constants, AriaTelemetryConstants, EnvironmentVersion } from "../../Constants";
6
5
  import { TelemetryManager } from "../TelemetryManager";
7
6
  export const ariaTelemetryLogger = (ariaTelemetryKey, disabledCookieUsage, collectiorUriForTelemetry, ariaTelemetryApplicationName) => {
@@ -49,18 +48,35 @@ export const ariaTelemetryLogger = (ariaTelemetryKey, disabledCookieUsage, colle
49
48
  const ariaLogger = {
50
49
  log: (logLevel, telemetryInput) => {
51
50
  try {
52
- let property;
53
- const telemetryInfo = telemetryInput === null || telemetryInput === void 0 ? void 0 : telemetryInput.telemetryInfo;
54
- const eventProperties = new AWTEventProperties();
55
- eventProperties.setName(telemetryInput.scenarioType);
51
+ var _telemetryInput$telem;
56
52
 
57
- if (telemetryInfo) {
58
- for (const key of Object.keys(telemetryInfo)) {
59
- property = typeof telemetryInfo[key] === "object" ? JSON.stringify(telemetryInfo[key]) : telemetryInfo[key];
60
- eventProperties.setProperty(key, property);
61
- }
53
+ 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
54
+
55
+ const eventProperties = {
56
+ name: telemetryInput.scenarioType,
57
+ properties: {}
58
+ };
62
59
 
63
- eventProperties.setPropertyWithPii(ariaTelemetryApplicationName, Constants.LiveChatWidget, AWTPiiKind.GenericData);
60
+ if (telemetryInfo) {
61
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
62
+ Object.keys(telemetryInfo).forEach((key, index) => {
63
+ if (!isNullOrUndefined(telemetryInfo[key]) && !isNullOrEmptyString(telemetryInfo[key])) {
64
+ const property = {
65
+ value: typeof telemetryInfo[key] === "object" ? JSON.stringify(telemetryInfo[key]) : telemetryInfo[key],
66
+ type: typeof telemetryInfo[key] === "number" ? AWTPropertyType.Double : AWTPropertyType.String,
67
+ pii: AWTPiiKind.NotSet,
68
+ cc: AWTCustomerContentKind.NotSet
69
+ };
70
+ eventProperties.properties[key] = property;
71
+ }
72
+ });
73
+ const nameProperty = {
74
+ value: Constants.LiveChatWidget,
75
+ type: AWTPropertyType.String,
76
+ pii: AWTPiiKind.GenericData,
77
+ cc: AWTCustomerContentKind.NotSet
78
+ };
79
+ eventProperties.properties[ariaTelemetryApplicationName] = nameProperty;
64
80
  }
65
81
 
66
82
  logger() ? logger().logEvent(eventProperties) : console.log("Unable to initialize aria logger");
@@ -54,12 +54,12 @@ export const ConfirmationPaneStateful = props => {
54
54
  type: LiveChatWidgetActionType.SET_SHOW_CONFIRMATION,
55
55
  payload: false
56
56
  });
57
- const previousFocused = state.appStates.previousElementOnFocusBeforeModalOpen;
57
+ const previousFocusedElementId = state.appStates.previousElementIdOnFocusBeforeModalOpen;
58
58
 
59
- if (previousFocused) {
60
- setFocusOnElement(previousFocused);
59
+ if (previousFocusedElementId) {
60
+ setFocusOnElement("#" + previousFocusedElementId);
61
61
  dispatch({
62
- type: LiveChatWidgetActionType.SET_PREVIOUS_FOCUSED_ELEMENT,
62
+ type: LiveChatWidgetActionType.SET_PREVIOUS_FOCUSED_ELEMENT_ID,
63
63
  payload: null
64
64
  });
65
65
  } else {
@@ -25,16 +25,16 @@ export const EmailTranscriptPaneStateful = props => {
25
25
  type: LiveChatWidgetActionType.SET_SHOW_EMAIL_TRANSCRIPT_PANE,
26
26
  payload: false
27
27
  });
28
- const previousFocused = state.appStates.previousElementOnFocusBeforeModalOpen;
28
+ const previousFocusedElementId = state.appStates.previousElementIdOnFocusBeforeModalOpen;
29
29
 
30
- if (previousFocused) {
31
- setFocusOnElement(previousFocused);
30
+ if (previousFocusedElementId) {
31
+ setFocusOnElement("#" + previousFocusedElementId);
32
32
  } else {
33
33
  setFocusOnSendBox();
34
34
  }
35
35
 
36
36
  dispatch({
37
- type: LiveChatWidgetActionType.SET_PREVIOUS_FOCUSED_ELEMENT,
37
+ type: LiveChatWidgetActionType.SET_PREVIOUS_FOCUSED_ELEMENT_ID,
38
38
  payload: null
39
39
  });
40
40
  setTabIndices(elements, initialTabIndexMap, true);
@@ -54,13 +54,12 @@ export const FooterStateful = props => {
54
54
  Event: TelemetryEvent.EmailTranscriptButtonClicked,
55
55
  Description: "Email Transcript button clicked."
56
56
  });
57
- 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";
58
- const emailTranscriptButton = document.getElementById(emailTranscriptButtonId);
57
+ 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`;
59
58
 
60
- if (emailTranscriptButton) {
59
+ if (emailTranscriptButtonId) {
61
60
  dispatch({
62
- type: LiveChatWidgetActionType.SET_PREVIOUS_FOCUSED_ELEMENT,
63
- payload: emailTranscriptButton
61
+ type: LiveChatWidgetActionType.SET_PREVIOUS_FOCUSED_ELEMENT_ID,
62
+ payload: emailTranscriptButtonId
64
63
  });
65
64
  }
66
65
 
@@ -84,14 +83,7 @@ export const FooterStateful = props => {
84
83
  isAudioMuted: state.appStates.isAudioMuted
85
84
  }
86
85
  };
87
- const footerId = (controlProps === null || controlProps === void 0 ? void 0 : controlProps.id) ?? "oc-lcw-footer";
88
- const footer = document.getElementById(footerId);
89
-
90
- if (footer) {
91
- footer.style.display = hideFooterDisplay ? "none" : "";
92
- }
93
-
94
- return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Footer, {
86
+ return /*#__PURE__*/React.createElement(React.Fragment, null, !hideFooterDisplay && /*#__PURE__*/React.createElement(Footer, {
95
87
  componentOverrides: footerProps === null || footerProps === void 0 ? void 0 : footerProps.componentOverrides,
96
88
  controlProps: controlProps,
97
89
  styleProps: footerProps === null || footerProps === void 0 ? void 0 : footerProps.styleProps
@@ -36,6 +36,8 @@ export const HeaderStateful = props => {
36
36
  });
37
37
  },
38
38
  onCloseClick: async () => {
39
+ var _props$headerProps, _props$headerProps$co, _props$headerProps$co2;
40
+
39
41
  TelemetryHelper.logActionEvent(LogLevel.INFO, {
40
42
  Event: TelemetryEvent.HeaderCloseButtonClicked,
41
43
  Description: "Header Close button clicked."
@@ -53,10 +55,14 @@ export const HeaderStateful = props => {
53
55
  await endChat(adapter, skipEndChatSDK, skipCloseChat, postMessageToOtherTabs);
54
56
  }
55
57
 
56
- dispatch({
57
- type: LiveChatWidgetActionType.SET_PREVIOUS_FOCUSED_ELEMENT,
58
- payload: document.getElementById(`${controlProps.id}-closebutton`)
59
- });
58
+ 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`;
59
+
60
+ if (closeButtonId) {
61
+ dispatch({
62
+ type: LiveChatWidgetActionType.SET_PREVIOUS_FOCUSED_ELEMENT_ID,
63
+ payload: closeButtonId
64
+ });
65
+ }
60
66
  },
61
67
  ...(headerProps === null || headerProps === void 0 ? void 0 : headerProps.controlProps),
62
68
  hideTitle: state.appStates.conversationState === ConversationState.Loading || state.appStates.conversationState === ConversationState.PostchatLoading || (headerProps === null || headerProps === void 0 ? void 0 : (_headerProps$controlP = headerProps.controlProps) === null || _headerProps$controlP === void 0 ? void 0 : _headerProps$controlP.hideTitle),
@@ -3,25 +3,14 @@ import React from "react";
3
3
  import { decodeComponentString } from "@microsoft/omnichannel-chat-components";
4
4
  import { shouldShowFooter } from "../../../controller/componentController";
5
5
  export const createFooter = (props, state) => {
6
- var _props$footerProps, _props$controlProps, _props$componentOverr, _props$componentOverr2;
6
+ var _props$controlProps, _props$componentOverr;
7
7
 
8
- const footerPropsHidden = { ...props.footerProps,
9
- controlProps: { ...((_props$footerProps = props.footerProps) === null || _props$footerProps === void 0 ? void 0 : _props$footerProps.controlProps),
10
- hideDownloadTranscriptButton: true,
11
- hideEmailTranscriptButton: true,
12
- hideAudioNotificationButton: true
13
- }
14
- };
15
- const footer = !((_props$controlProps = props.controlProps) !== null && _props$controlProps !== void 0 && _props$controlProps.hideFooter) && shouldShowFooter(state) ? decodeComponentString((_props$componentOverr = props.componentOverrides) === null || _props$componentOverr === void 0 ? void 0 : _props$componentOverr.footer) || /*#__PURE__*/React.createElement(FooterStateful, {
8
+ const hideFooterDisplay = !((_props$controlProps = props.controlProps) !== null && _props$controlProps !== void 0 && _props$controlProps.hideFooter) && shouldShowFooter(state) ? false : true;
9
+ const footer = decodeComponentString((_props$componentOverr = props.componentOverrides) === null || _props$componentOverr === void 0 ? void 0 : _props$componentOverr.footer) || /*#__PURE__*/React.createElement(FooterStateful, {
16
10
  footerProps: props.footerProps,
17
11
  downloadTranscriptProps: props.downloadTranscriptProps,
18
12
  audioNotificationProps: props.audioNotificationProps,
19
- hideFooterDisplay: false
20
- }) : decodeComponentString((_props$componentOverr2 = props.componentOverrides) === null || _props$componentOverr2 === void 0 ? void 0 : _props$componentOverr2.footer) || /*#__PURE__*/React.createElement(FooterStateful, {
21
- footerProps: footerPropsHidden,
22
- downloadTranscriptProps: props.downloadTranscriptProps,
23
- audioNotificationProps: props.audioNotificationProps,
24
- hideFooterDisplay: true
13
+ hideFooterDisplay: hideFooterDisplay
25
14
  });
26
15
  return footer;
27
16
  };
@@ -870,7 +870,7 @@ export const dummyDefaultProps = {
870
870
  className: undefined
871
871
  },
872
872
  closeButtonProps: {
873
- id: "oc-lcw-header-minimize-button",
873
+ id: "oc-lcw-header-close-button",
874
874
  type: "icon",
875
875
  iconName: "ChromeClose",
876
876
  ariaLabel: "Close",
@@ -1166,7 +1166,8 @@ export const dummyDefaultProps = {
1166
1166
  backgroundColor: "#FFFFFF",
1167
1167
  borderColor: "#F1F1F1"
1168
1168
  }
1169
- }
1169
+ },
1170
+ isCustomerVoiceSurveyCompact: undefined
1170
1171
  },
1171
1172
  proactiveChatPaneProps: {
1172
1173
  componentOverrides: {
@@ -1186,7 +1187,17 @@ export const dummyDefaultProps = {
1186
1187
  hideSubtitle: false,
1187
1188
  subtitleText: "Live chat support!",
1188
1189
  hideCloseButton: false,
1189
- closeButtonAriaLabel: "Close Button",
1190
+ closeButtonProps: {
1191
+ id: "oc-lcw-proactivechat-closebutton",
1192
+ type: "icon",
1193
+ iconName: "ChromeClose",
1194
+ ariaLabel: "Close",
1195
+ imageIconProps: undefined,
1196
+ text: "Close",
1197
+ onClick: undefined,
1198
+ className: undefined,
1199
+ hideButtonTitle: true
1200
+ },
1190
1201
  isBodyContainerHorizantal: false,
1191
1202
  hideBodyTitle: false,
1192
1203
  bodyTitleText: "Hi! Have any questions? I am here to help.",
@@ -1655,6 +1666,9 @@ export const dummyDefaultProps = {
1655
1666
  },
1656
1667
  attachmentSizeStyles: {
1657
1668
  display: "none"
1669
+ },
1670
+ receivedMessageAnchorStyles: {
1671
+ color: "white"
1658
1672
  }
1659
1673
  },
1660
1674
  localizedTexts: {
@@ -44,7 +44,8 @@ import useChatAdapterStore from "../../../hooks/useChatAdapterStore";
44
44
  import useChatContextStore from "../../../hooks/useChatContextStore";
45
45
  import useChatSDKStore from "../../../hooks/useChatSDKStore";
46
46
  import { ActivityStreamHandler } from "../common/ActivityStreamHandler";
47
- import { Constants } from "../../../common/Constants";
47
+ import { registerBroadcastServiceForLocalStorage } from "../../../common/storage/default/defaultCacheManager";
48
+ import { defaultClientDataStoreProvider } from "../../../common/storage/default/defaultClientDataStoreProvider";
48
49
  export const LiveChatWidgetStateful = props => {
49
50
  var _props$webChatContain, _props$styleProps, _chatSDK$omnichannelC, _props$controlProps, _props$controlProps2, _props$webChatContain3, _props$webChatContain4, _props$styleProps2, _props$controlProps14, _props$controlProps15, _props$componentOverr, _props$controlProps16, _props$componentOverr2, _props$controlProps17, _props$componentOverr3, _props$controlProps18, _props$componentOverr4, _props$controlProps19, _props$componentOverr5, _props$controlProps20, _props$componentOverr6, _props$controlProps21, _props$componentOverr7, _props$controlProps22, _props$controlProps23, _props$componentOverr8, _props$controlProps24, _props$componentOverr9, _props$controlProps25, _props$componentOverr10, _props$componentOverr11, _props$componentOverr12;
50
51
 
@@ -95,30 +96,39 @@ export const LiveChatWidgetStateful = props => {
95
96
  };
96
97
 
97
98
  useEffect(() => {
98
- var _props$controlProps3, _props$controlProps4, _props$controlProps5, _props$controlProps7, _props$chatConfig, _props$chatConfig$Cha, _props$controlProps8, _props$reconnectChatP, _props$chatConfig2, _props$chatConfig2$Li, _props$reconnectChatP4, _state$domainStates;
99
+ var _props$controlProps4, _props$controlProps5, _props$controlProps6, _props$controlProps8, _props$chatConfig, _props$chatConfig$Cha, _props$controlProps9, _props$reconnectChatP, _props$chatConfig2, _props$chatConfig2$Li, _props$reconnectChatP4, _state$domainStates;
100
+
101
+ // Add default localStorage support for widget
102
+ if (props.contextDataStore === undefined) {
103
+ var _chatSDK$omnichannelC2, _chatSDK$omnichannelC3, _props$controlProps3;
104
+
105
+ registerBroadcastServiceForLocalStorage(chatSDK === null || chatSDK === void 0 ? void 0 : (_chatSDK$omnichannelC2 = chatSDK.omnichannelConfig) === null || _chatSDK$omnichannelC2 === void 0 ? void 0 : _chatSDK$omnichannelC2.orgId, chatSDK === null || chatSDK === void 0 ? void 0 : (_chatSDK$omnichannelC3 = chatSDK.omnichannelConfig) === null || _chatSDK$omnichannelC3 === void 0 ? void 0 : _chatSDK$omnichannelC3.widgetId, (props === null || props === void 0 ? void 0 : (_props$controlProps3 = props.controlProps) === null || _props$controlProps3 === void 0 ? void 0 : _props$controlProps3.widgetInstanceId) ?? "");
106
+ DataStoreManager.clientDataStore = defaultClientDataStoreProvider();
107
+ } else {
108
+ DataStoreManager.clientDataStore = props.contextDataStore;
109
+ }
99
110
 
100
111
  registerTelemetryLoggers(props, dispatch);
101
112
  createInternetConnectionChangeHandler();
102
- DataStoreManager.clientDataStore = props.contextDataStore ?? undefined;
103
113
  dispatch({
104
114
  type: LiveChatWidgetActionType.SET_WIDGET_ELEMENT_ID,
105
115
  payload: widgetElementId
106
116
  });
107
117
  dispatch({
108
118
  type: LiveChatWidgetActionType.SET_SKIP_CHAT_BUTTON_RENDERING,
109
- payload: ((_props$controlProps3 = props.controlProps) === null || _props$controlProps3 === void 0 ? void 0 : _props$controlProps3.skipChatButtonRendering) || false
119
+ payload: ((_props$controlProps4 = props.controlProps) === null || _props$controlProps4 === void 0 ? void 0 : _props$controlProps4.skipChatButtonRendering) || false
110
120
  });
111
121
  dispatch({
112
122
  type: LiveChatWidgetActionType.SET_E2VV_ENABLED,
113
123
  payload: false
114
124
  });
115
125
 
116
- if ((_props$controlProps4 = props.controlProps) !== null && _props$controlProps4 !== void 0 && _props$controlProps4.widgetInstanceId && !isNullOrEmptyString((_props$controlProps5 = props.controlProps) === null || _props$controlProps5 === void 0 ? void 0 : _props$controlProps5.widgetInstanceId)) {
117
- var _props$controlProps6;
126
+ if ((_props$controlProps5 = props.controlProps) !== null && _props$controlProps5 !== void 0 && _props$controlProps5.widgetInstanceId && !isNullOrEmptyString((_props$controlProps6 = props.controlProps) === null || _props$controlProps6 === void 0 ? void 0 : _props$controlProps6.widgetInstanceId)) {
127
+ var _props$controlProps7;
118
128
 
119
129
  dispatch({
120
130
  type: LiveChatWidgetActionType.SET_WIDGET_INSTANCE_ID,
121
- payload: (_props$controlProps6 = props.controlProps) === null || _props$controlProps6 === void 0 ? void 0 : _props$controlProps6.widgetInstanceId
131
+ payload: (_props$controlProps7 = props.controlProps) === null || _props$controlProps7 === void 0 ? void 0 : _props$controlProps7.widgetInstanceId
122
132
  });
123
133
  }
124
134
 
@@ -129,13 +139,13 @@ export const LiveChatWidgetStateful = props => {
129
139
  });
130
140
  }); // Initialize global dir
131
141
 
132
- const globalDir = ((_props$controlProps7 = props.controlProps) === null || _props$controlProps7 === void 0 ? void 0 : _props$controlProps7.dir) ?? getLocaleDirection((_props$chatConfig = props.chatConfig) === null || _props$chatConfig === void 0 ? void 0 : (_props$chatConfig$Cha = _props$chatConfig.ChatWidgetLanguage) === null || _props$chatConfig$Cha === void 0 ? void 0 : _props$chatConfig$Cha.msdyn_localeid);
142
+ const globalDir = ((_props$controlProps8 = props.controlProps) === null || _props$controlProps8 === void 0 ? void 0 : _props$controlProps8.dir) ?? getLocaleDirection((_props$chatConfig = props.chatConfig) === null || _props$chatConfig === void 0 ? void 0 : (_props$chatConfig$Cha = _props$chatConfig.ChatWidgetLanguage) === null || _props$chatConfig$Cha === void 0 ? void 0 : _props$chatConfig$Cha.msdyn_localeid);
133
143
  dispatch({
134
144
  type: LiveChatWidgetActionType.SET_GLOBAL_DIR,
135
145
  payload: globalDir
136
146
  });
137
147
 
138
- if (!((_props$controlProps8 = props.controlProps) !== null && _props$controlProps8 !== void 0 && _props$controlProps8.skipChatButtonRendering) && (_props$reconnectChatP = props.reconnectChatPaneProps) !== null && _props$reconnectChatP !== void 0 && _props$reconnectChatP.reconnectId) {
148
+ if (!((_props$controlProps9 = props.controlProps) !== null && _props$controlProps9 !== void 0 && _props$controlProps9.skipChatButtonRendering) && (_props$reconnectChatP = props.reconnectChatPaneProps) !== null && _props$reconnectChatP !== void 0 && _props$reconnectChatP.reconnectId) {
139
149
  var _props$reconnectChatP2, _props$reconnectChatP3;
140
150
 
141
151
  startUnauthenticatedReconnectChat(chatSDK, props.chatConfig, props.getAuthToken, dispatch, setAdapter, (_props$reconnectChatP2 = props.reconnectChatPaneProps) === null || _props$reconnectChatP2 === void 0 ? void 0 : _props$reconnectChatP2.isReconnectEnabled, (_props$reconnectChatP3 = props.reconnectChatPaneProps) === null || _props$reconnectChatP3 === void 0 ? void 0 : _props$reconnectChatP3.reconnectId, initStartChat);
@@ -204,11 +214,23 @@ export const LiveChatWidgetStateful = props => {
204
214
  payload: ConversationState.ReconnectChat
205
215
  });
206
216
  } else {
217
+ var _state$domainStates3;
218
+
207
219
  const chatStartedSkippingChatButtonRendering = {
208
220
  eventName: BroadcastEvent.StartChatSkippingChatButtonRendering
209
221
  };
210
222
  BroadcastService.postMessage(chatStartedSkippingChatButtonRendering);
211
- setPreChatAndInitiateChat(chatSDK, props.chatConfig, props.getAuthToken, dispatch, setAdapter);
223
+
224
+ if (!isUndefinedOrEmpty((_state$domainStates3 = state.domainStates) === null || _state$domainStates3 === void 0 ? void 0 : _state$domainStates3.liveChatContext) && state.appStates.conversationState === ConversationState.Active) {
225
+ var _state$domainStates4;
226
+
227
+ const optionalParams = {
228
+ liveChatContext: (_state$domainStates4 = state.domainStates) === null || _state$domainStates4 === void 0 ? void 0 : _state$domainStates4.liveChatContext
229
+ };
230
+ initStartChat(chatSDK, props.chatConfig, props.getAuthToken, dispatch, setAdapter, optionalParams);
231
+ } else {
232
+ setPreChatAndInitiateChat(chatSDK, props.chatConfig, props.getAuthToken, dispatch, setAdapter);
233
+ }
212
234
  }
213
235
  });
214
236
  }
@@ -216,7 +238,7 @@ export const LiveChatWidgetStateful = props => {
216
238
  }, [state.appStates.skipChatButtonRendering]); // useEffect for when skip chat button rendering
217
239
 
218
240
  useEffect(() => {
219
- var _chatSDK$omnichannelC6, _chatSDK$omnichannelC7, _props$controlProps11;
241
+ var _chatSDK$omnichannelC8, _chatSDK$omnichannelC9, _props$controlProps12;
220
242
 
221
243
  // Add the custom context on receiving the SetCustomContext event
222
244
  BroadcastService.getMessageByEventName(BroadcastEvent.SetCustomContext).subscribe(msg => {
@@ -248,13 +270,13 @@ export const LiveChatWidgetStateful = props => {
248
270
  }); // Start chat from SDK Event
249
271
 
250
272
  BroadcastService.getMessageByEventName(BroadcastEvent.StartChat).subscribe(() => {
251
- var _chatSDK$omnichannelC2, _chatSDK$omnichannelC3, _props$controlProps9;
273
+ var _chatSDK$omnichannelC4, _chatSDK$omnichannelC5, _props$controlProps10;
252
274
 
253
275
  TelemetryHelper.logActionEvent(LogLevel.INFO, {
254
276
  Event: TelemetryEvent.StartChatEventRecevied,
255
277
  Description: "Start chat event received."
256
278
  });
257
- const persistedState = getStateFromCache(chatSDK === null || chatSDK === void 0 ? void 0 : (_chatSDK$omnichannelC2 = chatSDK.omnichannelConfig) === null || _chatSDK$omnichannelC2 === void 0 ? void 0 : _chatSDK$omnichannelC2.orgId, chatSDK === null || chatSDK === void 0 ? void 0 : (_chatSDK$omnichannelC3 = chatSDK.omnichannelConfig) === null || _chatSDK$omnichannelC3 === void 0 ? void 0 : _chatSDK$omnichannelC3.widgetId, (props === null || props === void 0 ? void 0 : (_props$controlProps9 = props.controlProps) === null || _props$controlProps9 === void 0 ? void 0 : _props$controlProps9.widgetInstanceId) ?? ""); // Chat not found in cache
279
+ const persistedState = getStateFromCache(chatSDK === null || chatSDK === void 0 ? void 0 : (_chatSDK$omnichannelC4 = chatSDK.omnichannelConfig) === null || _chatSDK$omnichannelC4 === void 0 ? void 0 : _chatSDK$omnichannelC4.orgId, chatSDK === null || chatSDK === void 0 ? void 0 : (_chatSDK$omnichannelC5 = chatSDK.omnichannelConfig) === null || _chatSDK$omnichannelC5 === void 0 ? void 0 : _chatSDK$omnichannelC5.widgetId, (props === null || props === void 0 ? void 0 : (_props$controlProps10 = props.controlProps) === null || _props$controlProps10 === void 0 ? void 0 : _props$controlProps10.widgetInstanceId) ?? ""); // Chat not found in cache
258
280
 
259
281
  if (persistedState === undefined) {
260
282
  BroadcastService.postMessage({
@@ -294,10 +316,10 @@ export const LiveChatWidgetStateful = props => {
294
316
 
295
317
  BroadcastService.getMessageByEventName(BroadcastEvent.InitiateEndChat).subscribe(async () => {
296
318
  if (state.appStates.skipChatButtonRendering !== true) {
297
- var _chatSDK$omnichannelC4, _chatSDK$omnichannelC5, _props$controlProps10;
319
+ var _chatSDK$omnichannelC6, _chatSDK$omnichannelC7, _props$controlProps11;
298
320
 
299
321
  // This is to ensure to get latest state from cache in multitab
300
- const persistedState = getStateFromCache(chatSDK === null || chatSDK === void 0 ? void 0 : (_chatSDK$omnichannelC4 = chatSDK.omnichannelConfig) === null || _chatSDK$omnichannelC4 === void 0 ? void 0 : _chatSDK$omnichannelC4.orgId, chatSDK === null || chatSDK === void 0 ? void 0 : (_chatSDK$omnichannelC5 = chatSDK.omnichannelConfig) === null || _chatSDK$omnichannelC5 === void 0 ? void 0 : _chatSDK$omnichannelC5.widgetId, (props === null || props === void 0 ? void 0 : (_props$controlProps10 = props.controlProps) === null || _props$controlProps10 === void 0 ? void 0 : _props$controlProps10.widgetInstanceId) ?? "");
322
+ const persistedState = getStateFromCache(chatSDK === null || chatSDK === void 0 ? void 0 : (_chatSDK$omnichannelC6 = chatSDK.omnichannelConfig) === null || _chatSDK$omnichannelC6 === void 0 ? void 0 : _chatSDK$omnichannelC6.orgId, chatSDK === null || chatSDK === void 0 ? void 0 : (_chatSDK$omnichannelC7 = chatSDK.omnichannelConfig) === null || _chatSDK$omnichannelC7 === void 0 ? void 0 : _chatSDK$omnichannelC7.widgetId, (props === null || props === void 0 ? void 0 : (_props$controlProps11 = props.controlProps) === null || _props$controlProps11 === void 0 ? void 0 : _props$controlProps11.widgetInstanceId) ?? "");
301
323
 
302
324
  if (persistedState && persistedState.appStates.conversationState === ConversationState.Active) {
303
325
  prepareEndChat(props, chatSDK, setAdapter, setWebChatStyles, dispatch, adapter, state);
@@ -317,7 +339,7 @@ export const LiveChatWidgetStateful = props => {
317
339
  initiateEndChatOnBrowserUnload();
318
340
  }); // Listen to end chat event from other tabs
319
341
 
320
- const endChatEventName = getWidgetEndChatEventName(chatSDK === null || chatSDK === void 0 ? void 0 : (_chatSDK$omnichannelC6 = chatSDK.omnichannelConfig) === null || _chatSDK$omnichannelC6 === void 0 ? void 0 : _chatSDK$omnichannelC6.orgId, chatSDK === null || chatSDK === void 0 ? void 0 : (_chatSDK$omnichannelC7 = chatSDK.omnichannelConfig) === null || _chatSDK$omnichannelC7 === void 0 ? void 0 : _chatSDK$omnichannelC7.widgetId, ((_props$controlProps11 = props.controlProps) === null || _props$controlProps11 === void 0 ? void 0 : _props$controlProps11.widgetInstanceId) ?? "");
342
+ const endChatEventName = getWidgetEndChatEventName(chatSDK === null || chatSDK === void 0 ? void 0 : (_chatSDK$omnichannelC8 = chatSDK.omnichannelConfig) === null || _chatSDK$omnichannelC8 === void 0 ? void 0 : _chatSDK$omnichannelC8.orgId, chatSDK === null || chatSDK === void 0 ? void 0 : (_chatSDK$omnichannelC9 = chatSDK.omnichannelConfig) === null || _chatSDK$omnichannelC9 === void 0 ? void 0 : _chatSDK$omnichannelC9.widgetId, ((_props$controlProps12 = props.controlProps) === null || _props$controlProps12 === void 0 ? void 0 : _props$controlProps12.widgetInstanceId) ?? "");
321
343
  BroadcastService.getMessageByEventName(endChatEventName).subscribe(async () => {
322
344
  endChat(props, chatSDK, setAdapter, setWebChatStyles, dispatch, adapter, false, false, false);
323
345
  return;
@@ -398,23 +420,25 @@ export const LiveChatWidgetStateful = props => {
398
420
  }, [(_props$webChatContain3 = props.webChatContainerProps) === null || _props$webChatContain3 === void 0 ? void 0 : _props$webChatContain3.webChatStyles]); // Publish chat widget state
399
421
 
400
422
  useEffect(() => {
401
- var _props$controlProps12, _props$chatSDK, _props$chatSDK$omnich, _props$chatSDK2, _props$chatSDK2$omnic, _props$controlProps13;
423
+ var _props$chatSDK, _props$chatSDK$omnich, _props$chatSDK2, _props$chatSDK2$omnic, _props$controlProps13;
402
424
 
403
425
  // Only activate these windows events when conversation state is active and chat widget is in popout mode
404
426
  // Ghost chat scenarios
405
- if (state.appStates.conversationState === ConversationState.Active && ((_props$controlProps12 = props.controlProps) === null || _props$controlProps12 === void 0 ? void 0 : _props$controlProps12.skipChatButtonRendering) === true) {
406
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
407
- window.onbeforeunload = function () {
408
- const prompt = Constants.BrowserUnloadConfirmationMessage;
409
- return prompt;
410
- }; // eslint-disable-next-line @typescript-eslint/no-explicit-any
411
-
412
-
413
- window.onunload = function () {
414
- initiateEndChatOnBrowserUnload();
415
- };
416
- }
417
427
 
428
+ /* COMMENTING THIS CODE FOR PARITY WITH OLD LCW
429
+ if (state.appStates.conversationState === ConversationState.Active &&
430
+ props.controlProps?.skipChatButtonRendering === true) {
431
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
432
+
433
+ window.onbeforeunload = function () {
434
+ const prompt = Constants.BrowserUnloadConfirmationMessage;
435
+ return prompt;
436
+ };
437
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
438
+ window.onunload = function () {
439
+ initiateEndChatOnBrowserUnload();
440
+ };
441
+ }*/
418
442
  widgetStateEventName = getWidgetCacheId(props === null || props === void 0 ? void 0 : (_props$chatSDK = props.chatSDK) === null || _props$chatSDK === void 0 ? void 0 : (_props$chatSDK$omnich = _props$chatSDK.omnichannelConfig) === null || _props$chatSDK$omnich === void 0 ? void 0 : _props$chatSDK$omnich.orgId, props === null || props === void 0 ? void 0 : (_props$chatSDK2 = props.chatSDK) === null || _props$chatSDK2 === void 0 ? void 0 : (_props$chatSDK2$omnic = _props$chatSDK2.omnichannelConfig) === null || _props$chatSDK2$omnic === void 0 ? void 0 : _props$chatSDK2$omnic.widgetId, (props === null || props === void 0 ? void 0 : (_props$controlProps13 = props.controlProps) === null || _props$controlProps13 === void 0 ? void 0 : _props$controlProps13.widgetInstanceId) ?? "");
419
443
  const chatWidgetStateChangeEvent = {
420
444
  eventName: widgetStateEventName,
@@ -5,18 +5,19 @@ import { TelemetryHelper } from "../../common/telemetry/TelemetryHelper";
5
5
  import { defaultGeneralPostChatSurveyPaneStyleProps } from "./common/defaultStyleProps/defaultgeneralPostChatSurveyPaneStyleProps";
6
6
  import { findAllFocusableElement } from "../../common/utils";
7
7
  import useChatContextStore from "../../hooks/useChatContextStore";
8
+ import { PostChatSurveyMode } from "./enums/PostChatSurveyMode";
8
9
  export const PostChatSurveyPaneStateful = props => {
9
- var _props$styleProps, _props$controlProps;
10
-
11
- const [state] = useChatContextStore(); // ToDo : TASK 2628392 Fix PostChat iframe reloading on Minimize
10
+ var _state$domainStates$l, _state$domainStates$l2, _props$styleProps, _props$controlProps;
12
11
 
12
+ const [state] = useChatContextStore();
13
+ const postChatSurveyMode = (_state$domainStates$l = state.domainStates.liveChatConfig) === null || _state$domainStates$l === void 0 ? void 0 : (_state$domainStates$l2 = _state$domainStates$l.LiveWSAndLiveChatEngJoin) === null || _state$domainStates$l2 === void 0 ? void 0 : _state$domainStates$l2.msdyn_postconversationsurveymode;
13
14
  const generalStyleProps = Object.assign({}, defaultGeneralPostChatSurveyPaneStyleProps, (_props$styleProps = props.styleProps) === null || _props$styleProps === void 0 ? void 0 : _props$styleProps.generalStyleProps, {
14
15
  display: state.appStates.isMinimized ? "none" : ""
15
16
  });
16
17
  let surveyInviteLink = "";
17
18
 
18
19
  if (state.domainStates.postChatContext.surveyInviteLink) {
19
- surveyInviteLink = state.domainStates.postChatContext.surveyInviteLink + "&lang=" + (state.domainStates.postChatContext.formsProLocale ?? "en");
20
+ surveyInviteLink = state.domainStates.postChatContext.surveyInviteLink + "&embed=" + (postChatSurveyMode === PostChatSurveyMode.Embed).toString() + "&compact=" + (props.isCustomerVoiceSurveyCompact ?? true).toString() + "&lang=" + (state.domainStates.postChatContext.formsProLocale ?? "en") + "&showmultilingual=false";
20
21
  }
21
22
 
22
23
  const styleProps = { ...props.styleProps,
@@ -2,6 +2,7 @@ import { Stack } from "@fluentui/react";
2
2
  import { LogLevel, TelemetryEvent } from "../../common/telemetry/TelemetryConstants";
3
3
  import React, { useEffect } from "react";
4
4
  import { Components } from "botframework-webchat";
5
+ import { BroadcastChannel } from "broadcast-channel";
5
6
  import { LiveChatWidgetActionType } from "../../contexts/common/LiveChatWidgetActionType";
6
7
  import { TelemetryHelper } from "../../common/telemetry/TelemetryHelper";
7
8
  import { defaultMiddlewareLocalizedTexts } from "./common/defaultProps/defaultMiddlewareLocalizedTexts";
@@ -13,6 +14,7 @@ import { WebChatStoreLoader } from "./webchatcontroller/WebChatStoreLoader";
13
14
  import { Constants } from "../../common/Constants";
14
15
  import { BotMagicCodeStore } from "./webchatcontroller/BotMagicCodeStore";
15
16
  import { defaultAdaptiveCardStyles } from "./common/defaultStyles/defaultAdaptiveCardStyles";
17
+ import { defaultReceivedMessageAnchorStyles } from "./webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultReceivedMessageAnchorStyles";
16
18
  const broadcastChannelMessageEvent = "message";
17
19
 
18
20
  const postActivity = activity => {
@@ -42,7 +44,7 @@ const createMagicCodeSuccessResponse = signin => {
42
44
  };
43
45
 
44
46
  export const WebChatContainerStateful = props => {
45
- var _props$adaptiveCardSt, _props$adaptiveCardSt2;
47
+ var _props$adaptiveCardSt, _props$adaptiveCardSt2, _props$renderingMiddl, _props$renderingMiddl2, _props$renderingMiddl3, _props$renderingMiddl4;
46
48
 
47
49
  const {
48
50
  BasicWebChat
@@ -122,7 +124,8 @@ export const WebChatContainerStateful = props => {
122
124
  .ms_lcw_webchat_received_message img.webchat__markdown__external-link-icon {
123
125
  background-image : url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIzIDMgMTggMTgiICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGQ9Ik03LjI1MDEgNC41MDAxN0gxMC43NDk1QzExLjE2MzcgNC41MDAxNyAxMS40OTk1IDQuODM1OTYgMTEuNDk5NSA1LjI1MDE3QzExLjQ5OTUgNS42Mjk4NiAxMS4yMTczIDUuOTQzNjYgMTAuODUxMyA1Ljk5MzMyTDEwLjc0OTUgNi4wMDAxN0g3LjI0OTc0QzYuMDcwNzkgNS45OTk2MSA1LjEwMzQ5IDYuOTA2NTYgNS4wMDc4NiA4LjA2MTEyTDUuMDAwMjggOC4yMjAwM0w1LjAwMzEyIDE2Ljc1MDdDNS4wMDM0MyAxNy45NDE1IDUuOTI4ODUgMTguOTE2MSA3LjA5OTY2IDE4Ljk5NDlMNy4yNTM3MSAxOS4wMDAxTDE1Ljc1MTggMTguOTg4NEMxNi45NDE1IDE4Ljk4NjggMTcuOTE0NSAxOC4wNjIgMTcuOTkzNSAxNi44OTIzTDE3Ljk5ODcgMTYuNzM4NFYxMy4yMzIxQzE3Ljk5ODcgMTIuODE3OSAxOC4zMzQ1IDEyLjQ4MjEgMTguNzQ4NyAxMi40ODIxQzE5LjEyODQgMTIuNDgyMSAxOS40NDIyIDEyLjc2NDMgMTkuNDkxOCAxMy4xMzAzTDE5LjQ5ODcgMTMuMjMyMVYxNi43Mzg0QzE5LjQ5ODcgMTguNzQwNyAxNy45MjkzIDIwLjM3NjkgMTUuOTUyOCAyMC40ODI5TDE1Ljc1MzggMjAuNDg4NEw3LjI1ODI3IDIwLjUwMDFMNy4wNTQ5NSAyMC40OTQ5QzUuMTQyMzkgMjAuMzk1NCAzLjYwODk1IDE4Ljg2MjcgMy41MDgzNyAxNi45NTAyTDMuNTAzMTIgMTYuNzUxMUwzLjUwMDg5IDguMjUyN0wzLjUwNTI5IDguMDUwMkMzLjYwNTM5IDYuMTM3NDkgNS4xMzg2NyA0LjYwNDQ5IDcuMDUwOTYgNC41MDUyN0w3LjI1MDEgNC41MDAxN0gxMC43NDk1SDcuMjUwMVpNMTMuNzQ4MSAzLjAwMTQ2TDIwLjMwMTggMy4wMDE5N0wyMC40MDE0IDMuMDE1NzVMMjAuNTAyMiAzLjA0MzkzTDIwLjU1OSAzLjA2ODAzQzIwLjYxMjIgMy4wOTEyMiAyMC42NjM0IDMuMTIxNjMgMjAuNzExMSAzLjE1ODg1TDIwLjc4MDQgMy4yMjE1NkwyMC44NjQxIDMuMzIwMTRMMjAuOTE4MyAzLjQxMDI1TDIwLjk1NyAzLjUwMDU3TDIwLjk3NjIgMy41NjQ3NkwyMC45ODk4IDMuNjI4NjJMMjAuOTk5MiAzLjcyMjgyTDIwLjk5OTcgMTAuMjU1NEMyMC45OTk3IDEwLjY2OTYgMjAuNjYzOSAxMS4wMDU0IDIwLjI0OTcgMTEuMDA1NEMxOS44NyAxMS4wMDU0IDE5LjU1NjIgMTAuNzIzMiAxOS41MDY1IDEwLjM1NzFMMTkuNDk5NyAxMC4yNTU0TDE5LjQ5ODkgNS41NjE0N0wxMi4yNzk3IDEyLjc4NDdDMTIuMDEzNCAxMy4wNTEgMTEuNTk2OCAxMy4wNzUzIDExLjMwMzEgMTIuODU3NUwxMS4yMTkgMTIuNzg0OUMxMC45NTI3IDEyLjUxODcgMTAuOTI4NCAxMi4xMDIxIDExLjE0NjIgMTEuODA4NEwxMS4yMTg4IDExLjcyNDNMMTguNDM2OSA0LjUwMTQ2SDEzLjc0ODFDMTMuMzY4NCA0LjUwMTQ2IDEzLjA1NDYgNC4yMTkzMSAxMy4wMDUgMy44NTMyNEwxMi45OTgxIDMuNzUxNDZDMTIuOTk4MSAzLjM3MTc3IDEzLjI4MDMgMy4wNTc5NyAxMy42NDY0IDMuMDA4MzFMMTMuNzQ4MSAzLjAwMTQ2WiIgZmlsbD0iI0ZGRkZGRiIgLz48L3N2Zz4) !important;
124
126
  height: '.75em';
125
- marginLeft: '.25em';
127
+ marginLeft: '.25em';
128
+ filter:${(props === null || props === void 0 ? void 0 : (_props$renderingMiddl = props.renderingMiddlewareProps) === null || _props$renderingMiddl === void 0 ? void 0 : (_props$renderingMiddl2 = _props$renderingMiddl.receivedMessageAnchorStyles) === null || _props$renderingMiddl2 === void 0 ? void 0 : _props$renderingMiddl2.filter) ?? "none"};
126
129
  }
127
130
  pre {
128
131
  white-space: pre-wrap;
@@ -135,7 +138,7 @@ export const WebChatContainerStateful = props => {
135
138
  .ms_lcw_webchat_received_message a:visited,
136
139
  .ms_lcw_webchat_received_message a:hover,
137
140
  .ms_lcw_webchat_received_message a:active {
138
- color: white;
141
+ color: ${(props === null || props === void 0 ? void 0 : (_props$renderingMiddl3 = props.renderingMiddlewareProps) === null || _props$renderingMiddl3 === void 0 ? void 0 : (_props$renderingMiddl4 = _props$renderingMiddl3.receivedMessageAnchorStyles) === null || _props$renderingMiddl4 === void 0 ? void 0 : _props$renderingMiddl4.color) ?? (defaultReceivedMessageAnchorStyles === null || defaultReceivedMessageAnchorStyles === void 0 ? void 0 : defaultReceivedMessageAnchorStyles.color)};
139
142
  } `), /*#__PURE__*/React.createElement(Stack, {
140
143
  styles: containerStyles
141
144
  }, /*#__PURE__*/React.createElement(BasicWebChat, null)));
@@ -7,7 +7,7 @@ export let LiveChatWidgetActionType;
7
7
  LiveChatWidgetActionType[LiveChatWidgetActionType["SET_GLOBAL_DIR"] = 3] = "SET_GLOBAL_DIR";
8
8
  LiveChatWidgetActionType[LiveChatWidgetActionType["SET_MINIMIZED"] = 4] = "SET_MINIMIZED";
9
9
  LiveChatWidgetActionType[LiveChatWidgetActionType["SET_CONVERSATION_STATE"] = 5] = "SET_CONVERSATION_STATE";
10
- LiveChatWidgetActionType[LiveChatWidgetActionType["SET_PREVIOUS_FOCUSED_ELEMENT"] = 6] = "SET_PREVIOUS_FOCUSED_ELEMENT";
10
+ LiveChatWidgetActionType[LiveChatWidgetActionType["SET_PREVIOUS_FOCUSED_ELEMENT_ID"] = 6] = "SET_PREVIOUS_FOCUSED_ELEMENT_ID";
11
11
  LiveChatWidgetActionType[LiveChatWidgetActionType["SET_OUTSIDE_OPERATING_HOURS"] = 7] = "SET_OUTSIDE_OPERATING_HOURS";
12
12
  LiveChatWidgetActionType[LiveChatWidgetActionType["SET_PRE_CHAT_SURVEY_RESPONSE"] = 8] = "SET_PRE_CHAT_SURVEY_RESPONSE";
13
13
  LiveChatWidgetActionType[LiveChatWidgetActionType["SET_CUSTOM_CONTEXT"] = 9] = "SET_CUSTOM_CONTEXT";
@@ -1,10 +1,15 @@
1
1
  import { ConversationState } from "./ConversationState";
2
2
  import { defaultMiddlewareLocalizedTexts } from "../../components/webchatcontainerstateful/common/defaultProps/defaultMiddlewareLocalizedTexts";
3
+ import { getWidgetCacheId, isNullOrUndefined } from "../../common/utils";
4
+ import { defaultClientDataStoreProvider } from "../../common/storage/default/defaultClientDataStoreProvider";
3
5
  export const getLiveChatWidgetContextInitialState = props => {
4
- var _props$webChatContain;
6
+ var _props$chatSDK, _props$chatSDK$omnich, _props$chatSDK2, _props$chatSDK2$omnic, _props$controlProps, _props$webChatContain;
5
7
 
6
- if (props !== null && props !== void 0 && props.liveChatContextFromCache) {
7
- return props === null || props === void 0 ? void 0 : props.liveChatContextFromCache;
8
+ const widgetCacheId = getWidgetCacheId(props === null || props === void 0 ? void 0 : (_props$chatSDK = props.chatSDK) === null || _props$chatSDK === void 0 ? void 0 : (_props$chatSDK$omnich = _props$chatSDK.omnichannelConfig) === null || _props$chatSDK$omnich === void 0 ? void 0 : _props$chatSDK$omnich.orgId, props === null || props === void 0 ? void 0 : (_props$chatSDK2 = props.chatSDK) === null || _props$chatSDK2 === void 0 ? void 0 : (_props$chatSDK2$omnic = _props$chatSDK2.omnichannelConfig) === null || _props$chatSDK2$omnic === void 0 ? void 0 : _props$chatSDK2$omnic.widgetId, (props === null || props === void 0 ? void 0 : (_props$controlProps = props.controlProps) === null || _props$controlProps === void 0 ? void 0 : _props$controlProps.widgetInstanceId) ?? "");
9
+ const initialState = defaultClientDataStoreProvider().getData(widgetCacheId, "localStorage");
10
+
11
+ if (!isNullOrUndefined(initialState)) {
12
+ return JSON.parse(initialState);
8
13
  }
9
14
 
10
15
  const LiveChatWidgetContextInitialState = {
@@ -26,7 +31,7 @@ export const getLiveChatWidgetContextInitialState = props => {
26
31
  appStates: {
27
32
  conversationState: ConversationState.Closed,
28
33
  isMinimized: false,
29
- previousElementOnFocusBeforeModalOpen: null,
34
+ previousElementIdOnFocusBeforeModalOpen: null,
30
35
  outsideOperatingHours: false,
31
36
  preChatResponseEmail: "",
32
37
  isAudioMuted: null,
@@ -69,10 +69,10 @@ export const createReducer = () => {
69
69
  }
70
70
  };
71
71
 
72
- case LiveChatWidgetActionType.SET_PREVIOUS_FOCUSED_ELEMENT:
72
+ case LiveChatWidgetActionType.SET_PREVIOUS_FOCUSED_ELEMENT_ID:
73
73
  return { ...state,
74
74
  appStates: { ...state.appStates,
75
- previousElementOnFocusBeforeModalOpen: action.payload
75
+ previousElementIdOnFocusBeforeModalOpen: action.payload
76
76
  }
77
77
  };
78
78
 
@@ -0,0 +1,4 @@
1
+ export declare class defaultCacheManager {
2
+ static InternalCache: any;
3
+ }
4
+ export declare const registerBroadcastServiceForLocalStorage: (orgid: string, widgetId: string, widgetInstanceId: string) => void;
@@ -0,0 +1,2 @@
1
+ import { IContextDataStore } from "../../interfaces/IContextDataStore";
2
+ export declare const defaultClientDataStoreProvider: () => IContextDataStore;
@@ -0,0 +1,6 @@
1
+ export declare const defaultInitializeInMemoryDataStore: (widgetId: string) => void;
2
+ export declare const inMemoryDataStore: () => {
3
+ getData: (key: string) => any;
4
+ setData: (key: any, data: any) => void;
5
+ removeData: (key: string) => void;
6
+ };
@@ -79,6 +79,8 @@ export declare enum TelemetryEvent {
79
79
  PostChatContextCallSucceed = "PostChatContextCallSucceed",
80
80
  PostChatContextCallFailed = "PostChatContextCallFailed",
81
81
  ParseAdaptiveCardFailed = "ParseAdaptiveCardFailed",
82
+ ClientDataStoreProviderFailed = "ClientDataStoreProviderFailed",
83
+ InMemoryDataStoreFailed = "InMemoryDataStoreFailed",
82
84
  WebChatLoaded = "WebChatLoaded",
83
85
  LCWChatButtonClicked = "LCWChatButtonClicked",
84
86
  LCWChatButtonShow = "LCWChatButtonShow",
@@ -12,7 +12,6 @@ import { ILiveChatWidgetControlProps } from "./ILiveChatWidgetControlProps";
12
12
  import { ILiveChatWidgetStyleProps } from "./ILiveChatWidgetStyleProps";
13
13
  import { ILoadingPaneProps } from "@microsoft/omnichannel-chat-components/lib/types/components/loadingpane/interfaces/ILoadingPaneProps";
14
14
  import { IOOOHPaneProps } from "@microsoft/omnichannel-chat-components/lib/types/components/outofofficehourspane/interfaces/IOOOHPaneProps";
15
- import { IPostChatSurveyPaneProps } from "@microsoft/omnichannel-chat-components/lib/types/components/postchatsurveypane/interfaces/IPostChatSurveyPaneProps";
16
15
  import { IPreChatSurveyPaneProps } from "@microsoft/omnichannel-chat-components/lib/types/components/prechatsurveypane/interfaces/IPreChatSurveyPaneProps";
17
16
  import { IProactiveChatPaneStatefulProps } from "../../proactivechatpanestateful/interfaces/IProactiveChatPaneStatefulProps";
18
17
  import { IReconnectChatPaneStatefulProps } from "../../reconnectchatpanestateful/interfaces/IReconnectChatPaneStatefulProps";
@@ -21,6 +20,7 @@ import { IWebChatContainerStatefulProps } from "../../webchatcontainerstateful/i
21
20
  import { OmnichannelChatSDK } from "@microsoft/omnichannel-chat-sdk";
22
21
  import { ILiveChatWidgetContext } from "../../../contexts/common/ILiveChatWidgetContext";
23
22
  import { IContextDataStore } from "../../../common/interfaces/IContextDataStore";
23
+ import { IPostChatSurveyPaneStatefulProps } from "../../postchatsurveypanestateful/interfaces/IPostChatSurveyPaneStatefulProps";
24
24
  export interface ILiveChatWidgetProps {
25
25
  audioNotificationProps?: IAudioNotificationProps;
26
26
  callingContainerProps?: ICallingContainerProps;
@@ -40,7 +40,7 @@ export interface ILiveChatWidgetProps {
40
40
  outOfOfficeHeaderProps?: IHeaderProps;
41
41
  outOfOfficeHoursPaneProps?: IOOOHPaneProps;
42
42
  postChatLoadingPaneProps?: ILoadingPaneProps;
43
- postChatSurveyPaneProps?: IPostChatSurveyPaneProps;
43
+ postChatSurveyPaneProps?: IPostChatSurveyPaneStatefulProps;
44
44
  preChatSurveyPaneProps?: IPreChatSurveyPaneProps;
45
45
  proactiveChatPaneProps?: IProactiveChatPaneStatefulProps;
46
46
  reconnectChatPaneProps?: IReconnectChatPaneStatefulProps;