@xapp/chat-widget 1.57.2 → 1.57.3
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/dist/components/ActionItem/ActionItem.stories.d.ts +3 -5
- package/dist/components/ChatFooter/ChatFooter.stories.d.ts +3 -5
- package/dist/components/ChatMarkdownMessage/ChatMarkdownMessage.stories.d.ts +3 -5
- package/dist/components/ChatMenu/ChatMenu.stories.d.ts +3 -5
- package/dist/components/ChatMessage/ChatMessage.d.ts +0 -0
- package/dist/components/ChatTextMessage/ChatTextMessage.d.ts +0 -0
- package/dist/components/ChatWidget/ChatWidget.stories.d.ts +1 -0
- package/dist/components/OptionalLink/OptionalLink.stories.d.ts +3 -5
- package/dist/index.css +2 -2
- package/dist/index.es.js +55 -12
- package/dist/index.es.js.map +1 -1
- package/dist/index.js +55 -12
- package/dist/index.js.map +1 -1
- package/dist/storybook/store.d.ts +3 -0
- package/dist/utils/index.d.ts +0 -0
- package/dist/utils/time.d.ts +0 -0
- package/dist/xapp-chat-widget.css +1 -1
- package/dist/xapp-chat-widget.js +2 -2
- package/dist/xapp-chat-widget.js.map +1 -1
- package/package.json +3 -3
package/dist/index.js
CHANGED
|
@@ -262,6 +262,33 @@ var RetryRequest = /** @class */ (function () {
|
|
|
262
262
|
return RetryRequest;
|
|
263
263
|
}());
|
|
264
264
|
|
|
265
|
+
/**
|
|
266
|
+
* Get a display date of a specific point in time based on the current time.
|
|
267
|
+
*
|
|
268
|
+
* @param date
|
|
269
|
+
* @returns
|
|
270
|
+
*/
|
|
271
|
+
function getTimeAgo(date) {
|
|
272
|
+
var now = new Date();
|
|
273
|
+
var diffInSeconds = Math.floor((now.valueOf() - date.valueOf()) / 1000);
|
|
274
|
+
if (diffInSeconds < 1) {
|
|
275
|
+
return "now";
|
|
276
|
+
}
|
|
277
|
+
if (diffInSeconds < 60) {
|
|
278
|
+
return "".concat(diffInSeconds, " seconds ago");
|
|
279
|
+
}
|
|
280
|
+
var diffInMinutes = Math.floor(diffInSeconds / 60);
|
|
281
|
+
if (diffInMinutes < 60) {
|
|
282
|
+
return "".concat(diffInMinutes, " minutes ago");
|
|
283
|
+
}
|
|
284
|
+
var diffInHours = Math.floor(diffInMinutes / 60);
|
|
285
|
+
if (diffInHours < 24) {
|
|
286
|
+
return "".concat(diffInHours, " hours ago");
|
|
287
|
+
}
|
|
288
|
+
// If more than 24 hours ago, return the full date and time
|
|
289
|
+
return date.toLocaleString();
|
|
290
|
+
}
|
|
291
|
+
|
|
265
292
|
var EMAIL_REGEX = "^\\w+([\\.-]?\\w+)*@\\w+([\\.-]?\\w+)*(\\.\\w{2,3})+$";
|
|
266
293
|
// Returns current timestamp
|
|
267
294
|
function getCurrentDateString() {
|
|
@@ -321,6 +348,10 @@ var Avatar = function (props) {
|
|
|
321
348
|
var hasImage = !!style.backgroundImage || !!child;
|
|
322
349
|
return (React__default$1["default"].createElement("div", { className: "avatar ".concat(agentAva ? "avatar--agent" : "avatar--visitor", " ").concat(!hasImage ? "avatar--empty" : ""), style: style, title: entity ? entity.display_name : "Agent" }, child));
|
|
323
350
|
};
|
|
351
|
+
/**
|
|
352
|
+
* Generates an SVG based on the
|
|
353
|
+
* @returns
|
|
354
|
+
*/
|
|
324
355
|
function getVisitorSvg() {
|
|
325
356
|
return (React__default$1["default"].createElement("svg", { width: "16", height: "19", viewBox: "0 0 16 19", style: { margin: "0 auto", display: "block" } },
|
|
326
357
|
React__default$1["default"].createElement("path", { d: "M11.5 5c0-1.933-1.567-3.5-3.5-3.5S4.5 3.067 4.5 5 6.067 8.5 8 8.5s3.5-1.567 3.5-3.5zM3 5c0-2.76 2.24-5 5-5s5 2.24 5 5-2.24 5-5 5-5-2.24-5-5zM1.955 17.294c.21-.642.504-1.285.898-1.88C3.963 13.74 5.615 12.75 8 12.75c2.385 0 4.038.99 5.147 2.664.394.595.69 1.238.898 1.88.124.382.19.672.214.822.063.41.447.69.856.625.41-.063.69-.447.625-.856-.034-.225-.118-.59-.27-1.053-.247-.763-.598-1.527-1.073-2.244C13.024 12.51 10.917 11.25 8 11.25c-2.916 0-5.024 1.26-6.397 3.336-.475.717-.826 1.48-1.074 2.245-.152.463-.236.83-.27 1.054-.065.41.215.793.624.857.41.065.793-.215.857-.624.025-.15.09-.44.215-.822z", fill: "#FFF", fillRule: "evenodd" })));
|
|
@@ -2659,6 +2690,7 @@ var StentorRouterChat = /** @class */ (function () {
|
|
|
2659
2690
|
user: {
|
|
2660
2691
|
displayName: sender.displayName || sender.email || sender.userId,
|
|
2661
2692
|
nick: senderToNick(sender),
|
|
2693
|
+
avatarPath: sender.avatarPath
|
|
2662
2694
|
},
|
|
2663
2695
|
msg: message.msg,
|
|
2664
2696
|
timestamp: ts || new Date().getTime(),
|
|
@@ -2666,14 +2698,15 @@ var StentorRouterChat = /** @class */ (function () {
|
|
|
2666
2698
|
});
|
|
2667
2699
|
};
|
|
2668
2700
|
this.handlers["user joined"] = function (_data, sender, ts) {
|
|
2701
|
+
var _a, _b;
|
|
2669
2702
|
_this.dispatch({
|
|
2670
2703
|
type: "chat",
|
|
2671
2704
|
detail: {
|
|
2672
2705
|
type: "chat.memberjoin",
|
|
2673
2706
|
user: {
|
|
2707
|
+
avatarPath: (_b = (_a = _this.options) === null || _a === void 0 ? void 0 : _a.bot) === null || _b === void 0 ? void 0 : _b.avatarPath,
|
|
2674
2708
|
displayName: sender.displayName,
|
|
2675
2709
|
nick: senderToNick(sender),
|
|
2676
|
-
avatarPath: sender.avatarPath,
|
|
2677
2710
|
},
|
|
2678
2711
|
timestamp: ts || new Date().getTime(),
|
|
2679
2712
|
},
|
|
@@ -7096,7 +7129,7 @@ var ListMiddlewareWidget = function (props) {
|
|
|
7096
7129
|
var handleExecute = useExecuteActionCallback();
|
|
7097
7130
|
var handleButton = useButtonCallback();
|
|
7098
7131
|
var user = ctx.user;
|
|
7099
|
-
return (React__default$1["default"].createElement(ChatMessagePart, { showAvatar:
|
|
7132
|
+
return (React__default$1["default"].createElement(ChatMessagePart, { showAvatar: false, user: user },
|
|
7100
7133
|
list.type === "CAROUSEL" && React__default$1["default"].createElement("div", { className: "chat-msg chat-msg--fullwidth chat-msg--no-ava" },
|
|
7101
7134
|
React__default$1["default"].createElement(Carousel, { list: list, onExecute: handleExecute, onButtonClick: handleButton, onOpenUrl: ctx.openUrl })),
|
|
7102
7135
|
list.type === "LIST" && React__default$1["default"].createElement("div", { className: "chat-msg chat-msg--expand" },
|
|
@@ -7317,12 +7350,15 @@ var ChatPermissionMessage = function (props) {
|
|
|
7317
7350
|
};
|
|
7318
7351
|
|
|
7319
7352
|
var ChatTextMessage = function (props) {
|
|
7353
|
+
var message = props.message;
|
|
7354
|
+
var date = new Date(message.timestamp);
|
|
7355
|
+
var time = date.getHours() + ':' + date.getMinutes();
|
|
7320
7356
|
var agentMessage = isAgent(props.message.user.nick);
|
|
7321
7357
|
return (React__default$1["default"].createElement("div", { className: "chat-msg" },
|
|
7322
7358
|
React__default$1["default"].createElement("div", { className: "chat-text-container" },
|
|
7323
7359
|
React__default$1["default"].createElement(ChatMessageBubble, { owner: agentMessage ? "others" : "mine", hasTail: agentMessage && !props.sibling },
|
|
7324
|
-
React__default$1["default"].createElement("span", { className: "message-sr-only" }, "at " +
|
|
7325
|
-
React__default$1["default"].createElement("span", null,
|
|
7360
|
+
React__default$1["default"].createElement("span", { className: "message-sr-only" }, "at " + time + (agentMessage ? " the bot said" : " the user said")),
|
|
7361
|
+
React__default$1["default"].createElement("span", null, message.msg.text)))));
|
|
7326
7362
|
};
|
|
7327
7363
|
|
|
7328
7364
|
function getClassName(msg) {
|
|
@@ -7351,25 +7387,32 @@ var ChatMessage = function (props) {
|
|
|
7351
7387
|
return (React__default$1["default"].createElement(React__default$1["default"].Fragment, null,
|
|
7352
7388
|
msg.text &&
|
|
7353
7389
|
React__default$1["default"].createElement(ChatMessagePart, { showAvatar: avaKey === "text", user: user },
|
|
7354
|
-
React__default$1["default"].createElement(ChatTextMessage, { message: props.message, sibling: props.sibling
|
|
7390
|
+
React__default$1["default"].createElement(ChatTextMessage, { message: props.message, sibling: props.sibling })),
|
|
7355
7391
|
msg.html &&
|
|
7356
7392
|
React__default$1["default"].createElement(ChatMessagePart, { showAvatar: avaKey === "html", user: user },
|
|
7357
|
-
React__default$1["default"].createElement(ChatMarkdownMessage, { message: props.message, sibling: props.sibling,
|
|
7393
|
+
React__default$1["default"].createElement(ChatMarkdownMessage, { message: props.message, sibling: props.sibling, onOpenUrl: (_a = props.middlewareContext) === null || _a === void 0 ? void 0 : _a.openUrl })),
|
|
7358
7394
|
msg.displays && middleware && msg.displays.map(function (display, index) {
|
|
7359
7395
|
var Middleware = middleware;
|
|
7360
|
-
return (React__default$1["default"].createElement(
|
|
7361
|
-
React__default$1["default"].createElement("span", { className: "message-sr-only" }, "at " + props.time + " the bot said"),
|
|
7362
|
-
React__default$1["default"].createElement(Middleware, { key: index, msg: display, ctx: props.middlewareContext })));
|
|
7396
|
+
return (React__default$1["default"].createElement(Middleware, { key: index, msg: display, ctx: props.middlewareContext }));
|
|
7363
7397
|
}),
|
|
7364
7398
|
msg.permissionRequest && ctx &&
|
|
7365
7399
|
React__default$1["default"].createElement(ChatMessagePart, { showAvatar: avaKey === "permissionRequest", user: user },
|
|
7366
|
-
React__default$1["default"].createElement(ChatPermissionMessage, { message: props.message, sibling: props.sibling, ctx: ctx
|
|
7400
|
+
React__default$1["default"].createElement(ChatPermissionMessage, { message: props.message, sibling: props.sibling, ctx: ctx }))));
|
|
7367
7401
|
}
|
|
7368
7402
|
return (React__default$1["default"].createElement(React__default$1["default"].Fragment, null));
|
|
7369
7403
|
}
|
|
7404
|
+
function renderTimestamp() {
|
|
7405
|
+
var timestamp = props.message.timestamp;
|
|
7406
|
+
var ts = new Date(timestamp);
|
|
7407
|
+
var timeAgo = getTimeAgo(ts);
|
|
7408
|
+
return (React__default$1["default"].createElement("div", { className: "chat-msg-timestamp ".concat(isAgent(props.message.user.nick) ? "agent" : "visitor") },
|
|
7409
|
+
React__default$1["default"].createElement("span", null, timeAgo)));
|
|
7410
|
+
}
|
|
7370
7411
|
// empty
|
|
7371
7412
|
return (React__default$1["default"].createElement("div", { className: "chat-msg-container-wrapper ".concat(isAgent(props.message.user.nick) ? "agent" : "visitor", " ").concat(props.sibling ? "sibling" : "") },
|
|
7372
|
-
React__default$1["default"].createElement("div", { className: "chat-msg-container ".concat(getClassName(props.message)) },
|
|
7413
|
+
React__default$1["default"].createElement("div", { className: "chat-msg-container ".concat(getClassName(props.message)) },
|
|
7414
|
+
renderByType(),
|
|
7415
|
+
renderTimestamp())));
|
|
7373
7416
|
};
|
|
7374
7417
|
|
|
7375
7418
|
/**
|
|
@@ -30309,7 +30352,7 @@ var MessageList = function (props) {
|
|
|
30309
30352
|
switch (msg.type) {
|
|
30310
30353
|
case "chat.file":
|
|
30311
30354
|
case "chat.msg":
|
|
30312
|
-
return (React__default$1["default"].createElement(ChatMessage, { key: msg.type + msg.timestamp, message: msg, sibling: sibling, agent: user,
|
|
30355
|
+
return (React__default$1["default"].createElement(ChatMessage, { key: msg.type + msg.timestamp, message: msg, sibling: sibling, agent: user, messageMiddleware: props.messageMiddleware, middlewareContext: ctxCache.resolve(user) }));
|
|
30313
30356
|
case "chat.failureMsg":
|
|
30314
30357
|
return (React__default$1["default"].createElement(FailureMessage, __assign({ key: msg.type + msg.timestamp, agents: props.agents, time: time }, msg.failureMsg)));
|
|
30315
30358
|
case "chat.memberjoin":
|