@microsoft/omnichannel-chat-widget 1.8.7 → 2.0.0-main.5ebd4eb
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/README.md +52 -5
- package/lib/cjs/common/Constants.js +5 -0
- package/lib/cjs/common/facades/FacadeChatSDK.js +234 -9
- package/lib/cjs/common/telemetry/TelemetryConstants.js +19 -0
- package/lib/cjs/common/telemetry/TelemetryManager.js +6 -1
- package/lib/cjs/common/telemetry/loggers/appInsightsLogger.js +2 -3
- package/lib/cjs/common/telemetry/sanitizeSasInPayload.js +91 -0
- package/lib/cjs/common/utils.js +93 -17
- package/lib/cjs/components/callingcontainerstateful/CallingContainerStateful.js +16 -6
- package/lib/cjs/components/chatbuttonstateful/ChatButtonStateful.js +20 -10
- package/lib/cjs/components/citationpanestateful/CitationDim.js +2 -3
- package/lib/cjs/components/citationpanestateful/CitationPaneStateful.js +27 -5
- package/lib/cjs/components/confirmationpanestateful/ConfirmationPaneStateful.js +23 -3
- package/lib/cjs/components/dimlayer/DimLayer.js +1 -3
- package/lib/cjs/components/draggable/DraggableChatWidget.js +35 -15
- package/lib/cjs/components/draggable/DraggableEventEmitter.js +10 -1
- package/lib/cjs/components/draggable/DraggableEventReceiver.js +1 -3
- package/lib/cjs/components/emailtranscriptpanestateful/EmailTranscriptPaneStateful.js +54 -17
- package/lib/cjs/components/errorboundary/ErrorBoundary.js +4 -12
- package/lib/cjs/components/footerstateful/FooterStateful.js +18 -9
- package/lib/cjs/components/footerstateful/audionotificationstateful/AudioNotificationStateful.js +2 -4
- package/lib/cjs/components/footerstateful/downloadtranscriptstateful/DownloadTranscriptStateful.js +4 -6
- package/lib/cjs/components/headerstateful/HeaderStateful.js +24 -12
- package/lib/cjs/components/livechatwidget/LiveChatWidget.js +27 -4
- package/lib/cjs/components/livechatwidget/common/ActivitySubscriber/HiddenAdaptiveCardActivitySubscriber.js +5 -11
- package/lib/cjs/components/livechatwidget/common/ChatWidgetEvents.js +1 -0
- package/lib/cjs/components/livechatwidget/common/PersistentConversationHandler.js +11 -4
- package/lib/cjs/components/livechatwidget/common/authHelper.js +44 -4
- package/lib/cjs/components/livechatwidget/common/createMarkdown.js +98 -5
- package/lib/cjs/components/livechatwidget/common/endChat.js +12 -9
- package/lib/cjs/components/livechatwidget/common/initWebChatComposer.js +182 -1
- package/lib/cjs/components/livechatwidget/common/recoveryEligibilityTelemetry.js +60 -0
- package/lib/cjs/components/livechatwidget/common/startChat.js +31 -14
- package/lib/cjs/components/livechatwidget/livechatwidgetstateful/LiveChatWidgetStateful.js +160 -21
- package/lib/cjs/components/loadingpanestateful/LoadingPaneStateful.js +16 -11
- package/lib/cjs/components/notificationpanestateful/NotificationPaneStateful.js +19 -12
- package/lib/cjs/components/ooohpanestateful/OOOHPaneStateful.js +13 -6
- package/lib/cjs/components/postchatloadingpanestateful/PostChatLoadingPaneStateful.js +28 -5
- package/lib/cjs/components/postchatsurveypanestateful/PostChatSurveyPaneStateful.js +12 -5
- package/lib/cjs/components/prechatsurveypanestateful/PreChatSurveyPaneStateful.js +105 -11
- package/lib/cjs/components/prechatsurveypanestateful/common/defaultStyles/defaultGeneralPreChatSurveyPaneStyleProps.js +12 -1
- package/lib/cjs/components/proactivechatpanestateful/ProactiveChatPaneStateful.js +17 -7
- package/lib/cjs/components/reconnectchatpanestateful/ReconnectChatPaneStateful.js +16 -7
- package/lib/cjs/components/startchaterrorpanestateful/StartChatErrorPaneStateful.js +10 -2
- package/lib/cjs/components/webchatcontainerstateful/WebChatContainerStateful.js +154 -29
- package/lib/cjs/components/webchatcontainerstateful/common/DesignerChatAdapter.js +10 -0
- package/lib/cjs/components/webchatcontainerstateful/common/activityConverters/convertPersistentChatHistoryMessageToActivity.js +115 -10
- package/lib/cjs/components/webchatcontainerstateful/common/defaultProps/defaultMiddlewareLocalizedTexts.js +3 -0
- package/lib/cjs/components/webchatcontainerstateful/common/defaultProps/defaultWebChatContainerStatefulProps.js +2 -1
- package/lib/cjs/components/webchatcontainerstateful/common/defaultStyles/defaultAdaptiveCardStyles.js +3 -1
- package/lib/cjs/components/webchatcontainerstateful/common/defaultStyles/defaultWebChatStyles.js +2 -2
- package/lib/cjs/components/webchatcontainerstateful/common/utils/chatAdapterUtils.js +3 -1
- package/lib/cjs/components/webchatcontainerstateful/common/utils/citationA11y.js +195 -0
- package/lib/cjs/components/webchatcontainerstateful/interfaces/IWebChatAction.js +17 -1
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/WebChatEventSubscribers.js +27 -4
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/adaptermiddlewares/formatTagsEgressMiddleware.js +1 -3
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/adaptermiddlewares/formatTagsIngressMiddleware.js +1 -3
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activities/LazyLoadActivity.js +180 -190
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activities/LoadInlineBannerActivity.js +3 -5
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityMiddleware.js +22 -6
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityStatusMiddleware.js +12 -23
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachmentMiddleware.js +27 -35
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachments/AdaptiveCardAccessibilityWrapper.js +199 -0
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachments/Attachment.js +29 -15
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/avatarMiddleware.js +5 -12
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/cardActionMiddleware.js +1 -1
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultAvatarTextStyles.js +1 -1
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultSystemMessageStyles.js +8 -3
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultTimestampRetryStyles.js +8 -1
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/groupActivitiesMiddleware.js +5 -8
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/messageSequenceIdOverrideMiddleware.js +6 -4
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/messageTimestampMiddleware.js +6 -4
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/timestamps/DeliveredTimestamp.js +14 -12
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/timestamps/HistoryMessageTimestamp.js +16 -14
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/timestamps/NotDeliveredTimestamp.js +18 -30
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/timestamps/SendingTimestamp.js +10 -2
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/toastMiddleware.js +1 -3
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/typingIndicatorMiddleware.js +16 -12
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/attachmentProcessingMiddleware.js +6 -6
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/attachmentSentAnnouncementMiddleware.js +83 -0
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/attachmentUploadValidatorMiddleware.js +36 -8
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/callActionMiddleware.js +5 -1
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/channelDataMiddleware.js +10 -7
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/citationsMiddleware.js +4 -0
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/conversationEndMiddleware.js +6 -4
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/customEventMiddleware.js +5 -1
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/dataMaskingMiddleware.js +7 -7
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/gifUploadMiddleware.js +10 -14
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/htmlPlayerMiddleware.js +6 -4
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/htmlTextMiddleware.js +13 -10
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/localizedStringsBotInitialsMiddleware.js +57 -11
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/maxMessageSizeValidator.js +6 -4
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/preProcessingMiddleware.js +25 -30
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/queueOverflowHandlerMiddleware.js +10 -7
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/sanitizationMiddleware.js +6 -4
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/notification/NotificationHandler.js +55 -1
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/webchattelemetry/WebChatLogger.js +2 -4
- package/lib/cjs/contexts/common/LiveChatWidgetActionType.js +5 -0
- package/lib/cjs/contexts/common/LiveChatWidgetContextInitialState.js +17 -1
- package/lib/cjs/contexts/createReducer.js +15 -0
- package/lib/cjs/controller/componentController.js +13 -1
- package/lib/cjs/hooks/useWindowDimensions.js +13 -5
- package/lib/cjs/package.json +1 -0
- package/lib/cjs/plugins/createChatTranscript.js +3 -4
- package/lib/cjs/plugins/newMessageEventHandler.js +20 -3
- package/lib/esm/common/Constants.js +5 -0
- package/lib/esm/common/facades/FacadeChatSDK.js +235 -10
- package/lib/esm/common/telemetry/TelemetryConstants.js +19 -0
- package/lib/esm/common/telemetry/TelemetryManager.js +6 -1
- package/lib/esm/common/telemetry/loggers/appInsightsLogger.js +2 -3
- package/lib/esm/common/telemetry/sanitizeSasInPayload.js +84 -0
- package/lib/esm/common/utils.js +88 -14
- package/lib/esm/components/callingcontainerstateful/CallingContainerStateful.js +15 -5
- package/lib/esm/components/chatbuttonstateful/ChatButtonStateful.js +19 -9
- package/lib/esm/components/citationpanestateful/CitationDim.js +2 -3
- package/lib/esm/components/citationpanestateful/CitationPaneStateful.js +26 -4
- package/lib/esm/components/confirmationpanestateful/ConfirmationPaneStateful.js +22 -2
- package/lib/esm/components/dimlayer/DimLayer.js +1 -3
- package/lib/esm/components/draggable/DraggableChatWidget.js +34 -14
- package/lib/esm/components/draggable/DraggableEventEmitter.js +10 -1
- package/lib/esm/components/draggable/DraggableEventReceiver.js +1 -3
- package/lib/esm/components/emailtranscriptpanestateful/EmailTranscriptPaneStateful.js +54 -17
- package/lib/esm/components/errorboundary/ErrorBoundary.js +4 -12
- package/lib/esm/components/footerstateful/FooterStateful.js +17 -8
- package/lib/esm/components/footerstateful/audionotificationstateful/AudioNotificationStateful.js +2 -4
- package/lib/esm/components/footerstateful/downloadtranscriptstateful/DownloadTranscriptStateful.js +4 -6
- package/lib/esm/components/headerstateful/HeaderStateful.js +22 -10
- package/lib/esm/components/livechatwidget/LiveChatWidget.js +27 -4
- package/lib/esm/components/livechatwidget/common/ActivitySubscriber/HiddenAdaptiveCardActivitySubscriber.js +5 -11
- package/lib/esm/components/livechatwidget/common/ChatWidgetEvents.js +1 -0
- package/lib/esm/components/livechatwidget/common/PersistentConversationHandler.js +11 -4
- package/lib/esm/components/livechatwidget/common/authHelper.js +44 -4
- package/lib/esm/components/livechatwidget/common/createMarkdown.js +98 -5
- package/lib/esm/components/livechatwidget/common/endChat.js +12 -9
- package/lib/esm/components/livechatwidget/common/initWebChatComposer.js +182 -1
- package/lib/esm/components/livechatwidget/common/recoveryEligibilityTelemetry.js +52 -0
- package/lib/esm/components/livechatwidget/common/startChat.js +31 -14
- package/lib/esm/components/livechatwidget/livechatwidgetstateful/LiveChatWidgetStateful.js +159 -20
- package/lib/esm/components/loadingpanestateful/LoadingPaneStateful.js +14 -9
- package/lib/esm/components/notificationpanestateful/NotificationPaneStateful.js +17 -10
- package/lib/esm/components/ooohpanestateful/OOOHPaneStateful.js +12 -5
- package/lib/esm/components/postchatloadingpanestateful/PostChatLoadingPaneStateful.js +28 -5
- package/lib/esm/components/postchatsurveypanestateful/PostChatSurveyPaneStateful.js +11 -4
- package/lib/esm/components/prechatsurveypanestateful/PreChatSurveyPaneStateful.js +105 -11
- package/lib/esm/components/prechatsurveypanestateful/common/defaultStyles/defaultGeneralPreChatSurveyPaneStyleProps.js +12 -1
- package/lib/esm/components/proactivechatpanestateful/ProactiveChatPaneStateful.js +16 -6
- package/lib/esm/components/reconnectchatpanestateful/ReconnectChatPaneStateful.js +15 -6
- package/lib/esm/components/startchaterrorpanestateful/StartChatErrorPaneStateful.js +9 -1
- package/lib/esm/components/webchatcontainerstateful/WebChatContainerStateful.js +154 -29
- package/lib/esm/components/webchatcontainerstateful/common/DesignerChatAdapter.js +10 -0
- package/lib/esm/components/webchatcontainerstateful/common/activityConverters/convertPersistentChatHistoryMessageToActivity.js +115 -10
- package/lib/esm/components/webchatcontainerstateful/common/defaultProps/defaultMiddlewareLocalizedTexts.js +3 -0
- package/lib/esm/components/webchatcontainerstateful/common/defaultProps/defaultWebChatContainerStatefulProps.js +2 -1
- package/lib/esm/components/webchatcontainerstateful/common/defaultStyles/defaultAdaptiveCardStyles.js +3 -1
- package/lib/esm/components/webchatcontainerstateful/common/defaultStyles/defaultWebChatStyles.js +2 -2
- package/lib/esm/components/webchatcontainerstateful/common/utils/chatAdapterUtils.js +3 -1
- package/lib/esm/components/webchatcontainerstateful/common/utils/citationA11y.js +188 -0
- package/lib/esm/components/webchatcontainerstateful/interfaces/IWebChatAction.js +10 -1
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/WebChatEventSubscribers.js +27 -4
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/adaptermiddlewares/formatTagsEgressMiddleware.js +1 -3
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/adaptermiddlewares/formatTagsIngressMiddleware.js +1 -3
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activities/LazyLoadActivity.js +180 -190
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activities/LoadInlineBannerActivity.js +3 -5
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityMiddleware.js +19 -4
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityStatusMiddleware.js +12 -23
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachmentMiddleware.js +27 -32
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachments/AdaptiveCardAccessibilityWrapper.js +193 -0
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachments/Attachment.js +28 -14
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/avatarMiddleware.js +5 -12
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/cardActionMiddleware.js +1 -1
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultAvatarTextStyles.js +1 -1
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultSystemMessageStyles.js +8 -3
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultTimestampRetryStyles.js +8 -1
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/groupActivitiesMiddleware.js +5 -8
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/messageSequenceIdOverrideMiddleware.js +6 -4
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/messageTimestampMiddleware.js +6 -4
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/timestamps/DeliveredTimestamp.js +13 -11
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/timestamps/HistoryMessageTimestamp.js +15 -13
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/timestamps/NotDeliveredTimestamp.js +17 -27
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/timestamps/SendingTimestamp.js +9 -1
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/toastMiddleware.js +1 -3
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/typingIndicatorMiddleware.js +16 -10
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/attachmentProcessingMiddleware.js +6 -6
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/attachmentSentAnnouncementMiddleware.js +77 -0
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/attachmentUploadValidatorMiddleware.js +36 -8
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/callActionMiddleware.js +5 -2
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/channelDataMiddleware.js +10 -7
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/citationsMiddleware.js +4 -0
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/conversationEndMiddleware.js +6 -4
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/customEventMiddleware.js +5 -1
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/dataMaskingMiddleware.js +7 -7
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/gifUploadMiddleware.js +10 -14
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/htmlPlayerMiddleware.js +6 -4
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/htmlTextMiddleware.js +13 -10
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/localizedStringsBotInitialsMiddleware.js +57 -11
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/maxMessageSizeValidator.js +6 -4
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/preProcessingMiddleware.js +25 -31
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/queueOverflowHandlerMiddleware.js +10 -7
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/sanitizationMiddleware.js +6 -4
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/notification/NotificationHandler.js +55 -1
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/webchattelemetry/WebChatLogger.js +2 -4
- package/lib/esm/contexts/common/LiveChatWidgetActionType.js +5 -0
- package/lib/esm/contexts/common/LiveChatWidgetContextInitialState.js +17 -1
- package/lib/esm/contexts/createReducer.js +15 -0
- package/lib/esm/controller/componentController.js +13 -1
- package/lib/esm/hooks/useWindowDimensions.js +13 -5
- package/lib/esm/plugins/createChatTranscript.js +3 -4
- package/lib/esm/plugins/newMessageEventHandler.js +20 -3
- package/lib/types/common/Constants.d.ts +4 -0
- package/lib/types/common/facades/FacadeChatSDK.d.ts +29 -0
- package/lib/types/common/facades/types/IFacadeChatSDKInput.d.ts +3 -1
- package/lib/types/common/telemetry/TelemetryConstants.d.ts +15 -2
- package/lib/types/common/telemetry/sanitizeSasInPayload.d.ts +24 -0
- package/lib/types/common/utils.d.ts +3 -1
- package/lib/types/components/livechatwidget/common/ChatWidgetEvents.d.ts +2 -1
- package/lib/types/components/livechatwidget/common/authHelper.d.ts +9 -2
- package/lib/types/components/livechatwidget/common/recoveryEligibilityTelemetry.d.ts +17 -0
- package/lib/types/components/prechatsurveypanestateful/PreChatSurveyPaneStateful.d.ts +6 -0
- package/lib/types/components/webchatcontainerstateful/common/utils/chatAdapterUtils.d.ts +1 -1
- package/lib/types/components/webchatcontainerstateful/common/utils/citationA11y.d.ts +1 -0
- package/lib/types/components/webchatcontainerstateful/interfaces/IAdaptiveCardStyles.d.ts +1 -0
- package/lib/types/components/webchatcontainerstateful/interfaces/IWebChatAction.d.ts +16 -1
- package/lib/types/components/webchatcontainerstateful/interfaces/IWebChatContainerStatefulProps.d.ts +7 -0
- package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activities/LazyLoadActivity.d.ts +14 -38
- package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityMiddleware.d.ts +2 -0
- package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachments/AdaptiveCardAccessibilityWrapper.d.ts +18 -0
- package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultSystemMessageStyles.d.ts +3 -0
- package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/messageSequenceIdOverrideMiddleware.d.ts +2 -4
- package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/messageTimestampMiddleware.d.ts +2 -4
- package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/attachmentProcessingMiddleware.d.ts +2 -4
- package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/attachmentSentAnnouncementMiddleware.d.ts +10 -0
- package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/attachmentUploadValidatorMiddleware.d.ts +2 -4
- package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/callActionMiddleware.d.ts +2 -2
- package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/channelDataMiddleware.d.ts +2 -4
- package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/citationsMiddleware.d.ts +2 -2
- package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/conversationEndMiddleware.d.ts +2 -4
- package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/customEventMiddleware.d.ts +2 -2
- package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/dataMaskingMiddleware.d.ts +2 -4
- package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/gifUploadMiddleware.d.ts +2 -4
- package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/htmlPlayerMiddleware.d.ts +2 -4
- package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/htmlTextMiddleware.d.ts +2 -4
- package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/localizedStringsBotInitialsMiddleware.d.ts +2 -4
- package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/maxMessageSizeValidator.d.ts +2 -4
- package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/preProcessingMiddleware.d.ts +2 -4
- package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/queueOverflowHandlerMiddleware.d.ts +2 -2
- package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/sanitizationMiddleware.d.ts +2 -4
- package/lib/types/components/webchatcontainerstateful/webchatcontroller/notification/NotificationHandler.d.ts +7 -0
- package/lib/types/contexts/common/ILiveChatWidgetContext.d.ts +1 -0
- package/lib/types/contexts/common/ILiveChatWidgetLocalizedTexts.d.ts +17 -0
- package/lib/types/contexts/common/LiveChatWidgetActionType.d.ts +2 -1
- package/package.json +71 -57
package/lib/esm/common/utils.js
CHANGED
|
@@ -70,26 +70,66 @@ export const findAllFocusableElement = parent => {
|
|
|
70
70
|
export const preventFocusToMoveOutOfElement = elementId => {
|
|
71
71
|
const container = document.getElementById(elementId);
|
|
72
72
|
if (!container) {
|
|
73
|
-
return;
|
|
73
|
+
return () => {/* no-op */};
|
|
74
74
|
}
|
|
75
75
|
const focusableElements = findAllFocusableElement(container);
|
|
76
76
|
if (!focusableElements) {
|
|
77
|
-
return;
|
|
77
|
+
return () => {/* no-op */};
|
|
78
78
|
}
|
|
79
79
|
const firstFocusableElement = focusableElements[0];
|
|
80
80
|
const lastFocusableElement = focusableElements[focusableElements.length - 1];
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
81
|
+
const cleanups = [];
|
|
82
|
+
if (firstFocusableElement === lastFocusableElement) {
|
|
83
|
+
const handler = e => {
|
|
84
|
+
if (e.key === KeyCodes.TAB && !e.shiftKey) {
|
|
85
|
+
e.preventDefault();
|
|
86
|
+
firstFocusableElement.focus();
|
|
87
|
+
} else if (e.key === KeyCodes.TAB && e.shiftKey) {
|
|
88
|
+
e.preventDefault();
|
|
89
|
+
firstFocusableElement.focus();
|
|
90
|
+
}
|
|
91
|
+
};
|
|
92
|
+
firstFocusableElement.addEventListener("keydown", handler);
|
|
93
|
+
cleanups.push(() => firstFocusableElement.removeEventListener("keydown", handler));
|
|
94
|
+
} else {
|
|
95
|
+
const firstHandler = e => {
|
|
96
|
+
if (e.shiftKey && e.key === KeyCodes.TAB) {
|
|
97
|
+
e.preventDefault();
|
|
98
|
+
lastFocusableElement === null || lastFocusableElement === void 0 || lastFocusableElement.focus();
|
|
99
|
+
}
|
|
100
|
+
};
|
|
101
|
+
firstFocusableElement.addEventListener("keydown", firstHandler);
|
|
102
|
+
cleanups.push(() => firstFocusableElement.removeEventListener("keydown", firstHandler));
|
|
103
|
+
const lastHandler = e => {
|
|
104
|
+
if (!e.shiftKey && e.key === KeyCodes.TAB) {
|
|
105
|
+
e.preventDefault();
|
|
106
|
+
firstFocusableElement === null || firstFocusableElement === void 0 || firstFocusableElement.focus();
|
|
107
|
+
}
|
|
108
|
+
};
|
|
109
|
+
lastFocusableElement.addEventListener("keydown", lastHandler);
|
|
110
|
+
cleanups.push(() => lastFocusableElement.removeEventListener("keydown", lastHandler));
|
|
111
|
+
}
|
|
112
|
+
return () => cleanups.forEach(fn => fn());
|
|
113
|
+
};
|
|
114
|
+
export const setAriaHiddenForSiblings = (elementId, shouldHide, stateMap) => {
|
|
115
|
+
const element = document.getElementById(elementId);
|
|
116
|
+
if (!(element !== null && element !== void 0 && element.parentElement)) return;
|
|
117
|
+
Array.from(element.parentElement.children).forEach(sibling => {
|
|
118
|
+
if (sibling !== element) {
|
|
119
|
+
if (shouldHide) {
|
|
120
|
+
stateMap.set(sibling, sibling.getAttribute("aria-hidden"));
|
|
121
|
+
sibling.setAttribute("aria-hidden", "true");
|
|
122
|
+
} else if (stateMap.has(sibling)) {
|
|
123
|
+
const original = stateMap.get(sibling);
|
|
124
|
+
if (original === null) {
|
|
125
|
+
sibling.removeAttribute("aria-hidden");
|
|
126
|
+
} else {
|
|
127
|
+
sibling.setAttribute("aria-hidden", original);
|
|
128
|
+
}
|
|
129
|
+
stateMap.delete(sibling);
|
|
130
|
+
}
|
|
91
131
|
}
|
|
92
|
-
};
|
|
132
|
+
});
|
|
93
133
|
};
|
|
94
134
|
export const setFocusOnSendBox = () => {
|
|
95
135
|
const sendBoxSelector = "textarea[data-id=\"webchat-sendbox-input\"]";
|
|
@@ -99,6 +139,40 @@ export const setFocusOnElement = selector => {
|
|
|
99
139
|
const element = getElementBySelector(selector);
|
|
100
140
|
element === null || element === void 0 || element.focus();
|
|
101
141
|
};
|
|
142
|
+
const IMMEDIATE_ANNOUNCEMENT_REGION_ID = "oc-lcw-immediate-announcement";
|
|
143
|
+
|
|
144
|
+
// Announces a message to screen readers via an aria-live="assertive" region
|
|
145
|
+
// attached to document.body — outside the chat widget's DOM subtree — so the
|
|
146
|
+
// screen reader does not have to traverse chat content to reach it.
|
|
147
|
+
export const announceMessageImmediately = message => {
|
|
148
|
+
if (!message || typeof document === "undefined") {
|
|
149
|
+
return;
|
|
150
|
+
}
|
|
151
|
+
let region = document.getElementById(IMMEDIATE_ANNOUNCEMENT_REGION_ID);
|
|
152
|
+
if (!region) {
|
|
153
|
+
region = document.createElement("div");
|
|
154
|
+
region.id = IMMEDIATE_ANNOUNCEMENT_REGION_ID;
|
|
155
|
+
region.setAttribute("aria-live", "assertive");
|
|
156
|
+
region.setAttribute("role", "alert");
|
|
157
|
+
region.setAttribute("aria-atomic", "true");
|
|
158
|
+
region.style.position = "absolute";
|
|
159
|
+
region.style.width = "1px";
|
|
160
|
+
region.style.height = "1px";
|
|
161
|
+
region.style.overflow = "hidden";
|
|
162
|
+
region.style.clip = "rect(0 0 0 0)";
|
|
163
|
+
region.style.clipPath = "inset(50%)";
|
|
164
|
+
region.style.whiteSpace = "nowrap";
|
|
165
|
+
document.body.appendChild(region);
|
|
166
|
+
}
|
|
167
|
+
region.textContent = "";
|
|
168
|
+
// Re-set on the next tick so screen readers detect the change even when
|
|
169
|
+
// the same message is announced twice in a row.
|
|
170
|
+
setTimeout(() => {
|
|
171
|
+
if (region) {
|
|
172
|
+
region.textContent = message;
|
|
173
|
+
}
|
|
174
|
+
}, 50);
|
|
175
|
+
};
|
|
102
176
|
export const escapeHtml = inputString => {
|
|
103
177
|
const entityMap = {
|
|
104
178
|
"<": "<",
|
|
@@ -435,7 +509,7 @@ export const setOcUserAgent = chatSDK => {
|
|
|
435
509
|
// eslint-disable-line @typescript-eslint/no-explicit-any
|
|
436
510
|
if ((_chatSDK$OCClient = chatSDK.OCClient) !== null && _chatSDK$OCClient !== void 0 && _chatSDK$OCClient.ocUserAgent && !((_chatSDK$OCClient2 = chatSDK.OCClient) !== null && _chatSDK$OCClient2 !== void 0 && _chatSDK$OCClient2.ocUserAgent.join(" ").includes("omnichannel-chat-widget/"))) {
|
|
437
511
|
try {
|
|
438
|
-
const version = require("
|
|
512
|
+
const version = require("../../package.json").version; // eslint-disable-line @typescript-eslint/no-var-requires
|
|
439
513
|
const userAgent = `omnichannel-chat-widget/${version}`;
|
|
440
514
|
chatSDK.OCClient.ocUserAgent = [userAgent, ...chatSDK.OCClient.ocUserAgent];
|
|
441
515
|
} catch (error) {
|
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
|
|
2
|
+
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
3
|
+
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
|
|
4
|
+
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
5
|
+
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
|
|
6
|
+
function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
|
|
1
7
|
import { LogLevel, TelemetryEvent } from "../../common/telemetry/TelemetryConstants";
|
|
2
8
|
import React, { useCallback, useEffect } from "react";
|
|
3
9
|
import { CallingContainer } from "@microsoft/omnichannel-chat-components";
|
|
@@ -7,12 +13,16 @@ import useChatContextStore from "../../hooks/useChatContextStore";
|
|
|
7
13
|
import useFacadeSDKStore from "../../hooks/useFacadeChatSDKStore";
|
|
8
14
|
export const CallingContainerStateful = props => {
|
|
9
15
|
var _props$controlProps, _props$controlProps2, _props$controlProps3, _props$controlProps4, _props$controlProps5;
|
|
10
|
-
const
|
|
11
|
-
|
|
16
|
+
const _useChatContextStore = useChatContextStore(),
|
|
17
|
+
_useChatContextStore2 = _slicedToArray(_useChatContextStore, 2),
|
|
18
|
+
state = _useChatContextStore2[0],
|
|
19
|
+
dispatch = _useChatContextStore2[1];
|
|
20
|
+
const _useFacadeSDKStore = useFacadeSDKStore(),
|
|
21
|
+
_useFacadeSDKStore2 = _slicedToArray(_useFacadeSDKStore, 1),
|
|
22
|
+
facadeChatSDK = _useFacadeSDKStore2[0];
|
|
12
23
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
13
|
-
const
|
|
14
|
-
voiceVideoCallingSdk
|
|
15
|
-
} = props;
|
|
24
|
+
const _ref = props,
|
|
25
|
+
voiceVideoCallingSdk = _ref.voiceVideoCallingSdk;
|
|
16
26
|
let callId;
|
|
17
27
|
const resetCallingStates = reset => {
|
|
18
28
|
if (reset) {
|
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
|
|
2
|
+
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
3
|
+
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
|
|
4
|
+
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
5
|
+
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
|
|
6
|
+
function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
|
|
1
7
|
import { ConversationStage, LogLevel, TelemetryEvent } from "../../common/telemetry/TelemetryConstants";
|
|
2
8
|
import React, { useEffect, useRef, useState } from "react";
|
|
3
9
|
import { createTimer, setFocusOnElement } from "../../common/utils";
|
|
@@ -25,18 +31,22 @@ export const ChatButtonStateful = props => {
|
|
|
25
31
|
}, []);
|
|
26
32
|
|
|
27
33
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
28
|
-
const
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
+
const _useChatContextStore = useChatContextStore(),
|
|
35
|
+
_useChatContextStore2 = _slicedToArray(_useChatContextStore, 2),
|
|
36
|
+
state = _useChatContextStore2[0],
|
|
37
|
+
dispatch = _useChatContextStore2[1];
|
|
38
|
+
const buttonProps = props.buttonProps,
|
|
39
|
+
outOfOfficeButtonProps = props.outOfOfficeButtonProps,
|
|
40
|
+
startChat = props.startChat;
|
|
34
41
|
//Setting OutOfOperatingHours Flag
|
|
35
42
|
//Setting OutOfOperatingHours Flag - to string conversion to normalize the value (could be boolean from other states or string directly from config)
|
|
36
43
|
// Initialize with the current state value to prevent visual flicker
|
|
37
|
-
const
|
|
38
|
-
|
|
39
|
-
|
|
44
|
+
const _useState = useState(() => {
|
|
45
|
+
return state.appStates.conversationState === ConversationState.Closed && state.appStates.outsideOperatingHours;
|
|
46
|
+
}),
|
|
47
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
48
|
+
outOfOperatingHours = _useState2[0],
|
|
49
|
+
setOutOfOperatingHours = _useState2[1];
|
|
40
50
|
const ref = useRef(() => {
|
|
41
51
|
return;
|
|
42
52
|
});
|
|
@@ -3,9 +3,8 @@ import ReactDOM from "react-dom";
|
|
|
3
3
|
import { DimLayer } from "../dimlayer/DimLayer";
|
|
4
4
|
const CONTAINER_SELECTOR = ".webchat__stacked-layout_container";
|
|
5
5
|
export const CitationDim = _ref => {
|
|
6
|
-
let
|
|
7
|
-
brightness = "0.2"
|
|
8
|
-
} = _ref;
|
|
6
|
+
let _ref$brightness = _ref.brightness,
|
|
7
|
+
brightness = _ref$brightness === void 0 ? "0.2" : _ref$brightness;
|
|
9
8
|
const container = document.querySelector(CONTAINER_SELECTOR);
|
|
10
9
|
if (!container) return null;
|
|
11
10
|
return /*#__PURE__*/ReactDOM.createPortal(/*#__PURE__*/React.createElement("div", {
|
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
|
|
2
|
+
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
3
|
+
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
|
|
4
|
+
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
5
|
+
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
|
|
6
|
+
function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
|
|
1
7
|
import { LogLevel, TelemetryEvent } from "../../common/telemetry/TelemetryConstants";
|
|
2
8
|
import React, { useEffect, useState } from "react";
|
|
3
9
|
import { createTimer, findAllFocusableElement, findParentFocusableElementsWithoutChildContainer, preventFocusToMoveOutOfElement, setTabIndices } from "../../common/utils";
|
|
@@ -21,7 +27,10 @@ export const CitationPaneStateful = props => {
|
|
|
21
27
|
let elements = [];
|
|
22
28
|
|
|
23
29
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
24
|
-
const
|
|
30
|
+
const _useChatContextStore = useChatContextStore(),
|
|
31
|
+
_useChatContextStore2 = _slicedToArray(_useChatContextStore, 2),
|
|
32
|
+
state = _useChatContextStore2[0],
|
|
33
|
+
dispatch = _useChatContextStore2[1];
|
|
25
34
|
|
|
26
35
|
// Use props.id if provided, otherwise fall back to default
|
|
27
36
|
const controlId = props.id || HtmlAttributeNames.ocwCitationPaneClassName;
|
|
@@ -30,12 +39,18 @@ export const CitationPaneStateful = props => {
|
|
|
30
39
|
// stays within the widget and scrolls only vertically. We also track an
|
|
31
40
|
// "isReady" flag so we don't render the pane contents until the style is
|
|
32
41
|
// computed — this prevents a transient render that can appear as a flicker.
|
|
33
|
-
const
|
|
34
|
-
|
|
42
|
+
const _useState = useState(null),
|
|
43
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
44
|
+
paneStyle = _useState2[0],
|
|
45
|
+
setPaneStyle = _useState2[1];
|
|
46
|
+
const _useState3 = useState(false),
|
|
47
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
48
|
+
isReady = _useState4[0],
|
|
49
|
+
setIsReady = _useState4[1];
|
|
35
50
|
|
|
36
51
|
// Initial focus pattern (mirrors ConfirmationPaneStateful): focus first focusable element (will re-attempt after visibility becomes true)
|
|
37
52
|
useEffect(() => {
|
|
38
|
-
preventFocusToMoveOutOfElement(controlId);
|
|
53
|
+
const cleanup = preventFocusToMoveOutOfElement(controlId);
|
|
39
54
|
const focusableElements = findAllFocusableElement(`#${controlId}`);
|
|
40
55
|
requestAnimationFrame(() => {
|
|
41
56
|
if (focusableElements && focusableElements.length > 0 && focusableElements[0]) {
|
|
@@ -53,6 +68,13 @@ export const CitationPaneStateful = props => {
|
|
|
53
68
|
Event: TelemetryEvent.UXCitationPaneCompleted,
|
|
54
69
|
ElapsedTimeInMilliseconds: uiTimer.milliSecondsElapsed
|
|
55
70
|
});
|
|
71
|
+
return () => {
|
|
72
|
+
// internal tracking: restore parent tab indices on unmount so focus
|
|
73
|
+
// can escape the widget even if the pane is dismissed by an
|
|
74
|
+
// external state change rather than a user button click.
|
|
75
|
+
setTabIndices(elements, initialTabIndexMap, true);
|
|
76
|
+
cleanup();
|
|
77
|
+
};
|
|
56
78
|
}, []);
|
|
57
79
|
|
|
58
80
|
// Retry focus once pane is actually visible (isReady) in case initial attempt occurred while wrapper was visibility:hidden
|
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
|
|
2
|
+
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
3
|
+
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
|
|
4
|
+
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
5
|
+
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
|
|
6
|
+
function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
|
|
1
7
|
import { LogLevel, TelemetryEvent } from "../../common/telemetry/TelemetryConstants";
|
|
2
8
|
import React, { useEffect } from "react";
|
|
3
9
|
import { createTimer, findAllFocusableElement, findParentFocusableElementsWithoutChildContainer, preventFocusToMoveOutOfElement, setFocusOnElement, setFocusOnSendBox, setTabIndices } from "../../common/utils";
|
|
@@ -19,7 +25,10 @@ export const ConfirmationPaneStateful = props => {
|
|
|
19
25
|
}, []);
|
|
20
26
|
const initialTabIndexMap = new Map();
|
|
21
27
|
let elements = [];
|
|
22
|
-
const
|
|
28
|
+
const _useChatContextStore = useChatContextStore(),
|
|
29
|
+
_useChatContextStore2 = _slicedToArray(_useChatContextStore, 2),
|
|
30
|
+
state = _useChatContextStore2[0],
|
|
31
|
+
dispatch = _useChatContextStore2[1];
|
|
23
32
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unused-vars
|
|
24
33
|
const controlProps = {
|
|
25
34
|
id: "oc-lcw-confirmation-pane",
|
|
@@ -73,7 +82,7 @@ export const ConfirmationPaneStateful = props => {
|
|
|
73
82
|
|
|
74
83
|
// Move focus to the first button
|
|
75
84
|
useEffect(() => {
|
|
76
|
-
preventFocusToMoveOutOfElement(controlProps.id);
|
|
85
|
+
const cleanup = preventFocusToMoveOutOfElement(controlProps.id);
|
|
77
86
|
const focusableElements = findAllFocusableElement(`#${controlProps.id}`);
|
|
78
87
|
requestAnimationFrame(() => {
|
|
79
88
|
if (focusableElements && focusableElements.length > 0 && focusableElements[0]) {
|
|
@@ -91,6 +100,17 @@ export const ConfirmationPaneStateful = props => {
|
|
|
91
100
|
Event: TelemetryEvent.UXConfirmationPaneCompleted,
|
|
92
101
|
ElapsedTimeInMilliseconds: uiTimer.milliSecondsElapsed
|
|
93
102
|
});
|
|
103
|
+
return () => {
|
|
104
|
+
// internal tracking: when the confirmation pane unmounts (page reload,
|
|
105
|
+
// parent state change, or any path that bypasses onConfirm /
|
|
106
|
+
// onCancel) the tab indices that were forced to -1 on sibling
|
|
107
|
+
// focusable elements must be restored, otherwise Tab order
|
|
108
|
+
// remains broken and focus can be trapped inside the widget.
|
|
109
|
+
// setTabIndices is a no-op when initialTabIndexMap is already
|
|
110
|
+
// empty (onConfirm / onCancel already restored).
|
|
111
|
+
setTabIndices(elements, initialTabIndexMap, true);
|
|
112
|
+
cleanup();
|
|
113
|
+
};
|
|
94
114
|
}, []);
|
|
95
115
|
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(DimLayer, {
|
|
96
116
|
brightness: (controlProps === null || controlProps === void 0 ? void 0 : controlProps.brightnessValueOnDim) ?? "0.2"
|
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
|
|
2
|
+
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
3
|
+
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
|
|
4
|
+
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
5
|
+
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
|
|
6
|
+
function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
|
|
1
7
|
import React, { useCallback, useEffect, useState } from "react";
|
|
2
8
|
import DraggableEventReceiver from "./DraggableEventReceiver";
|
|
3
9
|
import DraggableEventNames from "./DraggableEventNames";
|
|
@@ -5,20 +11,34 @@ import useChatContextStore from "../../hooks/useChatContextStore";
|
|
|
5
11
|
import { ConversationState } from "../../contexts/common/ConversationState";
|
|
6
12
|
import { isNullOrUndefined } from "../../common/utils";
|
|
7
13
|
const DraggableChatWidget = props => {
|
|
8
|
-
const
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
const
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
14
|
+
const _useChatContextStore = useChatContextStore(),
|
|
15
|
+
_useChatContextStore2 = _slicedToArray(_useChatContextStore, 1),
|
|
16
|
+
state = _useChatContextStore2[0];
|
|
17
|
+
const _useState = useState({
|
|
18
|
+
offsetLeft: 0,
|
|
19
|
+
offsetTop: 0
|
|
20
|
+
}),
|
|
21
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
22
|
+
initialPosition = _useState2[0],
|
|
23
|
+
setInitialPosition = _useState2[1];
|
|
24
|
+
const _useState3 = useState(undefined),
|
|
25
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
26
|
+
cachedPosition = _useState4[0],
|
|
27
|
+
setCachedPosition = _useState4[1];
|
|
28
|
+
const _useState5 = useState({
|
|
29
|
+
offsetLeft: 0,
|
|
30
|
+
offsetTop: 0
|
|
31
|
+
}),
|
|
32
|
+
_useState6 = _slicedToArray(_useState5, 2),
|
|
33
|
+
position = _useState6[0],
|
|
34
|
+
setPosition = _useState6[1];
|
|
35
|
+
const _useState7 = useState({
|
|
36
|
+
left: 0,
|
|
37
|
+
top: 0
|
|
38
|
+
}),
|
|
39
|
+
_useState8 = _slicedToArray(_useState7, 2),
|
|
40
|
+
delta = _useState8[0],
|
|
41
|
+
setDelta = _useState8[1];
|
|
22
42
|
const repositionElement = (draggableElement, offsetLeft, offsetTop) => {
|
|
23
43
|
draggableElement.style.left = `${offsetLeft}px`;
|
|
24
44
|
draggableElement.style.top = `${offsetTop}px`;
|
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
|
|
2
|
+
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
3
|
+
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
|
|
4
|
+
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
5
|
+
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
|
|
6
|
+
function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
|
|
1
7
|
import React, { useCallback, useEffect, useState } from "react";
|
|
2
8
|
import DraggableEventNames from "./DraggableEventNames";
|
|
3
9
|
/**
|
|
@@ -7,7 +13,10 @@ import DraggableEventNames from "./DraggableEventNames";
|
|
|
7
13
|
* @returns
|
|
8
14
|
*/
|
|
9
15
|
const DraggableEventEmitter = props => {
|
|
10
|
-
const
|
|
16
|
+
const _useState = useState(false),
|
|
17
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
18
|
+
initialized = _useState2[0],
|
|
19
|
+
setInitialized = _useState2[1];
|
|
11
20
|
const postMessage = useCallback(data => {
|
|
12
21
|
const targetWindow = props.targetWindow ?? window;
|
|
13
22
|
targetWindow.postMessage(data, "*");
|
|
@@ -8,9 +8,7 @@ import React, { useEffect } from "react";
|
|
|
8
8
|
const DraggableEventReceiver = props => {
|
|
9
9
|
useEffect(() => {
|
|
10
10
|
const listener = event => {
|
|
11
|
-
const
|
|
12
|
-
data
|
|
13
|
-
} = event;
|
|
11
|
+
const data = event.data;
|
|
14
12
|
if (data.channel && props.channel && data.channel === props.channel) {
|
|
15
13
|
props.onEvent(data);
|
|
16
14
|
}
|
|
@@ -1,6 +1,12 @@
|
|
|
1
|
+
function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
|
|
2
|
+
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
3
|
+
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
|
|
4
|
+
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
5
|
+
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
|
|
6
|
+
function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
|
|
1
7
|
import { LogLevel, TelemetryEvent } from "../../common/telemetry/TelemetryConstants";
|
|
2
8
|
import React, { useCallback, useEffect, useState } from "react";
|
|
3
|
-
import { createTimer, findAllFocusableElement, findParentFocusableElementsWithoutChildContainer, formatTemplateString, preventFocusToMoveOutOfElement, setFocusOnElement, setFocusOnSendBox, setTabIndices } from "../../common/utils";
|
|
9
|
+
import { announceMessageImmediately, createTimer, findAllFocusableElement, findParentFocusableElementsWithoutChildContainer, formatTemplateString, preventFocusToMoveOutOfElement, setFocusOnElement, setFocusOnSendBox, setTabIndices } from "../../common/utils";
|
|
4
10
|
import { DimLayer } from "../dimlayer/DimLayer";
|
|
5
11
|
import { InputValidationPane } from "@microsoft/omnichannel-chat-components";
|
|
6
12
|
import { LiveChatWidgetActionType } from "../../contexts/common/LiveChatWidgetActionType";
|
|
@@ -23,19 +29,34 @@ export const EmailTranscriptPaneStateful = props => {
|
|
|
23
29
|
}, []);
|
|
24
30
|
const initialTabIndexMap = new Map();
|
|
25
31
|
let elements = [];
|
|
26
|
-
const
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
32
|
+
const _useChatContextStore = useChatContextStore(),
|
|
33
|
+
_useChatContextStore2 = _slicedToArray(_useChatContextStore, 2),
|
|
34
|
+
state = _useChatContextStore2[0],
|
|
35
|
+
dispatch = _useChatContextStore2[1];
|
|
36
|
+
const _useFacadeSDKStore = useFacadeSDKStore(),
|
|
37
|
+
_useFacadeSDKStore2 = _slicedToArray(_useFacadeSDKStore, 1),
|
|
38
|
+
facadeChatSDK = _useFacadeSDKStore2[0];
|
|
39
|
+
const _useState = useState(""),
|
|
40
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
41
|
+
initialEmail = _useState2[0],
|
|
42
|
+
setInitialEmail = _useState2[1];
|
|
43
|
+
// restoreFocus=false is used on the submit path: the notification banner
|
|
44
|
+
// (success or error) takes focus via NotificationHandler.setFocusOnNotificationCloseButton,
|
|
45
|
+
// so an intermediate restore to the chat-widget shell would otherwise cause SRs to
|
|
46
|
+
// announce "Enter <widget>" in between the dialog and the banner.
|
|
47
|
+
const closeEmailTranscriptPane = function () {
|
|
48
|
+
let restoreFocus = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
|
|
30
49
|
dispatch({
|
|
31
50
|
type: LiveChatWidgetActionType.SET_SHOW_EMAIL_TRANSCRIPT_PANE,
|
|
32
51
|
payload: false
|
|
33
52
|
});
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
53
|
+
if (restoreFocus) {
|
|
54
|
+
const previousFocusedElementId = state.appStates.previousElementIdOnFocusBeforeModalOpen;
|
|
55
|
+
if (previousFocusedElementId) {
|
|
56
|
+
setFocusOnElement("#" + previousFocusedElementId);
|
|
57
|
+
} else {
|
|
58
|
+
setFocusOnSendBox();
|
|
59
|
+
}
|
|
39
60
|
}
|
|
40
61
|
dispatch({
|
|
41
62
|
type: LiveChatWidgetActionType.SET_PREVIOUS_FOCUSED_ELEMENT_ID,
|
|
@@ -46,23 +67,31 @@ export const EmailTranscriptPaneStateful = props => {
|
|
|
46
67
|
const onSend = useCallback(async email => {
|
|
47
68
|
var _state$domainStates;
|
|
48
69
|
const liveChatContext = state === null || state === void 0 || (_state$domainStates = state.domainStates) === null || _state$domainStates === void 0 ? void 0 : _state$domainStates.liveChatContext;
|
|
49
|
-
closeEmailTranscriptPane();
|
|
70
|
+
closeEmailTranscriptPane(false);
|
|
50
71
|
const chatTranscriptBody = {
|
|
51
72
|
emailAddress: email,
|
|
52
73
|
attachmentMessage: (props === null || props === void 0 ? void 0 : props.attachmentMessage) ?? "The following attachment was uploaded during the conversation:"
|
|
53
74
|
};
|
|
54
75
|
try {
|
|
55
|
-
var _state$domainStates2;
|
|
76
|
+
var _state$domainStates2, _state$domainStates3;
|
|
56
77
|
await (facadeChatSDK === null || facadeChatSDK === void 0 ? void 0 : facadeChatSDK.emailLiveChatTranscript(chatTranscriptBody, {
|
|
57
78
|
liveChatContext
|
|
58
79
|
}));
|
|
59
|
-
|
|
80
|
+
const successMessage = (state === null || state === void 0 || (_state$domainStates2 = state.domainStates) === null || _state$domainStates2 === void 0 || (_state$domainStates2 = _state$domainStates2.middlewareLocalizedTexts) === null || _state$domainStates2 === void 0 ? void 0 : _state$domainStates2.MIDDLEWARE_BANNER_FILE_EMAIL_ADDRESS_RECORDED_SUCCESS) ?? (defaultMiddlewareLocalizedTexts === null || defaultMiddlewareLocalizedTexts === void 0 ? void 0 : defaultMiddlewareLocalizedTexts.MIDDLEWARE_BANNER_FILE_EMAIL_ADDRESS_RECORDED_SUCCESS);
|
|
81
|
+
// Announce from a live region at document.body level so the
|
|
82
|
+
// screen reader speaks the confirmation immediately, without
|
|
83
|
+
// traversing the chat transcript on the way to the banner.
|
|
84
|
+
// Prefix with the explicit state word so SR users hear the outcome
|
|
85
|
+
// (visual users already see a success icon on the banner).
|
|
86
|
+
const successSrPrefix = (state === null || state === void 0 || (_state$domainStates3 = state.domainStates) === null || _state$domainStates3 === void 0 || (_state$domainStates3 = _state$domainStates3.middlewareLocalizedTexts) === null || _state$domainStates3 === void 0 ? void 0 : _state$domainStates3.MIDDLEWARE_SR_PREFIX_SUCCESS) ?? defaultMiddlewareLocalizedTexts.MIDDLEWARE_SR_PREFIX_SUCCESS;
|
|
87
|
+
announceMessageImmediately(`${successSrPrefix}${successMessage}`);
|
|
88
|
+
NotificationHandler.notifySuccess(NotificationScenarios.EmailAddressSaved, successMessage);
|
|
60
89
|
TelemetryHelper.logActionEventToAllTelemetry(LogLevel.INFO, {
|
|
61
90
|
Event: TelemetryEvent.EmailTranscriptSent,
|
|
62
91
|
Description: "Transcript sent to email successfully."
|
|
63
92
|
});
|
|
64
93
|
} catch (ex) {
|
|
65
|
-
var _state$
|
|
94
|
+
var _state$domainStates4, _state$domainStates5;
|
|
66
95
|
TelemetryHelper.logActionEventToAllTelemetry(LogLevel.ERROR, {
|
|
67
96
|
Event: TelemetryEvent.EmailTranscriptFailed,
|
|
68
97
|
Description: "Email transcript failed.",
|
|
@@ -70,8 +99,11 @@ export const EmailTranscriptPaneStateful = props => {
|
|
|
70
99
|
exception: ex
|
|
71
100
|
}
|
|
72
101
|
});
|
|
73
|
-
const message = formatTemplateString((state === null || state === void 0 || (_state$
|
|
74
|
-
|
|
102
|
+
const message = formatTemplateString((state === null || state === void 0 || (_state$domainStates4 = state.domainStates) === null || _state$domainStates4 === void 0 || (_state$domainStates4 = _state$domainStates4.middlewareLocalizedTexts) === null || _state$domainStates4 === void 0 ? void 0 : _state$domainStates4.MIDDLEWARE_BANNER_FILE_EMAIL_ADDRESS_RECORDED_ERROR) ?? defaultMiddlewareLocalizedTexts.MIDDLEWARE_BANNER_FILE_EMAIL_ADDRESS_RECORDED_ERROR, [email]);
|
|
103
|
+
const bannerMessage = (props === null || props === void 0 ? void 0 : props.bannerMessageOnError) ?? message;
|
|
104
|
+
const errorSrPrefix = (state === null || state === void 0 || (_state$domainStates5 = state.domainStates) === null || _state$domainStates5 === void 0 || (_state$domainStates5 = _state$domainStates5.middlewareLocalizedTexts) === null || _state$domainStates5 === void 0 ? void 0 : _state$domainStates5.MIDDLEWARE_SR_PREFIX_ERROR) ?? defaultMiddlewareLocalizedTexts.MIDDLEWARE_SR_PREFIX_ERROR;
|
|
105
|
+
announceMessageImmediately(`${errorSrPrefix}${bannerMessage}`);
|
|
106
|
+
NotificationHandler.notifyError(NotificationScenarios.EmailTranscriptError, bannerMessage);
|
|
75
107
|
}
|
|
76
108
|
}, [props.attachmentMessage, props.bannerMessageOnError, facadeChatSDK, state.domainStates.liveChatContext]);
|
|
77
109
|
const controlProps = {
|
|
@@ -94,7 +126,7 @@ export const EmailTranscriptPaneStateful = props => {
|
|
|
94
126
|
|
|
95
127
|
// Move focus to the first button
|
|
96
128
|
useEffect(() => {
|
|
97
|
-
preventFocusToMoveOutOfElement(controlProps.id);
|
|
129
|
+
const cleanup = preventFocusToMoveOutOfElement(controlProps.id);
|
|
98
130
|
const focusableElements = findAllFocusableElement(`#${controlProps.id}`);
|
|
99
131
|
if (focusableElements) {
|
|
100
132
|
focusableElements[0].focus();
|
|
@@ -109,6 +141,11 @@ export const EmailTranscriptPaneStateful = props => {
|
|
|
109
141
|
Event: TelemetryEvent.UXEmailTranscriptPaneCompleted,
|
|
110
142
|
ElapsedTimeInMilliseconds: uiTimer.milliSecondsElapsed
|
|
111
143
|
});
|
|
144
|
+
return () => {
|
|
145
|
+
// internal tracking: restore parent tab indices on unmount.
|
|
146
|
+
setTabIndices(elements, initialTabIndexMap, true);
|
|
147
|
+
cleanup();
|
|
148
|
+
};
|
|
112
149
|
}, [initialEmail]);
|
|
113
150
|
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(DimLayer, {
|
|
114
151
|
brightness: (controlProps === null || controlProps === void 0 ? void 0 : controlProps.brightnessValueOnDim) ?? "0.2"
|
|
@@ -14,9 +14,7 @@ import React, { Component } from "react";
|
|
|
14
14
|
|
|
15
15
|
// eslint-disable-next-line @typescript-eslint/ban-types
|
|
16
16
|
const RenderChildrenFunction = _ref => {
|
|
17
|
-
let
|
|
18
|
-
children
|
|
19
|
-
} = _ref;
|
|
17
|
+
let children = _ref.children;
|
|
20
18
|
return typeof children === "function" ? children() : children;
|
|
21
19
|
};
|
|
22
20
|
let ErrorBoundary = /*#__PURE__*/function (_Component) {
|
|
@@ -33,9 +31,7 @@ let ErrorBoundary = /*#__PURE__*/function (_Component) {
|
|
|
33
31
|
return _createClass(ErrorBoundary, [{
|
|
34
32
|
key: "componentDidCatch",
|
|
35
33
|
value: function componentDidCatch(error) {
|
|
36
|
-
const
|
|
37
|
-
onError
|
|
38
|
-
} = this.props;
|
|
34
|
+
const onError = this.props.onError;
|
|
39
35
|
this.setState({
|
|
40
36
|
hasError: true
|
|
41
37
|
});
|
|
@@ -46,12 +42,8 @@ let ErrorBoundary = /*#__PURE__*/function (_Component) {
|
|
|
46
42
|
}, {
|
|
47
43
|
key: "render",
|
|
48
44
|
value: function render() {
|
|
49
|
-
const
|
|
50
|
-
|
|
51
|
-
} = this.props;
|
|
52
|
-
const {
|
|
53
|
-
hasError
|
|
54
|
-
} = this.state;
|
|
45
|
+
const children = this.props.children;
|
|
46
|
+
const hasError = this.state.hasError;
|
|
55
47
|
return !hasError && /*#__PURE__*/React.createElement(RenderChildrenFunction, null, children);
|
|
56
48
|
}
|
|
57
49
|
}]);
|