@microsoft/omnichannel-chat-widget 0.1.0-main.a72fbb6 → 0.1.0-main.a7b2241

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