@microsoft/omnichannel-chat-widget 0.1.0-main.0d584e6 → 0.1.0-main.0d8d3bf

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