@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.
- package/lib/cjs/common/storage/default/defaultCacheManager.js +34 -0
- package/lib/cjs/common/storage/default/defaultClientDataStoreProvider.js +114 -0
- package/lib/cjs/common/storage/default/defaultInMemoryDataStore.js +86 -0
- package/lib/cjs/common/telemetry/TelemetryConstants.js +9 -0
- package/lib/cjs/common/telemetry/loggers/ariaTelemetryLogger.js +31 -18
- package/lib/cjs/components/confirmationpanestateful/ConfirmationPaneStateful.js +4 -4
- package/lib/cjs/components/emailtranscriptpanestateful/EmailTranscriptPaneStateful.js +4 -4
- package/lib/cjs/components/footerstateful/FooterStateful.js +5 -13
- package/lib/cjs/components/headerstateful/HeaderStateful.js +10 -4
- package/lib/cjs/components/livechatwidget/common/createFooter.js +7 -16
- package/lib/cjs/components/livechatwidget/common/defaultProps/dummyDefaultProps.js +17 -3
- package/lib/cjs/components/livechatwidget/livechatwidgetstateful/LiveChatWidgetStateful.js +53 -29
- package/lib/cjs/components/postchatsurveypanestateful/PostChatSurveyPaneStateful.js +6 -4
- package/lib/cjs/components/postchatsurveypanestateful/interfaces/IPostChatSurveyPaneStatefulProps.js +1 -0
- package/lib/cjs/components/webchatcontainerstateful/WebChatContainerStateful.js +10 -5
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultReceivedMessageAnchorStyles.js +10 -0
- package/lib/cjs/contexts/common/LiveChatWidgetActionType.js +1 -1
- package/lib/cjs/contexts/common/LiveChatWidgetContextInitialState.js +11 -4
- package/lib/cjs/contexts/createReducer.js +2 -2
- package/lib/esm/common/storage/default/defaultCacheManager.js +19 -0
- package/lib/esm/common/storage/default/defaultClientDataStoreProvider.js +102 -0
- package/lib/esm/common/storage/default/defaultInMemoryDataStore.js +71 -0
- package/lib/esm/common/telemetry/TelemetryConstants.js +9 -0
- package/lib/esm/common/telemetry/loggers/ariaTelemetryLogger.js +29 -13
- package/lib/esm/components/confirmationpanestateful/ConfirmationPaneStateful.js +4 -4
- package/lib/esm/components/emailtranscriptpanestateful/EmailTranscriptPaneStateful.js +4 -4
- package/lib/esm/components/footerstateful/FooterStateful.js +5 -13
- package/lib/esm/components/headerstateful/HeaderStateful.js +10 -4
- package/lib/esm/components/livechatwidget/common/createFooter.js +4 -15
- package/lib/esm/components/livechatwidget/common/defaultProps/dummyDefaultProps.js +17 -3
- package/lib/esm/components/livechatwidget/livechatwidgetstateful/LiveChatWidgetStateful.js +53 -29
- package/lib/esm/components/postchatsurveypanestateful/PostChatSurveyPaneStateful.js +5 -4
- package/lib/esm/components/postchatsurveypanestateful/interfaces/IPostChatSurveyPaneStatefulProps.js +1 -0
- package/lib/esm/components/webchatcontainerstateful/WebChatContainerStateful.js +6 -3
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultReceivedMessageAnchorStyles.js +3 -0
- package/lib/esm/contexts/common/LiveChatWidgetActionType.js +1 -1
- package/lib/esm/contexts/common/LiveChatWidgetContextInitialState.js +9 -4
- package/lib/esm/contexts/createReducer.js +2 -2
- package/lib/types/common/storage/default/defaultCacheManager.d.ts +4 -0
- package/lib/types/common/storage/default/defaultClientDataStoreProvider.d.ts +2 -0
- package/lib/types/common/storage/default/defaultInMemoryDataStore.d.ts +6 -0
- package/lib/types/common/telemetry/TelemetryConstants.d.ts +2 -0
- package/lib/types/components/livechatwidget/interfaces/ILiveChatWidgetProps.d.ts +2 -2
- package/lib/types/components/postchatsurveypanestateful/PostChatSurveyPaneStateful.d.ts +2 -2
- package/lib/types/components/postchatsurveypanestateful/interfaces/IPostChatSurveyPaneStatefulProps.d.ts +4 -0
- package/lib/types/components/webchatcontainerstateful/interfaces/IRenderingMiddlewareProps.d.ts +2 -1
- package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultReceivedMessageAnchorStyles.d.ts +2 -0
- package/lib/types/contexts/common/ILiveChatWidgetContext.d.ts +1 -1
- package/lib/types/contexts/common/LiveChatWidgetActionType.d.ts +1 -1
- package/lib/types/contexts/common/LiveChatWidgetContextInitialState.d.ts +1 -2
- package/package.json +3 -3
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { getDomain, isNullOrEmptyString, isNullOrUndefined } from "../../utils";
|
|
2
|
-
import
|
|
3
|
-
import
|
|
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
|
-
|
|
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
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
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
|
-
|
|
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
|
|
57
|
+
const previousFocusedElementId = state.appStates.previousElementIdOnFocusBeforeModalOpen;
|
|
58
58
|
|
|
59
|
-
if (
|
|
60
|
-
setFocusOnElement(
|
|
59
|
+
if (previousFocusedElementId) {
|
|
60
|
+
setFocusOnElement("#" + previousFocusedElementId);
|
|
61
61
|
dispatch({
|
|
62
|
-
type: LiveChatWidgetActionType.
|
|
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
|
|
28
|
+
const previousFocusedElementId = state.appStates.previousElementIdOnFocusBeforeModalOpen;
|
|
29
29
|
|
|
30
|
-
if (
|
|
31
|
-
setFocusOnElement(
|
|
30
|
+
if (previousFocusedElementId) {
|
|
31
|
+
setFocusOnElement("#" + previousFocusedElementId);
|
|
32
32
|
} else {
|
|
33
33
|
setFocusOnSendBox();
|
|
34
34
|
}
|
|
35
35
|
|
|
36
36
|
dispatch({
|
|
37
|
-
type: LiveChatWidgetActionType.
|
|
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) ??
|
|
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 (
|
|
59
|
+
if (emailTranscriptButtonId) {
|
|
61
60
|
dispatch({
|
|
62
|
-
type: LiveChatWidgetActionType.
|
|
63
|
-
payload:
|
|
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
|
-
|
|
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
|
-
|
|
57
|
-
|
|
58
|
-
|
|
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$
|
|
6
|
+
var _props$controlProps, _props$componentOverr;
|
|
7
7
|
|
|
8
|
-
const
|
|
9
|
-
|
|
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:
|
|
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-
|
|
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
|
-
|
|
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 {
|
|
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$
|
|
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$
|
|
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$
|
|
117
|
-
var _props$
|
|
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$
|
|
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$
|
|
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$
|
|
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
|
-
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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,
|
package/lib/esm/components/postchatsurveypanestateful/interfaces/IPostChatSurveyPaneStatefulProps.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -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:
|
|
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["
|
|
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
|
-
|
|
7
|
-
|
|
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
|
-
|
|
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.
|
|
72
|
+
case LiveChatWidgetActionType.SET_PREVIOUS_FOCUSED_ELEMENT_ID:
|
|
73
73
|
return { ...state,
|
|
74
74
|
appStates: { ...state.appStates,
|
|
75
|
-
|
|
75
|
+
previousElementIdOnFocusBeforeModalOpen: action.payload
|
|
76
76
|
}
|
|
77
77
|
};
|
|
78
78
|
|
|
@@ -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?:
|
|
43
|
+
postChatSurveyPaneProps?: IPostChatSurveyPaneStatefulProps;
|
|
44
44
|
preChatSurveyPaneProps?: IPreChatSurveyPaneProps;
|
|
45
45
|
proactiveChatPaneProps?: IProactiveChatPaneStatefulProps;
|
|
46
46
|
reconnectChatPaneProps?: IReconnectChatPaneStatefulProps;
|