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

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 (332) hide show
  1. package/README.md +7 -2
  2. package/lib/cjs/assets/Icons.js +4 -2
  3. package/lib/cjs/common/Constants.js +34 -163
  4. package/lib/cjs/common/KeyCodes.js +3 -4
  5. package/lib/cjs/common/contextDataStore/DataStoreManager.js +3 -5
  6. package/lib/cjs/common/storage/default/defaultCacheManager.js +26 -0
  7. package/lib/cjs/common/storage/default/defaultClientDataStoreProvider.js +111 -0
  8. package/lib/cjs/common/storage/default/defaultInMemoryDataStore.js +78 -0
  9. package/lib/cjs/common/telemetry/TelemetryConstants.js +82 -29
  10. package/lib/cjs/common/telemetry/TelemetryHelper.js +21 -59
  11. package/lib/cjs/common/telemetry/TelemetryManager.js +3 -32
  12. package/lib/cjs/common/telemetry/defaultConfigs/defaultTelemetryConfiguration.js +0 -2
  13. package/lib/cjs/common/telemetry/loggers/ariaTelemetryLogger.js +30 -36
  14. package/lib/cjs/common/telemetry/loggers/consoleLogger.js +0 -9
  15. package/lib/cjs/common/utils.js +85 -92
  16. package/lib/cjs/components/callingcontainerstateful/CallingContainerStateful.js +8 -46
  17. package/lib/cjs/components/chatbuttonstateful/ChatButtonStateful.js +19 -25
  18. package/lib/cjs/components/chatbuttonstateful/common/styleProps/defaultOutOfOfficeChatButtonStyleProps.js +3 -0
  19. package/lib/cjs/components/confirmationpanestateful/ConfirmationPaneStateful.js +18 -50
  20. package/lib/cjs/components/dimlayer/DimLayer.js +0 -4
  21. package/lib/cjs/components/emailtranscriptpanestateful/EmailTranscriptPaneStateful.js +9 -37
  22. package/lib/cjs/components/emailtranscriptpanestateful/EmailTranscriptPaneStateful.spec.js +6 -8
  23. package/lib/cjs/components/footerstateful/FooterStateful.js +11 -42
  24. package/lib/cjs/components/footerstateful/audionotificationstateful/AudioNotificationStateful.js +0 -6
  25. package/lib/cjs/components/footerstateful/downloadtranscriptstateful/DownloadTranscriptStateful.js +14 -43
  26. package/lib/cjs/components/footerstateful/downloadtranscriptstateful/DownloadTranscriptStateful.spec.js +6 -8
  27. package/lib/cjs/components/headerstateful/HeaderStateful.js +21 -32
  28. package/lib/cjs/components/livechatwidget/LiveChatWidget.js +2 -14
  29. package/lib/cjs/components/livechatwidget/common/ActivityStreamHandler.js +39 -0
  30. package/lib/cjs/components/livechatwidget/common/ActivitySubscriber/BotAuthActivitySubscriber.js +139 -0
  31. package/lib/cjs/components/livechatwidget/common/ActivitySubscriber/DefaultActivitySubscriber.js +20 -0
  32. package/lib/cjs/components/livechatwidget/common/ActivitySubscriber/IActivitySubscriber.js +1 -0
  33. package/lib/cjs/components/livechatwidget/common/ActivitySubscriber/PauseActivitySubscriber.js +34 -0
  34. package/lib/cjs/components/livechatwidget/common/ChatAdapterShim.js +64 -0
  35. package/lib/cjs/components/livechatwidget/common/Deferred.js +37 -0
  36. package/lib/cjs/components/livechatwidget/common/agentEndConversationHelper.js +36 -0
  37. package/lib/cjs/components/livechatwidget/common/authHelper.js +50 -0
  38. package/lib/cjs/components/livechatwidget/common/createAdapter.js +12 -9
  39. package/lib/cjs/components/livechatwidget/common/createFooter.js +4 -23
  40. package/lib/cjs/components/livechatwidget/common/createInternetConnectionChangeHandler.js +10 -10
  41. package/lib/cjs/components/livechatwidget/common/createMarkdown.js +36 -43
  42. package/lib/cjs/components/livechatwidget/common/defaultProps/defaultScrollBarProps.js +14 -0
  43. package/lib/cjs/components/livechatwidget/common/defaultProps/dummyDefaultProps.js +133 -51
  44. package/lib/cjs/components/livechatwidget/common/disposeTelemetryLoggers.js +0 -3
  45. package/lib/cjs/components/livechatwidget/common/endChat.js +86 -63
  46. package/lib/cjs/components/livechatwidget/common/getGeneralStylesForButton.js +0 -6
  47. package/lib/cjs/components/livechatwidget/common/initCallingSdk.js +7 -16
  48. package/lib/cjs/components/livechatwidget/common/initConfirmationPropsComposer.js +4 -8
  49. package/lib/cjs/components/livechatwidget/common/initWebChatComposer.js +29 -88
  50. package/lib/cjs/components/livechatwidget/common/reconnectChatHelper.js +76 -129
  51. package/lib/cjs/components/livechatwidget/common/registerTelemetryLoggers.js +4 -17
  52. package/lib/cjs/components/livechatwidget/common/setPostChatContextAndLoadSurvey.js +247 -14
  53. package/lib/cjs/components/livechatwidget/common/shareObservable.js +41 -0
  54. package/lib/cjs/components/livechatwidget/common/startChat.js +235 -127
  55. package/lib/cjs/components/livechatwidget/common/startProactiveChat.js +0 -8
  56. package/lib/cjs/components/livechatwidget/common/updateSessionDataForTelemetry.js +2 -11
  57. package/lib/cjs/components/livechatwidget/interfaces/IScrollBarProps.js +1 -0
  58. package/lib/cjs/components/livechatwidget/livechatwidgetstateful/LiveChatWidgetStateful.js +355 -207
  59. package/lib/cjs/components/loadingpanestateful/LoadingPaneStateful.js +26 -19
  60. package/lib/cjs/components/loadingpanestateful/common/errorUIStyleProps/errorUILoadingPaneStyleProps.js +57 -0
  61. package/lib/cjs/components/ooohpanestateful/OOOHPaneStateful.js +4 -17
  62. package/lib/cjs/components/postchatloadingpanestateful/PostChatLoadingPaneStateful.js +4 -17
  63. package/lib/cjs/components/postchatsurveypanestateful/PostChatSurveyPaneStateful.js +32 -23
  64. package/lib/cjs/components/postchatsurveypanestateful/common/defaultStyleProps/defaultgeneralPostChatSurveyPaneStyleProps.js +1 -1
  65. package/lib/cjs/components/postchatsurveypanestateful/enums/CustomerVoiceEvents.js +13 -0
  66. package/lib/cjs/components/postchatsurveypanestateful/enums/PostChatSurveyMode.js +0 -1
  67. package/lib/cjs/components/postchatsurveypanestateful/interfaces/IPostChatSurveyPaneStatefulProps.js +1 -0
  68. package/lib/cjs/components/prechatsurveypanestateful/PreChatSurveyPaneStateful.js +11 -43
  69. package/lib/cjs/components/prechatsurveypanestateful/common/defaultStyles/defaultGeneralPreChatSurveyPaneStyleProps.js +1 -1
  70. package/lib/cjs/components/proactivechatpanestateful/ProactiveChatPaneStateful.js +19 -33
  71. package/lib/cjs/components/reconnectchatpanestateful/ReconnectChatPaneStateful.js +6 -24
  72. package/lib/cjs/components/webchatcontainerstateful/WebChatContainerStateful.js +94 -19
  73. package/lib/cjs/components/webchatcontainerstateful/common/defaultProps/defaultWebChatContainerStatefulProps.js +3 -7
  74. package/lib/cjs/components/webchatcontainerstateful/common/defaultProps/defaultWebChatStatefulProps.js +2 -6
  75. package/lib/cjs/components/webchatcontainerstateful/common/defaultStyles/defaultAdaptiveCardStyles.js +11 -0
  76. package/lib/cjs/components/webchatcontainerstateful/common/mockadapter.js +12 -27
  77. package/lib/cjs/components/webchatcontainerstateful/common/mockchatsdk.js +6 -17
  78. package/lib/cjs/components/webchatcontainerstateful/common/utils/BrowserInfo.js +2 -24
  79. package/lib/cjs/components/webchatcontainerstateful/common/utils/FileAttachmentIconManager.js +5 -15
  80. package/lib/cjs/components/webchatcontainerstateful/common/utils/isMaskingFromCustomer.js +5 -8
  81. package/lib/cjs/components/webchatcontainerstateful/interfaces/IAdaptiveCardStyles.js +1 -0
  82. package/lib/cjs/components/webchatcontainerstateful/interfaces/IBotMagicCodeConfig.js +1 -0
  83. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/BotMagicCodeStore.js +12 -0
  84. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/WebChatStoreLoader.js +3 -5
  85. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/enums/BrowserVendor.js +0 -1
  86. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/enums/DirectLineActivityType.js +0 -1
  87. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/enums/DirectLineSenderRole.js +0 -1
  88. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/enums/MessageType.js +0 -1
  89. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/enums/NotificationLevel.js +0 -1
  90. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/enums/NotificationScenarios.js +0 -1
  91. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/enums/SendStatus.js +0 -1
  92. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/enums/WebChatActionType.js +0 -1
  93. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/adaptermiddlewares/formatTagsEgressMiddleware.js +0 -7
  94. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/adaptermiddlewares/formatTagsIngressMiddleware.js +0 -5
  95. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityMiddleware.js +27 -37
  96. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityStatusMiddleware.js +10 -22
  97. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachmentMiddleware.js +25 -61
  98. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/avatarMiddleware.js +7 -15
  99. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/cardActionMiddleware.js +41 -0
  100. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/cardActionMiddleware.spec.js +82 -0
  101. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultReceivedMessageAnchorStyles.js +10 -0
  102. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultSystemMessageBoxStyles.js +10 -0
  103. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultTimestampFailedStyles.js +2 -3
  104. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultTimestampRetryStyles.js +2 -3
  105. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultUserMessageBoxStyles.js +10 -0
  106. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/groupActivitiesMiddleware.js +3 -9
  107. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/messageTimestampMiddleware.js +89 -0
  108. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/timestamps/DeliveredTimestamp.js +7 -18
  109. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/timestamps/NotDeliveredTimestamp.js +8 -42
  110. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/timestamps/SendingTimestamp.js +4 -22
  111. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/typingIndicatorMiddleware.js +20 -33
  112. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/attachmentProcessingMiddleware.js +3 -9
  113. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/attachmentUploadValidatorMiddleware.js +6 -34
  114. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/channelDataMiddleware.js +1 -10
  115. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/conversationEndMiddleware.js +1 -12
  116. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/dataMaskingMiddleware.js +17 -19
  117. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/gifUploadMiddleware.js +1 -9
  118. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/htmlPlayerMiddleware.js +3 -9
  119. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/htmlTextMiddleware.js +13 -34
  120. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/maxMessageSizeValidator.js +1 -10
  121. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/preProcessingMiddleware.js +7 -11
  122. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/sanitizationMiddleware.js +5 -14
  123. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/notification/NotificationHandler.js +1 -21
  124. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/webchattelemetry/WebChatLogger.js +0 -12
  125. package/lib/cjs/contexts/ChatAdapterStore.js +0 -2
  126. package/lib/cjs/contexts/ChatContextStore.js +0 -2
  127. package/lib/cjs/contexts/ChatSDKStore.js +0 -2
  128. package/lib/cjs/contexts/common/ConversationEndEntity.js +12 -0
  129. package/lib/cjs/contexts/common/ConversationState.js +3 -3
  130. package/lib/cjs/contexts/common/LiveChatWidgetActionType.js +32 -26
  131. package/lib/cjs/contexts/common/LiveChatWidgetContextInitialState.js +18 -14
  132. package/lib/cjs/contexts/createReducer.js +183 -104
  133. package/lib/cjs/controller/componentController.js +4 -33
  134. package/lib/cjs/hooks/useChatAdapterStore.js +0 -6
  135. package/lib/cjs/hooks/useChatContextStore.js +0 -6
  136. package/lib/cjs/hooks/useChatSDKStore.js +0 -6
  137. package/lib/cjs/hooks/useDebounce.js +28 -0
  138. package/lib/cjs/hooks/useWindowDimensions.js +30 -0
  139. package/lib/cjs/index.js +0 -5
  140. package/lib/cjs/plugins/newMessageEventHandler.js +29 -36
  141. package/lib/esm/assets/Icons.js +2 -1
  142. package/lib/esm/common/Constants.js +31 -150
  143. package/lib/esm/common/KeyCodes.js +3 -3
  144. package/lib/esm/common/contextDataStore/DataStoreManager.js +3 -3
  145. package/lib/esm/common/storage/default/defaultCacheManager.js +18 -0
  146. package/lib/esm/common/storage/default/defaultClientDataStoreProvider.js +104 -0
  147. package/lib/esm/common/storage/default/defaultInMemoryDataStore.js +70 -0
  148. package/lib/esm/common/telemetry/TelemetryConstants.js +86 -26
  149. package/lib/esm/common/telemetry/TelemetryHelper.js +21 -47
  150. package/lib/esm/common/telemetry/TelemetryManager.js +3 -19
  151. package/lib/esm/common/telemetry/loggers/ariaTelemetryLogger.js +28 -24
  152. package/lib/esm/common/telemetry/loggers/consoleLogger.js +0 -5
  153. package/lib/esm/common/utils.js +81 -51
  154. package/lib/esm/components/callingcontainerstateful/CallingContainerStateful.js +8 -17
  155. package/lib/esm/components/chatbuttonstateful/ChatButtonStateful.js +22 -12
  156. package/lib/esm/components/chatbuttonstateful/common/styleProps/defaultOutOfOfficeChatButtonStyleProps.js +3 -0
  157. package/lib/esm/components/confirmationpanestateful/ConfirmationPaneStateful.js +20 -31
  158. package/lib/esm/components/emailtranscriptpanestateful/EmailTranscriptPaneStateful.js +9 -16
  159. package/lib/esm/components/emailtranscriptpanestateful/EmailTranscriptPaneStateful.spec.js +6 -6
  160. package/lib/esm/components/footerstateful/FooterStateful.js +13 -23
  161. package/lib/esm/components/footerstateful/downloadtranscriptstateful/DownloadTranscriptStateful.js +14 -36
  162. package/lib/esm/components/footerstateful/downloadtranscriptstateful/DownloadTranscriptStateful.spec.js +6 -6
  163. package/lib/esm/components/headerstateful/HeaderStateful.js +21 -17
  164. package/lib/esm/components/livechatwidget/LiveChatWidget.js +2 -2
  165. package/lib/esm/components/livechatwidget/common/ActivityStreamHandler.js +32 -0
  166. package/lib/esm/components/livechatwidget/common/ActivitySubscriber/BotAuthActivitySubscriber.js +134 -0
  167. package/lib/esm/components/livechatwidget/common/ActivitySubscriber/DefaultActivitySubscriber.js +13 -0
  168. package/lib/esm/components/livechatwidget/common/ActivitySubscriber/IActivitySubscriber.js +1 -0
  169. package/lib/esm/components/livechatwidget/common/ActivitySubscriber/PauseActivitySubscriber.js +27 -0
  170. package/lib/esm/components/livechatwidget/common/ChatAdapterShim.js +57 -0
  171. package/lib/esm/components/livechatwidget/common/Deferred.js +30 -0
  172. package/lib/esm/components/livechatwidget/common/agentEndConversationHelper.js +30 -0
  173. package/lib/esm/components/livechatwidget/common/authHelper.js +42 -0
  174. package/lib/esm/components/livechatwidget/common/createAdapter.js +14 -4
  175. package/lib/esm/components/livechatwidget/common/createFooter.js +4 -16
  176. package/lib/esm/components/livechatwidget/common/createInternetConnectionChangeHandler.js +10 -5
  177. package/lib/esm/components/livechatwidget/common/createMarkdown.js +38 -37
  178. package/lib/esm/components/livechatwidget/common/defaultProps/defaultScrollBarProps.js +7 -0
  179. package/lib/esm/components/livechatwidget/common/defaultProps/dummyDefaultProps.js +134 -37
  180. package/lib/esm/components/livechatwidget/common/endChat.js +89 -48
  181. package/lib/esm/components/livechatwidget/common/getGeneralStylesForButton.js +0 -2
  182. package/lib/esm/components/livechatwidget/common/initCallingSdk.js +9 -11
  183. package/lib/esm/components/livechatwidget/common/initConfirmationPropsComposer.js +4 -5
  184. package/lib/esm/components/livechatwidget/common/initWebChatComposer.js +32 -57
  185. package/lib/esm/components/livechatwidget/common/reconnectChatHelper.js +77 -111
  186. package/lib/esm/components/livechatwidget/common/registerTelemetryLoggers.js +4 -9
  187. package/lib/esm/components/livechatwidget/common/setPostChatContextAndLoadSurvey.js +250 -8
  188. package/lib/esm/components/livechatwidget/common/shareObservable.js +35 -0
  189. package/lib/esm/components/livechatwidget/common/startChat.js +233 -103
  190. package/lib/esm/components/livechatwidget/common/updateSessionDataForTelemetry.js +4 -2
  191. package/lib/esm/components/livechatwidget/interfaces/IScrollBarProps.js +1 -0
  192. package/lib/esm/components/livechatwidget/livechatwidgetstateful/LiveChatWidgetStateful.js +358 -151
  193. package/lib/esm/components/loadingpanestateful/LoadingPaneStateful.js +26 -7
  194. package/lib/esm/components/loadingpanestateful/common/errorUIStyleProps/errorUILoadingPaneStyleProps.js +50 -0
  195. package/lib/esm/components/ooohpanestateful/OOOHPaneStateful.js +4 -5
  196. package/lib/esm/components/postchatloadingpanestateful/PostChatLoadingPaneStateful.js +4 -5
  197. package/lib/esm/components/postchatsurveypanestateful/PostChatSurveyPaneStateful.js +32 -11
  198. package/lib/esm/components/postchatsurveypanestateful/common/defaultStyleProps/defaultgeneralPostChatSurveyPaneStyleProps.js +1 -1
  199. package/lib/esm/components/postchatsurveypanestateful/enums/CustomerVoiceEvents.js +6 -0
  200. package/lib/esm/components/postchatsurveypanestateful/enums/PostChatSurveyMode.js +0 -1
  201. package/lib/esm/components/postchatsurveypanestateful/interfaces/IPostChatSurveyPaneStatefulProps.js +1 -0
  202. package/lib/esm/components/prechatsurveypanestateful/PreChatSurveyPaneStateful.js +14 -27
  203. package/lib/esm/components/prechatsurveypanestateful/common/defaultStyles/defaultGeneralPreChatSurveyPaneStyleProps.js +1 -1
  204. package/lib/esm/components/proactivechatpanestateful/ProactiveChatPaneStateful.js +21 -9
  205. package/lib/esm/components/reconnectchatpanestateful/ReconnectChatPaneStateful.js +6 -6
  206. package/lib/esm/components/webchatcontainerstateful/WebChatContainerStateful.js +94 -4
  207. package/lib/esm/components/webchatcontainerstateful/common/defaultProps/defaultWebChatContainerStatefulProps.js +3 -1
  208. package/lib/esm/components/webchatcontainerstateful/common/defaultProps/defaultWebChatStatefulProps.js +2 -2
  209. package/lib/esm/components/webchatcontainerstateful/common/defaultStyles/defaultAdaptiveCardStyles.js +4 -0
  210. package/lib/esm/components/webchatcontainerstateful/common/mockadapter.js +12 -19
  211. package/lib/esm/components/webchatcontainerstateful/common/mockchatsdk.js +6 -13
  212. package/lib/esm/components/webchatcontainerstateful/common/utils/BrowserInfo.js +2 -16
  213. package/lib/esm/components/webchatcontainerstateful/common/utils/FileAttachmentIconManager.js +5 -5
  214. package/lib/esm/components/webchatcontainerstateful/common/utils/isMaskingFromCustomer.js +5 -6
  215. package/lib/esm/components/webchatcontainerstateful/interfaces/IAdaptiveCardStyles.js +1 -0
  216. package/lib/esm/components/webchatcontainerstateful/interfaces/IBotMagicCodeConfig.js +1 -0
  217. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/BotMagicCodeStore.js +5 -0
  218. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/WebChatStoreLoader.js +3 -3
  219. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/enums/BrowserVendor.js +0 -1
  220. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/enums/DirectLineActivityType.js +0 -1
  221. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/enums/DirectLineSenderRole.js +0 -1
  222. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/enums/MessageType.js +0 -1
  223. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/enums/NotificationLevel.js +0 -1
  224. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/enums/NotificationScenarios.js +0 -1
  225. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/enums/SendStatus.js +0 -1
  226. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/enums/WebChatActionType.js +0 -1
  227. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/adaptermiddlewares/formatTagsEgressMiddleware.js +2 -5
  228. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/adaptermiddlewares/formatTagsIngressMiddleware.js +0 -4
  229. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityMiddleware.js +27 -22
  230. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityStatusMiddleware.js +12 -14
  231. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachmentMiddleware.js +25 -39
  232. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/avatarMiddleware.js +9 -8
  233. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/cardActionMiddleware.js +34 -0
  234. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/cardActionMiddleware.spec.js +80 -0
  235. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultReceivedMessageAnchorStyles.js +3 -0
  236. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultSystemMessageBoxStyles.js +3 -0
  237. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultTimestampFailedStyles.js +2 -1
  238. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultTimestampRetryStyles.js +2 -1
  239. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultUserMessageBoxStyles.js +3 -0
  240. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/groupActivitiesMiddleware.js +3 -7
  241. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/messageTimestampMiddleware.js +83 -0
  242. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/timestamps/DeliveredTimestamp.js +8 -9
  243. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/timestamps/NotDeliveredTimestamp.js +9 -28
  244. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/timestamps/SendingTimestamp.js +5 -14
  245. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/typingIndicatorMiddleware.js +20 -22
  246. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/attachmentProcessingMiddleware.js +5 -8
  247. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/attachmentUploadValidatorMiddleware.js +6 -29
  248. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/channelDataMiddleware.js +3 -7
  249. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/conversationEndMiddleware.js +3 -8
  250. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/dataMaskingMiddleware.js +17 -14
  251. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/gifUploadMiddleware.js +3 -7
  252. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/htmlPlayerMiddleware.js +3 -7
  253. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/htmlTextMiddleware.js +15 -27
  254. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/maxMessageSizeValidator.js +3 -5
  255. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/preProcessingMiddleware.js +9 -9
  256. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/sanitizationMiddleware.js +7 -9
  257. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/notification/NotificationHandler.js +1 -13
  258. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/webchattelemetry/WebChatLogger.js +0 -5
  259. package/lib/esm/contexts/ChatAdapterStore.js +2 -1
  260. package/lib/esm/contexts/ChatContextStore.js +2 -1
  261. package/lib/esm/contexts/ChatSDKStore.js +2 -1
  262. package/lib/esm/contexts/common/ConversationEndEntity.js +5 -0
  263. package/lib/esm/contexts/common/ConversationState.js +3 -3
  264. package/lib/esm/contexts/common/LiveChatWidgetActionType.js +32 -26
  265. package/lib/esm/contexts/common/LiveChatWidgetContextInitialState.js +18 -10
  266. package/lib/esm/contexts/createReducer.js +183 -101
  267. package/lib/esm/controller/componentController.js +5 -4
  268. package/lib/esm/hooks/useChatAdapterStore.js +0 -4
  269. package/lib/esm/hooks/useChatContextStore.js +0 -4
  270. package/lib/esm/hooks/useChatSDKStore.js +0 -4
  271. package/lib/esm/hooks/useDebounce.js +22 -0
  272. package/lib/esm/hooks/useWindowDimensions.js +23 -0
  273. package/lib/esm/plugins/newMessageEventHandler.js +29 -26
  274. package/lib/types/assets/Icons.d.ts +1 -0
  275. package/lib/types/common/Constants.d.ts +24 -0
  276. package/lib/types/common/interfaces/IContextDataStore.d.ts +1 -1
  277. package/lib/types/common/storage/default/defaultCacheManager.d.ts +4 -0
  278. package/lib/types/common/storage/default/defaultClientDataStoreProvider.d.ts +2 -0
  279. package/lib/types/common/storage/default/defaultInMemoryDataStore.d.ts +6 -0
  280. package/lib/types/common/telemetry/TelemetryConstants.d.ts +63 -11
  281. package/lib/types/common/telemetry/definitions/Contracts.d.ts +4 -4
  282. package/lib/types/common/telemetry/definitions/Payload.d.ts +1 -0
  283. package/lib/types/common/telemetry/interfaces/ITelemetryConfig.d.ts +4 -0
  284. package/lib/types/common/utils.d.ts +8 -3
  285. package/lib/types/components/confirmationpanestateful/interfaces/IConfirmationPaneStatefulParams.d.ts +0 -7
  286. package/lib/types/components/headerstateful/interfaces/IHeaderStatefulParams.d.ts +2 -1
  287. package/lib/types/components/livechatwidget/common/ActivityStreamHandler.d.ts +14 -0
  288. package/lib/types/components/livechatwidget/common/ActivitySubscriber/BotAuthActivitySubscriber.d.ts +9 -0
  289. package/lib/types/components/livechatwidget/common/ActivitySubscriber/DefaultActivitySubscriber.d.ts +5 -0
  290. package/lib/types/components/livechatwidget/common/ActivitySubscriber/IActivitySubscriber.d.ts +6 -0
  291. package/lib/types/components/livechatwidget/common/ActivitySubscriber/PauseActivitySubscriber.d.ts +7 -0
  292. package/lib/types/components/livechatwidget/common/ChatAdapterShim.d.ts +7 -0
  293. package/lib/types/components/livechatwidget/common/Deferred.d.ts +9 -0
  294. package/lib/types/components/livechatwidget/common/agentEndConversationHelper.d.ts +6 -0
  295. package/lib/types/components/livechatwidget/common/authHelper.d.ts +5 -0
  296. package/lib/types/components/livechatwidget/common/defaultProps/defaultScrollBarProps.d.ts +2 -0
  297. package/lib/types/components/livechatwidget/common/initWebChatComposer.d.ts +1 -1
  298. package/lib/types/components/livechatwidget/common/reconnectChatHelper.d.ts +6 -7
  299. package/lib/types/components/livechatwidget/common/setPostChatContextAndLoadSurvey.d.ts +6 -1
  300. package/lib/types/components/livechatwidget/common/shareObservable.d.ts +1 -0
  301. package/lib/types/components/livechatwidget/common/startChat.d.ts +5 -2
  302. package/lib/types/components/livechatwidget/interfaces/ILiveChatWidgetControlProps.d.ts +4 -1
  303. package/lib/types/components/livechatwidget/interfaces/ILiveChatWidgetProps.d.ts +5 -2
  304. package/lib/types/components/livechatwidget/interfaces/IScrollBarProps.d.ts +22 -0
  305. package/lib/types/components/loadingpanestateful/common/errorUIStyleProps/errorUILoadingPaneStyleProps.d.ts +2 -0
  306. package/lib/types/components/postchatsurveypanestateful/PostChatSurveyPaneStateful.d.ts +2 -2
  307. package/lib/types/components/postchatsurveypanestateful/enums/CustomerVoiceEvents.d.ts +5 -0
  308. package/lib/types/components/postchatsurveypanestateful/interfaces/IPostChatSurveyPaneStatefulProps.d.ts +4 -0
  309. package/lib/types/components/reconnectchatpanestateful/interfaces/IReconnectChatPaneStatefulProps.d.ts +0 -2
  310. package/lib/types/components/webchatcontainerstateful/common/defaultStyles/defaultAdaptiveCardStyles.d.ts +2 -0
  311. package/lib/types/components/webchatcontainerstateful/common/mockchatsdk.d.ts +1 -0
  312. package/lib/types/components/webchatcontainerstateful/interfaces/IAdaptiveCardStyles.d.ts +4 -0
  313. package/lib/types/components/webchatcontainerstateful/interfaces/IBotMagicCodeConfig.d.ts +4 -0
  314. package/lib/types/components/webchatcontainerstateful/interfaces/IRenderingMiddlewareProps.d.ts +4 -1
  315. package/lib/types/components/webchatcontainerstateful/interfaces/IWebChatContainerStatefulProps.d.ts +4 -0
  316. package/lib/types/components/webchatcontainerstateful/webchatcontroller/BotMagicCodeStore.d.ts +3 -0
  317. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityStatusMiddleware.d.ts +1 -1
  318. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/cardActionMiddleware.d.ts +2 -0
  319. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/cardActionMiddleware.spec.d.ts +1 -0
  320. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultReceivedMessageAnchorStyles.d.ts +2 -0
  321. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultSystemMessageBoxStyles.d.ts +3 -0
  322. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultUserMessageBoxStyles.d.ts +3 -0
  323. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/messageTimestampMiddleware.d.ts +5 -0
  324. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/timestamps/SendingTimestamp.d.ts +1 -1
  325. package/lib/types/contexts/common/ConversationEndEntity.d.ts +4 -0
  326. package/lib/types/contexts/common/ConversationState.d.ts +3 -2
  327. package/lib/types/contexts/common/ILiveChatWidgetContext.d.ts +9 -4
  328. package/lib/types/contexts/common/LiveChatWidgetActionType.d.ts +32 -25
  329. package/lib/types/contexts/common/LiveChatWidgetContextInitialState.d.ts +1 -2
  330. package/lib/types/hooks/useDebounce.d.ts +3 -0
  331. package/lib/types/hooks/useWindowDimensions.d.ts +4 -0
  332. package/package.json +5 -4
