@microsoft/omnichannel-chat-widget 0.1.0-main.8b6c0d8 → 0.1.0-main.8e79cb8

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 (163) hide show
  1. package/README.md +227 -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 +38 -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 +42 -3
  8. package/lib/cjs/common/telemetry/TelemetryHelper.js +22 -4
  9. package/lib/cjs/common/telemetry/TelemetryManager.js +28 -9
  10. package/lib/cjs/common/telemetry/defaultConfigs/defaultAriaConfig.js +3 -3
  11. package/lib/cjs/common/telemetry/defaultConfigs/defaultTelemetryConfiguration.js +4 -1
  12. package/lib/cjs/common/telemetry/loggers/ariaTelemetryLogger.js +48 -15
  13. package/lib/cjs/common/telemetry/loggers/consoleLogger.js +9 -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 +9 -2
  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 +1 -1
  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 +42 -46
  24. package/lib/cjs/components/livechatwidget/common/disposeTelemetryLoggers.js +14 -0
  25. package/lib/cjs/components/livechatwidget/common/endChat.js +116 -49
  26. package/lib/cjs/components/livechatwidget/common/initCallingSdk.js +5 -0
  27. package/lib/cjs/components/livechatwidget/common/initWebChatComposer.js +33 -9
  28. package/lib/cjs/components/livechatwidget/common/reconnectChatHelper.js +105 -20
  29. package/lib/cjs/components/livechatwidget/common/registerTelemetryLoggers.js +11 -7
  30. package/lib/cjs/components/livechatwidget/common/setPostChatContextAndLoadSurvey.js +26 -24
  31. package/lib/cjs/components/livechatwidget/common/startChat.js +151 -53
  32. package/lib/cjs/components/livechatwidget/common/startProactiveChat.js +3 -3
  33. package/lib/cjs/components/livechatwidget/livechatwidgetstateful/LiveChatWidgetStateful.js +131 -32
  34. package/lib/cjs/components/loadingpanestateful/LoadingPaneStateful.js +1 -1
  35. package/lib/cjs/components/ooohpanestateful/OOOHPaneStateful.js +8 -0
  36. package/lib/cjs/components/postchatloadingpanestateful/PostChatLoadingPaneStateful.js +8 -0
  37. package/lib/cjs/components/prechatsurveypanestateful/PreChatSurveyPaneStateful.js +26 -10
  38. package/lib/cjs/components/proactivechatpanestateful/ProactiveChatPaneStateful.js +10 -4
  39. package/lib/cjs/components/proactivechatpanestateful/interfaces/IProactiveChatNotificationConfig.js +1 -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/webchatcontroller/middlewares/renderingmiddlewares/activityMiddleware.js +9 -46
  43. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachmentMiddleware.js +3 -1
  44. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/conversationEndMiddleware.js +6 -6
  45. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/webchattelemetry/WebChatLogger.js +45 -0
  46. package/lib/cjs/contexts/common/ConversationState.js +3 -2
  47. package/lib/cjs/contexts/common/LiveChatWidgetActionType.js +11 -7
  48. package/lib/cjs/contexts/common/LiveChatWidgetContextInitialState.js +12 -4
  49. package/lib/cjs/contexts/createReducer.js +35 -10
  50. package/lib/cjs/controller/componentController.js +2 -2
  51. package/lib/cjs/plugins/newMessageEventHandler.js +99 -0
  52. package/lib/esm/assets/Audios.js +1 -0
  53. package/lib/esm/assets/Icons.js +11 -0
  54. package/lib/esm/common/Constants.js +34 -3
  55. package/lib/esm/common/contextDataStore/DataStoreManager.js +5 -0
  56. package/lib/esm/common/interfaces/IContextDataStore.js +1 -0
  57. package/lib/esm/common/telemetry/TelemetryConstants.js +38 -2
  58. package/lib/esm/common/telemetry/TelemetryHelper.js +22 -5
  59. package/lib/esm/common/telemetry/TelemetryManager.js +22 -9
  60. package/lib/esm/common/telemetry/defaultConfigs/defaultAriaConfig.js +3 -3
  61. package/lib/esm/common/telemetry/defaultConfigs/defaultTelemetryConfiguration.js +4 -1
  62. package/lib/esm/common/telemetry/loggers/ariaTelemetryLogger.js +50 -15
  63. package/lib/esm/common/telemetry/loggers/consoleLogger.js +9 -5
  64. package/lib/esm/common/utils.js +19 -1
  65. package/lib/esm/components/callingcontainerstateful/CallingContainerStateful.js +14 -0
  66. package/lib/esm/components/chatbuttonstateful/ChatButtonStateful.js +10 -2
  67. package/lib/esm/components/confirmationpanestateful/ConfirmationPaneStateful.js +8 -50
  68. package/lib/esm/components/emailtranscriptpanestateful/EmailTranscriptPaneStateful.js +2 -2
  69. package/lib/esm/components/footerstateful/FooterStateful.js +4 -5
  70. package/lib/esm/components/footerstateful/downloadtranscriptstateful/DownloadTranscriptStateful.js +1 -1
  71. package/lib/esm/components/headerstateful/HeaderStateful.js +12 -9
  72. package/lib/esm/components/livechatwidget/common/createMarkdown.js +3 -3
  73. package/lib/esm/components/livechatwidget/common/defaultProps/dummyDefaultProps.js +40 -47
  74. package/lib/esm/components/livechatwidget/common/disposeTelemetryLoggers.js +4 -0
  75. package/lib/esm/components/livechatwidget/common/endChat.js +110 -46
  76. package/lib/esm/components/livechatwidget/common/initCallingSdk.js +3 -0
  77. package/lib/esm/components/livechatwidget/common/initWebChatComposer.js +29 -9
  78. package/lib/esm/components/livechatwidget/common/reconnectChatHelper.js +94 -20
  79. package/lib/esm/components/livechatwidget/common/registerTelemetryLoggers.js +10 -3
  80. package/lib/esm/components/livechatwidget/common/setPostChatContextAndLoadSurvey.js +23 -22
  81. package/lib/esm/components/livechatwidget/common/startChat.js +146 -52
  82. package/lib/esm/components/livechatwidget/common/startProactiveChat.js +5 -5
  83. package/lib/esm/components/livechatwidget/livechatwidgetstateful/LiveChatWidgetStateful.js +122 -35
  84. package/lib/esm/components/loadingpanestateful/LoadingPaneStateful.js +1 -1
  85. package/lib/esm/components/ooohpanestateful/OOOHPaneStateful.js +6 -0
  86. package/lib/esm/components/postchatloadingpanestateful/PostChatLoadingPaneStateful.js +6 -0
  87. package/lib/esm/components/prechatsurveypanestateful/PreChatSurveyPaneStateful.js +25 -10
  88. package/lib/esm/components/proactivechatpanestateful/ProactiveChatPaneStateful.js +9 -5
  89. package/lib/esm/components/proactivechatpanestateful/interfaces/IProactiveChatNotificationConfig.js +1 -0
  90. package/lib/esm/components/webchatcontainerstateful/common/mockchatsdk.js +4 -0
  91. package/lib/esm/components/webchatcontainerstateful/common/utils/FileAttachmentIconManager.js +2 -12
  92. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityMiddleware.js +7 -44
  93. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachmentMiddleware.js +2 -1
  94. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/conversationEndMiddleware.js +6 -6
  95. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/webchattelemetry/WebChatLogger.js +32 -0
  96. package/lib/esm/contexts/common/ConversationState.js +3 -2
  97. package/lib/esm/contexts/common/LiveChatWidgetActionType.js +11 -7
  98. package/lib/esm/contexts/common/LiveChatWidgetContextInitialState.js +12 -4
  99. package/lib/esm/contexts/createReducer.js +35 -9
  100. package/lib/esm/controller/componentController.js +2 -2
  101. package/lib/esm/plugins/newMessageEventHandler.js +82 -0
  102. package/lib/types/assets/Audios.d.ts +1 -0
  103. package/lib/types/assets/Icons.d.ts +11 -0
  104. package/lib/types/common/Constants.d.ts +19 -1
  105. package/lib/types/common/contextDataStore/DataStoreManager.d.ts +4 -0
  106. package/lib/types/common/interfaces/IContextDataStore.d.ts +14 -0
  107. package/lib/types/common/telemetry/TelemetryConstants.d.ts +27 -1
  108. package/lib/types/common/telemetry/TelemetryHelper.d.ts +2 -0
  109. package/lib/types/common/telemetry/TelemetryManager.d.ts +1 -0
  110. package/lib/types/common/telemetry/definitions/Contracts.d.ts +3 -0
  111. package/lib/types/common/telemetry/definitions/Payload.d.ts +15 -9
  112. package/lib/types/common/telemetry/interfaces/IChatSDKLogger.d.ts +1 -0
  113. package/lib/types/common/telemetry/interfaces/IInternalTelemetryData.d.ts +2 -0
  114. package/lib/types/common/telemetry/interfaces/ITelemetryConfig.d.ts +12 -0
  115. package/lib/types/common/utils.d.ts +3 -0
  116. package/lib/types/components/confirmationpanestateful/interfaces/IConfirmationPaneStatefulParams.d.ts +5 -2
  117. package/lib/types/components/footerstateful/audionotificationstateful/interfaces/IAudioNotificationStatefulParams.d.ts +0 -1
  118. package/lib/types/components/headerstateful/interfaces/IHeaderStatefulParams.d.ts +4 -1
  119. package/lib/types/components/livechatwidget/common/disposeTelemetryLoggers.d.ts +1 -0
  120. package/lib/types/components/livechatwidget/common/endChat.d.ts +4 -1
  121. package/lib/types/components/livechatwidget/common/reconnectChatHelper.d.ts +5 -2
  122. package/lib/types/components/livechatwidget/common/setPostChatContextAndLoadSurvey.d.ts +1 -1
  123. package/lib/types/components/livechatwidget/common/startChat.d.ts +1 -1
  124. package/lib/types/components/livechatwidget/common/startProactiveChat.d.ts +2 -1
  125. package/lib/types/components/livechatwidget/interfaces/ILiveChatWidgetComponentOverrides.d.ts +1 -0
  126. package/lib/types/components/livechatwidget/interfaces/ILiveChatWidgetProps.d.ts +3 -1
  127. package/lib/types/components/prechatsurveypanestateful/interfaces/IPreChatSurveyPaneStatefulParams.d.ts +1 -1
  128. package/lib/types/components/proactivechatpanestateful/interfaces/IProactiveChatNotificationConfig.d.ts +3 -0
  129. package/lib/types/components/reconnectchatpanestateful/interfaces/IReconnectChatPaneStatefulProps.d.ts +1 -0
  130. package/lib/types/components/webchatcontainerstateful/common/mockchatsdk.d.ts +1 -0
  131. package/lib/types/components/webchatcontainerstateful/common/utils/FileAttachmentIconManager.d.ts +1 -1
  132. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityMiddleware.d.ts +0 -1
  133. package/lib/types/components/webchatcontainerstateful/webchatcontroller/webchattelemetry/WebChatLogger.d.ts +1 -0
  134. package/lib/types/contexts/common/ConversationState.d.ts +3 -2
  135. package/lib/types/contexts/common/ILiveChatWidgetContext.d.ts +4 -0
  136. package/lib/types/contexts/common/LiveChatWidgetActionType.d.ts +12 -8
  137. package/lib/types/plugins/newMessageEventHandler.d.ts +2 -0
  138. package/package.json +11 -11
  139. package/lib/cjs/assets/audios/newMessageNotification.mp3 +0 -0
  140. package/lib/cjs/assets/icons/archiveIcon.svg +0 -3
  141. package/lib/cjs/assets/icons/audioIcon.svg +0 -6
  142. package/lib/cjs/assets/icons/blankIcon.svg +0 -6
  143. package/lib/cjs/assets/icons/excelIcon.svg +0 -6
  144. package/lib/cjs/assets/icons/imageIcon.svg +0 -6
  145. package/lib/cjs/assets/icons/oneNoteIcon.svg +0 -6
  146. package/lib/cjs/assets/icons/pdfIcon.svg +0 -6
  147. package/lib/cjs/assets/icons/powerpointIcon.svg +0 -6
  148. package/lib/cjs/assets/icons/videoIcon.svg +0 -6
  149. package/lib/cjs/assets/icons/visioIcon.svg +0 -6
  150. package/lib/cjs/assets/icons/wordIcon.svg +0 -6
  151. package/lib/esm/assets/assets.d.js +0 -0
  152. package/lib/esm/assets/audios/newMessageNotification.mp3 +0 -0
  153. package/lib/esm/assets/icons/archiveIcon.svg +0 -3
  154. package/lib/esm/assets/icons/audioIcon.svg +0 -6
  155. package/lib/esm/assets/icons/blankIcon.svg +0 -6
  156. package/lib/esm/assets/icons/excelIcon.svg +0 -6
  157. package/lib/esm/assets/icons/imageIcon.svg +0 -6
  158. package/lib/esm/assets/icons/oneNoteIcon.svg +0 -6
  159. package/lib/esm/assets/icons/pdfIcon.svg +0 -6
  160. package/lib/esm/assets/icons/powerpointIcon.svg +0 -6
  161. package/lib/esm/assets/icons/videoIcon.svg +0 -6
  162. package/lib/esm/assets/icons/visioIcon.svg +0 -6
  163. package/lib/esm/assets/icons/wordIcon.svg +0 -6
