@microsoft/omnichannel-chat-widget 0.1.0-main.3d1c026 → 0.1.0-main.488d6f1

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 (108) hide show
  1. package/README.md +235 -0
  2. package/lib/cjs/assets/Audios.js +8 -0
  3. package/lib/cjs/assets/Icons.js +28 -0
  4. package/lib/cjs/common/Constants.js +2 -0
  5. package/lib/cjs/common/contextDataStore/DataStoreManager.js +14 -0
  6. package/lib/cjs/{assets/assets.d.js → common/interfaces/IContextDataStore.js} +0 -0
  7. package/lib/cjs/common/telemetry/TelemetryConstants.js +5 -1
  8. package/lib/cjs/components/confirmationpanestateful/ConfirmationPaneStateful.js +26 -37
  9. package/lib/cjs/components/emailtranscriptpanestateful/EmailTranscriptPaneStateful.js +2 -2
  10. package/lib/cjs/components/footerstateful/FooterStateful.js +3 -3
  11. package/lib/cjs/components/headerstateful/HeaderStateful.js +12 -3
  12. package/lib/cjs/components/livechatwidget/common/createMarkdown.js +3 -4
  13. package/lib/cjs/components/livechatwidget/common/defaultProps/dummyDefaultProps.js +11 -7
  14. package/lib/cjs/components/livechatwidget/common/endChat.js +65 -53
  15. package/lib/cjs/components/livechatwidget/common/initCallingSdk.js +5 -0
  16. package/lib/cjs/components/livechatwidget/common/initWebChatComposer.js +16 -13
  17. package/lib/cjs/components/livechatwidget/common/registerTelemetryLoggers.js +20 -3
  18. package/lib/cjs/components/livechatwidget/common/setPostChatContextAndLoadSurvey.js +23 -22
  19. package/lib/cjs/components/livechatwidget/common/startChat.js +72 -26
  20. package/lib/cjs/components/livechatwidget/common/startProactiveChat.js +3 -3
  21. package/lib/cjs/components/livechatwidget/livechatwidgetstateful/LiveChatWidgetStateful.js +29 -12
  22. package/lib/cjs/components/loadingpanestateful/LoadingPaneStateful.js +1 -1
  23. package/lib/cjs/components/ooohpanestateful/OOOHPaneStateful.js +8 -0
  24. package/lib/cjs/components/prechatsurveypanestateful/PreChatSurveyPaneStateful.js +28 -11
  25. package/lib/cjs/components/proactivechatpanestateful/ProactiveChatPaneStateful.js +10 -4
  26. package/lib/cjs/components/proactivechatpanestateful/interfaces/IProactiveChatNotificationConfig.js +1 -0
  27. package/lib/cjs/components/webchatcontainerstateful/common/utils/FileAttachmentIconManager.js +51 -73
  28. package/lib/cjs/contexts/common/ConversationState.js +3 -2
  29. package/lib/cjs/contexts/common/LiveChatWidgetActionType.js +2 -0
  30. package/lib/cjs/contexts/common/LiveChatWidgetContextInitialState.js +2 -1
  31. package/lib/cjs/contexts/createReducer.js +13 -0
  32. package/lib/cjs/controller/componentController.js +2 -2
  33. package/lib/esm/assets/Audios.js +1 -0
  34. package/lib/esm/assets/Icons.js +11 -0
  35. package/lib/esm/common/Constants.js +2 -0
  36. package/lib/esm/common/contextDataStore/DataStoreManager.js +5 -0
  37. package/lib/esm/common/interfaces/IContextDataStore.js +1 -0
  38. package/lib/esm/common/telemetry/TelemetryConstants.js +5 -1
  39. package/lib/esm/components/confirmationpanestateful/ConfirmationPaneStateful.js +24 -36
  40. package/lib/esm/components/emailtranscriptpanestateful/EmailTranscriptPaneStateful.js +2 -2
  41. package/lib/esm/components/footerstateful/FooterStateful.js +3 -3
  42. package/lib/esm/components/headerstateful/HeaderStateful.js +13 -4
  43. package/lib/esm/components/livechatwidget/common/createMarkdown.js +3 -3
  44. package/lib/esm/components/livechatwidget/common/defaultProps/dummyDefaultProps.js +11 -9
  45. package/lib/esm/components/livechatwidget/common/endChat.js +63 -48
  46. package/lib/esm/components/livechatwidget/common/initCallingSdk.js +3 -0
  47. package/lib/esm/components/livechatwidget/common/initWebChatComposer.js +14 -12
  48. package/lib/esm/components/livechatwidget/common/registerTelemetryLoggers.js +18 -3
  49. package/lib/esm/components/livechatwidget/common/setPostChatContextAndLoadSurvey.js +22 -22
  50. package/lib/esm/components/livechatwidget/common/startChat.js +67 -22
  51. package/lib/esm/components/livechatwidget/common/startProactiveChat.js +5 -5
  52. package/lib/esm/components/livechatwidget/livechatwidgetstateful/LiveChatWidgetStateful.js +28 -12
  53. package/lib/esm/components/loadingpanestateful/LoadingPaneStateful.js +1 -1
  54. package/lib/esm/components/ooohpanestateful/OOOHPaneStateful.js +6 -0
  55. package/lib/esm/components/prechatsurveypanestateful/PreChatSurveyPaneStateful.js +26 -10
  56. package/lib/esm/components/proactivechatpanestateful/ProactiveChatPaneStateful.js +8 -4
  57. package/lib/esm/components/proactivechatpanestateful/interfaces/IProactiveChatNotificationConfig.js +1 -0
  58. package/lib/esm/components/webchatcontainerstateful/common/utils/FileAttachmentIconManager.js +2 -12
  59. package/lib/esm/contexts/common/ConversationState.js +3 -2
  60. package/lib/esm/contexts/common/LiveChatWidgetActionType.js +2 -0
  61. package/lib/esm/contexts/common/LiveChatWidgetContextInitialState.js +2 -1
  62. package/lib/esm/contexts/createReducer.js +13 -0
  63. package/lib/esm/controller/componentController.js +2 -2
  64. package/lib/types/assets/Audios.d.ts +1 -0
  65. package/lib/types/assets/Icons.d.ts +11 -0
  66. package/lib/types/common/Constants.d.ts +1 -0
  67. package/lib/types/common/contextDataStore/DataStoreManager.d.ts +4 -0
  68. package/lib/types/common/interfaces/IContextDataStore.d.ts +14 -0
  69. package/lib/types/common/telemetry/TelemetryConstants.d.ts +4 -0
  70. package/lib/types/components/confirmationpanestateful/interfaces/IConfirmationPaneStatefulParams.d.ts +4 -1
  71. package/lib/types/components/headerstateful/interfaces/IHeaderStatefulParams.d.ts +4 -1
  72. package/lib/types/components/livechatwidget/common/endChat.d.ts +1 -1
  73. package/lib/types/components/livechatwidget/common/setPostChatContextAndLoadSurvey.d.ts +1 -1
  74. package/lib/types/components/livechatwidget/common/startChat.d.ts +1 -1
  75. package/lib/types/components/livechatwidget/common/startProactiveChat.d.ts +2 -1
  76. package/lib/types/components/livechatwidget/interfaces/ILiveChatWidgetProps.d.ts +3 -1
  77. package/lib/types/components/prechatsurveypanestateful/interfaces/IPreChatSurveyPaneStatefulParams.d.ts +1 -1
  78. package/lib/types/components/proactivechatpanestateful/interfaces/IProactiveChatNotificationConfig.d.ts +3 -0
  79. package/lib/types/components/webchatcontainerstateful/common/utils/FileAttachmentIconManager.d.ts +1 -1
  80. package/lib/types/contexts/common/ConversationState.d.ts +3 -2
  81. package/lib/types/contexts/common/ILiveChatWidgetContext.d.ts +1 -0
  82. package/lib/types/contexts/common/LiveChatWidgetActionType.d.ts +3 -1
  83. package/package.json +2 -2
  84. package/lib/cjs/assets/audios/newMessageNotification.mp3 +0 -0
  85. package/lib/cjs/assets/icons/archiveIcon.svg +0 -3
  86. package/lib/cjs/assets/icons/audioIcon.svg +0 -6
  87. package/lib/cjs/assets/icons/blankIcon.svg +0 -6
  88. package/lib/cjs/assets/icons/excelIcon.svg +0 -6
  89. package/lib/cjs/assets/icons/imageIcon.svg +0 -6
  90. package/lib/cjs/assets/icons/oneNoteIcon.svg +0 -6
  91. package/lib/cjs/assets/icons/pdfIcon.svg +0 -6
  92. package/lib/cjs/assets/icons/powerpointIcon.svg +0 -6
  93. package/lib/cjs/assets/icons/videoIcon.svg +0 -6
  94. package/lib/cjs/assets/icons/visioIcon.svg +0 -6
  95. package/lib/cjs/assets/icons/wordIcon.svg +0 -6
  96. package/lib/esm/assets/assets.d.js +0 -0
  97. package/lib/esm/assets/audios/newMessageNotification.mp3 +0 -0
  98. package/lib/esm/assets/icons/archiveIcon.svg +0 -3
  99. package/lib/esm/assets/icons/audioIcon.svg +0 -6
  100. package/lib/esm/assets/icons/blankIcon.svg +0 -6
  101. package/lib/esm/assets/icons/excelIcon.svg +0 -6
  102. package/lib/esm/assets/icons/imageIcon.svg +0 -6
  103. package/lib/esm/assets/icons/oneNoteIcon.svg +0 -6
  104. package/lib/esm/assets/icons/pdfIcon.svg +0 -6
  105. package/lib/esm/assets/icons/powerpointIcon.svg +0 -6
  106. package/lib/esm/assets/icons/videoIcon.svg +0 -6
  107. package/lib/esm/assets/icons/visioIcon.svg +0 -6
  108. package/lib/esm/assets/icons/wordIcon.svg +0 -6
