@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/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: true, user: user },
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 " + props.time + (agentMessage ? " the bot said" : " the user said")),
7325
- React__default$1["default"].createElement("span", null, props.message.msg.text)))));
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, time: props.time })),
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, time: props.time, onOpenUrl: (_a = props.middlewareContext) === null || _a === void 0 ? void 0 : _a.openUrl })),
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(React__default$1["default"].Fragment, null,
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, time: props.time }))));
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)) }, renderByType())));
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, time: time, messageMiddleware: props.messageMiddleware, middlewareContext: ctxCache.resolve(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":