@xapp/chat-widget 1.29.2 → 1.32.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/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/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/WidgetStylesheet/WidgetStylesheet.d.ts +1 -0
- package/dist/index.css +1 -1
- package/dist/index.es.js +1123 -717
- package/dist/index.es.js.map +1 -1
- package/dist/index.js +1224 -818
- package/dist/index.js.map +1 -1
- package/dist/store/ChatStore.d.ts +1 -1
- package/dist/storybook/RichTextValues.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 +25 -24
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,651 @@ 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, onSearch = props.onSearch;
|
|
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
|
+
var inputRef = React.useRef(null);
|
|
2365
|
+
var inputNode = inputRef.current;
|
|
2366
|
+
React.useEffect(function () {
|
|
2367
|
+
if (inputNode && onSearch) {
|
|
2368
|
+
var handler_1 = function (ev) {
|
|
2369
|
+
var target = ev.target;
|
|
2370
|
+
if (target) {
|
|
2371
|
+
onSearch({
|
|
2372
|
+
text: target.value,
|
|
2373
|
+
formats: []
|
|
2374
|
+
});
|
|
2375
|
+
}
|
|
2376
|
+
};
|
|
2377
|
+
inputNode.addEventListener("search", handler_1);
|
|
2378
|
+
return function () {
|
|
2379
|
+
inputNode.removeEventListener("search", handler_1);
|
|
2380
|
+
};
|
|
2381
|
+
}
|
|
2382
|
+
return undefined;
|
|
2383
|
+
}, [inputNode, onSearch]);
|
|
2384
|
+
return (React__default["default"].createElement("div", { className: "xappw-rich-input ".concat(props.className) }, rich ?
|
|
2385
|
+
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, ref: inputRef, 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 })));
|
|
2386
|
+
};
|
|
2387
|
+
|
|
2388
|
+
var SuggestionsGroupHeading = function (props) {
|
|
2389
|
+
return (React__default["default"].createElement("div", { className: "xappw-suggestions-group-heading" }, props.label));
|
|
2390
|
+
};
|
|
2391
|
+
|
|
2392
|
+
function getScrollContainer(node) {
|
|
2393
|
+
var walker = node;
|
|
2394
|
+
while (walker && !walker.classList.contains("xapp-search-result__suggestions")) {
|
|
2395
|
+
walker = walker.parentElement;
|
|
2396
|
+
}
|
|
2397
|
+
return walker || undefined;
|
|
2398
|
+
}
|
|
2399
|
+
var SuggestionsItem = function (props) {
|
|
2400
|
+
var data = props.data, current = props.current, ActionsComponent = props.actions, onClick = props.onClick, onHover = props.onHover;
|
|
2401
|
+
var handleClick = React.useCallback(function () {
|
|
2402
|
+
onClick(data);
|
|
2403
|
+
}, [data, onClick]);
|
|
2404
|
+
var handleHover = React.useCallback(function () {
|
|
2405
|
+
if (onHover) {
|
|
2406
|
+
onHover(data);
|
|
2407
|
+
}
|
|
2408
|
+
}, [data, onHover]);
|
|
2409
|
+
var ref = React.useRef(null);
|
|
2410
|
+
React.useEffect(function () {
|
|
2411
|
+
var node = ref.current;
|
|
2412
|
+
if (current && node) {
|
|
2413
|
+
var scrollContainer = getScrollContainer(node);
|
|
2414
|
+
if (scrollContainer) {
|
|
2415
|
+
var scrollBox = scrollContainer.getBoundingClientRect();
|
|
2416
|
+
var nodeBox = node.getBoundingClientRect();
|
|
2417
|
+
var maxTop = Math.max(scrollBox.top, nodeBox.top);
|
|
2418
|
+
var minBottom = Math.min(scrollBox.bottom, nodeBox.bottom);
|
|
2419
|
+
var visibleHeight = minBottom - maxTop;
|
|
2420
|
+
var actualHeight = nodeBox.height;
|
|
2421
|
+
if (visibleHeight < actualHeight * 0.99) {
|
|
2422
|
+
node.scrollIntoView({ behavior: "smooth" });
|
|
2423
|
+
}
|
|
2424
|
+
}
|
|
2425
|
+
}
|
|
2426
|
+
}, [current]);
|
|
2427
|
+
return (React__default["default"].createElement("div", { ref: ref, className: "xappw-suggestions-item ".concat(current ? "xappw-suggestions-item--current" : ""), onClick: handleClick, onMouseEnter: handleHover },
|
|
2428
|
+
React__default["default"].createElement(RichText, { value: data, className: "xappw-suggestions-item__texts", readOnly: true }),
|
|
2429
|
+
ActionsComponent &&
|
|
2430
|
+
React__default["default"].createElement("div", { className: "xappw-suggestions-item__actions" },
|
|
2431
|
+
React__default["default"].createElement(ActionsComponent, { data: data, current: current }))));
|
|
2432
|
+
};
|
|
2433
|
+
|
|
2434
|
+
var SuggestionsGroup = function (props) {
|
|
2435
|
+
var group = props.group, currentIndex = props.currentIndex, itemActions = props.itemActions;
|
|
2436
|
+
var heading = group.heading, items = group.items;
|
|
2437
|
+
return (React__default["default"].createElement("div", { className: "xappw-suggestions-group" },
|
|
2438
|
+
React__default["default"].createElement("div", { className: "xappw-suggestions-group__heading" },
|
|
2439
|
+
React__default["default"].createElement(SuggestionsGroupHeading, { label: heading })),
|
|
2440
|
+
React__default["default"].createElement("div", { className: "xappw-suggestions-group__items" }, items.map(function (item, itemIndex) {
|
|
2441
|
+
return React__default["default"].createElement(SuggestionsItem, { key: itemIndex, data: item, current: currentIndex === itemIndex, actions: itemActions, onClick: props.onItemClick, onHover: props.onItemHover });
|
|
2442
|
+
}))));
|
|
2443
|
+
};
|
|
2444
|
+
|
|
2445
|
+
function getItemsLength(result) {
|
|
2446
|
+
return result.reduce(function (prev, cur) { return prev + cur.items.length; }, 0);
|
|
2447
|
+
}
|
|
2448
|
+
|
|
2449
|
+
var SuggestionsList = function (props) {
|
|
2450
|
+
var suggestions = props.suggestions, itemActions = props.itemActions, className = props.className;
|
|
2451
|
+
var length = React.useMemo(function () { return getItemsLength(suggestions); }, [suggestions]);
|
|
2452
|
+
var currentIndex = length >= 0 ? props.index : NaN;
|
|
2453
|
+
var indexWalker = 0;
|
|
2454
|
+
return (React__default["default"].createElement("div", { className: "xappw-suggestions-list ".concat(className || "") }, suggestions.map(function (group, index) {
|
|
2455
|
+
var res = (React__default["default"].createElement(SuggestionsGroup, { key: index, group: group, currentIndex: currentIndex - indexWalker, itemActions: itemActions, onItemClick: props.onItemClick, onItemHover: props.onItemHover }));
|
|
2456
|
+
indexWalker += group.items.length;
|
|
2457
|
+
return res;
|
|
2458
|
+
})));
|
|
2459
|
+
};
|
|
2460
|
+
|
|
2461
|
+
function findItemByIndex(groups, index) {
|
|
2462
|
+
if (index >= 0) {
|
|
2463
|
+
for (var _i = 0, groups_1 = groups; _i < groups_1.length; _i++) {
|
|
2464
|
+
var group = groups_1[_i];
|
|
2465
|
+
for (var _a = 0, _b = group.items; _a < _b.length; _a++) {
|
|
2466
|
+
var item = _b[_a];
|
|
2467
|
+
if (index <= 0) {
|
|
2468
|
+
return item;
|
|
2469
|
+
}
|
|
2470
|
+
index--;
|
|
2471
|
+
}
|
|
2472
|
+
}
|
|
2473
|
+
}
|
|
2474
|
+
return undefined;
|
|
2475
|
+
}
|
|
2476
|
+
|
|
2477
|
+
function parseSuggestionsFormat(format) {
|
|
2478
|
+
var types = Object.keys(format);
|
|
2479
|
+
var type = types[0];
|
|
2480
|
+
var item = format[type];
|
|
2481
|
+
if (!item) {
|
|
2482
|
+
throw new Error();
|
|
2483
|
+
}
|
|
2484
|
+
return {
|
|
2485
|
+
type: type,
|
|
2486
|
+
start: item.start,
|
|
2487
|
+
end: item.end
|
|
2488
|
+
};
|
|
2489
|
+
}
|
|
2490
|
+
function parseSuggestionsFormats(formats) {
|
|
2491
|
+
return formats.map(parseSuggestionsFormat);
|
|
2492
|
+
}
|
|
2493
|
+
function parseSuggestionsResponseItem(item) {
|
|
2494
|
+
return {
|
|
2495
|
+
text: item.suggestion,
|
|
2496
|
+
content: item.answer,
|
|
2497
|
+
formats: parseSuggestionsFormats(item.format),
|
|
2498
|
+
type: item.type
|
|
2499
|
+
};
|
|
2500
|
+
}
|
|
2501
|
+
function getHeading(type) {
|
|
2502
|
+
switch (type) {
|
|
2503
|
+
case "FAQ":
|
|
2504
|
+
return "FAQs";
|
|
2505
|
+
case "INTENT":
|
|
2506
|
+
return "Suggestions";
|
|
2507
|
+
case "HISTORICAL":
|
|
2508
|
+
return "Suggestions";
|
|
2509
|
+
default:
|
|
2510
|
+
return type;
|
|
2511
|
+
}
|
|
2512
|
+
}
|
|
2513
|
+
function parseSuggestionsResponse(response, direction) {
|
|
2514
|
+
if (direction === void 0) { direction = 1; }
|
|
2515
|
+
if (!response) {
|
|
2516
|
+
return undefined;
|
|
2517
|
+
}
|
|
2518
|
+
var items = sortSuggestionItems(response.suggestions, direction);
|
|
2519
|
+
return items.reduce(function (result, current) {
|
|
2520
|
+
var mappedItem = parseSuggestionsResponseItem(current);
|
|
2521
|
+
if (result.length) {
|
|
2522
|
+
var prevGroup = result[result.length - 1];
|
|
2523
|
+
if (prevGroup.heading === getHeading(current.type)) {
|
|
2524
|
+
prevGroup.items.push(mappedItem);
|
|
2525
|
+
return result;
|
|
2526
|
+
}
|
|
2527
|
+
}
|
|
2528
|
+
result.push({
|
|
2529
|
+
heading: getHeading(current.type),
|
|
2530
|
+
items: [mappedItem]
|
|
2531
|
+
});
|
|
2532
|
+
return result;
|
|
2533
|
+
}, []);
|
|
2534
|
+
}
|
|
2535
|
+
|
|
2536
|
+
/*! *****************************************************************************
|
|
2537
|
+
Copyright (c) Microsoft Corporation.
|
|
2538
|
+
|
|
2539
|
+
Permission to use, copy, modify, and/or distribute this software for any
|
|
2540
|
+
purpose with or without fee is hereby granted.
|
|
2541
|
+
|
|
2542
|
+
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
|
2543
|
+
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
|
2544
|
+
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
|
2545
|
+
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
|
2546
|
+
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
|
2547
|
+
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
|
2548
|
+
PERFORMANCE OF THIS SOFTWARE.
|
|
2549
|
+
***************************************************************************** */
|
|
2550
|
+
|
|
2551
|
+
function __awaiter(thisArg, _arguments, P, generator) {
|
|
2552
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
2553
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
2554
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
2555
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
2556
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
2557
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
2558
|
+
});
|
|
2559
|
+
}
|
|
2560
|
+
|
|
2561
|
+
function __generator(thisArg, body) {
|
|
2562
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
2563
|
+
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
2564
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
2565
|
+
function step(op) {
|
|
2566
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
2567
|
+
while (_) try {
|
|
2568
|
+
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;
|
|
2569
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
2570
|
+
switch (op[0]) {
|
|
2571
|
+
case 0: case 1: t = op; break;
|
|
2572
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
2573
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
2574
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
2575
|
+
default:
|
|
2576
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
2577
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
2578
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
2579
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
2580
|
+
if (t[2]) _.ops.pop();
|
|
2581
|
+
_.trys.pop(); continue;
|
|
2582
|
+
}
|
|
2583
|
+
op = body.call(thisArg, _);
|
|
2584
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
2585
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
2586
|
+
}
|
|
2587
|
+
}
|
|
2588
|
+
|
|
2589
|
+
function __spreadArray(to, from, pack) {
|
|
2590
|
+
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
2591
|
+
if (ar || !(i in from)) {
|
|
2592
|
+
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
2593
|
+
ar[i] = from[i];
|
|
2594
|
+
}
|
|
2595
|
+
}
|
|
2596
|
+
return to.concat(ar || Array.prototype.slice.call(from));
|
|
2597
|
+
}
|
|
2598
|
+
|
|
2599
|
+
var order = ["FAQ", "INTENT", "HISTORICAL"];
|
|
2600
|
+
var ordersMap = order.reduce(function (prev, cur, index) {
|
|
2601
|
+
prev[cur] = index;
|
|
2602
|
+
return prev;
|
|
2603
|
+
}, {});
|
|
2604
|
+
function compareSuggestionItems(left, right, direction) {
|
|
2605
|
+
return direction * (ordersMap[right.type] - ordersMap[left.type]);
|
|
2606
|
+
}
|
|
2607
|
+
function sortSuggestionItems(items, direction) {
|
|
2608
|
+
return __spreadArray([], items, true).sort(function (left, right) { return compareSuggestionItems(left, right, direction); });
|
|
2609
|
+
}
|
|
2610
|
+
|
|
2611
|
+
/**
|
|
2612
|
+
* Append the provided query params to the URL
|
|
2613
|
+
*
|
|
2614
|
+
* It will overwrite existing params on the URL if there are conflicts
|
|
2615
|
+
* @param url
|
|
2616
|
+
* @param params
|
|
2617
|
+
*/
|
|
2618
|
+
function addQueryParametersToURL(url, params) {
|
|
2619
|
+
var existingParams = new URL(url).searchParams;
|
|
2620
|
+
params.forEach(function (value, key) {
|
|
2621
|
+
existingParams.append(key, value);
|
|
2622
|
+
});
|
|
2623
|
+
var newUrl = new URL(url);
|
|
2624
|
+
newUrl.search = existingParams.toString();
|
|
2625
|
+
return newUrl;
|
|
2626
|
+
}
|
|
2627
|
+
|
|
2628
|
+
var defaultOptions = {};
|
|
2629
|
+
function noop$1() {
|
|
2630
|
+
}
|
|
2631
|
+
function useJsonFetch(url, options) {
|
|
2632
|
+
if (options === void 0) { options = defaultOptions; }
|
|
2633
|
+
var _a = React.useState({
|
|
2634
|
+
state: "paused"
|
|
2635
|
+
}), value = _a[0], setValue = _a[1];
|
|
2636
|
+
var pause = options.pause;
|
|
2637
|
+
React.useEffect(function () {
|
|
2638
|
+
if (pause) {
|
|
2639
|
+
setValue({
|
|
2640
|
+
state: "paused"
|
|
2641
|
+
});
|
|
2642
|
+
return noop$1;
|
|
2643
|
+
}
|
|
2644
|
+
var controller = new AbortController();
|
|
2645
|
+
var signal = controller.signal;
|
|
2646
|
+
var mounted = true;
|
|
2647
|
+
(function () {
|
|
2648
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
2649
|
+
var response, json, e_1;
|
|
2650
|
+
return __generator(this, function (_a) {
|
|
2651
|
+
switch (_a.label) {
|
|
2652
|
+
case 0:
|
|
2653
|
+
_a.trys.push([0, 4, , 5]);
|
|
2654
|
+
setValue({
|
|
2655
|
+
state: "fetching"
|
|
2656
|
+
});
|
|
2657
|
+
return [4 /*yield*/, fetch(url, { signal: signal })];
|
|
2658
|
+
case 1:
|
|
2659
|
+
response = _a.sent();
|
|
2660
|
+
if (!mounted) return [3 /*break*/, 3];
|
|
2661
|
+
return [4 /*yield*/, response.json()];
|
|
2662
|
+
case 2:
|
|
2663
|
+
json = _a.sent();
|
|
2664
|
+
if (response.ok) {
|
|
2665
|
+
setValue({
|
|
2666
|
+
state: "success",
|
|
2667
|
+
data: json
|
|
2668
|
+
});
|
|
2669
|
+
}
|
|
2670
|
+
else {
|
|
2671
|
+
setValue({
|
|
2672
|
+
state: "error",
|
|
2673
|
+
error: json
|
|
2674
|
+
});
|
|
2675
|
+
}
|
|
2676
|
+
_a.label = 3;
|
|
2677
|
+
case 3: return [3 /*break*/, 5];
|
|
2678
|
+
case 4:
|
|
2679
|
+
e_1 = _a.sent();
|
|
2680
|
+
if (e_1.name === "AbortError") {
|
|
2681
|
+
setValue({
|
|
2682
|
+
state: "paused"
|
|
2683
|
+
});
|
|
2684
|
+
return [2 /*return*/];
|
|
2685
|
+
}
|
|
2686
|
+
throw e_1;
|
|
2687
|
+
case 5: return [2 /*return*/];
|
|
2688
|
+
}
|
|
2689
|
+
});
|
|
2690
|
+
});
|
|
2691
|
+
})();
|
|
2692
|
+
return function () {
|
|
2693
|
+
mounted = false;
|
|
2694
|
+
controller.abort();
|
|
2695
|
+
};
|
|
2696
|
+
}, [url, pause]);
|
|
2697
|
+
return value;
|
|
2698
|
+
}
|
|
2699
|
+
|
|
2700
|
+
function useSuggestionsFetch$1(options) {
|
|
2701
|
+
var baseUrl = options.url, context = options.context, query = options.query;
|
|
2702
|
+
var url = React.useMemo(function () {
|
|
2703
|
+
if (!baseUrl) {
|
|
2704
|
+
return undefined;
|
|
2705
|
+
}
|
|
2706
|
+
var params = new URLSearchParams();
|
|
2707
|
+
params.append("size", "5");
|
|
2708
|
+
params.append("queryText", query);
|
|
2709
|
+
if (context === null || context === void 0 ? void 0 : context.length) {
|
|
2710
|
+
params.append("activeContexts", context.join(","));
|
|
2711
|
+
}
|
|
2712
|
+
return addQueryParametersToURL(baseUrl, params);
|
|
2713
|
+
}, [query, context, baseUrl]);
|
|
2714
|
+
var response = useJsonFetch(url ? "".concat(url.toString()) : "", {
|
|
2715
|
+
pause: !query || !baseUrl
|
|
2716
|
+
});
|
|
2717
|
+
return response;
|
|
2718
|
+
}
|
|
2719
|
+
|
|
2720
|
+
/**
|
|
2721
|
+
* Quicker configurable uuid
|
|
2722
|
+
*
|
|
2723
|
+
* @export
|
|
2724
|
+
* @returns {string}
|
|
2725
|
+
*/
|
|
2726
|
+
function uuid() {
|
|
2727
|
+
var d = new Date().getTime();
|
|
2728
|
+
var newUuid = "xxxxxxxx-xxxx-65xx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function (c) {
|
|
2729
|
+
/* tslint:disable:no-magic-numbers */
|
|
2730
|
+
/* tslint:disable:no-bitwise */
|
|
2731
|
+
var r = (d + Math.random() * 16) % 16 | 0;
|
|
2732
|
+
d = Math.floor(d / 16);
|
|
2733
|
+
return (c === "x" ? r : (r & 0x3) | 0x8).toString(16);
|
|
2734
|
+
/* tslint:enable:no-magic-numbers */
|
|
2735
|
+
/* tslint:disable:no-bitwise */
|
|
2736
|
+
});
|
|
2737
|
+
return newUuid;
|
|
2738
|
+
}
|
|
2739
|
+
|
|
2740
|
+
var IconButton_1 = dist.IconButton = IconButton;
|
|
2741
|
+
dist.MessageBubble = MessageBubble;
|
|
2742
|
+
var RichInput_1 = dist.RichInput = RichInput;
|
|
2743
|
+
dist.RichText = RichText;
|
|
2744
|
+
dist.SuggestionsGroup = SuggestionsGroup;
|
|
2745
|
+
dist.SuggestionsGroupHeading = SuggestionsGroupHeading;
|
|
2746
|
+
dist.SuggestionsItem = SuggestionsItem;
|
|
2747
|
+
var SuggestionsList_1 = dist.SuggestionsList = SuggestionsList;
|
|
2748
|
+
dist.addQueryParametersToURL = addQueryParametersToURL;
|
|
2749
|
+
dist.extendFormat = extendFormat;
|
|
2750
|
+
var findItemByIndex_1 = dist.findItemByIndex = findItemByIndex;
|
|
2751
|
+
var getItemsLength_1 = dist.getItemsLength = getItemsLength;
|
|
2752
|
+
var parseSuggestionsResponse_1 = dist.parseSuggestionsResponse = parseSuggestionsResponse;
|
|
2753
|
+
dist.sortSuggestionItems = sortSuggestionItems;
|
|
2754
|
+
dist.useJsonFetch = useJsonFetch;
|
|
2755
|
+
var useSuggestionsFetch_1 = dist.useSuggestionsFetch = useSuggestionsFetch$1;
|
|
2756
|
+
var uuid_1 = dist.uuid = uuid;
|
|
2757
|
+
|
|
2143
2758
|
function postMessageToStentor(data, url, key) {
|
|
2144
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
2759
|
+
return __awaiter$1(this, void 0, void 0, function () {
|
|
2145
2760
|
var body, response;
|
|
2146
|
-
return __generator(this, function (_a) {
|
|
2761
|
+
return __generator$1(this, function (_a) {
|
|
2147
2762
|
switch (_a.label) {
|
|
2148
2763
|
case 0:
|
|
2149
2764
|
body = JSON.stringify(data);
|
|
2150
|
-
log("URL: "
|
|
2151
|
-
log("BODY: "
|
|
2765
|
+
log("URL: ".concat(url));
|
|
2766
|
+
log("BODY: ".concat(body));
|
|
2152
2767
|
return [4 /*yield*/, fetch(url, {
|
|
2153
2768
|
method: "POST",
|
|
2154
2769
|
headers: {
|
|
2155
2770
|
"Content-Type": "application/json",
|
|
2156
|
-
"Authorization": "Bearer "
|
|
2771
|
+
"Authorization": "Bearer ".concat(key),
|
|
2157
2772
|
"User-Agent": "Stentor Chat Server"
|
|
2158
2773
|
},
|
|
2159
2774
|
body: body,
|
|
@@ -2162,7 +2777,7 @@ function postMessageToStentor(data, url, key) {
|
|
|
2162
2777
|
case 1:
|
|
2163
2778
|
response = _a.sent();
|
|
2164
2779
|
if (!response.ok) {
|
|
2165
|
-
throw new Error("Status "
|
|
2780
|
+
throw new Error("Status ".concat(response.status, ", Text: ").concat(response.statusText));
|
|
2166
2781
|
}
|
|
2167
2782
|
return [2 /*return*/, response.json()];
|
|
2168
2783
|
}
|
|
@@ -2230,7 +2845,7 @@ function getOutput(value) {
|
|
|
2230
2845
|
* @returns
|
|
2231
2846
|
*/
|
|
2232
2847
|
function responseToMessage(botResponse, now) {
|
|
2233
|
-
var _a, _b, _c, _d;
|
|
2848
|
+
var _a, _b, _c, _d, _e;
|
|
2234
2849
|
if (now === void 0) { now = new Date().getTime(); }
|
|
2235
2850
|
var responseMessage;
|
|
2236
2851
|
if (!botResponse) {
|
|
@@ -2276,24 +2891,20 @@ function responseToMessage(botResponse, now) {
|
|
|
2276
2891
|
if (html) {
|
|
2277
2892
|
responseMessage.msg = __assign(__assign({}, responseMessage.msg), { html: html });
|
|
2278
2893
|
}
|
|
2279
|
-
if (
|
|
2280
|
-
responseMessage.msg.options =
|
|
2281
|
-
|
|
2282
|
-
|
|
2283
|
-
|
|
2284
|
-
if (typeof suggestion === "string") {
|
|
2285
|
-
// Simple chips (strings)
|
|
2286
|
-
responseMessage.msg.options.push(suggestion);
|
|
2287
|
-
}
|
|
2288
|
-
else {
|
|
2289
|
-
// "call out" chips
|
|
2290
|
-
responseMessage.msg.options.push({
|
|
2291
|
-
label: suggestion.title,
|
|
2292
|
-
actionUrl: suggestion.url
|
|
2293
|
-
});
|
|
2294
|
-
}
|
|
2894
|
+
if ((_e = outputSpeech.suggestions) === null || _e === void 0 ? void 0 : _e.length) {
|
|
2895
|
+
responseMessage.msg.options = outputSpeech.suggestions.map(function (suggestion) {
|
|
2896
|
+
if (typeof suggestion === "string") {
|
|
2897
|
+
// Simple chips (strings)
|
|
2898
|
+
return suggestion;
|
|
2295
2899
|
}
|
|
2296
|
-
|
|
2900
|
+
else {
|
|
2901
|
+
// "call out" chips
|
|
2902
|
+
return {
|
|
2903
|
+
label: suggestion.title,
|
|
2904
|
+
actionUrl: suggestion.url
|
|
2905
|
+
};
|
|
2906
|
+
}
|
|
2907
|
+
});
|
|
2297
2908
|
}
|
|
2298
2909
|
}
|
|
2299
2910
|
return responseMessage;
|
|
@@ -2305,7 +2916,7 @@ function getPermissionRequestType(type) {
|
|
|
2305
2916
|
case "PERMISSION_LOCATION_PRECISE":
|
|
2306
2917
|
return "LOCATION_PRECISE";
|
|
2307
2918
|
default:
|
|
2308
|
-
throw new Error("Unsupported permission: "
|
|
2919
|
+
throw new Error("Unsupported permission: ".concat(type));
|
|
2309
2920
|
}
|
|
2310
2921
|
}
|
|
2311
2922
|
function getPermissionResponse(botResponse, now) {
|
|
@@ -2318,7 +2929,7 @@ function getPermissionResponse(botResponse, now) {
|
|
|
2318
2929
|
type: "permissionRequest",
|
|
2319
2930
|
timestamp: now,
|
|
2320
2931
|
msg: {
|
|
2321
|
-
text: (_a = outputSpeech === null || outputSpeech === void 0 ? void 0 : outputSpeech.displayText) !== null && _a !== void 0 ? _a : ""
|
|
2932
|
+
text: (_a = outputSpeech === null || outputSpeech === void 0 ? void 0 : outputSpeech.displayText) !== null && _a !== void 0 ? _a : "".concat(botResponse.data.permissionRequestTTSContext),
|
|
2322
2933
|
permissionRequest: {
|
|
2323
2934
|
time: now,
|
|
2324
2935
|
type: type,
|
|
@@ -2335,26 +2946,6 @@ function getPermissionResponse(botResponse, now) {
|
|
|
2335
2946
|
};
|
|
2336
2947
|
}
|
|
2337
2948
|
|
|
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
2949
|
var PERMISSION_QUESTION_EXPIRATION_MS = 300000; // 5 minutes
|
|
2359
2950
|
var StentorDirectChat = /** @class */ (function () {
|
|
2360
2951
|
function StentorDirectChat(config) {
|
|
@@ -2366,15 +2957,15 @@ var StentorDirectChat = /** @class */ (function () {
|
|
|
2366
2957
|
*/
|
|
2367
2958
|
this.widget = {
|
|
2368
2959
|
setConnectionStatus: function (status) {
|
|
2369
|
-
log("SERVER: connection_update: "
|
|
2960
|
+
log("SERVER: connection_update: ".concat(JSON.stringify(status)));
|
|
2370
2961
|
_this.dispatch(setConnectionStatus(status));
|
|
2371
2962
|
},
|
|
2372
2963
|
setAccountStatus: function (status) {
|
|
2373
|
-
log("SERVER: account_status: "
|
|
2964
|
+
log("SERVER: account_status: ".concat(JSON.stringify(status)));
|
|
2374
2965
|
_this.dispatch(setAccountStatus(status));
|
|
2375
2966
|
},
|
|
2376
2967
|
sendNewMessage: function (data) {
|
|
2377
|
-
log("SERVER: new message: "
|
|
2968
|
+
log("SERVER: new message: ".concat(JSON.stringify(data)));
|
|
2378
2969
|
_this.dispatch({
|
|
2379
2970
|
type: "chat",
|
|
2380
2971
|
detail: {
|
|
@@ -2386,7 +2977,7 @@ var StentorDirectChat = /** @class */ (function () {
|
|
|
2386
2977
|
});
|
|
2387
2978
|
},
|
|
2388
2979
|
userJoined: function (data) {
|
|
2389
|
-
log("SERVER: user joined: "
|
|
2980
|
+
log("SERVER: user joined: ".concat(JSON.stringify(data)));
|
|
2390
2981
|
_this.visitorInfo.token = data.token;
|
|
2391
2982
|
_this.dispatch({
|
|
2392
2983
|
type: "chat",
|
|
@@ -2398,7 +2989,7 @@ var StentorDirectChat = /** @class */ (function () {
|
|
|
2398
2989
|
});
|
|
2399
2990
|
},
|
|
2400
2991
|
userLeft: function (data) {
|
|
2401
|
-
log("SERVER: user left: "
|
|
2992
|
+
log("SERVER: user left: ".concat(JSON.stringify(data)));
|
|
2402
2993
|
_this.dispatch({
|
|
2403
2994
|
type: "chat",
|
|
2404
2995
|
detail: {
|
|
@@ -2457,7 +3048,7 @@ var StentorDirectChat = /** @class */ (function () {
|
|
|
2457
3048
|
StentorDirectChat.prototype.init = function (dispatch) {
|
|
2458
3049
|
this.dispatch = dispatch;
|
|
2459
3050
|
// TODO: Authenticate - or at least tell the server who you are
|
|
2460
|
-
log("got init auth: "
|
|
3051
|
+
log("got init auth: ".concat(this.config.key));
|
|
2461
3052
|
// We are connected
|
|
2462
3053
|
this.widget.setConnectionStatus("online");
|
|
2463
3054
|
this.widget.setAccountStatus("online");
|
|
@@ -2469,8 +3060,8 @@ var StentorDirectChat = /** @class */ (function () {
|
|
|
2469
3060
|
cb();
|
|
2470
3061
|
};
|
|
2471
3062
|
StentorDirectChat.prototype.sendChatMsg = function (message, cb) {
|
|
2472
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
2473
|
-
return __generator(this, function (_a) {
|
|
3063
|
+
return __awaiter$1(this, void 0, void 0, function () {
|
|
3064
|
+
return __generator$1(this, function (_a) {
|
|
2474
3065
|
return [2 /*return*/, this.sendChatMsgRequest({
|
|
2475
3066
|
msg: message,
|
|
2476
3067
|
timestamp: new Date().getTime(),
|
|
@@ -2483,9 +3074,9 @@ var StentorDirectChat = /** @class */ (function () {
|
|
|
2483
3074
|
};
|
|
2484
3075
|
StentorDirectChat.prototype.sendChatMsgRequest = function (serviceRequest, cb) {
|
|
2485
3076
|
var _a;
|
|
2486
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
3077
|
+
return __awaiter$1(this, void 0, void 0, function () {
|
|
2487
3078
|
var agentResponse;
|
|
2488
|
-
return __generator(this, function (_b) {
|
|
3079
|
+
return __generator$1(this, function (_b) {
|
|
2489
3080
|
switch (_b.label) {
|
|
2490
3081
|
case 0: return [4 /*yield*/, this.postMessage(serviceRequest)];
|
|
2491
3082
|
case 1:
|
|
@@ -2528,9 +3119,9 @@ var StentorDirectChat = /** @class */ (function () {
|
|
|
2528
3119
|
};
|
|
2529
3120
|
StentorDirectChat.prototype.postMessage = function (message) {
|
|
2530
3121
|
var _a, _b, _c, _d;
|
|
2531
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
3122
|
+
return __awaiter$1(this, void 0, void 0, function () {
|
|
2532
3123
|
var request, now, permissionRequest, expired, text, granted, userProfile, isEmail, botResponse, responseMessage;
|
|
2533
|
-
return __generator(this, function (_e) {
|
|
3124
|
+
return __generator$1(this, function (_e) {
|
|
2534
3125
|
switch (_e.label) {
|
|
2535
3126
|
case 0:
|
|
2536
3127
|
now = new Date().getTime();
|
|
@@ -2617,20 +3208,20 @@ var StentorDirectChat = /** @class */ (function () {
|
|
|
2617
3208
|
};
|
|
2618
3209
|
}
|
|
2619
3210
|
}
|
|
2620
|
-
log("Visitor says: "
|
|
3211
|
+
log("Visitor says: ".concat(JSON.stringify(request, undefined, 2)));
|
|
2621
3212
|
// Bot is "typing"
|
|
2622
3213
|
this.widget.typing();
|
|
2623
3214
|
return [4 /*yield*/, postMessageToStentor(request, this.config.url, this.config.key).catch(function (postError) {
|
|
2624
|
-
err("POST failed: "
|
|
3215
|
+
err("POST failed: ".concat(postError.message));
|
|
2625
3216
|
return {
|
|
2626
|
-
text: "Bot doesn't respond. Reason: "
|
|
3217
|
+
text: "Bot doesn't respond. Reason: ".concat(postError.message)
|
|
2627
3218
|
};
|
|
2628
3219
|
})];
|
|
2629
3220
|
case 1:
|
|
2630
3221
|
botResponse = _e.sent();
|
|
2631
3222
|
// Bot stopped "typing"
|
|
2632
3223
|
this.widget.stopTyping();
|
|
2633
|
-
log("Bot says: "
|
|
3224
|
+
log("Bot says: ".concat(JSON.stringify(botResponse, undefined, 2)));
|
|
2634
3225
|
// Now translate the response to server dialect
|
|
2635
3226
|
// new session no more
|
|
2636
3227
|
this.isNewSession = false;
|
|
@@ -2654,15 +3245,15 @@ var StentorDirectChat = /** @class */ (function () {
|
|
|
2654
3245
|
};
|
|
2655
3246
|
StentorDirectChat.prototype.startSession = function () {
|
|
2656
3247
|
if (this.visitorInfo.visitorId) {
|
|
2657
|
-
this._userId = "stentor-widget-user-"
|
|
3248
|
+
this._userId = "stentor-widget-user-".concat(this.visitorInfo.visitorId);
|
|
2658
3249
|
}
|
|
2659
3250
|
else if (this.visitorInfo.email) {
|
|
2660
|
-
this._userId = "stentor-widget-user-"
|
|
3251
|
+
this._userId = "stentor-widget-user-".concat(this.visitorInfo.email);
|
|
2661
3252
|
}
|
|
2662
3253
|
else {
|
|
2663
|
-
this._userId = "stentor-widget-user-"
|
|
3254
|
+
this._userId = "stentor-widget-user-".concat(uuid_1());
|
|
2664
3255
|
}
|
|
2665
|
-
this._sessionId = "stentor-widget-session-"
|
|
3256
|
+
this._sessionId = "stentor-widget-session-".concat(uuid_1());
|
|
2666
3257
|
this.isNewSession = true;
|
|
2667
3258
|
};
|
|
2668
3259
|
Object.defineProperty(StentorDirectChat.prototype, "userId", {
|
|
@@ -5184,8 +5775,10 @@ class Socket extends Emitter_1 {
|
|
|
5184
5775
|
packet.options.compress = this.flags.compress !== false;
|
|
5185
5776
|
// event ack callback
|
|
5186
5777
|
if ("function" === typeof args[args.length - 1]) {
|
|
5187
|
-
|
|
5188
|
-
|
|
5778
|
+
const id = this.ids++;
|
|
5779
|
+
const ack = args.pop();
|
|
5780
|
+
this._registerAckCallback(id, ack);
|
|
5781
|
+
packet.id = id;
|
|
5189
5782
|
}
|
|
5190
5783
|
const isTransportWritable = this.io.engine &&
|
|
5191
5784
|
this.io.engine.transport &&
|
|
@@ -5201,6 +5794,31 @@ class Socket extends Emitter_1 {
|
|
|
5201
5794
|
this.flags = {};
|
|
5202
5795
|
return this;
|
|
5203
5796
|
}
|
|
5797
|
+
/**
|
|
5798
|
+
* @private
|
|
5799
|
+
*/
|
|
5800
|
+
_registerAckCallback(id, ack) {
|
|
5801
|
+
const timeout = this.flags.timeout;
|
|
5802
|
+
if (timeout === undefined) {
|
|
5803
|
+
this.acks[id] = ack;
|
|
5804
|
+
return;
|
|
5805
|
+
}
|
|
5806
|
+
// @ts-ignore
|
|
5807
|
+
const timer = this.io.setTimeoutFn(() => {
|
|
5808
|
+
delete this.acks[id];
|
|
5809
|
+
for (let i = 0; i < this.sendBuffer.length; i++) {
|
|
5810
|
+
if (this.sendBuffer[i].id === id) {
|
|
5811
|
+
this.sendBuffer.splice(i, 1);
|
|
5812
|
+
}
|
|
5813
|
+
}
|
|
5814
|
+
ack.call(this, new Error("operation has timed out"));
|
|
5815
|
+
}, timeout);
|
|
5816
|
+
this.acks[id] = (...args) => {
|
|
5817
|
+
// @ts-ignore
|
|
5818
|
+
this.io.clearTimeoutFn(timer);
|
|
5819
|
+
ack.apply(this, [null, ...args]);
|
|
5820
|
+
};
|
|
5821
|
+
}
|
|
5204
5822
|
/**
|
|
5205
5823
|
* Sends a packet.
|
|
5206
5824
|
*
|
|
@@ -5285,6 +5903,7 @@ class Socket extends Emitter_1 {
|
|
|
5285
5903
|
this.ondisconnect();
|
|
5286
5904
|
break;
|
|
5287
5905
|
case PacketType.CONNECT_ERROR:
|
|
5906
|
+
this.destroy();
|
|
5288
5907
|
const err = new Error(packet.data.message);
|
|
5289
5908
|
// @ts-ignore
|
|
5290
5909
|
err.data = packet.data.data;
|
|
@@ -5448,6 +6067,25 @@ class Socket extends Emitter_1 {
|
|
|
5448
6067
|
this.flags.volatile = true;
|
|
5449
6068
|
return this;
|
|
5450
6069
|
}
|
|
6070
|
+
/**
|
|
6071
|
+
* Sets a modifier for a subsequent event emission that the callback will be called with an error when the
|
|
6072
|
+
* given number of milliseconds have elapsed without an acknowledgement from the server:
|
|
6073
|
+
*
|
|
6074
|
+
* ```
|
|
6075
|
+
* socket.timeout(5000).emit("my-event", (err) => {
|
|
6076
|
+
* if (err) {
|
|
6077
|
+
* // the server did not acknowledge the event in the given delay
|
|
6078
|
+
* }
|
|
6079
|
+
* });
|
|
6080
|
+
* ```
|
|
6081
|
+
*
|
|
6082
|
+
* @returns self
|
|
6083
|
+
* @public
|
|
6084
|
+
*/
|
|
6085
|
+
timeout(timeout) {
|
|
6086
|
+
this.flags.timeout = timeout;
|
|
6087
|
+
return this;
|
|
6088
|
+
}
|
|
5451
6089
|
/**
|
|
5452
6090
|
* Adds a listener that will be fired when any event is emitted. The event name is passed as the first argument to the
|
|
5453
6091
|
* callback.
|
|
@@ -5854,13 +6492,7 @@ class Manager extends Emitter_1 {
|
|
|
5854
6492
|
_close() {
|
|
5855
6493
|
this.skipReconnect = true;
|
|
5856
6494
|
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";
|
|
6495
|
+
this.onclose("forced close");
|
|
5864
6496
|
if (this.engine)
|
|
5865
6497
|
this.engine.close();
|
|
5866
6498
|
}
|
|
@@ -6003,12 +6635,12 @@ var StentorServerChat = /** @class */ (function () {
|
|
|
6003
6635
|
// TODO: Authenticate - or at least tell the server who you are
|
|
6004
6636
|
// Socket events
|
|
6005
6637
|
this.socket.on("account_status", function (data) {
|
|
6006
|
-
log("SERVER: account_status: "
|
|
6638
|
+
log("SERVER: account_status: ".concat(JSON.stringify(data)));
|
|
6007
6639
|
// Register the "communication" with the server
|
|
6008
6640
|
if (!_this.token) {
|
|
6009
|
-
_this.token =
|
|
6641
|
+
_this.token = uuid_1();
|
|
6010
6642
|
dispatch(receiveToken(_this.token));
|
|
6011
|
-
log("CLIENT: created token: "
|
|
6643
|
+
log("CLIENT: created token: ".concat(_this.token));
|
|
6012
6644
|
}
|
|
6013
6645
|
_this.socket.emit("connection update", _this.token);
|
|
6014
6646
|
dispatch({
|
|
@@ -6020,7 +6652,7 @@ var StentorServerChat = /** @class */ (function () {
|
|
|
6020
6652
|
});
|
|
6021
6653
|
});
|
|
6022
6654
|
this.socket.on("new message", function (data) {
|
|
6023
|
-
log("SERVER: new message: "
|
|
6655
|
+
log("SERVER: new message: ".concat(JSON.stringify(data)));
|
|
6024
6656
|
_this.dispatch({
|
|
6025
6657
|
type: "chat",
|
|
6026
6658
|
detail: {
|
|
@@ -6035,7 +6667,7 @@ var StentorServerChat = /** @class */ (function () {
|
|
|
6035
6667
|
});
|
|
6036
6668
|
});
|
|
6037
6669
|
this.socket.on("user joined", function (data) {
|
|
6038
|
-
log("SERVER: user joined: "
|
|
6670
|
+
log("SERVER: user joined: ".concat(JSON.stringify(data)));
|
|
6039
6671
|
_this.visitorInfo.token = data.token;
|
|
6040
6672
|
_this.dispatch({
|
|
6041
6673
|
type: "chat",
|
|
@@ -6051,7 +6683,7 @@ var StentorServerChat = /** @class */ (function () {
|
|
|
6051
6683
|
});
|
|
6052
6684
|
});
|
|
6053
6685
|
this.socket.on("user left", function (data) {
|
|
6054
|
-
log("SERVER: user left: "
|
|
6686
|
+
log("SERVER: user left: ".concat(JSON.stringify(data)));
|
|
6055
6687
|
_this.dispatch({
|
|
6056
6688
|
type: "chat",
|
|
6057
6689
|
detail: {
|
|
@@ -6065,7 +6697,7 @@ var StentorServerChat = /** @class */ (function () {
|
|
|
6065
6697
|
});
|
|
6066
6698
|
});
|
|
6067
6699
|
this.socket.on("typing", function (data) {
|
|
6068
|
-
log("SERVER: typing: "
|
|
6700
|
+
log("SERVER: typing: ".concat(JSON.stringify(data)));
|
|
6069
6701
|
_this.dispatch({
|
|
6070
6702
|
type: "chat",
|
|
6071
6703
|
detail: {
|
|
@@ -6079,7 +6711,7 @@ var StentorServerChat = /** @class */ (function () {
|
|
|
6079
6711
|
});
|
|
6080
6712
|
});
|
|
6081
6713
|
this.socket.on("stop typing", function (data) {
|
|
6082
|
-
log("SERVER: stop typing: "
|
|
6714
|
+
log("SERVER: stop typing: ".concat(JSON.stringify(data)));
|
|
6083
6715
|
_this.dispatch({
|
|
6084
6716
|
type: "chat",
|
|
6085
6717
|
detail: {
|
|
@@ -6163,18 +6795,18 @@ function createChatServerCore(config, token) {
|
|
|
6163
6795
|
case "local":
|
|
6164
6796
|
return new StentorLocalChat();
|
|
6165
6797
|
default:
|
|
6166
|
-
throw throwBadKind(config.type);
|
|
6798
|
+
throw throwBadKind$1(config.type);
|
|
6167
6799
|
}
|
|
6168
6800
|
}
|
|
6169
6801
|
function createChatServer(config, token) {
|
|
6170
6802
|
return new LogChat(createChatServerCore(config, token));
|
|
6171
6803
|
}
|
|
6172
|
-
var ChatServerContext = React.createContext(null);
|
|
6804
|
+
var ChatServerContext = React$1.createContext(null);
|
|
6173
6805
|
function useChatServer(config) {
|
|
6174
|
-
var _a = React.useState(), server = _a[0], setServer = _a[1];
|
|
6806
|
+
var _a = React$1.useState(), server = _a[0], setServer = _a[1];
|
|
6175
6807
|
var token = reactRedux.useSelector(function (state) { return state.connection.token; });
|
|
6176
6808
|
var dispatch = useChatDispatch();
|
|
6177
|
-
React.useEffect(function () {
|
|
6809
|
+
React$1.useEffect(function () {
|
|
6178
6810
|
var newServer = createChatServer(config, token);
|
|
6179
6811
|
newServer.init(dispatch);
|
|
6180
6812
|
setServer(newServer);
|
|
@@ -6187,8 +6819,8 @@ function useChatServer(config) {
|
|
|
6187
6819
|
|
|
6188
6820
|
function useChatServerDispatch() {
|
|
6189
6821
|
var inner = useChatDispatch();
|
|
6190
|
-
var chatServer = React.useContext(ChatServerContext);
|
|
6191
|
-
return React.useCallback(function (action) {
|
|
6822
|
+
var chatServer = React$1.useContext(ChatServerContext);
|
|
6823
|
+
return React$1.useCallback(function (action) {
|
|
6192
6824
|
if (!action) {
|
|
6193
6825
|
console.warn("react bug? Someone invokes with null");
|
|
6194
6826
|
return;
|
|
@@ -6212,8 +6844,8 @@ var ChatChipsContainer = function (_) {
|
|
|
6212
6844
|
dispatch(executeAction(getChatServerActionLinkLabel(option)));
|
|
6213
6845
|
}
|
|
6214
6846
|
}
|
|
6215
|
-
return (React__default["default"].createElement("div", { className: "message-list-container__chips "
|
|
6216
|
-
React__default["default"].createElement(ChatChips, { options: chips, onOptionClick: optionOnChange })));
|
|
6847
|
+
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" : "") },
|
|
6848
|
+
React__default$1["default"].createElement(ChatChips, { options: chips, onOptionClick: optionOnChange })));
|
|
6217
6849
|
};
|
|
6218
6850
|
|
|
6219
6851
|
var ChatMenuItem = function (props) {
|
|
@@ -6222,31 +6854,31 @@ var ChatMenuItem = function (props) {
|
|
|
6222
6854
|
props.onClick(props.label);
|
|
6223
6855
|
}
|
|
6224
6856
|
}
|
|
6225
|
-
return (React__default["default"].createElement("button", { type: "button", className: "chat-menu-item", onClick: handleClick }, props.label));
|
|
6857
|
+
return (React__default$1["default"].createElement("button", { type: "button", className: "chat-menu-item", onClick: handleClick }, props.label));
|
|
6226
6858
|
};
|
|
6227
6859
|
|
|
6228
6860
|
var ChatMenu = function (props) {
|
|
6229
6861
|
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 });
|
|
6862
|
+
return (React__default$1["default"].createElement("div", { className: "chat-menu ".concat(props.opened ? "chat-menu--opened" : "chat-menu--closed") }, items.map(function (label, i) {
|
|
6863
|
+
return React__default$1["default"].createElement(ChatMenuItem, { key: i, onClick: props.onItemClick, label: label });
|
|
6232
6864
|
})));
|
|
6233
6865
|
};
|
|
6234
6866
|
|
|
6235
|
-
var UnknownMessage = function () { return React__default["default"].createElement(React__default["default"].Fragment, null); };
|
|
6867
|
+
var UnknownMessage = function () { return React__default$1["default"].createElement(React__default$1["default"].Fragment, null); };
|
|
6236
6868
|
|
|
6237
6869
|
function renderAvatar(entity) {
|
|
6238
|
-
return (React__default["default"].createElement("div", { className: "xappw-chat-msg-part__avatar" },
|
|
6239
|
-
React__default["default"].createElement(Avatar, { entity: entity })));
|
|
6870
|
+
return (React__default$1["default"].createElement("div", { className: "xappw-chat-msg-part__avatar" },
|
|
6871
|
+
React__default$1["default"].createElement(Avatar, { entity: entity })));
|
|
6240
6872
|
}
|
|
6241
6873
|
var ChatMessagePart = function (props) {
|
|
6242
|
-
return (React__default["default"].createElement("div", { className: "xappw-chat-msg-part" },
|
|
6874
|
+
return (React__default$1["default"].createElement("div", { className: "xappw-chat-msg-part" },
|
|
6243
6875
|
props.showAvatar && renderAvatar(props.user),
|
|
6244
6876
|
props.children));
|
|
6245
6877
|
};
|
|
6246
6878
|
|
|
6247
6879
|
function useExecuteActionCallback() {
|
|
6248
6880
|
var dispatch = useChatServerDispatch();
|
|
6249
|
-
return React.useCallback(function (text, token) {
|
|
6881
|
+
return React$1.useCallback(function (text, token) {
|
|
6250
6882
|
dispatch(executeAction(text, token));
|
|
6251
6883
|
}, [dispatch]);
|
|
6252
6884
|
}
|
|
@@ -6254,7 +6886,7 @@ function useExecuteActionCallback() {
|
|
|
6254
6886
|
function useButtonCallback() {
|
|
6255
6887
|
var handleOpenUrl = useOpenUrlCallback();
|
|
6256
6888
|
var executeAction = useExecuteActionCallback();
|
|
6257
|
-
return React.useCallback(function (button) {
|
|
6889
|
+
return React$1.useCallback(function (button) {
|
|
6258
6890
|
if (button.actionUrl) {
|
|
6259
6891
|
handleOpenUrl(button.actionUrl);
|
|
6260
6892
|
}
|
|
@@ -6287,17 +6919,17 @@ function isList(display) {
|
|
|
6287
6919
|
|
|
6288
6920
|
var CardMiddlewareWidget = function (props) {
|
|
6289
6921
|
var msg = props.msg, ctx = props.ctx;
|
|
6290
|
-
var card = React.useMemo(function () { return convertFromCardDisplay(msg); }, [msg]);
|
|
6922
|
+
var card = React$1.useMemo(function () { return convertFromCardDisplay(msg); }, [msg]);
|
|
6291
6923
|
var user = ctx.user;
|
|
6292
6924
|
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 }))));
|
|
6925
|
+
return (React__default$1["default"].createElement(ChatMessagePart, { showAvatar: true, user: user },
|
|
6926
|
+
React__default$1["default"].createElement("div", { className: "chat-msg" },
|
|
6927
|
+
React__default$1["default"].createElement(ChatCard, { card: card, onButtonClick: handleButton }))));
|
|
6296
6928
|
};
|
|
6297
6929
|
var CardMiddleware = function (next) { return function (props) {
|
|
6298
6930
|
var msg = props.msg, ctx = props.ctx;
|
|
6299
6931
|
if (isCard(msg)) {
|
|
6300
|
-
return React__default["default"].createElement(CardMiddlewareWidget, { msg: msg, ctx: ctx });
|
|
6932
|
+
return React__default$1["default"].createElement(CardMiddlewareWidget, { msg: msg, ctx: ctx });
|
|
6301
6933
|
}
|
|
6302
6934
|
return next(props);
|
|
6303
6935
|
}; };
|
|
@@ -6318,11 +6950,11 @@ function createSubscribableArray(originalValue) {
|
|
|
6318
6950
|
return {
|
|
6319
6951
|
getArray: function () { return cache; },
|
|
6320
6952
|
push: function (val) {
|
|
6321
|
-
cache = __spreadArray(__spreadArray([], cache, true), [val], false);
|
|
6953
|
+
cache = __spreadArray$1(__spreadArray$1([], cache, true), [val], false);
|
|
6322
6954
|
notify();
|
|
6323
6955
|
},
|
|
6324
6956
|
unshift: function (val) {
|
|
6325
|
-
cache = __spreadArray([val], cache, true);
|
|
6957
|
+
cache = __spreadArray$1([val], cache, true);
|
|
6326
6958
|
notify();
|
|
6327
6959
|
},
|
|
6328
6960
|
subscribe: function (callback) {
|
|
@@ -6339,9 +6971,9 @@ function createSubscribableArray(originalValue) {
|
|
|
6339
6971
|
};
|
|
6340
6972
|
}
|
|
6341
6973
|
function useSubscribableArray(array) {
|
|
6342
|
-
var _a = React.useState(array.getArray()), res = _a[0], setRes = _a[1];
|
|
6974
|
+
var _a = React$1.useState(array.getArray()), res = _a[0], setRes = _a[1];
|
|
6343
6975
|
var mounted = useIsMounted();
|
|
6344
|
-
React.useEffect(function () {
|
|
6976
|
+
React$1.useEffect(function () {
|
|
6345
6977
|
var subscription = array.subscribe(function (newVal) {
|
|
6346
6978
|
if (mounted()) {
|
|
6347
6979
|
setRes(newVal);
|
|
@@ -6373,24 +7005,24 @@ function useGlobalSubscribableArray(storage) {
|
|
|
6373
7005
|
}
|
|
6374
7006
|
function useLateMiddlewaresBuilder(storage) {
|
|
6375
7007
|
var middlewares = useGlobalSubscribableArray(storage);
|
|
6376
|
-
return React.useMemo(function () { return joinMiddlewares(middlewares); }, [middlewares]);
|
|
7008
|
+
return React$1.useMemo(function () { return joinMiddlewares(middlewares); }, [middlewares]);
|
|
6377
7009
|
}
|
|
6378
|
-
var storage = createStorage(
|
|
7010
|
+
var storage = createStorage(globalThis, "xappMsgMiddlewares");
|
|
6379
7011
|
function useLateMiddleware() {
|
|
6380
7012
|
return useLateMiddlewaresBuilder(storage);
|
|
6381
7013
|
}
|
|
6382
7014
|
|
|
6383
7015
|
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" })));
|
|
7016
|
+
return (React__default$1["default"].createElement("svg", { viewBox: "0 0 20 20" },
|
|
7017
|
+
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" }),
|
|
7018
|
+
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
7019
|
}
|
|
6388
7020
|
var ExternalLink = function (props) {
|
|
6389
7021
|
var url = props.url;
|
|
6390
|
-
var handleClick = React.useCallback(function (ev) {
|
|
7022
|
+
var handleClick = React$1.useCallback(function (ev) {
|
|
6391
7023
|
ev.preventDefault();
|
|
6392
7024
|
}, []);
|
|
6393
|
-
return (React__default["default"].createElement("a", { href: url, target: "_blank", rel: "noreferrer", className: props.className, onClick: handleClick }, getSvg()));
|
|
7025
|
+
return (React__default$1["default"].createElement("a", { href: url, target: "_blank", rel: "noreferrer", className: props.className, onClick: handleClick }, getSvg()));
|
|
6394
7026
|
};
|
|
6395
7027
|
|
|
6396
7028
|
function firstIndex(val, patterns) {
|
|
@@ -6442,7 +7074,7 @@ var parsers = [
|
|
|
6442
7074
|
pathParser,
|
|
6443
7075
|
queryParser
|
|
6444
7076
|
];
|
|
6445
|
-
function parse
|
|
7077
|
+
function parse(val) {
|
|
6446
7078
|
var parts = [];
|
|
6447
7079
|
var rest = val;
|
|
6448
7080
|
for (var _i = 0, parsers_1 = parsers; _i < parsers_1.length; _i++) {
|
|
@@ -6461,7 +7093,7 @@ var ellipsis = "/...";
|
|
|
6461
7093
|
function reduceLink(url, maxLength) {
|
|
6462
7094
|
if (url.length < maxLength)
|
|
6463
7095
|
return url;
|
|
6464
|
-
var parts = parse
|
|
7096
|
+
var parts = parse(url); // [scheme, domain, port, path, query, hash]
|
|
6465
7097
|
function getText() {
|
|
6466
7098
|
return parts.join("");
|
|
6467
7099
|
}
|
|
@@ -6500,10 +7132,10 @@ function reduceLink(url, maxLength) {
|
|
|
6500
7132
|
|
|
6501
7133
|
var SmartLink = function (props) {
|
|
6502
7134
|
var url = props.url, className = props.className;
|
|
6503
|
-
var handleClick = React.useCallback(function (ev) {
|
|
7135
|
+
var handleClick = React$1.useCallback(function (ev) {
|
|
6504
7136
|
ev.preventDefault();
|
|
6505
7137
|
}, []);
|
|
6506
|
-
return (React__default["default"].createElement("a", { href: url, target: "_blank", rel: "noreferrer", className: className, onClick: handleClick }, reduceLink(url, 40)));
|
|
7138
|
+
return (React__default$1["default"].createElement("a", { href: url, target: "_blank", rel: "noreferrer", className: className, onClick: handleClick }, reduceLink(url, 40)));
|
|
6507
7139
|
};
|
|
6508
7140
|
|
|
6509
7141
|
var ListItem = function (props) {
|
|
@@ -6511,66 +7143,66 @@ var ListItem = function (props) {
|
|
|
6511
7143
|
var item = props.item;
|
|
6512
7144
|
var layout = props.layout || "normal";
|
|
6513
7145
|
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 })))));
|
|
7146
|
+
return (React__default$1["default"].createElement(ActionItem, { className: "xappw-vlist-item-container", item: item, onButtonClick: props.onButtonClick, onExecute: props.onExecute, onOpenUrl: props.onOpenUrl },
|
|
7147
|
+
React__default$1["default"].createElement("div", { className: "xappw-vlist-item xappw-vlist-item--".concat(layout) },
|
|
7148
|
+
React__default$1["default"].createElement("div", { className: "xappw-vlist-item__description" },
|
|
7149
|
+
item.title && React__default$1["default"].createElement("div", { className: "xappw-vlist-item__title" },
|
|
7150
|
+
React__default$1["default"].createElement("span", null, item.title)),
|
|
7151
|
+
url && React__default$1["default"].createElement(SmartLink, { url: url, className: "xappw-vlist-item__link" }),
|
|
7152
|
+
item.subTitle && React__default$1["default"].createElement("div", { className: "xappw-vlist-item__subtitle" },
|
|
7153
|
+
React__default$1["default"].createElement("span", null, item.subTitle)),
|
|
7154
|
+
!!((_a = item.buttons) === null || _a === void 0 ? void 0 : _a.length) && React__default$1["default"].createElement(ChatActionButtons, { buttons: item.buttons, onClick: props.onButtonClick })),
|
|
7155
|
+
React__default$1["default"].createElement("div", { className: "xappw-vlist-item__side" },
|
|
7156
|
+
url && React__default$1["default"].createElement(ExternalLink, { url: "url", className: "xappw-vlist-item__external-link" }),
|
|
7157
|
+
React__default$1["default"].createElement(ActionItemImage, { item: item, className: "xappw-vlist-item__img", emptyImageVisible: props.emptyImageVisible })))));
|
|
6526
7158
|
};
|
|
6527
7159
|
|
|
6528
7160
|
var List = function (props) {
|
|
6529
7161
|
var list = props.list;
|
|
6530
|
-
var listRef = React.useRef(null);
|
|
7162
|
+
var listRef = React$1.useRef(null);
|
|
6531
7163
|
var hasImage = list.items.some(function (item) { return item.imageUrl; });
|
|
6532
7164
|
var titlesOnly = !list.items.some(function (item) { var _a; return item.subTitle || ((_a = item.buttons) === null || _a === void 0 ? void 0 : _a.length); });
|
|
6533
7165
|
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 })));
|
|
7166
|
+
return (React__default$1["default"].createElement("div", { className: "xappw-vlist-container__item", key: "item-key-".concat(itemIndex) },
|
|
7167
|
+
React__default$1["default"].createElement(ListItem, { item: item, layout: titlesOnly ? "titles" : "normal", emptyImageVisible: hasImage, onExecute: props.onExecute, onButtonClick: props.onButtonClick, onOpenUrl: props.onOpenUrl })));
|
|
6536
7168
|
});
|
|
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),
|
|
7169
|
+
return (React__default$1["default"].createElement("div", { className: "xappw-vlist" },
|
|
7170
|
+
React__default$1["default"].createElement("div", { ref: listRef, className: "xappw-vlist-container" },
|
|
7171
|
+
props.list.title && React__default$1["default"].createElement("div", { className: "xappw-vlist__header" }, props.list.title),
|
|
6540
7172
|
listItems)));
|
|
6541
7173
|
};
|
|
6542
7174
|
|
|
6543
7175
|
var ListMiddlewareWidget = function (props) {
|
|
6544
7176
|
var msg = props.msg, ctx = props.ctx;
|
|
6545
|
-
var list = React.useMemo(function () { return convertFromListDisplay(msg); }, [msg]);
|
|
7177
|
+
var list = React$1.useMemo(function () { return convertFromListDisplay(msg); }, [msg]);
|
|
6546
7178
|
var handleExecute = useExecuteActionCallback();
|
|
6547
7179
|
var handleButton = useButtonCallback();
|
|
6548
7180
|
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 }))));
|
|
7181
|
+
return (React__default$1["default"].createElement(ChatMessagePart, { showAvatar: true, user: user },
|
|
7182
|
+
list.type === "CAROUSEL" && React__default$1["default"].createElement("div", { className: "chat-msg chat-msg--fullwidth chat-msg--no-ava" },
|
|
7183
|
+
React__default$1["default"].createElement(Carousel, { list: list, onExecute: handleExecute, onButtonClick: handleButton, onOpenUrl: ctx.openUrl })),
|
|
7184
|
+
list.type === "LIST" && React__default$1["default"].createElement("div", { className: "chat-msg chat-msg--expand" },
|
|
7185
|
+
React__default$1["default"].createElement(List, { list: list, onExecute: handleExecute, onButtonClick: handleButton, onOpenUrl: ctx.openUrl }))));
|
|
6554
7186
|
};
|
|
6555
7187
|
var ListMiddleware = function (next) { return function (props) {
|
|
6556
7188
|
var msg = props.msg, ctx = props.ctx;
|
|
6557
7189
|
if (isList(msg)) {
|
|
6558
|
-
return React__default["default"].createElement(ListMiddlewareWidget, { msg: msg, ctx: ctx });
|
|
7190
|
+
return React__default$1["default"].createElement(ListMiddlewareWidget, { msg: msg, ctx: ctx });
|
|
6559
7191
|
}
|
|
6560
7192
|
return next(props);
|
|
6561
7193
|
}; };
|
|
6562
7194
|
|
|
6563
7195
|
var MultiSelect = function (props) {
|
|
6564
7196
|
var items = props.items, checked = props.checked, onChange = props.onChange;
|
|
6565
|
-
var handleToggle = React.useCallback(function (ev) {
|
|
7197
|
+
var handleToggle = React$1.useCallback(function (ev) {
|
|
6566
7198
|
var _a;
|
|
6567
7199
|
var id = ev.target.value;
|
|
6568
7200
|
onChange(__assign(__assign({}, checked), (_a = {}, _a[id] = !checked[id], _a)));
|
|
6569
7201
|
}, [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)))); })));
|
|
7202
|
+
return (React__default$1["default"].createElement("ul", { className: "xappw-multiselect" }, items.map(function (item) { return (React__default$1["default"].createElement("li", { key: item.id },
|
|
7203
|
+
React__default$1["default"].createElement("label", null,
|
|
7204
|
+
React__default$1["default"].createElement("input", { type: "checkbox", checked: checked[item.id] || false, onChange: handleToggle, value: item.id }),
|
|
7205
|
+
React__default$1["default"].createElement("span", null, item.title)))); })));
|
|
6574
7206
|
};
|
|
6575
7207
|
|
|
6576
7208
|
function isMultiSelect(display) {
|
|
@@ -6581,10 +7213,10 @@ function convertToMultiSelectItems(display) {
|
|
|
6581
7213
|
}
|
|
6582
7214
|
var MultiSelectMiddlewareWidget = function (props) {
|
|
6583
7215
|
var msg = props.msg, ctx = props.ctx;
|
|
6584
|
-
var items = React.useMemo(function () { return convertToMultiSelectItems(msg); }, [msg]);
|
|
7216
|
+
var items = React$1.useMemo(function () { return convertToMultiSelectItems(msg); }, [msg]);
|
|
6585
7217
|
var user = ctx.user;
|
|
6586
|
-
var _a = React.useState({}), checked = _a[0], setChecked = _a[1];
|
|
6587
|
-
var handleSubmit = React.useCallback(function () {
|
|
7218
|
+
var _a = React$1.useState({}), checked = _a[0], setChecked = _a[1];
|
|
7219
|
+
var handleSubmit = React$1.useCallback(function () {
|
|
6588
7220
|
ctx.send({
|
|
6589
7221
|
type: "custom",
|
|
6590
7222
|
payload: JSON.stringify({
|
|
@@ -6594,16 +7226,16 @@ var MultiSelectMiddlewareWidget = function (props) {
|
|
|
6594
7226
|
})
|
|
6595
7227
|
});
|
|
6596
7228
|
}, [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 })))));
|
|
7229
|
+
return (React__default$1["default"].createElement(ChatMessagePart, { showAvatar: true, user: user },
|
|
7230
|
+
React__default$1["default"].createElement("div", { className: "chat-msg" },
|
|
7231
|
+
React__default$1["default"].createElement("div", null,
|
|
7232
|
+
React__default$1["default"].createElement(MultiSelect, { items: items, checked: checked, onChange: setChecked }),
|
|
7233
|
+
React__default$1["default"].createElement(ActionButton, { label: "Submit", onClick: handleSubmit })))));
|
|
6602
7234
|
};
|
|
6603
7235
|
var MultiSelectMiddleware = function (next) { return function (props) {
|
|
6604
7236
|
var msg = props.msg, ctx = props.ctx;
|
|
6605
7237
|
if (isMultiSelect(msg)) {
|
|
6606
|
-
return React__default["default"].createElement(MultiSelectMiddlewareWidget, { msg: msg, ctx: ctx });
|
|
7238
|
+
return React__default$1["default"].createElement(MultiSelectMiddlewareWidget, { msg: msg, ctx: ctx });
|
|
6607
7239
|
}
|
|
6608
7240
|
return next(props);
|
|
6609
7241
|
}; };
|
|
@@ -6615,14 +7247,14 @@ var StandardMiddlewaresBuilder = joinMiddlewares([
|
|
|
6615
7247
|
]);
|
|
6616
7248
|
function useStandardMiddlewareBuilder() {
|
|
6617
7249
|
var lateMiddleware = useLateMiddleware();
|
|
6618
|
-
return React.useMemo(function () { return joinMiddlewares([
|
|
7250
|
+
return React$1.useMemo(function () { return joinMiddlewares([
|
|
6619
7251
|
lateMiddleware,
|
|
6620
7252
|
StandardMiddlewaresBuilder,
|
|
6621
7253
|
]); }, [lateMiddleware]);
|
|
6622
7254
|
}
|
|
6623
7255
|
function useStandardMiddleware() {
|
|
6624
7256
|
var builder = useStandardMiddlewareBuilder();
|
|
6625
|
-
return React.useMemo(function () { return builder(UnknownMessage); }, [builder]);
|
|
7257
|
+
return React$1.useMemo(function () { return builder(UnknownMessage); }, [builder]);
|
|
6626
7258
|
}
|
|
6627
7259
|
var StandardMiddlewares = StandardMiddlewaresBuilder(UnknownMessage);
|
|
6628
7260
|
|
|
@@ -6633,17 +7265,17 @@ function getTailSvgPath(owner) {
|
|
|
6633
7265
|
return "m 0 0 v 240 h 60 c -40 -40 -60 -160 -60 -240";
|
|
6634
7266
|
}
|
|
6635
7267
|
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" })));
|
|
7268
|
+
return (React__default$1["default"].createElement("svg", { className: "chat-text-bubble__tail", xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 80 240" },
|
|
7269
|
+
React__default$1["default"].createElement("path", { d: getTailSvgPath(owner), fill: "currentColor" })));
|
|
6638
7270
|
}
|
|
6639
7271
|
var ChatMessageBubble = function (props) {
|
|
6640
7272
|
var owner = props.owner, onClick = props.onClick;
|
|
6641
|
-
var handleClick = React.useCallback(function () {
|
|
7273
|
+
var handleClick = React$1.useCallback(function () {
|
|
6642
7274
|
if (onClick) {
|
|
6643
7275
|
onClick();
|
|
6644
7276
|
}
|
|
6645
7277
|
}, [onClick]);
|
|
6646
|
-
return (React__default["default"].createElement("div", { onClick: handleClick, className: "chat-text-bubble "
|
|
7278
|
+
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
7279
|
(props.hasTail) && getTailSvg(owner),
|
|
6648
7280
|
props.children));
|
|
6649
7281
|
};
|
|
@@ -6651,16 +7283,16 @@ var ChatMessageBubble = function (props) {
|
|
|
6651
7283
|
var ChatMarkdownMessage = function (props) {
|
|
6652
7284
|
var onOpenUrl = props.onOpenUrl;
|
|
6653
7285
|
var agentMessage = isAgent(props.message.user.nick);
|
|
6654
|
-
var ref = React.useRef();
|
|
7286
|
+
var ref = React$1.useRef();
|
|
6655
7287
|
var html = props.message.msg.html;
|
|
6656
|
-
var handleLinkClick = React.useCallback(function (ev) {
|
|
7288
|
+
var handleLinkClick = React$1.useCallback(function (ev) {
|
|
6657
7289
|
if (onOpenUrl) {
|
|
6658
7290
|
var link = ev.target;
|
|
6659
7291
|
ev.preventDefault();
|
|
6660
7292
|
onOpenUrl(link.href);
|
|
6661
7293
|
}
|
|
6662
7294
|
}, [onOpenUrl]);
|
|
6663
|
-
React.useEffect(function () {
|
|
7295
|
+
React$1.useEffect(function () {
|
|
6664
7296
|
if (ref.current) {
|
|
6665
7297
|
ref.current.innerHTML = html;
|
|
6666
7298
|
if (onOpenUrl) {
|
|
@@ -6677,10 +7309,10 @@ var ChatMarkdownMessage = function (props) {
|
|
|
6677
7309
|
}
|
|
6678
7310
|
return undefined;
|
|
6679
7311
|
}, [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 })))));
|
|
7312
|
+
return (React__default$1["default"].createElement("div", { className: "chat-msg" },
|
|
7313
|
+
React__default$1["default"].createElement("div", { className: "chat-text-container" },
|
|
7314
|
+
React__default$1["default"].createElement(ChatMessageBubble, { owner: agentMessage ? "others" : "mine", hasTail: agentMessage && !props.sibling },
|
|
7315
|
+
React__default$1["default"].createElement("div", { ref: ref })))));
|
|
6684
7316
|
};
|
|
6685
7317
|
|
|
6686
7318
|
var ChatPermissionMessage = function (props) {
|
|
@@ -6690,21 +7322,21 @@ var ChatPermissionMessage = function (props) {
|
|
|
6690
7322
|
var author = message.user;
|
|
6691
7323
|
var allowLabel = "Allow";
|
|
6692
7324
|
var denyLabel = "Deny";
|
|
6693
|
-
var writeAsAgent = React.useCallback(function (msg) {
|
|
7325
|
+
var writeAsAgent = React$1.useCallback(function (msg) {
|
|
6694
7326
|
ctx.write({
|
|
6695
7327
|
type: "msg",
|
|
6696
7328
|
user: author,
|
|
6697
7329
|
msg: msg
|
|
6698
7330
|
});
|
|
6699
7331
|
}, [ctx, author]);
|
|
6700
|
-
var writeAsUser = React.useCallback(function (msg) {
|
|
7332
|
+
var writeAsUser = React$1.useCallback(function (msg) {
|
|
6701
7333
|
ctx.write({
|
|
6702
7334
|
type: "msg",
|
|
6703
7335
|
user: user,
|
|
6704
7336
|
msg: msg
|
|
6705
7337
|
});
|
|
6706
7338
|
}, [ctx, user]);
|
|
6707
|
-
var handleFail = React.useCallback(function () {
|
|
7339
|
+
var handleFail = React$1.useCallback(function () {
|
|
6708
7340
|
ctx.send({
|
|
6709
7341
|
type: "msg",
|
|
6710
7342
|
user: undefined,
|
|
@@ -6713,14 +7345,14 @@ var ChatPermissionMessage = function (props) {
|
|
|
6713
7345
|
}
|
|
6714
7346
|
});
|
|
6715
7347
|
}, [ctx]);
|
|
6716
|
-
var handleSend = React.useCallback(function (msg) {
|
|
7348
|
+
var handleSend = React$1.useCallback(function (msg) {
|
|
6717
7349
|
ctx.send({
|
|
6718
7350
|
type: "permissionGrant",
|
|
6719
7351
|
user: author,
|
|
6720
7352
|
msg: msg
|
|
6721
7353
|
});
|
|
6722
7354
|
}, [author, ctx]);
|
|
6723
|
-
var handleResult = React.useCallback(function (position, userMsg) {
|
|
7355
|
+
var handleResult = React$1.useCallback(function (position, userMsg) {
|
|
6724
7356
|
handleSend({
|
|
6725
7357
|
text: userMsg,
|
|
6726
7358
|
location: position ? {
|
|
@@ -6737,10 +7369,10 @@ var ChatPermissionMessage = function (props) {
|
|
|
6737
7369
|
writeAsAgent(agentMsg);
|
|
6738
7370
|
}
|
|
6739
7371
|
}, [permissionRequest, writeAsUser, writeAsAgent, handleSend]);
|
|
6740
|
-
var handleDeny = React.useCallback(function (label) {
|
|
7372
|
+
var handleDeny = React$1.useCallback(function (label) {
|
|
6741
7373
|
handleResult(undefined, label);
|
|
6742
7374
|
}, [handleResult]);
|
|
6743
|
-
var handleAllow = React.useCallback(function (label) {
|
|
7375
|
+
var handleAllow = React$1.useCallback(function (label) {
|
|
6744
7376
|
if (navigator.geolocation) {
|
|
6745
7377
|
navigator.geolocation.getCurrentPosition(function (position) {
|
|
6746
7378
|
handleResult(position, label);
|
|
@@ -6750,20 +7382,20 @@ var ChatPermissionMessage = function (props) {
|
|
|
6750
7382
|
}
|
|
6751
7383
|
}, [handleFail, handleResult]);
|
|
6752
7384
|
if (!permissionRequest) {
|
|
6753
|
-
return React__default["default"].createElement(React__default["default"].Fragment, null);
|
|
7385
|
+
return React__default$1["default"].createElement(React__default$1["default"].Fragment, null);
|
|
6754
7386
|
}
|
|
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 }))));
|
|
7387
|
+
return (React__default$1["default"].createElement("div", { className: "chat-msg" },
|
|
7388
|
+
React__default$1["default"].createElement("div", { className: "buttons-container" },
|
|
7389
|
+
React__default$1["default"].createElement(ActionButton, { label: allowLabel, addClass: "button", onClick: handleAllow }),
|
|
7390
|
+
React__default$1["default"].createElement(ActionButton, { label: denyLabel, addClass: "button", onClick: handleDeny }))));
|
|
6759
7391
|
};
|
|
6760
7392
|
|
|
6761
7393
|
var ChatTextMessage = function (props) {
|
|
6762
7394
|
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)))));
|
|
7395
|
+
return (React__default$1["default"].createElement("div", { className: "chat-msg" },
|
|
7396
|
+
React__default$1["default"].createElement("div", { className: "chat-text-container" },
|
|
7397
|
+
React__default$1["default"].createElement(ChatMessageBubble, { owner: agentMessage ? "others" : "mine", hasTail: agentMessage && !props.sibling },
|
|
7398
|
+
React__default$1["default"].createElement("span", null, props.message.msg.text)))));
|
|
6767
7399
|
};
|
|
6768
7400
|
|
|
6769
7401
|
function getClassName(msg) {
|
|
@@ -6787,30 +7419,30 @@ var ChatMessage = function (props) {
|
|
|
6787
7419
|
// Here is the deal. If we have text (output speech), then text - card - list - options
|
|
6788
7420
|
// OR card OR list only. Avatar with text bubble.
|
|
6789
7421
|
var avaKey = avaKeys.find(function (key) { return !!msg[key]; });
|
|
6790
|
-
return (React__default["default"].createElement(React__default["default"].Fragment, null,
|
|
7422
|
+
return (React__default$1["default"].createElement(React__default$1["default"].Fragment, null,
|
|
6791
7423
|
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 })),
|
|
7424
|
+
React__default$1["default"].createElement(ChatMessagePart, { showAvatar: avaKey === "text", user: user },
|
|
7425
|
+
React__default$1["default"].createElement(ChatTextMessage, { message: props.message, sibling: props.sibling })),
|
|
6794
7426
|
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 })),
|
|
7427
|
+
React__default$1["default"].createElement(ChatMessagePart, { showAvatar: avaKey === "html", user: user },
|
|
7428
|
+
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
7429
|
msg.displays && middleware && msg.displays.map(function (display, index) {
|
|
6798
7430
|
var Middleware = middleware;
|
|
6799
|
-
return React__default["default"].createElement(Middleware, { key: index, msg: display, ctx: props.middlewareContext });
|
|
7431
|
+
return React__default$1["default"].createElement(Middleware, { key: index, msg: display, ctx: props.middlewareContext });
|
|
6800
7432
|
}),
|
|
6801
7433
|
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 }))));
|
|
7434
|
+
React__default$1["default"].createElement(ChatMessagePart, { showAvatar: avaKey === "permissionRequest", user: user },
|
|
7435
|
+
React__default$1["default"].createElement(ChatPermissionMessage, { message: props.message, sibling: props.sibling, ctx: props.middlewareContext }))));
|
|
6804
7436
|
}
|
|
6805
|
-
return (React__default["default"].createElement(React__default["default"].Fragment, null));
|
|
7437
|
+
return (React__default$1["default"].createElement(React__default$1["default"].Fragment, null));
|
|
6806
7438
|
}
|
|
6807
7439
|
// empty
|
|
6808
|
-
return (React__default["default"].createElement("div", { className: "chat-msg-container-wrapper "
|
|
6809
|
-
React__default["default"].createElement("div", { className: "chat-msg-container "
|
|
7440
|
+
return (React__default$1["default"].createElement("div", { className: "chat-msg-container-wrapper ".concat(isAgent(props.message.user.nick) ? "agent" : "visitor", " ").concat(props.sibling ? "sibling" : "") },
|
|
7441
|
+
React__default$1["default"].createElement("div", { className: "chat-msg-container ".concat(getClassName(props.message)) }, renderByType())));
|
|
6810
7442
|
};
|
|
6811
7443
|
|
|
6812
7444
|
function useExternalScript(url) {
|
|
6813
|
-
React.useEffect(function () {
|
|
7445
|
+
React$1.useEffect(function () {
|
|
6814
7446
|
if (!url) {
|
|
6815
7447
|
return;
|
|
6816
7448
|
}
|
|
@@ -6834,7 +7466,7 @@ function getSafeCh(ch) {
|
|
|
6834
7466
|
if (ch >= "A" && ch <= "Z") {
|
|
6835
7467
|
return ch;
|
|
6836
7468
|
}
|
|
6837
|
-
return "_"
|
|
7469
|
+
return "_".concat(ch.charCodeAt(0), "_");
|
|
6838
7470
|
}
|
|
6839
7471
|
function getSrcId(url) {
|
|
6840
7472
|
var res = "es-";
|
|
@@ -6847,7 +7479,7 @@ function getSrcId(url) {
|
|
|
6847
7479
|
function useChatServerVisitorId() {
|
|
6848
7480
|
var dispatch = useChatServerDispatch();
|
|
6849
7481
|
var clientVisitorId = reactRedux.useSelector(function (state) { return state.visitorId; });
|
|
6850
|
-
return React.useMemo(function () { return ({
|
|
7482
|
+
return React$1.useMemo(function () { return ({
|
|
6851
7483
|
dispatch: dispatch,
|
|
6852
7484
|
visitorId: clientVisitorId
|
|
6853
7485
|
}); }, [dispatch, clientVisitorId]);
|
|
@@ -6855,8 +7487,8 @@ function useChatServerVisitorId() {
|
|
|
6855
7487
|
//send whenever server settings or visitor id changes
|
|
6856
7488
|
function useGreeting(active) {
|
|
6857
7489
|
var curr = useChatServerVisitorId();
|
|
6858
|
-
var snapshotRef = React.useRef(null);
|
|
6859
|
-
React.useEffect(function () {
|
|
7490
|
+
var snapshotRef = React$1.useRef(null);
|
|
7491
|
+
React$1.useEffect(function () {
|
|
6860
7492
|
if (active) {
|
|
6861
7493
|
if (snapshotRef.current !== curr) {
|
|
6862
7494
|
snapshotRef.current = curr;
|
|
@@ -6880,215 +7512,45 @@ function useGreeting(active) {
|
|
|
6880
7512
|
}
|
|
6881
7513
|
|
|
6882
7514
|
function match(item, pattern) {
|
|
6883
|
-
var value = item.
|
|
7515
|
+
var value = item.text;
|
|
6884
7516
|
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
7517
|
}
|
|
7003
7518
|
|
|
7004
7519
|
function useSuggestionsFetch(search, context) {
|
|
7005
7520
|
var env = useWidgetEnv();
|
|
7006
7521
|
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
|
|
7522
|
+
return useSuggestionsFetch_1({
|
|
7523
|
+
url: baseUrl,
|
|
7524
|
+
query: search,
|
|
7525
|
+
context: context
|
|
7018
7526
|
});
|
|
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
7527
|
}
|
|
7034
7528
|
|
|
7035
7529
|
function norm(index, len) {
|
|
7036
7530
|
return (index + len) % len;
|
|
7037
7531
|
}
|
|
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
7532
|
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 () {
|
|
7533
|
+
var _a = React$1.useState(), suggestions = _a[0], setSuggestions = _a[1];
|
|
7534
|
+
var _b = React$1.useState(-1), suggestionIndex = _b[0], setSuggestionIndex = _b[1];
|
|
7535
|
+
var _c = React$1.useState(search), query = _c[0], setQuery = _c[1];
|
|
7536
|
+
var _d = React$1.useState(context), contextState = _d[0], setContextState = _d[1];
|
|
7537
|
+
React$1.useEffect(function () {
|
|
7071
7538
|
setQuery(search);
|
|
7072
7539
|
}, [search]);
|
|
7073
|
-
React.useEffect(function () {
|
|
7540
|
+
React$1.useEffect(function () {
|
|
7074
7541
|
setContextState(context);
|
|
7075
7542
|
}, [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) {
|
|
7543
|
+
var suggestionItem = React$1.useMemo(function () { return suggestions ? findItemByIndex_1(suggestions, suggestionIndex) : undefined; }, [suggestions, suggestionIndex]);
|
|
7544
|
+
var shift = React$1.useCallback(function (delta) {
|
|
7083
7545
|
if (suggestions) {
|
|
7084
|
-
var len_1 = suggestions
|
|
7546
|
+
var len_1 = getItemsLength_1(suggestions);
|
|
7085
7547
|
setSuggestionIndex(function (index) { return norm(index + delta + ((index < 0 && delta <= 0) ? 1 : 0), len_1); });
|
|
7086
7548
|
}
|
|
7087
7549
|
else {
|
|
7088
7550
|
setSuggestionIndex(-1);
|
|
7089
7551
|
}
|
|
7090
7552
|
}, [suggestions]);
|
|
7091
|
-
var execute = React.useCallback(function (cmd) {
|
|
7553
|
+
var execute = React$1.useCallback(function (cmd) {
|
|
7092
7554
|
switch (cmd) {
|
|
7093
7555
|
case "prev":
|
|
7094
7556
|
shift(-1);
|
|
@@ -7103,20 +7565,26 @@ function useSuggestions(search, context) {
|
|
|
7103
7565
|
break;
|
|
7104
7566
|
}
|
|
7105
7567
|
}, [shift]);
|
|
7106
|
-
var suggestionsResponse = useSuggestionsFetch(query, contextState);
|
|
7107
|
-
var
|
|
7108
|
-
|
|
7109
|
-
|
|
7110
|
-
|
|
7568
|
+
var suggestionsResponse = useSuggestionsFetch(query || "", contextState);
|
|
7569
|
+
var suggestionsData = suggestionsResponse.state === "success" ? suggestionsResponse.data : undefined;
|
|
7570
|
+
var raw = React$1.useMemo(function () {
|
|
7571
|
+
return suggestionsData ? parseSuggestionsResponse_1(suggestionsData, -1) : undefined;
|
|
7572
|
+
}, [suggestionsData]);
|
|
7573
|
+
React$1.useEffect(function () {
|
|
7111
7574
|
var prev = suggestionItem;
|
|
7112
7575
|
setSuggestions(raw);
|
|
7113
7576
|
if (prev && raw) {
|
|
7114
|
-
var prevValue = prev.
|
|
7115
|
-
|
|
7116
|
-
|
|
7117
|
-
|
|
7118
|
-
|
|
7119
|
-
|
|
7577
|
+
var prevValue = prev.text;
|
|
7578
|
+
var index = 0;
|
|
7579
|
+
for (var _i = 0, raw_1 = raw; _i < raw_1.length; _i++) {
|
|
7580
|
+
var group = raw_1[_i];
|
|
7581
|
+
for (var _a = 0, _b = group.items; _a < _b.length; _a++) {
|
|
7582
|
+
var item = _b[_a];
|
|
7583
|
+
if (match(item, prevValue)) {
|
|
7584
|
+
setSuggestionIndex(index);
|
|
7585
|
+
break;
|
|
7586
|
+
}
|
|
7587
|
+
index++;
|
|
7120
7588
|
}
|
|
7121
7589
|
}
|
|
7122
7590
|
}
|
|
@@ -7124,7 +7592,7 @@ function useSuggestions(search, context) {
|
|
|
7124
7592
|
setSuggestionIndex(-1);
|
|
7125
7593
|
}
|
|
7126
7594
|
}, [raw, suggestionItem]);
|
|
7127
|
-
return React.useMemo(function () { return ({
|
|
7595
|
+
return React$1.useMemo(function () { return ({
|
|
7128
7596
|
suggestions: suggestions,
|
|
7129
7597
|
index: suggestionIndex,
|
|
7130
7598
|
execute: execute,
|
|
@@ -7133,43 +7601,36 @@ function useSuggestions(search, context) {
|
|
|
7133
7601
|
}
|
|
7134
7602
|
|
|
7135
7603
|
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)));
|
|
7604
|
+
return (React__default$1["default"].createElement("div", { className: "drawer-bars", onClick: props.onToggle },
|
|
7605
|
+
React__default$1["default"].createElement("div", { className: "drawer-bar bar1" }),
|
|
7606
|
+
React__default$1["default"].createElement("div", { className: "drawer-bar bar2" })));
|
|
7146
7607
|
};
|
|
7147
7608
|
|
|
7148
7609
|
var CloseIcon = function () {
|
|
7149
7610
|
// 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" })));
|
|
7611
|
+
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" },
|
|
7612
|
+
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
7613
|
};
|
|
7153
7614
|
|
|
7154
7615
|
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" })));
|
|
7616
|
+
return (React__default$1["default"].createElement("svg", { xmlns: "http://www.w3.org/2000/svg", fill: "currentColor", viewBox: "0 0 16 16" },
|
|
7617
|
+
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
7618
|
};
|
|
7158
7619
|
|
|
7159
7620
|
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" }))));
|
|
7621
|
+
return (React__default$1["default"].createElement("svg", { viewBox: "80.208 98.129 313.069 282.823", xmlns: "http://www.w3.org/2000/svg" },
|
|
7622
|
+
React__default$1["default"].createElement("g", { transform: "matrix(0.024498, 0, 0, -0.038359, 79.83091, 381.182404)", fill: "currentColor", stroke: "none" },
|
|
7623
|
+
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" }),
|
|
7624
|
+
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
7625
|
};
|
|
7165
7626
|
|
|
7166
7627
|
var SendButton = function (props) {
|
|
7167
|
-
return (React__default["default"].createElement(
|
|
7628
|
+
return (React__default$1["default"].createElement(IconButton_1, { className: "xappw-send-button ".concat(props.className || ""), onClick: props.onClick, icon: SendIcon }));
|
|
7168
7629
|
};
|
|
7169
7630
|
|
|
7170
7631
|
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];
|
|
7632
|
+
var value = props.value, suggestion = props.suggestion, onChange = props.onChange, onSubmit = props.onSubmit, onSuggestionCommand = props.onSuggestionCommand;
|
|
7633
|
+
var _a = React$1.useState(false), dragover = _a[0], setDragover = _a[1];
|
|
7173
7634
|
function onDragOver(event) {
|
|
7174
7635
|
setDragover(true);
|
|
7175
7636
|
event.preventDefault();
|
|
@@ -7182,32 +7643,30 @@ var Input = function (props) {
|
|
|
7182
7643
|
function onDragLeave() {
|
|
7183
7644
|
setDragover(false);
|
|
7184
7645
|
}
|
|
7185
|
-
|
|
7646
|
+
var handleOnSubmit = React$1.useCallback(function (event) {
|
|
7186
7647
|
event && event.preventDefault();
|
|
7187
|
-
|
|
7188
|
-
}
|
|
7189
|
-
var
|
|
7190
|
-
|
|
7191
|
-
|
|
7192
|
-
|
|
7193
|
-
|
|
7194
|
-
onChange("");
|
|
7648
|
+
onSubmit(value); // send to the widget
|
|
7649
|
+
}, [value, onSubmit]);
|
|
7650
|
+
var handleClear = React$1.useCallback(function () {
|
|
7651
|
+
onChange({
|
|
7652
|
+
text: "",
|
|
7653
|
+
formats: []
|
|
7654
|
+
});
|
|
7195
7655
|
}, [onChange]);
|
|
7196
|
-
var handleKeyDown = React.useCallback(function (event) {
|
|
7656
|
+
var handleKeyDown = React$1.useCallback(function (event) {
|
|
7197
7657
|
if (suggestion) {
|
|
7198
7658
|
if (event.key === "End" || event.key === "ArrowRight" || event.key === "Enter") {
|
|
7199
|
-
|
|
7200
|
-
onChange(newVal);
|
|
7659
|
+
onChange(suggestion);
|
|
7201
7660
|
return;
|
|
7202
7661
|
}
|
|
7203
7662
|
}
|
|
7204
7663
|
if (onSuggestionCommand) {
|
|
7205
7664
|
if (event.key === "ArrowUp") {
|
|
7206
|
-
onSuggestionCommand("
|
|
7665
|
+
onSuggestionCommand("prev");
|
|
7207
7666
|
event.preventDefault();
|
|
7208
7667
|
}
|
|
7209
7668
|
else if (event.key === "ArrowDown") {
|
|
7210
|
-
onSuggestionCommand("
|
|
7669
|
+
onSuggestionCommand("next");
|
|
7211
7670
|
event.preventDefault();
|
|
7212
7671
|
}
|
|
7213
7672
|
else if (event.key === "Escape") {
|
|
@@ -7216,116 +7675,59 @@ var Input = function (props) {
|
|
|
7216
7675
|
}
|
|
7217
7676
|
}
|
|
7218
7677
|
}, [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,
|
|
7678
|
+
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 },
|
|
7679
|
+
React__default$1["default"].createElement("form", { className: "xappw-input-form", onSubmit: handleOnSubmit },
|
|
7680
|
+
React__default$1["default"].createElement(RichInput_1, { key: "input", className: "xappw-input", placeholder: "Type your question here...", onInput: onChange, onChange: onChange, onKeyDown: handleKeyDown,
|
|
7223
7681
|
// 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
|
-
}))));
|
|
7682
|
+
value: value }),
|
|
7683
|
+
React__default$1["default"].createElement("div", { className: "xappw-input-form__buttons" },
|
|
7684
|
+
value.text && React__default$1["default"].createElement(IconButton_1, { icon: CloseIcon, className: "xappw-input-form__btn", onClick: handleClear }),
|
|
7685
|
+
React__default$1["default"].createElement(SendButton, { className: "xappw-input-form__btn", onClick: handleOnSubmit })))));
|
|
7270
7686
|
};
|
|
7271
7687
|
|
|
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]);
|
|
7688
|
+
function createActions(onItemUse) {
|
|
7689
|
+
return function (innerProps) {
|
|
7690
|
+
var data = innerProps.data;
|
|
7691
|
+
var canUse = data.type !== "FAQ";
|
|
7692
|
+
var handleUse = React$1.useCallback(function (ev) {
|
|
7693
|
+
onItemUse(data);
|
|
7694
|
+
ev.stopPropagation();
|
|
7695
|
+
}, [data]);
|
|
7696
|
+
if (!canUse) {
|
|
7697
|
+
return React__default$1["default"].createElement(React__default$1["default"].Fragment, null);
|
|
7698
|
+
}
|
|
7699
|
+
return (React__default$1["default"].createElement(IconButton_1, { className: "xappw-suggestions__use", onClick: handleUse, icon: LeftDownArrowIcon }));
|
|
7700
|
+
};
|
|
7287
7701
|
}
|
|
7288
7702
|
var Suggestions = function (props) {
|
|
7289
|
-
var
|
|
7703
|
+
var data = props.data, onItemUse = props.onItemUse;
|
|
7704
|
+
var len = data.length;
|
|
7290
7705
|
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 () {
|
|
7706
|
+
var _a = React$1.useState(), activeItem = _a[0], setActiveItem = _a[1];
|
|
7707
|
+
var item = React$1.useMemo(function () { return findItemByIndex_1(data, currentIndex); }, [data, currentIndex]);
|
|
7708
|
+
React$1.useEffect(function () {
|
|
7294
7709
|
setActiveItem(item);
|
|
7295
7710
|
}, [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 })); }))));
|
|
7711
|
+
var actions = React$1.useMemo(function () { return createActions(onItemUse); }, [onItemUse]);
|
|
7712
|
+
return (React__default$1["default"].createElement("div", { className: "xappw-suggestions ".concat(props.className || "") },
|
|
7713
|
+
(activeItem === null || activeItem === void 0 ? void 0 : activeItem.content) && React__default$1["default"].createElement("div", { className: "xappw-suggestions__answer" }, activeItem.content),
|
|
7714
|
+
!!data.length &&
|
|
7715
|
+
React__default$1["default"].createElement(SuggestionsList_1, { suggestions: data, index: currentIndex, className: "xappw-suggestions__groups", itemActions: actions, onItemClick: props.onItemClick, onItemHover: setActiveItem })));
|
|
7317
7716
|
};
|
|
7318
7717
|
|
|
7319
7718
|
var ChatFooter = function (props) {
|
|
7320
|
-
var _a, _b, _c
|
|
7719
|
+
var _a, _b, _c;
|
|
7321
7720
|
var onSubmit = props.onSubmit;
|
|
7322
|
-
var
|
|
7323
|
-
var
|
|
7721
|
+
var _d = React$1.useState(false), drawer = _d[0], setDrawerState = _d[1]; // false initially
|
|
7722
|
+
var _e = React$1.useState(), suggestionSearch = _e[0], setSuggestionSearch = _e[1];
|
|
7324
7723
|
var contexts = reactRedux.useSelector(function (state) { return state.activeContexts; });
|
|
7325
7724
|
var suggestions = useSuggestions(suggestionSearch, contexts);
|
|
7326
7725
|
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
|
|
7726
|
+
var menuItems = React$1.useMemo(function () { return menuItemsRaw ? menuItemsRaw.map(function (item) { return item.label; }) : []; }, [menuItemsRaw]);
|
|
7727
|
+
var _f = React$1.useState({
|
|
7728
|
+
text: "",
|
|
7729
|
+
formats: []
|
|
7730
|
+
}), input = _f[0], setInput = _f[1];
|
|
7329
7731
|
function toggleDrawer() {
|
|
7330
7732
|
var newDrawer = !drawer;
|
|
7331
7733
|
setDrawerState(newDrawer);
|
|
@@ -7337,29 +7739,32 @@ var ChatFooter = function (props) {
|
|
|
7337
7739
|
}
|
|
7338
7740
|
function handleChange(val) {
|
|
7339
7741
|
setInput(val);
|
|
7340
|
-
props.onChange(val);
|
|
7341
|
-
setSuggestionSearch(val);
|
|
7742
|
+
props.onChange(val.text);
|
|
7743
|
+
setSuggestionSearch(val.text);
|
|
7342
7744
|
}
|
|
7343
|
-
var handleSubmit = React.useCallback(function (message) {
|
|
7745
|
+
var handleSubmit = React$1.useCallback(function (message) {
|
|
7344
7746
|
setSuggestionSearch("");
|
|
7345
|
-
setInput(
|
|
7346
|
-
|
|
7747
|
+
setInput({
|
|
7748
|
+
text: "",
|
|
7749
|
+
formats: []
|
|
7750
|
+
});
|
|
7751
|
+
onSubmit(message.text);
|
|
7347
7752
|
}, [onSubmit]);
|
|
7348
|
-
var handleItemClick = React.useCallback(function (data) {
|
|
7349
|
-
handleSubmit(data
|
|
7753
|
+
var handleItemClick = React$1.useCallback(function (data) {
|
|
7754
|
+
handleSubmit(data);
|
|
7350
7755
|
}, [handleSubmit]);
|
|
7351
|
-
var handleItemUse = React.useCallback(function (data) {
|
|
7352
|
-
setInput(data
|
|
7353
|
-
setSuggestionSearch(data.
|
|
7756
|
+
var handleItemUse = React$1.useCallback(function (data) {
|
|
7757
|
+
setInput(data);
|
|
7758
|
+
setSuggestionSearch(data.text);
|
|
7354
7759
|
}, []);
|
|
7355
|
-
return (React__default["default"].createElement("div", { className: "chat-footer" },
|
|
7760
|
+
return (React__default$1["default"].createElement("div", { className: "chat-footer" },
|
|
7356
7761
|
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,
|
|
7762
|
+
React__default$1["default"].createElement(React__default$1["default"].Fragment, null,
|
|
7763
|
+
React__default$1["default"].createElement(ChatMenu, { opened: drawer, onItemClick: handleMenuItem, items: menuItems }),
|
|
7764
|
+
React__default$1["default"].createElement("div", { className: "chat-footer__menu-icon" },
|
|
7765
|
+
React__default$1["default"].createElement(DrawerBars, { onToggle: toggleDrawer }))) : React__default$1["default"].createElement(React__default$1["default"].Fragment, null),
|
|
7766
|
+
((_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 }),
|
|
7767
|
+
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
7768
|
// onFocus={this.inputOnFocus}
|
|
7364
7769
|
onFileUpload: props.onFileUpload })));
|
|
7365
7770
|
};
|
|
@@ -7395,12 +7800,12 @@ var MiddlewareContextFactory = /** @class */ (function () {
|
|
|
7395
7800
|
var CardContainer = function (props) {
|
|
7396
7801
|
function renderIcon() {
|
|
7397
7802
|
var isString = typeof (props.icon) === "string";
|
|
7398
|
-
return (React__default["default"].createElement("div", { className: "card-container__icon" }, !isString && props.icon));
|
|
7803
|
+
return (React__default$1["default"].createElement("div", { className: "card-container__icon" }, !isString && props.icon));
|
|
7399
7804
|
}
|
|
7400
|
-
return (React__default["default"].createElement("div", { className: "card-container "
|
|
7805
|
+
return (React__default$1["default"].createElement("div", { className: "card-container ".concat(props.addClass) },
|
|
7401
7806
|
renderIcon(),
|
|
7402
|
-
React__default["default"].createElement("div", { className: "card-container__content "
|
|
7403
|
-
React__default["default"].createElement("div", { className: "card-container__title" }, props.title),
|
|
7807
|
+
React__default$1["default"].createElement("div", { className: "card-container__content ".concat(props.contentAddClass) },
|
|
7808
|
+
React__default$1["default"].createElement("div", { className: "card-container__title" }, props.title),
|
|
7404
7809
|
props.children)));
|
|
7405
7810
|
};
|
|
7406
7811
|
|
|
@@ -7415,13 +7820,13 @@ var defaultProps$2 = {
|
|
|
7415
7820
|
var ChatRating = function (props) {
|
|
7416
7821
|
if (props === void 0) { props = defaultProps$2; }
|
|
7417
7822
|
var onRate = props.onRate;
|
|
7418
|
-
var rateBadButtonOnClick = React.useCallback(function () {
|
|
7823
|
+
var rateBadButtonOnClick = React$1.useCallback(function () {
|
|
7419
7824
|
onRate("bad");
|
|
7420
7825
|
}, [onRate]);
|
|
7421
|
-
var rateGoodButtonOnClick = React.useCallback(function () {
|
|
7826
|
+
var rateGoodButtonOnClick = React$1.useCallback(function () {
|
|
7422
7827
|
onRate("good");
|
|
7423
7828
|
}, [onRate]);
|
|
7424
|
-
var rateAgainButtonOnClick = React.useCallback(function () {
|
|
7829
|
+
var rateAgainButtonOnClick = React$1.useCallback(function () {
|
|
7425
7830
|
onRate(undefined);
|
|
7426
7831
|
}, [onRate]);
|
|
7427
7832
|
// Do not think this prop should be here
|
|
@@ -7429,40 +7834,40 @@ var ChatRating = function (props) {
|
|
|
7429
7834
|
return null;
|
|
7430
7835
|
}
|
|
7431
7836
|
if (!props.hasRating) {
|
|
7432
|
-
return (React__default["default"].createElement(CardContainer, { title: "Chat Rating", addClass: "chat-rating-card" },
|
|
7837
|
+
return (React__default$1["default"].createElement(CardContainer, { title: "Chat Rating", addClass: "chat-rating-card" },
|
|
7433
7838
|
props.agent.displayName,
|
|
7434
7839
|
" 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 }))));
|
|
7840
|
+
React__default$1["default"].createElement("div", { className: "buttons-container" },
|
|
7841
|
+
React__default$1["default"].createElement(ActionButton, { addClass: "button button-rate-bad", label: "Rate Bad", onClick: rateBadButtonOnClick }),
|
|
7842
|
+
React__default$1["default"].createElement(ActionButton, { addClass: "button button-rate-good", label: "Rate Good", onClick: rateGoodButtonOnClick }))));
|
|
7438
7843
|
}
|
|
7439
7844
|
else {
|
|
7440
|
-
return (React__default["default"].createElement(CardContainer, { title: "Chat Rating", addClass: "chat-rating-card" },
|
|
7845
|
+
return (React__default$1["default"].createElement(CardContainer, { title: "Chat Rating", addClass: "chat-rating-card" },
|
|
7441
7846
|
"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 }))));
|
|
7847
|
+
React__default$1["default"].createElement("div", { className: "buttons-container" },
|
|
7848
|
+
React__default$1["default"].createElement(ActionButton, { addClass: "button button-rate-again", label: "Rate again", onClick: rateAgainButtonOnClick }))));
|
|
7444
7849
|
}
|
|
7445
7850
|
};
|
|
7446
7851
|
|
|
7447
7852
|
var ChatRatingContainer = function (props) {
|
|
7448
7853
|
var dispatch = useChatServerDispatch();
|
|
7449
|
-
var handleRate = React.useCallback(function (rating) {
|
|
7854
|
+
var handleRate = React$1.useCallback(function (rating) {
|
|
7450
7855
|
dispatch(sendChatRating(rating));
|
|
7451
7856
|
}, [dispatch]);
|
|
7452
|
-
return React__default["default"].createElement(ChatRating, { agent: props.agent, hasRating: props.hasRating, shouldDisplay: props.shouldDisplay, onRate: handleRate });
|
|
7857
|
+
return React__default$1["default"].createElement(ChatRating, { agent: props.agent, hasRating: props.hasRating, shouldDisplay: props.shouldDisplay, onRate: handleRate });
|
|
7453
7858
|
};
|
|
7454
7859
|
|
|
7455
7860
|
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" })));
|
|
7861
|
+
return (React__default$1["default"].createElement("svg", { className: "message-svg", width: "16", height: "12", viewBox: "0 0 16 12" },
|
|
7862
|
+
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
7863
|
};
|
|
7459
7864
|
|
|
7460
7865
|
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];
|
|
7866
|
+
var name = React$1.useRef(null);
|
|
7867
|
+
var email = React$1.useRef(null);
|
|
7868
|
+
var message = React$1.useRef(null);
|
|
7869
|
+
var form = React$1.useRef(null);
|
|
7870
|
+
var _a = React$1.useState(false), sent = _a[0], setSent = _a[1];
|
|
7466
7871
|
function emailChanged() {
|
|
7467
7872
|
var _a, _b, _c;
|
|
7468
7873
|
if ((_a = email.current) === null || _a === void 0 ? void 0 : _a.validity.patternMismatch) {
|
|
@@ -7490,53 +7895,53 @@ var MessageForm = function (props) {
|
|
|
7490
7895
|
setSent(false);
|
|
7491
7896
|
}
|
|
7492
7897
|
function renderSent() {
|
|
7493
|
-
return (React__default["default"].createElement("div", { key: "sent", className: "message-form--sent" },
|
|
7898
|
+
return (React__default$1["default"].createElement("div", { key: "sent", className: "message-form--sent" },
|
|
7494
7899
|
"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 })));
|
|
7900
|
+
React__default$1["default"].createElement(ActionButton, { addClass: "button-resend", label: "Send another", onClick: sendAnother })));
|
|
7496
7901
|
}
|
|
7497
7902
|
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()));
|
|
7903
|
+
return (React__default$1["default"].createElement("form", { ref: form, key: "not-sent", className: "message-form", onSubmit: send },
|
|
7904
|
+
React__default$1["default"].createElement("div", { className: "content" },
|
|
7905
|
+
React__default$1["default"].createElement("div", { className: "section" },
|
|
7906
|
+
React__default$1["default"].createElement("label", { className: "label" }, "Name"),
|
|
7907
|
+
React__default$1["default"].createElement("input", { ref: name, maxLength: 255 })),
|
|
7908
|
+
React__default$1["default"].createElement("div", { className: "section" },
|
|
7909
|
+
React__default$1["default"].createElement("label", { className: "label" }, "Email"),
|
|
7910
|
+
React__default$1["default"].createElement("input", { ref: email, onChange: emailChanged, type: "email", required: true, pattern: EMAIL_REGEX })),
|
|
7911
|
+
React__default$1["default"].createElement("div", { className: "section" },
|
|
7912
|
+
React__default$1["default"].createElement("label", { className: "label" }, "Message"),
|
|
7913
|
+
React__default$1["default"].createElement("textarea", { required: true, ref: message }))),
|
|
7914
|
+
React__default$1["default"].createElement("div", { className: "button-container" },
|
|
7915
|
+
React__default$1["default"].createElement(ActionButton, { type: "submit", addClass: "message-form__submit", label: "Send" }))));
|
|
7916
|
+
}
|
|
7917
|
+
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
7918
|
};
|
|
7514
7919
|
|
|
7515
7920
|
var OfflineForm = function (props) {
|
|
7516
|
-
return React__default["default"].createElement(MessageForm, { title: "Offline message card title", onSubmit: props.onSubmit });
|
|
7921
|
+
return React__default$1["default"].createElement(MessageForm, { title: "Offline message card title", onSubmit: props.onSubmit });
|
|
7517
7922
|
};
|
|
7518
7923
|
|
|
7519
7924
|
var OfflineFormContainer = function (_) {
|
|
7520
7925
|
var dispatch = useChatServerDispatch();
|
|
7521
|
-
var handleSubmit = React.useCallback(function (data) {
|
|
7926
|
+
var handleSubmit = React$1.useCallback(function (data) {
|
|
7522
7927
|
dispatch(sendOfflineMsg(data));
|
|
7523
7928
|
}, [dispatch]);
|
|
7524
|
-
return React__default["default"].createElement(OfflineForm, { onSubmit: handleSubmit });
|
|
7929
|
+
return React__default$1["default"].createElement(OfflineForm, { onSubmit: handleSubmit });
|
|
7525
7930
|
};
|
|
7526
7931
|
|
|
7527
7932
|
var PrechatForm = function (props) {
|
|
7528
|
-
var _a = React.useState(false), sent = _a[0], setSent = _a[1];
|
|
7933
|
+
var _a = React$1.useState(false), sent = _a[0], setSent = _a[1];
|
|
7529
7934
|
var onSubmit = props.onSubmit;
|
|
7530
|
-
var handleSubmit = React.useCallback(function (msg) {
|
|
7935
|
+
var handleSubmit = React$1.useCallback(function (msg) {
|
|
7531
7936
|
onSubmit(msg);
|
|
7532
7937
|
setSent(true);
|
|
7533
7938
|
}, [onSubmit]);
|
|
7534
|
-
return (React__default["default"].createElement(React__default["default"].Fragment, null, !sent && React__default["default"].createElement(MessageForm, { title: "Introduce yourself!", onSubmit: handleSubmit })));
|
|
7939
|
+
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
7940
|
};
|
|
7536
7941
|
|
|
7537
7942
|
var PrechatFormContainer = function (_) {
|
|
7538
7943
|
var dispatch = useChatServerDispatch();
|
|
7539
|
-
var handleSubmit = React.useCallback(function (data) {
|
|
7944
|
+
var handleSubmit = React$1.useCallback(function (data) {
|
|
7540
7945
|
// Don't send empty messages
|
|
7541
7946
|
if (!data.message)
|
|
7542
7947
|
return;
|
|
@@ -7546,7 +7951,7 @@ var PrechatFormContainer = function (_) {
|
|
|
7546
7951
|
}));
|
|
7547
7952
|
dispatch(executeAction(data.message));
|
|
7548
7953
|
}, [dispatch]);
|
|
7549
|
-
return React__default["default"].createElement(PrechatForm, { onSubmit: handleSubmit });
|
|
7954
|
+
return React__default$1["default"].createElement(PrechatForm, { onSubmit: handleSubmit });
|
|
7550
7955
|
};
|
|
7551
7956
|
|
|
7552
7957
|
var defaultProps$1 = {
|
|
@@ -7556,8 +7961,8 @@ var QueuePosition = function (props) {
|
|
|
7556
7961
|
if (props === void 0) { props = defaultProps$1; }
|
|
7557
7962
|
if (props.position <= 0)
|
|
7558
7963
|
return null;
|
|
7559
|
-
return (React__default["default"].createElement("div", { className: "system-msg-container" },
|
|
7560
|
-
React__default["default"].createElement("span", { className: "system-msg" },
|
|
7964
|
+
return (React__default$1["default"].createElement("div", { className: "system-msg-container" },
|
|
7965
|
+
React__default$1["default"].createElement("span", { className: "system-msg" },
|
|
7561
7966
|
"Queue position: ",
|
|
7562
7967
|
props.position)));
|
|
7563
7968
|
};
|
|
@@ -7565,34 +7970,34 @@ var QueuePosition = function (props) {
|
|
|
7565
7970
|
function getMessageByType(msg) {
|
|
7566
7971
|
switch (msg.type) {
|
|
7567
7972
|
case "chat.memberjoin":
|
|
7568
|
-
return msg.user.displayName
|
|
7973
|
+
return "".concat(msg.user.displayName, " has joined the chat");
|
|
7569
7974
|
case "chat.memberleave":
|
|
7570
|
-
return msg.user.displayName
|
|
7975
|
+
return "".concat(msg.user.displayName, " has left the chat");
|
|
7571
7976
|
case "chat.rating":
|
|
7572
7977
|
if (!msg.newRating) {
|
|
7573
7978
|
return "You have removed the chat rating";
|
|
7574
7979
|
}
|
|
7575
7980
|
else {
|
|
7576
7981
|
var rating = convertToSentenceCase(msg.newRating);
|
|
7577
|
-
return "You have rated the chat service "
|
|
7982
|
+
return "You have rated the chat service ".concat(rating);
|
|
7578
7983
|
}
|
|
7579
7984
|
default:
|
|
7580
7985
|
return JSON.stringify(msg);
|
|
7581
7986
|
}
|
|
7582
7987
|
}
|
|
7583
7988
|
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))));
|
|
7989
|
+
return (React__default$1["default"].createElement("div", { className: "system-msg-container" },
|
|
7990
|
+
React__default$1["default"].createElement("span", { className: "system-msg" }, getMessageByType(props.message))));
|
|
7586
7991
|
};
|
|
7587
7992
|
function convertToSentenceCase(s) {
|
|
7588
7993
|
return s[0].toUpperCase() + s.slice(1);
|
|
7589
7994
|
}
|
|
7590
7995
|
|
|
7591
7996
|
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" })));
|
|
7997
|
+
return (React__default$1["default"].createElement("div", { className: "typing-indicator" },
|
|
7998
|
+
React__default$1["default"].createElement("div", { className: "typing-indicator-part" }),
|
|
7999
|
+
React__default$1["default"].createElement("div", { className: "typing-indicator-part" }),
|
|
8000
|
+
React__default$1["default"].createElement("div", { className: "typing-indicator-part" })));
|
|
7596
8001
|
};
|
|
7597
8002
|
|
|
7598
8003
|
/**
|
|
@@ -7601,13 +8006,13 @@ var TypingIndicator = function (_) {
|
|
|
7601
8006
|
var TypingStatus = function (props) {
|
|
7602
8007
|
var agent_names = Object.values(props.agents)
|
|
7603
8008
|
.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.user.nick, className: "chat-msg-container agent chat-typing-progress" },
|
|
7607
|
-
React__default["default"].createElement(ChatMessagePart, { user: agent.user, 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)))))));
|
|
8009
|
+
return (React__default$1["default"].createElement(React__default$1["default"].Fragment, null, agent_names.map(function (agent) {
|
|
8010
|
+
return (React__default$1["default"].createElement("div", { className: "chat-msg-container-wrapper", key: "typing-status-".concat(agent.user.nick) },
|
|
8011
|
+
React__default$1["default"].createElement("div", { key: agent.user.nick, className: "chat-msg-container agent chat-typing-progress" },
|
|
8012
|
+
React__default$1["default"].createElement(ChatMessagePart, { user: agent.user, showAvatar: true },
|
|
8013
|
+
React__default$1["default"].createElement("div", { className: "chat-msg" },
|
|
8014
|
+
React__default$1["default"].createElement(ChatMessageBubble, { owner: "others", hasTail: true },
|
|
8015
|
+
React__default$1["default"].createElement(TypingIndicator, null)))))));
|
|
7611
8016
|
})));
|
|
7612
8017
|
};
|
|
7613
8018
|
|
|
@@ -7628,19 +8033,19 @@ var defaultProps = {
|
|
|
7628
8033
|
var MessageList = function (props) {
|
|
7629
8034
|
if (props === void 0) { props = defaultProps; }
|
|
7630
8035
|
var onSend = props.onSend, onWrite = props.onWrite, onOpenUrl = props.onOpenUrl;
|
|
7631
|
-
var messagesEndRef = React.useRef(null);
|
|
7632
|
-
React.useEffect(function () {
|
|
8036
|
+
var messagesEndRef = React$1.useRef(null);
|
|
8037
|
+
React$1.useEffect(function () {
|
|
7633
8038
|
messagesEndRef.current.scrollIntoView({ behavior: "smooth" });
|
|
7634
8039
|
}, [props.messages]);
|
|
7635
|
-
var handleSend = React.useCallback(function (msg) {
|
|
8040
|
+
var handleSend = React$1.useCallback(function (msg) {
|
|
7636
8041
|
onSend(msg);
|
|
7637
8042
|
messagesEndRef.current.scrollIntoView({ behavior: "smooth" });
|
|
7638
8043
|
}, [onSend]);
|
|
7639
|
-
var handleWrite = React.useCallback(function (msg) {
|
|
8044
|
+
var handleWrite = React$1.useCallback(function (msg) {
|
|
7640
8045
|
onWrite(msg);
|
|
7641
8046
|
messagesEndRef.current.scrollIntoView({ behavior: "smooth" });
|
|
7642
8047
|
}, [onWrite]);
|
|
7643
|
-
var ctxCache = React.useMemo(function () { return new MiddlewareContextFactory({
|
|
8048
|
+
var ctxCache = React$1.useMemo(function () { return new MiddlewareContextFactory({
|
|
7644
8049
|
send: handleSend,
|
|
7645
8050
|
write: handleWrite,
|
|
7646
8051
|
openUrl: onOpenUrl
|
|
@@ -7657,20 +8062,20 @@ var MessageList = function (props) {
|
|
|
7657
8062
|
switch (msg.type) {
|
|
7658
8063
|
case "chat.file":
|
|
7659
8064
|
case "chat.msg":
|
|
7660
|
-
return (React__default["default"].createElement(ChatMessage, { key: msg.type + msg.timestamp, message: msg, sibling: sibling, agent: user, messageMiddleware: props.messageMiddleware, middlewareContext: ctxCache.resolve(user) }));
|
|
8065
|
+
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) }));
|
|
7661
8066
|
case "chat.memberjoin":
|
|
7662
8067
|
case "chat.memberleave":
|
|
7663
8068
|
case "chat.rating":
|
|
7664
8069
|
case "chat.typing":
|
|
7665
|
-
return (React__default["default"].createElement(SystemMessage, { key: msg.type + msg.timestamp, message: msg }));
|
|
8070
|
+
return (React__default$1["default"].createElement(SystemMessage, { key: msg.type + msg.timestamp, message: msg }));
|
|
7666
8071
|
case "chat.request.rating":
|
|
7667
|
-
return (React__default["default"].createElement(ChatRatingContainer, { key: msg.type + msg.timestamp, agent: user, hasRating: props.hasRating, shouldDisplay: msg.timestamp === props.lastRatingRequestTimestamp }));
|
|
8072
|
+
return (React__default$1["default"].createElement(ChatRatingContainer, { key: msg.type + msg.timestamp, agent: user, hasRating: props.hasRating, shouldDisplay: msg.timestamp === props.lastRatingRequestTimestamp }));
|
|
7668
8073
|
case "chat.offline":
|
|
7669
|
-
return React__default["default"].createElement(OfflineFormContainer, { key: "offline-"
|
|
8074
|
+
return React__default$1["default"].createElement(OfflineFormContainer, { key: "offline-".concat(msg.timestamp) });
|
|
7670
8075
|
case "chat.prechat":
|
|
7671
|
-
return React__default["default"].createElement(PrechatFormContainer, { key: "prechat" });
|
|
8076
|
+
return React__default$1["default"].createElement(PrechatFormContainer, { key: "prechat" });
|
|
7672
8077
|
default:
|
|
7673
|
-
return React__default["default"].createElement("div", { key: +new Date() },
|
|
8078
|
+
return React__default$1["default"].createElement("div", { key: +new Date() },
|
|
7674
8079
|
"Unhandled message: ",
|
|
7675
8080
|
JSON.stringify(msg));
|
|
7676
8081
|
}
|
|
@@ -7693,23 +8098,23 @@ var MessageList = function (props) {
|
|
|
7693
8098
|
});
|
|
7694
8099
|
}
|
|
7695
8100
|
var agents = props.agents, queuePosition = props.queuePosition;
|
|
7696
|
-
return (React__default["default"].createElement("div", { className: "message-list-container" },
|
|
7697
|
-
React__default["default"].createElement("div", { className: "message-list-container__msgs" },
|
|
8101
|
+
return (React__default$1["default"].createElement("div", { className: "message-list-container" },
|
|
8102
|
+
React__default$1["default"].createElement("div", { className: "message-list-container__msgs" },
|
|
7698
8103
|
renderAll(),
|
|
7699
|
-
React__default["default"].createElement("div", { ref: messagesEndRef, style: { float: "left", clear: "both" } }),
|
|
7700
|
-
React__default["default"].createElement(QueuePosition, { position: queuePosition }),
|
|
7701
|
-
React__default["default"].createElement(TypingStatus, { agents: agents })),
|
|
7702
|
-
React__default["default"].createElement(ChatChipsContainer, null)));
|
|
8104
|
+
React__default$1["default"].createElement("div", { ref: messagesEndRef, style: { float: "left", clear: "both" } }),
|
|
8105
|
+
React__default$1["default"].createElement(QueuePosition, { position: queuePosition }),
|
|
8106
|
+
React__default$1["default"].createElement(TypingStatus, { agents: agents })),
|
|
8107
|
+
React__default$1["default"].createElement(ChatChipsContainer, null)));
|
|
7703
8108
|
};
|
|
7704
8109
|
|
|
7705
8110
|
var ServerOffline = function () {
|
|
7706
|
-
return React__default["default"].createElement("div", { className: "server-offline" },
|
|
7707
|
-
React__default["default"].createElement("h2", null, "Chat is currently unavailable"),
|
|
7708
|
-
React__default["default"].createElement("h3", null, "Server is offline"));
|
|
8111
|
+
return React__default$1["default"].createElement("div", { className: "server-offline" },
|
|
8112
|
+
React__default$1["default"].createElement("h2", null, "Chat is currently unavailable"),
|
|
8113
|
+
React__default$1["default"].createElement("h3", null, "Server is offline"));
|
|
7709
8114
|
};
|
|
7710
8115
|
|
|
7711
8116
|
var MinimizeButton = function (props) {
|
|
7712
|
-
return React__default["default"].createElement("div", { className: "minimize-button", onClick: props.onClick });
|
|
8117
|
+
return React__default$1["default"].createElement("div", { className: "minimize-button", onClick: props.onClick });
|
|
7713
8118
|
};
|
|
7714
8119
|
|
|
7715
8120
|
var DEFAULT_STATUS_CONFIG = {
|
|
@@ -7729,23 +8134,23 @@ function getStatusText(status, config) {
|
|
|
7729
8134
|
}
|
|
7730
8135
|
var StatusContainer = function (props) {
|
|
7731
8136
|
var _a;
|
|
7732
|
-
return (React__default["default"].createElement("div", { className: "status-container" },
|
|
7733
|
-
React__default["default"].createElement("div", { className: "status-container__avatar" },
|
|
7734
|
-
React__default["default"].createElement(Avatar, { entity: props.agent })),
|
|
7735
|
-
React__default["default"].createElement("div", { className: "status-text" },
|
|
7736
|
-
React__default["default"].createElement("span", null, getStatusText(props.accountStatus, (_a = props.config) === null || _a === void 0 ? void 0 : _a.status))),
|
|
8137
|
+
return (React__default$1["default"].createElement("div", { className: "status-container" },
|
|
8138
|
+
React__default$1["default"].createElement("div", { className: "status-container__avatar" },
|
|
8139
|
+
React__default$1["default"].createElement(Avatar, { entity: props.agent })),
|
|
8140
|
+
React__default$1["default"].createElement("div", { className: "status-text" },
|
|
8141
|
+
React__default$1["default"].createElement("span", null, getStatusText(props.accountStatus, (_a = props.config) === null || _a === void 0 ? void 0 : _a.status))),
|
|
7737
8142
|
props.canMinimize &&
|
|
7738
|
-
React__default["default"].createElement(MinimizeButton, { onClick: props.minimizeOnClick })));
|
|
8143
|
+
React__default$1["default"].createElement(MinimizeButton, { onClick: props.minimizeOnClick })));
|
|
7739
8144
|
};
|
|
7740
8145
|
|
|
7741
8146
|
function buildStyleContent(theme) {
|
|
7742
8147
|
var _a, _b, _c, _d;
|
|
7743
|
-
return "\n:root {\n"
|
|
8148
|
+
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}");
|
|
7744
8149
|
}
|
|
7745
8150
|
function WidgetStylesheet(props) {
|
|
7746
8151
|
var theme = props.theme;
|
|
7747
8152
|
var stylesContent = buildStyleContent(theme);
|
|
7748
|
-
return (React__default["default"].createElement("style", null, stylesContent));
|
|
8153
|
+
return (React__default$1["default"].createElement("style", null, stylesContent));
|
|
7749
8154
|
}
|
|
7750
8155
|
function buildVariables(gen) {
|
|
7751
8156
|
var result = gen.next();
|
|
@@ -7753,7 +8158,7 @@ function buildVariables(gen) {
|
|
|
7753
8158
|
while (result.done === false) {
|
|
7754
8159
|
var _a = result.value, key = _a[0], value = _a[1];
|
|
7755
8160
|
if (value !== undefined && value !== null && value !== "") {
|
|
7756
|
-
res += key
|
|
8161
|
+
res += "".concat(key, ": ").concat(value, ";\n\r");
|
|
7757
8162
|
}
|
|
7758
8163
|
result = gen.next();
|
|
7759
8164
|
}
|
|
@@ -7761,14 +8166,14 @@ function buildVariables(gen) {
|
|
|
7761
8166
|
}
|
|
7762
8167
|
function withPrefix(prefix, gen) {
|
|
7763
8168
|
var result;
|
|
7764
|
-
return __generator(this, function (_a) {
|
|
8169
|
+
return __generator$1(this, function (_a) {
|
|
7765
8170
|
switch (_a.label) {
|
|
7766
8171
|
case 0:
|
|
7767
8172
|
result = gen.next();
|
|
7768
8173
|
_a.label = 1;
|
|
7769
8174
|
case 1:
|
|
7770
8175
|
if (!!result.done) return [3 /*break*/, 3];
|
|
7771
|
-
return [4 /*yield*/, [""
|
|
8176
|
+
return [4 /*yield*/, ["".concat(prefix).concat(result.value[0]), result.value[1]]];
|
|
7772
8177
|
case 2:
|
|
7773
8178
|
_a.sent();
|
|
7774
8179
|
result = gen.next();
|
|
@@ -7783,7 +8188,7 @@ function union() {
|
|
|
7783
8188
|
for (_i = 0; _i < arguments.length; _i++) {
|
|
7784
8189
|
children[_i] = arguments[_i];
|
|
7785
8190
|
}
|
|
7786
|
-
return __generator(this, function (_b) {
|
|
8191
|
+
return __generator$1(this, function (_b) {
|
|
7787
8192
|
switch (_b.label) {
|
|
7788
8193
|
case 0:
|
|
7789
8194
|
_a = 0, children_1 = children;
|
|
@@ -7808,7 +8213,7 @@ function union() {
|
|
|
7808
8213
|
});
|
|
7809
8214
|
}
|
|
7810
8215
|
function single(key, value) {
|
|
7811
|
-
return __generator(this, function (_a) {
|
|
8216
|
+
return __generator$1(this, function (_a) {
|
|
7812
8217
|
switch (_a.label) {
|
|
7813
8218
|
case 0: return [4 /*yield*/, [key, value]];
|
|
7814
8219
|
case 1:
|
|
@@ -7818,7 +8223,7 @@ function single(key, value) {
|
|
|
7818
8223
|
});
|
|
7819
8224
|
}
|
|
7820
8225
|
function empty() {
|
|
7821
|
-
return __generator(this, function (_a) {
|
|
8226
|
+
return __generator$1(this, function (_a) {
|
|
7822
8227
|
return [2 /*return*/];
|
|
7823
8228
|
});
|
|
7824
8229
|
}
|
|
@@ -7838,7 +8243,7 @@ function getMessageStyle(style) {
|
|
|
7838
8243
|
return union(single('bubble-color', style === null || style === void 0 ? void 0 : style.bubbleColor), getTextStyle(style === null || style === void 0 ? void 0 : style.text));
|
|
7839
8244
|
}
|
|
7840
8245
|
function getSize(style) {
|
|
7841
|
-
return __generator(this, function (_a) {
|
|
8246
|
+
return __generator$1(this, function (_a) {
|
|
7842
8247
|
switch (_a.label) {
|
|
7843
8248
|
case 0: return [4 /*yield*/, ['width', style === null || style === void 0 ? void 0 : style.width]];
|
|
7844
8249
|
case 1:
|
|
@@ -7851,7 +8256,7 @@ function getSize(style) {
|
|
|
7851
8256
|
});
|
|
7852
8257
|
}
|
|
7853
8258
|
function getMargins(style) {
|
|
7854
|
-
return __generator(this, function (_a) {
|
|
8259
|
+
return __generator$1(this, function (_a) {
|
|
7855
8260
|
switch (_a.label) {
|
|
7856
8261
|
case 0:
|
|
7857
8262
|
if (!style) return [3 /*break*/, 5];
|
|
@@ -7873,7 +8278,7 @@ function getMargins(style) {
|
|
|
7873
8278
|
});
|
|
7874
8279
|
}
|
|
7875
8280
|
function getPaddings(style) {
|
|
7876
|
-
return __generator(this, function (_a) {
|
|
8281
|
+
return __generator$1(this, function (_a) {
|
|
7877
8282
|
switch (_a.label) {
|
|
7878
8283
|
case 0:
|
|
7879
8284
|
if (!style) return [3 /*break*/, 5];
|
|
@@ -7895,7 +8300,7 @@ function getPaddings(style) {
|
|
|
7895
8300
|
});
|
|
7896
8301
|
}
|
|
7897
8302
|
function getTextStyle(style) {
|
|
7898
|
-
return __generator(this, function (_a) {
|
|
8303
|
+
return __generator$1(this, function (_a) {
|
|
7899
8304
|
switch (_a.label) {
|
|
7900
8305
|
case 0:
|
|
7901
8306
|
if (!style) return [3 /*break*/, 6];
|
|
@@ -7920,7 +8325,7 @@ function getTextStyle(style) {
|
|
|
7920
8325
|
});
|
|
7921
8326
|
}
|
|
7922
8327
|
function getBackgroundStyle(style) {
|
|
7923
|
-
return __generator(this, function (_a) {
|
|
8328
|
+
return __generator$1(this, function (_a) {
|
|
7924
8329
|
switch (_a.label) {
|
|
7925
8330
|
case 0: return [4 /*yield*/, ["background", style]];
|
|
7926
8331
|
case 1:
|
|
@@ -7930,7 +8335,7 @@ function getBackgroundStyle(style) {
|
|
|
7930
8335
|
});
|
|
7931
8336
|
}
|
|
7932
8337
|
function getButtonStyle(style) {
|
|
7933
|
-
return __generator(this, function (_a) {
|
|
8338
|
+
return __generator$1(this, function (_a) {
|
|
7934
8339
|
switch (_a.label) {
|
|
7935
8340
|
case 0: return [4 /*yield*/, ['button-color', style === null || style === void 0 ? void 0 : style.color]];
|
|
7936
8341
|
case 1:
|
|
@@ -7946,7 +8351,7 @@ function getMenuStyle(style) {
|
|
|
7946
8351
|
return union(withPrefix("item-", getMenuItemStyle(style === null || style === void 0 ? void 0 : style.item)));
|
|
7947
8352
|
}
|
|
7948
8353
|
function getBorderStyle(style) {
|
|
7949
|
-
return __generator(this, function (_a) {
|
|
8354
|
+
return __generator$1(this, function (_a) {
|
|
7950
8355
|
switch (_a.label) {
|
|
7951
8356
|
case 0:
|
|
7952
8357
|
if (!style) return [3 /*break*/, 4];
|
|
@@ -7992,14 +8397,14 @@ function getCtaStyle(style) {
|
|
|
7992
8397
|
var ChatWidgetWrapper = function (props) {
|
|
7993
8398
|
var rawConfig = props.config;
|
|
7994
8399
|
var connection = useConnectionInfo(rawConfig);
|
|
7995
|
-
var config = React.useMemo(function () {
|
|
8400
|
+
var config = React$1.useMemo(function () {
|
|
7996
8401
|
var _a;
|
|
7997
8402
|
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 }));
|
|
7998
8403
|
}, [connection, rawConfig]);
|
|
7999
8404
|
var chatServer = useChatServer(connection);
|
|
8000
|
-
return (React__default["default"].createElement(ChatConfigContext.Provider, { value: config },
|
|
8001
|
-
React__default["default"].createElement(ChatServerContext.Provider, { value: chatServer },
|
|
8002
|
-
React__default["default"].createElement(ChatWidget, __assign({}, props)))));
|
|
8405
|
+
return (React__default$1["default"].createElement(ChatConfigContext.Provider, { value: config },
|
|
8406
|
+
React__default$1["default"].createElement(ChatServerContext.Provider, { value: chatServer },
|
|
8407
|
+
React__default$1["default"].createElement(ChatWidget, __assign({}, props)))));
|
|
8003
8408
|
};
|
|
8004
8409
|
var ChatWidget = function (props) {
|
|
8005
8410
|
var _a, _b, _c, _d, _e, _f;
|
|
@@ -8010,12 +8415,12 @@ var ChatWidget = function (props) {
|
|
|
8010
8415
|
var mode = (_a = props.mode) !== null && _a !== void 0 ? _a : "normal";
|
|
8011
8416
|
var dockedMode = mode === "docked";
|
|
8012
8417
|
var staticMode = mode === "static";
|
|
8013
|
-
var modeClass = "widget-container--"
|
|
8418
|
+
var modeClass = "widget-container--".concat(mode);
|
|
8014
8419
|
var canMinimize = !dockedMode && !staticMode;
|
|
8015
8420
|
// Our state - pull from storage
|
|
8016
|
-
var _g = React.useState(!canMinimize || !!get("visible)") || (((_b = props.config) === null || _b === void 0 ? void 0 : _b.autoOpenOnWidth) && window.matchMedia("(min-width: "
|
|
8017
|
-
var _h = React.useState(false), typing = _h[0], setTypingState = _h[1]; // false initially
|
|
8018
|
-
var chatServer = React.useContext(ChatServerContext);
|
|
8421
|
+
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];
|
|
8422
|
+
var _h = React$1.useState(false), typing = _h[0], setTypingState = _h[1]; // false initially
|
|
8423
|
+
var chatServer = React$1.useContext(ChatServerContext);
|
|
8019
8424
|
function setVisible(newVisible) {
|
|
8020
8425
|
if (staticMode) {
|
|
8021
8426
|
return;
|
|
@@ -8109,22 +8514,22 @@ var ChatWidget = function (props) {
|
|
|
8109
8514
|
useGreeting(!isOffline && !props.preChatFormEnabled && visible);
|
|
8110
8515
|
var config = props.config, onConnectionStatusChange = props.onConnectionStatusChange;
|
|
8111
8516
|
var connectionStatus = chatState.connection.connectionStatus;
|
|
8112
|
-
React.useEffect(function () {
|
|
8517
|
+
React$1.useEffect(function () {
|
|
8113
8518
|
if (onConnectionStatusChange) {
|
|
8114
8519
|
onConnectionStatusChange(connectionStatus);
|
|
8115
8520
|
}
|
|
8116
8521
|
}, [connectionStatus, onConnectionStatusChange]);
|
|
8117
8522
|
useExternalScript((_d = props.config) === null || _d === void 0 ? void 0 : _d.middlewareUrl);
|
|
8118
|
-
return (React__default["default"].createElement(React__default["default"].Fragment, null,
|
|
8119
|
-
React__default["default"].createElement("div", { className: "widget-container "
|
|
8120
|
-
React__default["default"].createElement(WidgetStylesheet, { theme: config === null || config === void 0 ? void 0 : config.theme }),
|
|
8121
|
-
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 }),
|
|
8122
|
-
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 }),
|
|
8123
|
-
React__default["default"].createElement("div", { className: "spinner-container "
|
|
8124
|
-
React__default["default"].createElement("div", { className: "spinner" })),
|
|
8125
|
-
connectionStatus === "offline" && React__default["default"].createElement(ServerOffline, null),
|
|
8126
|
-
React__default["default"].createElement(ChatFooter, { isChatting: chatState.isChatting, onChange: handleOnChange, onSubmit: handleOnSubmit, onFileUpload: handleFileUpload })),
|
|
8127
|
-
React__default["default"].createElement(ChatButton, { addClass: getVisibilityClass(), onClick: chatButtonOnClick, config: (_f = props.config) === null || _f === void 0 ? void 0 : _f.cta, visible: visible })));
|
|
8523
|
+
return (React__default$1["default"].createElement(React__default$1["default"].Fragment, null,
|
|
8524
|
+
React__default$1["default"].createElement("div", { className: "widget-container ".concat(modeClass, " ").concat(getVisibilityClass()) },
|
|
8525
|
+
React__default$1["default"].createElement(WidgetStylesheet, { theme: config === null || config === void 0 ? void 0 : config.theme }),
|
|
8526
|
+
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 }),
|
|
8527
|
+
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 }),
|
|
8528
|
+
React__default$1["default"].createElement("div", { className: "spinner-container ".concat(visible && connectionStatus === "pending" ? "visible" : "") },
|
|
8529
|
+
React__default$1["default"].createElement("div", { className: "spinner" })),
|
|
8530
|
+
connectionStatus === "offline" && React__default$1["default"].createElement(ServerOffline, null),
|
|
8531
|
+
React__default$1["default"].createElement(ChatFooter, { isChatting: chatState.isChatting, onChange: handleOnChange, onSubmit: handleOnSubmit, onFileUpload: handleFileUpload })),
|
|
8532
|
+
React__default$1["default"].createElement(ChatButton, { addClass: getVisibilityClass(), onClick: chatButtonOnClick, config: (_f = props.config) === null || _f === void 0 ? void 0 : _f.cta, visible: visible })));
|
|
8128
8533
|
};
|
|
8129
8534
|
|
|
8130
8535
|
function tryParseJson(str) {
|
|
@@ -8163,7 +8568,7 @@ var BrowserStateStorage = /** @class */ (function () {
|
|
|
8163
8568
|
* @returns {string}
|
|
8164
8569
|
*/
|
|
8165
8570
|
function visitorFingerprint() {
|
|
8166
|
-
return
|
|
8571
|
+
return uuid_1();
|
|
8167
8572
|
}
|
|
8168
8573
|
|
|
8169
8574
|
var DEFAULT_VISITOR = {
|
|
@@ -8219,7 +8624,7 @@ function connectionReducer(state, action) {
|
|
|
8219
8624
|
}
|
|
8220
8625
|
|
|
8221
8626
|
function joinMessages(messages, msg) {
|
|
8222
|
-
return insertSorted(__spreadArray([], messages, true), msg, function (left, right) { return left.timestamp - right.timestamp; });
|
|
8627
|
+
return insertSorted(__spreadArray$1([], messages, true), msg, function (left, right) { return left.timestamp - right.timestamp; });
|
|
8223
8628
|
}
|
|
8224
8629
|
|
|
8225
8630
|
function memberJoin(state, detail) {
|
|
@@ -8250,7 +8655,7 @@ function memberLeave(state, detail) {
|
|
|
8250
8655
|
|
|
8251
8656
|
function resetReducer(state) {
|
|
8252
8657
|
if (state === void 0) { state = DEFAULT_STATE; }
|
|
8253
|
-
return __assign(__assign({}, createDefaultState()), { connection: __assign(__assign({}, state.connection), { nonce:
|
|
8658
|
+
return __assign(__assign({}, createDefaultState()), { connection: __assign(__assign({}, state.connection), { nonce: uuid_1() }), visitor: state.visitor, visitorId: state.visitorId });
|
|
8254
8659
|
}
|
|
8255
8660
|
|
|
8256
8661
|
// todo: create reducer (requires redux-thunk dependncy)
|
|
@@ -8349,7 +8754,7 @@ function mapSynthetic(state, action) {
|
|
|
8349
8754
|
}
|
|
8350
8755
|
};
|
|
8351
8756
|
default:
|
|
8352
|
-
throw new Error("Unknown synthetic action. Detail type: "
|
|
8757
|
+
throw new Error("Unknown synthetic action. Detail type: ".concat(action.detail.type));
|
|
8353
8758
|
}
|
|
8354
8759
|
}
|
|
8355
8760
|
function storeHandler(state, action) {
|
|
@@ -8364,13 +8769,14 @@ function storeHandler(state, action) {
|
|
|
8364
8769
|
}
|
|
8365
8770
|
}
|
|
8366
8771
|
|
|
8367
|
-
function createChatStore(config) {
|
|
8368
|
-
|
|
8772
|
+
function createChatStore(config, dataStorage) {
|
|
8773
|
+
if (dataStorage === void 0) { dataStorage = sessionStorage; }
|
|
8774
|
+
var storage = new BrowserStateStorage(dataStorage, "xappchat.".concat(config.serverUrl, ".").concat(config.accountKey));
|
|
8369
8775
|
var chatReducer = persistStateReducer(storage, DEFAULT_STATE, storeHandler);
|
|
8370
8776
|
var middlewares = [
|
|
8371
8777
|
thunk__default["default"]
|
|
8372
8778
|
];
|
|
8373
|
-
var composeEnhancers =
|
|
8779
|
+
var composeEnhancers = globalThis.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || redux.compose;
|
|
8374
8780
|
return redux.createStore(chatReducer, composeEnhancers(redux.applyMiddleware.apply(void 0, middlewares)));
|
|
8375
8781
|
}
|
|
8376
8782
|
|
|
@@ -8378,13 +8784,13 @@ var ChatWidgetContainer = function (props) {
|
|
|
8378
8784
|
var _a;
|
|
8379
8785
|
var messageMiddleware = useStandardMiddleware();
|
|
8380
8786
|
var connection = useServerConfig(props.config);
|
|
8381
|
-
var chatStore = React.useMemo(function () { return createChatStore(connection); }, [connection]);
|
|
8787
|
+
var chatStore = React$1.useMemo(function () { return createChatStore(connection); }, [connection]);
|
|
8382
8788
|
if ((_a = props.config) === null || _a === void 0 ? void 0 : _a.disabled) {
|
|
8383
|
-
return React__default["default"].createElement(React__default["default"].Fragment, null);
|
|
8789
|
+
return React__default$1["default"].createElement(React__default$1["default"].Fragment, null);
|
|
8384
8790
|
}
|
|
8385
8791
|
var widgetProps = __assign(__assign({}, props), { messageMiddleware: messageMiddleware });
|
|
8386
|
-
return (React__default["default"].createElement(reactRedux.Provider, { store: chatStore },
|
|
8387
|
-
React__default["default"].createElement(ChatWidgetWrapper, __assign({}, widgetProps))));
|
|
8792
|
+
return (React__default$1["default"].createElement(reactRedux.Provider, { store: chatStore },
|
|
8793
|
+
React__default$1["default"].createElement(ChatWidgetWrapper, __assign({}, widgetProps))));
|
|
8388
8794
|
};
|
|
8389
8795
|
|
|
8390
8796
|
function createStaticReducer(state) {
|
|
@@ -8405,35 +8811,35 @@ function createStaticStore(state) {
|
|
|
8405
8811
|
|
|
8406
8812
|
var StaticChatWidgetContainer = function (props) {
|
|
8407
8813
|
var state = props.state;
|
|
8408
|
-
var store = React.useMemo(function () {
|
|
8814
|
+
var store = React$1.useMemo(function () {
|
|
8409
8815
|
return createStaticStore(state);
|
|
8410
8816
|
}, [state]);
|
|
8411
|
-
var config = React.useMemo(function () {
|
|
8817
|
+
var config = React$1.useMemo(function () {
|
|
8412
8818
|
return __assign(__assign({}, props.config), { connection: {
|
|
8413
8819
|
serverUrl: "",
|
|
8414
8820
|
type: "local"
|
|
8415
8821
|
} });
|
|
8416
8822
|
}, [props.config]);
|
|
8417
|
-
return (React__default["default"].createElement(reactRedux.Provider, { store: store },
|
|
8418
|
-
React__default["default"].createElement(ChatWidgetWrapper, __assign({}, props, { config: config }))));
|
|
8823
|
+
return (React__default$1["default"].createElement(reactRedux.Provider, { store: store },
|
|
8824
|
+
React__default$1["default"].createElement(ChatWidgetWrapper, __assign({}, props, { config: config }))));
|
|
8419
8825
|
};
|
|
8420
8826
|
|
|
8421
8827
|
function createStateFromMessages(messages) {
|
|
8422
8828
|
var def = createDefaultState();
|
|
8423
|
-
return __assign(__assign({}, def), { connection: __assign(__assign({}, def.connection), { connectionStatus: "online" }), accountStatus: "online", chats: __spreadArray([], messages, true), isChatting: true });
|
|
8829
|
+
return __assign(__assign({}, def), { connection: __assign(__assign({}, def.connection), { connectionStatus: "online" }), accountStatus: "online", chats: __spreadArray$1([], messages, true), isChatting: true });
|
|
8424
8830
|
}
|
|
8425
8831
|
|
|
8426
8832
|
var StaticMessagesChatWidgetContainer = function (props) {
|
|
8427
8833
|
var messages = props.messages;
|
|
8428
|
-
var state = React.useMemo(function () {
|
|
8834
|
+
var state = React$1.useMemo(function () {
|
|
8429
8835
|
return createStateFromMessages(messages);
|
|
8430
8836
|
}, [messages]);
|
|
8431
|
-
return (React__default["default"].createElement(StaticChatWidgetContainer, { state: state, mode: props.mode, config: props.config }));
|
|
8837
|
+
return (React__default$1["default"].createElement(StaticChatWidgetContainer, { state: state, mode: props.mode, config: props.config }));
|
|
8432
8838
|
};
|
|
8433
8839
|
|
|
8434
8840
|
Object.defineProperty(exports, 'React', {
|
|
8435
8841
|
enumerable: true,
|
|
8436
|
-
get: function () { return React__default["default"]; }
|
|
8842
|
+
get: function () { return React__default$1["default"]; }
|
|
8437
8843
|
});
|
|
8438
8844
|
exports.ActionButton = ActionButton;
|
|
8439
8845
|
exports.Avatar = Avatar;
|