@microsoft/omnichannel-chat-widget 1.3.1-main.da9dc59 → 1.4.1-main.3c12a8b

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 (70) hide show
  1. package/lib/cjs/assets/Icons.js +8 -2
  2. package/lib/cjs/common/telemetry/loggers/ariaTelemetryLogger.js +2 -22
  3. package/lib/cjs/common/utils.js +19 -2
  4. package/lib/cjs/components/emailtranscriptpanestateful/EmailTranscriptPaneStateful.js +4 -1
  5. package/lib/cjs/components/livechatwidget/common/createAdapter.js +5 -0
  6. package/lib/cjs/components/livechatwidget/common/endChat.js +77 -17
  7. package/lib/cjs/components/livechatwidget/common/initWebChatComposer.js +6 -0
  8. package/lib/cjs/components/livechatwidget/common/renderSurveyHelpers.js +11 -9
  9. package/lib/cjs/components/livechatwidget/livechatwidgetstateful/LiveChatWidgetStateful.js +31 -17
  10. package/lib/cjs/components/postchatsurveypanestateful/PostChatSurveyPaneStateful.js +5 -2
  11. package/lib/cjs/components/webchatcontainerstateful/WebChatContainerStateful.js +13 -7
  12. package/lib/cjs/components/webchatcontainerstateful/common/defaultProps/defaultMiddlewareLocalizedTexts.js +6 -3
  13. package/lib/cjs/components/webchatcontainerstateful/common/mockchatsdk.js +3 -0
  14. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/enums/NotificationScenarios.js +1 -0
  15. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachmentMiddleware.js +40 -101
  16. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachments/Attachment.js +92 -0
  17. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachments/AttachmentContent.js +17 -0
  18. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachments/AttachmentIcon.js +21 -0
  19. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachments/DownloadBlockedAttachment.js +36 -0
  20. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachments/FileScanStatus.js +14 -0
  21. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachments/MaliciousAttachment.js +24 -0
  22. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachments/ScanInProgressAttachment.js +24 -0
  23. package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachments/Spinner.js +41 -0
  24. package/lib/cjs/contexts/common/LiveChatWidgetActionType.js +1 -0
  25. package/lib/cjs/contexts/common/LiveChatWidgetContextInitialState.js +2 -1
  26. package/lib/cjs/contexts/createReducer.js +8 -0
  27. package/lib/esm/assets/Icons.js +4 -1
  28. package/lib/esm/common/telemetry/loggers/ariaTelemetryLogger.js +2 -22
  29. package/lib/esm/common/utils.js +16 -0
  30. package/lib/esm/components/emailtranscriptpanestateful/EmailTranscriptPaneStateful.js +5 -2
  31. package/lib/esm/components/livechatwidget/common/createAdapter.js +5 -0
  32. package/lib/esm/components/livechatwidget/common/endChat.js +76 -20
  33. package/lib/esm/components/livechatwidget/common/initWebChatComposer.js +6 -0
  34. package/lib/esm/components/livechatwidget/common/renderSurveyHelpers.js +11 -9
  35. package/lib/esm/components/livechatwidget/livechatwidgetstateful/LiveChatWidgetStateful.js +34 -20
  36. package/lib/esm/components/postchatsurveypanestateful/PostChatSurveyPaneStateful.js +6 -3
  37. package/lib/esm/components/webchatcontainerstateful/WebChatContainerStateful.js +13 -7
  38. package/lib/esm/components/webchatcontainerstateful/common/defaultProps/defaultMiddlewareLocalizedTexts.js +6 -3
  39. package/lib/esm/components/webchatcontainerstateful/common/mockchatsdk.js +3 -0
  40. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/enums/NotificationScenarios.js +1 -0
  41. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachmentMiddleware.js +36 -96
  42. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachments/Attachment.js +84 -0
  43. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachments/AttachmentContent.js +9 -0
  44. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachments/AttachmentIcon.js +13 -0
  45. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachments/DownloadBlockedAttachment.js +28 -0
  46. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachments/FileScanStatus.js +7 -0
  47. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachments/MaliciousAttachment.js +16 -0
  48. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachments/ScanInProgressAttachment.js +16 -0
  49. package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachments/Spinner.js +33 -0
  50. package/lib/esm/contexts/common/LiveChatWidgetActionType.js +1 -0
  51. package/lib/esm/contexts/common/LiveChatWidgetContextInitialState.js +2 -1
  52. package/lib/esm/contexts/createReducer.js +8 -0
  53. package/lib/types/assets/Icons.d.ts +3 -0
  54. package/lib/types/common/utils.d.ts +9 -0
  55. package/lib/types/components/livechatwidget/common/endChat.d.ts +6 -2
  56. package/lib/types/components/livechatwidget/common/renderSurveyHelpers.d.ts +1 -1
  57. package/lib/types/components/webchatcontainerstateful/common/mockchatsdk.d.ts +1 -0
  58. package/lib/types/components/webchatcontainerstateful/webchatcontroller/enums/NotificationScenarios.d.ts +1 -0
  59. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachments/Attachment.d.ts +2 -0
  60. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachments/AttachmentContent.d.ts +2 -0
  61. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachments/AttachmentIcon.d.ts +2 -0
  62. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachments/DownloadBlockedAttachment.d.ts +2 -0
  63. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachments/FileScanStatus.d.ts +6 -0
  64. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachments/MaliciousAttachment.d.ts +2 -0
  65. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachments/ScanInProgressAttachment.d.ts +2 -0
  66. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachments/Spinner.d.ts +2 -0
  67. package/lib/types/contexts/common/ILiveChatWidgetContext.d.ts +2 -1
  68. package/lib/types/contexts/common/ILiveChatWidgetLocalizedTexts.d.ts +16 -0
  69. package/lib/types/contexts/common/LiveChatWidgetActionType.d.ts +2 -1
  70. package/package.json +5 -3
@@ -10,4 +10,7 @@ export const VideoIcon = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3
10
10
  export const VisioIcon = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciDQogICAgdmlld0JveD0iMCAwIDIwNDggMjA0OCINCiAgICB3aWR0aD0iMTJweCINCiAgICBoZWlnaHQ9IjEycHgiPg0KICAgIDxwYXRoIGQ9Ik0yMDQ4IDQ3NXYxNDQ1cTAgMjctMTAgNTB0LTI3IDQwLTQxIDI4LTUwIDEwSDY0MHEtMjcgMC01MC0xMHQtNDAtMjctMjgtNDEtMTAtNTB2LTI1NkgxMTVxLTI0IDAtNDQtOXQtMzctMjUtMjUtMzYtOS00NVY2MjdxMC0yNCA5LTQ0dDI1LTM3IDM2LTI1IDQ1LTloMzk3VjEyOHEwLTI3IDEwLTUwdDI3LTQwIDQxLTI4IDUwLTEwaDkzM3EyNiAwIDQ5IDl0NDIgMjhsMzQ3IDM0N3ExOCAxOCAyNyA0MXQxMCA1MHptLTM4NC0yNTZ2MTY1aDE2NWwtMTY1LTE2NXpNNDkzIDE0MjRoMTYzbDI1NS02NzJINzQ1bC0xNDcgNDI3cS01IDE2LTEwIDMxdC0xMSAzMXEtNDEtMTIzLTgyLTI0NHQtODQtMjQ1SDI0MWwyNDggNjYyIDQgMTB6bTE0NyA0OTZoMTI4MFY1MTJoLTI1NnEtMjcgMC01MC0xMHQtNDAtMjctMjgtNDEtMTAtNTBWMTI4SDY0MHYzODRoMzk3cTI0IDAgNDQgOXQzNyAyNSAyNSAzNiA5IDQ1djkyMnEwIDI0LTkgNDR0LTI1IDM3LTM2IDI1LTQ1IDlINjQwdjI1NnptOTYwLTEyODBsMTkyIDE5Mi0xMjggMTI4djQ0OGgtMjU2djEyOGgtMTI4di0zODRoMTI4djEyOGgxMjhWOTYwbC0xMjgtMTI4IDE5Mi0xOTJ6IiAvPg0KPC9zdmc+";
11
11
  export const WordIcon = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciDQogICAgdmlld0JveD0iMCAwIDIwNDggMjA0OCINCiAgICB3aWR0aD0iMTJweCINCiAgICBoZWlnaHQ9IjEycHgiPg0KICAgIDxwYXRoIGQ9Ik0yMDQ4IDQ3NXYxNDQ1cTAgMjctMTAgNTB0LTI3IDQwLTQxIDI4LTUwIDEwSDY0MHEtMjcgMC01MC0xMHQtNDAtMjctMjgtNDEtMTAtNTB2LTI1NkgxMTVxLTI0IDAtNDQtOXQtMzctMjUtMjUtMzYtOS00NVY2MjdxMC0yNCA5LTQ0dDI1LTM3IDM2LTI1IDQ1LTloMzk3VjEyOHEwLTI3IDEwLTUwdDI3LTQwIDQxLTI4IDUwLTEwaDkzM3EyNiAwIDQ5IDl0NDIgMjhsMzQ3IDM0N3ExOCAxOCAyNyA0MXQxMCA1MHptLTM4NC0yNTZ2MTY1aDE2NWwtMTY1LTE2NXpNMzIwIDE0MjRoMTYxcTItOCA5LTQzdDE4LTgzIDIxLTEwMyAyMi0xMDEgMTYtNzYgOC0zMWw3IDMwcTcgMzAgMTcgNzd0MjMgMTAwIDIzIDEwMyAxOSA4NCAxMCA0M2gxNjBsMTQ4LTY3Mkg4MzRsLTgwIDQzOC0xMDAtNDM4SDUwMmwtOTYgNDQwLTg2LTQ0MEgxNzBsMTUwIDY3MnptMzIwIDQ5NmgxMjgwVjUxMmgtMjU2cS0yNyAwLTUwLTEwdC00MC0yNy0yOC00MS0xMC01MFYxMjhINjQwdjM4NGgzOTdxMjQgMCA0NCA5dDM3IDI1IDI1IDM2IDkgNDV2OTIycTAgMjQtOSA0NHQtMjUgMzctMzYgMjUtNDUgOUg2NDB2MjU2em02NDAtMTAyNFY3NjhoNTEydjEyOGgtNTEyem0wIDI1NnYtMTI4aDUxMnYxMjhoLTUxMnptMCAyNTZ2LTEyOGg1MTJ2MTI4aC01MTJ6IiAvPg0KPC9zdmc+";
