@microsoft/omnichannel-chat-widget 1.8.3-main.ec1328d → 1.8.4-main.1bfa518
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 +27 -0
- package/lib/cjs/common/Constants.js +9 -0
- package/lib/cjs/common/facades/FacadeChatSDK.js +6 -0
- package/lib/cjs/common/telemetry/AppInsightsEvents.js +14 -9
- package/lib/cjs/common/telemetry/TelemetryConstants.js +49 -2
- package/lib/cjs/common/telemetry/TelemetryManager.js +10 -7
- package/lib/cjs/common/telemetry/loggers/appInsightsLogger.js +29 -13
- package/lib/cjs/common/utils/SecureEventBus.js +307 -0
- package/lib/cjs/common/utils/dispatchCustomEvent.js +25 -0
- package/lib/cjs/common/utils.js +14 -1
- package/lib/cjs/components/chatbuttonstateful/ChatButtonStateful.js +16 -4
- package/lib/cjs/components/citationpanestateful/CitationDim.js +29 -0
- package/lib/cjs/components/citationpanestateful/CitationPaneStateful.js +218 -0
- package/lib/cjs/components/citationpanestateful/common/defaultProps/defaultCitationPaneProps.js +70 -0
- package/lib/cjs/components/confirmationpanestateful/interfaces/IConfirmationPaneLocalizedTexts.js +1 -0
- package/lib/cjs/components/headerstateful/HeaderStateful.js +8 -2
- package/lib/cjs/components/livechatwidget/LiveChatWidget.js +4 -4
- package/lib/cjs/components/livechatwidget/common/ActivitySubscriber/AddActivitySubscriber.js +127 -0
- package/lib/cjs/components/livechatwidget/common/ActivitySubscriber/BotAuthActivitySubscriber.js +4 -5
- package/lib/cjs/components/livechatwidget/common/ChatWidgetEvents.js +15 -0
- package/lib/cjs/components/livechatwidget/common/PersistentConversationHandler.js +290 -0
- package/lib/cjs/components/livechatwidget/common/createAdapter.js +2 -0
- package/lib/cjs/components/livechatwidget/common/defaultProps/defaultPersistentChatHistoryProps.js +17 -0
- package/lib/cjs/components/livechatwidget/common/endChat.js +54 -12
- package/lib/cjs/components/livechatwidget/common/getMockChatSDKIfApplicable.js +4 -3
- package/lib/cjs/components/livechatwidget/common/initWebChatComposer.js +16 -7
- package/lib/cjs/components/livechatwidget/common/liveChatConfigUtils.js +36 -4
- package/lib/cjs/components/livechatwidget/common/overridePropsOnMockIfApplicable.js +2 -1
- package/lib/cjs/components/livechatwidget/common/registerTelemetryLoggers.js +3 -0
- package/lib/cjs/components/livechatwidget/common/renderSurveyHelpers.js +2 -2
- package/lib/cjs/components/livechatwidget/common/setPostChatContextAndLoadSurvey.js +3 -3
- package/lib/cjs/components/livechatwidget/common/startChat.js +10 -5
- package/lib/cjs/components/livechatwidget/common/startChatErrorHandler.js +24 -4
- package/lib/cjs/components/livechatwidget/interfaces/IMockProps.js +8 -2
- package/lib/cjs/components/livechatwidget/interfaces/IPersistentChatHistoryProps.js +1 -0
- package/lib/cjs/components/livechatwidget/livechatwidgetstateful/LiveChatWidgetStateful.js +152 -33
- package/lib/cjs/components/postchatsurveypanestateful/PostChatSurveyPaneStateful.js +37 -8
- package/lib/cjs/components/prechatsurveypanestateful/PreChatSurveyPaneStateful.js +12 -3
- package/lib/cjs/components/webchatcontainerstateful/WebChatContainerStateful.js +135 -26
- package/lib/cjs/components/webchatcontainerstateful/common/DesignerChatAdapter.js +43 -14
- package/lib/cjs/components/webchatcontainerstateful/common/DesignerChatSDK.js +6 -1
- package/lib/cjs/components/webchatcontainerstateful/common/activities/botActivity.js +14 -0
- package/lib/cjs/components/webchatcontainerstateful/common/activities/conversationDividerActivity.js +17 -0
- package/lib/cjs/components/webchatcontainerstateful/common/activityConverters/convertPersistentChatHistoryMessageToActivity.js +103 -0
- package/lib/cjs/components/webchatcontainerstateful/common/defaultProps/defaultMiddlewareLocalizedTexts.js +3 -1
- package/lib/cjs/components/webchatcontainerstateful/common/defaultProps/defaultWebChatStatefulProps.js +1 -1
- package/lib/cjs/components/webchatcontainerstateful/common/defaultStyles/defaultWebChatStyles.js +1 -1
- package/lib/cjs/components/webchatcontainerstateful/common/utils/chatAdapterUtils.js +36 -2
- package/lib/cjs/components/webchatcontainerstateful/common/utils/fontUtils.js +28 -0
- package/lib/cjs/components/webchatcontainerstateful/hooks/usePersistentChatHistory.js +57 -0
- package/lib/cjs/components/webchatcontainerstateful/interfaces/ICitation.js +1 -0
- package/lib/cjs/components/webchatcontainerstateful/interfaces/IExtendedChatConffig.js +1 -0
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/WebChatEventSubscribers.js +121 -0
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activities/Constants.js +10 -0
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activities/ConversationDividerActivity.js +47 -0
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activities/LazyLoadActivity.js +1058 -0
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activities/LoadInlineBannerActivity.js +34 -0
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityMiddleware.js +50 -1
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityStatusMiddleware.js +16 -2
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultAvatarTextStyles.js +1 -1
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultInLineBannerStyle.js +20 -0
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultSystemMessageStyles.js +1 -1
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/timestamps/DeliveredTimestamp.js +2 -2
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/timestamps/HistoryMessageTimestamp.js +59 -0
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/timestamps/NotDeliveredTimestamp.js +5 -3
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/timestamps/SendingTimestamp.js +2 -2
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/citationsMiddleware.js +102 -30
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/localizedStringsBotInitialsMiddleware.js +29 -7
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/queueOverflowHandlerMiddleware.js +2 -2
- package/lib/cjs/contexts/common/LiveChatWidgetActionType.js +47 -45
- package/lib/cjs/contexts/common/LiveChatWidgetContextInitialState.js +9 -1
- package/lib/cjs/contexts/createReducer.js +30 -0
- package/lib/cjs/firstresponselatency/FirstMessageTrackerFromBot.js +3 -2
- package/lib/cjs/firstresponselatency/FirstResponseLatencyTracker.js +6 -2
- package/lib/cjs/index.js +9 -1
- package/lib/cjs/plugins/newMessageEventHandler.js +4 -1
- package/lib/esm/common/Constants.js +9 -0
- package/lib/esm/common/facades/FacadeChatSDK.js +6 -0
- package/lib/esm/common/telemetry/AppInsightsEvents.js +14 -9
- package/lib/esm/common/telemetry/TelemetryConstants.js +47 -1
- package/lib/esm/common/telemetry/TelemetryManager.js +10 -7
- package/lib/esm/common/telemetry/loggers/appInsightsLogger.js +30 -14
- package/lib/esm/common/utils/SecureEventBus.js +328 -0
- package/lib/esm/common/utils/dispatchCustomEvent.js +18 -0
- package/lib/esm/common/utils.js +11 -0
- package/lib/esm/components/chatbuttonstateful/ChatButtonStateful.js +17 -5
- package/lib/esm/components/citationpanestateful/CitationDim.js +20 -0
- package/lib/esm/components/citationpanestateful/CitationPaneStateful.js +207 -0
- package/lib/esm/components/citationpanestateful/common/defaultProps/defaultCitationPaneProps.js +61 -0
- package/lib/esm/components/confirmationpanestateful/interfaces/IConfirmationPaneLocalizedTexts.js +1 -0
- package/lib/esm/components/headerstateful/HeaderStateful.js +9 -3
- package/lib/esm/components/livechatwidget/LiveChatWidget.js +4 -4
- package/lib/esm/components/livechatwidget/common/ActivitySubscriber/AddActivitySubscriber.js +120 -0
- package/lib/esm/components/livechatwidget/common/ActivitySubscriber/BotAuthActivitySubscriber.js +4 -5
- package/lib/esm/components/livechatwidget/common/ChatWidgetEvents.js +8 -0
- package/lib/esm/components/livechatwidget/common/PersistentConversationHandler.js +283 -0
- package/lib/esm/components/livechatwidget/common/createAdapter.js +2 -0
- package/lib/esm/components/livechatwidget/common/defaultProps/defaultPersistentChatHistoryProps.js +10 -0
- package/lib/esm/components/livechatwidget/common/endChat.js +55 -13
- package/lib/esm/components/livechatwidget/common/getMockChatSDKIfApplicable.js +4 -3
- package/lib/esm/components/livechatwidget/common/initWebChatComposer.js +16 -7
- package/lib/esm/components/livechatwidget/common/liveChatConfigUtils.js +33 -2
- package/lib/esm/components/livechatwidget/common/overridePropsOnMockIfApplicable.js +2 -1
- package/lib/esm/components/livechatwidget/common/registerTelemetryLoggers.js +3 -0
- package/lib/esm/components/livechatwidget/common/renderSurveyHelpers.js +2 -2
- package/lib/esm/components/livechatwidget/common/setPostChatContextAndLoadSurvey.js +3 -3
- package/lib/esm/components/livechatwidget/common/startChat.js +12 -7
- package/lib/esm/components/livechatwidget/common/startChatErrorHandler.js +23 -4
- package/lib/esm/components/livechatwidget/interfaces/IMockProps.js +3 -3
- package/lib/esm/components/livechatwidget/interfaces/IPersistentChatHistoryProps.js +1 -0
- package/lib/esm/components/livechatwidget/livechatwidgetstateful/LiveChatWidgetStateful.js +153 -34
- package/lib/esm/components/postchatsurveypanestateful/PostChatSurveyPaneStateful.js +39 -10
- package/lib/esm/components/prechatsurveypanestateful/PreChatSurveyPaneStateful.js +13 -4
- package/lib/esm/components/webchatcontainerstateful/WebChatContainerStateful.js +135 -27
- package/lib/esm/components/webchatcontainerstateful/common/DesignerChatAdapter.js +43 -14
- package/lib/esm/components/webchatcontainerstateful/common/DesignerChatSDK.js +6 -1
- package/lib/esm/components/webchatcontainerstateful/common/activities/botActivity.js +7 -0
- package/lib/esm/components/webchatcontainerstateful/common/activities/conversationDividerActivity.js +9 -0
- package/lib/esm/components/webchatcontainerstateful/common/activityConverters/convertPersistentChatHistoryMessageToActivity.js +96 -0
- package/lib/esm/components/webchatcontainerstateful/common/defaultProps/defaultMiddlewareLocalizedTexts.js +3 -1
- package/lib/esm/components/webchatcontainerstateful/common/defaultProps/defaultWebChatStatefulProps.js +2 -2
- package/lib/esm/components/webchatcontainerstateful/common/defaultStyles/defaultWebChatStyles.js +1 -1
- package/lib/esm/components/webchatcontainerstateful/common/utils/chatAdapterUtils.js +32 -0
- package/lib/esm/components/webchatcontainerstateful/common/utils/fontUtils.js +21 -0
- package/lib/esm/components/webchatcontainerstateful/hooks/usePersistentChatHistory.js +49 -0
- package/lib/esm/components/webchatcontainerstateful/interfaces/ICitation.js +1 -0
- package/lib/esm/components/webchatcontainerstateful/interfaces/IExtendedChatConffig.js +1 -0
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/WebChatEventSubscribers.js +114 -0
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activities/Constants.js +3 -0
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activities/ConversationDividerActivity.js +39 -0
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activities/LazyLoadActivity.js +1080 -0
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activities/LoadInlineBannerActivity.js +25 -0
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityMiddleware.js +48 -1
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityStatusMiddleware.js +13 -0
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultAvatarTextStyles.js +1 -1
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultInLineBannerStyle.js +13 -0
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultSystemMessageStyles.js +1 -1
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/timestamps/DeliveredTimestamp.js +1 -1
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/timestamps/HistoryMessageTimestamp.js +52 -0
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/timestamps/NotDeliveredTimestamp.js +3 -2
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/timestamps/SendingTimestamp.js +1 -1
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/citationsMiddleware.js +103 -30
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/localizedStringsBotInitialsMiddleware.js +29 -7
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/queueOverflowHandlerMiddleware.js +2 -2
- package/lib/esm/contexts/common/LiveChatWidgetActionType.js +47 -45
- package/lib/esm/contexts/common/LiveChatWidgetContextInitialState.js +9 -1
- package/lib/esm/contexts/createReducer.js +30 -0
- package/lib/esm/firstresponselatency/FirstMessageTrackerFromBot.js +3 -2
- package/lib/esm/firstresponselatency/FirstResponseLatencyTracker.js +6 -2
- package/lib/esm/index.js +1 -0
- package/lib/esm/plugins/newMessageEventHandler.js +4 -1
- package/lib/types/common/Constants.d.ts +8 -0
- package/lib/types/common/facades/FacadeChatSDK.d.ts +3 -1
- package/lib/types/common/telemetry/TelemetryConstants.d.ts +44 -2
- package/lib/types/common/telemetry/interfaces/IInternalTelemetryData.d.ts +1 -0
- package/lib/types/common/utils/SecureEventBus.d.ts +159 -0
- package/lib/types/common/utils/dispatchCustomEvent.d.ts +2 -0
- package/lib/types/common/utils.d.ts +9 -1
- package/lib/types/components/citationpanestateful/CitationDim.d.ts +5 -0
- package/lib/types/components/citationpanestateful/CitationPaneStateful.d.ts +4 -0
- package/lib/types/components/citationpanestateful/common/defaultProps/defaultCitationPaneProps.d.ts +11 -0
- package/lib/types/components/citationpanestateful/interfaces/ICitationPaneStatefulProps.d.ts +19 -0
- package/lib/types/components/confirmationpanestateful/common/defaultProps/defaultConfirmationPaneLocalizedTexts.d.ts +1 -1
- package/lib/types/components/confirmationpanestateful/interfaces/IConfirmationPaneStatefulProps.d.ts +1 -1
- package/lib/types/components/livechatwidget/common/ActivitySubscriber/AddActivitySubscriber.d.ts +45 -0
- package/lib/types/components/livechatwidget/common/ChatWidgetEvents.d.ts +7 -0
- package/lib/types/components/livechatwidget/common/PersistentConversationHandler.d.ts +28 -0
- package/lib/types/components/livechatwidget/common/defaultProps/defaultPersistentChatHistoryProps.d.ts +2 -0
- package/lib/types/components/livechatwidget/common/getMockChatSDKIfApplicable.d.ts +2 -1
- package/lib/types/components/livechatwidget/common/liveChatConfigUtils.d.ts +11 -0
- package/lib/types/components/livechatwidget/common/startChatErrorHandler.d.ts +1 -0
- package/lib/types/components/livechatwidget/interfaces/ILiveChatWidgetProps.d.ts +5 -1
- package/lib/types/components/livechatwidget/interfaces/IMockProps.d.ts +5 -3
- package/lib/types/components/livechatwidget/interfaces/IPersistentChatHistoryProps.d.ts +11 -0
- package/lib/types/components/webchatcontainerstateful/common/DesignerChatAdapter.d.ts +4 -2
- package/lib/types/components/webchatcontainerstateful/common/DesignerChatSDK.d.ts +5 -0
- package/lib/types/components/webchatcontainerstateful/common/activities/botActivity.d.ts +7 -0
- package/lib/types/components/webchatcontainerstateful/common/activities/conversationDividerActivity.d.ts +10 -0
- package/lib/types/components/webchatcontainerstateful/common/activityConverters/convertPersistentChatHistoryMessageToActivity.d.ts +2 -0
- package/lib/types/components/webchatcontainerstateful/common/utils/chatAdapterUtils.d.ts +6 -1
- package/lib/types/components/webchatcontainerstateful/common/utils/fontUtils.d.ts +10 -0
- package/lib/types/components/webchatcontainerstateful/hooks/usePersistentChatHistory.d.ts +4 -0
- package/lib/types/components/webchatcontainerstateful/interfaces/ICitation.d.ts +12 -0
- package/lib/types/components/webchatcontainerstateful/interfaces/IExtendedChatConffig.d.ts +15 -0
- package/lib/types/components/webchatcontainerstateful/webchatcontroller/WebChatEventSubscribers.d.ts +6 -0
- package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activities/Constants.d.ts +3 -0
- package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activities/ConversationDividerActivity.d.ts +4 -0
- package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activities/LazyLoadActivity.d.ts +326 -0
- package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activities/LoadInlineBannerActivity.d.ts +8 -0
- package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityMiddleware.d.ts +2 -1
- package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityStatusMiddleware.d.ts +1 -0
- package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultInLineBannerStyle.d.ts +2 -0
- package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/timestamps/HistoryMessageTimestamp.d.ts +2 -0
- package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/citationsMiddleware.d.ts +3 -4
- package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/localizedStringsBotInitialsMiddleware.d.ts +1 -1
- package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/queueOverflowHandlerMiddleware.d.ts +2 -2
- package/lib/types/contexts/common/ILiveChatWidgetContext.d.ts +2 -0
- package/lib/types/contexts/common/ILiveChatWidgetLocalizedTexts.d.ts +6 -0
- package/lib/types/contexts/common/LiveChatWidgetActionType.d.ts +47 -45
- package/lib/types/index.d.ts +1 -0
- package/package.json +3 -3
- /package/lib/cjs/components/{confirmationpanestateful/interfaces/IConfirmationPaneLocalizedText.js → citationpanestateful/interfaces/ICitationPaneStatefulProps.js} +0 -0
- /package/lib/esm/components/{confirmationpanestateful/interfaces/IConfirmationPaneLocalizedText.js → citationpanestateful/interfaces/ICitationPaneStatefulProps.js} +0 -0
- /package/lib/types/components/confirmationpanestateful/interfaces/{IConfirmationPaneLocalizedText.d.ts → IConfirmationPaneLocalizedTexts.d.ts} +0 -0
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import React, { useMemo } from "react";
|
|
2
|
+
import { defaultInlineBannerStyle } from "../defaultStyles/defaultInLineBannerStyle";
|
|
3
|
+
import { defaultMiddlewareLocalizedTexts } from "../../../../common/defaultProps/defaultMiddlewareLocalizedTexts";
|
|
4
|
+
import { mergeStyles } from "@fluentui/merge-styles";
|
|
5
|
+
const LoadInlineBannerActivity = _ref => {
|
|
6
|
+
let {
|
|
7
|
+
webChatContainerProps,
|
|
8
|
+
persistentChatHistory,
|
|
9
|
+
id
|
|
10
|
+
} = _ref;
|
|
11
|
+
const localizedTexts = useMemo(() => ({
|
|
12
|
+
...defaultMiddlewareLocalizedTexts,
|
|
13
|
+
...(webChatContainerProps === null || webChatContainerProps === void 0 ? void 0 : webChatContainerProps.localizedTexts)
|
|
14
|
+
}), [webChatContainerProps === null || webChatContainerProps === void 0 ? void 0 : webChatContainerProps.localizedTexts]);
|
|
15
|
+
const bannerStyle = mergeStyles(persistentChatHistory === null || persistentChatHistory === void 0 ? void 0 : persistentChatHistory.bannerStyle, defaultInlineBannerStyle);
|
|
16
|
+
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
|
|
17
|
+
id: id,
|
|
18
|
+
className: bannerStyle,
|
|
19
|
+
role: "status",
|
|
20
|
+
"aria-live": "polite",
|
|
21
|
+
"aria-label": localizedTexts.PREVIOUS_MESSAGES_LOADING,
|
|
22
|
+
"aria-busy": "true"
|
|
23
|
+
}, localizedTexts.PREVIOUS_MESSAGES_LOADING));
|
|
24
|
+
};
|
|
25
|
+
export default LoadInlineBannerActivity;
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
2
|
+
/* eslint-disable react/display-name */
|
|
1
3
|
/******
|
|
2
4
|
* ActivityMiddleware
|
|
3
5
|
*
|
|
@@ -7,16 +9,20 @@
|
|
|
7
9
|
* 3. Decodes certain html characters that came through from chat services
|
|
8
10
|
******/
|
|
9
11
|
|
|
12
|
+
import LazyLoadActivity, { LazyLoadHandler } from "./activities/LazyLoadActivity";
|
|
10
13
|
import { LogLevel, TelemetryEvent } from "../../../../../common/telemetry/TelemetryConstants";
|
|
11
14
|
import { Constants } from "../../../../../common/Constants";
|
|
15
|
+
import ConversationDividerActivity from "./activities/ConversationDividerActivity";
|
|
12
16
|
import { DirectLineActivityType } from "../../enums/DirectLineActivityType";
|
|
13
17
|
import { DirectLineSenderRole } from "../../enums/DirectLineSenderRole";
|
|
14
18
|
import React from "react";
|
|
15
19
|
import { TelemetryHelper } from "../../../../../common/telemetry/TelemetryHelper";
|
|
20
|
+
import { defaultMiddlewareLocalizedTexts } from "../../../common/defaultProps/defaultMiddlewareLocalizedTexts";
|
|
16
21
|
import { defaultSystemMessageStyles } from "./defaultStyles/defaultSystemMessageStyles";
|
|
17
22
|
import { defaultUserMessageStyles } from "./defaultStyles/defaultUserMessageStyles";
|
|
18
23
|
import { escapeHtml } from "../../../../../common/utils";
|
|
19
24
|
const loggedSystemMessages = new Array();
|
|
25
|
+
let lastRenderedAt = 0; // Track last rendered receivedAt timestamp for deduplication
|
|
20
26
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
21
27
|
const handleSystemMessage = (next, args, card, renderMarkdown, systemMessageStyleProps) => {
|
|
22
28
|
var _card$activity, _card$activity$channe, _card$activity$channe2, _card$activity2, _card$activity2$chann, _card$activity3, _card$activity3$chann, _card$activity3$chann2, _card$activity4, _card$activity4$chann, _card$activity5, _card$activity5$chann, _card$nextVisibleActi, _card$nextVisibleActi2, _card$activity6, _card$activity6$chann, _card$activity7, _card$nextVisibleActi3, _card$activity8;
|
|
@@ -65,7 +71,7 @@ const isDataTagsPresent = card => {
|
|
|
65
71
|
};
|
|
66
72
|
|
|
67
73
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
68
|
-
export const createActivityMiddleware = (renderMarkdown, systemMessageStyleProps, userMessageStyleProps) => () => next => function () {
|
|
74
|
+
export const createActivityMiddleware = (renderMarkdown, systemMessageStyleProps, userMessageStyleProps, localizedTexts) => () => next => function () {
|
|
69
75
|
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
70
76
|
args[_key] = arguments[_key];
|
|
71
77
|
}
|
|
@@ -81,6 +87,47 @@ export const createActivityMiddleware = (renderMarkdown, systemMessageStyleProps
|
|
|
81
87
|
if (isTagIncluded(card, Constants.systemMessageTag)) {
|
|
82
88
|
return handleSystemMessage(next, args, card, renderMarkdown, systemMessageStyleProps);
|
|
83
89
|
}
|
|
90
|
+
if (isTagIncluded(card, Constants.persistentChatHistoryMessagePullTriggerTag)) {
|
|
91
|
+
var _card$activity9, _card$activity9$chann, _card$activity9$chann2;
|
|
92
|
+
// Safety check: if this is a new chat session and flag is false, auto-correct it
|
|
93
|
+
if (!LazyLoadHandler.hasMoreHistoryAvailable) {
|
|
94
|
+
LazyLoadHandler.setHasMoreHistoryAvailable(true);
|
|
95
|
+
}
|
|
96
|
+
const receivedAt = card === null || card === void 0 ? void 0 : (_card$activity9 = card.activity) === null || _card$activity9 === void 0 ? void 0 : (_card$activity9$chann = _card$activity9.channelData) === null || _card$activity9$chann === void 0 ? void 0 : (_card$activity9$chann2 = _card$activity9$chann.webChat) === null || _card$activity9$chann2 === void 0 ? void 0 : _card$activity9$chann2.receivedAt;
|
|
97
|
+
if (receivedAt < lastRenderedAt) {
|
|
98
|
+
card.activity = null;
|
|
99
|
+
return () => false;
|
|
100
|
+
}
|
|
101
|
+
lastRenderedAt = receivedAt;
|
|
102
|
+
|
|
103
|
+
// Return a function that checks availability at render time
|
|
104
|
+
return () => {
|
|
105
|
+
// Double-check at render time in case history availability changed
|
|
106
|
+
if (!LazyLoadHandler.hasMoreHistoryAvailable) {
|
|
107
|
+
return null;
|
|
108
|
+
}
|
|
109
|
+
return /*#__PURE__*/React.createElement(LazyLoadActivity, null);
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
if (isTagIncluded(card, Constants.persistentChatHistoryMessageTag)) {
|
|
113
|
+
const userMessageStyles = {
|
|
114
|
+
...defaultUserMessageStyles,
|
|
115
|
+
...userMessageStyleProps
|
|
116
|
+
};
|
|
117
|
+
return function () {
|
|
118
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
119
|
+
className: card.activity.from.role === DirectLineSenderRole.User ? Constants.sentMessageClassName : Constants.receivedMessageClassName,
|
|
120
|
+
style: userMessageStyles
|
|
121
|
+
}, next(...args)(...arguments));
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
if (isTagIncluded(card, Constants.conversationDividerTag)) {
|
|
125
|
+
const conversationDividerLabel = (localizedTexts === null || localizedTexts === void 0 ? void 0 : localizedTexts.CONVERSATION_DIVIDER_ARIA_LABEL) || defaultMiddlewareLocalizedTexts.CONVERSATION_DIVIDER_ARIA_LABEL;
|
|
126
|
+
// Pass the computed localized text to the divider component
|
|
127
|
+
return /*#__PURE__*/React.createElement(ConversationDividerActivity, {
|
|
128
|
+
dividerActivityAriaLabel: conversationDividerLabel
|
|
129
|
+
});
|
|
130
|
+
}
|
|
84
131
|
if (card.activity.text && card.activity.type === DirectLineActivityType.Message) {
|
|
85
132
|
if (!card.activity.channelData.isHtmlEncoded && card.activity.channelId === Constants.webchatChannelId) {
|
|
86
133
|
card.activity.text = escapeHtml(card.activity.text);
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Constants, WebChatMiddlewareConstants } from "../../../../../common/Constants";
|
|
2
2
|
import { DeliveredTimestamp } from "./timestamps/DeliveredTimestamp";
|
|
3
|
+
import { HistoryMessageTimestamp } from "./timestamps/HistoryMessageTimestamp";
|
|
3
4
|
import { NotDeliveredTimestamp } from "./timestamps/NotDeliveredTimestamp";
|
|
4
5
|
import React from "react";
|
|
5
6
|
import { SendStatus } from "../../enums/SendStatus";
|
|
@@ -26,6 +27,11 @@ export const activityStatusMiddleware = () => next => args => {
|
|
|
26
27
|
current_role = role,
|
|
27
28
|
current_timestamp = timestamp;
|
|
28
29
|
let sameTimestampGroupTemp = sameTimestampGroup;
|
|
30
|
+
if (tags !== null && tags !== void 0 && tags.includes(Constants.persistentChatHistoryMessageTag)) {
|
|
31
|
+
return /*#__PURE__*/React.createElement(HistoryMessageTimestamp, {
|
|
32
|
+
args: args
|
|
33
|
+
});
|
|
34
|
+
}
|
|
29
35
|
if (args[WebChatMiddlewareConstants.nextVisibleActivity]) {
|
|
30
36
|
const {
|
|
31
37
|
nextVisibleActivity: {
|
|
@@ -35,6 +41,7 @@ export const activityStatusMiddleware = () => next => args => {
|
|
|
35
41
|
timestamp
|
|
36
42
|
}
|
|
37
43
|
} = args;
|
|
44
|
+
|
|
38
45
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
39
46
|
const next_name = name,
|
|
40
47
|
next_timestamp = timestamp;
|
|
@@ -61,4 +68,10 @@ export const activityStatusMiddleware = () => next => args => {
|
|
|
61
68
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
62
69
|
;
|
|
63
70
|
}
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
74
|
+
export const createActivityStatusMiddleware = function () {
|
|
75
|
+
let locale = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "en-us";
|
|
76
|
+
return activityStatusMiddleware;
|
|
64
77
|
};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export const defaultAvatarTextStyles = {
|
|
2
2
|
margin: "0",
|
|
3
|
-
fontFamily: "
|
|
3
|
+
fontFamily: "'Segoe UI', 'Apple Color Emoji', 'Noto Color Emoji', 'Segoe UI Emoji', Arial, sans-serif",
|
|
4
4
|
fontWeight: 600,
|
|
5
5
|
fontSize: "13px",
|
|
6
6
|
lineHeight: "18px",
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { defaultSystemMessageStyles } from "./defaultSystemMessageStyles";
|
|
2
|
+
// Adjust the import path if necessary
|
|
3
|
+
|
|
4
|
+
export const defaultInlineBannerStyle = {
|
|
5
|
+
...defaultSystemMessageStyles,
|
|
6
|
+
visibility: "visible",
|
|
7
|
+
height: "20px",
|
|
8
|
+
display: "flex",
|
|
9
|
+
justifyContent: "center",
|
|
10
|
+
alignItems: "center",
|
|
11
|
+
margin: "5px 10px",
|
|
12
|
+
cursor: "pointer"
|
|
13
|
+
};
|
|
@@ -5,7 +5,7 @@ export const defaultSystemMessageStyles = {
|
|
|
5
5
|
fontSize: "12px",
|
|
6
6
|
borderRadius: 0,
|
|
7
7
|
minHeight: "auto",
|
|
8
|
-
fontFamily: "Segoe UI",
|
|
8
|
+
fontFamily: "'Segoe UI', 'Apple Color Emoji', 'Noto Color Emoji', 'Segoe UI Emoji', Arial, sans-serif",
|
|
9
9
|
lineHeight: "16px",
|
|
10
10
|
padding: "0px 10px 0 10px"
|
|
11
11
|
};
|
|
@@ -4,7 +4,7 @@ import { Stack } from "@fluentui/react";
|
|
|
4
4
|
import { defaultMiddlewareLocalizedTexts } from "../../../../common/defaultProps/defaultMiddlewareLocalizedTexts";
|
|
5
5
|
import { defaultTimestampContentStyles } from "../defaultStyles/defaultTimestampContentStyles";
|
|
6
6
|
import { getTimestampHourMinute } from "../../../../../../common/utils";
|
|
7
|
-
import
|
|
7
|
+
import useChatContextStore from "../../../../../../hooks/useChatContextStore";
|
|
8
8
|
|
|
9
9
|
/* eslint @typescript-eslint/no-explicit-any: "off" */
|
|
10
10
|
export const DeliveredTimestamp = _ref => {
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { Stack } from "@fluentui/react";
|
|
3
|
+
import { defaultMiddlewareLocalizedTexts } from "../../../../common/defaultProps/defaultMiddlewareLocalizedTexts";
|
|
4
|
+
import { defaultTimestampContentStyles } from "../defaultStyles/defaultTimestampContentStyles";
|
|
5
|
+
import { getTimestampHourMinute } from "../../../../../../common/utils";
|
|
6
|
+
import useChatContextStore from "../../../../../../hooks/useChatContextStore";
|
|
7
|
+
|
|
8
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
9
|
+
export const HistoryMessageTimestamp = _ref => {
|
|
10
|
+
var _state$domainStates$r, _state$domainStates$r2, _state$domainStates$m;
|
|
11
|
+
let {
|
|
12
|
+
args
|
|
13
|
+
} = _ref;
|
|
14
|
+
const [state] = useChatContextStore();
|
|
15
|
+
const dir = ((_state$domainStates$r = state.domainStates.renderingMiddlewareProps) === null || _state$domainStates$r === void 0 ? void 0 : _state$domainStates$r.timestampDir) ?? state.domainStates.globalDir;
|
|
16
|
+
const {
|
|
17
|
+
activity: {
|
|
18
|
+
timestamp,
|
|
19
|
+
from: {
|
|
20
|
+
name,
|
|
21
|
+
role
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
} = args;
|
|
25
|
+
const contentStyles = {
|
|
26
|
+
...defaultTimestampContentStyles,
|
|
27
|
+
...((_state$domainStates$r2 = state.domainStates.renderingMiddlewareProps) === null || _state$domainStates$r2 === void 0 ? void 0 : _state$domainStates$r2.timestampContentStyleProps)
|
|
28
|
+
};
|
|
29
|
+
const getTimeElement = timestamp => {
|
|
30
|
+
const timeString = getTimestampHourMinute(timestamp);
|
|
31
|
+
const isAmPmFormat = timeString.toLowerCase().includes("am") || timeString.toLowerCase().includes("pm");
|
|
32
|
+
if (dir === "rtl" && isAmPmFormat) {
|
|
33
|
+
return /*#__PURE__*/React.createElement("span", {
|
|
34
|
+
dir: "ltr"
|
|
35
|
+
}, timeString);
|
|
36
|
+
} else {
|
|
37
|
+
return /*#__PURE__*/React.createElement("span", {
|
|
38
|
+
dir: dir
|
|
39
|
+
}, timeString);
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
return /*#__PURE__*/React.createElement(Stack, {
|
|
43
|
+
style: contentStyles,
|
|
44
|
+
dir: dir
|
|
45
|
+
}, role === "bot" && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("span", {
|
|
46
|
+
dir: dir,
|
|
47
|
+
"aria-hidden": "false"
|
|
48
|
+
}, name, " : ", getTimeElement(timestamp))), role === "user" && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("span", {
|
|
49
|
+
"aria-hidden": "false",
|
|
50
|
+
dir: dir
|
|
51
|
+
}, " ", getTimeElement(timestamp), " - ", ((_state$domainStates$m = state.domainStates.middlewareLocalizedTexts) === null || _state$domainStates$m === void 0 ? void 0 : _state$domainStates$m.MIDDLEWARE_MESSAGE_DELIVERED) ?? defaultMiddlewareLocalizedTexts.MIDDLEWARE_MESSAGE_DELIVERED), " "));
|
|
52
|
+
};
|
|
@@ -7,9 +7,9 @@ import { defaultTimestampFailedStyles } from "../defaultStyles/defaultTimestampF
|
|
|
7
7
|
import { defaultTimestampRetryStyles } from "../defaultStyles/defaultTimestampRetryStyles";
|
|
8
8
|
import { getTimestampHourMinute } from "../../../../../../common/utils";
|
|
9
9
|
import { hooks } from "botframework-webchat";
|
|
10
|
-
import
|
|
10
|
+
import useChatContextStore from "../../../../../../hooks/useChatContextStore";
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
13
13
|
export const NotDeliveredTimestamp = _ref => {
|
|
14
14
|
var _state$domainStates$r, _state$domainStates$r2, _state$domainStates$r3, _state$domainStates$r4, _state$domainStates$m, _state$domainStates$m2;
|
|
15
15
|
let {
|
|
@@ -69,6 +69,7 @@ export const NotDeliveredTimestamp = _ref => {
|
|
|
69
69
|
style: failedTextStyles
|
|
70
70
|
}, " ", ((_state$domainStates$m = state.domainStates.middlewareLocalizedTexts) === null || _state$domainStates$m === void 0 ? void 0 : _state$domainStates$m.MIDDLEWARE_MESSAGE_NOT_DELIVERED) ?? defaultMiddlewareLocalizedTexts.MIDDLEWARE_MESSAGE_NOT_DELIVERED, " "), /*#__PURE__*/React.createElement("span", null, " \xA0-\xA0 "), /*#__PURE__*/React.createElement("span", {
|
|
71
71
|
style: retryTextStyles,
|
|
72
|
+
role: "button",
|
|
72
73
|
onClick: onRetryClick,
|
|
73
74
|
onKeyDown: onRetryKeyEnter,
|
|
74
75
|
tabIndex: 0
|
|
@@ -2,7 +2,7 @@ import React from "react";
|
|
|
2
2
|
import { Stack } from "@fluentui/react";
|
|
3
3
|
import { defaultMiddlewareLocalizedTexts } from "../../../../common/defaultProps/defaultMiddlewareLocalizedTexts";
|
|
4
4
|
import { defaultTimestampContentStyles } from "../defaultStyles/defaultTimestampContentStyles";
|
|
5
|
-
import
|
|
5
|
+
import useChatContextStore from "../../../../../../hooks/useChatContextStore";
|
|
6
6
|
|
|
7
7
|
/* eslint @typescript-eslint/no-explicit-any: "off" */
|
|
8
8
|
export const SendingTimestamp = () => {
|
|
@@ -1,56 +1,130 @@
|
|
|
1
1
|
import { LogLevel, TelemetryEvent } from "../../../../../common/telemetry/TelemetryConstants";
|
|
2
|
+
import { LiveChatWidgetActionType } from "../../../../../contexts/common/LiveChatWidgetActionType";
|
|
2
3
|
import { TelemetryHelper } from "../../../../../common/telemetry/TelemetryHelper";
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
4
|
+
import { executeReducer } from "../../../../../contexts/createReducer";
|
|
5
|
+
|
|
6
|
+
// Middleware that extracts citation metadata from incoming ACS activities and
|
|
7
|
+
// updates in-memory app state with a global citation map. Also rewrites
|
|
8
|
+
// per-message citation labels in the activity text to use a stable,
|
|
9
|
+
// message-scoped prefix when the producer provides a message id.
|
|
10
|
+
|
|
11
|
+
export const createCitationsMiddleware = (state, dispatch) => () => next => action => {
|
|
12
|
+
var _action$payload;
|
|
13
|
+
if ((_action$payload = action.payload) !== null && _action$payload !== void 0 && _action$payload.activity) {
|
|
14
|
+
if (isApplicable(action)) {
|
|
15
|
+
try {
|
|
16
|
+
var _action$payload2, _action$payload2$acti, _gptFeedback$summariz, _gptFeedback$summariz2;
|
|
17
|
+
const inMemoryState = executeReducer(state, {
|
|
18
|
+
type: LiveChatWidgetActionType.GET_IN_MEMORY_STATE,
|
|
19
|
+
payload: null
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
// Use the producer-supplied messageid as a stable per-message prefix
|
|
23
|
+
// when present. Do not derive a prefix from activity.id or timestamps.
|
|
24
|
+
const messagePrefix = ((_action$payload2 = action.payload) === null || _action$payload2 === void 0 ? void 0 : (_action$payload2$acti = _action$payload2.activity) === null || _action$payload2$acti === void 0 ? void 0 : _action$payload2$acti.messageid) ?? "";
|
|
25
|
+
const gptFeedback = JSON.parse(action.payload.activity.channelData.metadata["pva:gpt-feedback"]);
|
|
26
|
+
// Extract citation objects from the model response
|
|
27
|
+
const citations = (_gptFeedback$summariz = gptFeedback.summarizationOpenAIResponse) === null || _gptFeedback$summariz === void 0 ? void 0 : (_gptFeedback$summariz2 = _gptFeedback$summariz.result) === null || _gptFeedback$summariz2 === void 0 ? void 0 : _gptFeedback$summariz2.textCitations;
|
|
28
|
+
// Rewrite inline citation labels in activity.text to match the global map keys
|
|
29
|
+
const updatedText = replaceCitations(action.payload.activity.text, citations, messagePrefix);
|
|
30
|
+
|
|
31
|
+
// Create new activity object to avoid mutation
|
|
32
|
+
action.payload.activity = {
|
|
33
|
+
...action.payload.activity,
|
|
34
|
+
text: updatedText
|
|
35
|
+
};
|
|
36
|
+
// Build a global citation map keyed by the prefixed citation id and
|
|
37
|
+
// dispatch it to app state so the UI container can render citations.
|
|
11
38
|
try {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
39
|
+
var _inMemoryState$domain;
|
|
40
|
+
const citationMap = {};
|
|
41
|
+
if (citations && Array.isArray(citations)) {
|
|
42
|
+
citations.forEach(citation => {
|
|
43
|
+
if (citation !== null && citation !== void 0 && citation.id) {
|
|
44
|
+
// Preserve the 'cite:' scheme so renderer click handling remains consistent
|
|
45
|
+
const idWithoutScheme = citation.id.replace(/^cite:/, "");
|
|
46
|
+
const prefixedId = `cite:${messagePrefix}_${idWithoutScheme}`;
|
|
47
|
+
citationMap[prefixedId] = citation.text || citation.title || "";
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
// Read current in-memory state to merge with existing citations
|
|
53
|
+
//const inMemoryState = executeReducer(state, { type: LiveChatWidgetActionType.GET_IN_MEMORY_STATE, payload: null });
|
|
54
|
+
const existingCitations = (inMemoryState === null || inMemoryState === void 0 ? void 0 : (_inMemoryState$domain = inMemoryState.domainStates) === null || _inMemoryState$domain === void 0 ? void 0 : _inMemoryState$domain.citations) || {};
|
|
55
|
+
const updatedCitations = {
|
|
56
|
+
...existingCitations,
|
|
57
|
+
...citationMap
|
|
58
|
+
};
|
|
59
|
+
// Always dispatch to app state
|
|
60
|
+
dispatch({
|
|
61
|
+
type: LiveChatWidgetActionType.SET_CITATIONS,
|
|
62
|
+
payload: updatedCitations
|
|
63
|
+
});
|
|
64
|
+
} catch (innerErr) {
|
|
65
|
+
TelemetryHelper.logActionEvent(LogLevel.WARN, {
|
|
18
66
|
Event: TelemetryEvent.CitationMiddlewareFailed,
|
|
19
67
|
ExceptionDetails: {
|
|
20
|
-
ErrorData: "Error while
|
|
21
|
-
Exception:
|
|
68
|
+
ErrorData: "Error while populating citation map",
|
|
69
|
+
Exception: innerErr
|
|
22
70
|
}
|
|
23
71
|
});
|
|
24
72
|
}
|
|
73
|
+
} catch (error) {
|
|
74
|
+
TelemetryHelper.logActionEvent(LogLevel.ERROR, {
|
|
75
|
+
Event: TelemetryEvent.CitationMiddlewareFailed,
|
|
76
|
+
ExceptionDetails: {
|
|
77
|
+
ErrorData: "Error while converting citation labels",
|
|
78
|
+
Exception: error
|
|
79
|
+
}
|
|
80
|
+
});
|
|
25
81
|
}
|
|
26
82
|
}
|
|
27
|
-
|
|
28
|
-
|
|
83
|
+
}
|
|
84
|
+
return next(action);
|
|
29
85
|
};
|
|
30
86
|
const isApplicable = action => {
|
|
31
|
-
var _action$
|
|
32
|
-
if ((action === null || action === void 0 ? void 0 : (_action$
|
|
33
|
-
var _action$
|
|
34
|
-
//
|
|
35
|
-
if (action !== null && action !== void 0 && (_action$
|
|
87
|
+
var _action$payload3, _action$payload3$acti, _action$payload4, _action$payload4$acti;
|
|
88
|
+
if ((action === null || action === void 0 ? void 0 : (_action$payload3 = action.payload) === null || _action$payload3 === void 0 ? void 0 : (_action$payload3$acti = _action$payload3.activity) === null || _action$payload3$acti === void 0 ? void 0 : _action$payload3$acti.actionType) === "DIRECT_LINE/INCOMING_ACTIVITY" && (action === null || action === void 0 ? void 0 : (_action$payload4 = action.payload) === null || _action$payload4 === void 0 ? void 0 : (_action$payload4$acti = _action$payload4.activity) === null || _action$payload4$acti === void 0 ? void 0 : _action$payload4$acti.channelId) === "ACS_CHANNEL") {
|
|
89
|
+
var _action$payload5, _action$payload5$acti, _action$payload5$acti2, _action$payload5$acti3;
|
|
90
|
+
// Only applicable for ACS incoming activities that include pva:gpt-feedback
|
|
91
|
+
if (action !== null && action !== void 0 && (_action$payload5 = action.payload) !== null && _action$payload5 !== void 0 && (_action$payload5$acti = _action$payload5.activity) !== null && _action$payload5$acti !== void 0 && (_action$payload5$acti2 = _action$payload5$acti.channelData) !== null && _action$payload5$acti2 !== void 0 && (_action$payload5$acti3 = _action$payload5$acti2.metadata) !== null && _action$payload5$acti3 !== void 0 && _action$payload5$acti3["pva:gpt-feedback"]) {
|
|
36
92
|
return true;
|
|
37
93
|
}
|
|
38
94
|
}
|
|
39
95
|
return false;
|
|
40
96
|
};
|
|
41
|
-
const replaceCitations = (text, citations) => {
|
|
97
|
+
const replaceCitations = (text, citations, messagePrefix) => {
|
|
42
98
|
if (!citations || !Array.isArray(citations)) {
|
|
43
99
|
return text;
|
|
44
100
|
}
|
|
45
101
|
try {
|
|
46
|
-
|
|
47
|
-
|
|
102
|
+
let updatedText = text;
|
|
103
|
+
|
|
104
|
+
// First, handle the citation reference definitions at the end (e.g., [1]: cite:1757450535119_1 "index.html")
|
|
105
|
+
// These should NOT be escaped as they are proper citation definitions
|
|
106
|
+
updatedText = updatedText.replace(/\[(\d+)\]:\s(cite:\d+)\s"([^\\"]+)"/g, (match, number, citeId) => {
|
|
107
|
+
// Attempt to find a citation object matching the inline cite id and
|
|
108
|
+
// update the displayed id/title. When a messagePrefix exists we
|
|
109
|
+
// rewrite the id to the prefixed form so it aligns with the
|
|
110
|
+
// global citation map keys.
|
|
111
|
+
const lookupId = citeId;
|
|
112
|
+
const citation = citations.find(c => c.id === lookupId);
|
|
48
113
|
if (citation) {
|
|
49
|
-
|
|
50
|
-
|
|
114
|
+
const idWithoutScheme = citeId.replace(/^cite:/, "");
|
|
115
|
+
const prefixed = messagePrefix ? `cite:${messagePrefix}_${idWithoutScheme}` : citeId;
|
|
116
|
+
return `[${number}]: ${prefixed} "${citation.title}"`;
|
|
51
117
|
}
|
|
52
|
-
return match;
|
|
118
|
+
return match;
|
|
119
|
+
});
|
|
120
|
+
|
|
121
|
+
// Second, escape inline citation references that are NOT followed by a colon
|
|
122
|
+
// This handles cases like "[1][2]"" in the middle of text that should be escaped for markdown
|
|
123
|
+
updatedText = updatedText.replace(/\[(\d+)\](?!:)/g, (match, number) => {
|
|
124
|
+
// Escape the brackets to prevent markdown from treating them as incomplete link syntax
|
|
125
|
+
return `[${number}]`;
|
|
53
126
|
});
|
|
127
|
+
return updatedText;
|
|
54
128
|
} catch (error) {
|
|
55
129
|
TelemetryHelper.logActionEvent(LogLevel.ERROR, {
|
|
56
130
|
Event: TelemetryEvent.CitationMiddlewareFailed,
|
|
@@ -59,7 +133,6 @@ const replaceCitations = (text, citations) => {
|
|
|
59
133
|
Exception: error
|
|
60
134
|
}
|
|
61
135
|
});
|
|
62
|
-
// Return the original text in case of issues
|
|
63
136
|
return text;
|
|
64
137
|
}
|
|
65
138
|
};
|
|
@@ -1,15 +1,23 @@
|
|
|
1
1
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
2
2
|
|
|
3
|
+
import { BroadcastService } from "@microsoft/omnichannel-chat-components";
|
|
3
4
|
import { Constants } from "../../../../../common/Constants";
|
|
4
|
-
import { getIconText } from "../../../../../common/utils";
|
|
5
|
-
import { defaultWebChatStyles } from "../../../common/defaultStyles/defaultWebChatStyles";
|
|
6
5
|
import { WebChatActionType } from "../../enums/WebChatActionType";
|
|
6
|
+
import { defaultWebChatStyles } from "../../../common/defaultStyles/defaultWebChatStyles";
|
|
7
|
+
import { getIconText } from "../../../../../common/utils";
|
|
7
8
|
let currentAgentInitials = defaultWebChatStyles.botAvatarInitials;
|
|
8
|
-
|
|
9
|
+
|
|
10
|
+
// Optional external updater (React context dispatch wrapper) set at runtime
|
|
11
|
+
let externalInitialsUpdater;
|
|
12
|
+
export const localizedStringsBotInitialsMiddleware = onInitialsChange => _ref => {
|
|
9
13
|
let {
|
|
10
14
|
dispatch
|
|
11
15
|
} = _ref;
|
|
12
16
|
return next => action => {
|
|
17
|
+
if (onInitialsChange && !externalInitialsUpdater) {
|
|
18
|
+
externalInitialsUpdater = onInitialsChange; // capture once
|
|
19
|
+
}
|
|
20
|
+
|
|
13
21
|
if (action.type === WebChatActionType.DIRECT_LINE_INCOMING_ACTIVITY) {
|
|
14
22
|
var _action$payload, _activity$from;
|
|
15
23
|
const activity = (_action$payload = action.payload) === null || _action$payload === void 0 ? void 0 : _action$payload.activity;
|
|
@@ -17,10 +25,25 @@ export const localizedStringsBotInitialsMiddleware = () => _ref => {
|
|
|
17
25
|
var _activity$channelData, _activity$channelData2, _activity$tags;
|
|
18
26
|
const agentName = activity.from.name.trim();
|
|
19
27
|
const isSystemMessage = agentName === "__agent__" || agentName.startsWith("__") || ((_activity$channelData = activity.channelData) === null || _activity$channelData === void 0 ? void 0 : (_activity$channelData2 = _activity$channelData.tags) === null || _activity$channelData2 === void 0 ? void 0 : _activity$channelData2.includes(Constants.systemMessageTag)) || ((_activity$tags = activity.tags) === null || _activity$tags === void 0 ? void 0 : _activity$tags.includes(Constants.systemMessageTag));
|
|
20
|
-
if (!isSystemMessage && agentName
|
|
21
|
-
// Update initials for valid agent/bot names
|
|
28
|
+
if (!isSystemMessage && agentName) {
|
|
22
29
|
const newInitials = getIconText(agentName) || currentAgentInitials;
|
|
23
|
-
currentAgentInitials
|
|
30
|
+
if (newInitials !== currentAgentInitials) {
|
|
31
|
+
var _externalInitialsUpda;
|
|
32
|
+
currentAgentInitials = newInitials;
|
|
33
|
+
// Notify external React context if provided
|
|
34
|
+
(_externalInitialsUpda = externalInitialsUpdater) === null || _externalInitialsUpda === void 0 ? void 0 : _externalInitialsUpda(currentAgentInitials || "");
|
|
35
|
+
// Broadcast (optional) for multi-tab sync without forcing consumers
|
|
36
|
+
BroadcastService.postMessage({
|
|
37
|
+
eventName: "BotAvatarInitialsUpdated",
|
|
38
|
+
payload: {
|
|
39
|
+
initials: currentAgentInitials
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
// Also dispatch a no-op action into WebChat store to encourage re-render (cheap)
|
|
43
|
+
dispatch({
|
|
44
|
+
type: "__BOT_INITIALS_UPDATED__"
|
|
45
|
+
});
|
|
46
|
+
}
|
|
24
47
|
}
|
|
25
48
|
}
|
|
26
49
|
}
|
|
@@ -33,7 +56,6 @@ export const getOverriddenLocalizedStrings = existingOverrides => {
|
|
|
33
56
|
...strings,
|
|
34
57
|
...existingOverrides
|
|
35
58
|
};
|
|
36
|
-
|
|
37
59
|
// Apply dynamic bot initials to alt text if not already overridden through props
|
|
38
60
|
if (!(existingOverrides !== null && existingOverrides !== void 0 && existingOverrides.ACTIVITY_BOT_SAID_ALT)) {
|
|
39
61
|
result.ACTIVITY_BOT_SAID_ALT = `${currentAgentInitials} said:`;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { WebChatActionType } from "../../enums/WebChatActionType";
|
|
2
1
|
import { LogLevel, TelemetryEvent } from "../../../../../common/telemetry/TelemetryConstants";
|
|
3
|
-
import { TelemetryHelper } from "../../../../../common/telemetry/TelemetryHelper";
|
|
4
2
|
import { LiveChatWidgetActionType } from "../../../../../contexts/common/LiveChatWidgetActionType";
|
|
3
|
+
import { TelemetryHelper } from "../../../../../common/telemetry/TelemetryHelper";
|
|
4
|
+
import { WebChatActionType } from "../../enums/WebChatActionType";
|
|
5
5
|
import { executeReducer } from "../../../../../contexts/createReducer";
|
|
6
6
|
import { isEndConversationDueToOverflowActivity } from "../../../../../common/utils";
|
|
7
7
|
const queueOverflowHandlingHelper = async (state, dispatch) => {
|