@microsoft/omnichannel-chat-widget 1.8.3 → 1.8.4-main.7bdb634
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/cjs/common/Constants.js +4 -0
- package/lib/cjs/common/facades/FacadeChatSDK.js +6 -0
- package/lib/cjs/common/telemetry/TelemetryConstants.js +31 -0
- package/lib/cjs/common/utils/SecureEventBus.js +307 -0
- package/lib/cjs/common/utils/dispatchCustomEvent.js +25 -0
- package/lib/cjs/components/livechatwidget/common/ActivitySubscriber/AddActivitySubscriber.js +127 -0
- package/lib/cjs/components/livechatwidget/common/ChatWidgetEvents.js +15 -0
- package/lib/cjs/components/livechatwidget/common/PersistentConversationHandler.js +284 -0
- package/lib/cjs/components/livechatwidget/common/createAdapter.js +2 -0
- package/lib/cjs/components/livechatwidget/common/defaultProps/defaultPersistentChatHistoryProps.js +18 -0
- package/lib/cjs/components/livechatwidget/common/endChat.js +7 -1
- package/lib/cjs/components/livechatwidget/common/initWebChatComposer.js +7 -5
- package/lib/cjs/components/livechatwidget/interfaces/IPersistentChatHistoryProps.js +1 -0
- package/lib/cjs/components/webchatcontainerstateful/WebChatContainerStateful.js +31 -5
- 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 +97 -0
- package/lib/cjs/components/webchatcontainerstateful/common/defaultProps/defaultMiddlewareLocalizedTexts.js +2 -1
- package/lib/cjs/components/webchatcontainerstateful/common/defaultProps/defaultWebChatStatefulProps.js +1 -1
- package/lib/cjs/components/webchatcontainerstateful/hooks/usePersistentChatHistory.js +59 -0
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/WebChatEventSubscribers.js +122 -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 +18 -0
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activities/LazyLoadActivity.js +1038 -0
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activities/LoadInlineBannerActivity.js +34 -0
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityMiddleware.js +44 -0
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityStatusMiddleware.js +16 -2
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultInLineBannerStyle.js +20 -0
- 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 +4 -3
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/timestamps/SendingTimestamp.js +2 -2
- package/lib/esm/common/Constants.js +4 -0
- package/lib/esm/common/facades/FacadeChatSDK.js +6 -0
- package/lib/esm/common/telemetry/TelemetryConstants.js +31 -0
- package/lib/esm/common/utils/SecureEventBus.js +328 -0
- package/lib/esm/common/utils/dispatchCustomEvent.js +18 -0
- package/lib/esm/components/livechatwidget/common/ActivitySubscriber/AddActivitySubscriber.js +120 -0
- package/lib/esm/components/livechatwidget/common/ChatWidgetEvents.js +8 -0
- package/lib/esm/components/livechatwidget/common/PersistentConversationHandler.js +277 -0
- package/lib/esm/components/livechatwidget/common/createAdapter.js +2 -0
- package/lib/esm/components/livechatwidget/common/defaultProps/defaultPersistentChatHistoryProps.js +11 -0
- package/lib/esm/components/livechatwidget/common/endChat.js +7 -1
- package/lib/esm/components/livechatwidget/common/initWebChatComposer.js +7 -5
- package/lib/esm/components/livechatwidget/interfaces/IPersistentChatHistoryProps.js +1 -0
- package/lib/esm/components/webchatcontainerstateful/WebChatContainerStateful.js +34 -5
- 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 +90 -0
- package/lib/esm/components/webchatcontainerstateful/common/defaultProps/defaultMiddlewareLocalizedTexts.js +2 -1
- package/lib/esm/components/webchatcontainerstateful/common/defaultProps/defaultWebChatStatefulProps.js +2 -2
- package/lib/esm/components/webchatcontainerstateful/hooks/usePersistentChatHistory.js +51 -0
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/WebChatEventSubscribers.js +115 -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 +10 -0
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activities/LazyLoadActivity.js +1060 -0
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activities/LoadInlineBannerActivity.js +25 -0
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityMiddleware.js +42 -0
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityStatusMiddleware.js +13 -0
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultInLineBannerStyle.js +13 -0
- 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 +2 -2
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/timestamps/SendingTimestamp.js +1 -1
- package/lib/types/common/Constants.d.ts +3 -0
- package/lib/types/common/facades/FacadeChatSDK.d.ts +3 -1
- package/lib/types/common/telemetry/TelemetryConstants.d.ts +30 -2
- package/lib/types/common/utils/SecureEventBus.d.ts +159 -0
- package/lib/types/common/utils/dispatchCustomEvent.d.ts +2 -0
- 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/interfaces/ILiveChatWidgetProps.d.ts +2 -0
- package/lib/types/components/livechatwidget/interfaces/IPersistentChatHistoryProps.d.ts +7 -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/hooks/usePersistentChatHistory.d.ts +4 -0
- package/lib/types/components/webchatcontainerstateful/webchatcontroller/WebChatEventSubscribers.d.ts +7 -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/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/contexts/common/ILiveChatWidgetLocalizedTexts.d.ts +1 -0
- package/package.json +2 -2
|
@@ -0,0 +1,284 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
var _TelemetryConstants = require("../../../common/telemetry/TelemetryConstants");
|
|
8
|
+
var _omnichannelChatComponents = require("@microsoft/omnichannel-chat-components");
|
|
9
|
+
var _ChatWidgetEvents = _interopRequireDefault(require("./ChatWidgetEvents"));
|
|
10
|
+
var _TelemetryHelper = require("../../../common/telemetry/TelemetryHelper");
|
|
11
|
+
var _conversationDividerActivity = _interopRequireDefault(require("../../webchatcontainerstateful/common/activities/conversationDividerActivity"));
|
|
12
|
+
var _convertPersistentChatHistoryMessageToActivity = _interopRequireDefault(require("../../webchatcontainerstateful/common/activityConverters/convertPersistentChatHistoryMessageToActivity"));
|
|
13
|
+
var _utils = require("../../../common/utils");
|
|
14
|
+
var _defaultPersistentChatHistoryProps = require("./defaultProps/defaultPersistentChatHistoryProps");
|
|
15
|
+
var _dispatchCustomEvent = _interopRequireDefault(require("../../../common/utils/dispatchCustomEvent"));
|
|
16
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
17
|
+
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
|
18
|
+
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }
|
|
19
|
+
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
|
|
20
|
+
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
21
|
+
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
|
|
22
|
+
function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
|
|
23
|
+
/**
|
|
24
|
+
* Class responsible for handling persistent conversation history
|
|
25
|
+
*/
|
|
26
|
+
let PersistentConversationHandler = /*#__PURE__*/function () {
|
|
27
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
28
|
+
|
|
29
|
+
function PersistentConversationHandler(facadeChatSDK, props) {
|
|
30
|
+
_classCallCheck(this, PersistentConversationHandler);
|
|
31
|
+
_defineProperty(this, "appliedProps", {
|
|
32
|
+
..._defaultPersistentChatHistoryProps.defaultPersistentChatHistoryProps
|
|
33
|
+
});
|
|
34
|
+
_defineProperty(this, "isLastPull", false);
|
|
35
|
+
_defineProperty(this, "pageToken", null);
|
|
36
|
+
_defineProperty(this, "facadeChatSDK", void 0);
|
|
37
|
+
_defineProperty(this, "lastMessage", null);
|
|
38
|
+
_defineProperty(this, "count", 0);
|
|
39
|
+
_defineProperty(this, "pageSize", 4);
|
|
40
|
+
_defineProperty(this, "isCurrentlyPulling", false);
|
|
41
|
+
_defineProperty(this, "pageTokenInTransitSet", new Set());
|
|
42
|
+
_defineProperty(this, "resetEventListener", _omnichannelChatComponents.BroadcastService.getMessageByEventName(_TelemetryConstants.BroadcastEvent.PersistentConversationReset).subscribe(() => {
|
|
43
|
+
this.reset();
|
|
44
|
+
}));
|
|
45
|
+
this.facadeChatSDK = facadeChatSDK;
|
|
46
|
+
this.appliedPropsHandler(props);
|
|
47
|
+
_TelemetryHelper.TelemetryHelper.logActionEventToAllTelemetry(_TelemetryConstants.LogLevel.INFO, {
|
|
48
|
+
Event: _TelemetryConstants.TelemetryEvent.LCWPersistentConversationHandlerInitialized,
|
|
49
|
+
Description: "PersistentConversationHandler initialized",
|
|
50
|
+
CustomProperties: {
|
|
51
|
+
pageSize: this.pageSize
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
_createClass(PersistentConversationHandler, [{
|
|
56
|
+
key: "appliedPropsHandler",
|
|
57
|
+
value: function appliedPropsHandler(props) {
|
|
58
|
+
this.appliedProps = {
|
|
59
|
+
..._defaultPersistentChatHistoryProps.defaultPersistentChatHistoryProps,
|
|
60
|
+
...props
|
|
61
|
+
};
|
|
62
|
+
this.pageSize = this.appliedProps.pageSize || 4;
|
|
63
|
+
}
|
|
64
|
+
}, {
|
|
65
|
+
key: "reset",
|
|
66
|
+
value: function reset() {
|
|
67
|
+
this.isLastPull = false;
|
|
68
|
+
this.pageToken = null;
|
|
69
|
+
this.lastMessage = null;
|
|
70
|
+
this.count = 0;
|
|
71
|
+
this.isCurrentlyPulling = false;
|
|
72
|
+
this.pageTokenInTransitSet.clear();
|
|
73
|
+
}
|
|
74
|
+
}, {
|
|
75
|
+
key: "destroy",
|
|
76
|
+
value: function destroy() {
|
|
77
|
+
// Only unsubscribe when the handler is being destroyed completely
|
|
78
|
+
this.resetEventListener.unsubscribe();
|
|
79
|
+
}
|
|
80
|
+
}, {
|
|
81
|
+
key: "pullHistory",
|
|
82
|
+
value: async function pullHistory() {
|
|
83
|
+
const pullTimer = (0, _utils.createTimer)();
|
|
84
|
+
|
|
85
|
+
// Prevent concurrent pulls regardless of pageToken
|
|
86
|
+
if (this.isCurrentlyPulling) {
|
|
87
|
+
_TelemetryHelper.TelemetryHelper.logActionEvent(_TelemetryConstants.LogLevel.WARN, {
|
|
88
|
+
Event: _TelemetryConstants.TelemetryEvent.LCWPersistentHistoryPullBlocked,
|
|
89
|
+
Description: "History pull blocked - already in progress"
|
|
90
|
+
});
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
// Additional check for specific pageToken duplicates
|
|
95
|
+
if (this.pageToken && this.pageTokenInTransitSet.has(this.pageToken)) {
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
// Mark as currently pulling
|
|
100
|
+
this.isCurrentlyPulling = true;
|
|
101
|
+
if (this.pageToken) {
|
|
102
|
+
this.pageTokenInTransitSet.add(this.pageToken);
|
|
103
|
+
}
|
|
104
|
+
try {
|
|
105
|
+
var _ref;
|
|
106
|
+
const messages = await this.fetchHistoryMessages();
|
|
107
|
+
if (messages === null || (messages === null || messages === void 0 ? void 0 : messages.length) === 0) {
|
|
108
|
+
this.isLastPull = true;
|
|
109
|
+
// Dispatch event to notify UI that no more history is available
|
|
110
|
+
(0, _dispatchCustomEvent.default)(_ChatWidgetEvents.default.NO_MORE_HISTORY_AVAILABLE);
|
|
111
|
+
// Also hide the loading banner
|
|
112
|
+
(0, _dispatchCustomEvent.default)(_ChatWidgetEvents.default.HIDE_LOADING_BANNER);
|
|
113
|
+
_TelemetryHelper.TelemetryHelper.logActionEvent(_TelemetryConstants.LogLevel.INFO, {
|
|
114
|
+
Event: _TelemetryConstants.TelemetryEvent.LCWPersistentHistoryPullCompleted,
|
|
115
|
+
Description: "History pull completed - no more messages",
|
|
116
|
+
ElapsedTimeInMilliseconds: pullTimer.milliSecondsElapsed
|
|
117
|
+
});
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
120
|
+
const messagesDescOrder = (_ref = [...messages]) === null || _ref === void 0 ? void 0 : _ref.reverse();
|
|
121
|
+
this.processHistoryMessages(messagesDescOrder);
|
|
122
|
+
|
|
123
|
+
// Dispatch event to hide the loading banner after messages are processed
|
|
124
|
+
(0, _dispatchCustomEvent.default)(_ChatWidgetEvents.default.HIDE_LOADING_BANNER);
|
|
125
|
+
_TelemetryHelper.TelemetryHelper.logActionEvent(_TelemetryConstants.LogLevel.INFO, {
|
|
126
|
+
Event: _TelemetryConstants.TelemetryEvent.LCWPersistentHistoryPullCompleted,
|
|
127
|
+
Description: "History pull completed successfully",
|
|
128
|
+
ElapsedTimeInMilliseconds: pullTimer.milliSecondsElapsed,
|
|
129
|
+
CustomProperties: {
|
|
130
|
+
messageCount: messages.length,
|
|
131
|
+
totalProcessed: this.count
|
|
132
|
+
}
|
|
133
|
+
});
|
|
134
|
+
} finally {
|
|
135
|
+
// Always clear the pulling flag when done
|
|
136
|
+
this.isCurrentlyPulling = false;
|
|
137
|
+
|
|
138
|
+
// Remove pageToken from transit set if it was added
|
|
139
|
+
if (this.pageToken) {
|
|
140
|
+
this.pageTokenInTransitSet.delete(this.pageToken);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
146
|
+
}, {
|
|
147
|
+
key: "processHistoryMessages",
|
|
148
|
+
value: function processHistoryMessages(messagesDescOrder) {
|
|
149
|
+
for (const message of messagesDescOrder) {
|
|
150
|
+
try {
|
|
151
|
+
const activity = this.processMessageToActivity(message);
|
|
152
|
+
if (activity) {
|
|
153
|
+
(0, _dispatchCustomEvent.default)(_ChatWidgetEvents.default.ADD_ACTIVITY, {
|
|
154
|
+
activity
|
|
155
|
+
});
|
|
156
|
+
const dividerActivity = this.createDividerActivity(activity);
|
|
157
|
+
if (dividerActivity) {
|
|
158
|
+
(0, _dispatchCustomEvent.default)(_ChatWidgetEvents.default.ADD_ACTIVITY, {
|
|
159
|
+
activity: dividerActivity
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
this.lastMessage = activity;
|
|
163
|
+
}
|
|
164
|
+
} catch (error) {
|
|
165
|
+
_TelemetryHelper.TelemetryHelper.logActionEvent(_TelemetryConstants.LogLevel.ERROR, {
|
|
166
|
+
Event: _TelemetryConstants.TelemetryEvent.ConvertPersistentChatHistoryMessageToActivityFailed,
|
|
167
|
+
ExceptionDetails: error
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
174
|
+
}, {
|
|
175
|
+
key: "fetchHistoryMessages",
|
|
176
|
+
value: async function fetchHistoryMessages() {
|
|
177
|
+
if (!this.shouldPull()) {
|
|
178
|
+
// Dispatch event to ensure banner is hidden when no more pulls are needed
|
|
179
|
+
(0, _dispatchCustomEvent.default)(_ChatWidgetEvents.default.NO_MORE_HISTORY_AVAILABLE);
|
|
180
|
+
(0, _dispatchCustomEvent.default)(_ChatWidgetEvents.default.HIDE_LOADING_BANNER);
|
|
181
|
+
return [];
|
|
182
|
+
}
|
|
183
|
+
const options = {
|
|
184
|
+
pageSize: this.pageSize,
|
|
185
|
+
pageToken: this.pageToken || undefined
|
|
186
|
+
};
|
|
187
|
+
try {
|
|
188
|
+
var _this$facadeChatSDK;
|
|
189
|
+
const response = await ((_this$facadeChatSDK = this.facadeChatSDK) === null || _this$facadeChatSDK === void 0 ? void 0 : _this$facadeChatSDK.fetchPersistentConversationHistory(options));
|
|
190
|
+
const {
|
|
191
|
+
chatMessages: messages,
|
|
192
|
+
nextPageToken: pageToken
|
|
193
|
+
} = response;
|
|
194
|
+
this.pageToken = pageToken || null;
|
|
195
|
+
if (pageToken === null) {
|
|
196
|
+
this.isLastPull = true;
|
|
197
|
+
// Dispatch event when we reach the end of available history
|
|
198
|
+
(0, _dispatchCustomEvent.default)(_ChatWidgetEvents.default.NO_MORE_HISTORY_AVAILABLE);
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
// if chatMessages is null, return empty array
|
|
202
|
+
if (!messages) {
|
|
203
|
+
this.isLastPull = true;
|
|
204
|
+
// Dispatch event when we reach the end of available history
|
|
205
|
+
(0, _dispatchCustomEvent.default)(_ChatWidgetEvents.default.NO_MORE_HISTORY_AVAILABLE);
|
|
206
|
+
// Also hide the loading banner
|
|
207
|
+
(0, _dispatchCustomEvent.default)(_ChatWidgetEvents.default.HIDE_LOADING_BANNER);
|
|
208
|
+
return [];
|
|
209
|
+
}
|
|
210
|
+
(0, _dispatchCustomEvent.default)(_ChatWidgetEvents.default.HIDE_LOADING_BANNER);
|
|
211
|
+
return messages;
|
|
212
|
+
} catch (error) {
|
|
213
|
+
_TelemetryHelper.TelemetryHelper.logSDKEvent(_TelemetryConstants.LogLevel.ERROR, {
|
|
214
|
+
Event: _TelemetryConstants.TelemetryEvent.FetchPersistentChatHistoryFailed,
|
|
215
|
+
ExceptionDetails: error
|
|
216
|
+
});
|
|
217
|
+
this.isLastPull = true;
|
|
218
|
+
this.pageToken = null;
|
|
219
|
+
// Dispatch event when there's an error to stop loading banner
|
|
220
|
+
(0, _dispatchCustomEvent.default)(_ChatWidgetEvents.default.NO_MORE_HISTORY_AVAILABLE);
|
|
221
|
+
// Also hide the loading banner
|
|
222
|
+
(0, _dispatchCustomEvent.default)(_ChatWidgetEvents.default.HIDE_LOADING_BANNER);
|
|
223
|
+
return [];
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
}, {
|
|
227
|
+
key: "shouldPull",
|
|
228
|
+
value: function shouldPull() {
|
|
229
|
+
return !this.isLastPull;
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
233
|
+
}, {
|
|
234
|
+
key: "processMessageToActivity",
|
|
235
|
+
value: function processMessageToActivity(message) {
|
|
236
|
+
try {
|
|
237
|
+
const activity = (0, _convertPersistentChatHistoryMessageToActivity.default)(message);
|
|
238
|
+
activity.id = activity.id || `activity-${this.count}`;
|
|
239
|
+
activity.channelData = {
|
|
240
|
+
...activity.channelData,
|
|
241
|
+
metadata: {
|
|
242
|
+
count: this.count
|
|
243
|
+
}
|
|
244
|
+
};
|
|
245
|
+
|
|
246
|
+
// Increment the count after assigning it to the activity
|
|
247
|
+
this.count += 1;
|
|
248
|
+
return activity;
|
|
249
|
+
} catch (error) {
|
|
250
|
+
_TelemetryHelper.TelemetryHelper.logActionEvent(_TelemetryConstants.LogLevel.ERROR, {
|
|
251
|
+
Event: _TelemetryConstants.TelemetryEvent.ConvertPersistentChatHistoryMessageToActivityFailed,
|
|
252
|
+
ExceptionDetails: error
|
|
253
|
+
});
|
|
254
|
+
throw error;
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
259
|
+
}, {
|
|
260
|
+
key: "createDividerActivity",
|
|
261
|
+
value: function createDividerActivity(activity) {
|
|
262
|
+
var _this$lastMessage, _this$lastMessage$cha;
|
|
263
|
+
if (((_this$lastMessage = this.lastMessage) === null || _this$lastMessage === void 0 ? void 0 : (_this$lastMessage$cha = _this$lastMessage.channelData) === null || _this$lastMessage$cha === void 0 ? void 0 : _this$lastMessage$cha.conversationId) !== activity.channelData.conversationId) {
|
|
264
|
+
const rawSequenceId = activity.channelData["webchat:sequence-id"];
|
|
265
|
+
const sequenceId = typeof rawSequenceId === "number" && !isNaN(rawSequenceId) ? rawSequenceId + 1 : 1;
|
|
266
|
+
const timestamp = new Date(activity.timestamp).getTime() + 1;
|
|
267
|
+
return {
|
|
268
|
+
..._conversationDividerActivity.default,
|
|
269
|
+
channelData: {
|
|
270
|
+
..._conversationDividerActivity.default.channelData,
|
|
271
|
+
conversationId: activity.channelData.conversationId,
|
|
272
|
+
"webchat:sequence-id": sequenceId
|
|
273
|
+
},
|
|
274
|
+
timestamp: new Date(timestamp).toISOString(),
|
|
275
|
+
identifier: `divider-${activity.channelData.conversationId}`
|
|
276
|
+
};
|
|
277
|
+
}
|
|
278
|
+
return null;
|
|
279
|
+
}
|
|
280
|
+
}]);
|
|
281
|
+
return PersistentConversationHandler;
|
|
282
|
+
}();
|
|
283
|
+
var _default = PersistentConversationHandler;
|
|
284
|
+
exports.default = _default;
|
|
@@ -4,6 +4,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.createAdapter = void 0;
|
|
7
|
+
var _AddActivitySubscriber = require("./ActivitySubscriber/AddActivitySubscriber");
|
|
7
8
|
var _BotAuthActivitySubscriber = require("./ActivitySubscriber/BotAuthActivitySubscriber");
|
|
8
9
|
var _ChatAdapterShim = require("./ChatAdapterShim");
|
|
9
10
|
var _HiddenAdaptiveCardActivitySubscriber = require("./ActivitySubscriber/HiddenAdaptiveCardActivitySubscriber");
|
|
@@ -50,6 +51,7 @@ const createAdapter = async (facadeChatSDK, props) => {
|
|
|
50
51
|
fetchBotAuthConfigRetryInterval: (props === null || props === void 0 ? void 0 : (_props$webChatContain3 = props.webChatContainerProps) === null || _props$webChatContain3 === void 0 ? void 0 : (_props$webChatContain4 = _props$webChatContain3.botAuthConfig) === null || _props$webChatContain4 === void 0 ? void 0 : _props$webChatContain4.fetchBotAuthConfigRetryInterval) || defaultBotAuthConfig.fetchBotAuthConfigRetryInterval
|
|
51
52
|
};
|
|
52
53
|
adapter = new _ChatAdapterShim.ChatAdapterShim(adapter);
|
|
54
|
+
adapter.addSubscriber(new _AddActivitySubscriber.AddActivitySubscriber());
|
|
53
55
|
adapter.addSubscriber(new _PauseActivitySubscriber.PauseActivitySubscriber());
|
|
54
56
|
adapter.addSubscriber(new _BotAuthActivitySubscriber.BotAuthActivitySubscriber(botAuthActivitySubscriberOptionalParams));
|
|
55
57
|
// Remove this code after ICM ID:544623085 is fixed
|
package/lib/cjs/components/livechatwidget/common/defaultProps/defaultPersistentChatHistoryProps.js
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.defaultPersistentChatHistoryProps = void 0;
|
|
7
|
+
const defaultPersistentChatHistoryProps = {
|
|
8
|
+
persistentChatHistoryEnabled: true,
|
|
9
|
+
pageSize: 4,
|
|
10
|
+
dividerActivityStyle: {
|
|
11
|
+
border: "1px solid rgb(96, 94, 92, 0.5)",
|
|
12
|
+
margin: "10px 20%"
|
|
13
|
+
},
|
|
14
|
+
bannerStyle: {
|
|
15
|
+
margin: "10px auto"
|
|
16
|
+
}
|
|
17
|
+
};
|
|
18
|
+
exports.defaultPersistentChatHistoryProps = defaultPersistentChatHistoryProps;
|
|
@@ -10,6 +10,7 @@ var _utils = require("../../../common/utils");
|
|
|
10
10
|
var _renderSurveyHelpers = require("./renderSurveyHelpers");
|
|
11
11
|
var _omnichannelChatComponents = require("@microsoft/omnichannel-chat-components");
|
|
12
12
|
var _ConversationState = require("../../../contexts/common/ConversationState");
|
|
13
|
+
var _LazyLoadActivity = require("../../webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activities/LazyLoadActivity");
|
|
13
14
|
var _LiveChatWidgetActionType = require("../../../contexts/common/LiveChatWidgetActionType");
|
|
14
15
|
var _TelemetryHelper = require("../../../common/telemetry/TelemetryHelper");
|
|
15
16
|
var _TelemetryManager = require("../../../common/telemetry/TelemetryManager");
|
|
@@ -231,7 +232,12 @@ const endChat = async (props, facadeChatSDK, state, dispatch, setAdapter, setWeb
|
|
|
231
232
|
type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_POST_CHAT_CONTEXT,
|
|
232
233
|
payload: undefined
|
|
233
234
|
});
|
|
234
|
-
|
|
235
|
+
|
|
236
|
+
// Call direct reset to ensure LazyLoadHandler gets reset regardless of broadcast timing
|
|
237
|
+
_LazyLoadActivity.LazyLoadHandler.directReset();
|
|
238
|
+
_omnichannelChatComponents.BroadcastService.postMessage({
|
|
239
|
+
eventName: _TelemetryConstants.BroadcastEvent.PersistentConversationReset
|
|
240
|
+
});
|
|
235
241
|
closeChatWidget(dispatch, setWebChatStyles, props);
|
|
236
242
|
facadeChatSDK.destroy();
|
|
237
243
|
}
|
|
@@ -7,6 +7,7 @@ exports.initWebChatComposer = void 0;
|
|
|
7
7
|
var _Constants = require("../../../common/Constants");
|
|
8
8
|
var _TelemetryConstants = require("../../../common/telemetry/TelemetryConstants");
|
|
9
9
|
var _utils = require("../../../common/utils");
|
|
10
|
+
var _localizedStringsBotInitialsMiddleware = require("../../webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/localizedStringsBotInitialsMiddleware");
|
|
10
11
|
var _omnichannelChatComponents = require("@microsoft/omnichannel-chat-components");
|
|
11
12
|
var _ConversationState = require("../../../contexts/common/ConversationState");
|
|
12
13
|
var _dompurify = _interopRequireDefault(require("dompurify"));
|
|
@@ -17,6 +18,7 @@ var _WebChatStoreLoader = require("../../webchatcontainerstateful/webchatcontrol
|
|
|
17
18
|
var _attachmentProcessingMiddleware = _interopRequireDefault(require("../../webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/attachmentProcessingMiddleware"));
|
|
18
19
|
var _channelDataMiddleware = _interopRequireDefault(require("../../webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/channelDataMiddleware"));
|
|
19
20
|
var _activityMiddleware = require("../../webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityMiddleware");
|
|
21
|
+
var _activityStatusMiddleware = require("../../webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityStatusMiddleware");
|
|
20
22
|
var _attachmentMiddleware = require("../../webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/attachmentMiddleware");
|
|
21
23
|
var _attachmentUploadValidatorMiddleware = _interopRequireDefault(require("../../webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/attachmentUploadValidatorMiddleware"));
|
|
22
24
|
var _avatarMiddleware = require("../../webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/avatarMiddleware");
|
|
@@ -44,11 +46,10 @@ var _htmlPlayerMiddleware = _interopRequireDefault(require("../../webchatcontain
|
|
|
44
46
|
var _htmlTextMiddleware = _interopRequireDefault(require("../../webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/htmlTextMiddleware"));
|
|
45
47
|
var _preProcessingMiddleware = _interopRequireDefault(require("../../webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/preProcessingMiddleware"));
|
|
46
48
|
var _sanitizationMiddleware = _interopRequireDefault(require("../../webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/sanitizationMiddleware"));
|
|
47
|
-
var _localizedStringsBotInitialsMiddleware = require("../../webchatcontainerstateful/webchatcontroller/middlewares/storemiddlewares/localizedStringsBotInitialsMiddleware");
|
|
48
49
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
49
50
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
50
51
|
const initWebChatComposer = (props, state, dispatch, facadeChatSDK, endChat) => {
|
|
51
|
-
var _props$webChatContain, _props$webChatContain2, _props$webChatContain3, _props$webChatContain4, _props$webChatContain5, _props$webChatContain6, _state$domainStates$l4, _state$domainStates$l5, _props$webChatContain11, _props$webChatContain12, _state$domainStates$r, _state$domainStates$r2, _props$webChatContain13, _props$webChatContain14, _state$domainStates$r3, _state$domainStates$r4, _props$webChatContain15, _props$webChatContain16,
|
|
52
|
+
var _props$webChatContain, _props$webChatContain2, _props$webChatContain3, _props$webChatContain4, _props$webChatContain5, _props$webChatContain6, _state$domainStates$l4, _state$domainStates$l5, _props$webChatContain11, _props$webChatContain12, _state$domainStates$r, _state$domainStates$r2, _props$webChatContain13, _props$webChatContain14, _state$domainStates$r3, _state$domainStates$r4, _props$webChatContain15, _props$webChatContain16, _state$domainStates$l6, _state$domainStates$l7, _props$webChatContain17, _props$webChatContain18, _props$webChatContain19, _props$webChatContain20, _state$domainStates$r5, _state$domainStates$r6, _props$webChatContain21, _props$webChatContain22, _defaultWebChatContai, _props$webChatContain23, _props$webChatContain24, _defaultWebChatContai2, _props$webChatContain25, _props$webChatContain26, _props$webChatContain27, _props$webChatContain28;
|
|
52
53
|
// Add a hook to make all links open a new window
|
|
53
54
|
postDomPurifyActivities();
|
|
54
55
|
const localizedTexts = {
|
|
@@ -66,6 +67,7 @@ const initWebChatComposer = (props, state, dispatch, facadeChatSDK, endChat) =>
|
|
|
66
67
|
let webChatStore = _WebChatStoreLoader.WebChatStoreLoader.store;
|
|
67
68
|
if (!webChatStore) {
|
|
68
69
|
var _state$domainStates$l, _state$domainStates$l2, _state$domainStates$l3, _props$webChatContain7;
|
|
70
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
69
71
|
const addConversationalSurveyTagsCallback = action => {
|
|
70
72
|
var _inMemoryState$appSta;
|
|
71
73
|
const inMemoryState = (0, _createReducer.executeReducer)(state, {
|
|
@@ -168,12 +170,12 @@ const initWebChatComposer = (props, state, dispatch, facadeChatSDK, endChat) =>
|
|
|
168
170
|
store: webChatStore,
|
|
169
171
|
activityMiddleware: (_props$webChatContain11 = props.webChatContainerProps) !== null && _props$webChatContain11 !== void 0 && (_props$webChatContain12 = _props$webChatContain11.renderingMiddlewareProps) !== null && _props$webChatContain12 !== void 0 && _props$webChatContain12.disableActivityMiddleware ? undefined : (0, _activityMiddleware.createActivityMiddleware)(renderMarkdown, (_state$domainStates$r = state.domainStates.renderingMiddlewareProps) === null || _state$domainStates$r === void 0 ? void 0 : _state$domainStates$r.systemMessageStyleProps, (_state$domainStates$r2 = state.domainStates.renderingMiddlewareProps) === null || _state$domainStates$r2 === void 0 ? void 0 : _state$domainStates$r2.userMessageStyleProps),
|
|
170
172
|
attachmentMiddleware: (_props$webChatContain13 = props.webChatContainerProps) !== null && _props$webChatContain13 !== void 0 && (_props$webChatContain14 = _props$webChatContain13.renderingMiddlewareProps) !== null && _props$webChatContain14 !== void 0 && _props$webChatContain14.disableAttachmentMiddleware ? undefined : (0, _attachmentMiddleware.createAttachmentMiddleware)(((_state$domainStates$r3 = state.domainStates.renderingMiddlewareProps) === null || _state$domainStates$r3 === void 0 ? void 0 : (_state$domainStates$r4 = _state$domainStates$r3.attachmentProps) === null || _state$domainStates$r4 === void 0 ? void 0 : _state$domainStates$r4.enableInlinePlaying) ?? _defaultAttachmentProps.defaultAttachmentProps.enableInlinePlaying),
|
|
171
|
-
activityStatusMiddleware: (_props$webChatContain15 = props.webChatContainerProps) !== null && _props$webChatContain15 !== void 0 && (_props$webChatContain16 = _props$webChatContain15.renderingMiddlewareProps) !== null && _props$webChatContain16 !== void 0 && _props$webChatContain16.disableActivityStatusMiddleware ? undefined : (
|
|
173
|
+
activityStatusMiddleware: (_props$webChatContain15 = props.webChatContainerProps) !== null && _props$webChatContain15 !== void 0 && (_props$webChatContain16 = _props$webChatContain15.renderingMiddlewareProps) !== null && _props$webChatContain16 !== void 0 && _props$webChatContain16.disableActivityStatusMiddleware ? undefined : (0, _activityStatusMiddleware.createActivityStatusMiddleware)((0, _omnichannelChatSdk.getLocaleStringFromId)((_state$domainStates$l6 = state.domainStates.liveChatConfig) === null || _state$domainStates$l6 === void 0 ? void 0 : (_state$domainStates$l7 = _state$domainStates$l6.ChatWidgetLanguage) === null || _state$domainStates$l7 === void 0 ? void 0 : _state$domainStates$l7.msdyn_localeid)),
|
|
172
174
|
toastMiddleware: (_props$webChatContain17 = props.webChatContainerProps) !== null && _props$webChatContain17 !== void 0 && (_props$webChatContain18 = _props$webChatContain17.renderingMiddlewareProps) !== null && _props$webChatContain18 !== void 0 && _props$webChatContain18.disableToastMiddleware ? undefined : (0, _toastMiddleware.createToastMiddleware)(props.notificationPaneProps, endChat),
|
|
173
175
|
renderMarkdown,
|
|
174
176
|
avatarMiddleware: (_props$webChatContain19 = props.webChatContainerProps) !== null && _props$webChatContain19 !== void 0 && (_props$webChatContain20 = _props$webChatContain19.renderingMiddlewareProps) !== null && _props$webChatContain20 !== void 0 && _props$webChatContain20.disableAvatarMiddleware ? undefined : (0, _avatarMiddleware.createAvatarMiddleware)((_state$domainStates$r5 = state.domainStates.renderingMiddlewareProps) === null || _state$domainStates$r5 === void 0 ? void 0 : _state$domainStates$r5.avatarStyleProps, (_state$domainStates$r6 = state.domainStates.renderingMiddlewareProps) === null || _state$domainStates$r6 === void 0 ? void 0 : _state$domainStates$r6.avatarTextStyleProps),
|
|
175
|
-
groupActivitiesMiddleware: (_props$webChatContain21 = props.webChatContainerProps) !== null && _props$webChatContain21 !== void 0 && (_props$webChatContain22 = _props$webChatContain21.renderingMiddlewareProps) !== null && _props$webChatContain22 !== void 0 && _props$webChatContain22.disableGroupActivitiesMiddleware ? undefined : (
|
|
176
|
-
typingIndicatorMiddleware: (_props$webChatContain23 = props.webChatContainerProps) !== null && _props$webChatContain23 !== void 0 && (_props$webChatContain24 = _props$webChatContain23.renderingMiddlewareProps) !== null && _props$webChatContain24 !== void 0 && _props$webChatContain24.disableTypingIndicatorMiddleware ? undefined : (
|
|
177
|
+
groupActivitiesMiddleware: (_props$webChatContain21 = props.webChatContainerProps) !== null && _props$webChatContain21 !== void 0 && (_props$webChatContain22 = _props$webChatContain21.renderingMiddlewareProps) !== null && _props$webChatContain22 !== void 0 && _props$webChatContain22.disableGroupActivitiesMiddleware ? undefined : (_defaultWebChatContai = _defaultWebChatContainerStatefulProps.defaultWebChatContainerStatefulProps.webChatProps) === null || _defaultWebChatContai === void 0 ? void 0 : _defaultWebChatContai.groupActivitiesMiddleware,
|
|
178
|
+
typingIndicatorMiddleware: (_props$webChatContain23 = props.webChatContainerProps) !== null && _props$webChatContain23 !== void 0 && (_props$webChatContain24 = _props$webChatContain23.renderingMiddlewareProps) !== null && _props$webChatContain24 !== void 0 && _props$webChatContain24.disableTypingIndicatorMiddleware ? undefined : (_defaultWebChatContai2 = _defaultWebChatContainerStatefulProps.defaultWebChatContainerStatefulProps.webChatProps) === null || _defaultWebChatContai2 === void 0 ? void 0 : _defaultWebChatContai2.typingIndicatorMiddleware,
|
|
177
179
|
onTelemetry: (0, _WebChatLogger.createWebChatTelemetry)(),
|
|
178
180
|
cardActionMiddleware: (0, _cardActionMiddleware.createCardActionMiddleware)(((_props$webChatContain25 = props.webChatContainerProps) === null || _props$webChatContain25 === void 0 ? void 0 : _props$webChatContain25.botMagicCode) || undefined),
|
|
179
181
|
sendTypingIndicator: true,
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";
|
|
@@ -17,6 +17,7 @@ var _NotificationHandler = require("./webchatcontroller/notification/Notificatio
|
|
|
17
17
|
var _NotificationScenarios = require("./webchatcontroller/enums/NotificationScenarios");
|
|
18
18
|
var _TelemetryHelper = require("../../common/telemetry/TelemetryHelper");
|
|
19
19
|
var _WebChatActionType = require("./webchatcontroller/enums/WebChatActionType");
|
|
20
|
+
var _WebChatEventSubscribers = _interopRequireDefault(require("./webchatcontroller/WebChatEventSubscribers"));
|
|
20
21
|
var _WebChatStoreLoader = require("./webchatcontroller/WebChatStoreLoader");
|
|
21
22
|
var _fontUtils = require("./common/utils/fontUtils");
|
|
22
23
|
var _defaultAdaptiveCardStyles = require("./common/defaultStyles/defaultAdaptiveCardStyles");
|
|
@@ -26,7 +27,10 @@ var _defaultSentMessageAnchorStyles = require("./webchatcontroller/middlewares/r
|
|
|
26
27
|
var _defaultSystemMessageBoxStyles = require("./webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultSystemMessageBoxStyles");
|
|
27
28
|
var _defaultUserMessageBoxStyles = require("./webchatcontroller/middlewares/renderingmiddlewares/defaultStyles/defaultUserMessageBoxStyles");
|
|
28
29
|
var _defaultWebChatContainerStatefulProps = require("./common/defaultProps/defaultWebChatContainerStatefulProps");
|
|
30
|
+
var _liveChatConfigUtils = require("../livechatwidget/common/liveChatConfigUtils");
|
|
29
31
|
var _ = require("../..");
|
|
32
|
+
var _useFacadeChatSDKStore = _interopRequireDefault(require("../../hooks/useFacadeChatSDKStore"));
|
|
33
|
+
var _usePersistentChatHistory = _interopRequireDefault(require("./hooks/usePersistentChatHistory"));
|
|
30
34
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
31
35
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
32
36
|
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
@@ -58,7 +62,9 @@ const createMagicCodeSuccessResponse = signin => {
|
|
|
58
62
|
};
|
|
59
63
|
};
|
|
60
64
|
const WebChatContainerStateful = props => {
|
|
61
|
-
var _props$webChatContain, _defaultWebChatContai, _webChatContainerProp, _webChatContainerProp2, _webChatContainerProp3, _webChatContainerProp4, _webChatContainerProp5, _webChatContainerProp6, _webChatContainerProp7, _webChatContainerProp8, _props$webChatContain6, _props$webChatContain7, _defaultWebChatContai2, _props$webChatContain8, _props$webChatContain9, _defaultWebChatContai3, _webChatContainerProp9, _webChatContainerProp10, _webChatContainerProp11, _webChatContainerProp12, _webChatContainerProp13, _webChatContainerProp14, _webChatContainerProp15, _webChatContainerProp16, _webChatContainerProp17, _webChatContainerProp18, _webChatContainerProp19, _webChatContainerProp20, _webChatContainerProp21, _webChatContainerProp22, _webChatContainerProp23, _props$webChatContain10, _props$webChatContain11, _webChatContainerProp24, _webChatContainerProp25, _webChatContainerProp26, _webChatContainerProp27, _props$citationPanePr, _props$citationPanePr2, _props$citationPanePr3, _props$citationPanePr4, _props$citationPanePr5;
|
|
65
|
+
var _props$webChatContain, _defaultWebChatContai, _extendedChatConfig$L, _props$persistentChat, _extendedChatConfig$L2, _extendedChatConfig$L3, _webChatContainerProp, _webChatContainerProp2, _webChatContainerProp3, _webChatContainerProp4, _webChatContainerProp5, _webChatContainerProp6, _webChatContainerProp7, _webChatContainerProp8, _props$webChatContain6, _props$webChatContain7, _defaultWebChatContai2, _props$webChatContain8, _props$webChatContain9, _defaultWebChatContai3, _webChatContainerProp9, _webChatContainerProp10, _webChatContainerProp11, _webChatContainerProp12, _webChatContainerProp13, _webChatContainerProp14, _webChatContainerProp15, _webChatContainerProp16, _webChatContainerProp17, _webChatContainerProp18, _webChatContainerProp19, _webChatContainerProp20, _webChatContainerProp21, _webChatContainerProp22, _webChatContainerProp23, _props$webChatContain10, _props$webChatContain11, _webChatContainerProp24, _webChatContainerProp25, _webChatContainerProp26, _webChatContainerProp27, _props$persistentChat2, _props$citationPanePr, _props$citationPanePr2, _props$citationPanePr3, _props$citationPanePr4, _props$citationPanePr5;
|
|
66
|
+
const [facadeChatSDK] = (0, _useFacadeChatSDKStore.default)();
|
|
67
|
+
|
|
62
68
|
// Create a font family that includes emoji support, based on the primary font or default
|
|
63
69
|
const webChatStyles = ((_props$webChatContain = props.webChatContainerProps) === null || _props$webChatContain === void 0 ? void 0 : _props$webChatContain.webChatStyles) ?? _defaultWebChatContainerStatefulProps.defaultWebChatContainerStatefulProps.webChatStyles;
|
|
64
70
|
const primaryFont = (webChatStyles === null || webChatStyles === void 0 ? void 0 : webChatStyles.primaryFont) ?? ((_defaultWebChatContai = _defaultWebChatContainerStatefulProps.defaultWebChatContainerStatefulProps.webChatStyles) === null || _defaultWebChatContai === void 0 ? void 0 : _defaultWebChatContai.primaryFont);
|
|
@@ -79,9 +85,6 @@ const WebChatContainerStateful = props => {
|
|
|
79
85
|
// Guard to prevent handling multiple rapid clicks which could cause
|
|
80
86
|
// the dim layer and pane to re-render out of sync and create a flicker.
|
|
81
87
|
const citationOpeningRef = (0, _react2.useRef)(false);
|
|
82
|
-
|
|
83
|
-
// ...existing code...
|
|
84
|
-
|
|
85
88
|
const {
|
|
86
89
|
BasicWebChat
|
|
87
90
|
} = _botframeworkWebchat.Components;
|
|
@@ -91,6 +94,21 @@ const WebChatContainerStateful = props => {
|
|
|
91
94
|
contextDataStore
|
|
92
95
|
} = props;
|
|
93
96
|
|
|
97
|
+
// Type the chatConfig properly to avoid 'any' usage
|
|
98
|
+
const extendedChatConfig = props.chatConfig;
|
|
99
|
+
const isHistoryEnabledInConfig = extendedChatConfig === null || extendedChatConfig === void 0 ? void 0 : (_extendedChatConfig$L = extendedChatConfig.LcwFcbConfiguration) === null || _extendedChatConfig$L === void 0 ? void 0 : _extendedChatConfig$L.lcwPersistentChatHistoryEnabled;
|
|
100
|
+
const isHistoryEnabledViaProps = props === null || props === void 0 ? void 0 : (_props$persistentChat = props.persistentChatHistoryProps) === null || _props$persistentChat === void 0 ? void 0 : _props$persistentChat.persistentChatHistoryEnabled;
|
|
101
|
+
const isPersistentChatEnabledForWidget = !!(extendedChatConfig !== null && extendedChatConfig !== void 0 && (_extendedChatConfig$L2 = extendedChatConfig.LiveChatConfigAuthSettings) !== null && _extendedChatConfig$L2 !== void 0 && _extendedChatConfig$L2.msdyn_javascriptclientfunction) || (0, _liveChatConfigUtils.isPersistentChatEnabled)(extendedChatConfig === null || extendedChatConfig === void 0 ? void 0 : (_extendedChatConfig$L3 = extendedChatConfig.LiveWSAndLiveChatEngJoin) === null || _extendedChatConfig$L3 === void 0 ? void 0 : _extendedChatConfig$L3.msdyn_conversationmode);
|
|
102
|
+
|
|
103
|
+
// Persistent chat history is enabled if explicitly set via props, or if enabled in config
|
|
104
|
+
// Props take precedence over config settings
|
|
105
|
+
const isPersistentHistoryEnabled = isHistoryEnabledViaProps || isHistoryEnabledInConfig;
|
|
106
|
+
|
|
107
|
+
// Check if both persistent chat and widget support are enabled
|
|
108
|
+
const shouldLoadPersistentHistoryMessages = isPersistentHistoryEnabled && isPersistentChatEnabledForWidget;
|
|
109
|
+
if (shouldLoadPersistentHistoryMessages) {
|
|
110
|
+
(0, _usePersistentChatHistory.default)(facadeChatSDK, (props === null || props === void 0 ? void 0 : props.persistentChatHistoryProps) ?? {});
|
|
111
|
+
}
|
|
94
112
|
// Delegated click handler for citation anchors. Placed after state is
|
|
95
113
|
// available so we can prefer reading citations from app state and fall
|
|
96
114
|
// back to the legacy window map for backward-compatibility in tests.
|
|
@@ -392,7 +410,15 @@ const WebChatContainerStateful = props => {
|
|
|
392
410
|
`), /*#__PURE__*/_react2.default.createElement(_react.Stack, {
|
|
393
411
|
styles: containerStyles,
|
|
394
412
|
className: "webchat__stacked-layout_container"
|
|
395
|
-
}, /*#__PURE__*/_react2.default.createElement(
|
|
413
|
+
}, /*#__PURE__*/_react2.default.createElement("div", {
|
|
414
|
+
id: "ms_lcw_webchat_root",
|
|
415
|
+
style: {
|
|
416
|
+
height: "100%",
|
|
417
|
+
width: "100%"
|
|
418
|
+
}
|
|
419
|
+
}, shouldLoadPersistentHistoryMessages && /*#__PURE__*/_react2.default.createElement(_WebChatEventSubscribers.default, {
|
|
420
|
+
persistentChatHistoryEnabled: props === null || props === void 0 ? void 0 : (_props$persistentChat2 = props.persistentChatHistoryProps) === null || _props$persistentChat2 === void 0 ? void 0 : _props$persistentChat2.persistentChatHistoryEnabled
|
|
421
|
+
}), /*#__PURE__*/_react2.default.createElement(BasicWebChat, null))), citationPaneOpen && /*#__PURE__*/_react2.default.createElement(_CitationPaneStateful.default, {
|
|
396
422
|
id: ((_props$citationPanePr = props.citationPaneProps) === null || _props$citationPanePr === void 0 ? void 0 : _props$citationPanePr.id) || _Constants.HtmlAttributeNames.ocwCitationPaneClassName,
|
|
397
423
|
title: ((_props$citationPanePr2 = props.citationPaneProps) === null || _props$citationPanePr2 === void 0 ? void 0 : _props$citationPanePr2.title) || _Constants.HtmlAttributeNames.ocwCitationPaneTitle,
|
|
398
424
|
contentHtml: citationPaneText,
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
const botActivity = {
|
|
8
|
+
from: {
|
|
9
|
+
role: "bot"
|
|
10
|
+
},
|
|
11
|
+
type: "message"
|
|
12
|
+
};
|
|
13
|
+
var _default = botActivity;
|
|
14
|
+
exports.default = _default;
|
package/lib/cjs/components/webchatcontainerstateful/common/activities/conversationDividerActivity.js
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
var _Constants = require("../../../../common/Constants");
|
|
8
|
+
var _botActivity = _interopRequireDefault(require("./botActivity"));
|
|
9
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
10
|
+
const conversationDividerActivity = {
|
|
11
|
+
..._botActivity.default,
|
|
12
|
+
channelData: {
|
|
13
|
+
tags: [_Constants.Constants.conversationDividerTag]
|
|
14
|
+
}
|
|
15
|
+
};
|
|
16
|
+
var _default = conversationDividerActivity;
|
|
17
|
+
exports.default = _default;
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
var _Constants = require("../../../../common/Constants");
|
|
8
|
+
var _botActivity = _interopRequireDefault(require("../activities/botActivity"));
|
|
9
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
10
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
11
|
+
const convertStringValueToInt = value => {
|
|
12
|
+
if (typeof value !== "string" || value === "") {
|
|
13
|
+
return undefined;
|
|
14
|
+
}
|
|
15
|
+
let result;
|
|
16
|
+
try {
|
|
17
|
+
result = parseInt(value);
|
|
18
|
+
} catch (e) {
|
|
19
|
+
return undefined;
|
|
20
|
+
}
|
|
21
|
+
return isNaN(result) ? undefined : result;
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
25
|
+
const convertPersistentChatHistoryMessageToActivity = message => {
|
|
26
|
+
var _from$user, _from$application;
|
|
27
|
+
const {
|
|
28
|
+
additionalData,
|
|
29
|
+
attachments,
|
|
30
|
+
content,
|
|
31
|
+
created,
|
|
32
|
+
from,
|
|
33
|
+
transcriptOriginalMessageId
|
|
34
|
+
} = message;
|
|
35
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
36
|
+
const activity = {
|
|
37
|
+
..._botActivity.default,
|
|
38
|
+
channelData: {
|
|
39
|
+
tags: [_Constants.Constants.persistentChatHistoryMessageTag]
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
let webchatSequenceId;
|
|
43
|
+
let timestamp;
|
|
44
|
+
if (transcriptOriginalMessageId) {
|
|
45
|
+
const id = convertStringValueToInt(transcriptOriginalMessageId); // Id used to determine the sequence of messages which is the same as the 'live' messages
|
|
46
|
+
if (id) {
|
|
47
|
+
webchatSequenceId = id;
|
|
48
|
+
timestamp = new Date(id) || created;
|
|
49
|
+
activity.channelData = {
|
|
50
|
+
...activity.channelData,
|
|
51
|
+
"webchat:sequence-id": webchatSequenceId
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
if (additionalData !== null && additionalData !== void 0 && additionalData.tags) {
|
|
56
|
+
const {
|
|
57
|
+
tags,
|
|
58
|
+
ConversationId
|
|
59
|
+
} = additionalData;
|
|
60
|
+
if (ConversationId) {
|
|
61
|
+
activity.channelData.conversationId = ConversationId;
|
|
62
|
+
}
|
|
63
|
+
if (tags) {
|
|
64
|
+
const formattedTags = additionalData.tags.split(",");
|
|
65
|
+
activity.channelData.tags = [...activity.channelData.tags, ...formattedTags];
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
if (from !== null && from !== void 0 && (_from$user = from.user) !== null && _from$user !== void 0 && _from$user.displayName) {
|
|
69
|
+
activity.from.name = from.user.displayName;
|
|
70
|
+
}
|
|
71
|
+
if ((from === null || from === void 0 ? void 0 : (_from$application = from.application) === null || _from$application === void 0 ? void 0 : _from$application.displayName) === "Customer") {
|
|
72
|
+
activity.from = {
|
|
73
|
+
role: "user",
|
|
74
|
+
name: from.application.displayName
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
if (content) {
|
|
78
|
+
return {
|
|
79
|
+
...activity,
|
|
80
|
+
text: content,
|
|
81
|
+
timestamp
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
if (attachments && attachments.length > 0) {
|
|
85
|
+
const fileName = attachments[0].name || "Unknown";
|
|
86
|
+
const text = `The following attachment was uploaded during the conversation: ${fileName}`;
|
|
87
|
+
return {
|
|
88
|
+
...activity,
|
|
89
|
+
text,
|
|
90
|
+
timestamp
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
// If neither content nor attachments are present, return null to indicate no activity could be created.
|
|
94
|
+
return null;
|
|
95
|
+
};
|
|
96
|
+
var _default = convertPersistentChatHistoryMessageToActivity;
|
|
97
|
+
exports.default = _default;
|
|
@@ -34,6 +34,7 @@ const defaultMiddlewareLocalizedTexts = {
|
|
|
34
34
|
THIRD_PARTY_COOKIES_BLOCKED_ALERT_MESSAGE: "Allow sites to save/read cookies in browser settings. Reloading page starts a new chat.",
|
|
35
35
|
MIDDLEWARE_BANNER_FILE_IS_MALICIOUS: "{0} has been blocked because the file may contain a malware.",
|
|
36
36
|
MIDDLEWARE_BANNER_FILE_EMAIL_ADDRESS_RECORDED_SUCCESS: "Email will be sent after chat ends!",
|
|
37
|
-
MIDDLEWARE_BANNER_FILE_EMAIL_ADDRESS_RECORDED_ERROR: "Email {0} could not be saved, try again later."
|
|
37
|
+
MIDDLEWARE_BANNER_FILE_EMAIL_ADDRESS_RECORDED_ERROR: "Email {0} could not be saved, try again later.",
|
|
38
|
+
PREVIOUS_MESSAGES_LOADING: "Loading previous messages..."
|
|
38
39
|
};
|
|
39
40
|
exports.defaultMiddlewareLocalizedTexts = defaultMiddlewareLocalizedTexts;
|
|
@@ -9,7 +9,7 @@ var _groupActivitiesMiddleware = require("../../webchatcontroller/middlewares/re
|
|
|
9
9
|
var _typingIndicatorMiddleware = require("../../webchatcontroller/middlewares/renderingmiddlewares/typingIndicatorMiddleware");
|
|
10
10
|
const defaultWebChatStatefulProps = {
|
|
11
11
|
// activityMiddleware: activityMiddleware, - this is implemented elsewhere and can be customized
|
|
12
|
-
activityStatusMiddleware: _activityStatusMiddleware.
|
|
12
|
+
activityStatusMiddleware: (0, _activityStatusMiddleware.createActivityStatusMiddleware)(),
|
|
13
13
|
// avatarMiddleware: avatarMiddleware, - this is implemented elsewhere and can be customized
|
|
14
14
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
15
15
|
groupActivitiesMiddleware: _groupActivitiesMiddleware.groupActivitiesMiddleware,
|