@xapp/chat-widget 1.65.9 → 1.67.0

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
@@ -27,6 +27,7 @@ var defaultServerUrl = "";
27
27
  var defaultWidgetButtonWidth = "48";
28
28
  var defaultMobileWidgetButtonWidth = "30";
29
29
  var defaultNonMobileScreenWidth = "400";
30
+ var scheduleWidgetUrl = "ScheduleButton";
30
31
  var ChatConfigContext = React$1.createContext(null);
31
32
  function useWidgetEnv() {
32
33
  var ctx = React$1.useContext(ChatConfigContext);
@@ -889,9 +890,37 @@ function setVisualStatus(status) {
889
890
  }
890
891
 
891
892
  function execute(url, dispatch, visuals, behavior) {
893
+ var _a, _b;
892
894
  if (!dispatch || !visuals) {
893
895
  throw new Error("OpenUrl: No dispatch and/or visual.");
894
896
  }
897
+ if (url === scheduleWidgetUrl) {
898
+ // It's actually toggle
899
+ var toggleForm = (_a = window.xafwControl) === null || _a === void 0 ? void 0 : _a.openForm;
900
+ if (!toggleForm) {
901
+ err("Cannot find toggleForm! Update form widget!");
902
+ return;
903
+ }
904
+ var isFormActive = false;
905
+ var formStatus = (_b = window.xafwControl) === null || _b === void 0 ? void 0 : _b.formStatus;
906
+ if (formStatus) {
907
+ var formVisuals = formStatus();
908
+ isFormActive = formVisuals.active;
909
+ }
910
+ else {
911
+ err("Cannot find formStatus! Update form widget!");
912
+ }
913
+ // If form is active and we are here, then both widgets are active. Do nothing. Let the user X out the widgets.
914
+ if (!isFormActive) {
915
+ toggleForm();
916
+ if (visuals.opened) {
917
+ dispatch(setVisualStatus({
918
+ opened: false
919
+ }));
920
+ }
921
+ }
922
+ return;
923
+ }
895
924
  // Attempt to add query string to the url
896
925
  // if the query string already exists, it will not be added
897
926
  try {
@@ -7731,6 +7760,20 @@ var ChatTextMessage = function (props) {
7731
7760
  React__default$1["default"].createElement("span", null, message.msg.text)))));
7732
7761
  };
7733
7762
 
7763
+ var ChatScheduleWidget = function (props) {
7764
+ var display = props.display;
7765
+ var chatDispatch = useChatDispatch();
7766
+ var visuals = reactRedux.useSelector(function (state) { return state.visuals; });
7767
+ var openUrl = useOpenUrlCallback();
7768
+ function handleClick() {
7769
+ openUrl(scheduleWidgetUrl, chatDispatch, visuals);
7770
+ }
7771
+ return (React__default$1["default"].createElement("div", { className: "chat-schedule-button-container" },
7772
+ React__default$1["default"].createElement("button", { className: "chat-schedule-button", onClick: handleClick },
7773
+ React__default$1["default"].createElement("i", { className: "fa fa-lg fa-calendar" }),
7774
+ React__default$1["default"].createElement("span", null, display.label || "Schedule Now!"))));
7775
+ };
7776
+
7734
7777
  function getClassName(msg) {
7735
7778
  return isAgent(msg.user.nick) ? "agent" : "visitor";
7736
7779
  }