@@ -1,6 +1,7 @@
1
+ import { ChatSDKError, Constants } from "../../../common/Constants";
1
2
  import { LogLevel, TelemetryEvent } from "../../../common/telemetry/TelemetryConstants";
2
- import { ChatSDKError } from "../../../common/Constants";
3
3
  import { ConversationState } from "../../../contexts/common/ConversationState";
4
+ import { DataStoreManager } from "../../../common/contextDataStore/DataStoreManager";
4
5
  import { LiveChatWidgetActionType } from "../../../contexts/common/LiveChatWidgetActionType";
5
6
  import { NotificationHandler } from "../../webchatcontainerstateful/webchatcontroller/notification/NotificationHandler";
6
7
  import { NotificationScenarios } from "../../webchatcontainerstateful/webchatcontroller/enums/NotificationScenarios";
@@ -9,11 +10,15 @@ import { TelemetryTimers } from "../../../common/telemetry/TelemetryManager";
9
10
  import { createAdapter } from "./createAdapter";
10
11
  import { createTimer } from "../../../common/utils";
11
12
  import { getReconnectIdForAuthenticatedChat } from "./reconnectChatHelper";
12
- import { updateSessionDataForTelemetry } from "./updateSessionDataForTelemetry";
13
- import { setPostChatContextAndLoadSurvey } from "./setPostChatContextAndLoadSurvey"; // eslint-disable-next-line @typescript-eslint/no-explicit-any
13
+ import { setPostChatContextAndLoadSurvey } from "./setPostChatContextAndLoadSurvey";
14
+ import { updateSessionDataForTelemetry } from "./updateSessionDataForTelemetry"; // eslint-disable-next-line @typescript-eslint/no-explicit-any
14
15
 
15
16
  const prepareStartChat = async (props, chatSDK, state, dispatch, setAdapter) => {
16
- // Getting PreChat Survey Context
17
+ if (await canConnectToExistingChat(props, chatSDK, state, dispatch, setAdapter)) {
18
+ return;
19
+ } // Getting PreChat Survey Context
20
+
21
+
17
22
  const parseToJson = false;
18
23
  const preChatSurveyResponse = await chatSDK.getPreChatSurvey(parseToJson);
19
24
  const showPrechat = state.appStates.conversationState === ConversationState.ProactiveChat ? preChatSurveyResponse && state.appStates.proactiveChatStates.proactiveChatEnablePrechat : preChatSurveyResponse; // Getting reconnectId for authenticated chat
@@ -48,18 +53,18 @@ const prepareStartChat = async (props, chatSDK, state, dispatch, setAdapter) =>
48
53
  }; // eslint-disable-next-line @typescript-eslint/no-explicit-any
49
54
 
50
55
 