12
12
  export const AlertIcon = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/PjwhRE9DVFlQRSBzdmcgIFBVQkxJQyAnLS8vVzNDLy9EVEQgU1ZHIDEuMC8vRU4nICAnaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMS9SRUMtU1ZHLTIwMDEwOTA0L0RURC9zdmcxMC5kdGQnPjxzdmcgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyAwIDAgMjQgMjQiIGlkPSJMYXllcl8xIiB2ZXJzaW9uPSIxLjAiIHZpZXdCb3g9IjAgMCAyNCAyNCIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PHBhdGggZD0iTTEzLDE3aC0ydi0yaDJWMTd6IE0xMywxM2gtMlY3aDJWMTN6Ii8+PGc+PHBhdGggZD0iTTEyLDRjNC40LDAsOCwzLjYsOCw4cy0zLjYsOC04LDhzLTgtMy42LTgtOFM3LjYsNCwxMiw0IE0xMiwyQzYuNSwyLDIsNi41LDIsMTJjMCw1LjUsNC41LDEwLDEwLDEwczEwLTQuNSwxMC0xMCAgIEMyMiw2LjUsMTcuNSwyLDEyLDJMMTIsMnoiLz48L2c+PC9zdmc+";
13
- export const NotificationAlertIcon = "data:image/svg+xml;base64,PHN2ZyBhcmlhLWxhYmVsPSJXYXJuaW5nIiBoZWlnaHQ9IjE5IiB2aWV3Qm94PSIwIDAgMTkgMTkiIHdpZHRoPSIxOSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNOS4zNzUgMEMxMC4yNDA5IDAgMTEuMDcxIDAuMTEwNjc3IDExLjg2NTIgMC4zMzIwMzFDMTIuNjY2IDAuNTUzMzg1IDEzLjQxNDcgMC44NjkxNDEgMTQuMTExMyAxLjI3OTNDMTQuODA3OSAxLjY4Mjk0IDE1LjQzOTUgMi4xNzEyMiAxNi4wMDU5IDIuNzQ0MTRDMTYuNTc4OCAzLjMxMDU1IDE3LjA2NzEgMy45NDIwNiAxNy40NzA3IDQuNjM4NjdDMTcuODgwOSA1LjMzNTI5IDE4LjE5NjYgNi4wODM5OCAxOC40MTggNi44ODQ3N0MxOC42MzkzIDcuNjc5MDQgMTguNzUgOC41MDkxMSAxOC43NSA5LjM3NUMxOC43NSAxMC4yNDA5IDE4LjYzOTMgMTEuMDc0MiAxOC40MTggMTEuODc1QzE4LjE5NjYgMTIuNjY5MyAxNy44ODA5IDEzLjQxNDcgMTcuNDcwNyAxNC4xMTEzQzE3LjA2NzEgMTQuODA3OSAxNi41Nzg4IDE1LjQ0MjcgMTYuMDA1OSAxNi4wMTU2QzE1LjQzOTUgMTYuNTgyIDE0LjgwNzkgMTcuMDcwMyAxNC4xMTEzIDE3LjQ4MDVDMTMuNDE0NyAxNy44ODQxIDEyLjY2NiAxOC4xOTY2IDExLjg2NTIgMTguNDE4QzExLjA3MSAxOC42MzkzIDEwLjI0MDkgMTguNzUgOS4zNzUgMTguNzVDOC41MDkxMSAxOC43NSA3LjY3NTc4IDE4LjYzOTMgNi44NzUgMTguNDE4QzYuMDgwNzMgMTguMTk2NiA1LjMzNTI5IDE3Ljg4NDEgNC42Mzg2NyAxNy40ODA1QzMuOTQyMDYgMTcuMDcwMyAzLjMwNzI5IDE2LjU4MiAyLjczNDM4IDE2LjAxNTZDMi4xNjc5NyAxNS40NDI3IDEuNjc5NjkgMTQuODA3OSAxLjI2OTUzIDE0LjExMTNDMC44NjU4ODUgMTMuNDE0NyAwLjU1MzM4NSAxMi42NjkzIDAuMzMyMDMxIDExLjg3NUMwLjExMDY3NyAxMS4wNzQyIDAgMTAuMjQwOSAwIDkuMzc1QzAgOC41MDkxMSAwLjExMDY3NyA3LjY3OTA0IDAuMzMyMDMxIDYuODg0NzdDMC41NTMzODUgNi4wODM5OCAwLjg2NTg4NSA1LjMzNTI5IDEuMjY5NTMgNC42Mzg2N0MxLjY3OTY5IDMuOTQyMDYgMi4xNjc5NyAzLjMxMDU1IDIuNzM0MzggMi43NDQxNEMzLjMwNzI5IDIuMTcxMjIgMy45NDIwNiAxLjY4Mjk0IDQuNjM4NjcgMS4yNzkzQzUuMzM1MjkgMC44NjkxNDEgNi4wODA3MyAwLjU1MzM4NSA2Ljg3NSAwLjMzMjAzMUM3LjY3NTc4IDAuMTEwNjc3IDguNTA5MTEgMCA5LjM3NSAwWk05LjM3NSAxNy41QzEwLjExNzIgMTcuNSAxMC44MzMzIDE3LjQwMjMgMTEuNTIzNCAxNy4yMDdDMTIuMjIwMSAxNy4wMTE3IDEyLjg2NzggMTYuNzM4MyAxMy40NjY4IDE2LjM4NjdDMTQuMDcyMyAxNi4wMzUyIDE0LjYyMjQgMTUuNjEyIDE1LjExNzIgMTUuMTE3MkMxNS42MTIgMTQuNjIyNCAxNi4wMzUyIDE0LjA3NTUgMTYuMzg2NyAxMy40NzY2QzE2LjczODMgMTIuODcxMSAxNy4wMTE3IDEyLjIyMzMgMTcuMjA3IDExLjUzMzJDMTcuNDAyMyAxMC44NDMxIDE3LjUgMTAuMTIzNyAxNy41IDkuMzc1QzE3LjUgOC42MzI4MSAxNy40MDIzIDcuOTE2NjcgMTcuMjA3IDcuMjI2NTZDMTcuMDExNyA2LjUyOTk1IDE2LjczODMgNS44ODIxNiAxNi4zODY3IDUuMjgzMkMxNi4wMzUyIDQuNjc3NzMgMTUuNjEyIDQuMTI3NiAxNS4xMTcyIDMuNjMyODFDMTQuNjIyNCAzLjEzODAyIDE0LjA3MjMgMi43MTQ4NCAxMy40NjY4IDIuMzYzMjhDMTIuODY3OCAyLjAxMTcyIDEyLjIyMDEgMS43MzgyOCAxMS41MjM0IDEuNTQyOTdDMTAuODMzMyAxLjM0NzY2IDEwLjExNzIgMS4yNSA5LjM3NSAxLjI1QzguNjI2MyAxLjI1IDcuOTA2OSAxLjM0NzY2IDcuMjE2OCAxLjU0Mjk3QzYuNTI2NjkgMS43MzgyOCA1Ljg3ODkxIDIuMDExNzIgNS4yNzM0NCAyLjM2MzI4QzQuNjc0NDggMi43MTQ4NCA0LjEyNzYgMy4xMzgwMiAzLjYzMjgxIDMuNjMyODFDMy4xMzgwMiA0LjEyNzYgMi43MTQ4NCA0LjY3NzczIDIuMzYzMjggNS4yODMyQzIuMDExNzIgNS44ODIxNiAxLjczODI4IDYuNTI5OTUgMS41NDI5NyA3LjIyNjU2QzEuMzQ3NjYgNy45MTY2NyAxLjI1IDguNjMyODEgMS4yNSA5LjM3NUMxLjI1IDEwLjExNzIgMS4zNDc2NiAxMC44MzY2IDEuNTQyOTcgMTEuNTMzMkMxLjczODI4IDEyLjIyMzMgMi4wMTE3MiAxMi44NzExIDIuMzYzMjggMTMuNDc2NkMyLjcxNDg0IDE0LjA3NTUgMy4xMzgwMiAxNC42MjI0IDMuNjMyODEgMTUuMTE3MkM0LjEyNzYgMTUuNjEyIDQuNjc0NDggMTYuMDM1MiA1LjI3MzQ0IDE2LjM4NjdDNS44Nzg5MSAxNi43MzgzIDYuNTI2NjkgMTcuMDExNyA3LjIxNjggMTcuMjA3QzcuOTA2OSAxNy40MDIzIDguNjI2MyAxNy41IDkuMzc1IDE3LjVaTTguNzUgNUgxMFYxMS4yNUg4Ljc1VjVaTTguNzUgMTIuNUgxMFYxMy43NUg4Ljc1VjEyLjVaIj48L3BhdGg+PC9zdmc+";
13
+ export const NotificationAlertIcon = "data:image/svg+xml;base64,PHN2ZyBhcmlhLWxhYmVsPSJXYXJuaW5nIiBoZWlnaHQ9IjE5IiB2aWV3Qm94PSIwIDAgMTkgMTkiIHdpZHRoPSIxOSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNOS4zNzUgMEMxMC4yNDA5IDAgMTEuMDcxIDAuMTEwNjc3IDExLjg2NTIgMC4zMzIwMzFDMTIuNjY2IDAuNTUzMzg1IDEzLjQxNDcgMC44NjkxNDEgMTQuMTExMyAxLjI3OTNDMTQuODA3OSAxLjY4Mjk0IDE1LjQzOTUgMi4xNzEyMiAxNi4wMDU5IDIuNzQ0MTRDMTYuNTc4OCAzLjMxMDU1IDE3LjA2NzEgMy45NDIwNiAxNy40NzA3IDQuNjM4NjdDMTcuODgwOSA1LjMzNTI5IDE4LjE5NjYgNi4wODM5OCAxOC40MTggNi44ODQ3N0MxOC42MzkzIDcuNjc5MDQgMTguNzUgOC41MDkxMSAxOC43NSA5LjM3NUMxOC43NSAxMC4yNDA5IDE4LjYzOTMgMTEuMDc0MiAxOC40MTggMTEuODc1QzE4LjE5NjYgMTIuNjY5MyAxNy44ODA5IDEzLjQxNDcgMTcuNDcwNyAxNC4xMTEzQzE3LjA2NzEgMTQuODA3OSAxNi41Nzg4IDE1LjQ0MjcgMTYuMDA1OSAxNi4wMTU2QzE1LjQzOTUgMTYuNTgyIDE0LjgwNzkgMTcuMDcwMyAxNC4xMTEzIDE3LjQ4MDVDMTMuNDE0NyAxNy44ODQxIDEyLjY2NiAxOC4xOTY2IDExLjg2NTIgMTguNDE4QzExLjA3MSAxOC42MzkzIDEwLjI0MDkgMTguNzUgOS4zNzUgMTguNzVDOC41MDkxMSAxOC43NSA3LjY3NTc4IDE4LjYzOTMgNi44NzUgMTguNDE4QzYuMDgwNzMgMTguMTk2NiA1LjMzNTI5IDE3Ljg4NDEgNC42Mzg2NyAxNy40ODA1QzMuOTQyMDYgMTcuMDcwMyAzLjMwNzI5IDE2LjU4MiAyLjczNDM4IDE2LjAxNTZDMi4xNjc5NyAxNS40NDI3IDEuNjc5NjkgMTQuODA3OSAxLjI2OTUzIDE0LjExMTNDMC44NjU4ODUgMTMuNDE0NyAwLjU1MzM4NSAxMi42NjkzIDAuMzMyMDMxIDExLjg3NUMwLjExMDY3NyAxMS4wNzQyIDAgMTAuMjQwOSAwIDkuMzc1QzAgOC41MDkxMSAwLjExMDY3NyA3LjY3OTA0IDAuMzMyMDMxIDYuODg0NzdDMC41NTMzODUgNi4wODM5OCAwLjg2NTg4NSA1LjMzNTI5IDEuMjY5NTMgNC42Mzg2N0MxLjY3OTY5IDMuOTQyMDYgMi4xNjc5NyAzLjMxMDU1IDIuNzM0MzggMi43NDQxNEMzLjMwNzI5IDIuMTcxMjIgMy45NDIwNiAxLjY4Mjk0IDQuNjM4NjcgMS4yNzkzQzUuMzM1MjkgMC44NjkxNDEgNi4wODA3MyAwLjU1MzM4NSA2Ljg3NSAwLjMzMjAzMUM3LjY3NTc4IDAuMTEwNjc3IDguNTA5MTEgMCA5LjM3NSAwWk05LjM3NSAxNy41QzEwLjExNzIgMTcuNSAxMC44MzMzIDE3LjQwMjMgMTEuNTIzNCAxNy4yMDdDMTIuMjIwMSAxNy4wMTE3IDEyLjg2NzggMTYuNzM4MyAxMy40NjY4IDE2LjM4NjdDMTQuMDcyMyAxNi4wMzUyIDE0LjYyMjQgMTUuNjEyIDE1LjExNzIgMTUuMTE3MkMxNS42MTIgMTQuNjIyNCAxNi4wMzUyIDE0LjA3NTUgMTYuMzg2NyAxMy40NzY2QzE2LjczODMgMTIuODcxMSAxNy4wMTE3IDEyLjIyMzMgMTcuMjA3IDExLjUzMzJDMTcuNDAyMyAxMC44NDMxIDE3LjUgMTAuMTIzNyAxNy41IDkuMzc1QzE3LjUgOC42MzI4MSAxNy40MDIzIDcuOTE2NjcgMTcuMjA3IDcuMjI2NTZDMTcuMDExNyA2LjUyOTk1IDE2LjczODMgNS44ODIxNiAxNi4zODY3IDUuMjgzMkMxNi4wMzUyIDQuNjc3NzMgMTUuNjEyIDQuMTI3NiAxNS4xMTcyIDMuNjMyODFDMTQuNjIyNCAzLjEzODAyIDE0LjA3MjMgMi43MTQ4NCAxMy40NjY4IDIuMzYzMjhDMTIuODY3OCAyLjAxMTcyIDEyLjIyMDEgMS43MzgyOCAxMS41MjM0IDEuNTQyOTdDMTAuODMzMyAxLjM0NzY2IDEwLjExNzIgMS4yNSA5LjM3NSAxLjI1QzguNjI2MyAxLjI1IDcuOTA2OSAxLjM0NzY2IDcuMjE2OCAxLjU0Mjk3QzYuNTI2NjkgMS43MzgyOCA1Ljg3ODkxIDIuMDExNzIgNS4yNzM0NCAyLjM2MzI4QzQuNjc0NDggMi43MTQ4NCA0LjEyNzYgMy4xMzgwMiAzLjYzMjgxIDMuNjMyODFDMy4xMzgwMiA0LjEyNzYgMi43MTQ4NCA0LjY3NzczIDIuMzYzMjggNS4yODMyQzIuMDExNzIgNS44ODIxNiAxLjczODI4IDYuNTI5OTUgMS41NDI5NyA3LjIyNjU2QzEuMzQ3NjYgNy45MTY2NyAxLjI1IDguNjMyODEgMS4yNSA5LjM3NUMxLjI1IDEwLjExNzIgMS4zNDc2NiAxMC44MzY2IDEuNTQyOTcgMTEuNTMzMkMxLjczODI4IDEyLjIyMzMgMi4wMTE3MiAxMi44NzExIDIuMzYzMjggMTMuNDc2NkMyLjcxNDg0IDE0LjA3NTUgMy4xMzgwMiAxNC42MjI0IDMuNjMyODEgMTUuMTE3MkM0LjEyNzYgMTUuNjEyIDQuNjc0NDggMTYuMDM1MiA1LjI3MzQ0IDE2LjM4NjdDNS44Nzg5MSAxNi43MzgzIDYuNTI2NjkgMTcuMDExNyA3LjIxNjggMTcuMjA3QzcuOTA2OSAxNy40MDIzIDguNjI2MyAxNy41IDkuMzc1IDE3LjVaTTguNzUgNUgxMFYxMS4yNUg4Ljc1VjVaTTguNzUgMTIuNUgxMFYxMy43NUg4Ljc1VjEyLjVaIj48L3BhdGg+PC9zdmc+";
14
+ export const FileScanInProgressIcon = "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHZpZXdCb3g9IjAgMCAyMCAyMCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4NCiAgPHBhdGggZD0iTTYgMkM0Ljg5NTQzIDIgNCAyLjg5NTQzIDQgNFY5LjIwNzAzQzQuMzIyMjggOS4xMTU4OCA0LjY1NjU5IDkuMDUzMzcgNSA5LjAyMjQyVjRDNSAzLjQ0NzcyIDUuNDQ3NzIgMyA2IDNIMTBWNi41QzEwIDcuMzI4NDMgMTAuNjcxNiA4IDExLjUgOEgxNVYxNkMxNSAxNi41NTIzIDE0LjU1MjMgMTcgMTQgMTdIMTAuNDAwM0MxMC4yMTc0IDE3LjM1NzggOS45OTY0NyAxNy42OTI5IDkuNzQyODQgMThIMTRDMTUuMTA0NiAxOCAxNiAxNy4xMDQ2IDE2IDE2VjcuNDE0MjFDMTYgNy4wMTYzOSAxNS44NDIgNi42MzQ4NiAxNS41NjA3IDYuMzUzNTVMMTEuNjQ2NCAyLjQzOTM0QzExLjM2NTEgMi4xNTgwNCAxMC45ODM2IDIgMTAuNTg1OCAySDZaTTE0Ljc5MjkgN0gxMS41QzExLjIyMzkgNyAxMSA2Ljc3NjE0IDExIDYuNVYzLjIwNzExTDE0Ljc5MjkgN1pNMSAxNC41QzEgMTYuOTg1MyAzLjAxNDcyIDE5IDUuNSAxOUM3Ljk4NTI4IDE5IDEwIDE2Ljk4NTMgMTAgMTQuNUMxMCAxMi4wMTQ3IDcuOTg1MjggMTAgNS41IDEwQzMuMDE0NzIgMTAgMSAxMi4wMTQ3IDEgMTQuNVpNNy41IDExLjVDNy43NzYxNCAxMS41IDggMTEuNzIzOSA4IDEyVjEzLjVDOCAxMy43NzYxIDcuNzc2MTQgMTQgNy41IDE0SDZDNS43MjM4NiAxNCA1LjUgMTMuNzc2MSA1LjUgMTMuNUM1LjUgMTMuMjIzOSA1LjcyMzg2IDEzIDYgMTNINi40NjgyMUM2LjQxNzg3IDEyLjk3MjIgNi4zNjYyOCAxMi45NDY0IDYuMzEzNTUgMTIuOTIzQzYuMDY4MjQgMTIuODEzNyA1LjgwMzQ0IDEyLjc1NSA1LjUzNDk1IDEyLjc1MDNDNS4yNjY0NiAxMi43NDU2IDQuOTk5NzcgMTIuNzk1IDQuNzUwNzkgMTIuODk1NkM0LjUwMTggMTIuOTk2MiA0LjI3NTYzIDEzLjE0NTkgNC4wODU3NSAxMy4zMzU4QzMuODkwNDggMTMuNTMxIDMuNTczOSAxMy41MzEgMy4zNzg2NCAxMy4zMzU4QzMuMTgzMzggMTMuMTQwNSAzLjE4MzM4IDEyLjgyMzkgMy4zNzg2NCAxMi42Mjg3QzMuNjYzNDYgMTIuMzQzOSA0LjAwMjczIDEyLjExOTMgNC4zNzYyIDExLjk2ODRDNC43NDk2NyAxMS44MTc1IDUuMTQ5NzEgMTEuNzQzNCA1LjU1MjQ1IDExLjc1MDVDNS45NTUxOCAxMS43NTc1IDYuMzUyMzggMTEuODQ1NiA2LjcyMDM0IDEyLjAwOTRDNi44MTYxNyAxMi4wNTIxIDYuOTA5NTEgMTIuMDk5NyA3IDEyLjE1MTlWMTJDNyAxMS43MjM5IDcuMjIzODYgMTEuNSA3LjUgMTEuNVpNNi42MjM4IDE3LjAzMTZDNi4yNTAzMyAxNy4xODI1IDUuODUwMjkgMTcuMjU2NiA1LjQ0NzU1IDE3LjI0OTVDNS4wNDQ4MiAxNy4yNDI1IDQuNjQ3NjIgMTcuMTU0NCA0LjI3OTY2IDE2Ljk5MDZDNC4xODM4MyAxNi45NDc5IDQuMDkwNDkgMTYuOTAwMyA0IDE2Ljg0ODFWMTdDNCAxNy4yNzYxIDMuNzc2MTQgMTcuNSAzLjUgMTcuNUMzLjIyMzg2IDE3LjUgMyAxNy4yNzYxIDMgMTdWMTUuNUMzIDE1LjIyMzkgMy4yMjM4NiAxNSAzLjUgMTVINUM1LjI3NjE0IDE1IDUuNSAxNS4yMjM5IDUuNSAxNS41QzUuNSAxNS43NzYxIDUuMjc2MTQgMTYgNSAxNkg0LjUzMTc5QzQuNTgyMTMgMTYuMDI3OCA0LjYzMzcyIDE2LjA1MzYgNC42ODY0NSAxNi4wNzdDNC45MzE3NiAxNi4xODYzIDUuMTk2NTYgMTYuMjQ1IDUuNDY1MDUgMTYuMjQ5N0M1LjczMzU0IDE2LjI1NDQgNi4wMDAyMyAxNi4yMDUgNi4yNDkyMSAxNi4xMDQ0QzYuNDk4MiAxNi4wMDM4IDYuNzI0MzcgMTUuODU0MSA2LjkxNDI1IDE1LjY2NDJDNy4xMDk1MSAxNS40NjkgNy40MjYxIDE1LjQ2OSA3LjYyMTM2IDE1LjY2NDJDNy44MTY2MiAxNS44NTk1IDcuODE2NjIgMTYuMTc2MSA3LjYyMTM2IDE2LjM3MTNDNy4zMzY1NCAxNi42NTYxIDYuOTk3MjcgMTYuODgwNyA2LjYyMzggMTcuMDMxNloiIGZpbGw9IiMyMTIxMjEiIC8+DQo8L3N2Zz4=";
15
+ export const MaliciousFileIcon = "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHZpZXdCb3g9IjAgMCAyMCAyMCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4NCiAgPHBhdGggZD0iTTQgNEM0IDIuODk1NDMgNC44OTU0MyAyIDYgMkgxMC41ODU4QzEwLjk4MzYgMiAxMS4zNjUxIDIuMTU4MDQgMTEuNjQ2NCAyLjQzOTM0TDE1LjU2MDcgNi4zNTM1NUMxNS44NDIgNi42MzQ4NiAxNiA3LjAxNjM5IDE2IDcuNDE0MjFWMTZDMTYgMTcuMTA0NiAxNS4xMDQ2IDE4IDE0IDE4SDkuNzQyODRDOS45OTY0NyAxNy42OTI5IDEwLjIxNzQgMTcuMzU3OCAxMC40MDAzIDE3SDE0QzE0LjU1MjMgMTcgMTUgMTYuNTUyMyAxNSAxNlY4SDExLjVDMTAuNjcxNiA4IDEwIDcuMzI4NDMgMTAgNi41VjNINkM1LjQ0NzcyIDMgNSAzLjQ0NzcyIDUgNFY5LjAyMjQyQzQuNjU2NTkgOS4wNTMzNyA0LjMyMjI4IDkuMTE1ODggNCA5LjIwNzAzVjRaTTExIDMuMjA3MTFWNi41QzExIDYuNzc2MTQgMTEuMjIzOSA3IDExLjUgN0gxNC43OTI5TDExIDMuMjA3MTFaTTguNjgxOTkgMTcuNjgyQzYuOTI0NjIgMTkuNDM5NCA0LjA3NTM5IDE5LjQzOTQgMi4zMTgwMiAxNy42ODJDMC41NjA2NTkgMTUuOTI0NiAwLjU2MDY1OSAxMy4wNzU0IDIuMzE4MDIgMTEuMzE4QzQuMDc1MzkgOS41NjA2NiA2LjkyNDYyIDkuNTYwNjYgOC42ODE5OSAxMS4zMThDMTAuNDM5NCAxMy4wNzU0IDEwLjQzOTQgMTUuOTI0NiA4LjY4MTk5IDE3LjY4MlpNMy40MDM3NSAxNy4zMDM0QzQuNzc0NjYgMTguMzMxMiA2LjcyODA5IDE4LjIyMTcgNy45NzQ4OCAxNi45NzQ5QzkuMjIxNjcgMTUuNzI4MSA5LjMzMTE2IDEzLjc3NDcgOC4zMDMzNyAxMi40MDM3TDMuNDAzNzUgMTcuMzAzNFpNMi42OTY2NCAxNi41OTYzTDcuNTk2MjYgMTEuNjk2NkM2LjIyNTM1IDEwLjY2ODggNC4yNzE5MiAxMC43NzgzIDMuMDI1MTMgMTIuMDI1MUMxLjc3ODM0IDEzLjI3MTkgMS42Njg4NSAxNS4yMjU0IDIuNjk2NjQgMTYuNTk2M1oiIGZpbGw9IiMyMTIxMjEiIC8+DQo8L3N2Zz4=";
16
+ export const CrossIcon = "data:image/svg+xml;base64,PHN2ZyBjbGFzcz0iIiBmaWxsPSJyZWQiIHN0cm9rZS13aWR0aD0iMyIgZm9jdXNhYmxlPSJmYWxzZSIgaGVpZ2h0PSIxNCIgcm9sZT0icHJlc2VudGF0aW9uIiB2aWV3Qm94PSIwIDAgMTQgMTQiIHdpZHRoPSIxNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNNy43MTA5NCA3TDEzLjEwMTYgMTIuMzk4NEwxMi4zOTg0IDEzLjEwMTZMNyA3LjcxMDk0TDEuNjAxNTYgMTMuMTAxNkwwLjg5ODQzOCAxMi4zOTg0TDYuMjg5MDYgN0wwLjg5ODQzOCAxLjYwMTU2TDEuNjAxNTYgMC44OTg0MzhMNyA2LjI4OTA2TDEyLjM5ODQgMC44OTg0MzhMMTMuMTAxNiAxLjYwMTU2TDcuNzEwOTQgN1oiPjwvcGF0aD48L3N2Zz4=";
@@ -3,29 +3,10 @@ import { AWTLogManager } from "@microsoft/omnichannel-chat-sdk/lib/external/aria
3
3
  import { AWTCustomerContentKind, AWTPiiKind, AWTPropertyType } from "@microsoft/omnichannel-chat-sdk/lib/external/aria/common/Enums";