@@ -7762,6 +7805,9 @@ var ChatMessage = function (props) {
7762
7805
  React__default$1["default"].createElement(ChatMessagePart, { showAvatar: avaKey === "html", user: user },
7763
7806
  React__default$1["default"].createElement(ChatMarkdownMessage, { message: props.message, sibling: props.sibling, onOpenUrl: (_a = props.middlewareContext) === null || _a === void 0 ? void 0 : _a.openUrl })),
7764
7807
  msg.displays && middleware && msg.displays.map(function (display, index) {
7808
+ if (display.type === "ScheduleButton") {
7809
+ return (React__default$1["default"].createElement(ChatScheduleWidget, { minimizeOnClick: props.minimizeOnClick, display: display }));
7810
+ }
7765
7811
  var Middleware = middleware;
7766
7812
  return (React__default$1["default"].createElement(Middleware, { key: index, msg: display, ctx: props.middlewareContext }));
7767
7813
  }),
@@ -29625,11 +29671,12 @@ var defaultProps = {
29625
29671
  visitorId: "",
29626
29672
  onSend: function () { return Promise.resolve(); },
29627
29673
  onWrite: function () { return Promise.resolve(); },
29628
- onOpenUrl: function () { }
29674
+ onOpenUrl: function () { },
29675
+ minimizeOnClick: function () { }
29629
29676
  };
29630
29677
  var MessageList = function (props) {
29631
29678
  if (props === void 0) { props = defaultProps; }
29632
- var onSend = props.onSend, onWrite = props.onWrite, onOpenUrl = props.onOpenUrl;
29679
+ var onSend = props.onSend, onWrite = props.onWrite, onOpenUrl = props.onOpenUrl, minimizeOnClick = props.minimizeOnClick;
29633
29680
  var messagesEndRef = React$1.useRef(null);
29634
29681
  React$1.useEffect(function () {
29635
29682
  messagesEndRef.current.scrollIntoView({ behavior: "smooth" });
@@ -29673,7 +29720,7 @@ var MessageList = function (props) {
29673
29720
  switch (msg.type) {
29674
29721
  case "chat.file":
29675
29722
  case "chat.msg":
29676
- return (React__default$1["default"].createElement(ChatMessage, { key: "cm-".concat(msg.type, "-").concat(msg.timestamp), message: msg, sibling: sibling, agent: user, messageMiddleware: props.messageMiddleware, middlewareContext: ctxCache.resolve(user) }));
29723
+ return (React__default$1["default"].createElement(ChatMessage, { key: "cm-".concat(msg.type, "-").concat(msg.timestamp), message: msg, sibling: sibling, agent: user, messageMiddleware: props.messageMiddleware, middlewareContext: ctxCache.resolve(user), minimizeOnClick: minimizeOnClick }));
29677
29724
  case "chat.failureMsg":
29678
29725
  return (React__default$1["default"].createElement(FailureMessage, __assign({ key: "fm-".concat(msg.type, "-").concat(msg.timestamp), agents: props.agents, time: time }, msg.failureMsg)));
29679
29726
  case "chat.memberjoin":
@@ -30170,9 +30217,8 @@ var ChatWidget = function (props) {
30170
30217
  // if (get("opened")) {
30171
30218
  // setVisible(true);
30172
30219
  // }
30173
- if (chatState.visuals.opened) {
30174
- setVisible(true);
30175
- }
30220
+ // We need this to minimize
30221
+ setVisible(chatState.visuals.opened);
30176
30222
  if (patternExist && patternMatches) {
30177
30223
  setVisible(true);
30178
30224
  }
@@ -30291,7 +30337,7 @@ var ChatWidget = function (props) {
30291
30337
  React__default$1["default"].createElement("div", { className: "widget-container ".concat(modeClass, " ").concat(getVisibilityClass()) },
30292
30338
  React__default$1["default"].createElement(WidgetStylesheet, { theme: config === null || config === void 0 ? void 0 : config.theme }),
30293
30339
  React__default$1["default"].createElement(ChatHeader, { accountStatus: chatState.accountStatus, refreshOnClick: handleRestartClick, minimizeOnClick: handleMinimizeClick, cancelOnClick: handleCancelClick, agent: widgetAgent, canRefresh: canRefresh, canMinimize: canMinimize, canCancel: canCancel, config: config === null || config === void 0 ? void 0 : config.header, menuConfig: config.menu, onSubmit: handleOnSubmit }),
30294
- React__default$1["default"].createElement(MessageList, { visible: visible, queuePosition: chatState.queuePosition, isChatting: chatState.isChatting, isOffline: isOffline, messages: messages, agents: chatState.agents, agent: config === null || config === void 0 ? void 0 : config.agent, lastRatingRequestTimestamp: chatState.lastRatingRequestTimestamp, hasRating: chatState.hasRating, visitorId: chatState.visitorId, messageMiddleware: props.messageMiddleware, textTypingStatusEnabled: (_w = (_v = props.config) === null || _v === void 0 ? void 0 : _v.typingStatus) === null || _w === void 0 ? void 0 : _w.textTypingStatusEnabled, onSend: handleSendMessage, onWrite: handleWriteMessage, onOpenUrl: handleOpenUrl }),
30340
+ React__default$1["default"].createElement(MessageList, { visible: visible, queuePosition: chatState.queuePosition, isChatting: chatState.isChatting, isOffline: isOffline, messages: messages, agents: chatState.agents, agent: config === null || config === void 0 ? void 0 : config.agent, lastRatingRequestTimestamp: chatState.lastRatingRequestTimestamp, hasRating: chatState.hasRating, visitorId: chatState.visitorId, messageMiddleware: props.messageMiddleware, textTypingStatusEnabled: (_w = (_v = props.config) === null || _v === void 0 ? void 0 : _v.typingStatus) === null || _w === void 0 ? void 0 : _w.textTypingStatusEnabled, onSend: handleSendMessage, onWrite: handleWriteMessage, onOpenUrl: handleOpenUrl, minimizeOnClick: handleMinimizeClick }),
30295
30341
  React__default$1["default"].createElement("div", { className: "xa-spinner-container ".concat(visible && connectionStatus === "pending" ? "visible" : "") },
30296
30342
  React__default$1["default"].createElement("div", { className: "xa-spinner" })),
30297
30343
  connectionStatus === "offline" && React__default$1["default"].createElement(ServerOffline, null),