@microsoft/omnichannel-chat-widget 0.1.0-main.89c6531 → 0.1.0-main.9e62ed8

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 (174) hide show
  1. package/README.md +259 -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 +50 -4
  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 +55 -5
  8. package/lib/cjs/common/telemetry/TelemetryHelper.js +13 -0
  9. package/lib/cjs/common/telemetry/TelemetryManager.js +17 -6
  10. package/lib/cjs/common/telemetry/defaultConfigs/defaultAriaConfig.js +1 -1
  11. package/lib/cjs/common/telemetry/defaultConfigs/defaultTelemetryConfiguration.js +4 -1
  12. package/lib/cjs/common/telemetry/loggers/ariaTelemetryLogger.js +33 -13
  13. package/lib/cjs/common/telemetry/loggers/consoleLogger.js +6 -5
  14. package/lib/cjs/common/utils.js +30 -2
  15. package/lib/cjs/components/callingcontainerstateful/CallingContainerStateful.js +14 -0
  16. package/lib/cjs/components/chatbuttonstateful/ChatButtonStateful.js +16 -4
  17. package/lib/cjs/components/confirmationpanestateful/ConfirmationPaneStateful.js +8 -54
  18. package/lib/cjs/components/emailtranscriptpanestateful/EmailTranscriptPaneStateful.js +2 -2
  19. package/lib/cjs/components/footerstateful/FooterStateful.js +4 -5
  20. package/lib/cjs/components/footerstateful/downloadtranscriptstateful/DownloadTranscriptStateful.js +11 -2
  21. package/lib/cjs/components/headerstateful/HeaderStateful.js +11 -8
  22. package/lib/cjs/components/livechatwidget/common/createMarkdown.js +3 -4
  23. package/lib/cjs/components/livechatwidget/common/defaultProps/dummyDefaultProps.js +23 -22
  24. package/lib/cjs/components/livechatwidget/common/endChat.js +116 -49
  25. package/lib/cjs/components/livechatwidget/common/initCallingSdk.js +5 -0
  26. package/lib/cjs/components/livechatwidget/common/initWebChatComposer.js +40 -11
  27. package/lib/cjs/components/livechatwidget/common/reconnectChatHelper.js +105 -20
  28. package/lib/cjs/components/livechatwidget/common/registerTelemetryLoggers.js +11 -5
  29. package/lib/cjs/components/livechatwidget/common/setPostChatContextAndLoadSurvey.js +26 -24
  30. package/lib/cjs/components/livechatwidget/common/startChat.js +151 -53
  31. package/lib/cjs/components/livechatwidget/common/startProactiveChat.js +3 -3
  32. package/lib/cjs/components/livechatwidget/livechatwidgetstateful/LiveChatWidgetStateful.js +228 -44
  33. package/lib/cjs/components/loadingpanestateful/LoadingPaneStateful.js +1 -1
  34. package/lib/cjs/components/ooohpanestateful/OOOHPaneStateful.js +8 -0
  35. package/lib/cjs/components/postchatloadingpanestateful/PostChatLoadingPaneStateful.js +8 -0
  36. package/lib/cjs/components/prechatsurveypanestateful/PreChatSurveyPaneStateful.js +26 -10
  37. package/lib/cjs/components/proactivechatpanestateful/ProactiveChatPaneStateful.js +26 -4
  38. package/lib/cjs/components/proactivechatpanestateful/interfaces/IProactiveChatNotificationConfig.js +1 -0
  39. package/lib/cjs/components/webchatcontainerstateful/WebChatContainerStateful.js +80 -0
  40. package/lib/cjs/components/webchatcontainerstateful/common/mockchatsdk.js +4 -0
  41. package/lib/cjs/components/webchatcontainerstateful/common/utils/FileAttachmentIconManager.js +51 -73
  42. package/lib/cjs/components/webchatcontainerstateful/interfaces/IBotMagicCodeConfig.js +1 -0
  43. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/BotMagicCodeStore.js +14 -0
  44. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityMiddleware.js +25 -48
  45. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachmentMiddleware.js +3 -1
  46. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/cardActionMiddleware.js +52 -0
  47. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/cardActionMiddleware.spec.js +98 -0
  48. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/messageTimestampMiddleware.js +117 -0
  49. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/conversationEndMiddleware.js +6 -6
  50. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/webchattelemetry/WebChatLogger.js +45 -0
  51. package/lib/cjs/contexts/common/ConversationState.js +3 -2
  52. package/lib/cjs/contexts/common/LiveChatWidgetActionType.js +12 -7
  53. package/lib/cjs/contexts/common/LiveChatWidgetContextInitialState.js +11 -3
  54. package/lib/cjs/contexts/createReducer.js +36 -10
  55. package/lib/cjs/controller/componentController.js +3 -3
  56. package/lib/cjs/plugins/newMessageEventHandler.js +99 -0
  57. package/lib/esm/assets/Audios.js +1 -0
  58. package/lib/esm/assets/Icons.js +11 -0
  59. package/lib/esm/common/Constants.js +46 -3
  60. package/lib/esm/common/contextDataStore/DataStoreManager.js +5 -0
  61. package/lib/esm/common/interfaces/IContextDataStore.js +1 -0
  62. package/lib/esm/common/telemetry/TelemetryConstants.js +51 -4
  63. package/lib/esm/common/telemetry/TelemetryHelper.js +13 -1
  64. package/lib/esm/common/telemetry/TelemetryManager.js +15 -6
  65. package/lib/esm/common/telemetry/defaultConfigs/defaultAriaConfig.js +1 -1
  66. package/lib/esm/common/telemetry/defaultConfigs/defaultTelemetryConfiguration.js +4 -1
  67. package/lib/esm/common/telemetry/loggers/ariaTelemetryLogger.js +36 -14
  68. package/lib/esm/common/telemetry/loggers/consoleLogger.js +6 -5
  69. package/lib/esm/common/utils.js +19 -1
  70. package/lib/esm/components/callingcontainerstateful/CallingContainerStateful.js +14 -0
  71. package/lib/esm/components/chatbuttonstateful/ChatButtonStateful.js +18 -7
  72. package/lib/esm/components/confirmationpanestateful/ConfirmationPaneStateful.js +8 -50
  73. package/lib/esm/components/emailtranscriptpanestateful/EmailTranscriptPaneStateful.js +2 -2
  74. package/lib/esm/components/footerstateful/FooterStateful.js +4 -5
  75. package/lib/esm/components/footerstateful/downloadtranscriptstateful/DownloadTranscriptStateful.js +9 -3
  76. package/lib/esm/components/headerstateful/HeaderStateful.js +12 -9
  77. package/lib/esm/components/livechatwidget/common/createMarkdown.js +3 -3
  78. package/lib/esm/components/livechatwidget/common/defaultProps/dummyDefaultProps.js +21 -23
  79. package/lib/esm/components/livechatwidget/common/endChat.js +111 -46
  80. package/lib/esm/components/livechatwidget/common/initCallingSdk.js +3 -0
  81. package/lib/esm/components/livechatwidget/common/initWebChatComposer.js +34 -11
  82. package/lib/esm/components/livechatwidget/common/reconnectChatHelper.js +94 -20
  83. package/lib/esm/components/livechatwidget/common/registerTelemetryLoggers.js +10 -4
  84. package/lib/esm/components/livechatwidget/common/setPostChatContextAndLoadSurvey.js +23 -22
  85. package/lib/esm/components/livechatwidget/common/startChat.js +146 -52
  86. package/lib/esm/components/livechatwidget/common/startProactiveChat.js +5 -5
  87. package/lib/esm/components/livechatwidget/livechatwidgetstateful/LiveChatWidgetStateful.js +212 -45
  88. package/lib/esm/components/loadingpanestateful/LoadingPaneStateful.js +1 -1
  89. package/lib/esm/components/ooohpanestateful/OOOHPaneStateful.js +6 -0
  90. package/lib/esm/components/postchatloadingpanestateful/PostChatLoadingPaneStateful.js +6 -0
  91. package/lib/esm/components/prechatsurveypanestateful/PreChatSurveyPaneStateful.js +25 -10
  92. package/lib/esm/components/proactivechatpanestateful/ProactiveChatPaneStateful.js +25 -5
  93. package/lib/esm/components/proactivechatpanestateful/interfaces/IProactiveChatNotificationConfig.js +1 -0
  94. package/lib/esm/components/webchatcontainerstateful/WebChatContainerStateful.js +72 -0
  95. package/lib/esm/components/webchatcontainerstateful/common/mockchatsdk.js +4 -0
  96. package/lib/esm/components/webchatcontainerstateful/common/utils/FileAttachmentIconManager.js +2 -12
  97. package/lib/esm/components/webchatcontainerstateful/interfaces/IBotMagicCodeConfig.js +1 -0
  98. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/BotMagicCodeStore.js +5 -0
  99. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityMiddleware.js +23 -46
  100. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachmentMiddleware.js +2 -1
  101. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/cardActionMiddleware.js +41 -0
  102. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/cardActionMiddleware.spec.js +94 -0
  103. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/messageTimestampMiddleware.js +107 -0
  104. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/conversationEndMiddleware.js +6 -6
  105. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/webchattelemetry/WebChatLogger.js +32 -0
  106. package/lib/esm/contexts/common/ConversationState.js +3 -2
  107. package/lib/esm/contexts/common/LiveChatWidgetActionType.js +12 -7
  108. package/lib/esm/contexts/common/LiveChatWidgetContextInitialState.js +11 -3
  109. package/lib/esm/contexts/createReducer.js +36 -9
  110. package/lib/esm/controller/componentController.js +3 -3
  111. package/lib/esm/plugins/newMessageEventHandler.js +82 -0
  112. package/lib/types/assets/Audios.d.ts +1 -0
  113. package/lib/types/assets/Icons.d.ts +11 -0
  114. package/lib/types/common/Constants.d.ts +25 -1
  115. package/lib/types/common/contextDataStore/DataStoreManager.d.ts +4 -0
  116. package/lib/types/common/interfaces/IContextDataStore.d.ts +14 -0
  117. package/lib/types/common/telemetry/TelemetryConstants.d.ts +39 -2
  118. package/lib/types/common/telemetry/TelemetryHelper.d.ts +2 -0
  119. package/lib/types/common/telemetry/definitions/Payload.d.ts +12 -9
  120. package/lib/types/common/telemetry/interfaces/ITelemetryConfig.d.ts +3 -3
  121. package/lib/types/common/utils.d.ts +3 -0
  122. package/lib/types/components/confirmationpanestateful/interfaces/IConfirmationPaneStatefulParams.d.ts +5 -2
  123. package/lib/types/components/footerstateful/audionotificationstateful/interfaces/IAudioNotificationStatefulParams.d.ts +0 -1
  124. package/lib/types/components/headerstateful/interfaces/IHeaderStatefulParams.d.ts +4 -1
  125. package/lib/types/components/livechatwidget/common/endChat.d.ts +4 -1
  126. package/lib/types/components/livechatwidget/common/reconnectChatHelper.d.ts +5 -2
  127. package/lib/types/components/livechatwidget/common/setPostChatContextAndLoadSurvey.d.ts +1 -1
  128. package/lib/types/components/livechatwidget/common/startChat.d.ts +1 -1
  129. package/lib/types/components/livechatwidget/common/startProactiveChat.d.ts +2 -1
  130. package/lib/types/components/livechatwidget/interfaces/ILiveChatWidgetComponentOverrides.d.ts +1 -0
  131. package/lib/types/components/livechatwidget/interfaces/ILiveChatWidgetProps.d.ts +2 -0
  132. package/lib/types/components/prechatsurveypanestateful/interfaces/IPreChatSurveyPaneStatefulParams.d.ts +1 -1
  133. package/lib/types/components/proactivechatpanestateful/interfaces/IProactiveChatNotificationConfig.d.ts +3 -0
  134. package/lib/types/components/reconnectchatpanestateful/interfaces/IReconnectChatPaneStatefulProps.d.ts +1 -0
  135. package/lib/types/components/webchatcontainerstateful/common/mockchatsdk.d.ts +1 -0
  136. package/lib/types/components/webchatcontainerstateful/common/utils/FileAttachmentIconManager.d.ts +1 -1
  137. package/lib/types/components/webchatcontainerstateful/interfaces/IBotMagicCodeConfig.d.ts +4 -0
  138. package/lib/types/components/webchatcontainerstateful/interfaces/IWebChatContainerStatefulProps.d.ts +2 -0
  139. package/lib/types/components/webchatcontainerstateful/webchatcontroller/BotMagicCodeStore.d.ts +3 -0
  140. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityMiddleware.d.ts +0 -1
  141. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/cardActionMiddleware.d.ts +2 -0
  142. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/cardActionMiddleware.spec.d.ts +1 -0
  143. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/messageTimestampMiddleware.d.ts +5 -0
  144. package/lib/types/components/webchatcontainerstateful/webchatcontroller/webchattelemetry/WebChatLogger.d.ts +1 -0
  145. package/lib/types/contexts/common/ConversationState.d.ts +3 -2
  146. package/lib/types/contexts/common/ILiveChatWidgetContext.d.ts +4 -0
  147. package/lib/types/contexts/common/LiveChatWidgetActionType.d.ts +13 -8
  148. package/lib/types/plugins/newMessageEventHandler.d.ts +2 -0
  149. package/package.json +11 -11
  150. package/lib/cjs/assets/audios/newMessageNotification.mp3 +0 -0
  151. package/lib/cjs/assets/icons/archiveIcon.svg +0 -3
  152. package/lib/cjs/assets/icons/audioIcon.svg +0 -6
  153. package/lib/cjs/assets/icons/blankIcon.svg +0 -6
  154. package/lib/cjs/assets/icons/excelIcon.svg +0 -6
  155. package/lib/cjs/assets/icons/imageIcon.svg +0 -6
  156. package/lib/cjs/assets/icons/oneNoteIcon.svg +0 -6
  157. package/lib/cjs/assets/icons/pdfIcon.svg +0 -6
  158. package/lib/cjs/assets/icons/powerpointIcon.svg +0 -6
  159. package/lib/cjs/assets/icons/videoIcon.svg +0 -6
  160. package/lib/cjs/assets/icons/visioIcon.svg +0 -6
  161. package/lib/cjs/assets/icons/wordIcon.svg +0 -6
  162. package/lib/esm/assets/assets.d.js +0 -0
  163. package/lib/esm/assets/audios/newMessageNotification.mp3 +0 -0
  164. package/lib/esm/assets/icons/archiveIcon.svg +0 -3
  165. package/lib/esm/assets/icons/audioIcon.svg +0 -6
  166. package/lib/esm/assets/icons/blankIcon.svg +0 -6
  167. package/lib/esm/assets/icons/excelIcon.svg +0 -6
  168. package/lib/esm/assets/icons/imageIcon.svg +0 -6
  169. package/lib/esm/assets/icons/oneNoteIcon.svg +0 -6
  170. package/lib/esm/assets/icons/pdfIcon.svg +0 -6
  171. package/lib/esm/assets/icons/powerpointIcon.svg +0 -6
  172. package/lib/esm/assets/icons/videoIcon.svg +0 -6
  173. package/lib/esm/assets/icons/visioIcon.svg +0 -6
  174. package/lib/esm/assets/icons/wordIcon.svg +0 -6