51
- const initStartChat = async (chatSDK, dispatch, setAdapter, params) => {
56
+ const initStartChat = async (chatSDK, dispatch, setAdapter, params, persistedState) => {
52
57
  try {
53
58
  var _TelemetryTimers$Widg;
54
59
 
55
60
  try {
56
- TelemetryHelper.logConfigDataEvent(LogLevel.INFO, {
61
+ TelemetryTimers.WidgetLoadTimer = createTimer();
62
+ TelemetryHelper.logSDKEvent(LogLevel.INFO, {
57
63
  Event: TelemetryEvent.StartChatSDKCall
58
64
  });
59
65
  await chatSDK.startChat(params);
60
- TelemetryTimers.WidgetLoadTimer = createTimer();
61
66
  } catch (error) {
62
- TelemetryHelper.logLoadingEvent(LogLevel.ERROR, {
67
+ TelemetryHelper.logSDKEvent(LogLevel.ERROR, {
63
68
  Event: TelemetryEvent.StartChatMethodException,
64
69
  ExceptionDetails: {
65
70
  exception: `Failed to setup startChat: ${error}`
@@ -68,24 +73,40 @@ const initStartChat = async (chatSDK, dispatch, setAdapter, params) => {
68
73
  }
69
74
 
70
75
  const newAdapter = await createAdapter(chatSDK);
71
- setAdapter(newAdapter); // eslint-disable-next-line @typescript-eslint/no-explicit-any
76
+ setAdapter(newAdapter);
72
77
 
73
- if (chatSDK !== null && chatSDK !== void 0 && chatSDK.getVoiceVideoCalling) {
78
+ if (!persistedState) {
74
79
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
75
- const chatToken = await (chatSDK === null || chatSDK === void 0 ? void 0 : chatSDK.getChatToken());
80
+ if (chatSDK !== null && chatSDK !== void 0 && chatSDK.getVoiceVideoCalling) {
81
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
82
+ const chatToken = await (chatSDK === null || chatSDK === void 0 ? void 0 : chatSDK.getChatToken());
83
+ dispatch({
84
+ type: LiveChatWidgetActionType.SET_CHAT_TOKEN,
85
+ payload: chatToken
86
+ });
87
+ } // eslint-disable-next-line @typescript-eslint/no-explicit-any
88
+
89
+
90
+ const liveChatContext = await (chatSDK === null || chatSDK === void 0 ? void 0 : chatSDK.getCurrentLiveChatContext());
76
91
  dispatch({
77
- type: LiveChatWidgetActionType.SET_CHAT_TOKEN,
78
- payload: chatToken
92
+ type: LiveChatWidgetActionType.SET_LIVE_CHAT_CONTEXT,
93
+ payload: liveChatContext
79
94
  });
80
- }
95
+ await setPostChatContextAndLoadSurvey(chatSDK, dispatch);
96
+ await updateSessionDataForTelemetry(chatSDK, dispatch); // Set app state to Active
81
97
 
82
- await setPostChatContextAndLoadSurvey(chatSDK, dispatch, false);
83
- await updateSessionDataForTelemetry(chatSDK, dispatch); // Set app state to Active
98
+ dispatch({
99
+ type: LiveChatWidgetActionType.SET_CONVERSATION_STATE,
100
+ payload: ConversationState.Active
101
+ });
102
+ } else {
103
+ dispatch({
104
+ type: LiveChatWidgetActionType.SET_WIDGET_STATE,
105
+ payload: persistedState
106
+ });
107
+ await setPostChatContextAndLoadSurvey(chatSDK, dispatch, true);
108
+ }
84
109
 
85
- dispatch({
86
- type: LiveChatWidgetActionType.SET_CONVERSATION_STATE,
87
- payload: ConversationState.Active
88
- });
89
110
  TelemetryHelper.logLoadingEvent(LogLevel.INFO, {
90
111
  Event: TelemetryEvent.WidgetLoadComplete,
91
112
  Description: "Widget load complete",
@@ -93,9 +114,9 @@ const initStartChat = async (chatSDK, dispatch, setAdapter, params) => {
93
114
  });
94
115
  } catch (ex) {
95
116
  TelemetryHelper.logLoadingEvent(LogLevel.ERROR, {
96
- Event: TelemetryEvent.StartChatFailed,
117
+ Event: TelemetryEvent.WidgetLoadFailed,
97
118
  ExceptionDetails: {
98
- Exception: `Start Chat Failed: ${ex}`
119
+ Exception: `Widget load Failed: ${ex}`
99
120
  }
100
121
  });
101
122
  NotificationHandler.notifyError(NotificationScenarios.Connection, "Start Chat Failed: " + ex); // eslint-disable-next-line @typescript-eslint/no-explicit-any
@@ -111,6 +132,30 @@ const initStartChat = async (chatSDK, dispatch, setAdapter, params) => {
111
132
  });
112
133
  }
113
134
  }
135
+ }; // eslint-disable-next-line @typescript-eslint/no-explicit-any
136
+
137
+
138
+ const canConnectToExistingChat = async (props, chatSDK, state, dispatch, setAdapter) => {
139
+ var _DataStoreManager$cli, _persistedState$domai;
140
+
141
+ const widgetStateFromCache = (_DataStoreManager$cli = DataStoreManager.clientDataStore) === null || _DataStoreManager$cli === void 0 ? void 0 : _DataStoreManager$cli.getData(Constants.widgetStateDataKey, "localStorage");
142
+ const persistedState = widgetStateFromCache ? JSON.parse(widgetStateFromCache) : undefined;
143
+
144
+ if (persistedState !== null && persistedState !== void 0 && (_persistedState$domai = persistedState.domainStates) !== null && _persistedState$domai !== void 0 && _persistedState$domai.liveChatContext) {
145
+ var _persistedState$domai2;
146
+
147
+ dispatch({
148
+ type: LiveChatWidgetActionType.SET_CONVERSATION_STATE,
149
+ payload: ConversationState.Loading
150
+ });
151
+ const optionalParams = {
152
+ liveChatContext: persistedState === null || persistedState === void 0 ? void 0 : (_persistedState$domai2 = persistedState.domainStates) === null || _persistedState$domai2 === void 0 ? void 0 : _persistedState$domai2.liveChatContext
153
+ };
154
+ await initStartChat(chatSDK, dispatch, setAdapter, optionalParams, persistedState);
155
+ return true;
156
+ } else {
157
+ return false;
158
+ }
114
159
  };
115
160
 
116
161
  export { prepareStartChat, initStartChat };
@@ -2,14 +2,14 @@ import { LogLevel, TelemetryEvent } from "../../../common/telemetry/TelemetryCon
2
2
  import { ConversationState } from "../../../contexts/common/ConversationState";
3
3
  import { LiveChatWidgetActionType } from "../../../contexts/common/LiveChatWidgetActionType";
4
4
  import { TelemetryHelper } from "../../../common/telemetry/TelemetryHelper";
5
- import { TelemetryTimers } from "../../../common/telemetry/TelemetryManager"; // Defines startProactiveChat callback
6
-
7
- export const startProactiveChat = (dispatch, bodyTitle, showPrechat, inNewWindow) => {
5
+ import { TelemetryTimers } from "../../../common/telemetry/TelemetryManager";
6
+ // Defines startProactiveChat callback
7
+ export const startProactiveChat = (dispatch, notificationConfig, enablePreChat, inNewWindow) => {
8
8
  dispatch({
9
9
  type: LiveChatWidgetActionType.SET_PROACTIVE_CHAT_PARAMS,
10
10
  payload: {
11
- proactiveChatBodyTitle: bodyTitle ?? "",
12
- proactiveChatEnablePrechat: showPrechat ?? false,
11
+ proactiveChatBodyTitle: notificationConfig && notificationConfig.message ? notificationConfig.message : "",
12
+ proactiveChatEnablePrechat: enablePreChat ?? false,
13
13
  proactiveChatInNewWindow: inNewWindow ?? false
14
14
  }
15
15
  });
@@ -39,8 +39,10 @@ import { startProactiveChat } from "../common/startProactiveChat";
39
39
  import useChatAdapterStore from "../../../hooks/useChatAdapterStore";
40
40
  import useChatContextStore from "../../../hooks/useChatContextStore";
41
41
  import useChatSDKStore from "../../../hooks/useChatSDKStore";
42
- import { TelemetryEvent } from "../../../common/telemetry/TelemetryConstants";
42
+ import { LogLevel, TelemetryEvent } from "../../../common/telemetry/TelemetryConstants";
43
43
  import { disposeTelemetryLoggers } from "../common/disposeTelemetryLoggers";
44
+ import { DataStoreManager } from "../../../common/contextDataStore/DataStoreManager";
45
+ import { TelemetryHelper } from "../../../common/telemetry/TelemetryHelper";
44
46
  export const LiveChatWidgetStateful = props => {
45
47
  var _props$webChatContain, _props$styleProps, _props$controlProps, _props$webChatContain3, _props$webChatContain4, _props$styleProps2, _props$controlProps5, _props$componentOverr, _props$controlProps6, _props$componentOverr2, _props$controlProps7, _props$componentOverr3, _props$controlProps8, _props$componentOverr4, _props$controlProps9, _props$componentOverr5, _props$controlProps10, _props$componentOverr6, _props$controlProps11, _props$controlProps12, _props$controlProps13, _props$componentOverr7, _props$controlProps14, _props$componentOverr8, _props$controlProps15, _props$componentOverr9, _props$componentOverr10, _props$componentOverr11;
46
48
 
@@ -69,6 +71,7 @@ export const LiveChatWidgetStateful = props => {
69
71
 
70
72
  registerTelemetryLoggers(props, dispatch);
71
73
  createInternetConnectionChangeHandler();
74
+ DataStoreManager.clientDataStore = props.contextDataStore ?? undefined;
72
75
  dispatch({
73
76
  type: LiveChatWidgetActionType.SET_WIDGET_ELEMENT_ID,
74
77
  payload: widgetElementId
@@ -140,10 +143,20 @@ export const LiveChatWidgetStateful = props => {
140
143
  }, [state.appStates.skipChatButtonRendering]);
141
144
  useEffect(() => {
142
145
  BroadcastService.getMessageByEventName("StartProactiveChat").subscribe(msg => {
146
+ TelemetryHelper.logActionEvent(LogLevel.INFO, {
147
+ Event: TelemetryEvent.StartProactiveChatEventReceived,
148
+ Description: "Start proactive chat event received."
149
+ });
150
+
143
151
  if (canStartProactiveChat.current) {
144
152
  var _msg$payload, _msg$payload2, _msg$payload3;
145
153
 
146
- startProactiveChat(dispatch, msg === null || msg === void 0 ? void 0 : (_msg$payload = msg.payload) === null || _msg$payload === void 0 ? void 0 : _msg$payload.bodyTitle, msg === null || msg === void 0 ? void 0 : (_msg$payload2 = msg.payload) === null || _msg$payload2 === void 0 ? void 0 : _msg$payload2.showPrechat, msg === null || msg === void 0 ? void 0 : (_msg$payload3 = msg.payload) === null || _msg$payload3 === void 0 ? void 0 : _msg$payload3.inNewWindow);
154
+ startProactiveChat(dispatch, msg === null || msg === void 0 ? void 0 : (_msg$payload = msg.payload) === null || _msg$payload === void 0 ? void 0 : _msg$payload.notificationConfig, msg === null || msg === void 0 ? void 0 : (_msg$payload2 = msg.payload) === null || _msg$payload2 === void 0 ? void 0 : _msg$payload2.enablePreChat, msg === null || msg === void 0 ? void 0 : (_msg$payload3 = msg.payload) === null || _msg$payload3 === void 0 ? void 0 : _msg$payload3.inNewWindow);
155
+ } else {
156
+ TelemetryHelper.logActionEvent(LogLevel.INFO, {
157
+ Event: TelemetryEvent.ChatAlreadyTriggered,
158
+ Description: "Start proactive chat method called, when chat was already triggered."
159
+ });
147
160
  }
148
161
  });
149
162
  window.addEventListener("beforeunload", event => {
@@ -166,7 +179,7 @@ export const LiveChatWidgetStateful = props => {
166
179
  } // Track the message count
167
180
 
168
181
 
169
- if (state.appStates.conversationState == ConversationState.Active) {
182
+ if (state.appStates.conversationState === ConversationState.Active) {
170
183
  chatSDK === null || chatSDK === void 0 ? void 0 : chatSDK.onNewMessage(() => {
171
184
  currentMessageCountRef.current++;
172
185
  dispatch({
@@ -210,23 +223,26 @@ export const LiveChatWidgetStateful = props => {
210
223
  }, [(_props$webChatContain3 = props.webChatContainerProps) === null || _props$webChatContain3 === void 0 ? void 0 : _props$webChatContain3.webChatStyles]);
211
224
  const webChatProps = initWebChatComposer(props, chatSDK, state, dispatch, setWebChatStyles);
212
225
 
213
- const setPostChatContextRelay = () => setPostChatContextAndLoadSurvey(chatSDK, dispatch, true);
226
+ const setPostChatContextRelay = () => setPostChatContextAndLoadSurvey(chatSDK, dispatch); // eslint-disable-next-line @typescript-eslint/no-explicit-any
227
+
214
228
 
215
- const endChatRelay = () => endChat(props, chatSDK, setAdapter, setWebChatStyles, dispatch, adapter);
229
+ const endChatRelay = (adapter, skipEndChatSDK, skipCloseChat) => endChat(props, chatSDK, setAdapter, setWebChatStyles, dispatch, adapter, skipEndChatSDK, skipCloseChat);
216
230
 
217
231
  const prepareStartChatRelay = () => prepareStartChat(props, chatSDK, state, dispatch, setAdapter); // eslint-disable-next-line @typescript-eslint/no-explicit-any
218
232
 
219
233
 
220
- const initStartChatRelay = optionalParams => initStartChat(chatSDK, dispatch, setAdapter, optionalParams);
234
+ const initStartChatRelay = (optionalParams, persistedState) => initStartChat(chatSDK, dispatch, setAdapter, optionalParams, persistedState);
221
235
 
222
236
  const confirmationPaneProps = initConfirmationPropsComposer(props); // publish chat widget state
223
237
 
224
- const chatWidgetStateChangeEvent = {
225
- eventName: TelemetryEvent.ChatWidgetStateChanged,
226
- payload: { ...state
227
- }
228
- };
229
- BroadcastService.postMessage(chatWidgetStateChangeEvent);
238
+ useEffect(() => {
239
+ const chatWidgetStateChangeEvent = {
240
+ eventName: TelemetryEvent.ChatWidgetStateChanged,
241
+ payload: { ...state
242
+ }
243
+ };
244
+ BroadcastService.postMessage(chatWidgetStateChangeEvent);
245
+ }, [state]);
230
246
  return /*#__PURE__*/React.createElement(Composer, _extends({}, webChatProps, {
231
247
  styleOptions: webChatStyles,
232
248
  directLine: ((_props$webChatContain4 = props.webChatContainerProps) === null || _props$webChatContain4 === void 0 ? void 0 : _props$webChatContain4.directLine) ?? adapter ?? defaultWebChatContainerStatefulProps.directLine
@@ -26,7 +26,7 @@ export const LoadingPaneStateful = props => {
26
26
  firstElement[0].focus();
27
27
  }
28
28
 
29
- TelemetryHelper.logActionEvent(LogLevel.INFO, {
29
+ TelemetryHelper.logLoadingEvent(LogLevel.INFO, {
30
30
  Event: TelemetryEvent.LoadingPaneLoaded,
31
31
  Description: "Loading pane loaded."
32
32
  });
@@ -1,5 +1,7 @@
1
+ import { LogLevel, TelemetryEvent } from "../../common/telemetry/TelemetryConstants";
1
2
  import React, { useEffect } from "react";
2
3
  import { OutOfOfficeHoursPane } from "@microsoft/omnichannel-chat-components";
4
+ import { TelemetryHelper } from "../../common/telemetry/TelemetryHelper";
3
5
  import { defaultGeneralStyleProps } from "./common/defaultStyleProps/defaultgeneralOOOHPaneStyleProps";
4
6
  import { findAllFocusableElement } from "../../common/utils";
5
7
  import useChatContextStore from "../../hooks/useChatContextStore";
@@ -23,6 +25,10 @@ export const OutOfOfficeHoursPaneStateful = props => {
23
25
  if (firstElement && firstElement[0]) {
24
26
  firstElement[0].focus();
25
27
  }
28
+
29
+ TelemetryHelper.logLoadingEvent(LogLevel.INFO, {
30
+ Event: TelemetryEvent.OutOfOfficePaneLoaded
31
+ });
26
32
  }, []);
27
33
  return /*#__PURE__*/React.createElement(OutOfOfficeHoursPane, {
28
34
  componentOverrides: props.componentOverrides,
@@ -1,10 +1,11 @@
1
+ import { Constants, HtmlAttributeNames, Regex } from "../../common/Constants";
1
2
  import { LogLevel, TelemetryEvent } from "../../common/telemetry/TelemetryConstants";
2
3
  import React, { useEffect } from "react";
3
4
  import { extractPreChatSurveyResponseValues, findAllFocusableElement, parseAdaptiveCardPayload } from "../../common/utils";
4
5
  import { ConversationState } from "../../contexts/common/ConversationState";
6
+ import { DataStoreManager } from "../../common/contextDataStore/DataStoreManager";
5
7
  import { LiveChatWidgetActionType } from "../../contexts/common/LiveChatWidgetActionType";
6
8
  import { PreChatSurveyPane } from "@microsoft/omnichannel-chat-components";
7
- import { HtmlAttributeNames, Regex } from "../../common/Constants";
8
9
  import { TelemetryHelper } from "../../common/telemetry/TelemetryHelper";
9
10
  import { defaultGeneralPreChatSurveyPaneStyleProps } from "./common/defaultStyles/defaultGeneralPreChatSurveyPaneStyleProps";
10
11
  import { defaultPreChatSurveyLocalizedTexts } from "./common/defaultProps/defaultPreChatSurveyLocalizedTexts";
@@ -39,7 +40,7 @@ export const PreChatSurveyPaneStateful = props => {
39
40
  try {
40
41
  return parseAdaptiveCardPayload(payload, requiredFieldMissingMessage);
41
42
  } catch (ex) {
42
- TelemetryHelper.logLoadingEvent(LogLevel.ERROR, {
43
+ TelemetryHelper.logConfigDataEvent(LogLevel.ERROR, {
43
44
  Event: TelemetryEvent.ParseAdaptiveCardFailed,
44
45
  Description: "Adaptive Card JSON Parse Failed.",
45
46
  ExceptionDetails: {
@@ -66,14 +67,29 @@ export const PreChatSurveyPaneStateful = props => {
66
67
  });
67
68
 
68
69
  try {
69
- const prechatResponseValues = extractPreChatSurveyResponseValues(state.domainStates.preChatSurveyResponse, values);
70
- const optionalParams = {
71
- initContext: {
72
- preChatResponse: prechatResponseValues
73
- }
74
- };
75
- setPreChatResponseEmail(values);
76
- await initStartChat(optionalParams);
70
+ var _DataStoreManager$cli, _persistedState$domai;
71
+
72
+ const widgetStateFromCache = (_DataStoreManager$cli = DataStoreManager.clientDataStore) === null || _DataStoreManager$cli === void 0 ? void 0 : _DataStoreManager$cli.getData(Constants.widgetStateDataKey, "localStorage");
73
+ const persistedState = widgetStateFromCache ? JSON.parse(widgetStateFromCache) : undefined;
74
+ let optionalParams = {};
75
+
76
+ if (persistedState !== null && persistedState !== void 0 && (_persistedState$domai = persistedState.domainStates) !== null && _persistedState$domai !== void 0 && _persistedState$domai.liveChatContext) {
77
+ var _persistedState$domai2;
78
+
79
+ optionalParams = {
80
+ liveChatContext: persistedState === null || persistedState === void 0 ? void 0 : (_persistedState$domai2 = persistedState.domainStates) === null || _persistedState$domai2 === void 0 ? void 0 : _persistedState$domai2.liveChatContext
81
+ };
82
+ await initStartChat(optionalParams, persistedState);
83
+ } else {
84
+ const prechatResponseValues = extractPreChatSurveyResponseValues(state.domainStates.preChatSurveyResponse, values);
85
+ optionalParams = {
86
+ initContext: {
87
+ preChatResponse: prechatResponseValues
88
+ }
89
+ };
90
+ setPreChatResponseEmail(values);
91
+ await initStartChat(optionalParams);
92
+ }
77
93
  } catch (ex) {
78
94
  TelemetryHelper.logActionEvent(LogLevel.ERROR, {
79
95
  Event: TelemetryEvent.PreChatSurveyStartChatMethodFailed,
@@ -28,7 +28,7 @@ export const ProactiveChatPaneStateful = props => {
28
28
  type: LiveChatWidgetActionType.SET_CONVERSATION_STATE,
29
29
  payload: ConversationState.Closed
30
30
  });
31
- TelemetryHelper.logLoadingEvent(LogLevel.INFO, {
31
+ TelemetryHelper.logActionEvent(LogLevel.INFO, {
32
32
  Event: TelemetryEvent.ProactiveChatRejected,
33
33
  ElapsedTimeInMilliseconds: TelemetryTimers.LcwLoadToChatButtonTimer.milliSecondsElapsed,
34
34
  Description: "Proactive chat invitation timed out."
@@ -51,12 +51,12 @@ export const ProactiveChatPaneStateful = props => {
51
51
  if (state.appStates.proactiveChatStates.proactiveChatInNewWindow) {
52
52
  // TODO: BroadcastService: replace with the sdk broadcast service, when in place
53
53
  const startPopoutChatEvent = {
54
- eventName: "StartPopoutChat"
54
+ eventName: TelemetryEvent.ProactiveChatStartPopoutChat
55
55
  };
56
56
  BroadcastService.postMessage(startPopoutChatEvent);
57
57
  dispatch({
58
- type: LiveChatWidgetActionType.SET_SKIP_CHAT_BUTTON_RENDERING,
59
- payload: true
58
+ type: LiveChatWidgetActionType.SET_CONVERSATION_STATE,
59
+ payload: ConversationState.Closed
60
60
  });
61
61
  } else if (((_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.OutOfOperatingHours) === "True") {
62
62
  dispatch({
@@ -68,6 +68,10 @@ export const ProactiveChatPaneStateful = props => {
68
68
  payload: ConversationState.OutOfOffice
69
69
  });
70
70
  } else {
71
+ const proactiveChatStarted = {
72
+ eventName: TelemetryEvent.ProactiveChatStartChat
73
+ };
74
+ BroadcastService.postMessage(proactiveChatStarted);
71
75
  await startChat();
72
76
  }
73
77
  },
@@ -1,16 +1,6 @@
1
- import { BrowserVendor } from "../../webchatcontroller/enums/BrowserVendor";
1
+ import { ArchiveIcon, AudioIcon, BlankIcon, ExcelIcon, ImageIcon, OneNoteIcon, PDFIcon, PowerpointIcon, VideoIcon, VisioIcon, WordIcon } from "../../../../assets/Icons";
2
2
  import { getBrowserName, isChromiumEdge } from "./BrowserInfo";
3
- import ArchiveIcon from "../../../../assets/icons/archiveIcon.svg";
4
- import AudioIcon from "../../../../assets/icons/audioIcon.svg";
5
- import BlankIcon from "../../../../assets/icons/blankIcon.svg";
6
- import VideoIcon from "../../../../assets/icons/videoIcon.svg";
7
- import ImageIcon from "../../../../assets/icons/imageIcon.svg";
8
- import WordIcon from "../../../../assets/icons/wordIcon.svg";
9
- import OneNoteIcon from "../../../../assets/icons/oneNoteIcon.svg";
10
- import PowerpointIcon from "../../../../assets/icons/powerpointIcon.svg";
11
- import VisioIcon from "../../../../assets/icons/visioIcon.svg";
12
- import PDFIcon from "../../../../assets/icons/pdfIcon.svg";
13
- import ExcelIcon from "../../../../assets/icons/excelIcon.svg";
3
+ import { BrowserVendor } from "../../webchatcontroller/enums/BrowserVendor";
14
4
  import { Constants } from "../../../../common/Constants";
15
5
  const FileAttachmentIconMap = {
16
6
  "aac": AudioIcon,
@@ -7,6 +7,7 @@ export let ConversationState;
7
7
  ConversationState[ConversationState["OutOfOffice"] = 3] = "OutOfOffice";
8
8
  ConversationState[ConversationState["ProactiveChat"] = 4] = "ProactiveChat";
9
9
  ConversationState[ConversationState["Active"] = 5] = "Active";
10
- ConversationState[ConversationState["Postchat"] = 6] = "Postchat";
11
- ConversationState[ConversationState["Closed"] = 7] = "Closed";
10
+ ConversationState[ConversationState["InActive"] = 6] = "InActive";
11
+ ConversationState[ConversationState["Postchat"] = 7] = "Postchat";
12
+ ConversationState[ConversationState["Closed"] = 8] = "Closed";
12
13
  })(ConversationState || (ConversationState = {}));
@@ -30,4 +30,6 @@ export let LiveChatWidgetActionType;
30
30
  LiveChatWidgetActionType[LiveChatWidgetActionType["SET_UNREAD_MESSAGE_COUNT"] = 26] = "SET_UNREAD_MESSAGE_COUNT";
31
31
  LiveChatWidgetActionType[LiveChatWidgetActionType["SET_FOCUS_CHAT_BUTTON"] = 27] = "SET_FOCUS_CHAT_BUTTON";
32
32
  LiveChatWidgetActionType[LiveChatWidgetActionType["SET_CONVERSATION_ENDED_BY_AGENT"] = 28] = "SET_CONVERSATION_ENDED_BY_AGENT";
33
+ LiveChatWidgetActionType[LiveChatWidgetActionType["SET_WIDGET_STATE"] = 29] = "SET_WIDGET_STATE";
34
+ LiveChatWidgetActionType[LiveChatWidgetActionType["SET_LIVE_CHAT_CONTEXT"] = 30] = "SET_LIVE_CHAT_CONTEXT";
33
35
  })(LiveChatWidgetActionType || (LiveChatWidgetActionType = {}));
@@ -13,7 +13,8 @@ export const getLiveChatWidgetContextInitialState = props => {
13
13
  chatToken: undefined,
14
14
  postChatContext: undefined,
15
15
  telemetryInternalData: {},
16
- globalDir: "ltr"
16
+ globalDir: "ltr",
17
+ liveChatContext: undefined
17
18
  },
18
19
  appStates: {
19
20
  conversationState: ConversationState.Closed,
@@ -136,6 +136,7 @@ export const createReducer = () => {
136
136
  case LiveChatWidgetActionType.SET_CHAT_TOKEN:
137
137
  return { ...state,
138
138
  domainStates: { ...state.domainStates,
139
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
139
140
  chatToken: action.payload
140
141
  }
141
142
  };
@@ -208,6 +209,18 @@ export const createReducer = () => {
208
209
  }
209
210
  };
210
211
 
212
+ case LiveChatWidgetActionType.SET_LIVE_CHAT_CONTEXT:
213
+ return { ...state,
214
+ domainStates: { ...state.domainStates,
215
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
216
+ liveChatContext: action.payload
217
+ }
218
+ };
219
+
220
+ case LiveChatWidgetActionType.SET_WIDGET_STATE:
221
+ return { ...action.payload
222
+ };
223
+
211
224
  case LiveChatWidgetActionType.SET_CONVERSATION_ENDED_BY_AGENT:
212
225
  return { ...state,
213
226
  appStates: { ...state.appStates,
@@ -9,13 +9,13 @@ export const shouldShowHeader = state => {
9
9
  return !state.appStates.isMinimized && state.appStates.conversationState !== ConversationState.Closed && state.appStates.conversationState !== ConversationState.ProactiveChat;
10
10
  };
11
11
  export const shouldShowFooter = state => {
12
- return !state.appStates.isMinimized && state.appStates.conversationState === ConversationState.Active;
12
+ return !state.appStates.isMinimized && (state.appStates.conversationState === ConversationState.Active || state.appStates.conversationState === ConversationState.InActive);
13
13
  };
14
14
  export const shouldShowEmailTranscriptPane = state => {
15
15
  return state.uiStates.showEmailTranscriptPane;
16
16
  };
17
17
  export const shouldShowWebChatContainer = state => {
18
- return state.appStates.conversationState === ConversationState.Active;
18
+ return state.appStates.conversationState === ConversationState.Active || state.appStates.conversationState === ConversationState.InActive;
19
19
  };
20
20
  export const shouldShowLoadingPane = state => {
21
21
  return !state.appStates.isMinimized && !state.appStates.shouldShowPostChat && state.appStates.conversationState === ConversationState.Loading;
@@ -0,0 +1 @@
1
+ export declare const NewMessageNotificationSoundBase64: string;
@@ -0,0 +1,11 @@
1
+ export declare const ArchiveIcon = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyMDQ4IDIwNDgiIHdpZHRoPSIxMnB4IiBoZWlnaHQ9IjEycHgiPg0KPHBhdGggZD0iTTE3OTIgMHEyNyAwIDUwIDEwdDQwIDI3IDI4IDQxIDEwIDUwdjQ4MHEwIDQ1LTkgNzd0LTI0IDU4LTMxIDQ2LTMxIDQwLTIzIDQ0LTEwIDU1djk5MnEwIDI3LTEwIDUwdC0yNyA0MC00MSAyOC01MCAxMEgyNTZWMGgxNTM2ek02NDAgMTI4djM4NGgyNTZWMTI4SDY0MHptMTAyNCA4MDBxMC0zMS05LTU0dC0yNC00NC0zMS00MS0zMS00NS0yMy01OC0xMC03OFYxMjhoLTUxMnY1MTJINzY4djEyOEg2NDBWNjQwSDUxMlYxMjhIMzg0djE3OTJoMzg0di0xMjhoMTI4djEyOGg3NjhWOTI4em0xMjgtODAwaC0xMjh2NDgwcTAgMjQgNCA0MnQxMyAzMyAyMCAyOSAyNyAzMnExNS0xNyAyNi0zMXQyMC0zMCAxMy0zMyA1LTQyVjEyOHpNNjQwIDg5NmgxMjh2MTI4SDY0MFY4OTZ6bTAgMjU2aDEyOHYxMjhINjQwdi0xMjh6bTAgMjU2aDEyOHYxMjhINjQwdi0xMjh6bTEyOCAyNTZ2MTI4SDY0MHYtMTI4aDEyOHptMC03NjhWNzY4aDEyOHYxMjhINzY4em0wIDI1NnYtMTI4aDEyOHYxMjhINzY4em0wIDI1NnYtMTI4aDEyOHYxMjhINzY4em0wIDI1NnYtMTI4aDEyOHYxMjhINzY4eiIgLz4NCjwvc3ZnPg==";
2
+ export declare const AudioIcon = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciDQogICAgdmlld0JveD0iMCAwIDIwNDggMjA0OCINCiAgICB3aWR0aD0iMTJweCINCiAgICBoZWlnaHQ9IjEycHgiPg0KICAgIDxwYXRoIGQ9Ik0xNzkyIDE0MDhxMCA2Mi0yOSAxMDl0LTc2IDgwLTEwNCA1MC0xMTEgMTdxLTU0IDAtMTExLTE3dC0xMDMtNDktNzYtODAtMzAtMTEwcTAtNjEgMjktMTA5dDc2LTgwIDEwNC01MCAxMTEtMTdxNTEgMCAxMDAgMTJ0OTIgMzlWMjI2TDc2OCA0NTB2MTIxNHEwIDYyLTI5IDEwOXQtNzYgODAtMTA0IDUwLTExMSAxN3EtNTQgMC0xMTEtMTd0LTEwMy00OS03Ni04MC0zMC0xMTBxMC02MSAyOS0xMDl0NzYtODAgMTA0LTUwIDExMS0xN3E1MSAwIDEwMCAxMnQ5MiAzOVYzNTBMMTc5MiA2MnYxMzQ2eiIgLz4NCjwvc3ZnPg==";
3
+ export declare const BlankIcon = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciDQogICAgdmlld0JveD0iMCAwIDIwNDggMjA0OCINCiAgICB3aWR0aD0iMTJweCINCiAgICBoZWlnaHQ9IjEycHgiPg0KICAgIDxwYXRoIGQ9Ik01NDkgMGgxMjQzdjE3NTVsLTI5MyAyOTNIMjU2VjI5M0w1NDkgMHptMTExNSAxNzAxVjEyOEg2MDNMMzg0IDM0N3YxNTczaDEwNjFsMjE5LTIxOXoiIC8+DQo8L3N2Zz4=";
4
+ export declare const ExcelIcon = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciDQogICAgdmlld0JveD0iMCAwIDIwNDggMjA0OCINCiAgICB3aWR0aD0iMTJweCINCiAgICBoZWlnaHQ9IjEycHgiPg0KICAgIDxwYXRoIGQ9Ik0yMDQ4IDQ3NXYxNDQ1cTAgMjctMTAgNTB0LTI3IDQwLTQxIDI4LTUwIDEwSDY0MHEtMjcgMC01MC0xMHQtNDAtMjctMjgtNDEtMTAtNTB2LTI1NkgxMTVxLTI0IDAtNDQtOXQtMzctMjUtMjUtMzYtOS00NVY2MjdxMC0yNCA5LTQ0dDI1LTM3IDM2LTI1IDQ1LTloMzk3VjEyOHEwLTI3IDEwLTUwdDI3LTQwIDQxLTI4IDUwLTEwaDkzM3EyNiAwIDQ5IDl0NDIgMjhsMzQ3IDM0N3ExOCAxOCAyNyA0MXQxMCA1MHptLTM4NC0yNTZ2MTY1aDE2NWwtMTY1LTE2NXpNMjYxIDE0MjRoMTg5cTItNCAxMi0yM3QyNS00NSAyOS01NSAyOS01MyAyMy00MSAxMC0xN3EyNyA1OSA2MCAxMTh0NjUgMTE2aDE4N2wtMjA5LTMzOSAyMDUtMzMzSDcwN3EtMzEgNTctNjAgMTE0dC02MyAxMTJxLTI5LTU3LTU3LTExM3QtNTctMTEzSDI3OWwxOTkgMzM1LTIxNyAzMzd6bTM3OSA0OTZoMTI4MFY1MTJoLTI1NnEtMjcgMC01MC0xMHQtNDAtMjctMjgtNDEtMTAtNTBWMTI4SDY0MHYzODRoMzk3cTI0IDAgNDQgOXQzNyAyNSAyNSAzNiA5IDQ1djkyMnEwIDI0LTkgNDR0LTI1IDM3LTM2IDI1LTQ1IDlINjQwdjI1NnptNjQwLTEwMjRWNzY4aDUxMnYxMjhoLTUxMnptMCAyNTZ2LTEyOGg1MTJ2MTI4aC01MTJ6bTAgMjU2di0xMjhoNTEydjEyOGgtNTEyeiIgLz4NCjwvc3ZnPg==";
5
+ export declare const ImageIcon = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciDQogICAgdmlld0JveD0iMCAwIDIwNDggMjA0OCINCiAgICB3aWR0aD0iMTJweCINCiAgICBoZWlnaHQ9IjEycHgiPg0KICAgIDxwYXRoIGQ9Ik0yNTYgMTkyMGgxNTM2djEyOEgxMjhWMGgxMTE1bDU0OSA1NDl2OTFoLTY0MFYxMjhIMjU2djE3OTJ6TTEyODAgNTEyaDI5M2wtMjkzLTI5M3YyOTN6bTc2OCAyNTZ2MTAyNEg2NDBWNzY4aDE0MDh6TTc2OCA4OTZ2NDIxbDMyMC0zMTkgNDE2IDQxNiAxNjAtMTYwIDI1NiAyNTZWODk2SDc2OHptOTg3IDc2OGgxMzlsLTIzMC0yMzAtNjkgNzAgMTYwIDE2MHptLTk4NyAwaDgwNWwtNDg1LTQ4Ni0zMjAgMzIxdjE2NXptOTYwLTUxMnEtMjYgMC00NS0xOXQtMTktNDVxMC0yNiAxOS00NXQ0NS0xOXEyNiAwIDQ1IDE5dDE5IDQ1cTAgMjYtMTkgNDV0LTQ1IDE5eiIgLz4NCjwvc3ZnPg==";
6
+ export declare const OneNoteIcon = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciDQogICAgdmlld0JveD0iMCAwIDIwNDggMjA0OCINCiAgICB3aWR0aD0iMTJweCINCiAgICBoZWlnaHQ9IjEycHgiPg0KICAgIDxwYXRoIGQ9Ik0xOTYzIDEyOHEzNSAwIDYwIDI1dDI1IDYwdjE2MjJxMCAzNS0yNSA2MHQtNjAgMjVINTk3cS0zNSAwLTYwLTI1dC0yNS02MHYtMjk5SDg1cS0zNSAwLTYwLTI1dC0yNS02MFY1OTdxMC0zNSAyNS02MHQ2MC0yNWg0MjdWMjEzcTAtMzUgMjUtNjB0NjAtMjVoMTM2NnpNMzg5IDkzOWwyNDIgNDIwaDE1MlY2ODlINjM1djQyOUw0MDIgNjg5SDI0MXY2NzBoMTQ4VjkzOXptMTUzMSA4NTN2LTI1NmgtMjU2djI1NmgyNTZ6bTAtMzg0di0yNTZoLTI1NnYyNTZoMjU2em0wLTM4NFY3NjhoLTI1NnYyNTZoMjU2em0wLTM4NFYyNTZINjQwdjI1NmgyOTlxMzUgMCA2MCAyNXQyNSA2MHY4NTRxMCAzNS0yNSA2MHQtNjAgMjVINjQwdjI1Nmg4OTZWNjQwaDM4NHoiIC8+DQo8L3N2Zz4=";
7
+ export declare const PDFIcon = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciDQogICAgdmlld0JveD0iMCAwIDIwNDggMjA0OCINCiAgICB3aWR0aD0iMTJweCINCiAgICBoZWlnaHQ9IjEycHgiPg0KICAgIDxwYXRoIGQ9Ik0xOTIwIDE2NjRoLTEyOHYzODRIMTI4di0zODRIMFY2NDBoMTI4VjBoMTI0M2w0MjEgNDIxdjIxOWgxMjh2MTAyNHpNMTQwOCAzODRoMTY1bC0xNjUtMTY1djE2NXpNMjU2IDY0MGgxNDA4VjUxMmgtMzg0VjEyOEgyNTZ2NTEyem0xNDA4IDEwMjRIMjU2djI1NmgxNDA4di0yNTZ6bTEyOC04OTZIMTI4djc2OGgxNjY0Vjc2OHpNNDQ4IDg5NnE0MCAwIDc1IDE1dDYxIDQxIDQxIDYxIDE1IDc1cTAgNDAtMTUgNzV0LTQxIDYxLTYxIDQxLTc1IDE1aC02NHYxMjhIMjU2Vjg5NmgxOTJ6bTAgMjU2cTI2IDAgNDUtMTl0MTktNDVxMC0yNi0xOS00NXQtNDUtMTloLTY0djEyOGg2NHptNDQ4LTI1NnE1MyAwIDk5IDIwdDgyIDU1IDU1IDgxIDIwIDEwMHEwIDUzLTIwIDk5dC01NSA4Mi04MSA1NS0xMDAgMjBINzY4Vjg5NmgxMjh6bTAgMzg0cTI3IDAgNTAtMTB0NDAtMjcgMjgtNDEgMTAtNTBxMC0yNy0xMC01MHQtMjctNDAtNDEtMjgtNTAtMTB2MjU2em0zODQtMzg0aDMyMHYxMjhoLTE5MnYxMjhoMTkydjEyOGgtMTkydjEyOGgtMTI4Vjg5NnoiIC8+DQo8L3N2Zz4=";
8
+ export declare const PowerpointIcon = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciDQogICAgdmlld0JveD0iMCAwIDIwNDggMjA0OCINCiAgICB3aWR0aD0iMTJweCINCiAgICBoZWlnaHQ9IjEycHgiPg0KICAgIDxwYXRoIGQ9Ik0yMDQ4IDQ3NXYxNDQ1cTAgMjctMTAgNTB0LTI3IDQwLTQxIDI4LTUwIDEwSDY0MHEtMjcgMC01MC0xMHQtNDAtMjctMjgtNDEtMTAtNTB2LTI1NkgxMTVxLTI0IDAtNDQtOXQtMzctMjUtMjUtMzYtOS00NVY2MjdxMC0yNCA5LTQ0dDI1LTM3IDM2LTI1IDQ1LTloMzk3VjEyOHEwLTI3IDEwLTUwdDI3LTQwIDQxLTI4IDUwLTEwaDkzM3EyNiAwIDQ5IDl0NDIgMjhsMzQ3IDM0N3ExOCAxOCAyNyA0MXQxMCA1MHptLTM4NC0yNTZ2MTY1aDE2NWwtMTY1LTE2NXpNMzY4IDc1MnY2NzJoMTUwdi0yMjZoMTAwcTUyIDAgOTctMTV0NzgtNDYgNTMtNzIgMjAtOTdxMC01Ni0xNy05N3QtNTAtNjctNzYtMzktOTctMTNIMzY4em0xNTUyIDExNjhWNTEyaC0yNTZxLTI3IDAtNTAtMTB0LTQwLTI3LTI4LTQxLTEwLTUwVjEyOEg2NDB2Mzg0aDM5N3EyNCAwIDQ0IDl0MzcgMjUgMjUgMzYgOSA0NXY5MjJxMCAyNC05IDQ0dC0yNSAzNy0zNiAyNS00NSA5SDY0MHYyNTZoMTI4MHpNMTUzNiA2NDBxNzkgMCAxNDkgMzB0MTIyIDgyIDgzIDEyMyAzMCAxNDloLTM4NFY2NDB6bS0xMjggMTI4djM4NGgzODRxMCA4MC0zMCAxNDl0LTgyIDEyMi0xMjMgODMtMTQ5IDMwcS0zMyAwLTY1LTZ0LTYzLTE4Vjc5MnEzMS0xMSA2My0xN3Q2NS03em0tODA0IDMwMGgtODZWODgzaDkwcTQ3IDAgNzQgMjB0MjcgNzBxMCA1Mi0yOCA3M3QtNzcgMjJ6IiAvPg0KPC9zdmc+";
9
+ export declare const VideoIcon = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciDQogICAgdmlld0JveD0iMCAwIDIwNDggMjA0OCINCiAgICB3aWR0aD0iMTJweCINCiAgICBoZWlnaHQ9IjEycHgiPg0KICAgIDxwYXRoIGQ9Ik0wIDI1NmgyMDQ4djE0MDhIMFYyNTZ6bTI1NiAxMjgwdi0xMjhIMTI4djEyOGgxMjh6bTAtMjU2di0xMjhIMTI4djEyOGgxMjh6bTAtMjU2Vjg5NkgxMjh2MTI4aDEyOHptMC0yNTZWNjQwSDEyOHYxMjhoMTI4em0wLTI1NlYzODRIMTI4djEyOGgxMjh6bTE0MDggNzg2VjM4NEgzODR2ODIzbDQxMS01NDkgNzQxIDg3OC0zMjktNTU4IDEzNy0xMzcgMzIwIDQ1N3ptMjU2IDIzOHYtMTI4aC0xMjh2MTI4aDEyOHptMC0yNTZ2LTEyOGgtMTI4djEyOGgxMjh6bTAtMjU2Vjg5NmgtMTI4djEyOGgxMjh6bTAtMjU2VjY0MGgtMTI4djEyOGgxMjh6bTAtMjU2VjM4NGgtMTI4djEyOGgxMjh6IiAvPg0KPC9zdmc+";
10
+ export declare const VisioIcon = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciDQogICAgdmlld0JveD0iMCAwIDIwNDggMjA0OCINCiAgICB3aWR0aD0iMTJweCINCiAgICBoZWlnaHQ9IjEycHgiPg0KICAgIDxwYXRoIGQ9Ik0yMDQ4IDQ3NXYxNDQ1cTAgMjctMTAgNTB0LTI3IDQwLTQxIDI4LTUwIDEwSDY0MHEtMjcgMC01MC0xMHQtNDAtMjctMjgtNDEtMTAtNTB2LTI1NkgxMTVxLTI0IDAtNDQtOXQtMzctMjUtMjUtMzYtOS00NVY2MjdxMC0yNCA5LTQ0dDI1LTM3IDM2LTI1IDQ1LTloMzk3VjEyOHEwLTI3IDEwLTUwdDI3LTQwIDQxLTI4IDUwLTEwaDkzM3EyNiAwIDQ5IDl0NDIgMjhsMzQ3IDM0N3ExOCAxOCAyNyA0MXQxMCA1MHptLTM4NC0yNTZ2MTY1aDE2NWwtMTY1LTE2NXpNNDkzIDE0MjRoMTYzbDI1NS02NzJINzQ1bC0xNDcgNDI3cS01IDE2LTEwIDMxdC0xMSAzMXEtNDEtMTIzLTgyLTI0NHQtODQtMjQ1SDI0MWwyNDggNjYyIDQgMTB6bTE0NyA0OTZoMTI4MFY1MTJoLTI1NnEtMjcgMC01MC0xMHQtNDAtMjctMjgtNDEtMTAtNTBWMTI4SDY0MHYzODRoMzk3cTI0IDAgNDQgOXQzNyAyNSAyNSAzNiA5IDQ1djkyMnEwIDI0LTkgNDR0LTI1IDM3LTM2IDI1LTQ1IDlINjQwdjI1NnptOTYwLTEyODBsMTkyIDE5Mi0xMjggMTI4djQ0OGgtMjU2djEyOGgtMTI4di0zODRoMTI4djEyOGgxMjhWOTYwbC0xMjgtMTI4IDE5Mi0xOTJ6IiAvPg0KPC9zdmc+";
11
+ export declare const WordIcon = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciDQogICAgdmlld0JveD0iMCAwIDIwNDggMjA0OCINCiAgICB3aWR0aD0iMTJweCINCiAgICBoZWlnaHQ9IjEycHgiPg0KICAgIDxwYXRoIGQ9Ik0yMDQ4IDQ3NXYxNDQ1cTAgMjctMTAgNTB0LTI3IDQwLTQxIDI4LTUwIDEwSDY0MHEtMjcgMC01MC0xMHQtNDAtMjctMjgtNDEtMTAtNTB2LTI1NkgxMTVxLTI0IDAtNDQtOXQtMzctMjUtMjUtMzYtOS00NVY2MjdxMC0yNCA5LTQ0dDI1LTM3IDM2LTI1IDQ1LTloMzk3VjEyOHEwLTI3IDEwLTUwdDI3LTQwIDQxLTI4IDUwLTEwaDkzM3EyNiAwIDQ5IDl0NDIgMjhsMzQ3IDM0N3ExOCAxOCAyNyA0MXQxMCA1MHptLTM4NC0yNTZ2MTY1aDE2NWwtMTY1LTE2NXpNMzIwIDE0MjRoMTYxcTItOCA5LTQzdDE4LTgzIDIxLTEwMyAyMi0xMDEgMTYtNzYgOC0zMWw3IDMwcTcgMzAgMTcgNzd0MjMgMTAwIDIzIDEwMyAxOSA4NCAxMCA0M2gxNjBsMTQ4LTY3Mkg4MzRsLTgwIDQzOC0xMDAtNDM4SDUwMmwtOTYgNDQwLTg2LTQ0MEgxNzBsMTUwIDY3MnptMzIwIDQ5NmgxMjgwVjUxMmgtMjU2cS0yNyAwLTUwLTEwdC00MC0yNy0yOC00MS0xMC01MFYxMjhINjQwdjM4NGgzOTdxMjQgMCA0NCA5dDM3IDI1IDI1IDM2IDkgNDV2OTIycTAgMjQtOSA0NHQtMjUgMzctMzYgMjUtNDUgOUg2NDB2MjU2em02NDAtMTAyNFY3NjhoNTEydjEyOGgtNTEyem0wIDI1NnYtMTI4aDUxMnYxMjhoLTUxMnptMCAyNTZ2LTEyOGg1MTJ2MTI4aC01MTJ6IiAvPg0KPC9zdmc+";
@@ -13,6 +13,7 @@ export declare class Constants {
13
13
  static readonly true = "true";
14
14
  static readonly false = "false";
15
15
  static readonly maximumUnreadMessageCount = 99;
16
+ static readonly widgetStateDataKey = "LcwChatWidgetState";
16
17
  static readonly channelIdKey = "ChannelId-";
17
18
  static readonly ChannelId = "lcw";
18
19
  static readonly CustomerTag = "FromCustomer";
@@ -0,0 +1,4 @@
1
+ import { IContextDataStore } from "../interfaces/IContextDataStore";
2
+ export declare class DataStoreManager {
3
+ static clientDataStore?: IContextDataStore;
4
+ }
@@ -0,0 +1,14 @@
1
+ export interface IContextDataStore {
2
+ /**
3
+ * getData: Get data from data store
4
+ */
5
+ getData: (key: string, type: string) => any;
6
+ /**
7
+ * setData: Set data to data store
8
+ */
9
+ setData: (key: string, value: string) => void;
10
+ /**
11
+ * removeData: Remove data from data store by key
12
+ */
13
+ removeData?: (key: string) => void;
14
+ }
@@ -99,11 +99,15 @@ export declare enum TelemetryEvent {
99
99
  SendTypingIndicatorSucceeded = "SendTypingIndicatorSucceeded",
100
100
  SendTypingIndicatorFailed = "SendTypingIndicatorFailed",
101
101
  PreChatSurveyStartChatMethodFailed = "PreChatSurveyStartChatMethodFailed",
102
+ ChatAlreadyTriggered = "ChatAlreadyTriggered",
103
+ StartProactiveChatEventReceived = "StartProactiveChatEventReceived",
102
104
  StartProactiveChatMethodFailed = "StartProactiveChatMethodFailed",
103
105
  ProactiveChatAccepted = "ProactiveChatAccepted",
104
106
  ProactiveChatRejected = "ProactiveChatRejected",
105
107
  IncomingProactiveChatScreenLoaded = "IncomingProactiveChatScreenLoaded",
106
108
  ProactiveChatClosed = "ProactiveChatClosed",
109
+ ProactiveChatStartChat = "ProactiveChatStartChat",
110
+ ProactiveChatStartPopoutChat = "ProactiveChatStartPopoutChat",
107
111
  ReconnectChatContinueConversation = "ReconnectChatContinueConversation",
108
112
  ReconnectChatStartNewConversation = "ReconnectChatStartNewConversation",
109
113
  ReconnectChatMinimize = "ReconnectChatMinimize",
@@ -6,6 +6,9 @@ export interface IConfirmationPaneStatefulParams extends IConfirmationPaneStatef
6
6
  setPostChatContext: () => Promise<void>;
7
7
  /**
8
8
  * endChat: Internal Prop injected for triggering end of a chat using chatSDK
9
+ * @param adapter : The chat adapter for the live chat session
10
+ * @param skipEndChatSDK : If set to true endchat will skip chatSDK endChat call
11
+ * @param skipCloseChat : If set to true endchat will skip closing the live chat instance
9
12
  */
10
- endChat: (adapter: any) => Promise<void>;
13
+ endChat: (adapter: any, skipEndChatSDK?: boolean, skipCloseChat?: boolean) => Promise<void>;
11
14
  }
@@ -12,6 +12,9 @@ export interface IHeaderStatefulParams {
12
12
  outOfOfficeHeaderProps?: IHeaderProps;
13
13
  /**
14
14
  * endChat: Internal Prop injected for triggering end of a chat using chatSDK
15
+ * @param adapter : The chat adapter for the live chat session
16
+ * @param skipEndChatSDK : If set to true endchat will skip chatSDK endChat call
17
+ * @param skipCloseChat : If set to true endchat will skip closing the live chat instance
15
18
  */
16
- endChat: (adapter: any) => Promise<void>;
19
+ endChat: (adapter: any, skipEndChatSDK?: boolean, skipCloseChat?: boolean) => Promise<void>;
17
20
  }
@@ -1,4 +1,4 @@
1
1
  import { Dispatch } from "react";
2
2
  import { ILiveChatWidgetAction } from "../../../contexts/common/ILiveChatWidgetAction";
3
3
  import { ILiveChatWidgetProps } from "../interfaces/ILiveChatWidgetProps";
4
- export declare const endChat: (props: ILiveChatWidgetProps, chatSDK: any, setAdapter: any, setWebChatStyles: any, dispatch: Dispatch<ILiveChatWidgetAction>, adapter: any) => Promise<void>;
4
+ export declare const endChat: (props: ILiveChatWidgetProps, chatSDK: any, setAdapter: any, setWebChatStyles: any, dispatch: Dispatch<ILiveChatWidgetAction>, adapter: any, skipEndChatSDK?: boolean | undefined, skipCloseChat?: boolean | undefined) => Promise<void>;
@@ -1,3 +1,3 @@
1
1
  import { Dispatch } from "react";
2
2
  import { ILiveChatWidgetAction } from "../../../contexts/common/ILiveChatWidgetAction";
3
- export declare const setPostChatContextAndLoadSurvey: (chatSDK: any, dispatch: Dispatch<ILiveChatWidgetAction>, loadSurvey: boolean) => Promise<void>;
3
+ export declare const setPostChatContextAndLoadSurvey: (chatSDK: any, dispatch: Dispatch<ILiveChatWidgetAction>, persistedChat?: boolean | undefined) => Promise<void>;
@@ -3,5 +3,5 @@ import { ILiveChatWidgetAction } from "../../../contexts/common/ILiveChatWidgetA
3
3
  import { ILiveChatWidgetContext } from "../../../contexts/common/ILiveChatWidgetContext";
4
4
  import { ILiveChatWidgetProps } from "../interfaces/ILiveChatWidgetProps";
5
5
  declare const prepareStartChat: (props: ILiveChatWidgetProps, chatSDK: any, state: ILiveChatWidgetContext, dispatch: Dispatch<ILiveChatWidgetAction>, setAdapter: any) => Promise<void>;
6
- declare const initStartChat: (chatSDK: any, dispatch: Dispatch<ILiveChatWidgetAction>, setAdapter: any, params?: any) => Promise<void>;
6
+ declare const initStartChat: (chatSDK: any, dispatch: Dispatch<ILiveChatWidgetAction>, setAdapter: any, params?: any, persistedState?: any) => Promise<void>;
7
7
  export { prepareStartChat, initStartChat };
@@ -1,3 +1,4 @@
1
1
  import { Dispatch } from "react";
2
2
  import { ILiveChatWidgetAction } from "../../../contexts/common/ILiveChatWidgetAction";
3
- export declare const startProactiveChat: (dispatch: Dispatch<ILiveChatWidgetAction>, bodyTitle?: string | undefined, showPrechat?: boolean | undefined, inNewWindow?: boolean | undefined) => void;
3
+ import { IProactiveChatNotificationConfig } from "../../proactivechatpanestateful/interfaces/IProactiveChatNotificationConfig";
4
+ export declare const startProactiveChat: (dispatch: Dispatch<ILiveChatWidgetAction>, notificationConfig?: IProactiveChatNotificationConfig | undefined, enablePreChat?: boolean | undefined, inNewWindow?: boolean | undefined) => void;