@microsoft/omnichannel-chat-widget 0.1.0-main.592da7b → 0.1.0-main.5d6a45b

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