@xapp/chat-widget 1.29.1 → 1.32.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/App.d.ts +1 -0
- package/dist/components/ChatMedia/ChatMedia.d.ts +4 -1
- package/dist/components/Input/Input.d.ts +5 -5
- package/dist/components/Input/Input.stories.d.ts +2 -1
- package/dist/components/Input/index.d.ts +1 -1
- package/dist/components/MessageList/MessageList.d.ts +2 -1
- package/dist/components/SendButton/SendButton.d.ts +1 -0
- package/dist/components/Suggestions/Suggestions.d.ts +5 -4
- package/dist/components/Suggestions/Suggestions.stories.d.ts +0 -1
- package/dist/components/Suggestions/data.d.ts +2 -23
- package/dist/components/TypingStatus/TypingStatus.d.ts +2 -4
- package/dist/components/WidgetStylesheet/WidgetStylesheet.d.ts +1 -0
- package/dist/index.css +1 -1
- package/dist/index.es.js +1105 -718
- package/dist/index.es.js.map +1 -1
- package/dist/index.js +1206 -819
- package/dist/index.js.map +1 -1
- package/dist/store/ChatState.d.ts +2 -2
- package/dist/store/ChatStore.d.ts +1 -1
- package/dist/storybook/RichTextValues.d.ts +2 -0
- package/dist/storybook/agents.d.ts +2 -0
- package/dist/utils/useDimensions.d.ts +2 -2
- package/dist/utils/useSuggestions.d.ts +4 -4
- package/dist/utils/useSuggestionsFetch.d.ts +2 -19
- package/package.json +26 -25
package/dist/index.js
CHANGED
|
@@ -2,14 +2,14 @@
|
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
|
-
var React = require('react');
|
|
5
|
+
var React$1 = require('react');
|
|
6
6
|
var reactRedux = require('react-redux');
|
|
7
7
|
var redux = require('redux');
|
|
8
8
|
var thunk = require('redux-thunk');
|
|
9
9
|
|
|
10
10
|
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
11
11
|
|
|
12
|
-
var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
|
|
12
|
+
var React__default$1 = /*#__PURE__*/_interopDefaultLegacy(React$1);
|
|
13
13
|
var thunk__default = /*#__PURE__*/_interopDefaultLegacy(thunk);
|
|
14
14
|
|
|
15
15
|
var ActionButton = function (props) {
|
|
@@ -19,30 +19,14 @@ var ActionButton = function (props) {
|
|
|
19
19
|
props.onClick(props.label);
|
|
20
20
|
}
|
|
21
21
|
}
|
|
22
|
-
return (React__default["default"].createElement("button", { type: props.type, className: "action-button "
|
|
22
|
+
return (React__default$1["default"].createElement("button", { type: props.type, className: "action-button ".concat(props.addClass), onClick: handleClick }, props.label));
|
|
23
23
|
};
|
|
24
24
|
|
|
25
|
-
var paramsObj = {};
|
|
26
|
-
// todo: read only from xappScriptNode?
|
|
27
|
-
for (var _i = 0, _a = document.scripts; _i < _a.length; _i++) {
|
|
28
|
-
var script = _a[_i];
|
|
29
|
-
if (!script.src) {
|
|
30
|
-
continue;
|
|
31
|
-
}
|
|
32
|
-
var params = script.src.split("?");
|
|
33
|
-
if (params.length < 2) {
|
|
34
|
-
continue;
|
|
35
|
-
}
|
|
36
|
-
var searchParams = new URLSearchParams(params[1]);
|
|
37
|
-
searchParams.forEach(function (value, key) {
|
|
38
|
-
paramsObj[key] = value;
|
|
39
|
-
});
|
|
40
|
-
}
|
|
41
25
|
var defaultServerUrl = process.env.SERVER_URL;
|
|
42
26
|
process.env.ACCOUNT_KEY;
|
|
43
|
-
var ChatConfigContext = React.createContext(null);
|
|
27
|
+
var ChatConfigContext = React$1.createContext(null);
|
|
44
28
|
function useWidgetEnv() {
|
|
45
|
-
var ctx = React.useContext(ChatConfigContext);
|
|
29
|
+
var ctx = React$1.useContext(ChatConfigContext);
|
|
46
30
|
return ctx === null || ctx === void 0 ? void 0 : ctx.env;
|
|
47
31
|
}
|
|
48
32
|
function getServerConfig(env) {
|
|
@@ -58,7 +42,7 @@ function getServerConfig(env) {
|
|
|
58
42
|
function useServerConfig(env, nonce) {
|
|
59
43
|
var connection = getServerConfig(env);
|
|
60
44
|
var accountKey = connection.accountKey, serverUrl = connection.serverUrl, type = connection.type;
|
|
61
|
-
return React.useMemo(function () { return ({
|
|
45
|
+
return React$1.useMemo(function () { return ({
|
|
62
46
|
accountKey: accountKey,
|
|
63
47
|
serverUrl: serverUrl,
|
|
64
48
|
type: type,
|
|
@@ -96,7 +80,7 @@ var __assign = function() {
|
|
|
96
80
|
return __assign.apply(this, arguments);
|
|
97
81
|
};
|
|
98
82
|
|
|
99
|
-
function __awaiter(thisArg, _arguments, P, generator) {
|
|
83
|
+
function __awaiter$1(thisArg, _arguments, P, generator) {
|
|
100
84
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
101
85
|
return new (P || (P = Promise))(function (resolve, reject) {
|
|
102
86
|
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
@@ -106,7 +90,7 @@ function __awaiter(thisArg, _arguments, P, generator) {
|
|
|
106
90
|
});
|
|
107
91
|
}
|
|
108
92
|
|
|
109
|
-
function __generator(thisArg, body) {
|
|
93
|
+
function __generator$1(thisArg, body) {
|
|
110
94
|
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
111
95
|
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
112
96
|
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
@@ -134,7 +118,7 @@ function __generator(thisArg, body) {
|
|
|
134
118
|
}
|
|
135
119
|
}
|
|
136
120
|
|
|
137
|
-
function __spreadArray(to, from, pack) {
|
|
121
|
+
function __spreadArray$1(to, from, pack) {
|
|
138
122
|
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
139
123
|
if (ar || !(i in from)) {
|
|
140
124
|
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
@@ -1453,14 +1437,14 @@ function set(key, value) {
|
|
|
1453
1437
|
}
|
|
1454
1438
|
|
|
1455
1439
|
function useIsMounted() {
|
|
1456
|
-
var ref = React.useRef(false);
|
|
1457
|
-
React.useEffect(function () {
|
|
1440
|
+
var ref = React$1.useRef(false);
|
|
1441
|
+
React$1.useEffect(function () {
|
|
1458
1442
|
ref.current = true;
|
|
1459
1443
|
return function () {
|
|
1460
1444
|
ref.current = false;
|
|
1461
1445
|
};
|
|
1462
1446
|
}, []);
|
|
1463
|
-
return React.useCallback(function () { return ref.current; }, []);
|
|
1447
|
+
return React$1.useCallback(function () { return ref.current; }, []);
|
|
1464
1448
|
}
|
|
1465
1449
|
|
|
1466
1450
|
var EMAIL_REGEX = "^\\w+([\\.-]?\\w+)*@\\w+([\\.-]?\\w+)*(\\.\\w{2,3})+$";
|
|
@@ -1474,14 +1458,14 @@ function log() {
|
|
|
1474
1458
|
args[_i] = arguments[_i];
|
|
1475
1459
|
}
|
|
1476
1460
|
// TODO: only log in debug
|
|
1477
|
-
console.log.apply(console, __spreadArray([getCurrentDateString()], args, false));
|
|
1461
|
+
console.log.apply(console, __spreadArray$1([getCurrentDateString()], args, false));
|
|
1478
1462
|
}
|
|
1479
1463
|
function err() {
|
|
1480
1464
|
var args = [];
|
|
1481
1465
|
for (var _i = 0; _i < arguments.length; _i++) {
|
|
1482
1466
|
args[_i] = arguments[_i];
|
|
1483
1467
|
}
|
|
1484
|
-
console.error.apply(console, __spreadArray([getCurrentDateString()], args, false));
|
|
1468
|
+
console.error.apply(console, __spreadArray$1([getCurrentDateString()], args, false));
|
|
1485
1469
|
}
|
|
1486
1470
|
var logOnce = function (key) {
|
|
1487
1471
|
var args = [];
|
|
@@ -1496,8 +1480,8 @@ var logOnce = function (key) {
|
|
|
1496
1480
|
};
|
|
1497
1481
|
|
|
1498
1482
|
function getVisitorSvg() {
|
|
1499
|
-
return (React__default["default"].createElement("svg", { width: "16", height: "19", viewBox: "0 0 16 19" },
|
|
1500
|
-
React__default["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" })));
|
|
1483
|
+
return (React__default$1["default"].createElement("svg", { width: "16", height: "19", viewBox: "0 0 16 19" },
|
|
1484
|
+
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" })));
|
|
1501
1485
|
}
|
|
1502
1486
|
var Avatar = function (props) {
|
|
1503
1487
|
var _a, _b;
|
|
@@ -1506,25 +1490,25 @@ var Avatar = function (props) {
|
|
|
1506
1490
|
var entity = props.entity;
|
|
1507
1491
|
var avatarPath = entity === null || entity === void 0 ? void 0 : entity.avatarPath;
|
|
1508
1492
|
var agentAva = entity && isAgent(entity.nick);
|
|
1509
|
-
var ctx = React.useContext(ChatConfigContext);
|
|
1493
|
+
var ctx = React$1.useContext(ChatConfigContext);
|
|
1510
1494
|
if (agentAva) {
|
|
1511
1495
|
if (avatarPath) {
|
|
1512
1496
|
// absolute or relative url (chat server may send relative, if it hosts the file)
|
|
1513
1497
|
if (avatarPath.startsWith("http")) {
|
|
1514
|
-
style.backgroundImage = "url('"
|
|
1498
|
+
style.backgroundImage = "url('".concat(avatarPath, "')");
|
|
1515
1499
|
}
|
|
1516
1500
|
else if (ctx === null || ctx === void 0 ? void 0 : ctx.assetUrl) {
|
|
1517
|
-
style.backgroundImage = "url('"
|
|
1501
|
+
style.backgroundImage = "url('".concat(ctx === null || ctx === void 0 ? void 0 : ctx.assetUrl, "/").concat(avatarPath, "')");
|
|
1518
1502
|
}
|
|
1519
1503
|
style.backgroundColor = "none";
|
|
1520
1504
|
}
|
|
1521
|
-
(_a = style.backgroundImage) !== null && _a !== void 0 ? _a : (style.backgroundImage = "url('"
|
|
1505
|
+
(_a = style.backgroundImage) !== null && _a !== void 0 ? _a : (style.backgroundImage = "url('".concat((_b = ctx === null || ctx === void 0 ? void 0 : ctx.env) === null || _b === void 0 ? void 0 : _b.avatarUrl, "')"));
|
|
1522
1506
|
}
|
|
1523
1507
|
else {
|
|
1524
1508
|
child = getVisitorSvg();
|
|
1525
1509
|
}
|
|
1526
1510
|
var hasImage = !!style.backgroundImage || !!child;
|
|
1527
|
-
return (React__default["default"].createElement("div", { className: "avatar "
|
|
1511
|
+
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));
|
|
1528
1512
|
};
|
|
1529
1513
|
|
|
1530
1514
|
/**
|
|
@@ -1545,16 +1529,16 @@ function getItemUrl(item) {
|
|
|
1545
1529
|
|
|
1546
1530
|
var OptionalLink = function (props) {
|
|
1547
1531
|
var url = props.url, className = props.className, onOpen = props.onOpen;
|
|
1548
|
-
var handleOpenUrl = React.useCallback(function () {
|
|
1532
|
+
var handleOpenUrl = React$1.useCallback(function () {
|
|
1549
1533
|
if (onOpen) {
|
|
1550
1534
|
onOpen(url);
|
|
1551
1535
|
}
|
|
1552
1536
|
}, [url, onOpen]);
|
|
1553
1537
|
if (url) {
|
|
1554
|
-
return (React__default["default"].createElement("div", { onClick: handleOpenUrl, className: className }, props.children));
|
|
1538
|
+
return (React__default$1["default"].createElement("div", { onClick: handleOpenUrl, className: className }, props.children));
|
|
1555
1539
|
}
|
|
1556
1540
|
else {
|
|
1557
|
-
return (React__default["default"].createElement("div", { onClick: props.onClick, className: className }, props.children));
|
|
1541
|
+
return (React__default$1["default"].createElement("div", { onClick: props.onClick, className: className }, props.children));
|
|
1558
1542
|
}
|
|
1559
1543
|
};
|
|
1560
1544
|
|
|
@@ -1562,7 +1546,7 @@ var ActionItem = function (props) {
|
|
|
1562
1546
|
var _a;
|
|
1563
1547
|
var item = props.item, onButtonClick = props.onButtonClick, onExecute = props.onExecute;
|
|
1564
1548
|
var singleButton = ((_a = item.buttons) === null || _a === void 0 ? void 0 : _a.length) === 1;
|
|
1565
|
-
var handleClick = React.useCallback(function () {
|
|
1549
|
+
var handleClick = React$1.useCallback(function () {
|
|
1566
1550
|
var _a;
|
|
1567
1551
|
var btns = (_a = item.buttons) === null || _a === void 0 ? void 0 : _a.length;
|
|
1568
1552
|
// If there is only one button, it takes precedent
|
|
@@ -1574,18 +1558,18 @@ var ActionItem = function (props) {
|
|
|
1574
1558
|
onExecute(item.title, item.token);
|
|
1575
1559
|
}
|
|
1576
1560
|
}, [item, onExecute, onButtonClick]);
|
|
1577
|
-
var className = "xappw-chat-action-item "
|
|
1578
|
-
return (React__default["default"].createElement(OptionalLink, { className: className, url: getItemUrl(item), onClick: handleClick, onOpen: props.onOpenUrl }, props.children));
|
|
1561
|
+
var className = "xappw-chat-action-item ".concat(singleButton ? "xappw-chat-action-item--action" : "", " ").concat(props.className);
|
|
1562
|
+
return (React__default$1["default"].createElement(OptionalLink, { className: className, url: getItemUrl(item), onClick: handleClick, onOpen: props.onOpenUrl }, props.children));
|
|
1579
1563
|
};
|
|
1580
1564
|
|
|
1581
1565
|
var ChatImage = function (props) {
|
|
1582
1566
|
var cleanUrl = props.imageUrl.replace(/'/g, "%27");
|
|
1583
|
-
var content = React__default["default"].createElement("div", { className: "chat-card-img__content", style: { backgroundImage: "url("
|
|
1567
|
+
var content = React__default$1["default"].createElement("div", { className: "chat-card-img__content", style: { backgroundImage: "url(".concat(cleanUrl, ")") } });
|
|
1584
1568
|
if (!props.imageActionUrl) {
|
|
1585
|
-
return (React__default["default"].createElement("div", { className: "chat-card-img" }, content));
|
|
1569
|
+
return (React__default$1["default"].createElement("div", { className: "chat-card-img" }, content));
|
|
1586
1570
|
}
|
|
1587
1571
|
else {
|
|
1588
|
-
return (React__default["default"].createElement("a", { href: props.imageActionUrl, target: "_blank", rel: "noopener noreferrer", className: "chat-card-img" }, content));
|
|
1572
|
+
return (React__default$1["default"].createElement("a", { href: props.imageActionUrl, target: "_blank", rel: "noopener noreferrer", className: "chat-card-img" }, content));
|
|
1589
1573
|
}
|
|
1590
1574
|
};
|
|
1591
1575
|
|
|
@@ -1596,63 +1580,63 @@ var ActionItemImage = function (props) {
|
|
|
1596
1580
|
var itemUrl = getItemUrl(item);
|
|
1597
1581
|
if (item.imageUrl) {
|
|
1598
1582
|
var imageActionUrl = !singleButton ? item.imageActionUrl : null;
|
|
1599
|
-
return (React__default["default"].createElement("div", { className: props.className },
|
|
1600
|
-
React__default["default"].createElement(ChatImage, { imageUrl: item.imageUrl, imageActionUrl: !itemUrl && imageActionUrl })));
|
|
1583
|
+
return (React__default$1["default"].createElement("div", { className: props.className },
|
|
1584
|
+
React__default$1["default"].createElement(ChatImage, { imageUrl: item.imageUrl, imageActionUrl: !itemUrl && imageActionUrl })));
|
|
1601
1585
|
}
|
|
1602
1586
|
else if (props.emptyImageVisible) {
|
|
1603
|
-
return (React__default["default"].createElement("div", { className: props.className }));
|
|
1587
|
+
return (React__default$1["default"].createElement("div", { className: props.className }));
|
|
1604
1588
|
}
|
|
1605
|
-
return React__default["default"].createElement(React__default["default"].Fragment, null);
|
|
1589
|
+
return React__default$1["default"].createElement(React__default$1["default"].Fragment, null);
|
|
1606
1590
|
};
|
|
1607
1591
|
|
|
1608
1592
|
var ChatActionButtonInner = function (props) {
|
|
1609
1593
|
var button = props.button, onClick = props.onClick;
|
|
1610
|
-
var handleButton = React.useCallback(function () {
|
|
1594
|
+
var handleButton = React$1.useCallback(function () {
|
|
1611
1595
|
onClick(button);
|
|
1612
1596
|
}, [button, onClick]);
|
|
1613
|
-
return (React__default["default"].createElement(ActionButton, { onClick: handleButton, addClass: "button-card", label: button.label }));
|
|
1597
|
+
return (React__default$1["default"].createElement(ActionButton, { onClick: handleButton, addClass: "button-card", label: button.label }));
|
|
1614
1598
|
};
|
|
1615
|
-
var ChatActionButton = React__default["default"].memo(ChatActionButtonInner);
|
|
1599
|
+
var ChatActionButton = React__default$1["default"].memo(ChatActionButtonInner);
|
|
1616
1600
|
|
|
1617
1601
|
var ChatActionButtonsInner = function (props) {
|
|
1618
|
-
return (React__default["default"].createElement("div", { className: "buttons-container " + (props.className || "") }, props.buttons.map(function (button, i) {
|
|
1619
|
-
return React__default["default"].createElement(ChatActionButton, { button: button, onClick: props.onClick, key: i });
|
|
1602
|
+
return (React__default$1["default"].createElement("div", { className: "buttons-container " + (props.className || "") }, props.buttons.map(function (button, i) {
|
|
1603
|
+
return React__default$1["default"].createElement(ChatActionButton, { button: button, onClick: props.onClick, key: i });
|
|
1620
1604
|
})));
|
|
1621
1605
|
};
|
|
1622
|
-
var ChatActionButtons = React__default["default"].memo(ChatActionButtonsInner);
|
|
1606
|
+
var ChatActionButtons = React__default$1["default"].memo(ChatActionButtonsInner);
|
|
1623
1607
|
|
|
1624
1608
|
var CarouselItem = function (props) {
|
|
1625
1609
|
var _a;
|
|
1626
1610
|
var item = props.item;
|
|
1627
|
-
return (React__default["default"].createElement(ActionItem, { className: "chat-list-item-container", item: item, onButtonClick: props.onButtonClick, onExecute: props.onExecute, onOpenUrl: props.onOpenUrl },
|
|
1628
|
-
React__default["default"].createElement("div", { className: "chat-list-item" },
|
|
1629
|
-
React__default["default"].createElement(ActionItemImage, { item: item, className: "chat-list-item__img", emptyImageVisible: props.emptyImageVisible }),
|
|
1630
|
-
item.title && React__default["default"].createElement("div", { className: "chat-list-item__title" },
|
|
1631
|
-
React__default["default"].createElement("span", null, item.title)),
|
|
1632
|
-
item.subTitle && React__default["default"].createElement("div", { className: "chat-list-item__subtitle" },
|
|
1633
|
-
React__default["default"].createElement("span", null, item.subTitle)),
|
|
1634
|
-
!!((_a = item.buttons) === null || _a === void 0 ? void 0 : _a.length) && React__default["default"].createElement(ChatActionButtons, { className: "chat-list-item__actions", buttons: item.buttons, onClick: props.onButtonClick }))));
|
|
1611
|
+
return (React__default$1["default"].createElement(ActionItem, { className: "chat-list-item-container", item: item, onButtonClick: props.onButtonClick, onExecute: props.onExecute, onOpenUrl: props.onOpenUrl },
|
|
1612
|
+
React__default$1["default"].createElement("div", { className: "chat-list-item" },
|
|
1613
|
+
React__default$1["default"].createElement(ActionItemImage, { item: item, className: "chat-list-item__img", emptyImageVisible: props.emptyImageVisible }),
|
|
1614
|
+
item.title && React__default$1["default"].createElement("div", { className: "chat-list-item__title" },
|
|
1615
|
+
React__default$1["default"].createElement("span", null, item.title)),
|
|
1616
|
+
item.subTitle && React__default$1["default"].createElement("div", { className: "chat-list-item__subtitle" },
|
|
1617
|
+
React__default$1["default"].createElement("span", null, item.subTitle)),
|
|
1618
|
+
!!((_a = item.buttons) === null || _a === void 0 ? void 0 : _a.length) && React__default$1["default"].createElement(ChatActionButtons, { className: "chat-list-item__actions", buttons: item.buttons, onClick: props.onButtonClick }))));
|
|
1635
1619
|
};
|
|
1636
1620
|
|
|
1637
1621
|
function getLeftArrowSvg() {
|
|
1638
|
-
return (React__default["default"].createElement("svg", { viewBox: "-5 -18 10 36" },
|
|
1639
|
-
React__default["default"].createElement("path", { d: "M 2.5 -15 L -2.5 0 L 2.5 15", stroke: "currentColor", strokeLinecap: "square", strokeWidth: "4px", fill: "none" })));
|
|
1622
|
+
return (React__default$1["default"].createElement("svg", { viewBox: "-5 -18 10 36" },
|
|
1623
|
+
React__default$1["default"].createElement("path", { d: "M 2.5 -15 L -2.5 0 L 2.5 15", stroke: "currentColor", strokeLinecap: "square", strokeWidth: "4px", fill: "none" })));
|
|
1640
1624
|
}
|
|
1641
1625
|
var ChevronLeft = function (props) {
|
|
1642
|
-
return (React__default["default"].createElement("div", { onClick: props.onClick, className: "chevron" }, getLeftArrowSvg()));
|
|
1626
|
+
return (React__default$1["default"].createElement("div", { onClick: props.onClick, className: "chevron" }, getLeftArrowSvg()));
|
|
1643
1627
|
};
|
|
1644
1628
|
|
|
1645
1629
|
function getRightArrowSvg() {
|
|
1646
|
-
return (React__default["default"].createElement("svg", { viewBox: "-5 -18 10 36" },
|
|
1647
|
-
React__default["default"].createElement("path", { d: "M -2.5 -15 L 2.5 0 L -2.5 15", stroke: "currentColor", strokeLinecap: "square", strokeWidth: "4px", fill: "none" })));
|
|
1630
|
+
return (React__default$1["default"].createElement("svg", { viewBox: "-5 -18 10 36" },
|
|
1631
|
+
React__default$1["default"].createElement("path", { d: "M -2.5 -15 L 2.5 0 L -2.5 15", stroke: "currentColor", strokeLinecap: "square", strokeWidth: "4px", fill: "none" })));
|
|
1648
1632
|
}
|
|
1649
1633
|
var ChevronRight = function (props) {
|
|
1650
|
-
return (React__default["default"].createElement("div", { onClick: props.onClick, className: "chevron" }, getRightArrowSvg()));
|
|
1634
|
+
return (React__default$1["default"].createElement("div", { onClick: props.onClick, className: "chevron" }, getRightArrowSvg()));
|
|
1651
1635
|
};
|
|
1652
1636
|
|
|
1653
1637
|
var Carousel = function (props) {
|
|
1654
|
-
var listRef = React.useRef(null);
|
|
1655
|
-
var _a = React.useState(0), visibleIndex = _a[0], setSetVisibleIndex = _a[1];
|
|
1638
|
+
var listRef = React$1.useRef(null);
|
|
1639
|
+
var _a = React$1.useState(0), visibleIndex = _a[0], setSetVisibleIndex = _a[1];
|
|
1656
1640
|
function scrollMe(direction) {
|
|
1657
1641
|
var _a, _b;
|
|
1658
1642
|
var scrollArea = listRef.current;
|
|
@@ -1685,21 +1669,21 @@ var Carousel = function (props) {
|
|
|
1685
1669
|
}
|
|
1686
1670
|
var hasImage = props.list.items.some(function (item) { return item.imageUrl; });
|
|
1687
1671
|
var listItems = props.list.items.map(function (item, itemIndex) {
|
|
1688
|
-
return (React__default["default"].createElement("div", { className: "xappw-carousel-items__item", key: "item-key-"
|
|
1689
|
-
React__default["default"].createElement(CarouselItem, { item: item, emptyImageVisible: hasImage, onExecute: props.onExecute, onButtonClick: props.onButtonClick, onOpenUrl: props.onOpenUrl })));
|
|
1672
|
+
return (React__default$1["default"].createElement("div", { className: "xappw-carousel-items__item", key: "item-key-".concat(itemIndex) },
|
|
1673
|
+
React__default$1["default"].createElement(CarouselItem, { item: item, emptyImageVisible: hasImage, onExecute: props.onExecute, onButtonClick: props.onButtonClick, onOpenUrl: props.onOpenUrl })));
|
|
1690
1674
|
});
|
|
1691
|
-
return (React__default["default"].createElement("div", { className: "xappw-carousel" },
|
|
1692
|
-
React__default["default"].createElement("div", { className: "xappw-carousel__prev" },
|
|
1693
|
-
React__default["default"].createElement(ChevronLeft, { onClick: function () { return scrollMe(-1); } })),
|
|
1694
|
-
React__default["default"].createElement("div", { ref: listRef, className: "xappw-carousel-items" }, listItems),
|
|
1695
|
-
React__default["default"].createElement("div", { className: "xappw-carousel__next" },
|
|
1696
|
-
React__default["default"].createElement(ChevronRight, { onClick: function () { return scrollMe(1); } }))));
|
|
1675
|
+
return (React__default$1["default"].createElement("div", { className: "xappw-carousel" },
|
|
1676
|
+
React__default$1["default"].createElement("div", { className: "xappw-carousel__prev" },
|
|
1677
|
+
React__default$1["default"].createElement(ChevronLeft, { onClick: function () { return scrollMe(-1); } })),
|
|
1678
|
+
React__default$1["default"].createElement("div", { ref: listRef, className: "xappw-carousel-items" }, listItems),
|
|
1679
|
+
React__default$1["default"].createElement("div", { className: "xappw-carousel__next" },
|
|
1680
|
+
React__default$1["default"].createElement(ChevronRight, { onClick: function () { return scrollMe(1); } }))));
|
|
1697
1681
|
};
|
|
1698
1682
|
|
|
1699
1683
|
function useDimensions() {
|
|
1700
|
-
var ref = React.useRef();
|
|
1701
|
-
var _a = React.useState(), dimensions = _a[0], setDimensions = _a[1];
|
|
1702
|
-
React.useLayoutEffect(function () {
|
|
1684
|
+
var ref = React$1.useRef(null);
|
|
1685
|
+
var _a = React$1.useState(), dimensions = _a[0], setDimensions = _a[1];
|
|
1686
|
+
React$1.useLayoutEffect(function () {
|
|
1703
1687
|
var _a, _b;
|
|
1704
1688
|
setDimensions((_b = (_a = ref.current) === null || _a === void 0 ? void 0 : _a.getBoundingClientRect()) === null || _b === void 0 ? void 0 : _b.toJSON());
|
|
1705
1689
|
}, []);
|
|
@@ -1786,36 +1770,36 @@ function getTailSvgPath$1(props, viewport) {
|
|
|
1786
1770
|
start: far,
|
|
1787
1771
|
direction: rightDirection
|
|
1788
1772
|
});
|
|
1789
|
-
return "m "
|
|
1773
|
+
return "m ".concat(far.x, " ").concat(far.y, " L ").concat(left.x, " ").concat(left.y, " L ").concat(right.x, " ").concat(right.y, " z");
|
|
1790
1774
|
}
|
|
1791
1775
|
var CtaBubbleTail = function (props) {
|
|
1792
1776
|
var _a, _b;
|
|
1793
1777
|
var _c = useDimensions(), ref = _c[0], rect = _c[1];
|
|
1794
1778
|
var viewPort = { x: (_a = rect === null || rect === void 0 ? void 0 : rect.width) !== null && _a !== void 0 ? _a : 0, y: (_b = rect === null || rect === void 0 ? void 0 : rect.height) !== null && _b !== void 0 ? _b : 0 };
|
|
1795
|
-
return React__default["default"].createElement("div", { ref: ref, className: "cta-bubble__tail" },
|
|
1796
|
-
React__default["default"].createElement("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 "
|
|
1797
|
-
React__default["default"].createElement("path", { d: getTailSvgPath$1(props, viewPort), fill: "currentColor" })));
|
|
1779
|
+
return React__default$1["default"].createElement("div", { ref: ref, className: "cta-bubble__tail" },
|
|
1780
|
+
React__default$1["default"].createElement("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 ".concat(viewPort.x, " ").concat(viewPort.y) },
|
|
1781
|
+
React__default$1["default"].createElement("path", { d: getTailSvgPath$1(props, viewPort), fill: "currentColor" })));
|
|
1798
1782
|
};
|
|
1799
1783
|
var CtaBubble = function (props) {
|
|
1800
1784
|
var _a, _b;
|
|
1801
1785
|
var _c = useDimensions(), ref = _c[0], rect = _c[1];
|
|
1802
|
-
return (React__default["default"].createElement("div", { ref: ref, className: "cta-bubble", onClick: props.onClick },
|
|
1803
|
-
React__default["default"].createElement(CtaBubbleTail, { width: (_a = rect === null || rect === void 0 ? void 0 : rect.width) !== null && _a !== void 0 ? _a : 0, height: (_b = rect === null || rect === void 0 ? void 0 : rect.height) !== null && _b !== void 0 ? _b : 0, direction: 60, angle: 45, length: 16 }),
|
|
1804
|
-
React__default["default"].createElement("div", { className: "cta-bubble__content" }, props.children)));
|
|
1786
|
+
return (React__default$1["default"].createElement("div", { ref: ref, className: "cta-bubble", onClick: props.onClick },
|
|
1787
|
+
React__default$1["default"].createElement(CtaBubbleTail, { width: (_a = rect === null || rect === void 0 ? void 0 : rect.width) !== null && _a !== void 0 ? _a : 0, height: (_b = rect === null || rect === void 0 ? void 0 : rect.height) !== null && _b !== void 0 ? _b : 0, direction: 60, angle: 45, length: 16 }),
|
|
1788
|
+
React__default$1["default"].createElement("div", { className: "cta-bubble__content" }, props.children)));
|
|
1805
1789
|
};
|
|
1806
1790
|
|
|
1807
1791
|
var CtaBubbleContainer = function (props) {
|
|
1808
|
-
var startTime = React.useMemo(function () {
|
|
1792
|
+
var startTime = React$1.useMemo(function () {
|
|
1809
1793
|
if (props.visible) {
|
|
1810
1794
|
return new Date().valueOf();
|
|
1811
1795
|
}
|
|
1812
1796
|
return undefined;
|
|
1813
1797
|
}, [props.visible]);
|
|
1814
|
-
var _a = React.useState(new Date().valueOf()), currentTime = _a[0], setCurrentTime = _a[1];
|
|
1798
|
+
var _a = React$1.useState(new Date().valueOf()), currentTime = _a[0], setCurrentTime = _a[1];
|
|
1815
1799
|
var timeout = props.timeout;
|
|
1816
1800
|
var duration = currentTime - startTime;
|
|
1817
1801
|
var pastDue = startTime && props.timeout && (duration >= props.timeout);
|
|
1818
|
-
React.useEffect(function () {
|
|
1802
|
+
React$1.useEffect(function () {
|
|
1819
1803
|
if (!startTime) {
|
|
1820
1804
|
return undefined;
|
|
1821
1805
|
}
|
|
@@ -1832,16 +1816,16 @@ var CtaBubbleContainer = function (props) {
|
|
|
1832
1816
|
clearTimeout(handle);
|
|
1833
1817
|
};
|
|
1834
1818
|
}, [startTime, timeout]);
|
|
1835
|
-
return (React__default["default"].createElement(React__default["default"].Fragment, null, props.visible && !pastDue && React__default["default"].createElement(CtaBubble, { onClick: props.onClick }, props.children)));
|
|
1819
|
+
return (React__default$1["default"].createElement(React__default$1["default"].Fragment, null, props.visible && !pastDue && React__default$1["default"].createElement(CtaBubble, { onClick: props.onClick }, props.children)));
|
|
1836
1820
|
};
|
|
1837
1821
|
|
|
1838
1822
|
var ChatButton = function (props) {
|
|
1839
|
-
return (React__default["default"].createElement("div", { className: "chat-button "
|
|
1840
|
-
React__default["default"].createElement("div", { className: "chat-button__btn", onClick: props.onClick },
|
|
1841
|
-
React__default["default"].createElement("svg", { width: "22", height: "22", viewBox: "0 0 22 22" },
|
|
1842
|
-
React__default["default"].createElement("path", { d: "M13 22l-4-6H2c-1.11-.043-2-.935-2-2V2C0 .89.89 0 2 0h18c1.11 0 2 .892 2 2v12c0 1.067-.89 1.957-2 2h-3l-4 6zm3-8h4c-.005.3-.01-12 0-12-.01.004-18 .006-18 0 .005.006 0 12 0 12h8l3 5 3-5z", fill: "#FFF", fillRule: "evenodd" }))),
|
|
1843
|
-
props.config && props.config.message && (React__default["default"].createElement("div", { className: "chat-button__cta" },
|
|
1844
|
-
React__default["default"].createElement(CtaBubbleContainer, { timeout: props.config.timeout, visible: !props.visible, onClick: props.onClick }, props.config.message)))));
|
|
1823
|
+
return (React__default$1["default"].createElement("div", { className: "chat-button ".concat(props.addClass) },
|
|
1824
|
+
React__default$1["default"].createElement("div", { className: "chat-button__btn", onClick: props.onClick },
|
|
1825
|
+
React__default$1["default"].createElement("svg", { width: "22", height: "22", viewBox: "0 0 22 22" },
|
|
1826
|
+
React__default$1["default"].createElement("path", { d: "M13 22l-4-6H2c-1.11-.043-2-.935-2-2V2C0 .89.89 0 2 0h18c1.11 0 2 .892 2 2v12c0 1.067-.89 1.957-2 2h-3l-4 6zm3-8h4c-.005.3-.01-12 0-12-.01.004-18 .006-18 0 .005.006 0 12 0 12h8l3 5 3-5z", fill: "#FFF", fillRule: "evenodd" }))),
|
|
1827
|
+
props.config && props.config.message && (React__default$1["default"].createElement("div", { className: "chat-button__cta" },
|
|
1828
|
+
React__default$1["default"].createElement(CtaBubbleContainer, { timeout: props.config.timeout, visible: !props.visible, onClick: props.onClick }, props.config.message)))));
|
|
1845
1829
|
};
|
|
1846
1830
|
|
|
1847
1831
|
var ChatCard = function (props) {
|
|
@@ -1851,39 +1835,39 @@ var ChatCard = function (props) {
|
|
|
1851
1835
|
var image;
|
|
1852
1836
|
var content;
|
|
1853
1837
|
if (card.imageUrl) {
|
|
1854
|
-
image = React__default["default"].createElement("div", { className: "chat-card-container__img" },
|
|
1855
|
-
React__default["default"].createElement(ChatImage, { imageUrl: card.imageUrl, imageActionUrl: card.imageActionUrl }));
|
|
1838
|
+
image = React__default$1["default"].createElement("div", { className: "chat-card-container__img" },
|
|
1839
|
+
React__default$1["default"].createElement(ChatImage, { imageUrl: card.imageUrl, imageActionUrl: card.imageActionUrl }));
|
|
1856
1840
|
}
|
|
1857
1841
|
if (card.title) {
|
|
1858
1842
|
title =
|
|
1859
|
-
React__default["default"].createElement("div", { className: "chat-card-title" },
|
|
1860
|
-
React__default["default"].createElement("span", null, card.title));
|
|
1843
|
+
React__default$1["default"].createElement("div", { className: "chat-card-title" },
|
|
1844
|
+
React__default$1["default"].createElement("span", null, card.title));
|
|
1861
1845
|
}
|
|
1862
1846
|
if (card.content) {
|
|
1863
1847
|
content =
|
|
1864
|
-
React__default["default"].createElement("div", { className: "chat-card-sub-title" },
|
|
1865
|
-
React__default["default"].createElement("span", null, card.content));
|
|
1848
|
+
React__default$1["default"].createElement("div", { className: "chat-card-sub-title" },
|
|
1849
|
+
React__default$1["default"].createElement("span", null, card.content));
|
|
1866
1850
|
}
|
|
1867
|
-
return (React__default["default"].createElement("div", { className: "chat-card-container" },
|
|
1851
|
+
return (React__default$1["default"].createElement("div", { className: "chat-card-container" },
|
|
1868
1852
|
image,
|
|
1869
1853
|
title,
|
|
1870
1854
|
content,
|
|
1871
|
-
!!((_a = card.buttons) === null || _a === void 0 ? void 0 : _a.length) && React__default["default"].createElement(ChatActionButtons, { buttons: card.buttons, onClick: props.onButtonClick })));
|
|
1855
|
+
!!((_a = card.buttons) === null || _a === void 0 ? void 0 : _a.length) && React__default$1["default"].createElement(ChatActionButtons, { buttons: card.buttons, onClick: props.onButtonClick })));
|
|
1872
1856
|
};
|
|
1873
1857
|
|
|
1874
1858
|
var ChatChip = function (props) {
|
|
1875
1859
|
var option = props.option;
|
|
1876
1860
|
var className = option.actionUrl ? "chat-chip chat-chip-link" : "chat-chip";
|
|
1877
|
-
return (React__default["default"].createElement("div", { onClick: function () { return props === null || props === void 0 ? void 0 : props.onClick(option); }, className: className },
|
|
1878
|
-
React__default["default"].createElement("span", null, option.label || option)));
|
|
1861
|
+
return (React__default$1["default"].createElement("div", { onClick: function () { return props === null || props === void 0 ? void 0 : props.onClick(option); }, className: className },
|
|
1862
|
+
React__default$1["default"].createElement("span", null, option.label || option)));
|
|
1879
1863
|
};
|
|
1880
1864
|
|
|
1881
1865
|
/**
|
|
1882
1866
|
* Render option list. We just follow the order.
|
|
1883
1867
|
*/
|
|
1884
1868
|
var ChatChips = function (props) {
|
|
1885
|
-
return (React__default["default"].createElement("div", { className: "chat-chips" }, props.options.map(function (option, i) {
|
|
1886
|
-
return React__default["default"].createElement(ChatChip, { key: i, onClick: props.onOptionClick, option: option });
|
|
1869
|
+
return (React__default$1["default"].createElement("div", { className: "chat-chips" }, props.options.map(function (option, i) {
|
|
1870
|
+
return React__default$1["default"].createElement(ChatChip, { key: i, onClick: props.onOptionClick, option: option });
|
|
1887
1871
|
})));
|
|
1888
1872
|
};
|
|
1889
1873
|
|
|
@@ -1908,7 +1892,7 @@ function resolveUrlPolicy(url, config) {
|
|
|
1908
1892
|
}
|
|
1909
1893
|
|
|
1910
1894
|
// compile time full switch-case verification
|
|
1911
|
-
function throwBadKind(x) {
|
|
1895
|
+
function throwBadKind$1(x) {
|
|
1912
1896
|
throw new Error("Unknown kind " + x);
|
|
1913
1897
|
}
|
|
1914
1898
|
|
|
@@ -1916,7 +1900,7 @@ function execute(url, behavior) {
|
|
|
1916
1900
|
var type = behavior.type;
|
|
1917
1901
|
switch (type) {
|
|
1918
1902
|
case "newWindow":
|
|
1919
|
-
window.open(url, "callout-option", "toolbar=0,status=0,width="
|
|
1903
|
+
window.open(url, "callout-option", "toolbar=0,status=0,width=".concat(behavior.width || 1000, ",height=").concat(behavior.height || 700));
|
|
1920
1904
|
break;
|
|
1921
1905
|
case "newTab":
|
|
1922
1906
|
window.open(url, "_blank");
|
|
@@ -1925,12 +1909,12 @@ function execute(url, behavior) {
|
|
|
1925
1909
|
window.open(url, "_self");
|
|
1926
1910
|
break;
|
|
1927
1911
|
default:
|
|
1928
|
-
throwBadKind(type);
|
|
1912
|
+
throwBadKind$1(type);
|
|
1929
1913
|
}
|
|
1930
1914
|
}
|
|
1931
1915
|
function useOpenUrlCallback() {
|
|
1932
1916
|
var env = useWidgetEnv();
|
|
1933
|
-
return React.useCallback(function (url) {
|
|
1917
|
+
return React$1.useCallback(function (url) {
|
|
1934
1918
|
var policy = (env === null || env === void 0 ? void 0 : env.urls) ? resolveUrlPolicy(url, env.urls) : defaultBehavior;
|
|
1935
1919
|
execute(url, policy);
|
|
1936
1920
|
}, [env]);
|
|
@@ -1958,7 +1942,7 @@ function executeAction(text, token) {
|
|
|
1958
1942
|
});
|
|
1959
1943
|
var visitor = getState().visitor;
|
|
1960
1944
|
dispatch(writeMessage({
|
|
1961
|
-
text: !token ? text : text
|
|
1945
|
+
text: !token ? text : "".concat(text, " (from the list)")
|
|
1962
1946
|
}, visitor));
|
|
1963
1947
|
}; };
|
|
1964
1948
|
}
|
|
@@ -2098,31 +2082,31 @@ var LogChat = /** @class */ (function () {
|
|
|
2098
2082
|
this.inner.init(dispatch);
|
|
2099
2083
|
};
|
|
2100
2084
|
LogChat.prototype.sendOfflineMsg = function (message, cb) {
|
|
2101
|
-
log("CLIENT: sendOfflineMsg: "
|
|
2085
|
+
log("CLIENT: sendOfflineMsg: ".concat(JSON.stringify(message)));
|
|
2102
2086
|
this.inner.sendOfflineMsg(message, cb);
|
|
2103
2087
|
};
|
|
2104
2088
|
LogChat.prototype.sendChatMsg = function (message, cb) {
|
|
2105
|
-
log("CLIENT: sendChatMsg: "
|
|
2089
|
+
log("CLIENT: sendChatMsg: ".concat(JSON.stringify(message)));
|
|
2106
2090
|
this.inner.sendChatMsg(message, cb);
|
|
2107
2091
|
};
|
|
2108
2092
|
LogChat.prototype.sendChatMsgRequest = function (message, cb) {
|
|
2109
|
-
log("CLIENT: sendChatMsgRequest: "
|
|
2093
|
+
log("CLIENT: sendChatMsgRequest: ".concat(JSON.stringify(message)));
|
|
2110
2094
|
this.inner.sendChatMsgRequest(message, cb);
|
|
2111
2095
|
};
|
|
2112
2096
|
LogChat.prototype.sendTyping = function (isTyping) {
|
|
2113
|
-
log("CLIENT: sendTyping: "
|
|
2097
|
+
log("CLIENT: sendTyping: ".concat(JSON.stringify(isTyping)));
|
|
2114
2098
|
this.inner.sendTyping(isTyping);
|
|
2115
2099
|
};
|
|
2116
2100
|
LogChat.prototype.setVisitorInfo = function (visitorInfo, cb) {
|
|
2117
|
-
log("CLIENT: setVisitorInfo: "
|
|
2101
|
+
log("CLIENT: setVisitorInfo: ".concat(JSON.stringify(visitorInfo)));
|
|
2118
2102
|
this.inner.setVisitorInfo(visitorInfo, cb);
|
|
2119
2103
|
};
|
|
2120
2104
|
LogChat.prototype.sendChatRating = function (rating) {
|
|
2121
|
-
log("CLIENT: sendChatRating: "
|
|
2105
|
+
log("CLIENT: sendChatRating: ".concat(JSON.stringify(rating)));
|
|
2122
2106
|
this.inner.sendChatRating(rating);
|
|
2123
2107
|
};
|
|
2124
2108
|
LogChat.prototype.sendFile = function (file, cb) {
|
|
2125
|
-
log("CLIENT: sendFile: "
|
|
2109
|
+
log("CLIENT: sendFile: ".concat(JSON.stringify(file)));
|
|
2126
2110
|
this.inner.sendFile(file, cb);
|
|
2127
2111
|
};
|
|
2128
2112
|
LogChat.prototype.markAsRead = function () {
|
|
@@ -2140,20 +2124,631 @@ var LogChat = /** @class */ (function () {
|
|
|
2140
2124
|
return LogChat;
|
|
2141
2125
|
}());
|
|
2142
2126
|
|
|
2127
|
+
var dist = {};
|
|
2128
|
+
|
|
2129
|
+
Object.defineProperty(dist, '__esModule', { value: true });
|
|
2130
|
+
|
|
2131
|
+
var React = React__default$1["default"];
|
|
2132
|
+
|
|
2133
|
+
function _interopDefaultLegacy$1 (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
2134
|
+
|
|
2135
|
+
var React__default = /*#__PURE__*/_interopDefaultLegacy$1(React);
|
|
2136
|
+
|
|
2137
|
+
var IconButton = function (props) {
|
|
2138
|
+
var type = props.type || "button";
|
|
2139
|
+
var Icon = props.icon;
|
|
2140
|
+
return (React__default["default"].createElement("button", { type: type, className: "xapp-search-icon-button ".concat(props.className || ""), onClick: props.onClick },
|
|
2141
|
+
React__default["default"].createElement("div", { className: "xapp-search-icon-button__content" },
|
|
2142
|
+
React__default["default"].createElement(Icon, null))));
|
|
2143
|
+
};
|
|
2144
|
+
|
|
2145
|
+
var MessageBubble = function (props) {
|
|
2146
|
+
return (React__default["default"].createElement("div", { className: "xappw-message-bubble" }, props.children));
|
|
2147
|
+
};
|
|
2148
|
+
|
|
2149
|
+
// compile time full switch-case verification
|
|
2150
|
+
function throwBadKind(x) {
|
|
2151
|
+
throw new Error("Unknown kind " + x);
|
|
2152
|
+
}
|
|
2153
|
+
|
|
2154
|
+
var RichTextBoldSpan = function (props) {
|
|
2155
|
+
var format = props.format, text = props.text;
|
|
2156
|
+
return (React__default["default"].createElement("span", { "data-rich-text-type": "bold", className: "xapp-search-rich-text-bold-span" }, text.substring(format.start, format.end)));
|
|
2157
|
+
};
|
|
2158
|
+
|
|
2159
|
+
var RichTextInputSpan = function (props) {
|
|
2160
|
+
var format = props.format, text = props.text, readOnly = props.readOnly;
|
|
2161
|
+
var defaultValue = format.text || text.substring(format.start, format.end);
|
|
2162
|
+
var _a = React.useState(defaultValue), value = _a[0], setValue = _a[1];
|
|
2163
|
+
var handleChange = React.useCallback(function (ev) {
|
|
2164
|
+
setValue(ev.target.value);
|
|
2165
|
+
}, []);
|
|
2166
|
+
if (readOnly) {
|
|
2167
|
+
return (React__default["default"].createElement("span", { className: "xapp-search-rich-text-input-span xapp-search-rich-text-input-span--readonly" }, defaultValue));
|
|
2168
|
+
}
|
|
2169
|
+
return (React__default["default"].createElement("input", { type: "text", value: value, className: "xapp-search-rich-text-input-span", "data-rich-text-type": "inputText", onChange: handleChange, readOnly: readOnly }));
|
|
2170
|
+
};
|
|
2171
|
+
|
|
2172
|
+
var RichTextNormalSpan = function (props) {
|
|
2173
|
+
var format = props.format, text = props.text;
|
|
2174
|
+
return (React__default["default"].createElement("span", { "data-rich-text-type": "normal", className: "xapp-search-rich-text-normal-span" }, text.substring(format.start, format.end)));
|
|
2175
|
+
};
|
|
2176
|
+
|
|
2177
|
+
var RichTextSpan = function (props) {
|
|
2178
|
+
var format = props.format, text = props.text, readOnly = props.readOnly;
|
|
2179
|
+
var type = format.type;
|
|
2180
|
+
switch (type) {
|
|
2181
|
+
case "normal":
|
|
2182
|
+
return (React__default["default"].createElement(RichTextNormalSpan, { text: text, format: format, readOnly: readOnly }));
|
|
2183
|
+
case "bold":
|
|
2184
|
+
return (React__default["default"].createElement(RichTextBoldSpan, { text: text, format: format, readOnly: readOnly }));
|
|
2185
|
+
case "inputText":
|
|
2186
|
+
return (React__default["default"].createElement(RichTextInputSpan, { text: text, format: format, readOnly: readOnly }));
|
|
2187
|
+
default:
|
|
2188
|
+
throwBadKind(type);
|
|
2189
|
+
}
|
|
2190
|
+
};
|
|
2191
|
+
|
|
2192
|
+
function cleanRichTextValue(value) {
|
|
2193
|
+
var text = value.text, formats = value.formats;
|
|
2194
|
+
var newFormats = [];
|
|
2195
|
+
for (var _i = 0, formats_1 = formats; _i < formats_1.length; _i++) {
|
|
2196
|
+
var format = formats_1[_i];
|
|
2197
|
+
var type = format.type;
|
|
2198
|
+
switch (type) {
|
|
2199
|
+
case "normal":
|
|
2200
|
+
continue;
|
|
2201
|
+
case "inputText":
|
|
2202
|
+
newFormats.push(format);
|
|
2203
|
+
break;
|
|
2204
|
+
case "bold":
|
|
2205
|
+
if (newFormats.length > 0) {
|
|
2206
|
+
var prev = newFormats[newFormats.length - 1];
|
|
2207
|
+
if (prev.type === type && prev.end === format.start) {
|
|
2208
|
+
newFormats.pop();
|
|
2209
|
+
newFormats.push({
|
|
2210
|
+
type: type,
|
|
2211
|
+
start: prev.start,
|
|
2212
|
+
end: format.end
|
|
2213
|
+
});
|
|
2214
|
+
}
|
|
2215
|
+
}
|
|
2216
|
+
else {
|
|
2217
|
+
newFormats.push(format);
|
|
2218
|
+
}
|
|
2219
|
+
break;
|
|
2220
|
+
}
|
|
2221
|
+
}
|
|
2222
|
+
return {
|
|
2223
|
+
text: text,
|
|
2224
|
+
formats: newFormats
|
|
2225
|
+
};
|
|
2226
|
+
}
|
|
2227
|
+
|
|
2228
|
+
function extendFormat(formats, length) {
|
|
2229
|
+
var res = [];
|
|
2230
|
+
var walkerIndex = 0;
|
|
2231
|
+
for (var _i = 0, formats_1 = formats; _i < formats_1.length; _i++) {
|
|
2232
|
+
var format = formats_1[_i];
|
|
2233
|
+
var start = format.start, end = format.end, type = format.type, text = format.text;
|
|
2234
|
+
if (walkerIndex < start) {
|
|
2235
|
+
res.push({
|
|
2236
|
+
type: "normal",
|
|
2237
|
+
start: walkerIndex,
|
|
2238
|
+
end: start
|
|
2239
|
+
});
|
|
2240
|
+
}
|
|
2241
|
+
res.push({
|
|
2242
|
+
type: type,
|
|
2243
|
+
start: start,
|
|
2244
|
+
end: end,
|
|
2245
|
+
text: text
|
|
2246
|
+
});
|
|
2247
|
+
walkerIndex = end;
|
|
2248
|
+
}
|
|
2249
|
+
if (walkerIndex < length) {
|
|
2250
|
+
res.push({
|
|
2251
|
+
type: "normal",
|
|
2252
|
+
start: walkerIndex,
|
|
2253
|
+
end: length
|
|
2254
|
+
});
|
|
2255
|
+
}
|
|
2256
|
+
return res;
|
|
2257
|
+
}
|
|
2258
|
+
|
|
2259
|
+
function parseContent(node) {
|
|
2260
|
+
var children = node.childNodes;
|
|
2261
|
+
var formats = [];
|
|
2262
|
+
var text = "";
|
|
2263
|
+
children.forEach(function (child) {
|
|
2264
|
+
if (child.nodeType === Node.ELEMENT_NODE) {
|
|
2265
|
+
var node_1 = child;
|
|
2266
|
+
var innerText = node_1.tagName === "INPUT" ? node_1.value : node_1.innerText;
|
|
2267
|
+
var type = node_1.dataset.richTextType;
|
|
2268
|
+
formats.push({
|
|
2269
|
+
type: type,
|
|
2270
|
+
start: text.length,
|
|
2271
|
+
end: text.length + innerText.length
|
|
2272
|
+
});
|
|
2273
|
+
text += innerText;
|
|
2274
|
+
}
|
|
2275
|
+
if (child.nodeType === Node.TEXT_NODE) {
|
|
2276
|
+
var node_2 = child;
|
|
2277
|
+
var innerText = node_2.nodeValue;
|
|
2278
|
+
if (innerText) {
|
|
2279
|
+
formats.push({
|
|
2280
|
+
type: "normal",
|
|
2281
|
+
start: text.length,
|
|
2282
|
+
end: text.length + innerText.length
|
|
2283
|
+
});
|
|
2284
|
+
text += innerText;
|
|
2285
|
+
}
|
|
2286
|
+
}
|
|
2287
|
+
});
|
|
2288
|
+
return cleanRichTextValue({
|
|
2289
|
+
text: text,
|
|
2290
|
+
formats: formats
|
|
2291
|
+
});
|
|
2292
|
+
}
|
|
2293
|
+
function cleanContent(node) {
|
|
2294
|
+
var _a;
|
|
2295
|
+
var trash = [];
|
|
2296
|
+
var raw = node.childNodes;
|
|
2297
|
+
for (var i = 0; i < raw.length; i++) {
|
|
2298
|
+
var c = raw.item(i);
|
|
2299
|
+
if ((c === null || c === void 0 ? void 0 : c.nodeType) === Node.TEXT_NODE) {
|
|
2300
|
+
trash.push(c);
|
|
2301
|
+
}
|
|
2302
|
+
}
|
|
2303
|
+
for (var _i = 0, trash_1 = trash; _i < trash_1.length; _i++) {
|
|
2304
|
+
var c = trash_1[_i];
|
|
2305
|
+
try {
|
|
2306
|
+
(_a = c.parentElement) === null || _a === void 0 ? void 0 : _a.removeChild(c);
|
|
2307
|
+
}
|
|
2308
|
+
catch (_b) {
|
|
2309
|
+
}
|
|
2310
|
+
}
|
|
2311
|
+
}
|
|
2312
|
+
var RichText = function (props) {
|
|
2313
|
+
var value = props.value, className = props.className, readOnly = props.readOnly, onInput = props.onInput, onChange = props.onChange;
|
|
2314
|
+
var formatsRaw = value.formats, text = value.text;
|
|
2315
|
+
var formats = React.useMemo(function () { return extendFormat(formatsRaw, text.length); }, [formatsRaw, text.length]);
|
|
2316
|
+
var handleInput = React.useCallback(function (ev) {
|
|
2317
|
+
var target = ev.currentTarget;
|
|
2318
|
+
var newValue = parseContent(target);
|
|
2319
|
+
if (onInput) {
|
|
2320
|
+
onInput(newValue);
|
|
2321
|
+
}
|
|
2322
|
+
}, [onInput]);
|
|
2323
|
+
var handleBlur = React.useCallback(function (ev) {
|
|
2324
|
+
var target = ev.currentTarget;
|
|
2325
|
+
var newValue = parseContent(target);
|
|
2326
|
+
cleanContent(target);
|
|
2327
|
+
if (onChange) {
|
|
2328
|
+
onChange(newValue);
|
|
2329
|
+
}
|
|
2330
|
+
}, [onChange]);
|
|
2331
|
+
return (React__default["default"].createElement("div", { id: props.id, className: "xapp-search-rich-text ".concat(className || ""), contentEditable: !readOnly, suppressContentEditableWarning: true, onInput: handleInput, onBlur: handleBlur }, formats.map(function (format, index) { return (React__default["default"].createElement(RichTextSpan, { format: format, text: text, key: index, readOnly: readOnly })); })));
|
|
2332
|
+
};
|
|
2333
|
+
|
|
2334
|
+
var RichInput = function (props) {
|
|
2335
|
+
var id = props.id, value = props.value, type = props.type, autoFocus = props.autoFocus, onChange = props.onChange, onInput = props.onInput, onKeyDown = props.onKeyDown;
|
|
2336
|
+
var rich = value.formats.some(function (f) { return f.type === "inputText"; });
|
|
2337
|
+
var handleChange = React.useCallback(function (ev) {
|
|
2338
|
+
onChange({
|
|
2339
|
+
text: ev.target.value,
|
|
2340
|
+
formats: []
|
|
2341
|
+
});
|
|
2342
|
+
}, [onChange]);
|
|
2343
|
+
var handleRichChange = React.useCallback(function (val) {
|
|
2344
|
+
onChange(val);
|
|
2345
|
+
}, [onChange]);
|
|
2346
|
+
var handleInput = React.useCallback(function (ev) {
|
|
2347
|
+
if (onInput) {
|
|
2348
|
+
onInput({
|
|
2349
|
+
text: ev.target.value,
|
|
2350
|
+
formats: []
|
|
2351
|
+
});
|
|
2352
|
+
}
|
|
2353
|
+
}, [onInput]);
|
|
2354
|
+
var handleRichInput = React.useCallback(function (val) {
|
|
2355
|
+
if (onInput) {
|
|
2356
|
+
onInput(val);
|
|
2357
|
+
}
|
|
2358
|
+
}, [onInput]);
|
|
2359
|
+
var handleKeyDown = React.useCallback(function (event) {
|
|
2360
|
+
if (onKeyDown) {
|
|
2361
|
+
onKeyDown(event);
|
|
2362
|
+
}
|
|
2363
|
+
}, [onKeyDown]);
|
|
2364
|
+
return (React__default["default"].createElement("div", { className: "xappw-rich-input ".concat(props.className) }, rich ?
|
|
2365
|
+
React__default["default"].createElement(RichText, { id: id, value: value, onChange: handleRichChange, onInput: handleRichInput, className: "xappw-rich-input__input ".concat(props.className, "__input") }) : React__default["default"].createElement("input", { id: id, type: type, value: value.text, autoFocus: autoFocus, placeholder: props.placeholder, className: "xappw-rich-input__input ".concat(props.className, "__input"), onFocus: props.onFocus, onChange: handleChange, onInput: handleInput, onKeyDown: handleKeyDown })));
|
|
2366
|
+
};
|
|
2367
|
+
|
|
2368
|
+
var SuggestionsGroupHeading = function (props) {
|
|
2369
|
+
return (React__default["default"].createElement("div", { className: "xappw-suggestions-group-heading" }, props.label));
|
|
2370
|
+
};
|
|
2371
|
+
|
|
2372
|
+
function getScrollContainer(node) {
|
|
2373
|
+
var walker = node;
|
|
2374
|
+
while (walker && !walker.classList.contains("xapp-search-result__suggestions")) {
|
|
2375
|
+
walker = walker.parentElement;
|
|
2376
|
+
}
|
|
2377
|
+
return walker || undefined;
|
|
2378
|
+
}
|
|
2379
|
+
var SuggestionsItem = function (props) {
|
|
2380
|
+
var data = props.data, current = props.current, ActionsComponent = props.actions, onClick = props.onClick, onHover = props.onHover;
|
|
2381
|
+
var handleClick = React.useCallback(function () {
|
|
2382
|
+
onClick(data);
|
|
2383
|
+
}, [data, onClick]);
|
|
2384
|
+
var handleHover = React.useCallback(function () {
|
|
2385
|
+
if (onHover) {
|
|
2386
|
+
onHover(data);
|
|
2387
|
+
}
|
|
2388
|
+
}, [data, onHover]);
|
|
2389
|
+
var ref = React.useRef(null);
|
|
2390
|
+
React.useEffect(function () {
|
|
2391
|
+
var node = ref.current;
|
|
2392
|
+
if (current && node) {
|
|
2393
|
+
var scrollContainer = getScrollContainer(node);
|
|
2394
|
+
if (scrollContainer) {
|
|
2395
|
+
var scrollBox = scrollContainer.getBoundingClientRect();
|
|
2396
|
+
var nodeBox = node.getBoundingClientRect();
|
|
2397
|
+
var maxTop = Math.max(scrollBox.top, nodeBox.top);
|
|
2398
|
+
var minBottom = Math.min(scrollBox.bottom, nodeBox.bottom);
|
|
2399
|
+
var visibleHeight = minBottom - maxTop;
|
|
2400
|
+
var actualHeight = nodeBox.height;
|
|
2401
|
+
if (visibleHeight < actualHeight * 0.99) {
|
|
2402
|
+
node.scrollIntoView({ behavior: "smooth" });
|
|
2403
|
+
}
|
|
2404
|
+
}
|
|
2405
|
+
}
|
|
2406
|
+
}, [current]);
|
|
2407
|
+
return (React__default["default"].createElement("div", { ref: ref, className: "xappw-suggestions-item ".concat(current ? "xappw-suggestions-item--current" : ""), onClick: handleClick, onMouseEnter: handleHover },
|
|
2408
|
+
React__default["default"].createElement(RichText, { value: data, className: "xappw-suggestions-item__texts", readOnly: true }),
|
|
2409
|
+
ActionsComponent &&
|
|
2410
|
+
React__default["default"].createElement("div", { className: "xappw-suggestions-item__actions" },
|
|
2411
|
+
React__default["default"].createElement(ActionsComponent, { data: data, current: current }))));
|
|
2412
|
+
};
|
|
2413
|
+
|
|
2414
|
+
var SuggestionsGroup = function (props) {
|
|
2415
|
+
var group = props.group, currentIndex = props.currentIndex, itemActions = props.itemActions;
|
|
2416
|
+
var heading = group.heading, items = group.items;
|
|
2417
|
+
return (React__default["default"].createElement("div", { className: "xappw-suggestions-group" },
|
|
2418
|
+
React__default["default"].createElement("div", { className: "xappw-suggestions-group__heading" },
|
|
2419
|
+
React__default["default"].createElement(SuggestionsGroupHeading, { label: heading })),
|
|
2420
|
+
React__default["default"].createElement("div", { className: "xappw-suggestions-group__items" }, items.map(function (item, itemIndex) {
|
|
2421
|
+
return React__default["default"].createElement(SuggestionsItem, { key: itemIndex, data: item, current: currentIndex === itemIndex, actions: itemActions, onClick: props.onItemClick, onHover: props.onItemHover });
|
|
2422
|
+
}))));
|
|
2423
|
+
};
|
|
2424
|
+
|
|
2425
|
+
function getItemsLength(result) {
|
|
2426
|
+
return result.reduce(function (prev, cur) { return prev + cur.items.length; }, 0);
|
|
2427
|
+
}
|
|
2428
|
+
|
|
2429
|
+
var SuggestionsList = function (props) {
|
|
2430
|
+
var suggestions = props.suggestions, itemActions = props.itemActions, className = props.className;
|
|
2431
|
+
var length = React.useMemo(function () { return getItemsLength(suggestions); }, [suggestions]);
|
|
2432
|
+
var currentIndex = length >= 0 ? props.index : NaN;
|
|
2433
|
+
var indexWalker = 0;
|
|
2434
|
+
return (React__default["default"].createElement("div", { className: "xappw-suggestions-list ".concat(className || "") }, suggestions.map(function (group, index) {
|
|
2435
|
+
var res = (React__default["default"].createElement(SuggestionsGroup, { key: index, group: group, currentIndex: currentIndex - indexWalker, itemActions: itemActions, onItemClick: props.onItemClick, onItemHover: props.onItemHover }));
|
|
2436
|
+
indexWalker += group.items.length;
|
|
2437
|
+
return res;
|
|
2438
|
+
})));
|
|
2439
|
+
};
|
|
2440
|
+
|
|
2441
|
+
function findItemByIndex(groups, index) {
|
|
2442
|
+
if (index >= 0) {
|
|
2443
|
+
for (var _i = 0, groups_1 = groups; _i < groups_1.length; _i++) {
|
|
2444
|
+
var group = groups_1[_i];
|
|
2445
|
+
for (var _a = 0, _b = group.items; _a < _b.length; _a++) {
|
|
2446
|
+
var item = _b[_a];
|
|
2447
|
+
if (index <= 0) {
|
|
2448
|
+
return item;
|
|
2449
|
+
}
|
|
2450
|
+
index--;
|
|
2451
|
+
}
|
|
2452
|
+
}
|
|
2453
|
+
}
|
|
2454
|
+
return undefined;
|
|
2455
|
+
}
|
|
2456
|
+
|
|
2457
|
+
function parseSuggestionsFormat(format) {
|
|
2458
|
+
var types = Object.keys(format);
|
|
2459
|
+
var type = types[0];
|
|
2460
|
+
var item = format[type];
|
|
2461
|
+
if (!item) {
|
|
2462
|
+
throw new Error();
|
|
2463
|
+
}
|
|
2464
|
+
return {
|
|
2465
|
+
type: type,
|
|
2466
|
+
start: item.start,
|
|
2467
|
+
end: item.end
|
|
2468
|
+
};
|
|
2469
|
+
}
|
|
2470
|
+
function parseSuggestionsFormats(formats) {
|
|
2471
|
+
return formats.map(parseSuggestionsFormat);
|
|
2472
|
+
}
|
|
2473
|
+
function parseSuggestionsResponseItem(item) {
|
|
2474
|
+
return {
|
|
2475
|
+
text: item.suggestion,
|
|
2476
|
+
content: item.answer,
|
|
2477
|
+
formats: parseSuggestionsFormats(item.format),
|
|
2478
|
+
type: item.type
|
|
2479
|
+
};
|
|
2480
|
+
}
|
|
2481
|
+
function getHeading(type) {
|
|
2482
|
+
switch (type) {
|
|
2483
|
+
case "FAQ":
|
|
2484
|
+
return "FAQs";
|
|
2485
|
+
case "INTENT":
|
|
2486
|
+
return "Suggestions";
|
|
2487
|
+
case "HISTORICAL":
|
|
2488
|
+
return "Suggestions";
|
|
2489
|
+
default:
|
|
2490
|
+
return type;
|
|
2491
|
+
}
|
|
2492
|
+
}
|
|
2493
|
+
function parseSuggestionsResponse(response, direction) {
|
|
2494
|
+
if (direction === void 0) { direction = 1; }
|
|
2495
|
+
if (!response) {
|
|
2496
|
+
return undefined;
|
|
2497
|
+
}
|
|
2498
|
+
var items = sortSuggestionItems(response.suggestions, direction);
|
|
2499
|
+
return items.reduce(function (result, current) {
|
|
2500
|
+
var mappedItem = parseSuggestionsResponseItem(current);
|
|
2501
|
+
if (result.length) {
|
|
2502
|
+
var prevGroup = result[result.length - 1];
|
|
2503
|
+
if (prevGroup.heading === getHeading(current.type)) {
|
|
2504
|
+
prevGroup.items.push(mappedItem);
|
|
2505
|
+
return result;
|
|
2506
|
+
}
|
|
2507
|
+
}
|
|
2508
|
+
result.push({
|
|
2509
|
+
heading: getHeading(current.type),
|
|
2510
|
+
items: [mappedItem]
|
|
2511
|
+
});
|
|
2512
|
+
return result;
|
|
2513
|
+
}, []);
|
|
2514
|
+
}
|
|
2515
|
+
|
|
2516
|
+
/*! *****************************************************************************
|
|
2517
|
+
Copyright (c) Microsoft Corporation.
|
|
2518
|
+
|
|
2519
|
+
Permission to use, copy, modify, and/or distribute this software for any
|
|
2520
|
+
purpose with or without fee is hereby granted.
|
|
2521
|
+
|
|
2522
|
+
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
|
2523
|
+
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
|
2524
|
+
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
|
2525
|
+
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
|
2526
|
+
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
|
2527
|
+
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
|
2528
|
+
PERFORMANCE OF THIS SOFTWARE.
|
|
2529
|
+
***************************************************************************** */
|
|
2530
|
+
|
|
2531
|
+
function __awaiter(thisArg, _arguments, P, generator) {
|
|
2532
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
2533
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
2534
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
2535
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
2536
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
2537
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
2538
|
+
});
|
|
2539
|
+
}
|
|
2540
|
+
|
|
2541
|
+
function __generator(thisArg, body) {
|
|
2542
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
2543
|
+
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
2544
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
2545
|
+
function step(op) {
|
|
2546
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
2547
|
+
while (_) try {
|
|
2548
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
2549
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
2550
|
+
switch (op[0]) {
|
|
2551
|
+
case 0: case 1: t = op; break;
|
|
2552
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
2553
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
2554
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
2555
|
+
default:
|
|
2556
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
2557
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
2558
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
2559
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
2560
|
+
if (t[2]) _.ops.pop();
|
|
2561
|
+
_.trys.pop(); continue;
|
|
2562
|
+
}
|
|
2563
|
+
op = body.call(thisArg, _);
|
|
2564
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
2565
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
2566
|
+
}
|
|
2567
|
+
}
|
|
2568
|
+
|
|
2569
|
+
function __spreadArray(to, from, pack) {
|
|
2570
|
+
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
2571
|
+
if (ar || !(i in from)) {
|
|
2572
|
+
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
2573
|
+
ar[i] = from[i];
|
|
2574
|
+
}
|
|
2575
|
+
}
|
|
2576
|
+
return to.concat(ar || Array.prototype.slice.call(from));
|
|
2577
|
+
}
|
|
2578
|
+
|
|
2579
|
+
var order = ["FAQ", "INTENT", "HISTORICAL"];
|
|
2580
|
+
var ordersMap = order.reduce(function (prev, cur, index) {
|
|
2581
|
+
prev[cur] = index;
|
|
2582
|
+
return prev;
|
|
2583
|
+
}, {});
|
|
2584
|
+
function compareSuggestionItems(left, right, direction) {
|
|
2585
|
+
return direction * (ordersMap[right.type] - ordersMap[left.type]);
|
|
2586
|
+
}
|
|
2587
|
+
function sortSuggestionItems(items, direction) {
|
|
2588
|
+
return __spreadArray([], items, true).sort(function (left, right) { return compareSuggestionItems(left, right, direction); });
|
|
2589
|
+
}
|
|
2590
|
+
|
|
2591
|
+
/**
|
|
2592
|
+
* Append the provided query params to the URL
|
|
2593
|
+
*
|
|
2594
|
+
* It will overwrite existing params on the URL if there are conflicts
|
|
2595
|
+
* @param url
|
|
2596
|
+
* @param params
|
|
2597
|
+
*/
|
|
2598
|
+
function addQueryParametersToURL(url, params) {
|
|
2599
|
+
var existingParams = new URL(url).searchParams;
|
|
2600
|
+
params.forEach(function (value, key) {
|
|
2601
|
+
existingParams.append(key, value);
|
|
2602
|
+
});
|
|
2603
|
+
var newUrl = new URL(url);
|
|
2604
|
+
newUrl.search = existingParams.toString();
|
|
2605
|
+
return newUrl;
|
|
2606
|
+
}
|
|
2607
|
+
|
|
2608
|
+
var defaultOptions = {};
|
|
2609
|
+
function noop$1() {
|
|
2610
|
+
}
|
|
2611
|
+
function useJsonFetch(url, options) {
|
|
2612
|
+
if (options === void 0) { options = defaultOptions; }
|
|
2613
|
+
var _a = React.useState({
|
|
2614
|
+
state: "paused"
|
|
2615
|
+
}), value = _a[0], setValue = _a[1];
|
|
2616
|
+
var pause = options.pause;
|
|
2617
|
+
React.useEffect(function () {
|
|
2618
|
+
if (pause) {
|
|
2619
|
+
setValue({
|
|
2620
|
+
state: "paused"
|
|
2621
|
+
});
|
|
2622
|
+
return noop$1;
|
|
2623
|
+
}
|
|
2624
|
+
var controller = new AbortController();
|
|
2625
|
+
var signal = controller.signal;
|
|
2626
|
+
var mounted = true;
|
|
2627
|
+
(function () {
|
|
2628
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
2629
|
+
var response, json, e_1;
|
|
2630
|
+
return __generator(this, function (_a) {
|
|
2631
|
+
switch (_a.label) {
|
|
2632
|
+
case 0:
|
|
2633
|
+
_a.trys.push([0, 4, , 5]);
|
|
2634
|
+
setValue({
|
|
2635
|
+
state: "fetching"
|
|
2636
|
+
});
|
|
2637
|
+
return [4 /*yield*/, fetch(url, { signal: signal })];
|
|
2638
|
+
case 1:
|
|
2639
|
+
response = _a.sent();
|
|
2640
|
+
if (!mounted) return [3 /*break*/, 3];
|
|
2641
|
+
return [4 /*yield*/, response.json()];
|
|
2642
|
+
case 2:
|
|
2643
|
+
json = _a.sent();
|
|
2644
|
+
if (response.ok) {
|
|
2645
|
+
setValue({
|
|
2646
|
+
state: "success",
|
|
2647
|
+
data: json
|
|
2648
|
+
});
|
|
2649
|
+
}
|
|
2650
|
+
else {
|
|
2651
|
+
setValue({
|
|
2652
|
+
state: "error",
|
|
2653
|
+
error: json
|
|
2654
|
+
});
|
|
2655
|
+
}
|
|
2656
|
+
_a.label = 3;
|
|
2657
|
+
case 3: return [3 /*break*/, 5];
|
|
2658
|
+
case 4:
|
|
2659
|
+
e_1 = _a.sent();
|
|
2660
|
+
if (e_1.name === "AbortError") {
|
|
2661
|
+
setValue({
|
|
2662
|
+
state: "paused"
|
|
2663
|
+
});
|
|
2664
|
+
return [2 /*return*/];
|
|
2665
|
+
}
|
|
2666
|
+
throw e_1;
|
|
2667
|
+
case 5: return [2 /*return*/];
|
|
2668
|
+
}
|
|
2669
|
+
});
|
|
2670
|
+
});
|
|
2671
|
+
})();
|
|
2672
|
+
return function () {
|
|
2673
|
+
mounted = false;
|
|
2674
|
+
controller.abort();
|
|
2675
|
+
};
|
|
2676
|
+
}, [url, pause]);
|
|
2677
|
+
return value;
|
|
2678
|
+
}
|
|
2679
|
+
|
|
2680
|
+
function useSuggestionsFetch$1(options) {
|
|
2681
|
+
var baseUrl = options.url, context = options.context, query = options.query;
|
|
2682
|
+
var url = React.useMemo(function () {
|
|
2683
|
+
if (!baseUrl) {
|
|
2684
|
+
return undefined;
|
|
2685
|
+
}
|
|
2686
|
+
var params = new URLSearchParams();
|
|
2687
|
+
params.append("size", "5");
|
|
2688
|
+
params.append("queryText", query);
|
|
2689
|
+
if (context === null || context === void 0 ? void 0 : context.length) {
|
|
2690
|
+
params.append("activeContexts", context.join(","));
|
|
2691
|
+
}
|
|
2692
|
+
return addQueryParametersToURL(baseUrl, params);
|
|
2693
|
+
}, [query, context, baseUrl]);
|
|
2694
|
+
var response = useJsonFetch(url ? "".concat(url.toString()) : "", {
|
|
2695
|
+
pause: !query || !baseUrl
|
|
2696
|
+
});
|
|
2697
|
+
return response;
|
|
2698
|
+
}
|
|
2699
|
+
|
|
2700
|
+
/**
|
|
2701
|
+
* Quicker configurable uuid
|
|
2702
|
+
*
|
|
2703
|
+
* @export
|
|
2704
|
+
* @returns {string}
|
|
2705
|
+
*/
|
|
2706
|
+
function uuid() {
|
|
2707
|
+
var d = new Date().getTime();
|
|
2708
|
+
var newUuid = "xxxxxxxx-xxxx-65xx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function (c) {
|
|
2709
|
+
/* tslint:disable:no-magic-numbers */
|
|
2710
|
+
/* tslint:disable:no-bitwise */
|
|
2711
|
+
var r = (d + Math.random() * 16) % 16 | 0;
|
|
2712
|
+
d = Math.floor(d / 16);
|
|
2713
|
+
return (c === "x" ? r : (r & 0x3) | 0x8).toString(16);
|
|
2714
|
+
/* tslint:enable:no-magic-numbers */
|
|
2715
|
+
/* tslint:disable:no-bitwise */
|
|
2716
|
+
});
|
|
2717
|
+
return newUuid;
|
|
2718
|
+
}
|
|
2719
|
+
|
|
2720
|
+
var IconButton_1 = dist.IconButton = IconButton;
|
|
2721
|
+
dist.MessageBubble = MessageBubble;
|
|
2722
|
+
var RichInput_1 = dist.RichInput = RichInput;
|
|
2723
|
+
dist.RichText = RichText;
|
|
2724
|
+
dist.SuggestionsGroup = SuggestionsGroup;
|
|
2725
|
+
dist.SuggestionsGroupHeading = SuggestionsGroupHeading;
|
|
2726
|
+
dist.SuggestionsItem = SuggestionsItem;
|
|
2727
|
+
var SuggestionsList_1 = dist.SuggestionsList = SuggestionsList;
|
|
2728
|
+
dist.addQueryParametersToURL = addQueryParametersToURL;
|
|
2729
|
+
dist.extendFormat = extendFormat;
|
|
2730
|
+
var findItemByIndex_1 = dist.findItemByIndex = findItemByIndex;
|
|
2731
|
+
var getItemsLength_1 = dist.getItemsLength = getItemsLength;
|
|
2732
|
+
var parseSuggestionsResponse_1 = dist.parseSuggestionsResponse = parseSuggestionsResponse;
|
|
2733
|
+
dist.sortSuggestionItems = sortSuggestionItems;
|
|
2734
|
+
dist.useJsonFetch = useJsonFetch;
|
|
2735
|
+
var useSuggestionsFetch_1 = dist.useSuggestionsFetch = useSuggestionsFetch$1;
|
|
2736
|
+
var uuid_1 = dist.uuid = uuid;
|
|
2737
|
+
|
|
2143
2738
|
function postMessageToStentor(data, url, key) {
|
|
2144
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
2739
|
+
return __awaiter$1(this, void 0, void 0, function () {
|
|
2145
2740
|
var body, response;
|
|
2146
|
-
return __generator(this, function (_a) {
|
|
2741
|
+
return __generator$1(this, function (_a) {
|
|
2147
2742
|
switch (_a.label) {
|
|
2148
2743
|
case 0:
|
|
2149
2744
|
body = JSON.stringify(data);
|
|
2150
|
-
log("URL: "
|
|
2151
|
-
log("BODY: "
|
|
2745
|
+
log("URL: ".concat(url));
|
|
2746
|
+
log("BODY: ".concat(body));
|
|
2152
2747
|
return [4 /*yield*/, fetch(url, {
|
|
2153
2748
|
method: "POST",
|
|
2154
2749
|
headers: {
|
|
2155
2750
|
"Content-Type": "application/json",
|
|
2156
|
-
"Authorization": "Bearer "
|
|
2751
|
+
"Authorization": "Bearer ".concat(key),
|
|
2157
2752
|
"User-Agent": "Stentor Chat Server"
|
|
2158
2753
|
},
|
|
2159
2754
|
body: body,
|
|
@@ -2162,7 +2757,7 @@ function postMessageToStentor(data, url, key) {
|
|
|
2162
2757
|
case 1:
|
|
2163
2758
|
response = _a.sent();
|
|
2164
2759
|
if (!response.ok) {
|
|
2165
|
-
throw new Error("Status "
|
|
2760
|
+
throw new Error("Status ".concat(response.status, ", Text: ").concat(response.statusText));
|
|
2166
2761
|
}
|
|
2167
2762
|
return [2 /*return*/, response.json()];
|
|
2168
2763
|
}
|
|
@@ -2230,7 +2825,7 @@ function getOutput(value) {
|
|
|
2230
2825
|
* @returns
|
|
2231
2826
|
*/
|
|
2232
2827
|
function responseToMessage(botResponse, now) {
|
|
2233
|
-
var _a, _b, _c, _d;
|
|
2828
|
+
var _a, _b, _c, _d, _e;
|
|
2234
2829
|
if (now === void 0) { now = new Date().getTime(); }
|
|
2235
2830
|
var responseMessage;
|
|
2236
2831
|
if (!botResponse) {
|
|
@@ -2276,24 +2871,20 @@ function responseToMessage(botResponse, now) {
|
|
|
2276
2871
|
if (html) {
|
|
2277
2872
|
responseMessage.msg = __assign(__assign({}, responseMessage.msg), { html: html });
|
|
2278
2873
|
}
|
|
2279
|
-
if (
|
|
2280
|
-
responseMessage.msg.options =
|
|
2281
|
-
|
|
2282
|
-
|
|
2283
|
-
|
|
2284
|
-
|
|
2285
|
-
|
|
2286
|
-
|
|
2287
|
-
|
|
2288
|
-
|
|
2289
|
-
|
|
2290
|
-
|
|
2291
|
-
label: suggestion.title,
|
|
2292
|
-
actionUrl: suggestion.url
|
|
2293
|
-
});
|
|
2294
|
-
}
|
|
2874
|
+
if ((_e = outputSpeech.suggestions) === null || _e === void 0 ? void 0 : _e.length) {
|
|
2875
|
+
responseMessage.msg.options = outputSpeech.suggestions.map(function (suggestion) {
|
|
2876
|
+
if (typeof suggestion === "string") {
|
|
2877
|
+
// Simple chips (strings)
|
|
2878
|
+
return suggestion;
|
|
2879
|
+
}
|
|
2880
|
+
else {
|
|
2881
|
+
// "call out" chips
|
|
2882
|
+
return {
|
|
2883
|
+
label: suggestion.title,
|
|
2884
|
+
actionUrl: suggestion.url
|
|
2885
|
+
};
|
|
2295
2886
|
}
|
|
2296
|
-
}
|
|
2887
|
+
});
|
|
2297
2888
|
}
|
|
2298
2889
|
}
|
|
2299
2890
|
return responseMessage;
|
|
@@ -2305,7 +2896,7 @@ function getPermissionRequestType(type) {
|
|
|
2305
2896
|
case "PERMISSION_LOCATION_PRECISE":
|
|
2306
2897
|
return "LOCATION_PRECISE";
|
|
2307
2898
|
default:
|
|
2308
|
-
throw new Error("Unsupported permission: "
|
|
2899
|
+
throw new Error("Unsupported permission: ".concat(type));
|
|
2309
2900
|
}
|
|
2310
2901
|
}
|
|
2311
2902
|
function getPermissionResponse(botResponse, now) {
|
|
@@ -2318,7 +2909,7 @@ function getPermissionResponse(botResponse, now) {
|
|
|
2318
2909
|
type: "permissionRequest",
|
|
2319
2910
|
timestamp: now,
|
|
2320
2911
|
msg: {
|
|
2321
|
-
text: (_a = outputSpeech === null || outputSpeech === void 0 ? void 0 : outputSpeech.displayText) !== null && _a !== void 0 ? _a : ""
|
|
2912
|
+
text: (_a = outputSpeech === null || outputSpeech === void 0 ? void 0 : outputSpeech.displayText) !== null && _a !== void 0 ? _a : "".concat(botResponse.data.permissionRequestTTSContext),
|
|
2322
2913
|
permissionRequest: {
|
|
2323
2914
|
time: now,
|
|
2324
2915
|
type: type,
|
|
@@ -2335,26 +2926,6 @@ function getPermissionResponse(botResponse, now) {
|
|
|
2335
2926
|
};
|
|
2336
2927
|
}
|
|
2337
2928
|
|
|
2338
|
-
/**
|
|
2339
|
-
* Quicker configurable uuid
|
|
2340
|
-
*
|
|
2341
|
-
* @export
|
|
2342
|
-
* @returns {string}
|
|
2343
|
-
*/
|
|
2344
|
-
function uuid() {
|
|
2345
|
-
var d = new Date().getTime();
|
|
2346
|
-
var newUuid = "xxxxxxxx-xxxx-65xx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function (c) {
|
|
2347
|
-
/* tslint:disable:no-magic-numbers */
|
|
2348
|
-
/* tslint:disable:no-bitwise */
|
|
2349
|
-
var r = (d + Math.random() * 16) % 16 | 0;
|
|
2350
|
-
d = Math.floor(d / 16);
|
|
2351
|
-
return (c === "x" ? r : (r & 0x3) | 0x8).toString(16);
|
|
2352
|
-
/* tslint:enable:no-magic-numbers */
|
|
2353
|
-
/* tslint:disable:no-bitwise */
|
|
2354
|
-
});
|
|
2355
|
-
return newUuid;
|
|
2356
|
-
}
|
|
2357
|
-
|
|
2358
2929
|
var PERMISSION_QUESTION_EXPIRATION_MS = 300000; // 5 minutes
|
|
2359
2930
|
var StentorDirectChat = /** @class */ (function () {
|
|
2360
2931
|
function StentorDirectChat(config) {
|
|
@@ -2366,15 +2937,15 @@ var StentorDirectChat = /** @class */ (function () {
|
|
|
2366
2937
|
*/
|
|
2367
2938
|
this.widget = {
|
|
2368
2939
|
setConnectionStatus: function (status) {
|
|
2369
|
-
log("SERVER: connection_update: "
|
|
2940
|
+
log("SERVER: connection_update: ".concat(JSON.stringify(status)));
|
|
2370
2941
|
_this.dispatch(setConnectionStatus(status));
|
|
2371
2942
|
},
|
|
2372
2943
|
setAccountStatus: function (status) {
|
|
2373
|
-
log("SERVER: account_status: "
|
|
2944
|
+
log("SERVER: account_status: ".concat(JSON.stringify(status)));
|
|
2374
2945
|
_this.dispatch(setAccountStatus(status));
|
|
2375
2946
|
},
|
|
2376
2947
|
sendNewMessage: function (data) {
|
|
2377
|
-
log("SERVER: new message: "
|
|
2948
|
+
log("SERVER: new message: ".concat(JSON.stringify(data)));
|
|
2378
2949
|
_this.dispatch({
|
|
2379
2950
|
type: "chat",
|
|
2380
2951
|
detail: {
|
|
@@ -2386,7 +2957,7 @@ var StentorDirectChat = /** @class */ (function () {
|
|
|
2386
2957
|
});
|
|
2387
2958
|
},
|
|
2388
2959
|
userJoined: function (data) {
|
|
2389
|
-
log("SERVER: user joined: "
|
|
2960
|
+
log("SERVER: user joined: ".concat(JSON.stringify(data)));
|
|
2390
2961
|
_this.visitorInfo.token = data.token;
|
|
2391
2962
|
_this.dispatch({
|
|
2392
2963
|
type: "chat",
|
|
@@ -2398,7 +2969,7 @@ var StentorDirectChat = /** @class */ (function () {
|
|
|
2398
2969
|
});
|
|
2399
2970
|
},
|
|
2400
2971
|
userLeft: function (data) {
|
|
2401
|
-
log("SERVER: user left: "
|
|
2972
|
+
log("SERVER: user left: ".concat(JSON.stringify(data)));
|
|
2402
2973
|
_this.dispatch({
|
|
2403
2974
|
type: "chat",
|
|
2404
2975
|
detail: {
|
|
@@ -2457,7 +3028,7 @@ var StentorDirectChat = /** @class */ (function () {
|
|
|
2457
3028
|
StentorDirectChat.prototype.init = function (dispatch) {
|
|
2458
3029
|
this.dispatch = dispatch;
|
|
2459
3030
|
// TODO: Authenticate - or at least tell the server who you are
|
|
2460
|
-
log("got init auth: "
|
|
3031
|
+
log("got init auth: ".concat(this.config.key));
|
|
2461
3032
|
// We are connected
|
|
2462
3033
|
this.widget.setConnectionStatus("online");
|
|
2463
3034
|
this.widget.setAccountStatus("online");
|
|
@@ -2469,8 +3040,8 @@ var StentorDirectChat = /** @class */ (function () {
|
|
|
2469
3040
|
cb();
|
|
2470
3041
|
};
|
|
2471
3042
|
StentorDirectChat.prototype.sendChatMsg = function (message, cb) {
|
|
2472
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
2473
|
-
return __generator(this, function (_a) {
|
|
3043
|
+
return __awaiter$1(this, void 0, void 0, function () {
|
|
3044
|
+
return __generator$1(this, function (_a) {
|
|
2474
3045
|
return [2 /*return*/, this.sendChatMsgRequest({
|
|
2475
3046
|
msg: message,
|
|
2476
3047
|
timestamp: new Date().getTime(),
|
|
@@ -2483,9 +3054,9 @@ var StentorDirectChat = /** @class */ (function () {
|
|
|
2483
3054
|
};
|
|
2484
3055
|
StentorDirectChat.prototype.sendChatMsgRequest = function (serviceRequest, cb) {
|
|
2485
3056
|
var _a;
|
|
2486
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
3057
|
+
return __awaiter$1(this, void 0, void 0, function () {
|
|
2487
3058
|
var agentResponse;
|
|
2488
|
-
return __generator(this, function (_b) {
|
|
3059
|
+
return __generator$1(this, function (_b) {
|
|
2489
3060
|
switch (_b.label) {
|
|
2490
3061
|
case 0: return [4 /*yield*/, this.postMessage(serviceRequest)];
|
|
2491
3062
|
case 1:
|
|
@@ -2528,9 +3099,9 @@ var StentorDirectChat = /** @class */ (function () {
|
|
|
2528
3099
|
};
|
|
2529
3100
|
StentorDirectChat.prototype.postMessage = function (message) {
|
|
2530
3101
|
var _a, _b, _c, _d;
|
|
2531
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
3102
|
+
return __awaiter$1(this, void 0, void 0, function () {
|
|
2532
3103
|
var request, now, permissionRequest, expired, text, granted, userProfile, isEmail, botResponse, responseMessage;
|
|
2533
|
-
return __generator(this, function (_e) {
|
|
3104
|
+
return __generator$1(this, function (_e) {
|
|
2534
3105
|
switch (_e.label) {
|
|
2535
3106
|
case 0:
|
|
2536
3107
|
now = new Date().getTime();
|
|
@@ -2617,20 +3188,20 @@ var StentorDirectChat = /** @class */ (function () {
|
|
|
2617
3188
|
};
|
|
2618
3189
|
}
|
|
2619
3190
|
}
|
|
2620
|
-
log("Visitor says: "
|
|
3191
|
+
log("Visitor says: ".concat(JSON.stringify(request, undefined, 2)));
|
|
2621
3192
|
// Bot is "typing"
|
|
2622
3193
|
this.widget.typing();
|
|
2623
3194
|
return [4 /*yield*/, postMessageToStentor(request, this.config.url, this.config.key).catch(function (postError) {
|
|
2624
|
-
err("POST failed: "
|
|
3195
|
+
err("POST failed: ".concat(postError.message));
|
|
2625
3196
|
return {
|
|
2626
|
-
text: "Bot doesn't respond. Reason: "
|
|
3197
|
+
text: "Bot doesn't respond. Reason: ".concat(postError.message)
|
|
2627
3198
|
};
|
|
2628
3199
|
})];
|
|
2629
3200
|
case 1:
|
|
2630
3201
|
botResponse = _e.sent();
|
|
2631
3202
|
// Bot stopped "typing"
|
|
2632
3203
|
this.widget.stopTyping();
|
|
2633
|
-
log("Bot says: "
|
|
3204
|
+
log("Bot says: ".concat(JSON.stringify(botResponse, undefined, 2)));
|
|
2634
3205
|
// Now translate the response to server dialect
|
|
2635
3206
|
// new session no more
|
|
2636
3207
|
this.isNewSession = false;
|
|
@@ -2654,15 +3225,15 @@ var StentorDirectChat = /** @class */ (function () {
|
|
|
2654
3225
|
};
|
|
2655
3226
|
StentorDirectChat.prototype.startSession = function () {
|
|
2656
3227
|
if (this.visitorInfo.visitorId) {
|
|
2657
|
-
this._userId = "stentor-widget-user-"
|
|
3228
|
+
this._userId = "stentor-widget-user-".concat(this.visitorInfo.visitorId);
|
|
2658
3229
|
}
|
|
2659
3230
|
else if (this.visitorInfo.email) {
|
|
2660
|
-
this._userId = "stentor-widget-user-"
|
|
3231
|
+
this._userId = "stentor-widget-user-".concat(this.visitorInfo.email);
|
|
2661
3232
|
}
|
|
2662
3233
|
else {
|
|
2663
|
-
this._userId = "stentor-widget-user-"
|
|
3234
|
+
this._userId = "stentor-widget-user-".concat(uuid_1());
|
|
2664
3235
|
}
|
|
2665
|
-
this._sessionId = "stentor-widget-session-"
|
|
3236
|
+
this._sessionId = "stentor-widget-session-".concat(uuid_1());
|
|
2666
3237
|
this.isNewSession = true;
|
|
2667
3238
|
};
|
|
2668
3239
|
Object.defineProperty(StentorDirectChat.prototype, "userId", {
|
|
@@ -5184,8 +5755,10 @@ class Socket extends Emitter_1 {
|
|
|
5184
5755
|
packet.options.compress = this.flags.compress !== false;
|
|
5185
5756
|
// event ack callback
|
|
5186
5757
|
if ("function" === typeof args[args.length - 1]) {
|
|
5187
|
-
|
|
5188
|
-
|
|
5758
|
+
const id = this.ids++;
|
|
5759
|
+
const ack = args.pop();
|
|
5760
|
+
this._registerAckCallback(id, ack);
|
|
5761
|
+
packet.id = id;
|
|
5189
5762
|
}
|
|
5190
5763
|
const isTransportWritable = this.io.engine &&
|
|
5191
5764
|
this.io.engine.transport &&
|
|
@@ -5201,6 +5774,31 @@ class Socket extends Emitter_1 {
|
|
|
5201
5774
|
this.flags = {};
|
|
5202
5775
|
return this;
|
|
5203
5776
|
}
|
|
5777
|
+
/**
|
|
5778
|
+
* @private
|
|
5779
|
+
*/
|
|
5780
|
+
_registerAckCallback(id, ack) {
|
|
5781
|
+
const timeout = this.flags.timeout;
|
|
5782
|
+
if (timeout === undefined) {
|
|
5783
|
+
this.acks[id] = ack;
|
|
5784
|
+
return;
|
|
5785
|
+
}
|
|
5786
|
+
// @ts-ignore
|
|
5787
|
+
const timer = this.io.setTimeoutFn(() => {
|
|
5788
|
+
delete this.acks[id];
|
|
5789
|
+
for (let i = 0; i < this.sendBuffer.length; i++) {
|
|
5790
|
+
if (this.sendBuffer[i].id === id) {
|
|
5791
|
+
this.sendBuffer.splice(i, 1);
|
|
5792
|
+
}
|
|
5793
|
+
}
|
|
5794
|
+
ack.call(this, new Error("operation has timed out"));
|
|
5795
|
+
}, timeout);
|
|
5796
|
+
this.acks[id] = (...args) => {
|
|
5797
|
+
// @ts-ignore
|
|
5798
|
+
this.io.clearTimeoutFn(timer);
|
|
5799
|
+
ack.apply(this, [null, ...args]);
|
|
5800
|
+
};
|
|
5801
|
+
}
|
|
5204
5802
|
/**
|
|
5205
5803
|
* Sends a packet.
|
|
5206
5804
|
*
|
|
@@ -5285,6 +5883,7 @@ class Socket extends Emitter_1 {
|
|
|
5285
5883
|
this.ondisconnect();
|
|
5286
5884
|
break;
|
|
5287
5885
|
case PacketType.CONNECT_ERROR:
|
|
5886
|
+
this.destroy();
|
|
5288
5887
|
const err = new Error(packet.data.message);
|
|
5289
5888
|
// @ts-ignore
|
|
5290
5889
|
err.data = packet.data.data;
|
|
@@ -5448,6 +6047,25 @@ class Socket extends Emitter_1 {
|
|
|
5448
6047
|
this.flags.volatile = true;
|
|
5449
6048
|
return this;
|
|
5450
6049
|
}
|
|
6050
|
+
/**
|
|
6051
|
+
* Sets a modifier for a subsequent event emission that the callback will be called with an error when the
|
|
6052
|
+
* given number of milliseconds have elapsed without an acknowledgement from the server:
|
|
6053
|
+
*
|
|
6054
|
+
* ```
|
|
6055
|
+
* socket.timeout(5000).emit("my-event", (err) => {
|
|
6056
|
+
* if (err) {
|
|
6057
|
+
* // the server did not acknowledge the event in the given delay
|
|
6058
|
+
* }
|
|
6059
|
+
* });
|
|
6060
|
+
* ```
|
|
6061
|
+
*
|
|
6062
|
+
* @returns self
|
|
6063
|
+
* @public
|
|
6064
|
+
*/
|
|
6065
|
+
timeout(timeout) {
|
|
6066
|
+
this.flags.timeout = timeout;
|
|
6067
|
+
return this;
|
|
6068
|
+
}
|
|
5451
6069
|
/**
|
|
5452
6070
|
* Adds a listener that will be fired when any event is emitted. The event name is passed as the first argument to the
|
|
5453
6071
|
* callback.
|
|
@@ -5854,13 +6472,7 @@ class Manager extends Emitter_1 {
|
|
|
5854
6472
|
_close() {
|
|
5855
6473
|
this.skipReconnect = true;
|
|
5856
6474
|
this._reconnecting = false;
|
|
5857
|
-
|
|
5858
|
-
// `onclose` will not fire because
|
|
5859
|
-
// an open event never happened
|
|
5860
|
-
this.cleanup();
|
|
5861
|
-
}
|
|
5862
|
-
this.backoff.reset();
|
|
5863
|
-
this._readyState = "closed";
|
|
6475
|
+
this.onclose("forced close");
|
|
5864
6476
|
if (this.engine)
|
|
5865
6477
|
this.engine.close();
|
|
5866
6478
|
}
|
|
@@ -6003,12 +6615,12 @@ var StentorServerChat = /** @class */ (function () {
|
|
|
6003
6615
|
// TODO: Authenticate - or at least tell the server who you are
|
|
6004
6616
|
// Socket events
|
|
6005
6617
|
this.socket.on("account_status", function (data) {
|
|
6006
|
-
log("SERVER: account_status: "
|
|
6618
|
+
log("SERVER: account_status: ".concat(JSON.stringify(data)));
|
|
6007
6619
|
// Register the "communication" with the server
|
|
6008
6620
|
if (!_this.token) {
|
|
6009
|
-
_this.token =
|
|
6621
|
+
_this.token = uuid_1();
|
|
6010
6622
|
dispatch(receiveToken(_this.token));
|
|
6011
|
-
log("CLIENT: created token: "
|
|
6623
|
+
log("CLIENT: created token: ".concat(_this.token));
|
|
6012
6624
|
}
|
|
6013
6625
|
_this.socket.emit("connection update", _this.token);
|
|
6014
6626
|
dispatch({
|
|
@@ -6020,7 +6632,7 @@ var StentorServerChat = /** @class */ (function () {
|
|
|
6020
6632
|
});
|
|
6021
6633
|
});
|
|
6022
6634
|
this.socket.on("new message", function (data) {
|
|
6023
|
-
log("SERVER: new message: "
|
|
6635
|
+
log("SERVER: new message: ".concat(JSON.stringify(data)));
|
|
6024
6636
|
_this.dispatch({
|
|
6025
6637
|
type: "chat",
|
|
6026
6638
|
detail: {
|
|
@@ -6035,7 +6647,7 @@ var StentorServerChat = /** @class */ (function () {
|
|
|
6035
6647
|
});
|
|
6036
6648
|
});
|
|
6037
6649
|
this.socket.on("user joined", function (data) {
|
|
6038
|
-
log("SERVER: user joined: "
|
|
6650
|
+
log("SERVER: user joined: ".concat(JSON.stringify(data)));
|
|
6039
6651
|
_this.visitorInfo.token = data.token;
|
|
6040
6652
|
_this.dispatch({
|
|
6041
6653
|
type: "chat",
|
|
@@ -6051,7 +6663,7 @@ var StentorServerChat = /** @class */ (function () {
|
|
|
6051
6663
|
});
|
|
6052
6664
|
});
|
|
6053
6665
|
this.socket.on("user left", function (data) {
|
|
6054
|
-
log("SERVER: user left: "
|
|
6666
|
+
log("SERVER: user left: ".concat(JSON.stringify(data)));
|
|
6055
6667
|
_this.dispatch({
|
|
6056
6668
|
type: "chat",
|
|
6057
6669
|
detail: {
|
|
@@ -6065,7 +6677,7 @@ var StentorServerChat = /** @class */ (function () {
|
|
|
6065
6677
|
});
|
|
6066
6678
|
});
|
|
6067
6679
|
this.socket.on("typing", function (data) {
|
|
6068
|
-
log("SERVER: typing: "
|
|
6680
|
+
log("SERVER: typing: ".concat(JSON.stringify(data)));
|
|
6069
6681
|
_this.dispatch({
|
|
6070
6682
|
type: "chat",
|
|
6071
6683
|
detail: {
|
|
@@ -6079,7 +6691,7 @@ var StentorServerChat = /** @class */ (function () {
|
|
|
6079
6691
|
});
|
|
6080
6692
|
});
|
|
6081
6693
|
this.socket.on("stop typing", function (data) {
|
|
6082
|
-
log("SERVER: stop typing: "
|
|
6694
|
+
log("SERVER: stop typing: ".concat(JSON.stringify(data)));
|
|
6083
6695
|
_this.dispatch({
|
|
6084
6696
|
type: "chat",
|
|
6085
6697
|
detail: {
|
|
@@ -6163,18 +6775,18 @@ function createChatServerCore(config, token) {
|
|
|
6163
6775
|
case "local":
|
|
6164
6776
|
return new StentorLocalChat();
|
|
6165
6777
|
default:
|
|
6166
|
-
throw throwBadKind(config.type);
|
|
6778
|
+
throw throwBadKind$1(config.type);
|
|
6167
6779
|
}
|
|
6168
6780
|
}
|
|
6169
6781
|
function createChatServer(config, token) {
|
|
6170
6782
|
return new LogChat(createChatServerCore(config, token));
|
|
6171
6783
|
}
|
|
6172
|
-
var ChatServerContext = React.createContext(null);
|
|
6784
|
+
var ChatServerContext = React$1.createContext(null);
|
|
6173
6785
|
function useChatServer(config) {
|
|
6174
|
-
var _a = React.useState(), server = _a[0], setServer = _a[1];
|
|
6786
|
+
var _a = React$1.useState(), server = _a[0], setServer = _a[1];
|
|
6175
6787
|
var token = reactRedux.useSelector(function (state) { return state.connection.token; });
|
|
6176
6788
|
var dispatch = useChatDispatch();
|
|
6177
|
-
React.useEffect(function () {
|
|
6789
|
+
React$1.useEffect(function () {
|
|
6178
6790
|
var newServer = createChatServer(config, token);
|
|
6179
6791
|
newServer.init(dispatch);
|
|
6180
6792
|
setServer(newServer);
|
|
@@ -6187,8 +6799,8 @@ function useChatServer(config) {
|
|
|
6187
6799
|
|
|
6188
6800
|
function useChatServerDispatch() {
|
|
6189
6801
|
var inner = useChatDispatch();
|
|
6190
|
-
var chatServer = React.useContext(ChatServerContext);
|
|
6191
|
-
return React.useCallback(function (action) {
|
|
6802
|
+
var chatServer = React$1.useContext(ChatServerContext);
|
|
6803
|
+
return React$1.useCallback(function (action) {
|
|
6192
6804
|
if (!action) {
|
|
6193
6805
|
console.warn("react bug? Someone invokes with null");
|
|
6194
6806
|
return;
|
|
@@ -6212,8 +6824,8 @@ var ChatChipsContainer = function (_) {
|
|
|
6212
6824
|
dispatch(executeAction(getChatServerActionLinkLabel(option)));
|
|
6213
6825
|
}
|
|
6214
6826
|
}
|
|
6215
|
-
return (React__default["default"].createElement("div", { className: "message-list-container__chips "
|
|
6216
|
-
React__default["default"].createElement(ChatChips, { options: chips, onOptionClick: optionOnChange })));
|
|
6827
|
+
return (React__default$1["default"].createElement("div", { className: "message-list-container__chips ".concat(!(chips === null || chips === void 0 ? void 0 : chips.length) ? "message-list-container__chips--empty" : "") },
|
|
6828
|
+
React__default$1["default"].createElement(ChatChips, { options: chips, onOptionClick: optionOnChange })));
|
|
6217
6829
|
};
|
|
6218
6830
|
|
|
6219
6831
|
var ChatMenuItem = function (props) {
|
|
@@ -6222,31 +6834,31 @@ var ChatMenuItem = function (props) {
|
|
|
6222
6834
|
props.onClick(props.label);
|
|
6223
6835
|
}
|
|
6224
6836
|
}
|
|
6225
|
-
return (React__default["default"].createElement("button", { type: "button", className: "chat-menu-item", onClick: handleClick }, props.label));
|
|
6837
|
+
return (React__default$1["default"].createElement("button", { type: "button", className: "chat-menu-item", onClick: handleClick }, props.label));
|
|
6226
6838
|
};
|
|
6227
6839
|
|
|
6228
6840
|
var ChatMenu = function (props) {
|
|
6229
6841
|
var items = props.items;
|
|
6230
|
-
return (React__default["default"].createElement("div", { className: "chat-menu "
|
|
6231
|
-
return React__default["default"].createElement(ChatMenuItem, { key: i, onClick: props.onItemClick, label: label });
|
|
6842
|
+
return (React__default$1["default"].createElement("div", { className: "chat-menu ".concat(props.opened ? "chat-menu--opened" : "chat-menu--closed") }, items.map(function (label, i) {
|
|
6843
|
+
return React__default$1["default"].createElement(ChatMenuItem, { key: i, onClick: props.onItemClick, label: label });
|
|
6232
6844
|
})));
|
|
6233
6845
|
};
|
|
6234
6846
|
|
|
6235
|
-
var UnknownMessage = function () { return React__default["default"].createElement(React__default["default"].Fragment, null); };
|
|
6847
|
+
var UnknownMessage = function () { return React__default$1["default"].createElement(React__default$1["default"].Fragment, null); };
|
|
6236
6848
|
|
|
6237
6849
|
function renderAvatar(entity) {
|
|
6238
|
-
return (React__default["default"].createElement("div", { className: "xappw-chat-msg-part__avatar" },
|
|
6239
|
-
React__default["default"].createElement(Avatar, { entity: entity })));
|
|
6850
|
+
return (React__default$1["default"].createElement("div", { className: "xappw-chat-msg-part__avatar" },
|
|
6851
|
+
React__default$1["default"].createElement(Avatar, { entity: entity })));
|
|
6240
6852
|
}
|
|
6241
6853
|
var ChatMessagePart = function (props) {
|
|
6242
|
-
return (React__default["default"].createElement("div", { className: "xappw-chat-msg-part" },
|
|
6854
|
+
return (React__default$1["default"].createElement("div", { className: "xappw-chat-msg-part" },
|
|
6243
6855
|
props.showAvatar && renderAvatar(props.user),
|
|
6244
6856
|
props.children));
|
|
6245
6857
|
};
|
|
6246
6858
|
|
|
6247
6859
|
function useExecuteActionCallback() {
|
|
6248
6860
|
var dispatch = useChatServerDispatch();
|
|
6249
|
-
return React.useCallback(function (text, token) {
|
|
6861
|
+
return React$1.useCallback(function (text, token) {
|
|
6250
6862
|
dispatch(executeAction(text, token));
|
|
6251
6863
|
}, [dispatch]);
|
|
6252
6864
|
}
|
|
@@ -6254,7 +6866,7 @@ function useExecuteActionCallback() {
|
|
|
6254
6866
|
function useButtonCallback() {
|
|
6255
6867
|
var handleOpenUrl = useOpenUrlCallback();
|
|
6256
6868
|
var executeAction = useExecuteActionCallback();
|
|
6257
|
-
return React.useCallback(function (button) {
|
|
6869
|
+
return React$1.useCallback(function (button) {
|
|
6258
6870
|
if (button.actionUrl) {
|
|
6259
6871
|
handleOpenUrl(button.actionUrl);
|
|
6260
6872
|
}
|
|
@@ -6287,17 +6899,17 @@ function isList(display) {
|
|
|
6287
6899
|
|
|
6288
6900
|
var CardMiddlewareWidget = function (props) {
|
|
6289
6901
|
var msg = props.msg, ctx = props.ctx;
|
|
6290
|
-
var card = React.useMemo(function () { return convertFromCardDisplay(msg); }, [msg]);
|
|
6902
|
+
var card = React$1.useMemo(function () { return convertFromCardDisplay(msg); }, [msg]);
|
|
6291
6903
|
var user = ctx.user;
|
|
6292
6904
|
var handleButton = useButtonCallback();
|
|
6293
|
-
return (React__default["default"].createElement(ChatMessagePart, { showAvatar: true, user: user },
|
|
6294
|
-
React__default["default"].createElement("div", { className: "chat-msg" },
|
|
6295
|
-
React__default["default"].createElement(ChatCard, { card: card, onButtonClick: handleButton }))));
|
|
6905
|
+
return (React__default$1["default"].createElement(ChatMessagePart, { showAvatar: true, user: user },
|
|
6906
|
+
React__default$1["default"].createElement("div", { className: "chat-msg" },
|
|
6907
|
+
React__default$1["default"].createElement(ChatCard, { card: card, onButtonClick: handleButton }))));
|
|
6296
6908
|
};
|
|
6297
6909
|
var CardMiddleware = function (next) { return function (props) {
|
|
6298
6910
|
var msg = props.msg, ctx = props.ctx;
|
|
6299
6911
|
if (isCard(msg)) {
|
|
6300
|
-
return React__default["default"].createElement(CardMiddlewareWidget, { msg: msg, ctx: ctx });
|
|
6912
|
+
return React__default$1["default"].createElement(CardMiddlewareWidget, { msg: msg, ctx: ctx });
|
|
6301
6913
|
}
|
|
6302
6914
|
return next(props);
|
|
6303
6915
|
}; };
|
|
@@ -6318,11 +6930,11 @@ function createSubscribableArray(originalValue) {
|
|
|
6318
6930
|
return {
|
|
6319
6931
|
getArray: function () { return cache; },
|
|
6320
6932
|
push: function (val) {
|
|
6321
|
-
cache = __spreadArray(__spreadArray([], cache, true), [val], false);
|
|
6933
|
+
cache = __spreadArray$1(__spreadArray$1([], cache, true), [val], false);
|
|
6322
6934
|
notify();
|
|
6323
6935
|
},
|
|
6324
6936
|
unshift: function (val) {
|
|
6325
|
-
cache = __spreadArray([val], cache, true);
|
|
6937
|
+
cache = __spreadArray$1([val], cache, true);
|
|
6326
6938
|
notify();
|
|
6327
6939
|
},
|
|
6328
6940
|
subscribe: function (callback) {
|
|
@@ -6339,9 +6951,9 @@ function createSubscribableArray(originalValue) {
|
|
|
6339
6951
|
};
|
|
6340
6952
|
}
|
|
6341
6953
|
function useSubscribableArray(array) {
|
|
6342
|
-
var _a = React.useState(array.getArray()), res = _a[0], setRes = _a[1];
|
|
6954
|
+
var _a = React$1.useState(array.getArray()), res = _a[0], setRes = _a[1];
|
|
6343
6955
|
var mounted = useIsMounted();
|
|
6344
|
-
React.useEffect(function () {
|
|
6956
|
+
React$1.useEffect(function () {
|
|
6345
6957
|
var subscription = array.subscribe(function (newVal) {
|
|
6346
6958
|
if (mounted()) {
|
|
6347
6959
|
setRes(newVal);
|
|
@@ -6373,24 +6985,24 @@ function useGlobalSubscribableArray(storage) {
|
|
|
6373
6985
|
}
|
|
6374
6986
|
function useLateMiddlewaresBuilder(storage) {
|
|
6375
6987
|
var middlewares = useGlobalSubscribableArray(storage);
|
|
6376
|
-
return React.useMemo(function () { return joinMiddlewares(middlewares); }, [middlewares]);
|
|
6988
|
+
return React$1.useMemo(function () { return joinMiddlewares(middlewares); }, [middlewares]);
|
|
6377
6989
|
}
|
|
6378
|
-
var storage = createStorage(
|
|
6990
|
+
var storage = createStorage(globalThis, "xappMsgMiddlewares");
|
|
6379
6991
|
function useLateMiddleware() {
|
|
6380
6992
|
return useLateMiddlewaresBuilder(storage);
|
|
6381
6993
|
}
|
|
6382
6994
|
|
|
6383
6995
|
function getSvg() {
|
|
6384
|
-
return (React__default["default"].createElement("svg", { viewBox: "0 0 20 20" },
|
|
6385
|
-
React__default["default"].createElement("path", { d: "M17 17H3V3h5V1H3a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-5h-2z" }),
|
|
6386
|
-
React__default["default"].createElement("path", { d: "M19 1h-8l3.29 3.29-5.73 5.73 1.42 1.42 5.73-5.73L19 9V1z" })));
|
|
6996
|
+
return (React__default$1["default"].createElement("svg", { viewBox: "0 0 20 20" },
|
|
6997
|
+
React__default$1["default"].createElement("path", { d: "M17 17H3V3h5V1H3a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-5h-2z" }),
|
|
6998
|
+
React__default$1["default"].createElement("path", { d: "M19 1h-8l3.29 3.29-5.73 5.73 1.42 1.42 5.73-5.73L19 9V1z" })));
|
|
6387
6999
|
}
|
|
6388
7000
|
var ExternalLink = function (props) {
|
|
6389
7001
|
var url = props.url;
|
|
6390
|
-
var handleClick = React.useCallback(function (ev) {
|
|
7002
|
+
var handleClick = React$1.useCallback(function (ev) {
|
|
6391
7003
|
ev.preventDefault();
|
|
6392
7004
|
}, []);
|
|
6393
|
-
return (React__default["default"].createElement("a", { href: url, target: "_blank", rel: "noreferrer", className: props.className, onClick: handleClick }, getSvg()));
|
|
7005
|
+
return (React__default$1["default"].createElement("a", { href: url, target: "_blank", rel: "noreferrer", className: props.className, onClick: handleClick }, getSvg()));
|
|
6394
7006
|
};
|
|
6395
7007
|
|
|
6396
7008
|
function firstIndex(val, patterns) {
|
|
@@ -6442,7 +7054,7 @@ var parsers = [
|
|
|
6442
7054
|
pathParser,
|
|
6443
7055
|
queryParser
|
|
6444
7056
|
];
|
|
6445
|
-
function parse
|
|
7057
|
+
function parse(val) {
|
|
6446
7058
|
var parts = [];
|
|
6447
7059
|
var rest = val;
|
|
6448
7060
|
for (var _i = 0, parsers_1 = parsers; _i < parsers_1.length; _i++) {
|
|
@@ -6461,7 +7073,7 @@ var ellipsis = "/...";
|
|
|
6461
7073
|
function reduceLink(url, maxLength) {
|
|
6462
7074
|
if (url.length < maxLength)
|
|
6463
7075
|
return url;
|
|
6464
|
-
var parts = parse
|
|
7076
|
+
var parts = parse(url); // [scheme, domain, port, path, query, hash]
|
|
6465
7077
|
function getText() {
|
|
6466
7078
|
return parts.join("");
|
|
6467
7079
|
}
|
|
@@ -6500,10 +7112,10 @@ function reduceLink(url, maxLength) {
|
|
|
6500
7112
|
|
|
6501
7113
|
var SmartLink = function (props) {
|
|
6502
7114
|
var url = props.url, className = props.className;
|
|
6503
|
-
var handleClick = React.useCallback(function (ev) {
|
|
7115
|
+
var handleClick = React$1.useCallback(function (ev) {
|
|
6504
7116
|
ev.preventDefault();
|
|
6505
7117
|
}, []);
|
|
6506
|
-
return (React__default["default"].createElement("a", { href: url, target: "_blank", rel: "noreferrer", className: className, onClick: handleClick }, reduceLink(url, 40)));
|
|
7118
|
+
return (React__default$1["default"].createElement("a", { href: url, target: "_blank", rel: "noreferrer", className: className, onClick: handleClick }, reduceLink(url, 40)));
|
|
6507
7119
|
};
|
|
6508
7120
|
|
|
6509
7121
|
var ListItem = function (props) {
|
|
@@ -6511,66 +7123,66 @@ var ListItem = function (props) {
|
|
|
6511
7123
|
var item = props.item;
|
|
6512
7124
|
var layout = props.layout || "normal";
|
|
6513
7125
|
var url = item.url || item.imageActionUrl;
|
|
6514
|
-
return (React__default["default"].createElement(ActionItem, { className: "xappw-vlist-item-container", item: item, onButtonClick: props.onButtonClick, onExecute: props.onExecute, onOpenUrl: props.onOpenUrl },
|
|
6515
|
-
React__default["default"].createElement("div", { className: "xappw-vlist-item xappw-vlist-item--"
|
|
6516
|
-
React__default["default"].createElement("div", { className: "xappw-vlist-item__description" },
|
|
6517
|
-
item.title && React__default["default"].createElement("div", { className: "xappw-vlist-item__title" },
|
|
6518
|
-
React__default["default"].createElement("span", null, item.title)),
|
|
6519
|
-
url && React__default["default"].createElement(SmartLink, { url: url, className: "xappw-vlist-item__link" }),
|
|
6520
|
-
item.subTitle && React__default["default"].createElement("div", { className: "xappw-vlist-item__subtitle" },
|
|
6521
|
-
React__default["default"].createElement("span", null, item.subTitle)),
|
|
6522
|
-
!!((_a = item.buttons) === null || _a === void 0 ? void 0 : _a.length) && React__default["default"].createElement(ChatActionButtons, { buttons: item.buttons, onClick: props.onButtonClick })),
|
|
6523
|
-
React__default["default"].createElement("div", { className: "xappw-vlist-item__side" },
|
|
6524
|
-
url && React__default["default"].createElement(ExternalLink, { url: "url", className: "xappw-vlist-item__external-link" }),
|
|
6525
|
-
React__default["default"].createElement(ActionItemImage, { item: item, className: "xappw-vlist-item__img", emptyImageVisible: props.emptyImageVisible })))));
|
|
7126
|
+
return (React__default$1["default"].createElement(ActionItem, { className: "xappw-vlist-item-container", item: item, onButtonClick: props.onButtonClick, onExecute: props.onExecute, onOpenUrl: props.onOpenUrl },
|
|
7127
|
+
React__default$1["default"].createElement("div", { className: "xappw-vlist-item xappw-vlist-item--".concat(layout) },
|
|
7128
|
+
React__default$1["default"].createElement("div", { className: "xappw-vlist-item__description" },
|
|
7129
|
+
item.title && React__default$1["default"].createElement("div", { className: "xappw-vlist-item__title" },
|
|
7130
|
+
React__default$1["default"].createElement("span", null, item.title)),
|
|
7131
|
+
url && React__default$1["default"].createElement(SmartLink, { url: url, className: "xappw-vlist-item__link" }),
|
|
7132
|
+
item.subTitle && React__default$1["default"].createElement("div", { className: "xappw-vlist-item__subtitle" },
|
|
7133
|
+
React__default$1["default"].createElement("span", null, item.subTitle)),
|
|
7134
|
+
!!((_a = item.buttons) === null || _a === void 0 ? void 0 : _a.length) && React__default$1["default"].createElement(ChatActionButtons, { buttons: item.buttons, onClick: props.onButtonClick })),
|
|
7135
|
+
React__default$1["default"].createElement("div", { className: "xappw-vlist-item__side" },
|
|
7136
|
+
url && React__default$1["default"].createElement(ExternalLink, { url: "url", className: "xappw-vlist-item__external-link" }),
|
|
7137
|
+
React__default$1["default"].createElement(ActionItemImage, { item: item, className: "xappw-vlist-item__img", emptyImageVisible: props.emptyImageVisible })))));
|
|
6526
7138
|
};
|
|
6527
7139
|
|
|
6528
7140
|
var List = function (props) {
|
|
6529
7141
|
var list = props.list;
|
|
6530
|
-
var listRef = React.useRef(null);
|
|
7142
|
+
var listRef = React$1.useRef(null);
|
|
6531
7143
|
var hasImage = list.items.some(function (item) { return item.imageUrl; });
|
|
6532
7144
|
var titlesOnly = !list.items.some(function (item) { var _a; return item.subTitle || ((_a = item.buttons) === null || _a === void 0 ? void 0 : _a.length); });
|
|
6533
7145
|
var listItems = list.items.map(function (item, itemIndex) {
|
|
6534
|
-
return (React__default["default"].createElement("div", { className: "xappw-vlist-container__item", key: "item-key-"
|
|
6535
|
-
React__default["default"].createElement(ListItem, { item: item, layout: titlesOnly ? "titles" : "normal", emptyImageVisible: hasImage, onExecute: props.onExecute, onButtonClick: props.onButtonClick, onOpenUrl: props.onOpenUrl })));
|
|
7146
|
+
return (React__default$1["default"].createElement("div", { className: "xappw-vlist-container__item", key: "item-key-".concat(itemIndex) },
|
|
7147
|
+
React__default$1["default"].createElement(ListItem, { item: item, layout: titlesOnly ? "titles" : "normal", emptyImageVisible: hasImage, onExecute: props.onExecute, onButtonClick: props.onButtonClick, onOpenUrl: props.onOpenUrl })));
|
|
6536
7148
|
});
|
|
6537
|
-
return (React__default["default"].createElement("div", { className: "xappw-vlist" },
|
|
6538
|
-
React__default["default"].createElement("div", { ref: listRef, className: "xappw-vlist-container" },
|
|
6539
|
-
props.list.title && React__default["default"].createElement("div", { className: "xappw-vlist__header" }, props.list.title),
|
|
7149
|
+
return (React__default$1["default"].createElement("div", { className: "xappw-vlist" },
|
|
7150
|
+
React__default$1["default"].createElement("div", { ref: listRef, className: "xappw-vlist-container" },
|
|
7151
|
+
props.list.title && React__default$1["default"].createElement("div", { className: "xappw-vlist__header" }, props.list.title),
|
|
6540
7152
|
listItems)));
|
|
6541
7153
|
};
|
|
6542
7154
|
|
|
6543
7155
|
var ListMiddlewareWidget = function (props) {
|
|
6544
7156
|
var msg = props.msg, ctx = props.ctx;
|
|
6545
|
-
var list = React.useMemo(function () { return convertFromListDisplay(msg); }, [msg]);
|
|
7157
|
+
var list = React$1.useMemo(function () { return convertFromListDisplay(msg); }, [msg]);
|
|
6546
7158
|
var handleExecute = useExecuteActionCallback();
|
|
6547
7159
|
var handleButton = useButtonCallback();
|
|
6548
7160
|
var user = ctx.user;
|
|
6549
|
-
return (React__default["default"].createElement(ChatMessagePart, { showAvatar: true, user: user },
|
|
6550
|
-
list.type === "CAROUSEL" && React__default["default"].createElement("div", { className: "chat-msg chat-msg--fullwidth chat-msg--no-ava" },
|
|
6551
|
-
React__default["default"].createElement(Carousel, { list: list, onExecute: handleExecute, onButtonClick: handleButton, onOpenUrl: ctx.openUrl })),
|
|
6552
|
-
list.type === "LIST" && React__default["default"].createElement("div", { className: "chat-msg chat-msg--expand" },
|
|
6553
|
-
React__default["default"].createElement(List, { list: list, onExecute: handleExecute, onButtonClick: handleButton, onOpenUrl: ctx.openUrl }))));
|
|
7161
|
+
return (React__default$1["default"].createElement(ChatMessagePart, { showAvatar: true, user: user },
|
|
7162
|
+
list.type === "CAROUSEL" && React__default$1["default"].createElement("div", { className: "chat-msg chat-msg--fullwidth chat-msg--no-ava" },
|
|
7163
|
+
React__default$1["default"].createElement(Carousel, { list: list, onExecute: handleExecute, onButtonClick: handleButton, onOpenUrl: ctx.openUrl })),
|
|
7164
|
+
list.type === "LIST" && React__default$1["default"].createElement("div", { className: "chat-msg chat-msg--expand" },
|
|
7165
|
+
React__default$1["default"].createElement(List, { list: list, onExecute: handleExecute, onButtonClick: handleButton, onOpenUrl: ctx.openUrl }))));
|
|
6554
7166
|
};
|
|
6555
7167
|
var ListMiddleware = function (next) { return function (props) {
|
|
6556
7168
|
var msg = props.msg, ctx = props.ctx;
|
|
6557
7169
|
if (isList(msg)) {
|
|
6558
|
-
return React__default["default"].createElement(ListMiddlewareWidget, { msg: msg, ctx: ctx });
|
|
7170
|
+
return React__default$1["default"].createElement(ListMiddlewareWidget, { msg: msg, ctx: ctx });
|
|
6559
7171
|
}
|
|
6560
7172
|
return next(props);
|
|
6561
7173
|
}; };
|
|
6562
7174
|
|
|
6563
7175
|
var MultiSelect = function (props) {
|
|
6564
7176
|
var items = props.items, checked = props.checked, onChange = props.onChange;
|
|
6565
|
-
var handleToggle = React.useCallback(function (ev) {
|
|
7177
|
+
var handleToggle = React$1.useCallback(function (ev) {
|
|
6566
7178
|
var _a;
|
|
6567
7179
|
var id = ev.target.value;
|
|
6568
7180
|
onChange(__assign(__assign({}, checked), (_a = {}, _a[id] = !checked[id], _a)));
|
|
6569
7181
|
}, [checked, onChange]);
|
|
6570
|
-
return (React__default["default"].createElement("ul", { className: "xappw-multiselect" }, items.map(function (item) { return (React__default["default"].createElement("li", { key: item.id },
|
|
6571
|
-
React__default["default"].createElement("label", null,
|
|
6572
|
-
React__default["default"].createElement("input", { type: "checkbox", checked: checked[item.id] || false, onChange: handleToggle, value: item.id }),
|
|
6573
|
-
React__default["default"].createElement("span", null, item.title)))); })));
|
|
7182
|
+
return (React__default$1["default"].createElement("ul", { className: "xappw-multiselect" }, items.map(function (item) { return (React__default$1["default"].createElement("li", { key: item.id },
|
|
7183
|
+
React__default$1["default"].createElement("label", null,
|
|
7184
|
+
React__default$1["default"].createElement("input", { type: "checkbox", checked: checked[item.id] || false, onChange: handleToggle, value: item.id }),
|
|
7185
|
+
React__default$1["default"].createElement("span", null, item.title)))); })));
|
|
6574
7186
|
};
|
|
6575
7187
|
|
|
6576
7188
|
function isMultiSelect(display) {
|
|
@@ -6581,10 +7193,10 @@ function convertToMultiSelectItems(display) {
|
|
|
6581
7193
|
}
|
|
6582
7194
|
var MultiSelectMiddlewareWidget = function (props) {
|
|
6583
7195
|
var msg = props.msg, ctx = props.ctx;
|
|
6584
|
-
var items = React.useMemo(function () { return convertToMultiSelectItems(msg); }, [msg]);
|
|
7196
|
+
var items = React$1.useMemo(function () { return convertToMultiSelectItems(msg); }, [msg]);
|
|
6585
7197
|
var user = ctx.user;
|
|
6586
|
-
var _a = React.useState({}), checked = _a[0], setChecked = _a[1];
|
|
6587
|
-
var handleSubmit = React.useCallback(function () {
|
|
7198
|
+
var _a = React$1.useState({}), checked = _a[0], setChecked = _a[1];
|
|
7199
|
+
var handleSubmit = React$1.useCallback(function () {
|
|
6588
7200
|
ctx.send({
|
|
6589
7201
|
type: "custom",
|
|
6590
7202
|
payload: JSON.stringify({
|
|
@@ -6594,16 +7206,16 @@ var MultiSelectMiddlewareWidget = function (props) {
|
|
|
6594
7206
|
})
|
|
6595
7207
|
});
|
|
6596
7208
|
}, [ctx, checked]);
|
|
6597
|
-
return (React__default["default"].createElement(ChatMessagePart, { showAvatar: true, user: user },
|
|
6598
|
-
React__default["default"].createElement("div", { className: "chat-msg" },
|
|
6599
|
-
React__default["default"].createElement("div", null,
|
|
6600
|
-
React__default["default"].createElement(MultiSelect, { items: items, checked: checked, onChange: setChecked }),
|
|
6601
|
-
React__default["default"].createElement(ActionButton, { label: "Submit", onClick: handleSubmit })))));
|
|
7209
|
+
return (React__default$1["default"].createElement(ChatMessagePart, { showAvatar: true, user: user },
|
|
7210
|
+
React__default$1["default"].createElement("div", { className: "chat-msg" },
|
|
7211
|
+
React__default$1["default"].createElement("div", null,
|
|
7212
|
+
React__default$1["default"].createElement(MultiSelect, { items: items, checked: checked, onChange: setChecked }),
|
|
7213
|
+
React__default$1["default"].createElement(ActionButton, { label: "Submit", onClick: handleSubmit })))));
|
|
6602
7214
|
};
|
|
6603
7215
|
var MultiSelectMiddleware = function (next) { return function (props) {
|
|
6604
7216
|
var msg = props.msg, ctx = props.ctx;
|
|
6605
7217
|
if (isMultiSelect(msg)) {
|
|
6606
|
-
return React__default["default"].createElement(MultiSelectMiddlewareWidget, { msg: msg, ctx: ctx });
|
|
7218
|
+
return React__default$1["default"].createElement(MultiSelectMiddlewareWidget, { msg: msg, ctx: ctx });
|
|
6607
7219
|
}
|
|
6608
7220
|
return next(props);
|
|
6609
7221
|
}; };
|
|
@@ -6615,14 +7227,14 @@ var StandardMiddlewaresBuilder = joinMiddlewares([
|
|
|
6615
7227
|
]);
|
|
6616
7228
|
function useStandardMiddlewareBuilder() {
|
|
6617
7229
|
var lateMiddleware = useLateMiddleware();
|
|
6618
|
-
return React.useMemo(function () { return joinMiddlewares([
|
|
7230
|
+
return React$1.useMemo(function () { return joinMiddlewares([
|
|
6619
7231
|
lateMiddleware,
|
|
6620
7232
|
StandardMiddlewaresBuilder,
|
|
6621
7233
|
]); }, [lateMiddleware]);
|
|
6622
7234
|
}
|
|
6623
7235
|
function useStandardMiddleware() {
|
|
6624
7236
|
var builder = useStandardMiddlewareBuilder();
|
|
6625
|
-
return React.useMemo(function () { return builder(UnknownMessage); }, [builder]);
|
|
7237
|
+
return React$1.useMemo(function () { return builder(UnknownMessage); }, [builder]);
|
|
6626
7238
|
}
|
|
6627
7239
|
var StandardMiddlewares = StandardMiddlewaresBuilder(UnknownMessage);
|
|
6628
7240
|
|
|
@@ -6633,17 +7245,17 @@ function getTailSvgPath(owner) {
|
|
|
6633
7245
|
return "m 0 0 v 240 h 60 c -40 -40 -60 -160 -60 -240";
|
|
6634
7246
|
}
|
|
6635
7247
|
function getTailSvg(owner) {
|
|
6636
|
-
return (React__default["default"].createElement("svg", { className: "chat-text-bubble__tail", xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 80 240" },
|
|
6637
|
-
React__default["default"].createElement("path", { d: getTailSvgPath(owner), fill: "currentColor" })));
|
|
7248
|
+
return (React__default$1["default"].createElement("svg", { className: "chat-text-bubble__tail", xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 80 240" },
|
|
7249
|
+
React__default$1["default"].createElement("path", { d: getTailSvgPath(owner), fill: "currentColor" })));
|
|
6638
7250
|
}
|
|
6639
7251
|
var ChatMessageBubble = function (props) {
|
|
6640
7252
|
var owner = props.owner, onClick = props.onClick;
|
|
6641
|
-
var handleClick = React.useCallback(function () {
|
|
7253
|
+
var handleClick = React$1.useCallback(function () {
|
|
6642
7254
|
if (onClick) {
|
|
6643
7255
|
onClick();
|
|
6644
7256
|
}
|
|
6645
7257
|
}, [onClick]);
|
|
6646
|
-
return (React__default["default"].createElement("div", { onClick: handleClick, className: "chat-text-bubble "
|
|
7258
|
+
return (React__default$1["default"].createElement("div", { onClick: handleClick, className: "chat-text-bubble ".concat(owner === "mine" ? "chat-text-bubble--mine" : "chat-text-bubble--others") },
|
|
6647
7259
|
(props.hasTail) && getTailSvg(owner),
|
|
6648
7260
|
props.children));
|
|
6649
7261
|
};
|
|
@@ -6651,16 +7263,16 @@ var ChatMessageBubble = function (props) {
|
|
|
6651
7263
|
var ChatMarkdownMessage = function (props) {
|
|
6652
7264
|
var onOpenUrl = props.onOpenUrl;
|
|
6653
7265
|
var agentMessage = isAgent(props.message.user.nick);
|
|
6654
|
-
var ref = React.useRef();
|
|
7266
|
+
var ref = React$1.useRef();
|
|
6655
7267
|
var html = props.message.msg.html;
|
|
6656
|
-
var handleLinkClick = React.useCallback(function (ev) {
|
|
7268
|
+
var handleLinkClick = React$1.useCallback(function (ev) {
|
|
6657
7269
|
if (onOpenUrl) {
|
|
6658
7270
|
var link = ev.target;
|
|
6659
7271
|
ev.preventDefault();
|
|
6660
7272
|
onOpenUrl(link.href);
|
|
6661
7273
|
}
|
|
6662
7274
|
}, [onOpenUrl]);
|
|
6663
|
-
React.useEffect(function () {
|
|
7275
|
+
React$1.useEffect(function () {
|
|
6664
7276
|
if (ref.current) {
|
|
6665
7277
|
ref.current.innerHTML = html;
|
|
6666
7278
|
if (onOpenUrl) {
|
|
@@ -6677,10 +7289,10 @@ var ChatMarkdownMessage = function (props) {
|
|
|
6677
7289
|
}
|
|
6678
7290
|
return undefined;
|
|
6679
7291
|
}, [ref, html, onOpenUrl, handleLinkClick]);
|
|
6680
|
-
return (React__default["default"].createElement("div", { className: "chat-msg" },
|
|
6681
|
-
React__default["default"].createElement("div", { className: "chat-text-container" },
|
|
6682
|
-
React__default["default"].createElement(ChatMessageBubble, { owner: agentMessage ? "others" : "mine", hasTail: agentMessage && !props.sibling },
|
|
6683
|
-
React__default["default"].createElement("div", { ref: ref })))));
|
|
7292
|
+
return (React__default$1["default"].createElement("div", { className: "chat-msg" },
|
|
7293
|
+
React__default$1["default"].createElement("div", { className: "chat-text-container" },
|
|
7294
|
+
React__default$1["default"].createElement(ChatMessageBubble, { owner: agentMessage ? "others" : "mine", hasTail: agentMessage && !props.sibling },
|
|
7295
|
+
React__default$1["default"].createElement("div", { ref: ref })))));
|
|
6684
7296
|
};
|
|
6685
7297
|
|
|
6686
7298
|
var ChatPermissionMessage = function (props) {
|
|
@@ -6690,21 +7302,21 @@ var ChatPermissionMessage = function (props) {
|
|
|
6690
7302
|
var author = message.user;
|
|
6691
7303
|
var allowLabel = "Allow";
|
|
6692
7304
|
var denyLabel = "Deny";
|
|
6693
|
-
var writeAsAgent = React.useCallback(function (msg) {
|
|
7305
|
+
var writeAsAgent = React$1.useCallback(function (msg) {
|
|
6694
7306
|
ctx.write({
|
|
6695
7307
|
type: "msg",
|
|
6696
7308
|
user: author,
|
|
6697
7309
|
msg: msg
|
|
6698
7310
|
});
|
|
6699
7311
|
}, [ctx, author]);
|
|
6700
|
-
var writeAsUser = React.useCallback(function (msg) {
|
|
7312
|
+
var writeAsUser = React$1.useCallback(function (msg) {
|
|
6701
7313
|
ctx.write({
|
|
6702
7314
|
type: "msg",
|
|
6703
7315
|
user: user,
|
|
6704
7316
|
msg: msg
|
|
6705
7317
|
});
|
|
6706
7318
|
}, [ctx, user]);
|
|
6707
|
-
var handleFail = React.useCallback(function () {
|
|
7319
|
+
var handleFail = React$1.useCallback(function () {
|
|
6708
7320
|
ctx.send({
|
|
6709
7321
|
type: "msg",
|
|
6710
7322
|
user: undefined,
|
|
@@ -6713,14 +7325,14 @@ var ChatPermissionMessage = function (props) {
|
|
|
6713
7325
|
}
|
|
6714
7326
|
});
|
|
6715
7327
|
}, [ctx]);
|
|
6716
|
-
var handleSend = React.useCallback(function (msg) {
|
|
7328
|
+
var handleSend = React$1.useCallback(function (msg) {
|
|
6717
7329
|
ctx.send({
|
|
6718
7330
|
type: "permissionGrant",
|
|
6719
7331
|
user: author,
|
|
6720
7332
|
msg: msg
|
|
6721
7333
|
});
|
|
6722
7334
|
}, [author, ctx]);
|
|
6723
|
-
var handleResult = React.useCallback(function (position, userMsg) {
|
|
7335
|
+
var handleResult = React$1.useCallback(function (position, userMsg) {
|
|
6724
7336
|
handleSend({
|
|
6725
7337
|
text: userMsg,
|
|
6726
7338
|
location: position ? {
|
|
@@ -6737,10 +7349,10 @@ var ChatPermissionMessage = function (props) {
|
|
|
6737
7349
|
writeAsAgent(agentMsg);
|
|
6738
7350
|
}
|
|
6739
7351
|
}, [permissionRequest, writeAsUser, writeAsAgent, handleSend]);
|
|
6740
|
-
var handleDeny = React.useCallback(function (label) {
|
|
7352
|
+
var handleDeny = React$1.useCallback(function (label) {
|
|
6741
7353
|
handleResult(undefined, label);
|
|
6742
7354
|
}, [handleResult]);
|
|
6743
|
-
var handleAllow = React.useCallback(function (label) {
|
|
7355
|
+
var handleAllow = React$1.useCallback(function (label) {
|
|
6744
7356
|
if (navigator.geolocation) {
|
|
6745
7357
|
navigator.geolocation.getCurrentPosition(function (position) {
|
|
6746
7358
|
handleResult(position, label);
|
|
@@ -6750,20 +7362,20 @@ var ChatPermissionMessage = function (props) {
|
|
|
6750
7362
|
}
|
|
6751
7363
|
}, [handleFail, handleResult]);
|
|
6752
7364
|
if (!permissionRequest) {
|
|
6753
|
-
return React__default["default"].createElement(React__default["default"].Fragment, null);
|
|
7365
|
+
return React__default$1["default"].createElement(React__default$1["default"].Fragment, null);
|
|
6754
7366
|
}
|
|
6755
|
-
return (React__default["default"].createElement("div", { className: "chat-msg" },
|
|
6756
|
-
React__default["default"].createElement("div", { className: "buttons-container" },
|
|
6757
|
-
React__default["default"].createElement(ActionButton, { label: allowLabel, addClass: "button", onClick: handleAllow }),
|
|
6758
|
-
React__default["default"].createElement(ActionButton, { label: denyLabel, addClass: "button", onClick: handleDeny }))));
|
|
7367
|
+
return (React__default$1["default"].createElement("div", { className: "chat-msg" },
|
|
7368
|
+
React__default$1["default"].createElement("div", { className: "buttons-container" },
|
|
7369
|
+
React__default$1["default"].createElement(ActionButton, { label: allowLabel, addClass: "button", onClick: handleAllow }),
|
|
7370
|
+
React__default$1["default"].createElement(ActionButton, { label: denyLabel, addClass: "button", onClick: handleDeny }))));
|
|
6759
7371
|
};
|
|
6760
7372
|
|
|
6761
7373
|
var ChatTextMessage = function (props) {
|
|
6762
7374
|
var agentMessage = isAgent(props.message.user.nick);
|
|
6763
|
-
return (React__default["default"].createElement("div", { className: "chat-msg" },
|
|
6764
|
-
React__default["default"].createElement("div", { className: "chat-text-container" },
|
|
6765
|
-
React__default["default"].createElement(ChatMessageBubble, { owner: agentMessage ? "others" : "mine", hasTail: agentMessage && !props.sibling },
|
|
6766
|
-
React__default["default"].createElement("span", null, props.message.msg.text)))));
|
|
7375
|
+
return (React__default$1["default"].createElement("div", { className: "chat-msg" },
|
|
7376
|
+
React__default$1["default"].createElement("div", { className: "chat-text-container" },
|
|
7377
|
+
React__default$1["default"].createElement(ChatMessageBubble, { owner: agentMessage ? "others" : "mine", hasTail: agentMessage && !props.sibling },
|
|
7378
|
+
React__default$1["default"].createElement("span", null, props.message.msg.text)))));
|
|
6767
7379
|
};
|
|
6768
7380
|
|
|
6769
7381
|
function getClassName(msg) {
|
|
@@ -6787,30 +7399,30 @@ var ChatMessage = function (props) {
|
|
|
6787
7399
|
// Here is the deal. If we have text (output speech), then text - card - list - options
|
|
6788
7400
|
// OR card OR list only. Avatar with text bubble.
|
|
6789
7401
|
var avaKey = avaKeys.find(function (key) { return !!msg[key]; });
|
|
6790
|
-
return (React__default["default"].createElement(React__default["default"].Fragment, null,
|
|
7402
|
+
return (React__default$1["default"].createElement(React__default$1["default"].Fragment, null,
|
|
6791
7403
|
msg.text &&
|
|
6792
|
-
React__default["default"].createElement(ChatMessagePart, { showAvatar: avaKey === "text", user: user },
|
|
6793
|
-
React__default["default"].createElement(ChatTextMessage, { message: props.message, sibling: props.sibling })),
|
|
7404
|
+
React__default$1["default"].createElement(ChatMessagePart, { showAvatar: avaKey === "text", user: user },
|
|
7405
|
+
React__default$1["default"].createElement(ChatTextMessage, { message: props.message, sibling: props.sibling })),
|
|
6794
7406
|
msg.html &&
|
|
6795
|
-
React__default["default"].createElement(ChatMessagePart, { showAvatar: avaKey === "html", user: user },
|
|
6796
|
-
React__default["default"].createElement(ChatMarkdownMessage, { message: props.message, sibling: props.sibling, onOpenUrl: (_a = props.middlewareContext) === null || _a === void 0 ? void 0 : _a.openUrl })),
|
|
7407
|
+
React__default$1["default"].createElement(ChatMessagePart, { showAvatar: avaKey === "html", user: user },
|
|
7408
|
+
React__default$1["default"].createElement(ChatMarkdownMessage, { message: props.message, sibling: props.sibling, onOpenUrl: (_a = props.middlewareContext) === null || _a === void 0 ? void 0 : _a.openUrl })),
|
|
6797
7409
|
msg.displays && middleware && msg.displays.map(function (display, index) {
|
|
6798
7410
|
var Middleware = middleware;
|
|
6799
|
-
return React__default["default"].createElement(Middleware, { key: index, msg: display, ctx: props.middlewareContext });
|
|
7411
|
+
return React__default$1["default"].createElement(Middleware, { key: index, msg: display, ctx: props.middlewareContext });
|
|
6800
7412
|
}),
|
|
6801
7413
|
msg.permissionRequest &&
|
|
6802
|
-
React__default["default"].createElement(ChatMessagePart, { showAvatar: avaKey === "permissionRequest", user: user },
|
|
6803
|
-
React__default["default"].createElement(ChatPermissionMessage, { message: props.message, sibling: props.sibling, ctx: props.middlewareContext }))));
|
|
7414
|
+
React__default$1["default"].createElement(ChatMessagePart, { showAvatar: avaKey === "permissionRequest", user: user },
|
|
7415
|
+
React__default$1["default"].createElement(ChatPermissionMessage, { message: props.message, sibling: props.sibling, ctx: props.middlewareContext }))));
|
|
6804
7416
|
}
|
|
6805
|
-
return (React__default["default"].createElement(React__default["default"].Fragment, null));
|
|
7417
|
+
return (React__default$1["default"].createElement(React__default$1["default"].Fragment, null));
|
|
6806
7418
|
}
|
|
6807
7419
|
// empty
|
|
6808
|
-
return (React__default["default"].createElement("div", { className: "chat-msg-container-wrapper "
|
|
6809
|
-
React__default["default"].createElement("div", { className: "chat-msg-container "
|
|
7420
|
+
return (React__default$1["default"].createElement("div", { className: "chat-msg-container-wrapper ".concat(isAgent(props.message.user.nick) ? "agent" : "visitor", " ").concat(props.sibling ? "sibling" : "") },
|
|
7421
|
+
React__default$1["default"].createElement("div", { className: "chat-msg-container ".concat(getClassName(props.message)) }, renderByType())));
|
|
6810
7422
|
};
|
|
6811
7423
|
|
|
6812
7424
|
function useExternalScript(url) {
|
|
6813
|
-
React.useEffect(function () {
|
|
7425
|
+
React$1.useEffect(function () {
|
|
6814
7426
|
if (!url) {
|
|
6815
7427
|
return;
|
|
6816
7428
|
}
|
|
@@ -6834,7 +7446,7 @@ function getSafeCh(ch) {
|
|
|
6834
7446
|
if (ch >= "A" && ch <= "Z") {
|
|
6835
7447
|
return ch;
|
|
6836
7448
|
}
|
|
6837
|
-
return "_"
|
|
7449
|
+
return "_".concat(ch.charCodeAt(0), "_");
|
|
6838
7450
|
}
|
|
6839
7451
|
function getSrcId(url) {
|
|
6840
7452
|
var res = "es-";
|
|
@@ -6847,7 +7459,7 @@ function getSrcId(url) {
|
|
|
6847
7459
|
function useChatServerVisitorId() {
|
|
6848
7460
|
var dispatch = useChatServerDispatch();
|
|
6849
7461
|
var clientVisitorId = reactRedux.useSelector(function (state) { return state.visitorId; });
|
|
6850
|
-
return React.useMemo(function () { return ({
|
|
7462
|
+
return React$1.useMemo(function () { return ({
|
|
6851
7463
|
dispatch: dispatch,
|
|
6852
7464
|
visitorId: clientVisitorId
|
|
6853
7465
|
}); }, [dispatch, clientVisitorId]);
|
|
@@ -6855,8 +7467,8 @@ function useChatServerVisitorId() {
|
|
|
6855
7467
|
//send whenever server settings or visitor id changes
|
|
6856
7468
|
function useGreeting(active) {
|
|
6857
7469
|
var curr = useChatServerVisitorId();
|
|
6858
|
-
var snapshotRef = React.useRef(null);
|
|
6859
|
-
React.useEffect(function () {
|
|
7470
|
+
var snapshotRef = React$1.useRef(null);
|
|
7471
|
+
React$1.useEffect(function () {
|
|
6860
7472
|
if (active) {
|
|
6861
7473
|
if (snapshotRef.current !== curr) {
|
|
6862
7474
|
snapshotRef.current = curr;
|
|
@@ -6880,215 +7492,45 @@ function useGreeting(active) {
|
|
|
6880
7492
|
}
|
|
6881
7493
|
|
|
6882
7494
|
function match(item, pattern) {
|
|
6883
|
-
var value = item.
|
|
7495
|
+
var value = item.text;
|
|
6884
7496
|
return value.toLocaleLowerCase().indexOf(pattern.toLocaleLowerCase()) >= 0;
|
|
6885
|
-
}
|
|
6886
|
-
function mapFormat$1(formats, length) {
|
|
6887
|
-
var res = [];
|
|
6888
|
-
var walkerIndex = 0;
|
|
6889
|
-
for (var _i = 0, formats_1 = formats; _i < formats_1.length; _i++) {
|
|
6890
|
-
var format = formats_1[_i];
|
|
6891
|
-
var start = format.start, end = format.end, type = format.type;
|
|
6892
|
-
if (walkerIndex < start) {
|
|
6893
|
-
res.push({
|
|
6894
|
-
type: "normal",
|
|
6895
|
-
start: walkerIndex,
|
|
6896
|
-
end: start
|
|
6897
|
-
});
|
|
6898
|
-
}
|
|
6899
|
-
res.push({
|
|
6900
|
-
type: type,
|
|
6901
|
-
start: start,
|
|
6902
|
-
end: end
|
|
6903
|
-
});
|
|
6904
|
-
walkerIndex = end;
|
|
6905
|
-
}
|
|
6906
|
-
if (walkerIndex < length) {
|
|
6907
|
-
res.push({
|
|
6908
|
-
type: "normal",
|
|
6909
|
-
start: walkerIndex,
|
|
6910
|
-
end: length
|
|
6911
|
-
});
|
|
6912
|
-
}
|
|
6913
|
-
return res;
|
|
6914
|
-
}
|
|
6915
|
-
|
|
6916
|
-
/**
|
|
6917
|
-
* Append the provided query params to the URL
|
|
6918
|
-
*
|
|
6919
|
-
* It will overwrite existing params on the URL if there are conflicts
|
|
6920
|
-
* @param url
|
|
6921
|
-
* @param params
|
|
6922
|
-
*/
|
|
6923
|
-
function addQueryParametersToURL(url, params) {
|
|
6924
|
-
if (!url) {
|
|
6925
|
-
return undefined;
|
|
6926
|
-
}
|
|
6927
|
-
var existingParams = new URL(url).searchParams;
|
|
6928
|
-
params.forEach(function (value, key) {
|
|
6929
|
-
existingParams.append(key, value);
|
|
6930
|
-
});
|
|
6931
|
-
var newUrl = new URL(url);
|
|
6932
|
-
newUrl.search = existingParams.toString();
|
|
6933
|
-
return newUrl;
|
|
6934
|
-
}
|
|
6935
|
-
|
|
6936
|
-
var defaultOptions = {};
|
|
6937
|
-
function noop$1() {
|
|
6938
|
-
}
|
|
6939
|
-
function useJsonFetch(url, options) {
|
|
6940
|
-
if (options === void 0) { options = defaultOptions; }
|
|
6941
|
-
var _a = React.useState({
|
|
6942
|
-
fetching: true
|
|
6943
|
-
}), value = _a[0], setValue = _a[1];
|
|
6944
|
-
var pause = options.pause;
|
|
6945
|
-
React.useEffect(function () {
|
|
6946
|
-
if (pause) {
|
|
6947
|
-
setValue({
|
|
6948
|
-
fetching: true
|
|
6949
|
-
});
|
|
6950
|
-
return noop$1;
|
|
6951
|
-
}
|
|
6952
|
-
var controller = new AbortController();
|
|
6953
|
-
var signal = controller.signal;
|
|
6954
|
-
var mounted = true;
|
|
6955
|
-
(function () {
|
|
6956
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
6957
|
-
var response, json, e_1;
|
|
6958
|
-
return __generator(this, function (_a) {
|
|
6959
|
-
switch (_a.label) {
|
|
6960
|
-
case 0:
|
|
6961
|
-
_a.trys.push([0, 4, , 5]);
|
|
6962
|
-
return [4 /*yield*/, fetch(url, { signal: signal })];
|
|
6963
|
-
case 1:
|
|
6964
|
-
response = _a.sent();
|
|
6965
|
-
if (!mounted) return [3 /*break*/, 3];
|
|
6966
|
-
return [4 /*yield*/, response.json()];
|
|
6967
|
-
case 2:
|
|
6968
|
-
json = _a.sent();
|
|
6969
|
-
if (response.ok) {
|
|
6970
|
-
setValue({
|
|
6971
|
-
fetching: false,
|
|
6972
|
-
success: true,
|
|
6973
|
-
data: json
|
|
6974
|
-
});
|
|
6975
|
-
}
|
|
6976
|
-
else {
|
|
6977
|
-
setValue({
|
|
6978
|
-
fetching: false,
|
|
6979
|
-
success: false,
|
|
6980
|
-
error: json
|
|
6981
|
-
});
|
|
6982
|
-
}
|
|
6983
|
-
_a.label = 3;
|
|
6984
|
-
case 3: return [3 /*break*/, 5];
|
|
6985
|
-
case 4:
|
|
6986
|
-
e_1 = _a.sent();
|
|
6987
|
-
if (e_1.name === "AbortError") {
|
|
6988
|
-
return [2 /*return*/];
|
|
6989
|
-
}
|
|
6990
|
-
throw e_1;
|
|
6991
|
-
case 5: return [2 /*return*/];
|
|
6992
|
-
}
|
|
6993
|
-
});
|
|
6994
|
-
});
|
|
6995
|
-
})();
|
|
6996
|
-
return function () {
|
|
6997
|
-
mounted = false;
|
|
6998
|
-
controller.abort();
|
|
6999
|
-
};
|
|
7000
|
-
}, [url, pause]);
|
|
7001
|
-
return value;
|
|
7002
7497
|
}
|
|
7003
7498
|
|
|
7004
7499
|
function useSuggestionsFetch(search, context) {
|
|
7005
7500
|
var env = useWidgetEnv();
|
|
7006
7501
|
var baseUrl = env === null || env === void 0 ? void 0 : env.autocompleteSuggestionsUrl;
|
|
7007
|
-
|
|
7008
|
-
|
|
7009
|
-
|
|
7010
|
-
|
|
7011
|
-
if (context === null || context === void 0 ? void 0 : context.length) {
|
|
7012
|
-
params.append("activeContexts", context.join(","));
|
|
7013
|
-
}
|
|
7014
|
-
return addQueryParametersToURL(baseUrl, params);
|
|
7015
|
-
}, [search, context, baseUrl]);
|
|
7016
|
-
var response = useJsonFetch(url ? "" + url.toString() : "", {
|
|
7017
|
-
pause: !search || !baseUrl
|
|
7502
|
+
return useSuggestionsFetch_1({
|
|
7503
|
+
url: baseUrl,
|
|
7504
|
+
query: search,
|
|
7505
|
+
context: context
|
|
7018
7506
|
});
|
|
7019
|
-
return React.useMemo(function () {
|
|
7020
|
-
if (!search) {
|
|
7021
|
-
return undefined;
|
|
7022
|
-
}
|
|
7023
|
-
if (response.fetching === false) {
|
|
7024
|
-
if (response.success) {
|
|
7025
|
-
return response.data;
|
|
7026
|
-
}
|
|
7027
|
-
else {
|
|
7028
|
-
return undefined;
|
|
7029
|
-
}
|
|
7030
|
-
}
|
|
7031
|
-
return undefined;
|
|
7032
|
-
}, [search, response]);
|
|
7033
7507
|
}
|
|
7034
7508
|
|
|
7035
7509
|
function norm(index, len) {
|
|
7036
7510
|
return (index + len) % len;
|
|
7037
7511
|
}
|
|
7038
|
-
function mapFormat(format) {
|
|
7039
|
-
var types = Object.keys(format);
|
|
7040
|
-
var type = types[0];
|
|
7041
|
-
var item = format[type];
|
|
7042
|
-
return {
|
|
7043
|
-
type: type,
|
|
7044
|
-
start: item.start,
|
|
7045
|
-
end: item.end
|
|
7046
|
-
};
|
|
7047
|
-
}
|
|
7048
|
-
function mapFormats(formats) {
|
|
7049
|
-
return formats.map(mapFormat);
|
|
7050
|
-
}
|
|
7051
|
-
function parseItem(responseItem) {
|
|
7052
|
-
var suggestion = responseItem.suggestion;
|
|
7053
|
-
return {
|
|
7054
|
-
suggestion: suggestion,
|
|
7055
|
-
answer: responseItem.answer,
|
|
7056
|
-
type: responseItem.type,
|
|
7057
|
-
format: mapFormats(responseItem.format)
|
|
7058
|
-
};
|
|
7059
|
-
}
|
|
7060
|
-
function parse(response) {
|
|
7061
|
-
return {
|
|
7062
|
-
items: response.suggestions.map(parseItem)
|
|
7063
|
-
};
|
|
7064
|
-
}
|
|
7065
7512
|
function useSuggestions(search, context) {
|
|
7066
|
-
var _a = React.useState(), suggestions = _a[0], setSuggestions = _a[1];
|
|
7067
|
-
var _b = React.useState(
|
|
7068
|
-
var _c = React.useState(search), query = _c[0], setQuery = _c[1];
|
|
7069
|
-
var _d = React.useState(context), contextState = _d[0], setContextState = _d[1];
|
|
7070
|
-
React.useEffect(function () {
|
|
7513
|
+
var _a = React$1.useState(), suggestions = _a[0], setSuggestions = _a[1];
|
|
7514
|
+
var _b = React$1.useState(-1), suggestionIndex = _b[0], setSuggestionIndex = _b[1];
|
|
7515
|
+
var _c = React$1.useState(search), query = _c[0], setQuery = _c[1];
|
|
7516
|
+
var _d = React$1.useState(context), contextState = _d[0], setContextState = _d[1];
|
|
7517
|
+
React$1.useEffect(function () {
|
|
7071
7518
|
setQuery(search);
|
|
7072
7519
|
}, [search]);
|
|
7073
|
-
React.useEffect(function () {
|
|
7520
|
+
React$1.useEffect(function () {
|
|
7074
7521
|
setContextState(context);
|
|
7075
7522
|
}, [context]);
|
|
7076
|
-
var suggestionItem = React.useMemo(function () {
|
|
7077
|
-
|
|
7078
|
-
return suggestions.items[suggestionIndex];
|
|
7079
|
-
}
|
|
7080
|
-
return undefined;
|
|
7081
|
-
}, [suggestions, suggestionIndex]);
|
|
7082
|
-
var shift = React.useCallback(function (delta) {
|
|
7523
|
+
var suggestionItem = React$1.useMemo(function () { return suggestions ? findItemByIndex_1(suggestions, suggestionIndex) : undefined; }, [suggestions, suggestionIndex]);
|
|
7524
|
+
var shift = React$1.useCallback(function (delta) {
|
|
7083
7525
|
if (suggestions) {
|
|
7084
|
-
var len_1 = suggestions
|
|
7526
|
+
var len_1 = getItemsLength_1(suggestions);
|
|
7085
7527
|
setSuggestionIndex(function (index) { return norm(index + delta + ((index < 0 && delta <= 0) ? 1 : 0), len_1); });
|
|
7086
7528
|
}
|
|
7087
7529
|
else {
|
|
7088
7530
|
setSuggestionIndex(-1);
|
|
7089
7531
|
}
|
|
7090
7532
|
}, [suggestions]);
|
|
7091
|
-
var execute = React.useCallback(function (cmd) {
|
|
7533
|
+
var execute = React$1.useCallback(function (cmd) {
|
|
7092
7534
|
switch (cmd) {
|
|
7093
7535
|
case "prev":
|
|
7094
7536
|
shift(-1);
|
|
@@ -7103,20 +7545,26 @@ function useSuggestions(search, context) {
|
|
|
7103
7545
|
break;
|
|
7104
7546
|
}
|
|
7105
7547
|
}, [shift]);
|
|
7106
|
-
var suggestionsResponse = useSuggestionsFetch(query, contextState);
|
|
7107
|
-
var
|
|
7108
|
-
|
|
7109
|
-
|
|
7110
|
-
|
|
7548
|
+
var suggestionsResponse = useSuggestionsFetch(query || "", contextState);
|
|
7549
|
+
var suggestionsData = suggestionsResponse.state === "success" ? suggestionsResponse.data : undefined;
|
|
7550
|
+
var raw = React$1.useMemo(function () {
|
|
7551
|
+
return suggestionsData ? parseSuggestionsResponse_1(suggestionsData, -1) : undefined;
|
|
7552
|
+
}, [suggestionsData]);
|
|
7553
|
+
React$1.useEffect(function () {
|
|
7111
7554
|
var prev = suggestionItem;
|
|
7112
7555
|
setSuggestions(raw);
|
|
7113
7556
|
if (prev && raw) {
|
|
7114
|
-
var prevValue = prev.
|
|
7115
|
-
|
|
7116
|
-
|
|
7117
|
-
|
|
7118
|
-
|
|
7119
|
-
|
|
7557
|
+
var prevValue = prev.text;
|
|
7558
|
+
var index = 0;
|
|
7559
|
+
for (var _i = 0, raw_1 = raw; _i < raw_1.length; _i++) {
|
|
7560
|
+
var group = raw_1[_i];
|
|
7561
|
+
for (var _a = 0, _b = group.items; _a < _b.length; _a++) {
|
|
7562
|
+
var item = _b[_a];
|
|
7563
|
+
if (match(item, prevValue)) {
|
|
7564
|
+
setSuggestionIndex(index);
|
|
7565
|
+
break;
|
|
7566
|
+
}
|
|
7567
|
+
index++;
|
|
7120
7568
|
}
|
|
7121
7569
|
}
|
|
7122
7570
|
}
|
|
@@ -7124,7 +7572,7 @@ function useSuggestions(search, context) {
|
|
|
7124
7572
|
setSuggestionIndex(-1);
|
|
7125
7573
|
}
|
|
7126
7574
|
}, [raw, suggestionItem]);
|
|
7127
|
-
return React.useMemo(function () { return ({
|
|
7575
|
+
return React$1.useMemo(function () { return ({
|
|
7128
7576
|
suggestions: suggestions,
|
|
7129
7577
|
index: suggestionIndex,
|
|
7130
7578
|
execute: execute,
|
|
@@ -7133,43 +7581,36 @@ function useSuggestions(search, context) {
|
|
|
7133
7581
|
}
|
|
7134
7582
|
|
|
7135
7583
|
var DrawerBars = function (props) {
|
|
7136
|
-
return (React__default["default"].createElement("div", { className: "drawer-bars", onClick: props.onToggle },
|
|
7137
|
-
React__default["default"].createElement("div", { className: "drawer-bar bar1" }),
|
|
7138
|
-
React__default["default"].createElement("div", { className: "drawer-bar bar2" })));
|
|
7139
|
-
};
|
|
7140
|
-
|
|
7141
|
-
var IconButton = function (props) {
|
|
7142
|
-
var type = props.type || "button";
|
|
7143
|
-
var Icon = props.icon;
|
|
7144
|
-
return (React__default["default"].createElement("button", { type: type, className: "xappw-icon-button " + (props.className || ""), onClick: props.onClick },
|
|
7145
|
-
React__default["default"].createElement(Icon, null)));
|
|
7584
|
+
return (React__default$1["default"].createElement("div", { className: "drawer-bars", onClick: props.onToggle },
|
|
7585
|
+
React__default$1["default"].createElement("div", { className: "drawer-bar bar1" }),
|
|
7586
|
+
React__default$1["default"].createElement("div", { className: "drawer-bar bar2" })));
|
|
7146
7587
|
};
|
|
7147
7588
|
|
|
7148
7589
|
var CloseIcon = function () {
|
|
7149
7590
|
// Sergey, I added this style, you will probably want to change it to be more appropriate
|
|
7150
|
-
return (React__default["default"].createElement("svg", { style: { color: "grey", paddingRight: "5px" }, xmlns: "http://www.w3.org/2000/svg", fill: "currentColor", viewBox: "0 0 16 16" },
|
|
7151
|
-
React__default["default"].createElement("path", { d: "M1.293 1.293a1 1 0 0 1 1.414 0L8 6.586l5.293-5.293a1 1 0 1 1 1.414 1.414L9.414 8l5.293 5.293a1 1 0 0 1-1.414 1.414L8 9.414l-5.293 5.293a1 1 0 0 1-1.414-1.414L6.586 8 1.293 2.707a1 1 0 0 1 0-1.414z" })));
|
|
7591
|
+
return (React__default$1["default"].createElement("svg", { style: { color: "grey", paddingRight: "5px" }, xmlns: "http://www.w3.org/2000/svg", fill: "currentColor", viewBox: "0 0 16 16" },
|
|
7592
|
+
React__default$1["default"].createElement("path", { d: "M1.293 1.293a1 1 0 0 1 1.414 0L8 6.586l5.293-5.293a1 1 0 1 1 1.414 1.414L9.414 8l5.293 5.293a1 1 0 0 1-1.414 1.414L8 9.414l-5.293 5.293a1 1 0 0 1-1.414-1.414L6.586 8 1.293 2.707a1 1 0 0 1 0-1.414z" })));
|
|
7152
7593
|
};
|
|
7153
7594
|
|
|
7154
7595
|
var LeftDownArrowIcon = function () {
|
|
7155
|
-
return (React__default["default"].createElement("svg", { xmlns: "http://www.w3.org/2000/svg", fill: "currentColor", viewBox: "0 0 16 16" },
|
|
7156
|
-
React__default["default"].createElement("path", { fillRule: "evenodd", d: "M2 13.5a.5.5 0 0 0 .5.5h6a.5.5 0 0 0 0-1H3.707L13.854 2.854a.5.5 0 0 0-.708-.708L3 12.293V7.5a.5.5 0 0 0-1 0v6z" })));
|
|
7596
|
+
return (React__default$1["default"].createElement("svg", { xmlns: "http://www.w3.org/2000/svg", fill: "currentColor", viewBox: "0 0 16 16" },
|
|
7597
|
+
React__default$1["default"].createElement("path", { fillRule: "evenodd", d: "M2 13.5a.5.5 0 0 0 .5.5h6a.5.5 0 0 0 0-1H3.707L13.854 2.854a.5.5 0 0 0-.708-.708L3 12.293V7.5a.5.5 0 0 0-1 0v6z" })));
|
|
7157
7598
|
};
|
|
7158
7599
|
|
|
7159
7600
|
var SendIcon = function () {
|
|
7160
|
-
return (React__default["default"].createElement("svg", { viewBox: "80.208 98.129 313.069 282.823", xmlns: "http://www.w3.org/2000/svg" },
|
|
7161
|
-
React__default["default"].createElement("g", { transform: "matrix(0.024498, 0, 0, -0.038359, 79.83091, 381.182404)", fill: "currentColor", stroke: "none" },
|
|
7162
|
-
React__default["default"].createElement("path", { d: "M12670 7345 c-63 -18 -272 -77 -465 -130 -192 -53 -478 -132 -635 -175 -508 -141 -1091 -302 -2345 -649 -676 -187 -2038 -563 -3025 -836 -987 -273 -2072 -573 -2410 -666 -338 -94 -802 -222 -1030 -285 -1857 -514 -2579 -714 -2684 -742 -38 -10 -65 -21 -60 -24 5 -3 67 -22 139 -41 72 -20 326 -90 565 -157 239 -67 611 -170 825 -230 215 -60 586 -163 825 -230 239 -67 491 -137 560 -156 l126 -34 974 439 c1397 629 4128 1858 6050 2724 910 410 1826 822 2035 917 209 94 387 173 395 176 35 10 -66 -39 -8200 -3928 -586 -280 -1068 -512 -1071 -516 -3 -4 33 -117 82 -252 76 -213 355 -996 765 -2147 65 -183 120 -330 122 -329 1 2 114 558 250 1236 l248 1233 3455 2064 c1900 1135 3670 2193 3933 2351 264 158 491 293 505 301 62 33 -5 -12 -271 -182 -1671 -1070 -7188 -4613 -7188 -4617 0 -7 3661 -2455 3669 -2454 4 1 3713 6853 3977 7347 8 15 11 27 7 26 -5 0 -60 -15 -123 -34z" }),
|
|
7163
|
-
React__default["default"].createElement("path", { d: "M5030 2232 c-15 -61 -479 -1861 -531 -2058 -21 -83 -39 -154 -39 -158 0 -3 369 330 820 740 452 411 817 750 813 754 -11 10 -1025 754 -1039 763 -8 4 -16 -10 -24 -41z" }))));
|
|
7601
|
+
return (React__default$1["default"].createElement("svg", { viewBox: "80.208 98.129 313.069 282.823", xmlns: "http://www.w3.org/2000/svg" },
|
|
7602
|
+
React__default$1["default"].createElement("g", { transform: "matrix(0.024498, 0, 0, -0.038359, 79.83091, 381.182404)", fill: "currentColor", stroke: "none" },
|
|
7603
|
+
React__default$1["default"].createElement("path", { d: "M12670 7345 c-63 -18 -272 -77 -465 -130 -192 -53 -478 -132 -635 -175 -508 -141 -1091 -302 -2345 -649 -676 -187 -2038 -563 -3025 -836 -987 -273 -2072 -573 -2410 -666 -338 -94 -802 -222 -1030 -285 -1857 -514 -2579 -714 -2684 -742 -38 -10 -65 -21 -60 -24 5 -3 67 -22 139 -41 72 -20 326 -90 565 -157 239 -67 611 -170 825 -230 215 -60 586 -163 825 -230 239 -67 491 -137 560 -156 l126 -34 974 439 c1397 629 4128 1858 6050 2724 910 410 1826 822 2035 917 209 94 387 173 395 176 35 10 -66 -39 -8200 -3928 -586 -280 -1068 -512 -1071 -516 -3 -4 33 -117 82 -252 76 -213 355 -996 765 -2147 65 -183 120 -330 122 -329 1 2 114 558 250 1236 l248 1233 3455 2064 c1900 1135 3670 2193 3933 2351 264 158 491 293 505 301 62 33 -5 -12 -271 -182 -1671 -1070 -7188 -4613 -7188 -4617 0 -7 3661 -2455 3669 -2454 4 1 3713 6853 3977 7347 8 15 11 27 7 26 -5 0 -60 -15 -123 -34z" }),
|
|
7604
|
+
React__default$1["default"].createElement("path", { d: "M5030 2232 c-15 -61 -479 -1861 -531 -2058 -21 -83 -39 -154 -39 -158 0 -3 369 330 820 740 452 411 817 750 813 754 -11 10 -1025 754 -1039 763 -8 4 -16 -10 -24 -41z" }))));
|
|
7164
7605
|
};
|
|
7165
7606
|
|
|
7166
7607
|
var SendButton = function (props) {
|
|
7167
|
-
return (React__default["default"].createElement(
|
|
7608
|
+
return (React__default$1["default"].createElement(IconButton_1, { className: "xappw-send-button ".concat(props.className || ""), onClick: props.onClick, icon: SendIcon }));
|
|
7168
7609
|
};
|
|
7169
7610
|
|
|
7170
7611
|
var Input = function (props) {
|
|
7171
|
-
var value = props.value, suggestion = props.suggestion, onChange = props.onChange, onSuggestionCommand = props.onSuggestionCommand;
|
|
7172
|
-
var _a = React.useState(false), dragover = _a[0], setDragover = _a[1];
|
|
7612
|
+
var value = props.value, suggestion = props.suggestion, onChange = props.onChange, onSubmit = props.onSubmit, onSuggestionCommand = props.onSuggestionCommand;
|
|
7613
|
+
var _a = React$1.useState(false), dragover = _a[0], setDragover = _a[1];
|
|
7173
7614
|
function onDragOver(event) {
|
|
7174
7615
|
setDragover(true);
|
|
7175
7616
|
event.preventDefault();
|
|
@@ -7182,32 +7623,30 @@ var Input = function (props) {
|
|
|
7182
7623
|
function onDragLeave() {
|
|
7183
7624
|
setDragover(false);
|
|
7184
7625
|
}
|
|
7185
|
-
|
|
7626
|
+
var handleOnSubmit = React$1.useCallback(function (event) {
|
|
7186
7627
|
event && event.preventDefault();
|
|
7187
|
-
|
|
7188
|
-
}
|
|
7189
|
-
var
|
|
7190
|
-
|
|
7191
|
-
|
|
7192
|
-
|
|
7193
|
-
|
|
7194
|
-
onChange("");
|
|
7628
|
+
onSubmit(value); // send to the widget
|
|
7629
|
+
}, [value, onSubmit]);
|
|
7630
|
+
var handleClear = React$1.useCallback(function () {
|
|
7631
|
+
onChange({
|
|
7632
|
+
text: "",
|
|
7633
|
+
formats: []
|
|
7634
|
+
});
|
|
7195
7635
|
}, [onChange]);
|
|
7196
|
-
var handleKeyDown = React.useCallback(function (event) {
|
|
7636
|
+
var handleKeyDown = React$1.useCallback(function (event) {
|
|
7197
7637
|
if (suggestion) {
|
|
7198
7638
|
if (event.key === "End" || event.key === "ArrowRight" || event.key === "Enter") {
|
|
7199
|
-
|
|
7200
|
-
onChange(newVal);
|
|
7639
|
+
onChange(suggestion);
|
|
7201
7640
|
return;
|
|
7202
7641
|
}
|
|
7203
7642
|
}
|
|
7204
7643
|
if (onSuggestionCommand) {
|
|
7205
7644
|
if (event.key === "ArrowUp") {
|
|
7206
|
-
onSuggestionCommand("
|
|
7645
|
+
onSuggestionCommand("prev");
|
|
7207
7646
|
event.preventDefault();
|
|
7208
7647
|
}
|
|
7209
7648
|
else if (event.key === "ArrowDown") {
|
|
7210
|
-
onSuggestionCommand("
|
|
7649
|
+
onSuggestionCommand("next");
|
|
7211
7650
|
event.preventDefault();
|
|
7212
7651
|
}
|
|
7213
7652
|
else if (event.key === "Escape") {
|
|
@@ -7216,116 +7655,59 @@ var Input = function (props) {
|
|
|
7216
7655
|
}
|
|
7217
7656
|
}
|
|
7218
7657
|
}, [suggestion, onChange, onSuggestionCommand]);
|
|
7219
|
-
return (React__default["default"].createElement("div", { className: "xappw-input-container "
|
|
7220
|
-
React__default["default"].createElement("form", { className: "xappw-input-form", onSubmit: handleOnSubmit },
|
|
7221
|
-
|
|
7222
|
-
React__default["default"].createElement("input", { key: "input", className: "xappw-input", placeholder: "Type your question here...", onChange: handleOnChange, onKeyDown: handleKeyDown,
|
|
7658
|
+
return (React__default$1["default"].createElement("div", { className: "xappw-input-container ".concat(props.addClass, " ").concat(dragover ? "drag-drop-zone" : ""), onDrop: onDrop, onDragOver: onDragOver, onDragLeave: onDragLeave },
|
|
7659
|
+
React__default$1["default"].createElement("form", { className: "xappw-input-form", onSubmit: handleOnSubmit },
|
|
7660
|
+
React__default$1["default"].createElement(RichInput_1, { key: "input", className: "xappw-input", placeholder: "Type your question here...", onInput: onChange, onChange: onChange, onKeyDown: handleKeyDown,
|
|
7223
7661
|
// onFocus={onFocus}
|
|
7224
|
-
value: value
|
|
7225
|
-
React__default["default"].createElement("div", { className: "xappw-input-form__buttons" },
|
|
7226
|
-
value && React__default["default"].createElement(
|
|
7227
|
-
React__default["default"].createElement(SendButton, { onClick: handleOnSubmit })))));
|
|
7228
|
-
};
|
|
7229
|
-
|
|
7230
|
-
var SuggestionsItem = function (props) {
|
|
7231
|
-
var data = props.data, onClick = props.onClick, onUse = props.onUse, onHover = props.onHover;
|
|
7232
|
-
var suggestion = data.suggestion;
|
|
7233
|
-
var handleClick = React.useCallback(function () {
|
|
7234
|
-
onClick(data);
|
|
7235
|
-
}, [data, onClick]);
|
|
7236
|
-
var handleUse = React.useCallback(function (ev) {
|
|
7237
|
-
onUse(data);
|
|
7238
|
-
ev.stopPropagation();
|
|
7239
|
-
}, [data, onUse]);
|
|
7240
|
-
var handleHover = React.useCallback(function () {
|
|
7241
|
-
onHover(data);
|
|
7242
|
-
}, [data, onHover]);
|
|
7243
|
-
var formats = React.useMemo(function () { return mapFormat$1(data.format, suggestion.length); }, [data.format, suggestion]);
|
|
7244
|
-
var canUse = data.type !== "FAQ";
|
|
7245
|
-
return (React__default["default"].createElement("div", { className: "xappw-suggestions-item " + (props.current ? "xappw-suggestions-item--current" : ""), onClick: handleClick, onMouseEnter: handleHover },
|
|
7246
|
-
React__default["default"].createElement("div", { className: "xappw-suggestions-item__texts" }, formats.map(function (format, index) { return (React__default["default"].createElement("span", { className: "xappw-suggestions-item__text xappw-suggestions-item__text--" + format.type, key: index }, suggestion.substring(format.start, format.end))); })),
|
|
7247
|
-
canUse && React__default["default"].createElement(IconButton, { className: "xappw-suggestions-item__use", onClick: handleUse, icon: LeftDownArrowIcon })));
|
|
7248
|
-
};
|
|
7249
|
-
|
|
7250
|
-
function getLabel(type) {
|
|
7251
|
-
switch (type) {
|
|
7252
|
-
case "FAQ":
|
|
7253
|
-
return "FAQs";
|
|
7254
|
-
case "INTENT":
|
|
7255
|
-
return "Suggestions";
|
|
7256
|
-
case "HISTORICAL":
|
|
7257
|
-
return "Suggestions";
|
|
7258
|
-
default:
|
|
7259
|
-
throw throwBadKind(type);
|
|
7260
|
-
}
|
|
7261
|
-
}
|
|
7262
|
-
var SuggestionsGroupItem = function (props) {
|
|
7263
|
-
var group = props.group, currentIndex = props.currentIndex;
|
|
7264
|
-
var type = group.type, items = group.items, startIndex = group.startIndex;
|
|
7265
|
-
return (React__default["default"].createElement("div", { className: "xappw-suggestions-group" },
|
|
7266
|
-
React__default["default"].createElement("label", { className: "xappw-suggestions-group__label" }, getLabel(type)),
|
|
7267
|
-
React__default["default"].createElement("div", { className: "xappw-suggestions-group__items" }, items.map(function (item, itemIndex) {
|
|
7268
|
-
return React__default["default"].createElement(SuggestionsItem, { key: itemIndex, data: item, current: currentIndex === itemIndex + startIndex, onClick: props.onItemClick, onUse: props.onItemUse, onHover: props.onItemHover });
|
|
7269
|
-
}))));
|
|
7662
|
+
value: value }),
|
|
7663
|
+
React__default$1["default"].createElement("div", { className: "xappw-input-form__buttons" },
|
|
7664
|
+
value.text && React__default$1["default"].createElement(IconButton_1, { icon: CloseIcon, className: "xappw-input-form__btn", onClick: handleClear }),
|
|
7665
|
+
React__default$1["default"].createElement(SendButton, { className: "xappw-input-form__btn", onClick: handleOnSubmit })))));
|
|
7270
7666
|
};
|
|
7271
7667
|
|
|
7272
|
-
function
|
|
7273
|
-
|
|
7274
|
-
|
|
7275
|
-
|
|
7276
|
-
|
|
7277
|
-
|
|
7278
|
-
|
|
7279
|
-
}
|
|
7280
|
-
|
|
7281
|
-
|
|
7282
|
-
|
|
7283
|
-
|
|
7284
|
-
}
|
|
7285
|
-
function compareSuggestionItems(left, right) {
|
|
7286
|
-
return (ordersMap[right.type] - ordersMap[left.type]);
|
|
7668
|
+
function createActions(onItemUse) {
|
|
7669
|
+
return function (innerProps) {
|
|
7670
|
+
var data = innerProps.data;
|
|
7671
|
+
var canUse = data.type !== "FAQ";
|
|
7672
|
+
var handleUse = React$1.useCallback(function (ev) {
|
|
7673
|
+
onItemUse(data);
|
|
7674
|
+
ev.stopPropagation();
|
|
7675
|
+
}, [data]);
|
|
7676
|
+
if (!canUse) {
|
|
7677
|
+
return React__default$1["default"].createElement(React__default$1["default"].Fragment, null);
|
|
7678
|
+
}
|
|
7679
|
+
return (React__default$1["default"].createElement(IconButton_1, { className: "xappw-suggestions__use", onClick: handleUse, icon: LeftDownArrowIcon }));
|
|
7680
|
+
};
|
|
7287
7681
|
}
|
|
7288
7682
|
var Suggestions = function (props) {
|
|
7289
|
-
var
|
|
7683
|
+
var data = props.data, onItemUse = props.onItemUse;
|
|
7684
|
+
var len = data.length;
|
|
7290
7685
|
var currentIndex = len > 0 ? props.index : NaN;
|
|
7291
|
-
var _a = React.useState(), activeItem = _a[0], setActiveItem = _a[1];
|
|
7292
|
-
var item =
|
|
7293
|
-
React.useEffect(function () {
|
|
7686
|
+
var _a = React$1.useState(), activeItem = _a[0], setActiveItem = _a[1];
|
|
7687
|
+
var item = React$1.useMemo(function () { return findItemByIndex_1(data, currentIndex); }, [data, currentIndex]);
|
|
7688
|
+
React$1.useEffect(function () {
|
|
7294
7689
|
setActiveItem(item);
|
|
7295
7690
|
}, [item]);
|
|
7296
|
-
var
|
|
7297
|
-
|
|
7298
|
-
|
|
7299
|
-
|
|
7300
|
-
|
|
7301
|
-
if (prevGroup.type === normalizeType(current.type)) {
|
|
7302
|
-
prevGroup.items.push(current);
|
|
7303
|
-
return result;
|
|
7304
|
-
}
|
|
7305
|
-
}
|
|
7306
|
-
result.push({
|
|
7307
|
-
type: normalizeType(current.type),
|
|
7308
|
-
items: [current],
|
|
7309
|
-
startIndex: index
|
|
7310
|
-
});
|
|
7311
|
-
return result;
|
|
7312
|
-
}, []);
|
|
7313
|
-
}, [props.data]);
|
|
7314
|
-
return (React__default["default"].createElement("div", { className: "xappw-suggestions " + (props.className || "") },
|
|
7315
|
-
(activeItem === null || activeItem === void 0 ? void 0 : activeItem.answer) && React__default["default"].createElement("div", { className: "xappw-suggestions__answer" }, activeItem.answer),
|
|
7316
|
-
!!groups.length && React__default["default"].createElement("div", { className: "xappw-suggestions__groups" }, groups.map(function (group, index) { return (React__default["default"].createElement(SuggestionsGroupItem, { key: index, group: group, currentIndex: currentIndex, onItemClick: props.onItemClick, onItemUse: props.onItemUse, onItemHover: setActiveItem })); }))));
|
|
7691
|
+
var actions = React$1.useMemo(function () { return createActions(onItemUse); }, [onItemUse]);
|
|
7692
|
+
return (React__default$1["default"].createElement("div", { className: "xappw-suggestions ".concat(props.className || "") },
|
|
7693
|
+
(activeItem === null || activeItem === void 0 ? void 0 : activeItem.content) && React__default$1["default"].createElement("div", { className: "xappw-suggestions__answer" }, activeItem.content),
|
|
7694
|
+
!!data.length &&
|
|
7695
|
+
React__default$1["default"].createElement(SuggestionsList_1, { suggestions: data, index: currentIndex, className: "xappw-suggestions__groups", itemActions: actions, onItemClick: props.onItemClick, onItemHover: setActiveItem })));
|
|
7317
7696
|
};
|
|
7318
7697
|
|
|
7319
7698
|
var ChatFooter = function (props) {
|
|
7320
|
-
var _a, _b, _c
|
|
7699
|
+
var _a, _b, _c;
|
|
7321
7700
|
var onSubmit = props.onSubmit;
|
|
7322
|
-
var
|
|
7323
|
-
var
|
|
7701
|
+
var _d = React$1.useState(false), drawer = _d[0], setDrawerState = _d[1]; // false initially
|
|
7702
|
+
var _e = React$1.useState(), suggestionSearch = _e[0], setSuggestionSearch = _e[1];
|
|
7324
7703
|
var contexts = reactRedux.useSelector(function (state) { return state.activeContexts; });
|
|
7325
7704
|
var suggestions = useSuggestions(suggestionSearch, contexts);
|
|
7326
7705
|
var menuItemsRaw = (_b = (_a = useWidgetEnv()) === null || _a === void 0 ? void 0 : _a.menu) === null || _b === void 0 ? void 0 : _b.items;
|
|
7327
|
-
var menuItems = React.useMemo(function () { return menuItemsRaw ? menuItemsRaw.map(function (item) { return item.label; }) : []; }, [menuItemsRaw]);
|
|
7328
|
-
var
|
|
7706
|
+
var menuItems = React$1.useMemo(function () { return menuItemsRaw ? menuItemsRaw.map(function (item) { return item.label; }) : []; }, [menuItemsRaw]);
|
|
7707
|
+
var _f = React$1.useState({
|
|
7708
|
+
text: "",
|
|
7709
|
+
formats: []
|
|
7710
|
+
}), input = _f[0], setInput = _f[1];
|
|
7329
7711
|
function toggleDrawer() {
|
|
7330
7712
|
var newDrawer = !drawer;
|
|
7331
7713
|
setDrawerState(newDrawer);
|
|
@@ -7337,29 +7719,32 @@ var ChatFooter = function (props) {
|
|
|
7337
7719
|
}
|
|
7338
7720
|
function handleChange(val) {
|
|
7339
7721
|
setInput(val);
|
|
7340
|
-
props.onChange(val);
|
|
7341
|
-
setSuggestionSearch(val);
|
|
7722
|
+
props.onChange(val.text);
|
|
7723
|
+
setSuggestionSearch(val.text);
|
|
7342
7724
|
}
|
|
7343
|
-
var handleSubmit = React.useCallback(function (message) {
|
|
7725
|
+
var handleSubmit = React$1.useCallback(function (message) {
|
|
7344
7726
|
setSuggestionSearch("");
|
|
7345
|
-
setInput(
|
|
7346
|
-
|
|
7727
|
+
setInput({
|
|
7728
|
+
text: "",
|
|
7729
|
+
formats: []
|
|
7730
|
+
});
|
|
7731
|
+
onSubmit(message.text);
|
|
7347
7732
|
}, [onSubmit]);
|
|
7348
|
-
var handleItemClick = React.useCallback(function (data) {
|
|
7349
|
-
handleSubmit(data
|
|
7733
|
+
var handleItemClick = React$1.useCallback(function (data) {
|
|
7734
|
+
handleSubmit(data);
|
|
7350
7735
|
}, [handleSubmit]);
|
|
7351
|
-
var handleItemUse = React.useCallback(function (data) {
|
|
7352
|
-
setInput(data
|
|
7353
|
-
setSuggestionSearch(data.
|
|
7736
|
+
var handleItemUse = React$1.useCallback(function (data) {
|
|
7737
|
+
setInput(data);
|
|
7738
|
+
setSuggestionSearch(data.text);
|
|
7354
7739
|
}, []);
|
|
7355
|
-
return (React__default["default"].createElement("div", { className: "chat-footer" },
|
|
7740
|
+
return (React__default$1["default"].createElement("div", { className: "chat-footer" },
|
|
7356
7741
|
menuItems.length ?
|
|
7357
|
-
React__default["default"].createElement(React__default["default"].Fragment, null,
|
|
7358
|
-
React__default["default"].createElement(ChatMenu, { opened: drawer, onItemClick: handleMenuItem, items: menuItems }),
|
|
7359
|
-
React__default["default"].createElement("div", { className: "chat-footer__menu-icon" },
|
|
7360
|
-
React__default["default"].createElement(DrawerBars, { onToggle: toggleDrawer }))) : React__default["default"].createElement(React__default["default"].Fragment, null),
|
|
7361
|
-
((
|
|
7362
|
-
React__default["default"].createElement(Input, { addClass: "chat-footer__input " + (props.isChatting ? "visible" : ""), suggestion: suggestions.item, value: input, onSubmit: handleSubmit, onChange: handleChange, onSuggestionCommand: suggestions.execute,
|
|
7742
|
+
React__default$1["default"].createElement(React__default$1["default"].Fragment, null,
|
|
7743
|
+
React__default$1["default"].createElement(ChatMenu, { opened: drawer, onItemClick: handleMenuItem, items: menuItems }),
|
|
7744
|
+
React__default$1["default"].createElement("div", { className: "chat-footer__menu-icon" },
|
|
7745
|
+
React__default$1["default"].createElement(DrawerBars, { onToggle: toggleDrawer }))) : React__default$1["default"].createElement(React__default$1["default"].Fragment, null),
|
|
7746
|
+
((_c = suggestions.suggestions) === null || _c === void 0 ? void 0 : _c.length) > 0 && React__default$1["default"].createElement(Suggestions, { className: "xappw-chat-footer__suggestions", data: suggestions.suggestions, index: suggestions.index, onItemClick: handleItemClick, onItemUse: handleItemUse }),
|
|
7747
|
+
React__default$1["default"].createElement(Input, { addClass: "chat-footer__input " + (props.isChatting ? "visible" : ""), suggestion: suggestions.item, value: input, onSubmit: handleSubmit, onChange: handleChange, onSuggestionCommand: suggestions.execute,
|
|
7363
7748
|
// onFocus={this.inputOnFocus}
|
|
7364
7749
|
onFileUpload: props.onFileUpload })));
|
|
7365
7750
|
};
|
|
@@ -7395,12 +7780,12 @@ var MiddlewareContextFactory = /** @class */ (function () {
|
|
|
7395
7780
|
var CardContainer = function (props) {
|
|
7396
7781
|
function renderIcon() {
|
|
7397
7782
|
var isString = typeof (props.icon) === "string";
|
|
7398
|
-
return (React__default["default"].createElement("div", { className: "card-container__icon" }, !isString && props.icon));
|
|
7783
|
+
return (React__default$1["default"].createElement("div", { className: "card-container__icon" }, !isString && props.icon));
|
|
7399
7784
|
}
|
|
7400
|
-
return (React__default["default"].createElement("div", { className: "card-container "
|
|
7785
|
+
return (React__default$1["default"].createElement("div", { className: "card-container ".concat(props.addClass) },
|
|
7401
7786
|
renderIcon(),
|
|
7402
|
-
React__default["default"].createElement("div", { className: "card-container__content "
|
|
7403
|
-
React__default["default"].createElement("div", { className: "card-container__title" }, props.title),
|
|
7787
|
+
React__default$1["default"].createElement("div", { className: "card-container__content ".concat(props.contentAddClass) },
|
|
7788
|
+
React__default$1["default"].createElement("div", { className: "card-container__title" }, props.title),
|
|
7404
7789
|
props.children)));
|
|
7405
7790
|
};
|
|
7406
7791
|
|
|
@@ -7415,13 +7800,13 @@ var defaultProps$2 = {
|
|
|
7415
7800
|
var ChatRating = function (props) {
|
|
7416
7801
|
if (props === void 0) { props = defaultProps$2; }
|
|
7417
7802
|
var onRate = props.onRate;
|
|
7418
|
-
var rateBadButtonOnClick = React.useCallback(function () {
|
|
7803
|
+
var rateBadButtonOnClick = React$1.useCallback(function () {
|
|
7419
7804
|
onRate("bad");
|
|
7420
7805
|
}, [onRate]);
|
|
7421
|
-
var rateGoodButtonOnClick = React.useCallback(function () {
|
|
7806
|
+
var rateGoodButtonOnClick = React$1.useCallback(function () {
|
|
7422
7807
|
onRate("good");
|
|
7423
7808
|
}, [onRate]);
|
|
7424
|
-
var rateAgainButtonOnClick = React.useCallback(function () {
|
|
7809
|
+
var rateAgainButtonOnClick = React$1.useCallback(function () {
|
|
7425
7810
|
onRate(undefined);
|
|
7426
7811
|
}, [onRate]);
|
|
7427
7812
|
// Do not think this prop should be here
|
|
@@ -7429,40 +7814,40 @@ var ChatRating = function (props) {
|
|
|
7429
7814
|
return null;
|
|
7430
7815
|
}
|
|
7431
7816
|
if (!props.hasRating) {
|
|
7432
|
-
return (React__default["default"].createElement(CardContainer, { title: "Chat Rating", addClass: "chat-rating-card" },
|
|
7817
|
+
return (React__default$1["default"].createElement(CardContainer, { title: "Chat Rating", addClass: "chat-rating-card" },
|
|
7433
7818
|
props.agent.displayName,
|
|
7434
7819
|
" has requested you to rate the chat service.",
|
|
7435
|
-
React__default["default"].createElement("div", { className: "buttons-container" },
|
|
7436
|
-
React__default["default"].createElement(ActionButton, { addClass: "button button-rate-bad", label: "Rate Bad", onClick: rateBadButtonOnClick }),
|
|
7437
|
-
React__default["default"].createElement(ActionButton, { addClass: "button button-rate-good", label: "Rate Good", onClick: rateGoodButtonOnClick }))));
|
|
7820
|
+
React__default$1["default"].createElement("div", { className: "buttons-container" },
|
|
7821
|
+
React__default$1["default"].createElement(ActionButton, { addClass: "button button-rate-bad", label: "Rate Bad", onClick: rateBadButtonOnClick }),
|
|
7822
|
+
React__default$1["default"].createElement(ActionButton, { addClass: "button button-rate-good", label: "Rate Good", onClick: rateGoodButtonOnClick }))));
|
|
7438
7823
|
}
|
|
7439
7824
|
else {
|
|
7440
|
-
return (React__default["default"].createElement(CardContainer, { title: "Chat Rating", addClass: "chat-rating-card" },
|
|
7825
|
+
return (React__default$1["default"].createElement(CardContainer, { title: "Chat Rating", addClass: "chat-rating-card" },
|
|
7441
7826
|
"You have rated the chat service.",
|
|
7442
|
-
React__default["default"].createElement("div", { className: "buttons-container" },
|
|
7443
|
-
React__default["default"].createElement(ActionButton, { addClass: "button button-rate-again", label: "Rate again", onClick: rateAgainButtonOnClick }))));
|
|
7827
|
+
React__default$1["default"].createElement("div", { className: "buttons-container" },
|
|
7828
|
+
React__default$1["default"].createElement(ActionButton, { addClass: "button button-rate-again", label: "Rate again", onClick: rateAgainButtonOnClick }))));
|
|
7444
7829
|
}
|
|
7445
7830
|
};
|
|
7446
7831
|
|
|
7447
7832
|
var ChatRatingContainer = function (props) {
|
|
7448
7833
|
var dispatch = useChatServerDispatch();
|
|
7449
|
-
var handleRate = React.useCallback(function (rating) {
|
|
7834
|
+
var handleRate = React$1.useCallback(function (rating) {
|
|
7450
7835
|
dispatch(sendChatRating(rating));
|
|
7451
7836
|
}, [dispatch]);
|
|
7452
|
-
return React__default["default"].createElement(ChatRating, { agent: props.agent, hasRating: props.hasRating, shouldDisplay: props.shouldDisplay, onRate: handleRate });
|
|
7837
|
+
return React__default$1["default"].createElement(ChatRating, { agent: props.agent, hasRating: props.hasRating, shouldDisplay: props.shouldDisplay, onRate: handleRate });
|
|
7453
7838
|
};
|
|
7454
7839
|
|
|
7455
7840
|
var MessageSvg = function (_) {
|
|
7456
|
-
return (React__default["default"].createElement("svg", { className: "message-svg", width: "16", height: "12", viewBox: "0 0 16 12" },
|
|
7457
|
-
React__default["default"].createElement("path", { d: "M14.4 0H1.6C.72 0 .008.675.008 1.5L0 10.5c0 .825.72 1.5 1.6 1.5h12.8c.88 0 1.6-.675 1.6-1.5v-9c0-.825-.72-1.5-1.6-1.5zm0 3L8 6.75 1.6 3V1.5L8 5.25l6.4-3.75V3z", fill: "#424242", fillRule: "evenodd" })));
|
|
7841
|
+
return (React__default$1["default"].createElement("svg", { className: "message-svg", width: "16", height: "12", viewBox: "0 0 16 12" },
|
|
7842
|
+
React__default$1["default"].createElement("path", { d: "M14.4 0H1.6C.72 0 .008.675.008 1.5L0 10.5c0 .825.72 1.5 1.6 1.5h12.8c.88 0 1.6-.675 1.6-1.5v-9c0-.825-.72-1.5-1.6-1.5zm0 3L8 6.75 1.6 3V1.5L8 5.25l6.4-3.75V3z", fill: "#424242", fillRule: "evenodd" })));
|
|
7458
7843
|
};
|
|
7459
7844
|
|
|
7460
7845
|
var MessageForm = function (props) {
|
|
7461
|
-
var name = React.useRef(null);
|
|
7462
|
-
var email = React.useRef(null);
|
|
7463
|
-
var message = React.useRef(null);
|
|
7464
|
-
var form = React.useRef(null);
|
|
7465
|
-
var _a = React.useState(false), sent = _a[0], setSent = _a[1];
|
|
7846
|
+
var name = React$1.useRef(null);
|
|
7847
|
+
var email = React$1.useRef(null);
|
|
7848
|
+
var message = React$1.useRef(null);
|
|
7849
|
+
var form = React$1.useRef(null);
|
|
7850
|
+
var _a = React$1.useState(false), sent = _a[0], setSent = _a[1];
|
|
7466
7851
|
function emailChanged() {
|
|
7467
7852
|
var _a, _b, _c;
|
|
7468
7853
|
if ((_a = email.current) === null || _a === void 0 ? void 0 : _a.validity.patternMismatch) {
|
|
@@ -7490,53 +7875,53 @@ var MessageForm = function (props) {
|
|
|
7490
7875
|
setSent(false);
|
|
7491
7876
|
}
|
|
7492
7877
|
function renderSent() {
|
|
7493
|
-
return (React__default["default"].createElement("div", { key: "sent", className: "message-form--sent" },
|
|
7878
|
+
return (React__default$1["default"].createElement("div", { key: "sent", className: "message-form--sent" },
|
|
7494
7879
|
"Your message has been sent. We will get back to you as soon as possible.",
|
|
7495
|
-
React__default["default"].createElement(ActionButton, { addClass: "button-resend", label: "Send another", onClick: sendAnother })));
|
|
7880
|
+
React__default$1["default"].createElement(ActionButton, { addClass: "button-resend", label: "Send another", onClick: sendAnother })));
|
|
7496
7881
|
}
|
|
7497
7882
|
function renderForm() {
|
|
7498
|
-
return (React__default["default"].createElement("form", { ref: form, key: "not-sent", className: "message-form", onSubmit: send },
|
|
7499
|
-
React__default["default"].createElement("div", { className: "content" },
|
|
7500
|
-
React__default["default"].createElement("div", { className: "section" },
|
|
7501
|
-
React__default["default"].createElement("label", { className: "label" }, "Name"),
|
|
7502
|
-
React__default["default"].createElement("input", { ref: name, maxLength: 255 })),
|
|
7503
|
-
React__default["default"].createElement("div", { className: "section" },
|
|
7504
|
-
React__default["default"].createElement("label", { className: "label" }, "Email"),
|
|
7505
|
-
React__default["default"].createElement("input", { ref: email, onChange: emailChanged, type: "email", required: true, pattern: EMAIL_REGEX })),
|
|
7506
|
-
React__default["default"].createElement("div", { className: "section" },
|
|
7507
|
-
React__default["default"].createElement("label", { className: "label" }, "Message"),
|
|
7508
|
-
React__default["default"].createElement("textarea", { required: true, ref: message }))),
|
|
7509
|
-
React__default["default"].createElement("div", { className: "button-container" },
|
|
7510
|
-
React__default["default"].createElement(ActionButton, { type: "submit", addClass: "message-form__submit", label: "Send" }))));
|
|
7511
|
-
}
|
|
7512
|
-
return (React__default["default"].createElement(CardContainer, { title: props.title, addClass: "offline-card", contentAddClass: sent ? "sent" : "", icon: React__default["default"].createElement(MessageSvg, null) }, sent ? renderSent() : renderForm()));
|
|
7883
|
+
return (React__default$1["default"].createElement("form", { ref: form, key: "not-sent", className: "message-form", onSubmit: send },
|
|
7884
|
+
React__default$1["default"].createElement("div", { className: "content" },
|
|
7885
|
+
React__default$1["default"].createElement("div", { className: "section" },
|
|
7886
|
+
React__default$1["default"].createElement("label", { className: "label" }, "Name"),
|
|
7887
|
+
React__default$1["default"].createElement("input", { ref: name, maxLength: 255 })),
|
|
7888
|
+
React__default$1["default"].createElement("div", { className: "section" },
|
|
7889
|
+
React__default$1["default"].createElement("label", { className: "label" }, "Email"),
|
|
7890
|
+
React__default$1["default"].createElement("input", { ref: email, onChange: emailChanged, type: "email", required: true, pattern: EMAIL_REGEX })),
|
|
7891
|
+
React__default$1["default"].createElement("div", { className: "section" },
|
|
7892
|
+
React__default$1["default"].createElement("label", { className: "label" }, "Message"),
|
|
7893
|
+
React__default$1["default"].createElement("textarea", { required: true, ref: message }))),
|
|
7894
|
+
React__default$1["default"].createElement("div", { className: "button-container" },
|
|
7895
|
+
React__default$1["default"].createElement(ActionButton, { type: "submit", addClass: "message-form__submit", label: "Send" }))));
|
|
7896
|
+
}
|
|
7897
|
+
return (React__default$1["default"].createElement(CardContainer, { title: props.title, addClass: "offline-card", contentAddClass: sent ? "sent" : "", icon: React__default$1["default"].createElement(MessageSvg, null) }, sent ? renderSent() : renderForm()));
|
|
7513
7898
|
};
|
|
7514
7899
|
|
|
7515
7900
|
var OfflineForm = function (props) {
|
|
7516
|
-
return React__default["default"].createElement(MessageForm, { title: "Offline message card title", onSubmit: props.onSubmit });
|
|
7901
|
+
return React__default$1["default"].createElement(MessageForm, { title: "Offline message card title", onSubmit: props.onSubmit });
|
|
7517
7902
|
};
|
|
7518
7903
|
|
|
7519
7904
|
var OfflineFormContainer = function (_) {
|
|
7520
7905
|
var dispatch = useChatServerDispatch();
|
|
7521
|
-
var handleSubmit = React.useCallback(function (data) {
|
|
7906
|
+
var handleSubmit = React$1.useCallback(function (data) {
|
|
7522
7907
|
dispatch(sendOfflineMsg(data));
|
|
7523
7908
|
}, [dispatch]);
|
|
7524
|
-
return React__default["default"].createElement(OfflineForm, { onSubmit: handleSubmit });
|
|
7909
|
+
return React__default$1["default"].createElement(OfflineForm, { onSubmit: handleSubmit });
|
|
7525
7910
|
};
|
|
7526
7911
|
|
|
7527
7912
|
var PrechatForm = function (props) {
|
|
7528
|
-
var _a = React.useState(false), sent = _a[0], setSent = _a[1];
|
|
7913
|
+
var _a = React$1.useState(false), sent = _a[0], setSent = _a[1];
|
|
7529
7914
|
var onSubmit = props.onSubmit;
|
|
7530
|
-
var handleSubmit = React.useCallback(function (msg) {
|
|
7915
|
+
var handleSubmit = React$1.useCallback(function (msg) {
|
|
7531
7916
|
onSubmit(msg);
|
|
7532
7917
|
setSent(true);
|
|
7533
7918
|
}, [onSubmit]);
|
|
7534
|
-
return (React__default["default"].createElement(React__default["default"].Fragment, null, !sent && React__default["default"].createElement(MessageForm, { title: "Introduce yourself!", onSubmit: handleSubmit })));
|
|
7919
|
+
return (React__default$1["default"].createElement(React__default$1["default"].Fragment, null, !sent && React__default$1["default"].createElement(MessageForm, { title: "Introduce yourself!", onSubmit: handleSubmit })));
|
|
7535
7920
|
};
|
|
7536
7921
|
|
|
7537
7922
|
var PrechatFormContainer = function (_) {
|
|
7538
7923
|
var dispatch = useChatServerDispatch();
|
|
7539
|
-
var handleSubmit = React.useCallback(function (data) {
|
|
7924
|
+
var handleSubmit = React$1.useCallback(function (data) {
|
|
7540
7925
|
// Don't send empty messages
|
|
7541
7926
|
if (!data.message)
|
|
7542
7927
|
return;
|
|
@@ -7546,7 +7931,7 @@ var PrechatFormContainer = function (_) {
|
|
|
7546
7931
|
}));
|
|
7547
7932
|
dispatch(executeAction(data.message));
|
|
7548
7933
|
}, [dispatch]);
|
|
7549
|
-
return React__default["default"].createElement(PrechatForm, { onSubmit: handleSubmit });
|
|
7934
|
+
return React__default$1["default"].createElement(PrechatForm, { onSubmit: handleSubmit });
|
|
7550
7935
|
};
|
|
7551
7936
|
|
|
7552
7937
|
var defaultProps$1 = {
|
|
@@ -7556,8 +7941,8 @@ var QueuePosition = function (props) {
|
|
|
7556
7941
|
if (props === void 0) { props = defaultProps$1; }
|
|
7557
7942
|
if (props.position <= 0)
|
|
7558
7943
|
return null;
|
|
7559
|
-
return (React__default["default"].createElement("div", { className: "system-msg-container" },
|
|
7560
|
-
React__default["default"].createElement("span", { className: "system-msg" },
|
|
7944
|
+
return (React__default$1["default"].createElement("div", { className: "system-msg-container" },
|
|
7945
|
+
React__default$1["default"].createElement("span", { className: "system-msg" },
|
|
7561
7946
|
"Queue position: ",
|
|
7562
7947
|
props.position)));
|
|
7563
7948
|
};
|
|
@@ -7565,34 +7950,34 @@ var QueuePosition = function (props) {
|
|
|
7565
7950
|
function getMessageByType(msg) {
|
|
7566
7951
|
switch (msg.type) {
|
|
7567
7952
|
case "chat.memberjoin":
|
|
7568
|
-
return msg.user.displayName
|
|
7953
|
+
return "".concat(msg.user.displayName, " has joined the chat");
|
|
7569
7954
|
case "chat.memberleave":
|
|
7570
|
-
return msg.user.displayName
|
|
7955
|
+
return "".concat(msg.user.displayName, " has left the chat");
|
|
7571
7956
|
case "chat.rating":
|
|
7572
7957
|
if (!msg.newRating) {
|
|
7573
7958
|
return "You have removed the chat rating";
|
|
7574
7959
|
}
|
|
7575
7960
|
else {
|
|
7576
7961
|
var rating = convertToSentenceCase(msg.newRating);
|
|
7577
|
-
return "You have rated the chat service "
|
|
7962
|
+
return "You have rated the chat service ".concat(rating);
|
|
7578
7963
|
}
|
|
7579
7964
|
default:
|
|
7580
7965
|
return JSON.stringify(msg);
|
|
7581
7966
|
}
|
|
7582
7967
|
}
|
|
7583
7968
|
var SystemMessage = function (props) {
|
|
7584
|
-
return (React__default["default"].createElement("div", { className: "system-msg-container" },
|
|
7585
|
-
React__default["default"].createElement("span", { className: "system-msg" }, getMessageByType(props.message))));
|
|
7969
|
+
return (React__default$1["default"].createElement("div", { className: "system-msg-container" },
|
|
7970
|
+
React__default$1["default"].createElement("span", { className: "system-msg" }, getMessageByType(props.message))));
|
|
7586
7971
|
};
|
|
7587
7972
|
function convertToSentenceCase(s) {
|
|
7588
7973
|
return s[0].toUpperCase() + s.slice(1);
|
|
7589
7974
|
}
|
|
7590
7975
|
|
|
7591
7976
|
var TypingIndicator = function (_) {
|
|
7592
|
-
return (React__default["default"].createElement("div", { className: "typing-indicator" },
|
|
7593
|
-
React__default["default"].createElement("div", { className: "typing-indicator-part" }),
|
|
7594
|
-
React__default["default"].createElement("div", { className: "typing-indicator-part" }),
|
|
7595
|
-
React__default["default"].createElement("div", { className: "typing-indicator-part" })));
|
|
7977
|
+
return (React__default$1["default"].createElement("div", { className: "typing-indicator" },
|
|
7978
|
+
React__default$1["default"].createElement("div", { className: "typing-indicator-part" }),
|
|
7979
|
+
React__default$1["default"].createElement("div", { className: "typing-indicator-part" }),
|
|
7980
|
+
React__default$1["default"].createElement("div", { className: "typing-indicator-part" })));
|
|
7596
7981
|
};
|
|
7597
7982
|
|
|
7598
7983
|
/**
|
|
@@ -7601,13 +7986,13 @@ var TypingIndicator = function (_) {
|
|
|
7601
7986
|
var TypingStatus = function (props) {
|
|
7602
7987
|
var agent_names = Object.values(props.agents)
|
|
7603
7988
|
.filter(function (agent) { return agent.typing; });
|
|
7604
|
-
return (React__default["default"].createElement(React__default["default"].Fragment, null, agent_names.map(function (agent) {
|
|
7605
|
-
return (React__default["default"].createElement("div", { className: "chat-msg-container-wrapper", key: "typing-status-"
|
|
7606
|
-
React__default["default"].createElement("div", { key: agent.nick, className: "chat-msg-container agent chat-typing-progress" },
|
|
7607
|
-
React__default["default"].createElement(ChatMessagePart, { user: agent, showAvatar: true },
|
|
7608
|
-
React__default["default"].createElement("div", { className: "chat-msg" },
|
|
7609
|
-
React__default["default"].createElement(ChatMessageBubble, { owner: "others", hasTail: true },
|
|
7610
|
-
React__default["default"].createElement(TypingIndicator, null)))))));
|
|
7989
|
+
return (React__default$1["default"].createElement(React__default$1["default"].Fragment, null, agent_names.map(function (agent) {
|
|
7990
|
+
return (React__default$1["default"].createElement("div", { className: "chat-msg-container-wrapper", key: "typing-status-".concat(agent.user.nick) },
|
|
7991
|
+
React__default$1["default"].createElement("div", { key: agent.user.nick, className: "chat-msg-container agent chat-typing-progress" },
|
|
7992
|
+
React__default$1["default"].createElement(ChatMessagePart, { user: agent.user, showAvatar: true },
|
|
7993
|
+
React__default$1["default"].createElement("div", { className: "chat-msg" },
|
|
7994
|
+
React__default$1["default"].createElement(ChatMessageBubble, { owner: "others", hasTail: true },
|
|
7995
|
+
React__default$1["default"].createElement(TypingIndicator, null)))))));
|
|
7611
7996
|
})));
|
|
7612
7997
|
};
|
|
7613
7998
|
|
|
@@ -7628,19 +8013,19 @@ var defaultProps = {
|
|
|
7628
8013
|
var MessageList = function (props) {
|
|
7629
8014
|
if (props === void 0) { props = defaultProps; }
|
|
7630
8015
|
var onSend = props.onSend, onWrite = props.onWrite, onOpenUrl = props.onOpenUrl;
|
|
7631
|
-
var messagesEndRef = React.useRef(null);
|
|
7632
|
-
React.useEffect(function () {
|
|
8016
|
+
var messagesEndRef = React$1.useRef(null);
|
|
8017
|
+
React$1.useEffect(function () {
|
|
7633
8018
|
messagesEndRef.current.scrollIntoView({ behavior: "smooth" });
|
|
7634
8019
|
}, [props.messages]);
|
|
7635
|
-
var handleSend = React.useCallback(function (msg) {
|
|
8020
|
+
var handleSend = React$1.useCallback(function (msg) {
|
|
7636
8021
|
onSend(msg);
|
|
7637
8022
|
messagesEndRef.current.scrollIntoView({ behavior: "smooth" });
|
|
7638
8023
|
}, [onSend]);
|
|
7639
|
-
var handleWrite = React.useCallback(function (msg) {
|
|
8024
|
+
var handleWrite = React$1.useCallback(function (msg) {
|
|
7640
8025
|
onWrite(msg);
|
|
7641
8026
|
messagesEndRef.current.scrollIntoView({ behavior: "smooth" });
|
|
7642
8027
|
}, [onWrite]);
|
|
7643
|
-
var ctxCache = React.useMemo(function () { return new MiddlewareContextFactory({
|
|
8028
|
+
var ctxCache = React$1.useMemo(function () { return new MiddlewareContextFactory({
|
|
7644
8029
|
send: handleSend,
|
|
7645
8030
|
write: handleWrite,
|
|
7646
8031
|
openUrl: onOpenUrl
|
|
@@ -7652,24 +8037,25 @@ var MessageList = function (props) {
|
|
|
7652
8037
|
* @param addClass
|
|
7653
8038
|
*/
|
|
7654
8039
|
function renderByType(msg, sibling) {
|
|
7655
|
-
var
|
|
8040
|
+
var _a;
|
|
8041
|
+
var user = (_a = props.agents[msg.user.nick]) === null || _a === void 0 ? void 0 : _a.user;
|
|
7656
8042
|
switch (msg.type) {
|
|
7657
8043
|
case "chat.file":
|
|
7658
8044
|
case "chat.msg":
|
|
7659
|
-
return (React__default["default"].createElement(ChatMessage, { key: msg.type + msg.timestamp, message: msg, sibling: sibling, agent: user, messageMiddleware: props.messageMiddleware, middlewareContext: ctxCache.resolve(user) }));
|
|
8045
|
+
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) }));
|
|
7660
8046
|
case "chat.memberjoin":
|
|
7661
8047
|
case "chat.memberleave":
|
|
7662
8048
|
case "chat.rating":
|
|
7663
8049
|
case "chat.typing":
|
|
7664
|
-
return (React__default["default"].createElement(SystemMessage, { key: msg.type + msg.timestamp, message: msg }));
|
|
8050
|
+
return (React__default$1["default"].createElement(SystemMessage, { key: msg.type + msg.timestamp, message: msg }));
|
|
7665
8051
|
case "chat.request.rating":
|
|
7666
|
-
return (React__default["default"].createElement(ChatRatingContainer, { key: msg.type + msg.timestamp, agent:
|
|
8052
|
+
return (React__default$1["default"].createElement(ChatRatingContainer, { key: msg.type + msg.timestamp, agent: user, hasRating: props.hasRating, shouldDisplay: msg.timestamp === props.lastRatingRequestTimestamp }));
|
|
7667
8053
|
case "chat.offline":
|
|
7668
|
-
return React__default["default"].createElement(OfflineFormContainer, { key: "offline-"
|
|
8054
|
+
return React__default$1["default"].createElement(OfflineFormContainer, { key: "offline-".concat(msg.timestamp) });
|
|
7669
8055
|
case "chat.prechat":
|
|
7670
|
-
return React__default["default"].createElement(PrechatFormContainer, { key: "prechat" });
|
|
8056
|
+
return React__default$1["default"].createElement(PrechatFormContainer, { key: "prechat" });
|
|
7671
8057
|
default:
|
|
7672
|
-
return React__default["default"].createElement("div", { key: +new Date() },
|
|
8058
|
+
return React__default$1["default"].createElement("div", { key: +new Date() },
|
|
7673
8059
|
"Unhandled message: ",
|
|
7674
8060
|
JSON.stringify(msg));
|
|
7675
8061
|
}
|
|
@@ -7692,23 +8078,23 @@ var MessageList = function (props) {
|
|
|
7692
8078
|
});
|
|
7693
8079
|
}
|
|
7694
8080
|
var agents = props.agents, queuePosition = props.queuePosition;
|
|
7695
|
-
return (React__default["default"].createElement("div", { className: "message-list-container" },
|
|
7696
|
-
React__default["default"].createElement("div", { className: "message-list-container__msgs" },
|
|
8081
|
+
return (React__default$1["default"].createElement("div", { className: "message-list-container" },
|
|
8082
|
+
React__default$1["default"].createElement("div", { className: "message-list-container__msgs" },
|
|
7697
8083
|
renderAll(),
|
|
7698
|
-
React__default["default"].createElement("div", { ref: messagesEndRef, style: { float: "left", clear: "both" } }),
|
|
7699
|
-
React__default["default"].createElement(QueuePosition, { position: queuePosition }),
|
|
7700
|
-
React__default["default"].createElement(TypingStatus, { agents: agents })),
|
|
7701
|
-
React__default["default"].createElement(ChatChipsContainer, null)));
|
|
8084
|
+
React__default$1["default"].createElement("div", { ref: messagesEndRef, style: { float: "left", clear: "both" } }),
|
|
8085
|
+
React__default$1["default"].createElement(QueuePosition, { position: queuePosition }),
|
|
8086
|
+
React__default$1["default"].createElement(TypingStatus, { agents: agents })),
|
|
8087
|
+
React__default$1["default"].createElement(ChatChipsContainer, null)));
|
|
7702
8088
|
};
|
|
7703
8089
|
|
|
7704
8090
|
var ServerOffline = function () {
|
|
7705
|
-
return React__default["default"].createElement("div", { className: "server-offline" },
|
|
7706
|
-
React__default["default"].createElement("h2", null, "Chat is currently unavailable"),
|
|
7707
|
-
React__default["default"].createElement("h3", null, "Server is offline"));
|
|
8091
|
+
return React__default$1["default"].createElement("div", { className: "server-offline" },
|
|
8092
|
+
React__default$1["default"].createElement("h2", null, "Chat is currently unavailable"),
|
|
8093
|
+
React__default$1["default"].createElement("h3", null, "Server is offline"));
|
|
7708
8094
|
};
|
|
7709
8095
|
|
|
7710
8096
|
var MinimizeButton = function (props) {
|
|
7711
|
-
return React__default["default"].createElement("div", { className: "minimize-button", onClick: props.onClick });
|
|
8097
|
+
return React__default$1["default"].createElement("div", { className: "minimize-button", onClick: props.onClick });
|
|
7712
8098
|
};
|
|
7713
8099
|
|
|
7714
8100
|
var DEFAULT_STATUS_CONFIG = {
|
|
@@ -7728,23 +8114,23 @@ function getStatusText(status, config) {
|
|
|
7728
8114
|
}
|
|
7729
8115
|
var StatusContainer = function (props) {
|
|
7730
8116
|
var _a;
|
|
7731
|
-
return (React__default["default"].createElement("div", { className: "status-container" },
|
|
7732
|
-
React__default["default"].createElement("div", { className: "status-container__avatar" },
|
|
7733
|
-
React__default["default"].createElement(Avatar, { entity: props.agent })),
|
|
7734
|
-
React__default["default"].createElement("div", { className: "status-text" },
|
|
7735
|
-
React__default["default"].createElement("span", null, getStatusText(props.accountStatus, (_a = props.config) === null || _a === void 0 ? void 0 : _a.status))),
|
|
8117
|
+
return (React__default$1["default"].createElement("div", { className: "status-container" },
|
|
8118
|
+
React__default$1["default"].createElement("div", { className: "status-container__avatar" },
|
|
8119
|
+
React__default$1["default"].createElement(Avatar, { entity: props.agent })),
|
|
8120
|
+
React__default$1["default"].createElement("div", { className: "status-text" },
|
|
8121
|
+
React__default$1["default"].createElement("span", null, getStatusText(props.accountStatus, (_a = props.config) === null || _a === void 0 ? void 0 : _a.status))),
|
|
7736
8122
|
props.canMinimize &&
|
|
7737
|
-
React__default["default"].createElement(MinimizeButton, { onClick: props.minimizeOnClick })));
|
|
8123
|
+
React__default$1["default"].createElement(MinimizeButton, { onClick: props.minimizeOnClick })));
|
|
7738
8124
|
};
|
|
7739
8125
|
|
|
7740
8126
|
function buildStyleContent(theme) {
|
|
7741
8127
|
var _a, _b, _c, _d;
|
|
7742
|
-
return "\n:root {\n"
|
|
8128
|
+
return "\n:root {\n".concat(buildVariables(withPrefix("\t--xapp-", union(single("primary-color", theme === null || theme === void 0 ? void 0 : theme.primaryColor), withPrefix("widget-", union(getSize(theme === null || theme === void 0 ? void 0 : theme.size), getMargins(theme === null || theme === void 0 ? void 0 : theme.margin), getBorderStyle(theme === null || theme === void 0 ? void 0 : theme.border))), getChatButtonStyle(theme === null || theme === void 0 ? void 0 : theme.chatButton), withPrefix("header-", getHeaderStyle(theme === null || theme === void 0 ? void 0 : theme.header)), withPrefix("footer-", getFooterStyle(theme === null || theme === void 0 ? void 0 : theme.footer)), withPrefix("content-", union(getBackgroundStyle((_a = theme === null || theme === void 0 ? void 0 : theme.content) === null || _a === void 0 ? void 0 : _a.background))), withPrefix("messages-", getMessagesStyle(theme === null || theme === void 0 ? void 0 : theme.messages)), withPrefix("send-", getButtonStyle(theme === null || theme === void 0 ? void 0 : theme.sendButton)), withPrefix("menu-", getButtonStyle(theme === null || theme === void 0 ? void 0 : theme.menuButton)), withPrefix("menu-", getMenuStyle(theme === null || theme === void 0 ? void 0 : theme.menu)), withPrefix("minimize-", getButtonStyle(theme === null || theme === void 0 ? void 0 : theme.minimizeButton)), withPrefix("carousel-", union(withPrefix("title-", getTextStyle((_b = theme === null || theme === void 0 ? void 0 : theme.carousel) === null || _b === void 0 ? void 0 : _b.title)), withPrefix("subtitle-", getTextStyle((_c = theme === null || theme === void 0 ? void 0 : theme.carousel) === null || _c === void 0 ? void 0 : _c.subtitle)), withPrefix("action-", getButtonStyle((_d = theme === null || theme === void 0 ? void 0 : theme.carousel) === null || _d === void 0 ? void 0 : _d.button)))), withPrefix("input-", getInputStyle(theme === null || theme === void 0 ? void 0 : theme.input)), withPrefix("cta-", getCtaStyle(theme === null || theme === void 0 ? void 0 : theme.cta))))), "\n}");
|
|
7743
8129
|
}
|
|
7744
8130
|
function WidgetStylesheet(props) {
|
|
7745
8131
|
var theme = props.theme;
|
|
7746
8132
|
var stylesContent = buildStyleContent(theme);
|
|
7747
|
-
return (React__default["default"].createElement("style", null, stylesContent));
|
|
8133
|
+
return (React__default$1["default"].createElement("style", null, stylesContent));
|
|
7748
8134
|
}
|
|
7749
8135
|
function buildVariables(gen) {
|
|
7750
8136
|
var result = gen.next();
|
|
@@ -7752,7 +8138,7 @@ function buildVariables(gen) {
|
|
|
7752
8138
|
while (result.done === false) {
|
|
7753
8139
|
var _a = result.value, key = _a[0], value = _a[1];
|
|
7754
8140
|
if (value !== undefined && value !== null && value !== "") {
|
|
7755
|
-
res += key
|
|
8141
|
+
res += "".concat(key, ": ").concat(value, ";\n\r");
|
|
7756
8142
|
}
|
|
7757
8143
|
result = gen.next();
|
|
7758
8144
|
}
|
|
@@ -7760,14 +8146,14 @@ function buildVariables(gen) {
|
|
|
7760
8146
|
}
|
|
7761
8147
|
function withPrefix(prefix, gen) {
|
|
7762
8148
|
var result;
|
|
7763
|
-
return __generator(this, function (_a) {
|
|
8149
|
+
return __generator$1(this, function (_a) {
|
|
7764
8150
|
switch (_a.label) {
|
|
7765
8151
|
case 0:
|
|
7766
8152
|
result = gen.next();
|
|
7767
8153
|
_a.label = 1;
|
|
7768
8154
|
case 1:
|
|
7769
8155
|
if (!!result.done) return [3 /*break*/, 3];
|
|
7770
|
-
return [4 /*yield*/, [""
|
|
8156
|
+
return [4 /*yield*/, ["".concat(prefix).concat(result.value[0]), result.value[1]]];
|
|
7771
8157
|
case 2:
|
|
7772
8158
|
_a.sent();
|
|
7773
8159
|
result = gen.next();
|
|
@@ -7782,7 +8168,7 @@ function union() {
|
|
|
7782
8168
|
for (_i = 0; _i < arguments.length; _i++) {
|
|
7783
8169
|
children[_i] = arguments[_i];
|
|
7784
8170
|
}
|
|
7785
|
-
return __generator(this, function (_b) {
|
|
8171
|
+
return __generator$1(this, function (_b) {
|
|
7786
8172
|
switch (_b.label) {
|
|
7787
8173
|
case 0:
|
|
7788
8174
|
_a = 0, children_1 = children;
|
|
@@ -7807,7 +8193,7 @@ function union() {
|
|
|
7807
8193
|
});
|
|
7808
8194
|
}
|
|
7809
8195
|
function single(key, value) {
|
|
7810
|
-
return __generator(this, function (_a) {
|
|
8196
|
+
return __generator$1(this, function (_a) {
|
|
7811
8197
|
switch (_a.label) {
|
|
7812
8198
|
case 0: return [4 /*yield*/, [key, value]];
|
|
7813
8199
|
case 1:
|
|
@@ -7817,7 +8203,7 @@ function single(key, value) {
|
|
|
7817
8203
|
});
|
|
7818
8204
|
}
|
|
7819
8205
|
function empty() {
|
|
7820
|
-
return __generator(this, function (_a) {
|
|
8206
|
+
return __generator$1(this, function (_a) {
|
|
7821
8207
|
return [2 /*return*/];
|
|
7822
8208
|
});
|
|
7823
8209
|
}
|
|
@@ -7837,7 +8223,7 @@ function getMessageStyle(style) {
|
|
|
7837
8223
|
return union(single('bubble-color', style === null || style === void 0 ? void 0 : style.bubbleColor), getTextStyle(style === null || style === void 0 ? void 0 : style.text));
|
|
7838
8224
|
}
|
|
7839
8225
|
function getSize(style) {
|
|
7840
|
-
return __generator(this, function (_a) {
|
|
8226
|
+
return __generator$1(this, function (_a) {
|
|
7841
8227
|
switch (_a.label) {
|
|
7842
8228
|
case 0: return [4 /*yield*/, ['width', style === null || style === void 0 ? void 0 : style.width]];
|
|
7843
8229
|
case 1:
|
|
@@ -7850,7 +8236,7 @@ function getSize(style) {
|
|
|
7850
8236
|
});
|
|
7851
8237
|
}
|
|
7852
8238
|
function getMargins(style) {
|
|
7853
|
-
return __generator(this, function (_a) {
|
|
8239
|
+
return __generator$1(this, function (_a) {
|
|
7854
8240
|
switch (_a.label) {
|
|
7855
8241
|
case 0:
|
|
7856
8242
|
if (!style) return [3 /*break*/, 5];
|
|
@@ -7872,7 +8258,7 @@ function getMargins(style) {
|
|
|
7872
8258
|
});
|
|
7873
8259
|
}
|
|
7874
8260
|
function getPaddings(style) {
|
|
7875
|
-
return __generator(this, function (_a) {
|
|
8261
|
+
return __generator$1(this, function (_a) {
|
|
7876
8262
|
switch (_a.label) {
|
|
7877
8263
|
case 0:
|
|
7878
8264
|
if (!style) return [3 /*break*/, 5];
|
|
@@ -7894,7 +8280,7 @@ function getPaddings(style) {
|
|
|
7894
8280
|
});
|
|
7895
8281
|
}
|
|
7896
8282
|
function getTextStyle(style) {
|
|
7897
|
-
return __generator(this, function (_a) {
|
|
8283
|
+
return __generator$1(this, function (_a) {
|
|
7898
8284
|
switch (_a.label) {
|
|
7899
8285
|
case 0:
|
|
7900
8286
|
if (!style) return [3 /*break*/, 6];
|
|
@@ -7919,7 +8305,7 @@ function getTextStyle(style) {
|
|
|
7919
8305
|
});
|
|
7920
8306
|
}
|
|
7921
8307
|
function getBackgroundStyle(style) {
|
|
7922
|
-
return __generator(this, function (_a) {
|
|
8308
|
+
return __generator$1(this, function (_a) {
|
|
7923
8309
|
switch (_a.label) {
|
|
7924
8310
|
case 0: return [4 /*yield*/, ["background", style]];
|
|
7925
8311
|
case 1:
|
|
@@ -7929,7 +8315,7 @@ function getBackgroundStyle(style) {
|
|
|
7929
8315
|
});
|
|
7930
8316
|
}
|
|
7931
8317
|
function getButtonStyle(style) {
|
|
7932
|
-
return __generator(this, function (_a) {
|
|
8318
|
+
return __generator$1(this, function (_a) {
|
|
7933
8319
|
switch (_a.label) {
|
|
7934
8320
|
case 0: return [4 /*yield*/, ['button-color', style === null || style === void 0 ? void 0 : style.color]];
|
|
7935
8321
|
case 1:
|
|
@@ -7945,7 +8331,7 @@ function getMenuStyle(style) {
|
|
|
7945
8331
|
return union(withPrefix("item-", getMenuItemStyle(style === null || style === void 0 ? void 0 : style.item)));
|
|
7946
8332
|
}
|
|
7947
8333
|
function getBorderStyle(style) {
|
|
7948
|
-
return __generator(this, function (_a) {
|
|
8334
|
+
return __generator$1(this, function (_a) {
|
|
7949
8335
|
switch (_a.label) {
|
|
7950
8336
|
case 0:
|
|
7951
8337
|
if (!style) return [3 /*break*/, 4];
|
|
@@ -7991,14 +8377,14 @@ function getCtaStyle(style) {
|
|
|
7991
8377
|
var ChatWidgetWrapper = function (props) {
|
|
7992
8378
|
var rawConfig = props.config;
|
|
7993
8379
|
var connection = useConnectionInfo(rawConfig);
|
|
7994
|
-
var config = React.useMemo(function () {
|
|
8380
|
+
var config = React$1.useMemo(function () {
|
|
7995
8381
|
var _a;
|
|
7996
8382
|
return (__assign(__assign({}, rawConfig), { connection: connection, assetUrl: (_a = connection === null || connection === void 0 ? void 0 : connection.serverUrl) !== null && _a !== void 0 ? _a : defaultServerUrl, env: rawConfig }));
|
|
7997
8383
|
}, [connection, rawConfig]);
|
|
7998
8384
|
var chatServer = useChatServer(connection);
|
|
7999
|
-
return (React__default["default"].createElement(ChatConfigContext.Provider, { value: config },
|
|
8000
|
-
React__default["default"].createElement(ChatServerContext.Provider, { value: chatServer },
|
|
8001
|
-
React__default["default"].createElement(ChatWidget, __assign({}, props)))));
|
|
8385
|
+
return (React__default$1["default"].createElement(ChatConfigContext.Provider, { value: config },
|
|
8386
|
+
React__default$1["default"].createElement(ChatServerContext.Provider, { value: chatServer },
|
|
8387
|
+
React__default$1["default"].createElement(ChatWidget, __assign({}, props)))));
|
|
8002
8388
|
};
|
|
8003
8389
|
var ChatWidget = function (props) {
|
|
8004
8390
|
var _a, _b, _c, _d, _e, _f;
|
|
@@ -8009,12 +8395,12 @@ var ChatWidget = function (props) {
|
|
|
8009
8395
|
var mode = (_a = props.mode) !== null && _a !== void 0 ? _a : "normal";
|
|
8010
8396
|
var dockedMode = mode === "docked";
|
|
8011
8397
|
var staticMode = mode === "static";
|
|
8012
|
-
var modeClass = "widget-container--"
|
|
8398
|
+
var modeClass = "widget-container--".concat(mode);
|
|
8013
8399
|
var canMinimize = !dockedMode && !staticMode;
|
|
8014
8400
|
// Our state - pull from storage
|
|
8015
|
-
var _g = React.useState(!canMinimize || !!get("visible)") || (((_b = props.config) === null || _b === void 0 ? void 0 : _b.autoOpenOnWidth) && window.matchMedia("(min-width: "
|
|
8016
|
-
var _h = React.useState(false), typing = _h[0], setTypingState = _h[1]; // false initially
|
|
8017
|
-
var chatServer = React.useContext(ChatServerContext);
|
|
8401
|
+
var _g = React$1.useState(!canMinimize || !!get("visible)") || (((_b = props.config) === null || _b === void 0 ? void 0 : _b.autoOpenOnWidth) && window.matchMedia("(min-width: ".concat((_c = props.config) === null || _c === void 0 ? void 0 : _c.autoOpenOnWidth, ")")).matches)), visible = _g[0], setVisibleState = _g[1];
|
|
8402
|
+
var _h = React$1.useState(false), typing = _h[0], setTypingState = _h[1]; // false initially
|
|
8403
|
+
var chatServer = React$1.useContext(ChatServerContext);
|
|
8018
8404
|
function setVisible(newVisible) {
|
|
8019
8405
|
if (staticMode) {
|
|
8020
8406
|
return;
|
|
@@ -8108,22 +8494,22 @@ var ChatWidget = function (props) {
|
|
|
8108
8494
|
useGreeting(!isOffline && !props.preChatFormEnabled && visible);
|
|
8109
8495
|
var config = props.config, onConnectionStatusChange = props.onConnectionStatusChange;
|
|
8110
8496
|
var connectionStatus = chatState.connection.connectionStatus;
|
|
8111
|
-
React.useEffect(function () {
|
|
8497
|
+
React$1.useEffect(function () {
|
|
8112
8498
|
if (onConnectionStatusChange) {
|
|
8113
8499
|
onConnectionStatusChange(connectionStatus);
|
|
8114
8500
|
}
|
|
8115
8501
|
}, [connectionStatus, onConnectionStatusChange]);
|
|
8116
8502
|
useExternalScript((_d = props.config) === null || _d === void 0 ? void 0 : _d.middlewareUrl);
|
|
8117
|
-
return (React__default["default"].createElement(React__default["default"].Fragment, null,
|
|
8118
|
-
React__default["default"].createElement("div", { className: "widget-container "
|
|
8119
|
-
React__default["default"].createElement(WidgetStylesheet, { theme: config === null || config === void 0 ? void 0 : config.theme }),
|
|
8120
|
-
React__default["default"].createElement(StatusContainer, { accountStatus: chatState.accountStatus, minimizeOnClick: minimizeOnClick, agent: (_e = chatState.agents["agent:robot"]) === null || _e === void 0 ? void 0 : _e.user, canMinimize: canMinimize, config: config === null || config === void 0 ? void 0 : config.header }),
|
|
8121
|
-
React__default["default"].createElement(MessageList, { visible: visible, queuePosition: chatState.queuePosition, isChatting: chatState.isChatting, isOffline: isOffline, messages: messages, agents: chatState.agents, lastRatingRequestTimestamp: chatState.lastRatingRequestTimestamp, hasRating: chatState.hasRating, visitorId: chatState.visitorId, messageMiddleware: props.messageMiddleware, onSend: handleSendMessage, onWrite: handleWriteMessage, onOpenUrl: handleOpenUrl }),
|
|
8122
|
-
React__default["default"].createElement("div", { className: "spinner-container "
|
|
8123
|
-
React__default["default"].createElement("div", { className: "spinner" })),
|
|
8124
|
-
connectionStatus === "offline" && React__default["default"].createElement(ServerOffline, null),
|
|
8125
|
-
React__default["default"].createElement(ChatFooter, { isChatting: chatState.isChatting, onChange: handleOnChange, onSubmit: handleOnSubmit, onFileUpload: handleFileUpload })),
|
|
8126
|
-
React__default["default"].createElement(ChatButton, { addClass: getVisibilityClass(), onClick: chatButtonOnClick, config: (_f = props.config) === null || _f === void 0 ? void 0 : _f.cta, visible: visible })));
|
|
8503
|
+
return (React__default$1["default"].createElement(React__default$1["default"].Fragment, null,
|
|
8504
|
+
React__default$1["default"].createElement("div", { className: "widget-container ".concat(modeClass, " ").concat(getVisibilityClass()) },
|
|
8505
|
+
React__default$1["default"].createElement(WidgetStylesheet, { theme: config === null || config === void 0 ? void 0 : config.theme }),
|
|
8506
|
+
React__default$1["default"].createElement(StatusContainer, { accountStatus: chatState.accountStatus, minimizeOnClick: minimizeOnClick, agent: (_e = chatState.agents["agent:robot"]) === null || _e === void 0 ? void 0 : _e.user, canMinimize: canMinimize, config: config === null || config === void 0 ? void 0 : config.header }),
|
|
8507
|
+
React__default$1["default"].createElement(MessageList, { visible: visible, queuePosition: chatState.queuePosition, isChatting: chatState.isChatting, isOffline: isOffline, messages: messages, agents: chatState.agents, lastRatingRequestTimestamp: chatState.lastRatingRequestTimestamp, hasRating: chatState.hasRating, visitorId: chatState.visitorId, messageMiddleware: props.messageMiddleware, onSend: handleSendMessage, onWrite: handleWriteMessage, onOpenUrl: handleOpenUrl }),
|
|
8508
|
+
React__default$1["default"].createElement("div", { className: "spinner-container ".concat(visible && connectionStatus === "pending" ? "visible" : "") },
|
|
8509
|
+
React__default$1["default"].createElement("div", { className: "spinner" })),
|
|
8510
|
+
connectionStatus === "offline" && React__default$1["default"].createElement(ServerOffline, null),
|
|
8511
|
+
React__default$1["default"].createElement(ChatFooter, { isChatting: chatState.isChatting, onChange: handleOnChange, onSubmit: handleOnSubmit, onFileUpload: handleFileUpload })),
|
|
8512
|
+
React__default$1["default"].createElement(ChatButton, { addClass: getVisibilityClass(), onClick: chatButtonOnClick, config: (_f = props.config) === null || _f === void 0 ? void 0 : _f.cta, visible: visible })));
|
|
8127
8513
|
};
|
|
8128
8514
|
|
|
8129
8515
|
function tryParseJson(str) {
|
|
@@ -8162,7 +8548,7 @@ var BrowserStateStorage = /** @class */ (function () {
|
|
|
8162
8548
|
* @returns {string}
|
|
8163
8549
|
*/
|
|
8164
8550
|
function visitorFingerprint() {
|
|
8165
|
-
return
|
|
8551
|
+
return uuid_1();
|
|
8166
8552
|
}
|
|
8167
8553
|
|
|
8168
8554
|
var DEFAULT_VISITOR = {
|
|
@@ -8218,7 +8604,7 @@ function connectionReducer(state, action) {
|
|
|
8218
8604
|
}
|
|
8219
8605
|
|
|
8220
8606
|
function joinMessages(messages, msg) {
|
|
8221
|
-
return insertSorted(__spreadArray([], messages, true), msg, function (left, right) { return left.timestamp - right.timestamp; });
|
|
8607
|
+
return insertSorted(__spreadArray$1([], messages, true), msg, function (left, right) { return left.timestamp - right.timestamp; });
|
|
8222
8608
|
}
|
|
8223
8609
|
|
|
8224
8610
|
function memberJoin(state, detail) {
|
|
@@ -8249,7 +8635,7 @@ function memberLeave(state, detail) {
|
|
|
8249
8635
|
|
|
8250
8636
|
function resetReducer(state) {
|
|
8251
8637
|
if (state === void 0) { state = DEFAULT_STATE; }
|
|
8252
|
-
return __assign(__assign({}, createDefaultState()), { connection: __assign(__assign({}, state.connection), { nonce:
|
|
8638
|
+
return __assign(__assign({}, createDefaultState()), { connection: __assign(__assign({}, state.connection), { nonce: uuid_1() }), visitor: state.visitor, visitorId: state.visitorId });
|
|
8253
8639
|
}
|
|
8254
8640
|
|
|
8255
8641
|
// todo: create reducer (requires redux-thunk dependncy)
|
|
@@ -8348,7 +8734,7 @@ function mapSynthetic(state, action) {
|
|
|
8348
8734
|
}
|
|
8349
8735
|
};
|
|
8350
8736
|
default:
|
|
8351
|
-
throw new Error("Unknown synthetic action. Detail type: "
|
|
8737
|
+
throw new Error("Unknown synthetic action. Detail type: ".concat(action.detail.type));
|
|
8352
8738
|
}
|
|
8353
8739
|
}
|
|
8354
8740
|
function storeHandler(state, action) {
|
|
@@ -8363,13 +8749,14 @@ function storeHandler(state, action) {
|
|
|
8363
8749
|
}
|
|
8364
8750
|
}
|
|
8365
8751
|
|
|
8366
|
-
function createChatStore(config) {
|
|
8367
|
-
|
|
8752
|
+
function createChatStore(config, dataStorage) {
|
|
8753
|
+
if (dataStorage === void 0) { dataStorage = sessionStorage; }
|
|
8754
|
+
var storage = new BrowserStateStorage(dataStorage, "xappchat.".concat(config.serverUrl, ".").concat(config.accountKey));
|
|
8368
8755
|
var chatReducer = persistStateReducer(storage, DEFAULT_STATE, storeHandler);
|
|
8369
8756
|
var middlewares = [
|
|
8370
8757
|
thunk__default["default"]
|
|
8371
8758
|
];
|
|
8372
|
-
var composeEnhancers =
|
|
8759
|
+
var composeEnhancers = globalThis.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || redux.compose;
|
|
8373
8760
|
return redux.createStore(chatReducer, composeEnhancers(redux.applyMiddleware.apply(void 0, middlewares)));
|
|
8374
8761
|
}
|
|
8375
8762
|
|
|
@@ -8377,13 +8764,13 @@ var ChatWidgetContainer = function (props) {
|
|
|
8377
8764
|
var _a;
|
|
8378
8765
|
var messageMiddleware = useStandardMiddleware();
|
|
8379
8766
|
var connection = useServerConfig(props.config);
|
|
8380
|
-
var chatStore = React.useMemo(function () { return createChatStore(connection); }, [connection]);
|
|
8767
|
+
var chatStore = React$1.useMemo(function () { return createChatStore(connection); }, [connection]);
|
|
8381
8768
|
if ((_a = props.config) === null || _a === void 0 ? void 0 : _a.disabled) {
|
|
8382
|
-
return React__default["default"].createElement(React__default["default"].Fragment, null);
|
|
8769
|
+
return React__default$1["default"].createElement(React__default$1["default"].Fragment, null);
|
|
8383
8770
|
}
|
|
8384
8771
|
var widgetProps = __assign(__assign({}, props), { messageMiddleware: messageMiddleware });
|
|
8385
|
-
return (React__default["default"].createElement(reactRedux.Provider, { store: chatStore },
|
|
8386
|
-
React__default["default"].createElement(ChatWidgetWrapper, __assign({}, widgetProps))));
|
|
8772
|
+
return (React__default$1["default"].createElement(reactRedux.Provider, { store: chatStore },
|
|
8773
|
+
React__default$1["default"].createElement(ChatWidgetWrapper, __assign({}, widgetProps))));
|
|
8387
8774
|
};
|
|
8388
8775
|
|
|
8389
8776
|
function createStaticReducer(state) {
|
|
@@ -8404,35 +8791,35 @@ function createStaticStore(state) {
|
|
|
8404
8791
|
|
|
8405
8792
|
var StaticChatWidgetContainer = function (props) {
|
|
8406
8793
|
var state = props.state;
|
|
8407
|
-
var store = React.useMemo(function () {
|
|
8794
|
+
var store = React$1.useMemo(function () {
|
|
8408
8795
|
return createStaticStore(state);
|
|
8409
8796
|
}, [state]);
|
|
8410
|
-
var config = React.useMemo(function () {
|
|
8797
|
+
var config = React$1.useMemo(function () {
|
|
8411
8798
|
return __assign(__assign({}, props.config), { connection: {
|
|
8412
8799
|
serverUrl: "",
|
|
8413
8800
|
type: "local"
|
|
8414
8801
|
} });
|
|
8415
8802
|
}, [props.config]);
|
|
8416
|
-
return (React__default["default"].createElement(reactRedux.Provider, { store: store },
|
|
8417
|
-
React__default["default"].createElement(ChatWidgetWrapper, __assign({}, props, { config: config }))));
|
|
8803
|
+
return (React__default$1["default"].createElement(reactRedux.Provider, { store: store },
|
|
8804
|
+
React__default$1["default"].createElement(ChatWidgetWrapper, __assign({}, props, { config: config }))));
|
|
8418
8805
|
};
|
|
8419
8806
|
|
|
8420
8807
|
function createStateFromMessages(messages) {
|
|
8421
8808
|
var def = createDefaultState();
|
|
8422
|
-
return __assign(__assign({}, def), { connection: __assign(__assign({}, def.connection), { connectionStatus: "online" }), accountStatus: "online", chats: __spreadArray([], messages, true), isChatting: true });
|
|
8809
|
+
return __assign(__assign({}, def), { connection: __assign(__assign({}, def.connection), { connectionStatus: "online" }), accountStatus: "online", chats: __spreadArray$1([], messages, true), isChatting: true });
|
|
8423
8810
|
}
|
|
8424
8811
|
|
|
8425
8812
|
var StaticMessagesChatWidgetContainer = function (props) {
|
|
8426
8813
|
var messages = props.messages;
|
|
8427
|
-
var state = React.useMemo(function () {
|
|
8814
|
+
var state = React$1.useMemo(function () {
|
|
8428
8815
|
return createStateFromMessages(messages);
|
|
8429
8816
|
}, [messages]);
|
|
8430
|
-
return (React__default["default"].createElement(StaticChatWidgetContainer, { state: state, mode: props.mode, config: props.config }));
|
|
8817
|
+
return (React__default$1["default"].createElement(StaticChatWidgetContainer, { state: state, mode: props.mode, config: props.config }));
|
|
8431
8818
|
};
|
|
8432
8819
|
|
|
8433
8820
|
Object.defineProperty(exports, 'React', {
|
|
8434
8821
|
enumerable: true,
|
|
8435
|
-
get: function () { return React__default["default"]; }
|
|
8822
|
+
get: function () { return React__default$1["default"]; }
|
|
8436
8823
|
});
|
|
8437
8824
|
exports.ActionButton = ActionButton;
|
|
8438
8825
|
exports.Avatar = Avatar;
|