4
4
  import { Constants, AriaTelemetryConstants, EnvironmentVersion } from "../../Constants";
5
5
  import { TelemetryManager } from "../TelemetryManager";
6
- const AWTDefaultConfiguration = {
7
- collectorUri: "https://browser.pipe.aria.microsoft.com/Collector/3.0/",
8
- cacheMemorySizeLimitInNumberOfEvents: 10000,
9
- disableCookiesUsage: false,
10
- canSendStatEvent: eventName => {
11
- return true;
12
- },
13
- // eslint-disable-line @typescript-eslint/no-unused-vars
14
- clockSkewRefreshDurationInMins: 0
15
- };
16
6
  export const ariaTelemetryLogger = (ariaTelemetryKey, disabledCookieUsage, collectiorUriForTelemetry, ariaTelemetryApplicationName) => {
17
7
  let _logger;
18
-
19
- // AWTLogManager is a global variable. Reset after a logEvent() is required to prevent collisions with other components using AWTLogManager.
20
- const resetAriaLogger = function () {
21
- let configuration = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : AWTDefaultConfiguration;
22
- AWTLogManager.flushAndTeardown();
23
- AWTLogManager._isInitialized = false; // eslint-disable-line @typescript-eslint/no-explicit-any
24
- AWTLogManager._isDestroyed = false; // eslint-disable-line @typescript-eslint/no-explicit-any
25
- _logger = AWTLogManager.initialize(ariaTelemetryKey, configuration);
26
- };
27
8
  const logger = () => {
28
- if (!isNullOrEmptyString(ariaTelemetryKey)) {
9
+ if (isNullOrUndefined(_logger) && !isNullOrEmptyString(ariaTelemetryKey)) {
29
10
  const configuration = {
30
11
  disableCookiesUsage: disabledCookieUsage
31
12
  };
@@ -45,7 +26,7 @@ export const ariaTelemetryLogger = (ariaTelemetryKey, disabledCookieUsage, colle
45
26
  }
46
27
  }
47
28
  try {
48
- resetAriaLogger(configuration);
29
+ _logger = AWTLogManager.initialize(ariaTelemetryKey, configuration);
49
30
  if (_logger === undefined) {
50
31
  _logger = AWTLogManager.getLogger(ariaTelemetryKey);
51
32
  }
@@ -87,7 +68,6 @@ export const ariaTelemetryLogger = (ariaTelemetryKey, disabledCookieUsage, colle
87
68
  eventProperties.properties[ariaTelemetryApplicationName] = nameProperty;
88
69
  }
89
70
  logger() ? logger().logEvent(eventProperties) : console.log("Unable to initialize aria logger");
90
- resetAriaLogger();
91
71
  } catch (error) {
92
72
  console.error("Error in logging telemetry to Aria logger:" + error);
93
73
  }
@@ -396,4 +396,20 @@ export const createFileAndDownload = (fileName, blobData, mimeType) => {
396
396
  document.body.appendChild(aElement);
397
397
  aElement.click();
398
398
  document.body.removeChild(aElement);
399
+ };
400
+
401
+ /**
402
+ *
403
+ * Replace placeholders with format {0}..{n} , in a string with values
404
+ *
405
+ * @param template String with placeholders to be replaced
406
+ * @param values array of values to replace the placeholders
407
+ * @returns formatted string with replaced values
408
+ */
409
+ // use of any for values as array of any type is passed
410
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
411
+ export const formatTemplateString = (templateMessage, values) => {
412
+ return templateMessage.replace(/{(\d+)}/g, (match, index) => {
413
+ return typeof values[index] !== "undefined" ? values[index] : match;
414
+ });
399
415
  };
@@ -1,6 +1,6 @@
1
1
  import { LogLevel, TelemetryEvent } from "../../common/telemetry/TelemetryConstants";
2
2
  import React, { useEffect, useState } from "react";
3
- import { findAllFocusableElement, findParentFocusableElementsWithoutChildContainer, preventFocusToMoveOutOfElement, setFocusOnElement, setFocusOnSendBox, setTabIndices } from "../../common/utils";
3
+ import { findAllFocusableElement, findParentFocusableElementsWithoutChildContainer, formatTemplateString, preventFocusToMoveOutOfElement, setFocusOnElement, setFocusOnSendBox, setTabIndices } from "../../common/utils";
4
4
  import { DimLayer } from "../dimlayer/DimLayer";
5
5
  import { InputValidationPane } from "@microsoft/omnichannel-chat-components";
6
6
  import { LiveChatWidgetActionType } from "../../contexts/common/LiveChatWidgetActionType";
@@ -10,6 +10,7 @@ import { Regex } from "../../common/Constants";
10
10
  import { TelemetryHelper } from "../../common/telemetry/TelemetryHelper";
11
11
  import useChatContextStore from "../../hooks/useChatContextStore";
12
12
  import useChatSDKStore from "../../hooks/useChatSDKStore";
13
+ import { defaultMiddlewareLocalizedTexts } from "../webchatcontainerstateful/common/defaultProps/defaultMiddlewareLocalizedTexts";
13
14
  export const EmailTranscriptPaneStateful = props => {
14
15
  var _props$controlProps;
15
16
  const initialTabIndexMap = new Map();
@@ -46,6 +47,7 @@ export const EmailTranscriptPaneStateful = props => {
46
47
  };
47
48
  try {
48
49
  await (chatSDK === null || chatSDK === void 0 ? void 0 : chatSDK.emailLiveChatTranscript(chatTranscriptBody));
50
+ NotificationHandler.notifySuccess(NotificationScenarios.EmailAddressSaved, defaultMiddlewareLocalizedTexts === null || defaultMiddlewareLocalizedTexts === void 0 ? void 0 : defaultMiddlewareLocalizedTexts.MIDDLEWARE_BANNER_FILE_EMAIL_ADDRESS_RECORDED_SUCCESS);
49
51
  TelemetryHelper.logActionEvent(LogLevel.INFO, {
50
52
  Event: TelemetryEvent.EmailTranscriptSent,
51
53
  Description: "Transcript sent to email successfully."
@@ -57,7 +59,8 @@ export const EmailTranscriptPaneStateful = props => {
57
59
  exception: ex
58
60
  }
59
61
  });
60
- NotificationHandler.notifyError(NotificationScenarios.EmailTranscriptError, (props === null || props === void 0 ? void 0 : props.bannerMessageOnError) ?? "Email transcript to " + email + " failed.");
62
+ const message = formatTemplateString(defaultMiddlewareLocalizedTexts.MIDDLEWARE_BANNER_FILE_EMAIL_ADDRESS_RECORDED_ERROR, [email]);
63
+ NotificationHandler.notifyError(NotificationScenarios.EmailTranscriptError, (props === null || props === void 0 ? void 0 : props.bannerMessageOnError) ?? message);
61
64
  }
62
65
  },
63
66
  onCancel: () => {
@@ -23,6 +23,11 @@ export const createAdapter = async chatSDK => {
23
23
  }
24
24
  }
25
25
  }
26
+ },
27
+ ACSAdapter: {
28
+ fileScan: {
29
+ disabled: false
30
+ }
26
31
  }
27
32
  };