@@ -1,53 +1,117 @@
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
+ BroadcastService.postMessage({
95
+ eventName: BroadcastEvent.EndChat
96
+ });
97
+
98
+ if (postMessageToOtherTab) {
99
+ var _chatSDK$omnichannelC, _chatSDK$omnichannelC2;
100
+
101
+ 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);
102
+ BroadcastService.postMessage({
103
+ eventName: endChatEventName
104
+ });
49
105
  }
50
- });
51
- NotificationHandler.notifyError(NotificationScenarios.Connection, "End Chat Call Failed: " + ex);
106
+ } catch (error) {
107
+ TelemetryHelper.logActionEvent(LogLevel.ERROR, {
108
+ Event: TelemetryEvent.CloseChatMethodException,
109
+ ExceptionDetails: {
110
+ exception: `Failed to endChat: ${error}`
111
+ }
112
+ });
113
+ }
52
114
  }
53
- };
115
+ };
116
+
117
+ 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
 
@@ -1,7 +1,10 @@
1
+ import { BroadcastEvent, LogLevel, TelemetryEvent } from "../../../common/telemetry/TelemetryConstants";
1
2
  import { createStore } from "botframework-webchat";
3
+ import { BroadcastService } from "@microsoft/omnichannel-chat-components";
2
4
  import { ConversationState } from "../../../contexts/common/ConversationState";