@@ -1,40 +1,30 @@
1
1
  import { LogLevel, TelemetryEvent } from "../../common/telemetry/TelemetryConstants";
2
+ import { ConfirmationPane } from "@microsoft/omnichannel-chat-components";
2
3
  import React, { useEffect } from "react";
3
4
  import { findAllFocusableElement, findParentFocusableElementsWithoutChildContainer, preventFocusToMoveOutOfElement, setFocusOnElement, setFocusOnSendBox, setTabIndices } from "../../common/utils";
4
- import { ConfirmationPane } from "@microsoft/omnichannel-chat-components";
5
- import { Constants } from "../../common/Constants";
6
- import { ConversationState } from "../../contexts/common/ConversationState";
7
5
  import { DimLayer } from "../dimlayer/DimLayer";
8
6
  import { LiveChatWidgetActionType } from "../../contexts/common/LiveChatWidgetActionType";
9
7
  import { NotificationHandler } from "../webchatcontainerstateful/webchatcontroller/notification/NotificationHandler";
10
8
  import { NotificationScenarios } from "../webchatcontainerstateful/webchatcontroller/enums/NotificationScenarios";
11
- import { PostChatSurveyMode } from "../postchatsurveypanestateful/enums/PostChatSurveyMode";
12
9
  import { TelemetryHelper } from "../../common/telemetry/TelemetryHelper";