28
33
  let adapter = await chatSDK.createChatAdapter(chatAdapterOptionalParams);
@@ -1,7 +1,7 @@
1
- import { ConfirmationState, Constants, ConversationEndEntity } from "../../../common/Constants";
1
+ import { ConfirmationState, Constants, ConversationEndEntity, ParticipantType } from "../../../common/Constants";
2
2
  import { LogLevel, TelemetryEvent } from "../../../common/telemetry/TelemetryConstants";
3
3
  import { getAuthClientFunction, handleAuthentication } from "./authHelper";
4
- import { getConversationDetailsCall, getWidgetEndChatEventName, isNullOrEmptyString } from "../../../common/utils";
4
+ import { getConversationDetailsCall, getWidgetEndChatEventName } from "../../../common/utils";
5
5
  import { getPostChatContext, initiatePostChat } from "./renderSurveyHelpers";
6
6
  import { BroadcastService } from "@microsoft/omnichannel-chat-components";
7
7
  import { ConversationState } from "../../../contexts/common/ConversationState";
@@ -9,34 +9,43 @@ import { LiveChatWidgetActionType } from "../../../contexts/common/LiveChatWidge
9
9
  import { TelemetryHelper } from "../../../common/telemetry/TelemetryHelper";
10
10
  import { WebChatStoreLoader } from "../../webchatcontainerstateful/webchatcontroller/WebChatStoreLoader";