3
5
  import { LiveChatWidgetActionType } from "../../../contexts/common/LiveChatWidgetActionType";
4
6
  import { PostChatSurveyMode } from "../../postchatsurveypanestateful/enums/PostChatSurveyMode";
7
+ import { TelemetryHelper } from "../../../common/telemetry/TelemetryHelper";
5
8
  import { WebChatStoreLoader } from "../../webchatcontainerstateful/webchatcontroller/WebChatStoreLoader";
6
9
  import attachmentProcessingMiddleware from "../../webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/attachmentProcessingMiddleware";
7
10
  import { changeLanguageCodeFormatForWebChat } from "../../../common/utils";
@@ -14,6 +17,7 @@ import createConversationEndMiddleware from "../../webchatcontainerstateful/webc
14
17
  import createDataMaskingMiddleware from "../../webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/dataMaskingMiddleware";
15
18
  import { createMarkdown } from "./createMarkdown";
16
19
  import createMaxMessageSizeValidator from "../../webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/maxMessageSizeValidator";
20
+ import { createWebChatTelemetry } from "../../webchatcontainerstateful/webchatcontroller/webchattelemetry/WebChatLogger";
17
21
  import { defaultAttachmentProps } from "../../webchatcontainerstateful/common/defaultProps/defaultAttachmentProps";