13
10
  import useChatAdapterStore from "../../hooks/useChatAdapterStore";
14
- import useChatContextStore from "../../hooks/useChatContextStore";
15
- import useChatSDKStore from "../../hooks/useChatSDKStore"; // eslint-disable-next-line @typescript-eslint/no-explicit-any
11
+ import useChatContextStore from "../../hooks/useChatContextStore"; // eslint-disable-next-line @typescript-eslint/no-explicit-any
16
12
 
17
13
  export const ConfirmationPaneStateful = props => {
18
- var _state$domainStates$l, _state$domainStates$l2, _state$domainStates$l3, _state$domainStates$l4;
19
-
20
14
  const initialTabIndexMap = new Map();
21
15
  let elements = [];
22
16
  const [state, dispatch] = useChatContextStore();
23
17
  const {
24
- setPostChatContext,
25
- endChat
18
+ prepareEndChat
26
19
  } = props; // eslint-disable-next-line @typescript-eslint/no-explicit-any
27
-
28
- const chatSDK = useChatSDKStore(); // eslint-disable-next-line @typescript-eslint/no-explicit-any
20
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
29
21
 
30
22
  const [adapter] = useChatAdapterStore();
31
- const isPostChatEnabled = (_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_postconversationsurveyenable;
32
- const postChatSurveyMode = (_state$domainStates$l3 = state.domainStates.liveChatConfig) === null || _state$domainStates$l3 === void 0 ? void 0 : (_state$domainStates$l4 = _state$domainStates$l3.LiveWSAndLiveChatEngJoin) === null || _state$domainStates$l4 === void 0 ? void 0 : _state$domainStates$l4.msdyn_postconversationsurveymode;
33
23
  const controlProps = {
34
24
  id: "oc-lcw-confirmation-pane",
35
25
  dir: state.domainStates.globalDir,
36
26
  onConfirm: async () => {
37
- TelemetryHelper.logConfigDataEvent(LogLevel.INFO, {
27
+ TelemetryHelper.logActionEvent(LogLevel.INFO, {
38
28
  Event: TelemetryEvent.ConfirmationConfirmButtonClicked,
39
29
  Description: "Confirmation pane Confirm button clicked"
40
30
  });
@@ -44,40 +34,8 @@ export const ConfirmationPaneStateful = props => {
44
34
  });
45
35
 
46
36
  try {
47
- //ToDo: End Chat before PostChat Context and conversation Details is set once the getPostChatContext request ID fetch issue is fixed
48
- const conversationDetails = await chatSDK.getConversationDetails(); // ToDo: Replace with CanRenderPostChat once available in conversationDetails API response
49
-
50
- if (isPostChatEnabled === "true" && postChatSurveyMode === PostChatSurveyMode.Embed && conversationDetails.canRenderPostChat === Constants.truePascal) {
51
- dispatch({
52
- type: LiveChatWidgetActionType.SET_SHOULD_SHOW_POST_CHAT,
53
- payload: true
54
- });
55
- dispatch({
56
- type: LiveChatWidgetActionType.SET_CONVERSATION_STATE,
57
- payload: ConversationState.Loading
58
- });
59
- await setPostChatContext();
60
-
61
- if (state.domainStates.postChatContext) {
62
- dispatch({
63
- type: LiveChatWidgetActionType.SET_CONVERSATION_STATE,
64
- payload: ConversationState.Postchat
65
- });
66
- }
67
- } else {
68
- setTabIndices(elements, initialTabIndexMap, true);
69
-
70
- try {
71
- await endChat(adapter);
72
- } catch (error) {
73
- TelemetryHelper.logSDKEvent(LogLevel.ERROR, {
74
- Event: TelemetryEvent.CloseChatMethodException,
75
- ExceptionDetails: {
76
- exception: `Failed to endChat: ${error}`
77
- }
78
- });
79
- }
80
- }
37
+ setTabIndices(elements, initialTabIndexMap, true);
38
+ await prepareEndChat(adapter, state);
81
39
  } catch (ex) {
82
40
  TelemetryHelper.logSDKEvent(LogLevel.ERROR, {
83
41
  Event: TelemetryEvent.GetConversationDetailsCallFailed,
@@ -89,7 +47,7 @@ export const ConfirmationPaneStateful = props => {
89
47
  }
90
48
  },
91
49
  onCancel: () => {
92
- TelemetryHelper.logConfigDataEvent(LogLevel.INFO, {
50
+ TelemetryHelper.logActionEvent(LogLevel.INFO, {
93
51
  Event: TelemetryEvent.ConfirmationCancelButtonClicked,
94
52
  Description: "Confirmation pane Cancel button clicked."
95
53
  });
@@ -68,8 +68,8 @@ export const EmailTranscriptPaneStateful = props => {
68
68
  },
69
69
  onCancel: () => {
70
70
  TelemetryHelper.logActionEvent(LogLevel.INFO, {
71
- Event: TelemetryEvent.EmailTranscriptButtonClicked,
72
- Description: "Email Transcript button clicked."
71
+ Event: TelemetryEvent.EmailTranscriptCancelButtonClicked,
72
+ Description: "Email Transcript cancel button clicked."
73
73
  });
74
74
  closeEmailTranscriptPane();
75
75
  },
@@ -4,13 +4,13 @@ import AudioNotificationStateful from "./audionotificationstateful/AudioNotifica
4
4
  import { Constants } from "../../common/Constants";
5
5
  import { Footer } from "@microsoft/omnichannel-chat-components";
6
6
  import { LiveChatWidgetActionType } from "../../contexts/common/LiveChatWidgetActionType";
7
+ import { NewMessageNotificationSoundBase64 } from "../../assets/Audios";
7
8
  import { NotificationHandler } from "../webchatcontainerstateful/webchatcontroller/notification/NotificationHandler";
8
9
  import { NotificationScenarios } from "../webchatcontainerstateful/webchatcontroller/enums/NotificationScenarios";
9
10
  import { TelemetryHelper } from "../../common/telemetry/TelemetryHelper";
10
11
  import { downloadTranscript } from "./downloadtranscriptstateful/DownloadTranscriptStateful";
11
12
  import useChatContextStore from "../../hooks/useChatContextStore";
12
- import useChatSDKStore from "../../hooks/useChatSDKStore";
13
- import newMessageNotification from "../../assets/audios/newMessageNotification.mp3"; // eslint-disable-next-line @typescript-eslint/no-explicit-any
13
+ import useChatSDKStore from "../../hooks/useChatSDKStore"; // eslint-disable-next-line @typescript-eslint/no-explicit-any
14
14
 
15
15
  export const FooterStateful = props => {
16
16
  var _footerProps$controlP3, _footerProps$controlP4;
@@ -96,9 +96,8 @@ export const FooterStateful = props => {
96
96
  controlProps: controlProps,
97
97
  styleProps: footerProps === null || footerProps === void 0 ? void 0 : footerProps.styleProps
98
98
  }), /*#__PURE__*/React.createElement(AudioNotificationStateful, {
99
- audioSrc: (audioNotificationProps === null || audioNotificationProps === void 0 ? void 0 : audioNotificationProps.audioSrc) ?? newMessageNotification,
100
- hideAudioNotificationButton: (footerProps === null || footerProps === void 0 ? void 0 : (_footerProps$controlP4 = footerProps.controlProps) === null || _footerProps$controlP4 === void 0 ? void 0 : _footerProps$controlP4.hideAudioNotificationButton) ?? false,
101
- isAudioMuted: state.appStates.isAudioMuted ?? false
99
+ audioSrc: (audioNotificationProps === null || audioNotificationProps === void 0 ? void 0 : audioNotificationProps.audioSrc) ?? NewMessageNotificationSoundBase64,
100
+ isAudioMuted: state.appStates.isAudioMuted === null ? (footerProps === null || footerProps === void 0 ? void 0 : (_footerProps$controlP4 = footerProps.controlProps) === null || _footerProps$controlP4 === void 0 ? void 0 : _footerProps$controlP4.hideAudioNotificationButton) ?? false : state.appStates.isAudioMuted ?? false
102
101
  }));
103
102
  };
104
103
  export default FooterStateful;
@@ -105,8 +105,14 @@ const beautifyChatTranscripts = (chatTranscripts, renderMarkDown, attachmentMess
105
105
  let fileAttachmentName = TranscriptConstants.DefaultFileAttachmentName;
106
106
  let dialogColor = TranscriptConstants.CustomerDialogColor;
107
107
  let fontColor = TranscriptConstants.CustomerFontColor;
108
-
109
- if (value.tags && value.tags.toLowerCase().indexOf(Constants.systemMessageTag) !== -1 || value.isControlMessage && value.isControlMessage === true || value.contentType && value.contentType.toLowerCase() === TranscriptConstants.AdaptiveCardType || value.deliveryMode && value.deliveryMode.toLowerCase() === TranscriptConstants.InternalMode) {
108
+ const isSystemMessage = value.tags && value.tags.toLowerCase().indexOf(Constants.systemMessageTag) !== -1;
109
+ const isControlMessage = value.isControlMessage && value.isControlMessage === true;
110
+ const isAdaptiveCard = value.contentType && value.contentType.toLowerCase() === TranscriptConstants.AdaptiveCardType;
111
+ const isInternalMessage = value.deliveryMode && value.deliveryMode.toLowerCase() === TranscriptConstants.InternalMode;
112
+ const isHiddenMessage = value.tags && value.tags.toLowerCase().indexOf(Constants.hiddenTag.toLowerCase()) !== -1;
113
+ const shouldIgnoreMessage = isSystemMessage || isControlMessage || isAdaptiveCard || isInternalMessage || isHiddenMessage;
114
+
115
+ if (shouldIgnoreMessage) {
110
116
  return;
111
117
  } else if (value.from) {
112
118
  if (value.from.application) {
@@ -127,7 +133,7 @@ const beautifyChatTranscripts = (chatTranscripts, renderMarkDown, attachmentMess
127
133
 
128
134
  if (value.attachments && value.attachments.length > 0 && value.attachments[0].name) {
129
135
  fileAttachmentName = value.attachments[0].name;
130
- value.content = attachmentMessage ?? "The following attachment was uploaded during the conversation:" + fileAttachmentName;
136
+ value.content = attachmentMessage ? attachmentMessage + " " + fileAttachmentName : "The following attachment was uploaded during the conversation: " + fileAttachmentName;
131
137
  }
132
138
  }
133
139
 
@@ -1,5 +1,5 @@
1
1
  import { LogLevel, TelemetryEvent } from "../../common/telemetry/TelemetryConstants";
2
- import React, { useEffect, useState } from "react";
2
+ import React, { useEffect, useRef, useState } from "react";
3
3
  import { ConversationState } from "../../contexts/common/ConversationState";
4
4
  import { Header } from "@microsoft/omnichannel-chat-components";
5
5
  import { LiveChatWidgetActionType } from "../../contexts/common/LiveChatWidgetActionType";
@@ -21,6 +21,7 @@ export const HeaderStateful = props => {
21
21
 
22
22
  const [outOfOperatingHours, setOutOfOperatingHours] = useState(((_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");
23
23
  const outOfOfficeStyleProps = Object.assign({}, defaultOutOfOfficeHeaderStyleProps, outOfOfficeHeaderProps === null || outOfOfficeHeaderProps === void 0 ? void 0 : outOfOfficeHeaderProps.styleProps);
24
+ const conversationState = useRef(state.appStates.conversationState);
24
25
  const controlProps = {
25
26
  id: "oc-lcw-header",
26
27
  dir: state.domainStates.globalDir,
@@ -40,17 +41,15 @@ export const HeaderStateful = props => {
40
41
  Description: "Header Close button clicked."
41
42
  });
42
43
 
43
- if (state.appStates.conversationState === ConversationState.Active) {
44
+ if (conversationState.current === ConversationState.Active) {
44
45
  dispatch({
45
46
  type: LiveChatWidgetActionType.SET_SHOW_CONFIRMATION,
46
47
  payload: true
47
48
  });
48
- } else if (state.appStates.conversationState === ConversationState.Postchat) {
49
- dispatch({
50
- type: LiveChatWidgetActionType.SET_SHOULD_SHOW_POST_CHAT,
51
- payload: false
52
- });
53
- await endChat(adapter);
49
+ } else {
50
+ const skipEndChatSDK = true;
51
+ const skipCloseChat = false;
52
+ await endChat(adapter, skipEndChatSDK, skipCloseChat);
54
53
  }
55
54
 
56
55
  dispatch({
@@ -82,7 +81,11 @@ export const HeaderStateful = props => {
82
81
  if (state.appStates.outsideOperatingHours) {
83
82
  setOutOfOperatingHours(true);
84
83
  }
85
- }, []);
84
+
85
+ if (state.appStates.conversationState) {
86
+ conversationState.current = state.appStates.conversationState;
87
+ }
88
+ }, [state.appStates]);
86
89
  return /*#__PURE__*/React.createElement(Header, {
87
90
  componentOverrides: headerProps === null || headerProps === void 0 ? void 0 : headerProps.componentOverrides,
88
91
  controlProps: outOfOperatingHours || state.appStates.conversationState === ConversationState.OutOfOffice ? outOfOfficeControlProps : controlProps,
@@ -1,5 +1,4 @@
1
1
  import MarkdownIt from "markdown-it";
2
- import MarkdownSlack from "slack-markdown-it";
3
2
  import MarkdownItForInline from "markdown-it-for-inline";
4
3
  import { defaultMarkdownLocalizedTexts } from "../../webchatcontainerstateful/common/defaultProps/defaultMarkdownLocalizedTexts";
5
4
  import { Constants } from "../../../common/Constants"; // eslint-disable-next-line @typescript-eslint/no-explicit-any
@@ -12,8 +11,9 @@ export const createMarkdown = (disableMarkdownMessageFormatting, disableNewLineM
12
11
  html: true,
13
12
  linkify: true,
14
13
  breaks: !disableNewLineMarkdownSupport
15
- });
16
- markdown.use(MarkdownSlack); // Markdown override for open link in new tab
14
+ }); // ToDo: Commenting below usage of plugin until deferred bug is resolved: https://github.com/mayashavin/markdown-it-slack/issues/1
15
+ // markdown.use(MarkdownSlack);
16
+ // Markdown override for open link in new tab
17
17
  // eslint-disable-next-line @typescript-eslint/no-explicit-any, quotes
18
18
 
19
19
  markdown.use(MarkdownItForInline, "url_new_win", "link_open", function (tokens, idx, env) {
@@ -1,5 +1,7 @@
1
1
  /* eslint-disable @typescript-eslint/no-empty-function, @typescript-eslint/no-explicit-any */
2
+ import { ChatReconnectIconBase64, CloseChatButtonIconBase64, ModernChatIconBase64, ProactiveChatBannerBase64 } from "@microsoft/omnichannel-chat-components";
2
3
  import MockAdapter from "../../../webchatcontainerstateful/common/mockadapter";
4
+ import { NewMessageNotificationSoundBase64 } from "../../../../assets/Audios";
3
5
  import { WebChatStoreLoader } from "../../../webchatcontainerstateful/webchatcontroller/WebChatStoreLoader";
4
6
  import { activityStatusMiddleware } from "../../../webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityStatusMiddleware";
5
7
  import { createActivityMiddleware } from "../../../webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityMiddleware";
@@ -8,10 +10,11 @@ import { createAvatarMiddleware } from "../../../webchatcontainerstateful/webcha
8
10
  import { createMarkdown } from "../createMarkdown";
9
11
  import { groupActivitiesMiddleware } from "../../../webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/groupActivitiesMiddleware";
10
12
  import { typingIndicatorMiddleware } from "../../../webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/typingIndicatorMiddleware";
11
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
13
+ import { createWebChatTelemetry } from "../../../webchatcontainerstateful/webchatcontroller/webchattelemetry/WebChatLogger"; // eslint-disable-next-line @typescript-eslint/no-unused-vars
14
+
12
15
  export const dummyDefaultProps = {
13
16
  audioNotificationProps: {
14
- audioSrc: "assets/audios/newMessageNotification.mp3"
17
+ audioSrc: NewMessageNotificationSoundBase64
15
18
  },
16
19
  callingContainerProps: {
17
20
  controlProps: {
@@ -250,18 +253,6 @@ export const dummyDefaultProps = {
250
253
  width: "50px",
251
254
  fontSize: "18px"
252
255
  },
253
- currentCallTimerStyleProps: {
254
- borderRadius: "2px",
255
- margin: "1px",
256
- color: "#FFFFFF",
257
- paddingTop: "18px",
258
- fontSize: 12,
259
- fontFamily: "Segoe UI, Arial, sans-serif",
260
- backgroundColor: "darkgrey",
261
- height: "45px",
262
- width: "50px",
263
- textAlign: "center"
264
- },
265
256
  videoTileStyleProps: {
266
257
  width: "100%",
267
258
  marginLeft: "auto",
@@ -325,7 +316,9 @@ export const dummyDefaultProps = {
325
316
  hideChatTextContainer: false,
326
317
  hideChatSubtitle: false,
327
318
  hideChatTitle: false,
328
- hideNotificationBubble: true
319
+ hideNotificationBubble: true,
320
+ unreadMessageString: "new messages",
321
+ largeUnreadMessageString: "99+"
329
322
  },
330
323
  styleProps: {
331
324
  generalStyleProps: {
@@ -366,7 +359,7 @@ export const dummyDefaultProps = {
366
359
  margin: "-2px -2px -2px -3px",
367
360
  justifyContent: "center",
368
361
  backgroundSize: "65% 65%",
369
- backgroundImage: "assets/imgs/chat.svg",
362
+ backgroundImage: `url(${ModernChatIconBase64})`,
370
363
  display: "flex",
371
364
  backgroundRepeat: "no-repeat",
372
365
  backgroundPosition: "center"
@@ -887,7 +880,7 @@ export const dummyDefaultProps = {
887
880
  },
888
881
  headerIconProps: {
889
882
  id: "oc-lcw-header-icon",
890
- src: "assets/imgs/chatIcon.svg",
883
+ src: ModernChatIconBase64,
891
884
  alt: "Chat Icon",
892
885
  className: undefined
893
886
  },
@@ -1012,7 +1005,7 @@ export const dummyDefaultProps = {
1012
1005
  alignSelf: "auto"
1013
1006
  },
1014
1007
  iconImageProps: {
1015
- src: "assets/imgs/chat.svg",
1008
+ src: "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDAiIGhlaWdodD0iNDAiIHZpZXdCb3g9IjAgMCA0MCA0MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4NCjxnIGZpbHRlcj0idXJsKCNmaWx0ZXIwX2lpKSI+DQo8cGF0aCBkPSJNMTUuMTk3MSAxNi4yNzI1VjI1Ljg1MjRDMTUuMTk3MSAyNy4zODExIDE1Ljg0MDEgMjcuNTIwMSAxNi45ODMyIDI3LjUyMDFMMjYuNzA4NCAyNy41NjQ5TDMxLjAwMzkgMzIuMzEyM1YyNy41NjQ5SDMxLjg5N0MzMi4xNzQzIDI3LjU2MzcgMzIuNDQ4NyAyNy41MDc3IDMyLjcwNDUgMjcuNDAwMUMzMi45NjAzIDI3LjI5MjQgMzMuMTkyNSAyNy4xMzUzIDMzLjM4NzggMjYuOTM3NUMzMy41ODMxIDI2LjczOTggMzMuNzM3NyAyNi41MDU0IDMzLjg0MjcgMjYuMjQ3N0MzMy45NDc4IDI1Ljk5IDM0LjAwMTMgMjUuNzE0IDM0LjAwMDEgMjUuNDM1NVYxNi4zMDM4QzM0LjAwMTMgMTYuMDI1NCAzMy45NDc4IDE1Ljc0OTQgMzMuODQyNyAxNS40OTE3QzMzLjczNzcgMTUuMjM0IDMzLjU4MzEgMTQuOTk5NiAzMy4zODc4IDE0LjgwMThDMzMuMTkyNSAxNC42MDQxIDMyLjk2MDMgMTQuNDQ2OSAzMi43MDQ1IDE0LjMzOTNDMzIuNDQ4NyAxNC4yMzE2IDMyLjE3NDMgMTQuMTc1NiAzMS44OTcgMTQuMTc0NEwxNy4zMDQ3IDE0LjE0MzFDMTcuMDI2OSAxNC4xNDM3IDE2Ljc1MiAxNC4xOTkyIDE2LjQ5NTcgMTQuMzA2NkMxNi4yMzk0IDE0LjQxNCAxNi4wMDY3IDE0LjU3MTEgMTUuODEwOSAxNC43Njg5QzE1LjYxNTIgMTQuOTY2NyAxNS40NjAyIDE1LjIwMTMgMTUuMzU0OCAxNS40NTkzQzE1LjI0OTUgMTUuNzE3MyAxNS4xOTU5IDE1Ljk5MzYgMTUuMTk3MSAxNi4yNzI1WiIgZmlsbD0iI0Q2RDZENiIvPg0KPC9nPg0KPGcgZmlsdGVyPSJ1cmwoI2ZpbHRlcjFfZGlpKSI+DQo8cGF0aCBkPSJNMjcuODczNSA2LjY5ODg3VjE4Ljg0MDlDMjcuODczNSAyMC43Nzg1IDI3LjA1NzIgMjAuOTU0NiAyNS42MDU4IDIwLjk1NDZMMTMuMjU4IDIxLjAxMTRMNy44MDQxNCAyNy4wMjg1VjIxLjAxMTRINi42NzAyN0M2LjMxODEyIDIxLjAwOTkgNS45Njk3MSAyMC45Mzg5IDUuNjQ0OTMgMjAuODAyNUM1LjMyMDE2IDIwLjY2NjEgNS4wMjUzOCAyMC40NjY4IDQuNzc3NDIgMjAuMjE2MkM0LjUyOTQ2IDE5Ljk2NTYgNC4zMzMxOSAxOS42Njg1IDQuMTk5OCAxOS4zNDE5QzQuMDY2NDIgMTkuMDE1MiAzLjk5ODUzIDE4LjY2NTUgNC4wMDAwMiAxOC4zMTI1VjYuNzM4NjRDMy45OTg1MyA2LjM4NTcxIDQuMDY2NDIgNi4wMzU5NSA0LjE5OTggNS43MDkzMUM0LjMzMzE5IDUuMzgyNjcgNC41Mjk0NiA1LjA4NTU3IDQuNzc3NDIgNC44MzQ5NUM1LjAyNTM4IDQuNTg0MzQgNS4zMjAxNiA0LjM4NTEzIDUuNjQ0OTMgNC4yNDg2OUM1Ljk2OTcxIDQuMTEyMjUgNi4zMTgxMiA0LjA0MTI2IDYuNjcwMjcgNC4wMzk3N0wyNS4xOTc2IDRDMjUuNTUwMiA0LjAwMDc0IDI1Ljg5OTMgNC4wNzExOCAyNi4yMjQ3IDQuMjA3MjlDMjYuNTUwMSA0LjM0MzM5IDI2Ljg0NTYgNC41NDI0OSAyNy4wOTQxIDQuNzkzMThDMjcuMzQyNyA1LjA0Mzg2IDI3LjUzOTUgNS4zNDEyMiAyNy42NzMyIDUuNjY4MjNDMjcuODA3IDUuOTk1MjMgMjcuODc1IDYuMzQ1NDYgMjcuODczNSA2LjY5ODg3WiIgZmlsbD0idXJsKCNwYWludDBfbGluZWFyKSIvPg0KPC9nPg0KPGRlZnM+DQo8ZmlsdGVyIGlkPSJmaWx0ZXIwX2lpIiB4PSIxNS4xOTcxIiB5PSIxNC4xNDMxIiB3aWR0aD0iMTguODAzMSIgaGVpZ2h0PSIxOC4xNjkzIiBmaWx0ZXJVbml0cz0idXNlclNwYWNlT25Vc2UiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+DQo8ZmVGbG9vZCBmbG9vZC1vcGFjaXR5PSIwIiByZXN1bHQ9IkJhY2tncm91bmRJbWFnZUZpeCIvPg0KPGZlQmxlbmQgbW9kZT0ibm9ybWFsIiBpbj0iU291cmNlR3JhcGhpYyIgaW4yPSJCYWNrZ3JvdW5kSW1hZ2VGaXgiIHJlc3VsdD0ic2hhcGUiLz4NCjxmZUNvbG9yTWF0cml4IGluPSJTb3VyY2VBbHBoYSIgdHlwZT0ibWF0cml4IiB2YWx1ZXM9IjAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDEyNyAwIiByZXN1bHQ9ImhhcmRBbHBoYSIvPg0KPGZlT2Zmc2V0IGR4PSItMC4yIiBkeT0iLTAuMiIvPg0KPGZlQ29tcG9zaXRlIGluMj0iaGFyZEFscGhhIiBvcGVyYXRvcj0iYXJpdGhtZXRpYyIgazI9Ii0xIiBrMz0iMSIvPg0KPGZlQ29sb3JNYXRyaXggdHlwZT0ibWF0cml4IiB2YWx1ZXM9IjAgMCAwIDAgMSAwIDAgMCAwIDEgMCAwIDAgMCAxIDAgMCAwIDAuMTcgMCIvPg0KPGZlQmxlbmQgbW9kZT0ibm9ybWFsIiBpbjI9InNoYXBlIiByZXN1bHQ9ImVmZmVjdDFfaW5uZXJTaGFkb3ciLz4NCjxmZUNvbG9yTWF0cml4IGluPSJTb3VyY2VBbHBoYSIgdHlwZT0ibWF0cml4IiB2YWx1ZXM9IjAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDEyNyAwIiByZXN1bHQ9ImhhcmRBbHBoYSIvPg0KPGZlT2Zmc2V0IGR4PSItMC41IiBkeT0iLTAuNSIvPg0KPGZlQ29tcG9zaXRlIGluMj0iaGFyZEFscGhhIiBvcGVyYXRvcj0iYXJpdGhtZXRpYyIgazI9Ii0xIiBrMz0iMSIvPg0KPGZlQ29sb3JNYXRyaXggdHlwZT0ibWF0cml4IiB2YWx1ZXM9IjAgMCAwIDAgMSAwIDAgMCAwIDEgMCAwIDAgMCAxIDAgMCAwIDAuMTYgMCIvPg0KPGZlQmxlbmQgbW9kZT0ibm9ybWFsIiBpbjI9ImVmZmVjdDFfaW5uZXJTaGFkb3ciIHJlc3VsdD0iZWZmZWN0Ml9pbm5lclNoYWRvdyIvPg0KPC9maWx0ZXI+DQo8ZmlsdGVyIGlkPSJmaWx0ZXIxX2RpaSIgeD0iMCIgeT0iMCIgd2lkdGg9IjM5Ljg3MzYiIGhlaWdodD0iMzkuMDI4NSIgZmlsdGVyVW5pdHM9InVzZXJTcGFjZU9uVXNlIiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiPg0KPGZlRmxvb2QgZmxvb2Qtb3BhY2l0eT0iMCIgcmVzdWx0PSJCYWNrZ3JvdW5kSW1hZ2VGaXgiLz4NCjxmZUNvbG9yTWF0cml4IGluPSJTb3VyY2VBbHBoYSIgdHlwZT0ibWF0cml4IiB2YWx1ZXM9IjAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDEyNyAwIi8+DQo8ZmVPZmZzZXQgZHg9IjQiIGR5PSI0Ii8+DQo8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSI0Ii8+DQo8ZmVDb2xvck1hdHJpeCB0eXBlPSJtYXRyaXgiIHZhbHVlcz0iMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMC4yNSAwIi8+DQo8ZmVCbGVuZCBtb2RlPSJub3JtYWwiIGluMj0iQmFja2dyb3VuZEltYWdlRml4IiByZXN1bHQ9ImVmZmVjdDFfZHJvcFNoYWRvdyIvPg0KPGZlQmxlbmQgbW9kZT0ibm9ybWFsIiBpbj0iU291cmNlR3JhcGhpYyIgaW4yPSJlZmZlY3QxX2Ryb3BTaGFkb3ciIHJlc3VsdD0ic2hhcGUiLz4NCjxmZUNvbG9yTWF0cml4IGluPSJTb3VyY2VBbHBoYSIgdHlwZT0ibWF0cml4IiB2YWx1ZXM9IjAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDEyNyAwIiByZXN1bHQ9ImhhcmRBbHBoYSIvPg0KPGZlT2Zmc2V0IGR4PSItMiIgZHk9Ii0yIi8+DQo8ZmVDb21wb3NpdGUgaW4yPSJoYXJkQWxwaGEiIG9wZXJhdG9yPSJhcml0aG1ldGljIiBrMj0iLTEiIGszPSIxIi8+DQo8ZmVDb2xvck1hdHJpeCB0eXBlPSJtYXRyaXgiIHZhbHVlcz0iMCAwIDAgMCAxIDAgMCAwIDAgMSAwIDAgMCAwIDEgMCAwIDAgMC4xNyAwIi8+DQo8ZmVCbGVuZCBtb2RlPSJub3JtYWwiIGluMj0ic2hhcGUiIHJlc3VsdD0iZWZmZWN0Ml9pbm5lclNoYWRvdyIvPg0KPGZlQ29sb3JNYXRyaXggaW49IlNvdXJjZUFscGhhIiB0eXBlPSJtYXRyaXgiIHZhbHVlcz0iMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMTI3IDAiIHJlc3VsdD0iaGFyZEFscGhhIi8+DQo8ZmVPZmZzZXQgZHg9Ii0xIiBkeT0iLTEiLz4NCjxmZUNvbXBvc2l0ZSBpbjI9ImhhcmRBbHBoYSIgb3BlcmF0b3I9ImFyaXRobWV0aWMiIGsyPSItMSIgazM9IjEiLz4NCjxmZUNvbG9yTWF0cml4IHR5cGU9Im1hdHJpeCIgdmFsdWVzPSIwIDAgMCAwIDEgMCAwIDAgMCAxIDAgMCAwIDAgMSAwIDAgMCAwLjE2IDAiLz4NCjxmZUJsZW5kIG1vZGU9Im5vcm1hbCIgaW4yPSJlZmZlY3QyX2lubmVyU2hhZG93IiByZXN1bHQ9ImVmZmVjdDNfaW5uZXJTaGFkb3ciLz4NCjwvZmlsdGVyPg0KPGxpbmVhckdyYWRpZW50IGlkPSJwYWludDBfbGluZWFyIiB4MT0iLTAuMzk1MDAxIiB5MT0iMjMuMTI4MiIgeDI9IjIwLjEwNTgiIHkyPSIzNy44NDc0IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+DQo8c3RvcCBzdG9wLWNvbG9yPSIjRUZFRkVGIi8+DQo8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IndoaXRlIi8+DQo8L2xpbmVhckdyYWRpZW50Pg0KPC9kZWZzPg0KPC9zdmc+DQo=",
1016
1009
  imageFit: 0,
1017
1010
  width: "86px",
1018
1011
  height: "86px",
@@ -1220,7 +1213,7 @@ export const dummyDefaultProps = {
1220
1213
  },
1221
1214
  headerContainerStyleProps: {
1222
1215
  backgroundColor: "rgb(49, 95, 162)",
1223
- backgroundImage: "assets/imgs/Proactive_banner.png",
1216
+ backgroundImage: `url(${ProactiveChatBannerBase64})`,
1224
1217
  backgroundPosition: "initial",
1225
1218
  backgroundRepeat: "no-repeat",
1226
1219
  borderTopLeftRadius: "inherit",
@@ -1248,7 +1241,7 @@ export const dummyDefaultProps = {
1248
1241
  fontWeight: "600"
1249
1242
  },
1250
1243
  closeButtonStyleProps: {
1251
- backgroundImage: "assets/imgs/closeChatButton.svg",
1244
+ backgroundImage: `url(${CloseChatButtonIconBase64})`,
1252
1245
  backgroundPosition: "center",
1253
1246
  backgroundRepeat: "no-repeat",
1254
1247
  color: "#605e5c",
@@ -1371,7 +1364,7 @@ export const dummyDefaultProps = {
1371
1364
  lineHeight: "19px"
1372
1365
  },
1373
1366
  iconStyleProps: {
1374
- backgroundImage: "assets/imgs//ChatReconnectPopupIcon.png",
1367
+ backgroundImage: `url(${ChatReconnectIconBase64})`,
1375
1368
  backgroundPosition: "center",
1376
1369
  backgroundRepeat: "no-repeat",
1377
1370
  backgroundSize: "200px",
@@ -1422,7 +1415,8 @@ export const dummyDefaultProps = {
1422
1415
  },
1423
1416
  authClientFunction: undefined,
1424
1417
  isReconnectEnabled: undefined,
1425
- reconnectId: undefined
1418
+ reconnectId: undefined,
1419
+ redirectInSameWindow: undefined
1426
1420
  },
1427
1421
  styleProps: {
1428
1422
  generalStyles: {
@@ -1494,7 +1488,7 @@ export const dummyDefaultProps = {
1494
1488
  internalErrorBoxClass: undefined,
1495
1489
  internalRenderErrorBox: undefined,
1496
1490
  locale: "en-US",
1497
- onTelemetry: undefined,
1491
+ onTelemetry: createWebChatTelemetry(),
1498
1492
  overrideLocalizedStrings: undefined,
1499
1493
  renderMarkdown: createMarkdown(false, false),
1500
1494
  scrollToEndButtonMiddleware: undefined,
@@ -1684,6 +1678,10 @@ export const dummyDefaultProps = {
1684
1678
  MIDDLEWARE_MESSAGE_RETRY: "Retry",
1685
1679
  PRECHAT_REQUIRED_FIELD_MISSING_MESSAGE: "{0} field is required",
1686
1680
  MARKDOWN_EXTERNAL_LINK_ALT: "Opens in a new window; external."
1681
+ },
1682
+ botMagicCode: {
1683
+ disabled: false,
1684
+ fwdUrl: ""
1687
1685
  }
1688
1686
  },
1689
1687
  telemetryConfig: undefined
@@ -1,53 +1,118 @@
1
- import { LogLevel, TelemetryEvent } from "../../../common/telemetry/TelemetryConstants";
1
+ import { BroadcastEvent, LogLevel, TelemetryEvent } from "../../../common/telemetry/TelemetryConstants";
2
+ import { BroadcastService } from "@microsoft/omnichannel-chat-components";
2
3
  import { ConversationState } from "../../../contexts/common/ConversationState";
3
4
  import { LiveChatWidgetActionType } from "../../../contexts/common/LiveChatWidgetActionType";
4
- import { NotificationHandler } from "../../webchatcontainerstateful/webchatcontroller/notification/NotificationHandler";
5
- import { NotificationScenarios } from "../../webchatcontainerstateful/webchatcontroller/enums/NotificationScenarios";
6
5
  import { TelemetryHelper } from "../../../common/telemetry/TelemetryHelper";
7
6
  import { WebChatStoreLoader } from "../../webchatcontainerstateful/webchatcontroller/WebChatStoreLoader";
8
7
  import { defaultWebChatContainerStatefulProps } from "../../webchatcontainerstateful/common/defaultProps/defaultWebChatContainerStatefulProps";
9
- import { BroadcastService } from "@microsoft/omnichannel-chat-components"; // eslint-disable-next-line @typescript-eslint/no-explicit-any
10
-
11
- export const endChat = async (props, chatSDK, setAdapter, setWebChatStyles, dispatch, adapter) => {
12
- try {
13
- var _props$webChatContain;
14
-
15
- TelemetryHelper.logConfigDataEvent(LogLevel.INFO, {
16
- Event: TelemetryEvent.EndChatSDKCall
17
- });
18
- await (chatSDK === null || chatSDK === void 0 ? void 0 : chatSDK.endChat());
19
- adapter === null || adapter === void 0 ? void 0 : adapter.end();
20
- setAdapter(undefined);
21
- setWebChatStyles({ ...defaultWebChatContainerStatefulProps.webChatStyles,
22
- ...((_props$webChatContain = props.webChatContainerProps) === null || _props$webChatContain === void 0 ? void 0 : _props$webChatContain.webChatStyles)
23
- });
24
- WebChatStoreLoader.store = null;
25
- dispatch({
26
- type: LiveChatWidgetActionType.SET_CONVERSATION_STATE,
27
- payload: ConversationState.Closed
28
- });
29
- dispatch({
30
- type: LiveChatWidgetActionType.SET_RECONNECT_ID,
31
- payload: undefined
32
- });
33
- dispatch({
34
- type: LiveChatWidgetActionType.SET_AUDIO_NOTIFICATION,
35
- payload: null
36
- });
37
- dispatch({
38
- type: LiveChatWidgetActionType.SET_CHAT_TOKEN,
39
- payload: undefined
40
- });
41
- BroadcastService.postMessage({
42
- eventName: "EndChat"
43
- });
44
- } catch (ex) {
45
- TelemetryHelper.logSDKEvent(LogLevel.ERROR, {
46
- Event: TelemetryEvent.EndChatSDKCallFailed,
47
- ExceptionDetails: {
48
- exception: ex
8
+ import { PostChatSurveyMode } from "../../postchatsurveypanestateful/enums/PostChatSurveyMode";
9
+ import { Constants } from "../../../common/Constants";
10
+ import { getWidgetEndChatEventName } from "../../../common/utils"; // eslint-disable-next-line @typescript-eslint/no-explicit-any
11
+
12
+ const prepareEndChat = async (props, chatSDK, setAdapter, setWebChatStyles, dispatch, adapter, state) => {
13
+ var _state$domainStates$l, _state$domainStates$l2, _state$domainStates$l3, _state$domainStates$l4;
14
+
15
+ const isPostChatEnabled = (_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_postconversationsurveyenable;
16
+ const postChatSurveyMode = (_state$domainStates$l3 = state.domainStates.liveChatConfig) === null || _state$domainStates$l3 === void 0 ? void 0 : (_state$domainStates$l4 = _state$domainStates$l3.LiveWSAndLiveChatEngJoin) === null || _state$domainStates$l4 === void 0 ? void 0 : _state$domainStates$l4.msdyn_postconversationsurveymode;
17
+ const conversationDetails = await chatSDK.getConversationDetails();
18
+
19
+ if (isPostChatEnabled === "true" && (conversationDetails === null || conversationDetails === void 0 ? void 0 : conversationDetails.canRenderPostChat) === Constants.truePascal) {
20
+ const skipEndChatSDK = false;
21
+ const skipCloseChat = true;
22
+ await endChat(props, chatSDK, setAdapter, setWebChatStyles, dispatch, adapter, skipEndChatSDK, skipCloseChat, true);
23
+
24
+ if (postChatSurveyMode === PostChatSurveyMode.Embed) {
25
+ const loadPostChatEvent = {
26
+ eventName: BroadcastEvent.LoadPostChatSurvey
27
+ };
28
+ BroadcastService.postMessage(loadPostChatEvent);
29
+ } else if (postChatSurveyMode === PostChatSurveyMode.Link) {
30
+ dispatch({
31
+ type: LiveChatWidgetActionType.SET_CONVERSATION_STATE,
32
+ payload: ConversationState.InActive
33
+ });
34
+ }
35
+ } else {
36
+ await endChat(props, chatSDK, setAdapter, setWebChatStyles, dispatch, adapter, false, false, true);
37
+ }
38
+ }; // eslint-disable-next-line @typescript-eslint/no-explicit-any
39
+
40
+
41
+ const endChat = async (props, chatSDK, setAdapter, setWebChatStyles, dispatch, adapter, skipEndChatSDK, skipCloseChat, postMessageToOtherTab) => {
42
+ if (!skipEndChatSDK) {
43
+ try {
44
+ TelemetryHelper.logSDKEvent(LogLevel.INFO, {
45
+ Event: TelemetryEvent.EndChatSDKCall
46
+ });
47
+ await (chatSDK === null || chatSDK === void 0 ? void 0 : chatSDK.endChat()); // Need to clear these states immediately when chat ended from OC.
48
+
49
+ dispatch({
50
+ type: LiveChatWidgetActionType.SET_CHAT_TOKEN,
51
+ payload: undefined
52
+ });
53
+ dispatch({
54
+ type: LiveChatWidgetActionType.SET_LIVE_CHAT_CONTEXT,
55
+ payload: undefined
56
+ });
57
+ } catch (ex) {
58
+ TelemetryHelper.logSDKEvent(LogLevel.ERROR, {
59
+ Event: TelemetryEvent.EndChatSDKCallFailed,
60
+ ExceptionDetails: {
61
+ exception: ex
62
+ }
63
+ });
64
+ postMessageToOtherTab = false;
65
+ }
66
+ }
67
+
68
+ if (!skipCloseChat) {
69
+ try {
70
+ var _props$webChatContain;
71
+
72
+ adapter === null || adapter === void 0 ? void 0 : adapter.end();
73
+ setAdapter(undefined);
74
+ setWebChatStyles({ ...defaultWebChatContainerStatefulProps.webChatStyles,
75
+ ...((_props$webChatContain = props.webChatContainerProps) === null || _props$webChatContain === void 0 ? void 0 : _props$webChatContain.webChatStyles)
76
+ });
77
+ WebChatStoreLoader.store = null;
78
+ dispatch({
79
+ type: LiveChatWidgetActionType.SET_CONVERSATION_STATE,
80
+ payload: ConversationState.Closed
81
+ });
82
+ dispatch({
83
+ type: LiveChatWidgetActionType.SET_CONVERSATION_ENDED_BY_AGENT,
84
+ payload: false
85
+ });
86
+ dispatch({
87
+ type: LiveChatWidgetActionType.SET_RECONNECT_ID,
88
+ payload: undefined
89
+ });
90
+ dispatch({
91
+ type: LiveChatWidgetActionType.SET_AUDIO_NOTIFICATION,
92
+ payload: null
93
+ });
94
+ dispatch({
95
+ type: LiveChatWidgetActionType.SET_UNREAD_MESSAGE_COUNT,
96
+ payload: 0
97
+ });
98
+
99
+ if (postMessageToOtherTab) {
100
+ var _chatSDK$omnichannelC, _chatSDK$omnichannelC2;
101
+
102
+ const endChatEventName = getWidgetEndChatEventName(chatSDK === null || chatSDK === void 0 ? void 0 : (_chatSDK$omnichannelC = chatSDK.omnichannelConfig) === null || _chatSDK$omnichannelC === void 0 ? void 0 : _chatSDK$omnichannelC.orgId, chatSDK === null || chatSDK === void 0 ? void 0 : (_chatSDK$omnichannelC2 = chatSDK.omnichannelConfig) === null || _chatSDK$omnichannelC2 === void 0 ? void 0 : _chatSDK$omnichannelC2.widgetId);
103
+ BroadcastService.postMessage({
104
+ eventName: endChatEventName
105
+ });
49
106
  }
50
- });
51
- NotificationHandler.notifyError(NotificationScenarios.Connection, "End Chat Call Failed: " + ex);
107
+ } catch (error) {
108
+ TelemetryHelper.logActionEvent(LogLevel.ERROR, {
109
+ Event: TelemetryEvent.CloseChatMethodException,
110
+ ExceptionDetails: {
111
+ exception: `Failed to endChat: ${error}`
112
+ }
113
+ });
114
+ }
52
115
  }
53
- };
116
+ };
117
+
118
+ export { prepareEndChat, endChat };
@@ -8,6 +8,9 @@ export const initCallingSdk = async (chatSDK, setVoiceVideoCallingSDK) => {
8
8
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
9
9
  const callingSDK = await chatSDK.getVoiceVideoCalling();
10
10
  setVoiceVideoCallingSDK(callingSDK);
11
+ TelemetryHelper.logCallingEvent(LogLevel.INFO, {
12
+ Event: TelemetryEvent.CallingSDKLoadSuccess
13
+ });
11
14
  return true;
12
15
  }
13
16