@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.
- package/lib/cjs/assets/Icons.js +8 -2
- package/lib/cjs/common/telemetry/loggers/ariaTelemetryLogger.js +2 -22
- package/lib/cjs/common/utils.js +19 -2
- package/lib/cjs/components/emailtranscriptpanestateful/EmailTranscriptPaneStateful.js +4 -1
- package/lib/cjs/components/livechatwidget/common/createAdapter.js +5 -0
- package/lib/cjs/components/livechatwidget/common/endChat.js +77 -17
- package/lib/cjs/components/livechatwidget/common/initWebChatComposer.js +6 -0
- package/lib/cjs/components/livechatwidget/common/renderSurveyHelpers.js +11 -9
- package/lib/cjs/components/livechatwidget/livechatwidgetstateful/LiveChatWidgetStateful.js +31 -17
- package/lib/cjs/components/postchatsurveypanestateful/PostChatSurveyPaneStateful.js +5 -2
- package/lib/cjs/components/webchatcontainerstateful/WebChatContainerStateful.js +13 -7
- package/lib/cjs/components/webchatcontainerstateful/common/defaultProps/defaultMiddlewareLocalizedTexts.js +6 -3
- package/lib/cjs/components/webchatcontainerstateful/common/mockchatsdk.js +3 -0
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/enums/NotificationScenarios.js +1 -0
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachmentMiddleware.js +40 -101
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachments/Attachment.js +92 -0
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachments/AttachmentContent.js +17 -0
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachments/AttachmentIcon.js +21 -0
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachments/DownloadBlockedAttachment.js +36 -0
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachments/FileScanStatus.js +14 -0
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachments/MaliciousAttachment.js +24 -0
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachments/ScanInProgressAttachment.js +24 -0
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachments/Spinner.js +41 -0
- package/lib/cjs/contexts/common/LiveChatWidgetActionType.js +1 -0
- package/lib/cjs/contexts/common/LiveChatWidgetContextInitialState.js +2 -1
- package/lib/cjs/contexts/createReducer.js +8 -0
- package/lib/esm/assets/Icons.js +4 -1
- package/lib/esm/common/telemetry/loggers/ariaTelemetryLogger.js +2 -22
- package/lib/esm/common/utils.js +16 -0
- package/lib/esm/components/emailtranscriptpanestateful/EmailTranscriptPaneStateful.js +5 -2
- package/lib/esm/components/livechatwidget/common/createAdapter.js +5 -0
- package/lib/esm/components/livechatwidget/common/endChat.js +76 -20
- package/lib/esm/components/livechatwidget/common/initWebChatComposer.js +6 -0
- package/lib/esm/components/livechatwidget/common/renderSurveyHelpers.js +11 -9
- package/lib/esm/components/livechatwidget/livechatwidgetstateful/LiveChatWidgetStateful.js +34 -20
- package/lib/esm/components/postchatsurveypanestateful/PostChatSurveyPaneStateful.js +6 -3
- package/lib/esm/components/webchatcontainerstateful/WebChatContainerStateful.js +13 -7
- package/lib/esm/components/webchatcontainerstateful/common/defaultProps/defaultMiddlewareLocalizedTexts.js +6 -3
- package/lib/esm/components/webchatcontainerstateful/common/mockchatsdk.js +3 -0
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/enums/NotificationScenarios.js +1 -0
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachmentMiddleware.js +36 -96
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachments/Attachment.js +84 -0
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachments/AttachmentContent.js +9 -0
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachments/AttachmentIcon.js +13 -0
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachments/DownloadBlockedAttachment.js +28 -0
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachments/FileScanStatus.js +7 -0
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachments/MaliciousAttachment.js +16 -0
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachments/ScanInProgressAttachment.js +16 -0
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachments/Spinner.js +33 -0
- package/lib/esm/contexts/common/LiveChatWidgetActionType.js +1 -0
- package/lib/esm/contexts/common/LiveChatWidgetContextInitialState.js +2 -1
- package/lib/esm/contexts/createReducer.js +8 -0
- package/lib/types/assets/Icons.d.ts +3 -0
- package/lib/types/common/utils.d.ts +9 -0
- package/lib/types/components/livechatwidget/common/endChat.d.ts +6 -2
- package/lib/types/components/livechatwidget/common/renderSurveyHelpers.d.ts +1 -1
- package/lib/types/components/webchatcontainerstateful/common/mockchatsdk.d.ts +1 -0
- package/lib/types/components/webchatcontainerstateful/webchatcontroller/enums/NotificationScenarios.d.ts +1 -0
- package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachments/Attachment.d.ts +2 -0
- package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachments/AttachmentContent.d.ts +2 -0
- package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachments/AttachmentIcon.d.ts +2 -0
- package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachments/DownloadBlockedAttachment.d.ts +2 -0
- package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachments/FileScanStatus.d.ts +6 -0
- package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachments/MaliciousAttachment.d.ts +2 -0
- package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachments/ScanInProgressAttachment.d.ts +2 -0
- package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachments/Spinner.d.ts +2 -0
- package/lib/types/contexts/common/ILiveChatWidgetContext.d.ts +2 -1
- package/lib/types/contexts/common/ILiveChatWidgetLocalizedTexts.d.ts +16 -0
- package/lib/types/contexts/common/LiveChatWidgetActionType.d.ts +2 -1
- package/package.json +5 -3
package/lib/esm/assets/Icons.js
CHANGED
|
@@ -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
|
-
|
|
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
|
}
|
package/lib/esm/common/utils.js
CHANGED
|
@@ -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
|
-
|
|
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: () => {
|
|
@@ -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
|
|
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
|
|
15
|
+
const prepareEndChat = async (props, chatSDK, state, dispatch, setAdapter, setWebChatStyles, adapter) => {
|
|
15
16
|
try {
|
|
16
|
-
var _conversationDetails$, _state$domainStates
|
|
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
|
|
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
|
|
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
|
-
//
|
|
31
|
-
|
|
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
|
|
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
|
|
59
|
+
endChat(props, chatSDK, state, dispatch, setAdapter, setWebChatStyles, adapter, false, true, true);
|
|
51
60
|
|
|
52
61
|
// Initiate post chat render
|
|
53
|
-
if (
|
|
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
|
|
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
|
|
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
|
|
138
|
+
if (postMessageToOtherTab) {
|
|
131
139
|
const endChatEventName = await getEndChatEventName(chatSDK, props);
|
|
132
140
|
BroadcastService.postMessage({
|
|
133
141
|
eventName: endChatEventName,
|
|
134
|
-
payload:
|
|
142
|
+
payload: {
|
|
143
|
+
runtimeId: TelemetryManager.InternalTelemetryData.lcwRuntimeId
|
|
144
|
+
}
|
|
135
145
|
});
|
|
136
146
|
}
|
|
137
147
|
};
|
|
138
|
-
const
|
|
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
|
-
|
|
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(
|
|
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 (
|
|
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 (
|
|
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 = ${
|
|
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(
|
|
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$
|
|
103
|
-
if ((state === null || state === void 0 ? void 0 : (_state$
|
|
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,
|
|
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$
|
|
325
|
-
var _msg$
|
|
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$
|
|
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$
|
|
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
|
-
|
|
417
|
-
if (msg.payload !==
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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:
|
|
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 {
|
|
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,
|
|
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 (
|
|
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);
|