18
22
  import { defaultMiddlewareLocalizedTexts } from "../../webchatcontainerstateful/common/defaultProps/defaultMiddlewareLocalizedTexts";
19
23
  import { defaultWebChatContainerStatefulProps } from "../../webchatcontainerstateful/common/defaultProps/defaultWebChatContainerStatefulProps";
@@ -22,8 +26,7 @@ import gifUploadMiddleware from "../../webchatcontainerstateful/webchatcontrolle
22
26
  import htmlPlayerMiddleware from "../../webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/htmlPlayerMiddleware";
23
27
  import htmlTextMiddleware from "../../webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/htmlTextMiddleware";
24
28
  import preProcessingMiddleware from "../../webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/preProcessingMiddleware";
25
- import sanitizationMiddleware from "../../webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/sanitizationMiddleware";
26
- import { setPostChatContextAndLoadSurvey } from "./setPostChatContextAndLoadSurvey"; // eslint-disable-next-line @typescript-eslint/no-explicit-any
29
+ import sanitizationMiddleware from "../../webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/sanitizationMiddleware"; // eslint-disable-next-line @typescript-eslint/no-explicit-any
27
30
 
28
31
  export const initWebChatComposer = (props, chatSDK, state, dispatch, setWebChatStyles) => {
29
32
  var _props$webChatContain, _props$webChatContain2, _props$webChatContain3, _state$domainStates$l, _state$domainStates$l2, _state$domainStates$l3, _state$domainStates$l4, _state$domainStates$l8, _state$domainStates$l9, _props$webChatContain7, _props$webChatContain8, _state$domainStates$r, _state$domainStates$r2, _props$webChatContain9, _props$webChatContain10, _state$domainStates$r3, _state$domainStates$r4, _props$webChatContain11, _props$webChatContain12, _defaultWebChatContai, _props$webChatContain13, _props$webChatContain14, _props$webChatContain15, _props$webChatContain16, _state$domainStates$r5, _state$domainStates$r6, _props$webChatContain17, _props$webChatContain18, _defaultWebChatContai2, _props$webChatContain19, _props$webChatContain20, _defaultWebChatContai3, _props$webChatContain21;
@@ -45,6 +48,11 @@ export const initWebChatComposer = (props, chatSDK, state, dispatch, setWebChatS
45
48
  const conversationEndCallback = async () => {
46
49
  var _props$webChatContain4, _props$webChatContain5;
47
50
 
51
+ TelemetryHelper.logActionEvent(LogLevel.INFO, {
52
+ Event: TelemetryEvent.ConversationEndedThreadEventReceived,
53
+ Description: "Conversation is ended by agent side or by timeout."
54
+ });
55
+
48
56
  if ((props === null || props === void 0 ? void 0 : (_props$webChatContain4 = props.webChatContainerProps) === null || _props$webChatContain4 === void 0 ? void 0 : (_props$webChatContain5 = _props$webChatContain4.renderingMiddlewareProps) === null || _props$webChatContain5 === void 0 ? void 0 : _props$webChatContain5.hideSendboxOnConversationEnd) !== false) {
49
57
  setWebChatStyles(styles => {
50
58
  return { ...styles,
@@ -53,22 +61,33 @@ export const initWebChatComposer = (props, chatSDK, state, dispatch, setWebChatS
53
61
  });
54
62
  }
55
63
 
56
- if (isPostChatEnabled === "true" && postChatSurveyMode === PostChatSurveyMode.Embed) {
64
+ if (isPostChatEnabled === "true") {
65
+ if (postChatSurveyMode === PostChatSurveyMode.Embed) {
66
+ const loadPostChatEvent = {
67
+ eventName: BroadcastEvent.LoadPostChatSurvey
68
+ };
69
+ BroadcastService.postMessage(loadPostChatEvent);
70
+ } else if (postChatSurveyMode === PostChatSurveyMode.Link) {
71
+ dispatch({
72
+ type: LiveChatWidgetActionType.SET_CONVERSATION_STATE,
73
+ payload: ConversationState.InActive
74
+ });
75
+ }
76
+ } else {
57
77
  dispatch({
58
- type: LiveChatWidgetActionType.SET_SHOULD_SHOW_POST_CHAT,
78
+ type: LiveChatWidgetActionType.SET_CONVERSATION_ENDED_BY_AGENT,
59
79
  payload: true
60
80
  });
61
- dispatch({
62
- type: LiveChatWidgetActionType.SET_CONVERSATION_STATE,
63
- payload: ConversationState.Loading
64
- });
65
- await setPostChatContextAndLoadSurvey(chatSDK, dispatch, true);
66
81
  }
67
82
 
68
83
  dispatch({
69
84
  type: LiveChatWidgetActionType.SET_CHAT_TOKEN,
70
85
  payload: undefined
71
86
  });
87
+ dispatch({
88
+ type: LiveChatWidgetActionType.SET_LIVE_CHAT_CONTEXT,
89
+ payload: undefined
90
+ });
72
91
  };
73
92
 
74
93
  webChatStore = createStore({}, //initial state
@@ -89,6 +108,7 @@ export const initWebChatComposer = (props, chatSDK, state, dispatch, setWebChatS
89
108
  avatarMiddleware: (_props$webChatContain15 = props.webChatContainerProps) !== null && _props$webChatContain15 !== void 0 && (_props$webChatContain16 = _props$webChatContain15.renderingMiddlewareProps) !== null && _props$webChatContain16 !== void 0 && _props$webChatContain16.disableAvatarMiddleware ? undefined : createAvatarMiddleware((_state$domainStates$r5 = state.domainStates.renderingMiddlewareProps) === null || _state$domainStates$r5 === void 0 ? void 0 : _state$domainStates$r5.avatarStyleProps, (_state$domainStates$r6 = state.domainStates.renderingMiddlewareProps) === null || _state$domainStates$r6 === void 0 ? void 0 : _state$domainStates$r6.avatarTextStyleProps),
90
109
  groupActivitiesMiddleware: (_props$webChatContain17 = props.webChatContainerProps) !== null && _props$webChatContain17 !== void 0 && (_props$webChatContain18 = _props$webChatContain17.renderingMiddlewareProps) !== null && _props$webChatContain18 !== void 0 && _props$webChatContain18.disableGroupActivitiesMiddleware ? undefined : (_defaultWebChatContai2 = defaultWebChatContainerStatefulProps.webChatProps) === null || _defaultWebChatContai2 === void 0 ? void 0 : _defaultWebChatContai2.groupActivitiesMiddleware,
91
110
  typingIndicatorMiddleware: (_props$webChatContain19 = props.webChatContainerProps) !== null && _props$webChatContain19 !== void 0 && (_props$webChatContain20 = _props$webChatContain19.renderingMiddlewareProps) !== null && _props$webChatContain20 !== void 0 && _props$webChatContain20.disableTypingIndicatorMiddleware ? undefined : (_defaultWebChatContai3 = defaultWebChatContainerStatefulProps.webChatProps) === null || _defaultWebChatContai3 === void 0 ? void 0 : _defaultWebChatContai3.typingIndicatorMiddleware,
111
+ onTelemetry: createWebChatTelemetry(),
92
112
  ...((_props$webChatContain21 = props.webChatContainerProps) === null || _props$webChatContain21 === void 0 ? void 0 : _props$webChatContain21.webChatProps)
93
113
  };
94
114
  return webChatProps;
@@ -1,6 +1,6 @@
1
1
  import "regenerator-runtime/runtime";
2
- import { LogLevel, TelemetryEvent } from "../../../common/telemetry/TelemetryConstants";
3
- import { Constants } from "../../../common/Constants";
2
+ import { BroadcastEvent, LogLevel, TelemetryEvent } from "../../../common/telemetry/TelemetryConstants";
3
+ import { BroadcastService } from "@microsoft/omnichannel-chat-components";
4
4
  import { ConversationState } from "../../../contexts/common/ConversationState";
5
5
  import { LiveChatWidgetActionType } from "../../../contexts/common/LiveChatWidgetActionType";
6
6
  import { TelemetryHelper } from "../../../common/telemetry/TelemetryHelper"; // eslint-disable-next-line @typescript-eslint/no-explicit-any
@@ -46,33 +46,107 @@ const getReconnectIdForAuthenticatedChat = async (props, chatSDK) => {
46
46
  }; // eslint-disable-next-line @typescript-eslint/no-explicit-any
47
47
 
48
48
 
49
- const handleUnauthenticatedReconnectChat = async (dispatch, reconnectId, initStartChat) => {
50
- const reconnectAvailabilityResponse = await getChatReconnectContext(reconnectId);
49
+ const handleUnauthenticatedReconnectChat = async (chatSDK, dispatch, setAdapter, reconnectId, initStartChat, redirectInSameWindow) => {
50
+ const reconnectAvailabilityResponse = await getChatReconnectContext(chatSDK, reconnectId);
51
51
 
52
- if (reconnectAvailabilityResponse && reconnectAvailabilityResponse.redirectURL) {
53
- redirectPage(reconnectAvailabilityResponse.redirectURL);
52
+ if (shouldRedirectOrStartNewChat(reconnectAvailabilityResponse)) {
53
+ await redirectOrStartNewChat(reconnectAvailabilityResponse, chatSDK, dispatch, setAdapter, initStartChat, redirectInSameWindow);
54
54
  } else {
55
- const optionalParams = {
56
- reconnectId: reconnectId
57
- };
55
+ await setReconnectIdAndStartChat(chatSDK, dispatch, setAdapter, reconnectId, initStartChat);
56
+ }
57
+ }; // eslint-disable-next-line @typescript-eslint/no-explicit-any
58
+
59
+
60
+ const startUnauthenticatedReconnectChat = async (chatSDK, dispatch, setAdapter, reconnectId, initStartChat) => {
61
+ const reconnectAvailabilityResponse = await getChatReconnectContext(chatSDK, reconnectId);
62
+
63
+ if (!shouldRedirectOrStartNewChat(reconnectAvailabilityResponse)) {
64
+ await setReconnectIdAndStartChat(chatSDK, dispatch, setAdapter, reconnectId, initStartChat);
65
+ }
66
+ }; // eslint-disable-next-line @typescript-eslint/no-explicit-any
67
+
68
+
69
+ const setReconnectIdAndStartChat = async (chatSDK, dispatch, setAdapter, reconnectId, initStartChat) => {
70
+ const startUnauthenticatedReconnectChat = {
71
+ eventName: BroadcastEvent.StartUnauthenticatedReconnectChat
72
+ };
73
+ BroadcastService.postMessage(startUnauthenticatedReconnectChat);
74
+ const optionalParams = {
75
+ reconnectId: reconnectId
76
+ };
77
+ dispatch({
78
+ type: LiveChatWidgetActionType.SET_RECONNECT_ID,
79
+ payload: reconnectId
80
+ });
81
+ dispatch({
82
+ type: LiveChatWidgetActionType.SET_CONVERSATION_STATE,
83
+ payload: ConversationState.Loading
84
+ });
85
+ await initStartChat(chatSDK, dispatch, setAdapter, optionalParams);
86
+ };
87
+
88
+ const redirectPage = (redirectURL, redirectInSameWindow) => {
89
+ const redirectPageRequest = {
90
+ eventName: BroadcastEvent.RedirectPageRequest,
91
+ payload: {
92
+ redirectURL: redirectURL
93
+ }
94
+ };
95
+ BroadcastService.postMessage(redirectPageRequest);
96
+
97
+ if (redirectInSameWindow) {
98
+ window.location.href = redirectURL;
99
+ }
100
+ };
101
+
102
+ const shouldRedirectOrStartNewChat = reconnectAvailabilityResponse => {
103
+ return reconnectAvailabilityResponse && !reconnectAvailabilityResponse.reconnectId;
104
+ }; // eslint-disable-next-line @typescript-eslint/no-explicit-any
105
+
106
+
107
+ const startNewChatEmptyRedirectionUrl = async (chatSDK, dispatch, setAdapter, initStartChat) => {
108
+ const startUnauthenticatedReconnectChat = {
109
+ eventName: BroadcastEvent.StartUnauthenticatedReconnectChat
110
+ };
111
+ BroadcastService.postMessage(startUnauthenticatedReconnectChat); // Getting PreChat Survey Context
112
+
113
+ const parseToJson = false;
114
+ const preChatSurveyResponse = await chatSDK.getPreChatSurvey(parseToJson);
115
+
116
+ if (preChatSurveyResponse) {
58
117
  dispatch({
59
- type: LiveChatWidgetActionType.SET_RECONNECT_ID,
60
- payload: reconnectId
118
+ type: LiveChatWidgetActionType.SET_PRE_CHAT_SURVEY_RESPONSE,
119
+ payload: preChatSurveyResponse
61
120
  });
121
+ dispatch({
122
+ type: LiveChatWidgetActionType.SET_CONVERSATION_STATE,
123
+ payload: ConversationState.Prechat
124
+ });
125
+ } else {
62
126
  dispatch({
63
127
  type: LiveChatWidgetActionType.SET_CONVERSATION_STATE,
64
128
  payload: ConversationState.Loading
65
129
  });
66
- await initStartChat(optionalParams);
130
+ await initStartChat(chatSDK, dispatch, setAdapter);
67
131
  }
68
- };
132
+ }; // eslint-disable-next-line @typescript-eslint/no-explicit-any
69
133
 
70
- const redirectPage = newUrl => {
71
- const data = {
72
- messageName: Constants.redirectPageRequest,
73
- newUrl: newUrl
74
- };
75
- window.parent.postMessage(data, "*");
134
+
135
+ const handleRedirectUnauthenticatedReconnectChat = async (chatSDK, dispatch, setAdapter, initStartChat, reconnectId, redirectInSameWindow) => {
136
+ const reconnectAvailabilityResponse = await getChatReconnectContext(chatSDK, reconnectId);
137
+
138
+ if (shouldRedirectOrStartNewChat(reconnectAvailabilityResponse)) {
139
+ await redirectOrStartNewChat(reconnectAvailabilityResponse, chatSDK, dispatch, setAdapter, initStartChat, redirectInSameWindow);
140
+ }
141
+ }; // eslint-disable-next-line @typescript-eslint/no-explicit-any
142
+
143
+
144
+ const redirectOrStartNewChat = async (reconnectAvailabilityResponse, chatSDK, dispatch, setAdapter, initStartChat, redirectInSameWindow) => {
145
+ if (reconnectAvailabilityResponse.redirectURL) {
146
+ redirectPage(reconnectAvailabilityResponse.redirectURL, redirectInSameWindow);
147
+ } else {
148
+ await startNewChatEmptyRedirectionUrl(chatSDK, dispatch, setAdapter, initStartChat);
149
+ }
76
150
  };
77
151
 
78
- export { getReconnectIdForAuthenticatedChat, handleUnauthenticatedReconnectChat };
152
+ export { getChatReconnectContext, getReconnectIdForAuthenticatedChat, handleUnauthenticatedReconnectChat, startUnauthenticatedReconnectChat, handleRedirectUnauthenticatedReconnectChat };
@@ -1,10 +1,9 @@
1
- import { LiveChatWidgetActionType } from "../../../contexts/common/LiveChatWidgetActionType";
2
1
  import { RegisterLoggers, TelemetryManager } from "../../../common/telemetry/TelemetryManager";
2
+ import { LiveChatWidgetActionType } from "../../../contexts/common/LiveChatWidgetActionType";
3
3
  import { TelemetryHelper } from "../../../common/telemetry/TelemetryHelper";
4
4
  import { defaultAriaConfig } from "../../../common/telemetry/defaultConfigs/defaultAriaConfig";
5
5
  import { defaultInternalTelemetryData } from "../../../common/telemetry/defaultConfigs/defaultTelemetryInternalData";
6
6
  import { defaultTelemetryConfiguration } from "../../../common/telemetry/defaultConfigs/defaultTelemetryConfiguration";
7
- import packageInfo from "@microsoft/omnichannel-chat-sdk/package.json";
8
7
  export const registerTelemetryLoggers = (props, dispatch) => {
9
8
  var _props$liveChatContex, _props$liveChatContex2;
10
9
 
@@ -17,6 +16,8 @@ export const registerTelemetryLoggers = (props, dispatch) => {
17
16
 
18
17
  TelemetryManager.InternalTelemetryData = (_props$liveChatContex3 = props.liveChatContextFromCache) === null || _props$liveChatContex3 === void 0 ? void 0 : (_props$liveChatContex4 = _props$liveChatContex3.domainStates) === null || _props$liveChatContex4 === void 0 ? void 0 : _props$liveChatContex4.telemetryInternalData;
19
18
  } else {
19
+ var _props$chatSDK, _props$chatSDK$omnich, _props$chatSDK2, _props$chatSDK2$omnic, _props$chatSDK3, _props$chatSDK3$omnic;
20
+
20
21
  let telemetryData = { ...defaultInternalTelemetryData,
21
22
  telemetryConfig: Object.assign({}, defaultTelemetryConfiguration, telemetryConfig),
22
23
  ariaConfig: Object.assign({}, defaultAriaConfig, telemetryConfig === null || telemetryConfig === void 0 ? void 0 : telemetryConfig.ariaConfigurations)
@@ -27,7 +28,13 @@ export const registerTelemetryLoggers = (props, dispatch) => {
27
28
  }
28
29
 
29
30
  telemetryData = TelemetryHelper.addWidgetDataToTelemetry(telemetryConfig, telemetryData);
30
- telemetryData.OCChatSDKVersion = packageInfo.version;
31
+ telemetryData.OCChatSDKVersion = telemetryConfig.OCChatSDKVersion ?? "0.0.0-0";
32
+ telemetryData.chatComponentVersion = telemetryConfig.chatComponentVersion ?? "0.0.0-0";
33
+ telemetryData.chatWidgetVersion = telemetryConfig.chatWidgetVersion ?? "0.0.0-0";
34
+ telemetryData.orgId = (_props$chatSDK = props.chatSDK) === null || _props$chatSDK === void 0 ? void 0 : (_props$chatSDK$omnich = _props$chatSDK.omnichannelConfig) === null || _props$chatSDK$omnich === void 0 ? void 0 : _props$chatSDK$omnich.orgId;
35
+ telemetryData.widgetId = (_props$chatSDK2 = props.chatSDK) === null || _props$chatSDK2 === void 0 ? void 0 : (_props$chatSDK2$omnic = _props$chatSDK2.omnichannelConfig) === null || _props$chatSDK2$omnic === void 0 ? void 0 : _props$chatSDK2$omnic.widgetId;
36
+ telemetryData.orgUrl = (_props$chatSDK3 = props.chatSDK) === null || _props$chatSDK3 === void 0 ? void 0 : (_props$chatSDK3$omnic = _props$chatSDK3.omnichannelConfig) === null || _props$chatSDK3$omnic === void 0 ? void 0 : _props$chatSDK3$omnic.orgUrl;
37
+ TelemetryManager.InternalTelemetryData = telemetryData;
31
38
  dispatch({
32
39
  type: LiveChatWidgetActionType.SET_TELEMETRY_DATA,
33
40
  payload: telemetryData
@@ -1,20 +1,23 @@
1
1
  import { LogLevel, TelemetryEvent } from "../../../common/telemetry/TelemetryConstants";
2
+ import { BroadcastService } from "@microsoft/omnichannel-chat-components";
3
+ import { ConversationState } from "../../../contexts/common/ConversationState";
2
4
  import { LiveChatWidgetActionType } from "../../../contexts/common/LiveChatWidgetActionType";
3
- import { TelemetryHelper } from "../../../common/telemetry/TelemetryHelper";
4
- import { ConversationState } from "../../../contexts/common/ConversationState"; // eslint-disable-next-line @typescript-eslint/no-explicit-any
5
+ import { TelemetryHelper } from "../../../common/telemetry/TelemetryHelper"; // eslint-disable-next-line @typescript-eslint/no-explicit-any
5
6
 
6
- export const setPostChatContextAndLoadSurvey = async (chatSDK, dispatch, loadSurvey) => {
7
+ export const setPostChatContextAndLoadSurvey = async (chatSDK, dispatch, persistedChat) => {
7
8
  try {
8
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
9
- const context = await chatSDK.getPostChatSurveyContext();
10
- TelemetryHelper.logSDKEvent(LogLevel.INFO, {
11
- Event: TelemetryEvent.PostChatContextCallSucceed,
12
- Description: "Postchat context call succeed."
13
- });
14
- dispatch({
15
- type: LiveChatWidgetActionType.SET_POST_CHAT_CONTEXT,
16
- payload: context
17
- });
9
+ if (!persistedChat) {
10
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
11
+ const context = await chatSDK.getPostChatSurveyContext();
12
+ TelemetryHelper.logSDKEvent(LogLevel.INFO, {
13
+ Event: TelemetryEvent.PostChatContextCallSucceed,
14
+ Description: "Postchat context call succeed."
15
+ });
16
+ dispatch({
17
+ type: LiveChatWidgetActionType.SET_POST_CHAT_CONTEXT,
18
+ payload: context
19
+ });
20
+ }
18
21
  } catch (ex) {
19
22
  TelemetryHelper.logSDKEvent(LogLevel.ERROR, {
20
23
  Event: TelemetryEvent.PostChatContextCallFailed,
@@ -22,19 +25,17 @@ export const setPostChatContextAndLoadSurvey = async (chatSDK, dispatch, loadSur
22
25
  exception: ex
23
26
  }
24
27
  });
25
- }
26
- /* -true: setPostChatContextAndLoadSurvey is called after passing all checks from ConfirmationPane and endChatMiddleware in usual scenario.
27
- -false: Below if condition is needed for multi-tab scenarios. So when agent ends a chat and customer has opened chat in multiple tabs,
28
- all tabs should show post chat survey as per existing functionality. But when an agent end a conversation, Omnichannel SDK
29
- getPostChatSurveyContext returns as invalid conversation. To avoid that, caching the survey url is needed after chat starts and
30
- in this case loadSurvey is false
31
- */
28
+ } // eslint-disable-next-line @typescript-eslint/no-unused-vars
32
29
 
33
30
 
34
- if (loadSurvey) {
31
+ BroadcastService.getMessageByEventName("LoadPostChatSurvey").subscribe(msg => {
32
+ dispatch({
33
+ type: LiveChatWidgetActionType.SET_CONVERSATION_STATE,
34
+ payload: ConversationState.Loading
35
+ });
35
36
  dispatch({
36
37
  type: LiveChatWidgetActionType.SET_CONVERSATION_STATE,
37
38
  payload: ConversationState.Postchat
38
39
  });
39
- }
40
+ });
40
41
  };