@@ -1,19 +1,20 @@
1
- function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
2
-
1
+ function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
3
2
  import { BroadcastEvent, LogLevel, TelemetryEvent } from "../../../common/telemetry/TelemetryConstants";
4
- import { BroadcastService, decodeComponentString } from "@microsoft/omnichannel-chat-components";
3
+ import { BroadcastService, BroadcastServiceInitialize, decodeComponentString } from "@microsoft/omnichannel-chat-components";
5
4
  import { Stack } from "@fluentui/react";
6
5
  import React, { useEffect, useRef, useState } from "react";
7
- import { createTimer, getLocaleDirection, getWidgetCacheId, getWidgetEndChatEventName } from "../../../common/utils";
8
- import { getReconnectIdForAuthenticatedChat, handleUnauthenticatedReconnectChat, startUnauthenticatedReconnectChat } from "../common/reconnectChatHelper";
9
- import { initStartChat, prepareStartChat } from "../common/startChat";
6
+ import { checkIfConversationStillValid, initStartChat, prepareStartChat, setPreChatAndInitiateChat } from "../common/startChat";
7
+ import { createTimer, getBroadcastChannelName, getLocaleDirection, getStateFromCache, getWidgetCacheId, getWidgetEndChatEventName, isNullOrEmptyString, isUndefinedOrEmpty } from "../../../common/utils";
8
+ import { endChat, prepareEndChat } from "../common/endChat";
10
9
  import { shouldShowCallingContainer, shouldShowChatButton, shouldShowConfirmationPane, shouldShowEmailTranscriptPane, shouldShowHeader, shouldShowLoadingPane, shouldShowOutOfOfficeHoursPane, shouldShowPostChatLoadingPane, shouldShowPostChatSurveyPane, shouldShowPreChatSurveyPane, shouldShowProactiveChatPane, shouldShowReconnectChatPane, shouldShowWebChatContainer } from "../../../controller/componentController";