11
11
  import { defaultWebChatContainerStatefulProps } from "../../webchatcontainerstateful/common/defaultProps/defaultWebChatContainerStatefulProps";
12
+ import { TelemetryManager } from "../../../common/telemetry/TelemetryManager";
12
13
 
13
14
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
14
- const prepareEndChat = async (props, chatSDK, state, dispatch, setAdapter, setWebChatStyles, adapter, uwid) => {
15
+ const prepareEndChat = async (props, chatSDK, state, dispatch, setAdapter, setWebChatStyles, adapter) => {
15
16
  try {
16
- var _conversationDetails$, _state$domainStates, _state$domainStates2;
17
+ var _conversationDetails$, _state$domainStates;
18
+ // Use Case: If call is ongoing, end the call by simulating end call button click
19
+ endVoiceVideoCallIfOngoing(chatSDK, dispatch);
17
20
  const conversationDetails = await getConversationDetailsCall(chatSDK);
18
21
 
19
- // Use Case : When post chat is not configured
22
+ // Use Case: When post chat is not configured
20
23
  if ((conversationDetails === null || conversationDetails === void 0 ? void 0 : (_conversationDetails$ = conversationDetails.canRenderPostChat) === null || _conversationDetails$ === void 0 ? void 0 : _conversationDetails$.toLowerCase()) === Constants.false) {
21
24
  var _state$appStates;
22
25
  // If ended by customer, just close chat
23
26
  if ((state === null || state === void 0 ? void 0 : (_state$appStates = state.appStates) === null || _state$appStates === void 0 ? void 0 : _state$appStates.conversationEndedBy) === ConversationEndEntity.Customer) {
24
- await endChat(props, chatSDK, state, dispatch, setAdapter, setWebChatStyles, adapter, false, false, true, uwid);
27
+ await endChat(props, chatSDK, state, dispatch, setAdapter, setWebChatStyles, adapter, false, false, true);
25
28
  }
26
- //Use Case: If ended by Agent, stay chat in InActive state
29
+ // Use Case: If ended by Agent, stay chat in InActive state
27
30
  return;
28
31
  }
29
32
 
30
- // Use Case : Can render post chat scenarios
31
- await getPostChatContext(chatSDK, state, dispatch);
33
+ // Register post chat participant type
34
+ if ((conversationDetails === null || conversationDetails === void 0 ? void 0 : conversationDetails.participantType) === ParticipantType.Bot || (conversationDetails === null || conversationDetails === void 0 ? void 0 : conversationDetails.participantType) === ParticipantType.User) {
35
+ dispatch({
36
+ type: LiveChatWidgetActionType.SET_POST_CHAT_PARTICIPANT_TYPE,
37
+ payload: conversationDetails === null || conversationDetails === void 0 ? void 0 : conversationDetails.participantType
38
+ });
39
+ }
32
40
 
41
+ // Use Case: Can render post chat scenarios
33
42
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
34
- const postchatContext = state === null || state === void 0 ? void 0 : (_state$domainStates = state.domainStates) === null || _state$domainStates === void 0 ? void 0 : _state$domainStates.postChatContext;
43
+ const postchatContext = (await getPostChatContext(chatSDK, state, dispatch)) ?? (state === null || state === void 0 ? void 0 : (_state$domainStates = state.domainStates) === null || _state$domainStates === void 0 ? void 0 : _state$domainStates.postChatContext);
35
44
  if (postchatContext === undefined) {
36
45
  var _state$appStates2;
37
46
  // For Customer intiated conversations, just close chat widget
38
47
  if ((state === null || state === void 0 ? void 0 : (_state$appStates2 = state.appStates) === null || _state$appStates2 === void 0 ? void 0 : _state$appStates2.conversationEndedBy) === ConversationEndEntity.Customer) {
39
- await endChat(props, chatSDK, state, dispatch, setAdapter, setWebChatStyles, adapter, false, false, true, uwid);
48
+ await endChat(props, chatSDK, state, dispatch, setAdapter, setWebChatStyles, adapter, false, false, true);
40
49
  return;
41
50
  }
42
51
 
@@ -47,10 +56,10 @@ const prepareEndChat = async (props, chatSDK, state, dispatch, setAdapter, setWe
47
56
  });
48
57
  return;
49
58
  }
50
- endChat(props, chatSDK, state, dispatch, setAdapter, setWebChatStyles, adapter, false, true, true, uwid);
59
+ endChat(props, chatSDK, state, dispatch, setAdapter, setWebChatStyles, adapter, false, true, true);
51
60
 
52
61
  // Initiate post chat render
53
- if (state !== null && state !== void 0 && (_state$domainStates2 = state.domainStates) !== null && _state$domainStates2 !== void 0 && _state$domainStates2.postChatContext) {
62
+ if (postchatContext) {
54
63
  await initiatePostChat(props, conversationDetails, state, dispatch, postchatContext);
55
64
  return;
56
65
  }
@@ -65,7 +74,7 @@ const prepareEndChat = async (props, chatSDK, state, dispatch, setAdapter, setWe
65
74
 
66
75
  //Close chat widget for any failure in embedded to allow to show start chat button
67
76
  if (((_props$controlProps = props.controlProps) === null || _props$controlProps === void 0 ? void 0 : _props$controlProps.hideStartChatButton) === false) {
68
- await endChat(props, chatSDK, state, dispatch, setAdapter, setWebChatStyles, adapter, false, false, true, uwid);
77
+ await endChat(props, chatSDK, state, dispatch, setAdapter, setWebChatStyles, adapter, false, false, true);
69
78
  }
70
79
  } finally {
71
80
  //Chat token clean up
@@ -74,8 +83,7 @@ const prepareEndChat = async (props, chatSDK, state, dispatch, setAdapter, setWe
74
83
  };
75
84
 
76
85
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
77
- const endChat = async function (props, chatSDK, state, dispatch, setAdapter, setWebChatStyles, adapter, skipEndChatSDK, skipCloseChat, postMessageToOtherTab) {
78
- let uwid = arguments.length > 10 && arguments[10] !== undefined ? arguments[10] : "";
86
+ const endChat = async (props, chatSDK, state, dispatch, setAdapter, setWebChatStyles, adapter, skipEndChatSDK, skipCloseChat, postMessageToOtherTab) => {
79
87
  if (!skipEndChatSDK && chatSDK.conversation) {
80
88
  try {
81
89
  TelemetryHelper.logSDKEvent(LogLevel.INFO, {
@@ -127,15 +135,39 @@ const endChat = async function (props, chatSDK, state, dispatch, setAdapter, set
127
135
  closeChatWidget(dispatch, props, state);
128
136
  }
129
137
  }
130
- if (postMessageToOtherTab && !isNullOrEmptyString(uwid)) {
138
+ if (postMessageToOtherTab) {
131
139
  const endChatEventName = await getEndChatEventName(chatSDK, props);
132
140
  BroadcastService.postMessage({
133
141
  eventName: endChatEventName,
134
- payload: uwid
142
+ payload: {
143
+ runtimeId: TelemetryManager.InternalTelemetryData.lcwRuntimeId
144
+ }
135
145
  });
136
146
  }
137
147
  };
138
- const endChatStateCleanUp = async dispatch => {
148
+ export const callingStateCleanUp = async dispatch => {
149
+ dispatch({
150
+ type: LiveChatWidgetActionType.SHOW_CALLING_CONTAINER,
151
+ payload: false
152
+ });
153
+ dispatch({
154
+ type: LiveChatWidgetActionType.SET_INCOMING_CALL,
155
+ payload: true
156
+ });
157
+ dispatch({
158
+ type: LiveChatWidgetActionType.DISABLE_VIDEO_CALL,
159
+ payload: true
160
+ });
161
+ dispatch({
162
+ type: LiveChatWidgetActionType.DISABLE_LOCAL_VIDEO,
163
+ payload: true
164
+ });
165
+ dispatch({
166
+ type: LiveChatWidgetActionType.DISABLE_REMOTE_VIDEO,
167
+ payload: true
168
+ });
169
+ };
170
+ export const endChatStateCleanUp = async dispatch => {
139
171
  // Need to clear these states immediately when chat ended from OC.
140
172
  dispatch({
141
173
  type: LiveChatWidgetActionType.SET_LIVE_CHAT_CONTEXT,
@@ -150,7 +182,7 @@ const endChatStateCleanUp = async dispatch => {
150
182
  payload: false
151
183
  });
152
184
  };
153
- const closeChatStateCleanUp = async dispatch => {
185
+ export const closeChatStateCleanUp = async dispatch => {
154
186
  dispatch({
155
187
  type: LiveChatWidgetActionType.SET_CHAT_TOKEN,
156
188
  payload: undefined
@@ -185,6 +217,30 @@ const closeChatStateCleanUp = async dispatch => {
185
217
  }
186
218
  });
187
219
  };
220
+
221
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
222
+ export const endVoiceVideoCallIfOngoing = async (chatSDK, dispatch) => {
223
+ let callId = "";
224
+ try {
225
+ const voiceVideoCallingSdk = await chatSDK.getVoiceVideoCalling();
226
+ if (voiceVideoCallingSdk && voiceVideoCallingSdk.isInACall()) {
227
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
228
+ callId = voiceVideoCallingSdk.callId;
229
+ voiceVideoCallingSdk.stopCall();
230
+ TelemetryHelper.logCallingEvent(LogLevel.INFO, {
231
+ Event: TelemetryEvent.EndCallButtonClick
232
+ }, callId);
233
+ callingStateCleanUp(dispatch);
234
+ }
235
+ } catch (error) {
236
+ TelemetryHelper.logCallingEvent(LogLevel.ERROR, {
237
+ Event: TelemetryEvent.EndCallButtonClickException,
238
+ ExceptionDetails: {
239
+ exception: `Failed to End Call: ${error}`
240
+ }
241
+ }, callId);
242
+ }
243
+ };
188
244
  const closeChatWidget = (dispatch, props, state) => {
189
245
  var _state$appStates3;
190
246
  if (state !== null && state !== void 0 && (_state$appStates3 = state.appStates) !== null && _state$appStates3 !== void 0 && _state$appStates3.hideStartChatButton) {
@@ -63,6 +63,12 @@ export const initWebChatComposer = (props, state, dispatch, chatSDK, endChat) =>
63
63
  payload: ConversationEndEntity.Agent
64
64
  });
65
65
  }
66
+ if ((conversationDetails === null || conversationDetails === void 0 ? void 0 : conversationDetails.participantType) === ParticipantType.Bot || (conversationDetails === null || conversationDetails === void 0 ? void 0 : conversationDetails.participantType) === ParticipantType.User) {
67
+ dispatch({
68
+ type: LiveChatWidgetActionType.SET_POST_CHAT_PARTICIPANT_TYPE,
69
+ payload: conversationDetails === null || conversationDetails === void 0 ? void 0 : conversationDetails.participantType
70
+ });
71
+ }
66
72
  TelemetryHelper.logActionEvent(LogLevel.INFO, {
67
73
  Event: TelemetryEvent.ConversationEndedThreadEventReceived,
68
74
  Description: "Conversation end by agent side or by timeout event received."
@@ -42,24 +42,25 @@ const setSurveyMode = async (props, participantType, state, dispatch) => {
42
42
  return;
43
43
  }
44
44
  };
45
- const renderSurvey = async (state, dispatch) => {
45
+
46
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
47
+ const renderSurvey = async (postChatContext, dispatch) => {
46
48
  if (postChatSurveyMode === PostChatSurveyMode.Link) {
47
49
  setWidgetStateToInactive(dispatch);
48
50
  return;
49
51
  }
50
52
  if (postChatSurveyMode === PostChatSurveyMode.Embed) {
51
- await embedModePostChatWorkflow(state, dispatch);
53
+ await embedModePostChatWorkflow(postChatContext, dispatch);
52
54
  }
53
55
  };
54
56
 
55
57
  // Function for embed mode postchat workflow which is essentially same for both customer and agent
56
58
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
57
- const embedModePostChatWorkflow = async (state, dispatch) => {
58
- var _state$domainStates2;
59
+ const embedModePostChatWorkflow = async (postChatContext, dispatch) => {
59
60
  TelemetryHelper.logActionEvent(LogLevel.INFO, {
60
61
  Event: TelemetryEvent.EmbedModePostChatWorkflowStarted
61
62
  });
62
- if (state !== null && state !== void 0 && (_state$domainStates2 = state.domainStates) !== null && _state$domainStates2 !== void 0 && _state$domainStates2.postChatContext) {
63
+ if (postChatContext) {
63
64
  dispatch({
64
65
  type: LiveChatWidgetActionType.SET_CONVERSATION_STATE,
65
66
  payload: ConversationState.PostchatLoading
@@ -70,7 +71,7 @@ const embedModePostChatWorkflow = async (state, dispatch) => {
70
71
  payload: ConversationState.Postchat
71
72
  });
72
73
  } else {
73
- const error = `Conversation was Ended but App State was not set correctly: postChatContext = ${state.domainStates.postChatContext}`;
74
+ const error = `Conversation was Ended but App State was not set correctly: postChatContext = ${postChatContext}`;
74
75
  TelemetryHelper.logActionEvent(LogLevel.ERROR, {
75
76
  Event: TelemetryEvent.AppStatesException,
76
77
  ExceptionDetails: {
@@ -86,7 +87,7 @@ const initiatePostChat = async (props, conversationDetailsParam, state, dispatch
86
87
  conversationDetails = conversationDetailsParam;
87
88
  const participantType = ((_conversationDetails = conversationDetails) === null || _conversationDetails === void 0 ? void 0 : _conversationDetails.participantType) ?? postchatContext.participantType;
88
89
  await setSurveyMode(props, participantType, state, dispatch);
89
- await renderSurvey(state, dispatch);
90
+ await renderSurvey(postchatContext, dispatch);
90
91
  };
91
92
 
92
93
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
@@ -99,8 +100,8 @@ const isPostChatEnabled = (props, state) => {
99
100
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
100
101
  const getPostChatContext = async (chatSDK, state, dispatch) => {
101
102
  try {
102
- var _state$domainStates3;
103
- if ((state === null || state === void 0 ? void 0 : (_state$domainStates3 = state.domainStates) === null || _state$domainStates3 === void 0 ? void 0 : _state$domainStates3.postChatContext) === undefined) {
103
+ var _state$domainStates2;
104
+ if ((state === null || state === void 0 ? void 0 : (_state$domainStates2 = state.domainStates) === null || _state$domainStates2 === void 0 ? void 0 : _state$domainStates2.postChatContext) === undefined) {
104
105
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
105
106
  const context = await chatSDK.getPostChatSurveyContext();
106
107
  TelemetryHelper.logSDKEvent(LogLevel.INFO, {
@@ -111,6 +112,7 @@ const getPostChatContext = async (chatSDK, state, dispatch) => {
111
112
  type: LiveChatWidgetActionType.SET_POST_CHAT_CONTEXT,
112
113
  payload: context
113
114
  });
115
+ return context;
114
116
  }
115
117
  } catch (error) {
116
118
  TelemetryHelper.logSDKEvent(LogLevel.INFO, {
@@ -6,9 +6,9 @@ import { ConfirmationState, Constants, ConversationEndEntity, E2VVOptions, LiveW
6
6
  import { Stack } from "@fluentui/react";
7
7
  import React, { useEffect, useRef, useState } from "react";
8
8
  import { checkIfConversationStillValid, initStartChat, prepareStartChat, setPreChatAndInitiateChat } from "../common/startChat";
9
- import { createTimer, getBroadcastChannelName, getConversationDetailsCall, getLocaleDirection, getStateFromCache, getWidgetCacheIdfromProps, getWidgetEndChatEventName, isNullOrEmptyString, isUndefinedOrEmpty, newGuid } from "../../../common/utils";
9
+ import { createTimer, getBroadcastChannelName, getConversationDetailsCall, getLocaleDirection, getStateFromCache, getWidgetCacheIdfromProps, getWidgetEndChatEventName, isNullOrEmptyString, isNullOrUndefined, isUndefinedOrEmpty } from "../../../common/utils";
10
10
  import { defaultClientDataStoreProvider, isCookieAllowed } from "../../../common/storage/default/defaultClientDataStoreProvider";
11
- import { endChat, prepareEndChat } from "../common/endChat";
11
+ import { endChat, endChatStateCleanUp, prepareEndChat } from "../common/endChat";
12
12
  import { handleChatReconnect, isPersistentEnabled, isReconnectEnabled } from "../common/reconnectChatHelper";
13
13
  import { shouldShowCallingContainer, shouldShowChatButton, shouldShowConfirmationPane, shouldShowEmailTranscriptPane, shouldShowHeader, shouldShowLoadingPane, shouldShowOutOfOfficeHoursPane, shouldShowPostChatLoadingPane, shouldShowPostChatSurveyPane, shouldShowPreChatSurveyPane, shouldShowProactiveChatPane, shouldShowReconnectChatPane, shouldShowWebChatContainer } from "../../../controller/componentController";
14
14
  import { ActivityStreamHandler } from "../common/ActivityStreamHandler";
@@ -30,7 +30,7 @@ import PreChatSurveyPaneStateful from "../../prechatsurveypanestateful/PreChatSu
30
30
  import ProactiveChatPaneStateful from "../../proactivechatpanestateful/ProactiveChatPaneStateful";
31
31
  import ReconnectChatPaneStateful from "../../reconnectchatpanestateful/ReconnectChatPaneStateful";
32
32
  import { TelemetryHelper } from "../../../common/telemetry/TelemetryHelper";
33
- import { TelemetryTimers } from "../../../common/telemetry/TelemetryManager";
33
+ import { TelemetryManager, TelemetryTimers } from "../../../common/telemetry/TelemetryManager";
34
34
  import WebChatContainerStateful from "../../webchatcontainerstateful/WebChatContainerStateful";
35
35
  import createDownloadTranscriptProps from "../common/createDownloadTranscriptProps";
36
36
  import { createFooter } from "../common/createFooter";
@@ -50,8 +50,10 @@ import { startProactiveChat } from "../common/startProactiveChat";
50
50
  import useChatAdapterStore from "../../../hooks/useChatAdapterStore";
51
51
  import useChatContextStore from "../../../hooks/useChatContextStore";
52
52
  import useChatSDKStore from "../../../hooks/useChatSDKStore";
53
+ import { defaultAdaptiveCardStyles } from "../../webchatcontainerstateful/common/defaultStyles/defaultAdaptiveCardStyles";
54
+ import { uuidv4 } from "@microsoft/omnichannel-chat-sdk";
53
55
  export const LiveChatWidgetStateful = props => {
54
- var _props$webChatContain, _props$styleProps, _chatSDK$omnichannelC, _props$controlProps, _props$controlProps2, _state$appStates7, _props$webChatContain5, _state$appStates14, _props$webChatContain6, _props$controlProps11, _props$draggableChatW, _props$draggableChatW2, _props$draggableChatW3, _props$draggableChatW4, _props$draggableChatW5, _livechatProps$webCha, _livechatProps$styleP, _livechatProps$contro, _livechatProps$contro2, _livechatProps$compon, _livechatProps$contro3, _livechatProps$compon2, _livechatProps$contro4, _livechatProps$compon3, _livechatProps$contro5, _livechatProps$compon4, _livechatProps$contro6, _livechatProps$compon5, _livechatProps$contro7, _livechatProps$compon6, _livechatProps$contro8, _livechatProps$compon7, _livechatProps$contro9, _livechatProps$contro10, _livechatProps$compon8, _livechatProps$contro11, _livechatProps$compon9, _livechatProps$contro12, _livechatProps$compon10, _livechatProps$compon11, _livechatProps$compon12;
56
+ var _props$webChatContain, _props$styleProps, _chatSDK$omnichannelC, _props$controlProps, _props$controlProps2, _state$appStates7, _props$webChatContain5, _state$appStates14, _props$webChatContain6, _props$controlProps11, _props$draggableChatW, _props$draggableChatW2, _props$draggableChatW3, _props$draggableChatW4, _props$draggableChatW5, _props$webChatContain7, _props$webChatContain8, _props$webChatContain9, _props$webChatContain10, _livechatProps$webCha, _livechatProps$styleP, _livechatProps$contro, _livechatProps$contro2, _livechatProps$compon, _livechatProps$contro3, _livechatProps$compon2, _livechatProps$contro4, _livechatProps$compon3, _livechatProps$contro5, _livechatProps$compon4, _livechatProps$contro6, _livechatProps$compon5, _livechatProps$contro7, _livechatProps$compon6, _livechatProps$contro8, _livechatProps$compon7, _livechatProps$contro9, _livechatProps$contro10, _livechatProps$compon8, _livechatProps$contro11, _livechatProps$compon9, _livechatProps$contro12, _livechatProps$compon10, _livechatProps$compon11, _livechatProps$compon12;
55
57
  const [state, dispatch] = useChatContextStore();
56
58
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
57
59
  const [adapter, setAdapter] = useChatAdapterStore();
@@ -84,8 +86,6 @@ export const LiveChatWidgetStateful = props => {
84
86
  const lastLWICheckTimeRef = useRef(0);
85
87
  let optionalParams;
86
88
  let activeCachedChatExist = false;
87
- const uwid = useRef(""); // its an uniqueid per chatr instance
88
-
89
89
  const setOptionalParams = () => {
90
90
  var _state$appStates, _state$domainStates, _state$appStates3;
91
91
  if (!isUndefinedOrEmpty((_state$appStates = state.appStates) === null || _state$appStates === void 0 ? void 0 : _state$appStates.reconnectId)) {
@@ -186,7 +186,6 @@ export const LiveChatWidgetStateful = props => {
186
186
  setupClientDataStore();
187
187
  registerTelemetryLoggers(props, dispatch);
188
188
  createInternetConnectionChangeHandler();
189
- uwid.current = newGuid();
190
189
  dispatch({
191
190
  type: LiveChatWidgetActionType.SET_WIDGET_ELEMENT_ID,
192
191
  payload: widgetElementId
@@ -319,23 +318,27 @@ export const LiveChatWidgetStateful = props => {
319
318
 
320
319
  // Start chat from SDK Event
321
320
  BroadcastService.getMessageByEventName(BroadcastEvent.StartChat).subscribe(msg => {
322
- var _msg$payload4;
321
+ var _msg$payload4, _msg$payload5, _msg$payload6;
322
+ // If the startChat event is not initiated by the same tab. Ignore the call
323
+ if (!isNullOrUndefined(msg === null || msg === void 0 ? void 0 : (_msg$payload4 = msg.payload) === null || _msg$payload4 === void 0 ? void 0 : _msg$payload4.runtimeId) && (msg === null || msg === void 0 ? void 0 : (_msg$payload5 = msg.payload) === null || _msg$payload5 === void 0 ? void 0 : _msg$payload5.runtimeId) !== TelemetryManager.InternalTelemetryData.lcwRuntimeId) {
324
+ return;
325
+ }
323
326
  let stateWithUpdatedContext = state;
324
- if (msg !== null && msg !== void 0 && (_msg$payload4 = msg.payload) !== null && _msg$payload4 !== void 0 && _msg$payload4.customContext) {
325
- var _msg$payload5, _msg$payload6;
327
+ if (msg !== null && msg !== void 0 && (_msg$payload6 = msg.payload) !== null && _msg$payload6 !== void 0 && _msg$payload6.customContext) {
328
+ var _msg$payload7, _msg$payload8;
326
329
  TelemetryHelper.logActionEvent(LogLevel.INFO, {
327
330
  Event: TelemetryEvent.CustomContextReceived,
328
331
  Description: "CustomContext received through startChat event."
329
332
  });
330
333
  dispatch({
331
334
  type: LiveChatWidgetActionType.SET_CUSTOM_CONTEXT,
332
- payload: msg === null || msg === void 0 ? void 0 : (_msg$payload5 = msg.payload) === null || _msg$payload5 === void 0 ? void 0 : _msg$payload5.customContext
335
+ payload: msg === null || msg === void 0 ? void 0 : (_msg$payload7 = msg.payload) === null || _msg$payload7 === void 0 ? void 0 : _msg$payload7.customContext
333
336
  });
334
337
  stateWithUpdatedContext = {
335
338
  ...state,
336
339
  domainStates: {
337
340
  ...state.domainStates,
338
- customContext: msg === null || msg === void 0 ? void 0 : (_msg$payload6 = msg.payload) === null || _msg$payload6 === void 0 ? void 0 : _msg$payload6.customContext
341
+ customContext: msg === null || msg === void 0 ? void 0 : (_msg$payload8 = msg.payload) === null || _msg$payload8 === void 0 ? void 0 : _msg$payload8.customContext
339
342
  }
340
343
  };
341
344
  }
@@ -413,9 +416,16 @@ export const LiveChatWidgetStateful = props => {
413
416
  // Listen to end chat event from other tabs
414
417
  const endChatEventName = getWidgetEndChatEventName(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$controlProps10 = props.controlProps) === null || _props$controlProps10 === void 0 ? void 0 : _props$controlProps10.widgetInstanceId) ?? "");
415
418
  BroadcastService.getMessageByEventName(endChatEventName).subscribe(msg => {
416
- console.log("Receiving end chat event", JSON.stringify(msg.payload));
417
- if (msg.payload !== uwid.current) {
419
+ var _msg$payload9;
420
+ if ((msg === null || msg === void 0 ? void 0 : (_msg$payload9 = msg.payload) === null || _msg$payload9 === void 0 ? void 0 : _msg$payload9.runtimeId) !== TelemetryManager.InternalTelemetryData.lcwRuntimeId) {
418
421
  endChat(props, chatSDK, state, dispatch, setAdapter, setWebChatStyles, adapter, true, false, false);
422
+ endChatStateCleanUp(dispatch);
423
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
424
+ chatSDK.requestId = uuidv4();
425
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
426
+ chatSDK.chatToken = {};
427
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
428
+ chatSDK.reconnectId = null;
419
429
  return;
420
430
  }
421
431
  });
@@ -543,13 +553,13 @@ export const LiveChatWidgetStateful = props => {
543
553
 
544
554
  // If start chat failed, and C2 is trying to close chat widget
545
555
  if (state !== null && state !== void 0 && (_state$appStates9 = state.appStates) !== null && _state$appStates9 !== void 0 && _state$appStates9.startChatFailed || (state === null || state === void 0 ? void 0 : (_state$appStates10 = state.appStates) === null || _state$appStates10 === void 0 ? void 0 : _state$appStates10.conversationState) === ConversationState.Postchat) {
546
- endChat(props, chatSDK, state, dispatch, setAdapter, setWebChatStyles, adapter, true, false, true, uwid.current);
556
+ endChat(props, chatSDK, state, dispatch, setAdapter, setWebChatStyles, adapter, true, false, true);
547
557
  return;
548
558
  }
549
559
 
550
560
  // Scenario -> Chat was InActive and closing the chat (Refresh scenario on post chat)
551
561
  if ((state === null || state === void 0 ? void 0 : (_state$appStates11 = state.appStates) === null || _state$appStates11 === void 0 ? void 0 : _state$appStates11.conversationState) === ConversationState.InActive) {
552
- endChat(props, chatSDK, state, dispatch, setAdapter, setWebChatStyles, adapter, false, false, true, uwid.current);
562
+ endChat(props, chatSDK, state, dispatch, setAdapter, setWebChatStyles, adapter, false, false, true);
553
563
  return;
554
564
  }
555
565
  if ((state === null || state === void 0 ? void 0 : (_state$appStates12 = state.appStates) === null || _state$appStates12 === void 0 ? void 0 : _state$appStates12.conversationEndedBy) === ConversationEndEntity.Agent || (state === null || state === void 0 ? void 0 : (_state$appStates13 = state.appStates) === null || _state$appStates13 === void 0 ? void 0 : _state$appStates13.conversationEndedBy) === ConversationEndEntity.Bot) {
@@ -560,7 +570,7 @@ export const LiveChatWidgetStateful = props => {
560
570
  }
561
571
 
562
572
  // All other cases
563
- prepareEndChat(props, chatSDK, state, dispatch, setAdapter, setWebChatStyles, adapter, uwid.current);
573
+ prepareEndChat(props, chatSDK, state, dispatch, setAdapter, setWebChatStyles, adapter);
564
574
  }, [state === null || state === void 0 ? void 0 : (_state$appStates14 = state.appStates) === null || _state$appStates14 === void 0 ? void 0 : _state$appStates14.conversationEndedBy]);
565
575
 
566
576
  // Publish chat widget state
@@ -618,13 +628,13 @@ export const LiveChatWidgetStateful = props => {
618
628
  };
619
629
  const setPostChatContextRelay = () => setPostChatContextAndLoadSurvey(chatSDK, dispatch);
620
630
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
621
- const endChatRelay = (adapter, skipEndChatSDK, skipCloseChat, postMessageToOtherTab) => endChat(props, chatSDK, state, dispatch, setAdapter, setWebChatStyles, adapter, skipEndChatSDK, skipCloseChat, postMessageToOtherTab, uwid.current);
631
+ const endChatRelay = (adapter, skipEndChatSDK, skipCloseChat, postMessageToOtherTab) => endChat(props, chatSDK, state, dispatch, setAdapter, setWebChatStyles, adapter, skipEndChatSDK, skipCloseChat, postMessageToOtherTab);
622
632
  const prepareStartChatRelay = () => prepareStartChat(props, chatSDK, state, dispatch, setAdapter);
623
633
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
624
634
  const initStartChatRelay = (optionalParams, persistedState) => initStartChat(chatSDK, dispatch, setAdapter, state, props, optionalParams, persistedState);
625
635
  const confirmationPaneProps = initConfirmationPropsComposer(props);
626
636
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
627
- const prepareEndChatRelay = () => prepareEndChat(props, chatSDK, state, dispatch, setAdapter, setWebChatStyles, adapter, uwid.current);
637
+ const prepareEndChatRelay = () => prepareEndChat(props, chatSDK, state, dispatch, setAdapter, setWebChatStyles, adapter);
628
638
  const webChatProps = initWebChatComposer(props, state, dispatch, chatSDK, endChatRelay);
629
639
  const downloadTranscriptProps = createDownloadTranscriptProps(props.downloadTranscriptProps, {
630
640
  ...(defaultWebChatContainerStatefulProps === null || defaultWebChatContainerStatefulProps === void 0 ? void 0 : defaultWebChatContainerStatefulProps.webChatStyles),
@@ -668,7 +678,11 @@ export const LiveChatWidgetStateful = props => {
668
678
  background: ${scrollbarProps.thumbHoverColor};
669
679
  }
670
680
  `), /*#__PURE__*/React.createElement(DraggableChatWidget, chatWidgetDraggableConfig, /*#__PURE__*/React.createElement(Composer, _extends({}, webChatProps, {
671
- styleOptions: webChatStyles,
681
+ styleOptions: {
682
+ ...webChatStyles,
683
+ bubbleBackground: ((_props$webChatContain7 = props.webChatContainerProps) === null || _props$webChatContain7 === void 0 ? void 0 : (_props$webChatContain8 = _props$webChatContain7.adaptiveCardStyles) === null || _props$webChatContain8 === void 0 ? void 0 : _props$webChatContain8.background) ?? defaultAdaptiveCardStyles.background,
684
+ bubbleTextColor: ((_props$webChatContain9 = props.webChatContainerProps) === null || _props$webChatContain9 === void 0 ? void 0 : (_props$webChatContain10 = _props$webChatContain9.adaptiveCardStyles) === null || _props$webChatContain10 === void 0 ? void 0 : _props$webChatContain10.color) ?? defaultAdaptiveCardStyles.color
685
+ },
672
686
  directLine: ((_livechatProps$webCha = livechatProps.webChatContainerProps) === null || _livechatProps$webCha === void 0 ? void 0 : _livechatProps$webCha.directLine) ?? adapter ?? defaultWebChatContainerStatefulProps.directLine
673
687
  }), /*#__PURE__*/React.createElement(Stack, {
674
688
  id: widgetElementId,
@@ -1,6 +1,6 @@
1
1
  import { LogLevel, TelemetryEvent } from "../../common/telemetry/TelemetryConstants";
2
2
  import React, { useEffect } from "react";
3
- import { ConversationEndEntity } from "../../common/Constants";
3
+ import { ParticipantType } from "../../common/Constants";
4
4
  import { CustomerVoiceEvents } from "./enums/CustomerVoiceEvents";
5
5
  import { PostChatSurveyMode } from "./enums/PostChatSurveyMode";
6
6
  import { PostChatSurveyPane } from "@microsoft/omnichannel-chat-components";
@@ -18,14 +18,17 @@ const generateSurveyInviteLink = function (surveyInviteLink, isEmbed, locale, co
18
18
  return surveyLink;
19
19
  };
20
20
  export const PostChatSurveyPaneStateful = props => {
21
- var _props$styleProps, _state$appStates, _state$appStates2, _props$controlProps;
21
+ var _props$styleProps, _state$appStates, _props$controlProps;
22
22
  const [state] = useChatContextStore();
23
23
  const generalStyleProps = Object.assign({}, defaultGeneralPostChatSurveyPaneStyleProps, (_props$styleProps = props.styleProps) === null || _props$styleProps === void 0 ? void 0 : _props$styleProps.generalStyleProps, {
24
24
  display: state.appStates.isMinimized ? "none" : "contents"
25
25
  });
26
26
  let surveyInviteLink = "";
27
27
  const surveyMode = (state === null || state === void 0 ? void 0 : (_state$appStates = state.appStates) === null || _state$appStates === void 0 ? void 0 : _state$appStates.selectedSurveyMode) === PostChatSurveyMode.Embed;
28
- if ((state === null || state === void 0 ? void 0 : (_state$appStates2 = state.appStates) === null || _state$appStates2 === void 0 ? void 0 : _state$appStates2.conversationEndedBy) === ConversationEndEntity.Bot && state.domainStates.postChatContext.botSurveyInviteLink) {
28
+ if (state.domainStates.postChatContext.botSurveyInviteLink &&
29
+ // Bot survey enabled
30
+ state.appStates.postChatParticipantType === ParticipantType.Bot) {
31
+ // Only Bot has engaged
29
32
  surveyInviteLink = generateSurveyInviteLink(state.domainStates.postChatContext.botSurveyInviteLink, surveyMode, state.domainStates.postChatContext.botFormsProLocale, props.isCustomerVoiceSurveyCompact ?? true);
30
33
  } else {
31
34
  surveyInviteLink = generateSurveyInviteLink(state.domainStates.postChatContext.surveyInviteLink, surveyMode, state.domainStates.postChatContext.formsProLocale, props.isCustomerVoiceSurveyCompact ?? true);