10
+ import { ActivityStreamHandler } from "../common/ActivityStreamHandler";
11
11
  import CallingContainerStateful from "../../callingcontainerstateful/CallingContainerStateful";
12
12
  import ChatButtonStateful from "../../chatbuttonstateful/ChatButtonStateful";
13
13
  import { Components } from "botframework-webchat";
14
14
  import ConfirmationPaneStateful from "../../confirmationpanestateful/ConfirmationPaneStateful";
15
15
  import { ConversationState } from "../../../contexts/common/ConversationState";
16
16
  import { DataStoreManager } from "../../../common/contextDataStore/DataStoreManager";
17
+ import { Constants, E2VVOptions } from "../../../common/Constants";
17
18
  import { ElementType } from "@microsoft/omnichannel-chat-components";
18
19
  import EmailTranscriptPaneStateful from "../../emailtranscriptpanestateful/EmailTranscriptPaneStateful";
19
20
  import HeaderStateful from "../../headerstateful/HeaderStateful";
@@ -30,128 +31,184 @@ import { TelemetryTimers } from "../../../common/telemetry/TelemetryManager";
30
31
  import WebChatContainerStateful from "../../webchatcontainerstateful/WebChatContainerStateful";
31
32
  import { createFooter } from "../common/createFooter";
32
33
  import { createInternetConnectionChangeHandler } from "../common/createInternetConnectionChangeHandler";
34
+ import { defaultClientDataStoreProvider } from "../../../common/storage/default/defaultClientDataStoreProvider";
35
+ import { defaultScrollBarProps } from "../common/defaultProps/defaultScrollBarProps";
33
36
  import { defaultWebChatContainerStatefulProps } from "../../webchatcontainerstateful/common/defaultProps/defaultWebChatContainerStatefulProps";
34
37
  import { disposeTelemetryLoggers } from "../common/disposeTelemetryLoggers";
35
- import { endChat, prepareEndChat } from "../common/endChat";
36
38
  import { getGeneralStylesForButton } from "../common/getGeneralStylesForButton";
37
39
  import { initCallingSdk } from "../common/initCallingSdk";
38
40
  import { initConfirmationPropsComposer } from "../common/initConfirmationPropsComposer";
39
41
  import { initWebChatComposer } from "../common/initWebChatComposer";
42
+ import { registerBroadcastServiceForLocalStorage } from "../../../common/storage/default/defaultCacheManager";
40
43
  import { registerTelemetryLoggers } from "../common/registerTelemetryLoggers";
41
44
  import { setPostChatContextAndLoadSurvey } from "../common/setPostChatContextAndLoadSurvey";
42
45
  import { startProactiveChat } from "../common/startProactiveChat";
43
46
  import useChatAdapterStore from "../../../hooks/useChatAdapterStore";
44
47
  import useChatContextStore from "../../../hooks/useChatContextStore";
45
48
  import useChatSDKStore from "../../../hooks/useChatSDKStore";
49
+ import { ConversationEndEntity } from "../../../contexts/common/ConversationEndEntity";
50
+ import { handleAgentEndConversation } from "../common/agentEndConversationHelper";
46
51
  export const LiveChatWidgetStateful = props => {
47
- var _props$webChatContain, _props$styleProps, _props$controlProps, _props$webChatContain3, _props$webChatContain4, _props$styleProps2, _props$controlProps5, _props$componentOverr, _props$controlProps6, _props$componentOverr2, _props$controlProps7, _props$componentOverr3, _props$controlProps8, _props$componentOverr4, _props$controlProps9, _props$componentOverr5, _props$controlProps10, _props$componentOverr6, _props$controlProps11, _props$componentOverr7, _props$controlProps12, _props$controlProps13, _props$componentOverr8, _props$controlProps14, _props$componentOverr9, _props$controlProps15, _props$componentOverr10, _props$componentOverr11, _props$componentOverr12;
48
-
49
- const [state, dispatch] = useChatContextStore(); // eslint-disable-next-line @typescript-eslint/no-explicit-any
50
-
52
+ var _props$webChatContain, _props$styleProps, _chatSDK$omnichannelC, _props$controlProps, _props$controlProps2, _props$webChatContain3, _props$webChatContain4, _props$styleProps2, _props$controlProps15, _props$controlProps16, _props$componentOverr, _props$controlProps17, _props$componentOverr2, _props$controlProps18, _props$componentOverr3, _props$controlProps19, _props$componentOverr4, _props$controlProps20, _props$componentOverr5, _props$controlProps21, _props$componentOverr6, _props$controlProps22, _props$componentOverr7, _props$controlProps23, _props$controlProps24, _props$componentOverr8, _props$controlProps25, _props$componentOverr9, _props$controlProps26, _props$componentOverr10, _props$componentOverr11, _props$componentOverr12;
53
+ const [state, dispatch] = useChatContextStore();
54
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
51
55
  const [adapter, setAdapter] = useChatAdapterStore();
52
- const [webChatStyles, setWebChatStyles] = useState({ ...defaultWebChatContainerStatefulProps.webChatStyles,
56
+ const [webChatStyles, setWebChatStyles] = useState({
57
+ ...defaultWebChatContainerStatefulProps.webChatStyles,
53
58
  ...((_props$webChatContain = props.webChatContainerProps) === null || _props$webChatContain === void 0 ? void 0 : _props$webChatContain.webChatStyles)
54
- }); // eslint-disable-next-line @typescript-eslint/no-explicit-any
55
-
56
- const chatSDK = useChatSDKStore(); // eslint-disable-next-line @typescript-eslint/no-explicit-any
57
-
59
+ });
60
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
61
+ const chatSDK = useChatSDKStore();
62
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
58
63
  const [voiceVideoCallingSDK, setVoiceVideoCallingSDK] = useState(undefined);
59
64
  const {
60
65
  Composer
61
66
  } = Components;
62
67
  const canStartProactiveChat = useRef(true);
63
- const canEndChat = useRef(true); // Process general styles
64
68
 
69
+ // Process general styles
65
70
  const generalStyles = {
66
71
  root: Object.assign({}, getGeneralStylesForButton(state), (_props$styleProps = props.styleProps) === null || _props$styleProps === void 0 ? void 0 : _props$styleProps.generalStyles)
67
72
  };
73
+
74
+ //Scrollbar styles
75
+ const scrollbarProps = Object.assign({}, defaultScrollBarProps, props === null || props === void 0 ? void 0 : props.scrollBarProps);
76
+ const broadcastServiceChannelName = getBroadcastChannelName(chatSDK === null || chatSDK === void 0 ? void 0 : (_chatSDK$omnichannelC = chatSDK.omnichannelConfig) === null || _chatSDK$omnichannelC === void 0 ? void 0 : _chatSDK$omnichannelC.widgetId, ((_props$controlProps = props.controlProps) === null || _props$controlProps === void 0 ? void 0 : _props$controlProps.widgetInstanceId) ?? "");
77
+ BroadcastServiceInitialize(broadcastServiceChannelName);
68
78
  TelemetryTimers.LcwLoadToChatButtonTimer = createTimer();
69
- const widgetElementId = ((_props$controlProps = props.controlProps) === null || _props$controlProps === void 0 ? void 0 : _props$controlProps.id) || "oc-lcw";
79
+ const widgetElementId = ((_props$controlProps2 = props.controlProps) === null || _props$controlProps2 === void 0 ? void 0 : _props$controlProps2.id) || "oc-lcw";
70
80
  const currentMessageCountRef = useRef(0);
71
- useEffect(() => {
72
- var _props$controlProps2, _props$controlProps3, _props$reconnectChatP, _props$controlProps4, _props$chatConfig, _props$chatConfig$Cha, _state$domainStates;
81
+ let widgetStateEventName = "";
82
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
83
+ let optionalParams;
84
+ let activeCachedChatExist = false;
85
+ const setOptionalParams = () => {
86
+ var _state$appStates, _state$domainStates;
87
+ if (!isUndefinedOrEmpty((_state$appStates = state.appStates) === null || _state$appStates === void 0 ? void 0 : _state$appStates.reconnectId)) {
88
+ activeCachedChatExist = true;
89
+ optionalParams = {
90
+ reconnectId: state.appStates.reconnectId
91
+ };
92
+ } else if (!isUndefinedOrEmpty((_state$domainStates = state.domainStates) === null || _state$domainStates === void 0 ? void 0 : _state$domainStates.liveChatContext)) {
93
+ var _state$domainStates2;
94
+ activeCachedChatExist = true;
95
+ optionalParams = {
96
+ liveChatContext: (_state$domainStates2 = state.domainStates) === null || _state$domainStates2 === void 0 ? void 0 : _state$domainStates2.liveChatContext
97
+ };
98
+ } else {
99
+ activeCachedChatExist = false;
100
+ optionalParams = {};
101
+ }
102
+ };
103
+
104
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
105
+ const startChat = async (props, localState) => {
106
+ let isChatValid = false;
107
+
108
+ //Start a chat from cache/reconnectid
109
+ if (activeCachedChatExist === true) {
110
+ var _state$domainStates3, _state$domainStates3$;
111
+ dispatch({
112
+ type: LiveChatWidgetActionType.SET_CONVERSATION_STATE,
113
+ payload: ConversationState.Loading
114
+ });
115
+ if (localState) {
116
+ localState.appStates.conversationState = ConversationState.Loading;
117
+ }
73
118
 
119
+ //Check if conversation state is not in wrapup or closed state
120
+ isChatValid = await checkIfConversationStillValid(chatSDK, props, (_state$domainStates3 = state.domainStates) === null || _state$domainStates3 === void 0 ? void 0 : (_state$domainStates3$ = _state$domainStates3.liveChatContext) === null || _state$domainStates3$ === void 0 ? void 0 : _state$domainStates3$.requestId, dispatch);
121
+ if (isChatValid === true) {
122
+ await initStartChat(chatSDK, dispatch, setAdapter, props, optionalParams);
123
+ return;
124
+ }
125
+ }
126
+ if (isChatValid === false) {
127
+ if (localState) {
128
+ await setPreChatAndInitiateChat(chatSDK, dispatch, setAdapter, undefined, undefined, localState, props);
129
+ return;
130
+ } else {
131
+ dispatch({
132
+ type: LiveChatWidgetActionType.SET_CONVERSATION_STATE,
133
+ payload: ConversationState.Closed
134
+ });
135
+ }
136
+ }
137
+ };
138
+
139
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
140
+ const setupClientDataStore = () => {
141
+ // Add default localStorage support for widget
142
+ if (props.contextDataStore === undefined) {
143
+ var _props$controlProps3, _chatSDK$omnichannelC2, _chatSDK$omnichannelC3, _props$controlProps4;
144
+ const cacheTtlInMins = (props === null || props === void 0 ? void 0 : (_props$controlProps3 = props.controlProps) === null || _props$controlProps3 === void 0 ? void 0 : _props$controlProps3.cacheTtlInMins) ?? Constants.CacheTtlInMinutes;
145
+ DataStoreManager.clientDataStore = defaultClientDataStoreProvider(cacheTtlInMins);
146
+ registerBroadcastServiceForLocalStorage(chatSDK === null || chatSDK === void 0 ? void 0 : (_chatSDK$omnichannelC2 = chatSDK.omnichannelConfig) === null || _chatSDK$omnichannelC2 === void 0 ? void 0 : _chatSDK$omnichannelC2.orgId, chatSDK === null || chatSDK === void 0 ? void 0 : (_chatSDK$omnichannelC3 = chatSDK.omnichannelConfig) === null || _chatSDK$omnichannelC3 === void 0 ? void 0 : _chatSDK$omnichannelC3.widgetId, (props === null || props === void 0 ? void 0 : (_props$controlProps4 = props.controlProps) === null || _props$controlProps4 === void 0 ? void 0 : _props$controlProps4.widgetInstanceId) ?? "", cacheTtlInMins);
147
+ } else {
148
+ DataStoreManager.clientDataStore = props.contextDataStore;
149
+ }
150
+ };
151
+ useEffect(() => {
152
+ var _props$controlProps5, _props$controlProps6, _props$controlProps7, _props$chatConfig, _props$chatConfig$Liv, _props$controlProps9, _props$chatConfig2, _props$chatConfig2$Ch;
153
+ setupClientDataStore();
74
154
  registerTelemetryLoggers(props, dispatch);
75
155
  createInternetConnectionChangeHandler();
76
- DataStoreManager.clientDataStore = props.contextDataStore ?? undefined;
77
156
  dispatch({
78
157
  type: LiveChatWidgetActionType.SET_WIDGET_ELEMENT_ID,
79
158
  payload: widgetElementId
80
159
  });
81
160
  dispatch({
82
- type: LiveChatWidgetActionType.SET_SKIP_CHAT_BUTTON_RENDERING,
83
- payload: ((_props$controlProps2 = props.controlProps) === null || _props$controlProps2 === void 0 ? void 0 : _props$controlProps2.skipChatButtonRendering) || false
161
+ type: LiveChatWidgetActionType.SET_START_CHAT_BUTTON_DISPLAY,
162
+ payload: ((_props$controlProps5 = props.controlProps) === null || _props$controlProps5 === void 0 ? void 0 : _props$controlProps5.hideStartChatButton) || false
84
163
  });
85
164
  dispatch({
86
165
  type: LiveChatWidgetActionType.SET_E2VV_ENABLED,
87
166
  payload: false
88
167
  });
89
- initCallingSdk(chatSDK, setVoiceVideoCallingSDK).then(sdkCreated => {
90
- sdkCreated && dispatch({
91
- type: LiveChatWidgetActionType.SET_E2VV_ENABLED,
92
- payload: true
168
+ if ((_props$controlProps6 = props.controlProps) !== null && _props$controlProps6 !== void 0 && _props$controlProps6.widgetInstanceId && !isNullOrEmptyString((_props$controlProps7 = props.controlProps) === null || _props$controlProps7 === void 0 ? void 0 : _props$controlProps7.widgetInstanceId)) {
169
+ var _props$controlProps8;
170
+ dispatch({
171
+ type: LiveChatWidgetActionType.SET_WIDGET_INSTANCE_ID,
172
+ payload: (_props$controlProps8 = props.controlProps) === null || _props$controlProps8 === void 0 ? void 0 : _props$controlProps8.widgetInstanceId
93
173
  });
94
- });
95
-
96
- if (!((_props$controlProps3 = props.controlProps) !== null && _props$controlProps3 !== void 0 && _props$controlProps3.skipChatButtonRendering) && (_props$reconnectChatP = props.reconnectChatPaneProps) !== null && _props$reconnectChatP !== void 0 && _props$reconnectChatP.reconnectId) {
97
- var _props$reconnectChatP2;
98
-
99
- startUnauthenticatedReconnectChat(chatSDK, dispatch, setAdapter, (_props$reconnectChatP2 = props.reconnectChatPaneProps) === null || _props$reconnectChatP2 === void 0 ? void 0 : _props$reconnectChatP2.reconnectId, initStartChat);
100
- } // Initialize global dir
101
-
174
+ }
175
+ if (((_props$chatConfig = props.chatConfig) === null || _props$chatConfig === void 0 ? void 0 : (_props$chatConfig$Liv = _props$chatConfig.LiveWSAndLiveChatEngJoin) === null || _props$chatConfig$Liv === void 0 ? void 0 : _props$chatConfig$Liv.msdyn_callingoptions) !== E2VVOptions.NoCalling) {
176
+ initCallingSdk(chatSDK, setVoiceVideoCallingSDK).then(sdkCreated => {
177
+ sdkCreated && dispatch({
178
+ type: LiveChatWidgetActionType.SET_E2VV_ENABLED,
179
+ payload: true
180
+ });
181
+ });
182
+ }
102
183
 
103
- const globalDir = ((_props$controlProps4 = props.controlProps) === null || _props$controlProps4 === void 0 ? void 0 : _props$controlProps4.dir) ?? getLocaleDirection((_props$chatConfig = props.chatConfig) === null || _props$chatConfig === void 0 ? void 0 : (_props$chatConfig$Cha = _props$chatConfig.ChatWidgetLanguage) === null || _props$chatConfig$Cha === void 0 ? void 0 : _props$chatConfig$Cha.msdyn_localeid);
184
+ // Initialize global dir
185
+ const globalDir = ((_props$controlProps9 = props.controlProps) === null || _props$controlProps9 === void 0 ? void 0 : _props$controlProps9.dir) ?? getLocaleDirection((_props$chatConfig2 = props.chatConfig) === null || _props$chatConfig2 === void 0 ? void 0 : (_props$chatConfig2$Ch = _props$chatConfig2.ChatWidgetLanguage) === null || _props$chatConfig2$Ch === void 0 ? void 0 : _props$chatConfig2$Ch.msdyn_localeid);
104
186
  dispatch({
105
187
  type: LiveChatWidgetActionType.SET_GLOBAL_DIR,
106
188
  payload: globalDir
107
189
  });
190
+ setOptionalParams();
108
191
 
109
- if ((_state$domainStates = state.domainStates) !== null && _state$domainStates !== void 0 && _state$domainStates.liveChatContext) {
110
- var _state$domainStates2;
111
-
112
- const optionalParams = {
113
- liveChatContext: (_state$domainStates2 = state.domainStates) === null || _state$domainStates2 === void 0 ? void 0 : _state$domainStates2.liveChatContext
114
- };
115
- initStartChat(chatSDK, dispatch, setAdapter, optionalParams);
192
+ // Unauth chat
193
+ if (state.appStates.hideStartChatButton === false) {
194
+ startChat(props);
116
195
  }
117
196
  }, []);
118
- useEffect(() => {
119
- if (state.appStates.skipChatButtonRendering) {
120
- var _props$reconnectChatP3;
121
-
122
- if ((_props$reconnectChatP3 = props.reconnectChatPaneProps) !== null && _props$reconnectChatP3 !== void 0 && _props$reconnectChatP3.reconnectId && !state.appStates.reconnectId) {
123
- var _props$reconnectChatP4, _props$reconnectChatP5;
124
197
 
125
- handleUnauthenticatedReconnectChat(chatSDK, dispatch, setAdapter, (_props$reconnectChatP4 = props.reconnectChatPaneProps) === null || _props$reconnectChatP4 === void 0 ? void 0 : _props$reconnectChatP4.reconnectId, initStartChat, (_props$reconnectChatP5 = props.reconnectChatPaneProps) === null || _props$reconnectChatP5 === void 0 ? void 0 : _props$reconnectChatP5.redirectInSameWindow);
126
- } else {
127
- getReconnectIdForAuthenticatedChat(props, chatSDK).then(authReconnectId => {
128
- if (authReconnectId && !state.appStates.reconnectId) {
129
- dispatch({
130
- type: LiveChatWidgetActionType.SET_RECONNECT_ID,
131
- payload: authReconnectId
132
- });
133
- dispatch({
134
- type: LiveChatWidgetActionType.SET_CONVERSATION_STATE,
135
- payload: ConversationState.ReconnectChat
136
- });
137
- } else {
138
- const chatStartedSkippingChatButtonRendering = {
139
- eventName: BroadcastEvent.StartChatSkippingChatButtonRendering
140
- };
141
- BroadcastService.postMessage(chatStartedSkippingChatButtonRendering);
142
- dispatch({
143
- type: LiveChatWidgetActionType.SET_CONVERSATION_STATE,
144
- payload: ConversationState.Loading
145
- });
146
- initStartChat(chatSDK, dispatch, setAdapter);
147
- }
148
- });
149
- }
150
- }
151
- }, [state.appStates.skipChatButtonRendering]);
198
+ // useEffect for when skip chat button rendering
152
199
  useEffect(() => {
153
- var _chatSDK$omnichannelC, _chatSDK$omnichannelC2;
200
+ if (state.appStates.hideStartChatButton === true) {
201
+ BroadcastService.postMessage({
202
+ eventName: BroadcastEvent.ChatInitiated
203
+ });
204
+ //Pass the state to avoid getting stale state
205
+ startChat(props, state);
206
+ }
207
+ }, [state.appStates.hideStartChatButton]);
154
208
 
209
+ // useEffect for custom context
210
+ useEffect(() => {
211
+ var _chatSDK$omnichannelC8, _chatSDK$omnichannelC9, _props$controlProps13;
155
212
  // Add the custom context on receiving the SetCustomContext event
156
213
  BroadcastService.getMessageByEventName(BroadcastEvent.SetCustomContext).subscribe(msg => {
157
214
  TelemetryHelper.logActionEvent(LogLevel.INFO, {
@@ -163,15 +220,13 @@ export const LiveChatWidgetStateful = props => {
163
220
  payload: msg === null || msg === void 0 ? void 0 : msg.payload
164
221
  });
165
222
  });
166
- BroadcastService.getMessageByEventName("StartProactiveChat").subscribe(msg => {
223
+ BroadcastService.getMessageByEventName(BroadcastEvent.StartProactiveChat).subscribe(msg => {
167
224
  TelemetryHelper.logActionEvent(LogLevel.INFO, {
168
225
  Event: TelemetryEvent.StartProactiveChatEventReceived,
169
226
  Description: "Start proactive chat event received."
170
227
  });
171
-
172
- if (canStartProactiveChat.current) {
228
+ if (canStartProactiveChat.current === true) {
173
229
  var _msg$payload, _msg$payload2, _msg$payload3;
174
-
175
230
  startProactiveChat(dispatch, msg === null || msg === void 0 ? void 0 : (_msg$payload = msg.payload) === null || _msg$payload === void 0 ? void 0 : _msg$payload.notificationConfig, msg === null || msg === void 0 ? void 0 : (_msg$payload2 = msg.payload) === null || _msg$payload2 === void 0 ? void 0 : _msg$payload2.enablePreChat, msg === null || msg === void 0 ? void 0 : (_msg$payload3 = msg.payload) === null || _msg$payload3 === void 0 ? void 0 : _msg$payload3.inNewWindow);
176
231
  } else {
177
232
  TelemetryHelper.logActionEvent(LogLevel.INFO, {
@@ -179,76 +234,168 @@ export const LiveChatWidgetStateful = props => {
179
234
  Description: "Start proactive chat method called, when chat was already triggered."
180
235
  });
181
236
  }
182
- }); // start chat from SDK Event
237
+ });
183
238
 
184
- BroadcastService.getMessageByEventName("StartChat").subscribe(() => {
239
+ // Toggle chat visibility
240
+ BroadcastService.getMessageByEventName(BroadcastEvent.HideChatVisibilityChangeEvent).subscribe(event => {
241
+ var _event$payload;
242
+ if ((event === null || event === void 0 ? void 0 : (_event$payload = event.payload) === null || _event$payload === void 0 ? void 0 : _event$payload.isChatHidden) !== undefined) {
243
+ var _event$payload2, _props$controlProps10;
244
+ TelemetryHelper.logActionEvent(LogLevel.INFO, {
245
+ Event: TelemetryEvent.ChatVisibilityChanged,
246
+ Description: "Chat visibility changed to " + (event === null || event === void 0 ? void 0 : (_event$payload2 = event.payload) === null || _event$payload2 === void 0 ? void 0 : _event$payload2.isChatHidden)
247
+ });
248
+ if ((_props$controlProps10 = props.controlProps) !== null && _props$controlProps10 !== void 0 && _props$controlProps10.hideStartChatButton) {
249
+ var _event$payload3;
250
+ dispatch({
251
+ type: LiveChatWidgetActionType.SET_MINIMIZED,
252
+ payload: event === null || event === void 0 ? void 0 : (_event$payload3 = event.payload) === null || _event$payload3 === void 0 ? void 0 : _event$payload3.isChatHidden
253
+ });
254
+ }
255
+ }
256
+ });
257
+
258
+ // Start chat from SDK Event
259
+ BroadcastService.getMessageByEventName(BroadcastEvent.StartChat).subscribe(() => {
260
+ var _chatSDK$omnichannelC4, _chatSDK$omnichannelC5, _props$controlProps11;
185
261
  TelemetryHelper.logActionEvent(LogLevel.INFO, {
186
262
  Event: TelemetryEvent.StartChatEventRecevied,
187
263
  Description: "Start chat event received."
188
264
  });
265
+ const persistedState = getStateFromCache(chatSDK === null || chatSDK === void 0 ? void 0 : (_chatSDK$omnichannelC4 = chatSDK.omnichannelConfig) === null || _chatSDK$omnichannelC4 === void 0 ? void 0 : _chatSDK$omnichannelC4.orgId, chatSDK === null || chatSDK === void 0 ? void 0 : (_chatSDK$omnichannelC5 = chatSDK.omnichannelConfig) === null || _chatSDK$omnichannelC5 === void 0 ? void 0 : _chatSDK$omnichannelC5.widgetId, (props === null || props === void 0 ? void 0 : (_props$controlProps11 = props.controlProps) === null || _props$controlProps11 === void 0 ? void 0 : _props$controlProps11.widgetInstanceId) ?? "");
266
+
267
+ // Chat not found in cache
268
+ if (persistedState === undefined) {
269
+ BroadcastService.postMessage({
270
+ eventName: BroadcastEvent.ChatInitiated
271
+ });
272
+ prepareStartChat(props, chatSDK, state, dispatch, setAdapter);
273
+ return;
274
+ }
189
275
 
190
- if (state.appStates.isMinimized) {
276
+ // Chat exist in cache
277
+ if (persistedState) {
278
+ var _persistedState$domai, _persistedState$domai2, _persistedState$domai3, _persistedState$domai4;
279
+ // Only initiate new chat if widget state in cache in one of the followings
280
+ if (persistedState.appStates.conversationState === ConversationState.Closed || persistedState.appStates.conversationState === ConversationState.InActive || persistedState.appStates.conversationState === ConversationState.Postchat) {
281
+ BroadcastService.postMessage({
282
+ eventName: BroadcastEvent.ChatInitiated
283
+ });
284
+ prepareStartChat(props, chatSDK, state, dispatch, setAdapter);
285
+ return;
286
+ }
287
+
288
+ // If minimized, maximize the chat
191
289
  dispatch({
192
290
  type: LiveChatWidgetActionType.SET_MINIMIZED,
193
291
  payload: false
194
292
  });
195
- } else {
196
- prepareStartChat(props, chatSDK, state, dispatch, setAdapter);
293
+ BroadcastService.postMessage({
294
+ eventName: BroadcastEvent.MaximizeChat,
295
+ payload: {
296
+ height: persistedState === null || persistedState === void 0 ? void 0 : (_persistedState$domai = persistedState.domainStates) === null || _persistedState$domai === void 0 ? void 0 : (_persistedState$domai2 = _persistedState$domai.widgetSize) === null || _persistedState$domai2 === void 0 ? void 0 : _persistedState$domai2.height,
297
+ width: persistedState === null || persistedState === void 0 ? void 0 : (_persistedState$domai3 = persistedState.domainStates) === null || _persistedState$domai3 === void 0 ? void 0 : (_persistedState$domai4 = _persistedState$domai3.widgetSize) === null || _persistedState$domai4 === void 0 ? void 0 : _persistedState$domai4.width
298
+ }
299
+ });
197
300
  }
198
- }); // end chat from SDK Event
301
+ });
199
302
 
200
- BroadcastService.getMessageByEventName("EndChat").subscribe(async () => {
201
- TelemetryHelper.logActionEvent(LogLevel.INFO, {
202
- Event: TelemetryEvent.EndChatEventReceived,
203
- Description: "End chat event received."
303
+ // End chat
304
+ BroadcastService.getMessageByEventName(BroadcastEvent.InitiateEndChat).subscribe(async () => {
305
+ if (state.appStates.hideStartChatButton === false) {
306
+ var _chatSDK$omnichannelC6, _chatSDK$omnichannelC7, _props$controlProps12;
307
+ // This is to ensure to get latest state from cache in multitab
308
+ const persistedState = getStateFromCache(chatSDK === null || chatSDK === void 0 ? void 0 : (_chatSDK$omnichannelC6 = chatSDK.omnichannelConfig) === null || _chatSDK$omnichannelC6 === void 0 ? void 0 : _chatSDK$omnichannelC6.orgId, chatSDK === null || chatSDK === void 0 ? void 0 : (_chatSDK$omnichannelC7 = chatSDK.omnichannelConfig) === null || _chatSDK$omnichannelC7 === void 0 ? void 0 : _chatSDK$omnichannelC7.widgetId, (props === null || props === void 0 ? void 0 : (_props$controlProps12 = props.controlProps) === null || _props$controlProps12 === void 0 ? void 0 : _props$controlProps12.widgetInstanceId) ?? "");
309
+ if (persistedState && persistedState.appStates.conversationState === ConversationState.Active) {
310
+ prepareEndChat(props, chatSDK, setAdapter, setWebChatStyles, dispatch, adapter, state);
311
+ } else {
312
+ const skipEndChatSDK = true;
313
+ const skipCloseChat = false;
314
+ endChat(props, chatSDK, setAdapter, setWebChatStyles, dispatch, adapter, skipEndChatSDK, skipCloseChat);
315
+ }
316
+ }
317
+ BroadcastService.postMessage({
318
+ eventName: BroadcastEvent.CloseChat
204
319
  });
320
+ });
205
321
 
206
- if (canEndChat.current) {
207
- prepareEndChat(props, chatSDK, setAdapter, setWebChatStyles, dispatch, adapter, state);
208
- } else {
209
- const skipEndChatSDK = true;
210
- const skipCloseChat = false;
211
- endChat(props, chatSDK, setAdapter, setWebChatStyles, dispatch, adapter, skipEndChatSDK, skipCloseChat);
212
- }
213
- }); // Listen to end chat event from other tabs
322
+ // End chat on browser unload
323
+ BroadcastService.getMessageByEventName(BroadcastEvent.InitiateEndChatOnBrowserUnload).subscribe(() => {
324
+ initiateEndChatOnBrowserUnload();
325
+ });
214
326
 
215
- 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);
327
+ // Listen to end chat event from other tabs
328
+ const endChatEventName = getWidgetEndChatEventName(chatSDK === null || chatSDK === void 0 ? void 0 : (_chatSDK$omnichannelC8 = chatSDK.omnichannelConfig) === null || _chatSDK$omnichannelC8 === void 0 ? void 0 : _chatSDK$omnichannelC8.orgId, chatSDK === null || chatSDK === void 0 ? void 0 : (_chatSDK$omnichannelC9 = chatSDK.omnichannelConfig) === null || _chatSDK$omnichannelC9 === void 0 ? void 0 : _chatSDK$omnichannelC9.widgetId, ((_props$controlProps13 = props.controlProps) === null || _props$controlProps13 === void 0 ? void 0 : _props$controlProps13.widgetInstanceId) ?? "");
216
329
  BroadcastService.getMessageByEventName(endChatEventName).subscribe(async () => {
217
330
  endChat(props, chatSDK, setAdapter, setWebChatStyles, dispatch, adapter, false, false, false);
218
- });
219
- window.addEventListener("beforeunload", () => {
220
- disposeTelemetryLoggers();
331
+ return;
221
332
  });
222
333
 
223
- if (state.appStates.conversationEndedByAgent) {
334
+ // When conversation ended by agent
335
+ if (state.appStates.conversationEndedBy === ConversationEndEntity.Agent) {
224
336
  endChat(props, chatSDK, setAdapter, setWebChatStyles, dispatch, adapter);
225
337
  }
226
- }, []);
227
- useEffect(() => {
228
- canStartProactiveChat.current = state.appStates.conversationState === ConversationState.Closed;
229
- canEndChat.current = state.appStates.conversationState === ConversationState.Active;
230
338
 
231
- if (state.appStates.conversationState === ConversationState.Active) {
232
- chatSDK === null || chatSDK === void 0 ? void 0 : chatSDK.onNewMessage(() => {
233
- BroadcastService.postMessage({
234
- eventName: BroadcastEvent.NewMessageNotification
235
- });
339
+ //Listen to WidgetSize, used for minimize to maximize
340
+ BroadcastService.getMessageByEventName("WidgetSize").subscribe(msg => {
341
+ dispatch({
342
+ type: LiveChatWidgetActionType.SET_WIDGET_SIZE,
343
+ payload: msg === null || msg === void 0 ? void 0 : msg.payload
236
344
  });
237
- } // Track the message count
238
-
345
+ });
239
346
 
347
+ // Reset state variables
348
+ BroadcastService.getMessageByEventName(BroadcastEvent.RaiseErrorEvent).subscribe(() => {
349
+ dispatch({
350
+ type: LiveChatWidgetActionType.SET_LIVE_CHAT_CONFIG,
351
+ payload: undefined
352
+ });
353
+ dispatch({
354
+ type: LiveChatWidgetActionType.SET_CUSTOM_CONTEXT,
355
+ payload: undefined
356
+ });
357
+ dispatch({
358
+ type: LiveChatWidgetActionType.SET_CHAT_TOKEN,
359
+ payload: undefined
360
+ });
361
+ dispatch({
362
+ type: LiveChatWidgetActionType.SET_LIVE_CHAT_CONTEXT,
363
+ payload: undefined
364
+ });
365
+ });
366
+ return () => {
367
+ disposeTelemetryLoggers();
368
+ };
369
+ }, []);
370
+ useEffect(() => {
371
+ // On new message
240
372
  if (state.appStates.conversationState === ConversationState.Active) {
241
373
  chatSDK === null || chatSDK === void 0 ? void 0 : chatSDK.onNewMessage(() => {
374
+ // Track the message count
242
375
  currentMessageCountRef.current++;
243
376
  dispatch({
244
377
  type: LiveChatWidgetActionType.SET_UNREAD_MESSAGE_COUNT,
245
378
  payload: currentMessageCountRef.current + 1
246
379
  });
380
+
381
+ // New message notification
382
+ BroadcastService.postMessage({
383
+ eventName: BroadcastEvent.NewMessageNotification
384
+ });
247
385
  });
248
386
  }
249
- }, [state.appStates.conversationState]); // Reset the UnreadMessageCount when minimized is toggled and broadcast it.
387
+ }, [state.appStates.conversationState]);
388
+ useEffect(() => {
389
+ canStartProactiveChat.current = state.appStates.conversationState === ConversationState.Closed && !state.appStates.proactiveChatStates.proactiveChatInNewWindow;
390
+ }, [state.appStates.conversationState, state.appStates.proactiveChatStates.proactiveChatInNewWindow]);
250
391
 
392
+ // Reset the UnreadMessageCount when minimized is toggled and broadcast it.
251
393
  useEffect(() => {
394
+ if (state.appStates.isMinimized) {
395
+ ActivityStreamHandler.cork();
396
+ } else {
397
+ setTimeout(() => ActivityStreamHandler.uncork(), 500);
398
+ }
252
399
  currentMessageCountRef.current = -1;
253
400
  dispatch({
254
401
  type: LiveChatWidgetActionType.SET_UNREAD_MESSAGE_COUNT,
@@ -260,10 +407,11 @@ export const LiveChatWidgetStateful = props => {
260
407
  payload: 0
261
408
  };
262
409
  BroadcastService.postMessage(customEvent);
263
- }, [state.appStates.isMinimized]); // Broadcast the UnreadMessageCount state on any change.
410
+ }, [state.appStates.isMinimized]);
264
411
 
412
+ // Broadcast the UnreadMessageCount state on any change.
265
413
  useEffect(() => {
266
- if (state.appStates.isMinimized && state.appStates.unreadMessageCount > 0) {
414
+ if (state.appStates.isMinimized === true && state.appStates.unreadMessageCount > 0) {
267
415
  const customEvent = {
268
416
  elementType: ElementType.Custom,
269
417
  eventName: BroadcastEvent.UnreadMessageCount,
@@ -274,68 +422,127 @@ export const LiveChatWidgetStateful = props => {
274
422
  }, [state.appStates.unreadMessageCount]);
275
423
  useEffect(() => {
276
424
  var _props$webChatContain2;
277
-
278
- setWebChatStyles({ ...webChatStyles,
425
+ setWebChatStyles({
426
+ ...webChatStyles,
279
427
  ...((_props$webChatContain2 = props.webChatContainerProps) === null || _props$webChatContain2 === void 0 ? void 0 : _props$webChatContain2.webChatStyles)
280
428
  });
281
429
  }, [(_props$webChatContain3 = props.webChatContainerProps) === null || _props$webChatContain3 === void 0 ? void 0 : _props$webChatContain3.webChatStyles]);
282
- const webChatProps = initWebChatComposer(props, chatSDK, state, dispatch, setWebChatStyles);
283
-
284
- const setPostChatContextRelay = () => setPostChatContextAndLoadSurvey(chatSDK, dispatch); // eslint-disable-next-line @typescript-eslint/no-explicit-any
285
-
286
-
287
- const endChatRelay = (adapter, skipEndChatSDK, skipCloseChat) => endChat(props, chatSDK, setAdapter, setWebChatStyles, dispatch, adapter, skipEndChatSDK, skipCloseChat); // eslint-disable-next-line @typescript-eslint/no-explicit-any
288
-
289
-
290
- const prepareEndChatRelay = (adapter, state) => prepareEndChat(props, chatSDK, setAdapter, setWebChatStyles, dispatch, adapter, state);
291
-
292
- const prepareStartChatRelay = () => prepareStartChat(props, chatSDK, state, dispatch, setAdapter); // eslint-disable-next-line @typescript-eslint/no-explicit-any
293
-
294
-
295
- const initStartChatRelay = (optionalParams, persistedState) => initStartChat(chatSDK, dispatch, setAdapter, optionalParams, persistedState);
296
-
297
- const confirmationPaneProps = initConfirmationPropsComposer(props); // publish chat widget state
298
430
 
431
+ // Publish chat widget state
299
432
  useEffect(() => {
300
- var _props$chatSDK, _props$chatSDK$omnich, _props$chatSDK2, _props$chatSDK2$omnic;
301
-
302
- const widgetStateEventName = getWidgetCacheId(props === null || props === void 0 ? void 0 : (_props$chatSDK = props.chatSDK) === null || _props$chatSDK === void 0 ? void 0 : (_props$chatSDK$omnich = _props$chatSDK.omnichannelConfig) === null || _props$chatSDK$omnich === void 0 ? void 0 : _props$chatSDK$omnich.orgId, props === null || props === void 0 ? void 0 : (_props$chatSDK2 = props.chatSDK) === null || _props$chatSDK2 === void 0 ? void 0 : (_props$chatSDK2$omnic = _props$chatSDK2.omnichannelConfig) === null || _props$chatSDK2$omnic === void 0 ? void 0 : _props$chatSDK2$omnic.widgetId);
433
+ var _props$chatSDK, _props$chatSDK$omnich, _props$chatSDK2, _props$chatSDK2$omnic, _props$controlProps14;
434
+ // Only activate these windows events when conversation state is active and chat widget is in popout mode
435
+ // Ghost chat scenarios
436
+ /* COMMENTING THIS CODE FOR PARITY WITH OLD LCW
437
+ if (state.appStates.conversationState === ConversationState.Active &&
438
+ props.controlProps?.hideStartChatButton === true) {
439
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
440
+
441
+ window.onbeforeunload = function () {
442
+ const prompt = Constants.BrowserUnloadConfirmationMessage;
443
+ return prompt;
444
+ };
445
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
446
+ window.onunload = function () {
447
+ initiateEndChatOnBrowserUnload();
448
+ };
449
+ }*/
450
+
451
+ widgetStateEventName = getWidgetCacheId(props === null || props === void 0 ? void 0 : (_props$chatSDK = props.chatSDK) === null || _props$chatSDK === void 0 ? void 0 : (_props$chatSDK$omnich = _props$chatSDK.omnichannelConfig) === null || _props$chatSDK$omnich === void 0 ? void 0 : _props$chatSDK$omnich.orgId, props === null || props === void 0 ? void 0 : (_props$chatSDK2 = props.chatSDK) === null || _props$chatSDK2 === void 0 ? void 0 : (_props$chatSDK2$omnic = _props$chatSDK2.omnichannelConfig) === null || _props$chatSDK2$omnic === void 0 ? void 0 : _props$chatSDK2$omnic.widgetId, (props === null || props === void 0 ? void 0 : (_props$controlProps14 = props.controlProps) === null || _props$controlProps14 === void 0 ? void 0 : _props$controlProps14.widgetInstanceId) ?? "");
303
452
  const chatWidgetStateChangeEvent = {
304
453
  eventName: widgetStateEventName,
305
- payload: { ...state
454
+ payload: {
455
+ ...state
306
456
  }
307
457
  };
308
458
  BroadcastService.postMessage(chatWidgetStateChangeEvent);
309
459
  }, [state]);
310
- return /*#__PURE__*/React.createElement(Composer, _extends({}, webChatProps, {
460
+
461
+ // Initiate End chat from a single point
462
+ useEffect(() => {
463
+ if (state.appStates.conversationEndedBy !== undefined) {
464
+ prepareEndChat(props, chatSDK, setAdapter, setWebChatStyles, dispatch, adapter, state);
465
+ }
466
+ }, [state.appStates.conversationEndedBy]);
467
+
468
+ // Handle Agent end conversation cases
469
+ useEffect(() => {
470
+ if (state.appStates.conversationEndedByAgentEventReceived) {
471
+ handleAgentEndConversation(props, state, dispatch);
472
+ }
473
+ }, [state.appStates.conversationEndedByAgentEventReceived]);
474
+ const initiateEndChatOnBrowserUnload = () => {
475
+ var _DataStoreManager$cli;
476
+ TelemetryHelper.logActionEvent(LogLevel.INFO, {
477
+ Event: TelemetryEvent.BrowserUnloadEventStarted,
478
+ Description: "Browser unload event received."
479
+ });
480
+ endChat(props, chatSDK, setAdapter, setWebChatStyles, dispatch, adapter, false, false, false);
481
+ // Clean local storage
482
+ (_DataStoreManager$cli = DataStoreManager.clientDataStore) === null || _DataStoreManager$cli === void 0 ? void 0 : _DataStoreManager$cli.removeData(widgetStateEventName, "localStorage");
483
+
484
+ //Dispose calling instance
485
+ if (voiceVideoCallingSDK) {
486
+ voiceVideoCallingSDK === null || voiceVideoCallingSDK === void 0 ? void 0 : voiceVideoCallingSDK.close();
487
+ }
488
+ //Message for clearing window[popouTab]
489
+ BroadcastService.postMessage({
490
+ eventName: BroadcastEvent.ClosePopoutWindow
491
+ });
492
+ };
493
+ const webChatProps = initWebChatComposer(props, chatSDK, setAdapter, state, dispatch, adapter, setWebChatStyles);
494
+ const setPostChatContextRelay = () => setPostChatContextAndLoadSurvey(chatSDK, dispatch);
495
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
496
+ const endChatRelay = (adapter, skipEndChatSDK, skipCloseChat, postMessageToOtherTab) => endChat(props, chatSDK, setAdapter, setWebChatStyles, dispatch, adapter, skipEndChatSDK, skipCloseChat, postMessageToOtherTab);
497
+ const prepareStartChatRelay = () => prepareStartChat(props, chatSDK, state, dispatch, setAdapter);
498
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
499
+ const initStartChatRelay = (optionalParams, persistedState) => initStartChat(chatSDK, dispatch, setAdapter, props, optionalParams, persistedState);
500
+ const confirmationPaneProps = initConfirmationPropsComposer(props);
501
+ return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("style", null, `
502
+ ::-webkit-scrollbar {
503
+ width: ${scrollbarProps.width};
504
+ }
505
+
506
+ ::-webkit-scrollbar-track {
507
+ background: ${scrollbarProps.trackBackgroundColor};
508
+ }
509
+
510
+ ::-webkit-scrollbar-thumb {
511
+ background: ${scrollbarProps.thumbBackgroundColor};
512
+ border-radius: ${scrollbarProps.thumbBorderRadius};
513
+ }
514
+
515
+ ::-webkit-scrollbar-thumb:hover {
516
+ background: ${scrollbarProps.thumbHoverColor};
517
+ }
518
+ `), /*#__PURE__*/React.createElement(Composer, _extends({}, webChatProps, {
311
519
  styleOptions: webChatStyles,
312
520
  directLine: ((_props$webChatContain4 = props.webChatContainerProps) === null || _props$webChatContain4 === void 0 ? void 0 : _props$webChatContain4.directLine) ?? adapter ?? defaultWebChatContainerStatefulProps.directLine
313
521
  }), /*#__PURE__*/React.createElement(Stack, {
314
522
  id: widgetElementId,
315
523
  styles: generalStyles,
316
524
  className: (_props$styleProps2 = props.styleProps) === null || _props$styleProps2 === void 0 ? void 0 : _props$styleProps2.className
317
- }, !((_props$controlProps5 = props.controlProps) !== null && _props$controlProps5 !== void 0 && _props$controlProps5.hideChatButton) && shouldShowChatButton(state) && (decodeComponentString((_props$componentOverr = props.componentOverrides) === null || _props$componentOverr === void 0 ? void 0 : _props$componentOverr.chatButton) || /*#__PURE__*/React.createElement(ChatButtonStateful, {
525
+ }, !((_props$controlProps15 = props.controlProps) !== null && _props$controlProps15 !== void 0 && _props$controlProps15.hideChatButton) && !((_props$controlProps16 = props.controlProps) !== null && _props$controlProps16 !== void 0 && _props$controlProps16.hideStartChatButton) && shouldShowChatButton(state) && (decodeComponentString((_props$componentOverr = props.componentOverrides) === null || _props$componentOverr === void 0 ? void 0 : _props$componentOverr.chatButton) || /*#__PURE__*/React.createElement(ChatButtonStateful, {
318
526
  buttonProps: props.chatButtonProps,
319
527
  outOfOfficeButtonProps: props.outOfOfficeChatButtonProps,
320
528
  startChat: prepareStartChatRelay
321
- })), !((_props$controlProps6 = props.controlProps) !== null && _props$controlProps6 !== void 0 && _props$controlProps6.hideProactiveChatPane) && shouldShowProactiveChatPane(state) && (decodeComponentString((_props$componentOverr2 = props.componentOverrides) === null || _props$componentOverr2 === void 0 ? void 0 : _props$componentOverr2.proactiveChatPane) || /*#__PURE__*/React.createElement(ProactiveChatPaneStateful, {
529
+ })), !((_props$controlProps17 = props.controlProps) !== null && _props$controlProps17 !== void 0 && _props$controlProps17.hideProactiveChatPane) && shouldShowProactiveChatPane(state) && (decodeComponentString((_props$componentOverr2 = props.componentOverrides) === null || _props$componentOverr2 === void 0 ? void 0 : _props$componentOverr2.proactiveChatPane) || /*#__PURE__*/React.createElement(ProactiveChatPaneStateful, {
322
530
  proactiveChatProps: props.proactiveChatPaneProps,
323
531
  startChat: prepareStartChatRelay
324
- })), !((_props$controlProps7 = props.controlProps) !== null && _props$controlProps7 !== void 0 && _props$controlProps7.hideHeader) && shouldShowHeader(state) && (decodeComponentString((_props$componentOverr3 = props.componentOverrides) === null || _props$componentOverr3 === void 0 ? void 0 : _props$componentOverr3.header) || /*#__PURE__*/React.createElement(HeaderStateful, {
532
+ })), !((_props$controlProps18 = props.controlProps) !== null && _props$controlProps18 !== void 0 && _props$controlProps18.hideHeader) && shouldShowHeader(state) && (decodeComponentString((_props$componentOverr3 = props.componentOverrides) === null || _props$componentOverr3 === void 0 ? void 0 : _props$componentOverr3.header) || /*#__PURE__*/React.createElement(HeaderStateful, {
325
533
  headerProps: props.headerProps,
326
534
  outOfOfficeHeaderProps: props.outOfOfficeHeaderProps,
327
535
  endChat: endChatRelay
328
- })), !((_props$controlProps8 = props.controlProps) !== null && _props$controlProps8 !== void 0 && _props$controlProps8.hideLoadingPane) && shouldShowLoadingPane(state) && (decodeComponentString((_props$componentOverr4 = props.componentOverrides) === null || _props$componentOverr4 === void 0 ? void 0 : _props$componentOverr4.loadingPane) || /*#__PURE__*/React.createElement(LoadingPaneStateful, props.loadingPaneProps)), !((_props$controlProps9 = props.controlProps) !== null && _props$controlProps9 !== void 0 && _props$controlProps9.hideOutOfOfficeHoursPane) && shouldShowOutOfOfficeHoursPane(state) && (decodeComponentString((_props$componentOverr5 = props.componentOverrides) === null || _props$componentOverr5 === void 0 ? void 0 : _props$componentOverr5.outOfOfficeHoursPane) || /*#__PURE__*/React.createElement(OutOfOfficeHoursPaneStateful, props.outOfOfficeHoursPaneProps)), !((_props$controlProps10 = props.controlProps) !== null && _props$controlProps10 !== void 0 && _props$controlProps10.hideReconnectChatPane) && shouldShowReconnectChatPane(state) && (decodeComponentString((_props$componentOverr6 = props.componentOverrides) === null || _props$componentOverr6 === void 0 ? void 0 : _props$componentOverr6.reconnectChatPane) || /*#__PURE__*/React.createElement(ReconnectChatPaneStateful, {
536
+ })), !((_props$controlProps19 = props.controlProps) !== null && _props$controlProps19 !== void 0 && _props$controlProps19.hideLoadingPane) && shouldShowLoadingPane(state) && (decodeComponentString((_props$componentOverr4 = props.componentOverrides) === null || _props$componentOverr4 === void 0 ? void 0 : _props$componentOverr4.loadingPane) || /*#__PURE__*/React.createElement(LoadingPaneStateful, props.loadingPaneProps)), !((_props$controlProps20 = props.controlProps) !== null && _props$controlProps20 !== void 0 && _props$controlProps20.hideOutOfOfficeHoursPane) && shouldShowOutOfOfficeHoursPane(state) && (decodeComponentString((_props$componentOverr5 = props.componentOverrides) === null || _props$componentOverr5 === void 0 ? void 0 : _props$componentOverr5.outOfOfficeHoursPane) || /*#__PURE__*/React.createElement(OutOfOfficeHoursPaneStateful, props.outOfOfficeHoursPaneProps)), !((_props$controlProps21 = props.controlProps) !== null && _props$controlProps21 !== void 0 && _props$controlProps21.hideReconnectChatPane) && shouldShowReconnectChatPane(state) && (decodeComponentString((_props$componentOverr6 = props.componentOverrides) === null || _props$componentOverr6 === void 0 ? void 0 : _props$componentOverr6.reconnectChatPane) || /*#__PURE__*/React.createElement(ReconnectChatPaneStateful, {
329
537
  reconnectChatProps: props.reconnectChatPaneProps,
330
538
  initStartChat: initStartChatRelay
331
- })), !((_props$controlProps11 = props.controlProps) !== null && _props$controlProps11 !== void 0 && _props$controlProps11.hidePreChatSurveyPane) && shouldShowPreChatSurveyPane(state) && (decodeComponentString((_props$componentOverr7 = props.componentOverrides) === null || _props$componentOverr7 === void 0 ? void 0 : _props$componentOverr7.preChatSurveyPane) || /*#__PURE__*/React.createElement(PreChatSurveyPaneStateful, {
539
+ })), !((_props$controlProps22 = props.controlProps) !== null && _props$controlProps22 !== void 0 && _props$controlProps22.hidePreChatSurveyPane) && shouldShowPreChatSurveyPane(state) && (decodeComponentString((_props$componentOverr7 = props.componentOverrides) === null || _props$componentOverr7 === void 0 ? void 0 : _props$componentOverr7.preChatSurveyPane) || /*#__PURE__*/React.createElement(PreChatSurveyPaneStateful, {
332
540
  surveyProps: props.preChatSurveyPaneProps,
333
541
  initStartChat: initStartChatRelay
334
- })), !((_props$controlProps12 = props.controlProps) !== null && _props$controlProps12 !== void 0 && _props$controlProps12.hideCallingContainer) && shouldShowCallingContainer(state) && /*#__PURE__*/React.createElement(CallingContainerStateful, _extends({
542
+ })), !((_props$controlProps23 = props.controlProps) !== null && _props$controlProps23 !== void 0 && _props$controlProps23.hideCallingContainer) && shouldShowCallingContainer(state) && /*#__PURE__*/React.createElement(CallingContainerStateful, _extends({
335
543
  voiceVideoCallingSdk: voiceVideoCallingSDK
336
- }, props.callingContainerProps)), !((_props$controlProps13 = props.controlProps) !== null && _props$controlProps13 !== void 0 && _props$controlProps13.hideWebChatContainer) && shouldShowWebChatContainer(state) && (decodeComponentString((_props$componentOverr8 = props.componentOverrides) === null || _props$componentOverr8 === void 0 ? void 0 : _props$componentOverr8.webChatContainer) || /*#__PURE__*/React.createElement(WebChatContainerStateful, props.webChatContainerProps)), !((_props$controlProps14 = props.controlProps) !== null && _props$controlProps14 !== void 0 && _props$controlProps14.hideConfirmationPane) && shouldShowConfirmationPane(state) && (decodeComponentString((_props$componentOverr9 = props.componentOverrides) === null || _props$componentOverr9 === void 0 ? void 0 : _props$componentOverr9.confirmationPane) || /*#__PURE__*/React.createElement(ConfirmationPaneStateful, _extends({}, confirmationPaneProps, {
337
- setPostChatContext: setPostChatContextRelay,
338
- prepareEndChat: prepareEndChatRelay
339
- }))), !((_props$controlProps15 = props.controlProps) !== null && _props$controlProps15 !== void 0 && _props$controlProps15.hidePostChatLoadingPane) && shouldShowPostChatLoadingPane(state) && (decodeComponentString((_props$componentOverr10 = props.componentOverrides) === null || _props$componentOverr10 === void 0 ? void 0 : _props$componentOverr10.postChatLoadingPane) || /*#__PURE__*/React.createElement(PostChatLoadingPaneStateful, props.postChatLoadingPaneProps)), shouldShowPostChatSurveyPane(state) && (decodeComponentString((_props$componentOverr11 = props.componentOverrides) === null || _props$componentOverr11 === void 0 ? void 0 : _props$componentOverr11.postChatSurveyPane) || /*#__PURE__*/React.createElement(PostChatSurveyPaneStateful, _extends({}, props.postChatSurveyPaneProps, props.chatSDK))), createFooter(props, state), shouldShowEmailTranscriptPane(state) && (decodeComponentString((_props$componentOverr12 = props.componentOverrides) === null || _props$componentOverr12 === void 0 ? void 0 : _props$componentOverr12.emailTranscriptPane) || /*#__PURE__*/React.createElement(EmailTranscriptPaneStateful, props.emailTranscriptPane))));
544
+ }, props.callingContainerProps)), !((_props$controlProps24 = props.controlProps) !== null && _props$controlProps24 !== void 0 && _props$controlProps24.hideWebChatContainer) && shouldShowWebChatContainer(state) && (decodeComponentString((_props$componentOverr8 = props.componentOverrides) === null || _props$componentOverr8 === void 0 ? void 0 : _props$componentOverr8.webChatContainer) || /*#__PURE__*/React.createElement(WebChatContainerStateful, props.webChatContainerProps)), !((_props$controlProps25 = props.controlProps) !== null && _props$controlProps25 !== void 0 && _props$controlProps25.hideConfirmationPane) && shouldShowConfirmationPane(state) && (decodeComponentString((_props$componentOverr9 = props.componentOverrides) === null || _props$componentOverr9 === void 0 ? void 0 : _props$componentOverr9.confirmationPane) || /*#__PURE__*/React.createElement(ConfirmationPaneStateful, _extends({}, confirmationPaneProps, {
545
+ setPostChatContext: setPostChatContextRelay
546
+ }))), !((_props$controlProps26 = props.controlProps) !== null && _props$controlProps26 !== void 0 && _props$controlProps26.hidePostChatLoadingPane) && shouldShowPostChatLoadingPane(state) && (decodeComponentString((_props$componentOverr10 = props.componentOverrides) === null || _props$componentOverr10 === void 0 ? void 0 : _props$componentOverr10.postChatLoadingPane) || /*#__PURE__*/React.createElement(PostChatLoadingPaneStateful, props.postChatLoadingPaneProps)), shouldShowPostChatSurveyPane(state) && (decodeComponentString((_props$componentOverr11 = props.componentOverrides) === null || _props$componentOverr11 === void 0 ? void 0 : _props$componentOverr11.postChatSurveyPane) || /*#__PURE__*/React.createElement(PostChatSurveyPaneStateful, _extends({}, props.postChatSurveyPaneProps, props.chatSDK))), createFooter(props, state), shouldShowEmailTranscriptPane(state) && (decodeComponentString((_props$componentOverr12 = props.componentOverrides) === null || _props$componentOverr12 === void 0 ? void 0 : _props$componentOverr12.emailTranscriptPane) || /*#__PURE__*/React.createElement(EmailTranscriptPaneStateful, props.emailTranscriptPane)))));
340
547
  };
341
548
  export default LiveChatWidgetStateful;