@xapp/chat-widget 1.29.0 → 1.31.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/App.d.ts +1 -0
- package/dist/components/ChatMedia/ChatMedia.d.ts +4 -1
- package/dist/components/Input/Input.d.ts +5 -5
- package/dist/components/Input/Input.stories.d.ts +2 -1
- package/dist/components/Input/index.d.ts +1 -1
- package/dist/components/MessageList/MessageList.d.ts +2 -1
- package/dist/components/SendButton/SendButton.d.ts +1 -0
- package/dist/components/Suggestions/Suggestions.d.ts +5 -4
- package/dist/components/Suggestions/Suggestions.stories.d.ts +0 -1
- package/dist/components/Suggestions/data.d.ts +2 -23
- package/dist/components/TypingStatus/TypingStatus.d.ts +2 -4
- package/dist/components/WidgetStylesheet/WidgetStylesheet.d.ts +1 -0
- package/dist/index.css +1 -1
- package/dist/index.es.js +1088 -713
- package/dist/index.es.js.map +1 -1
- package/dist/index.js +1190 -815
- package/dist/index.js.map +1 -1
- package/dist/store/ChatState.d.ts +2 -2
- package/dist/store/ChatStore.d.ts +1 -1
- package/dist/storybook/RichTextValues.d.ts +2 -0
- package/dist/storybook/agents.d.ts +2 -0
- package/dist/utils/useDimensions.d.ts +2 -2
- package/dist/utils/useSuggestions.d.ts +4 -4
- package/dist/utils/useSuggestionsFetch.d.ts +2 -19
- package/package.json +30 -29
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,616 @@ 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
|
+
// compile time full switch-case verification
|
|
2146
|
+
function throwBadKind(x) {
|
|
2147
|
+
throw new Error("Unknown kind " + x);
|
|
2148
|
+
}
|
|
2149
|
+
|
|
2150
|
+
var RichTextBoldSpan = function (props) {
|
|
2151
|
+
var format = props.format, text = props.text;
|
|
2152
|
+
return (React__default["default"].createElement("span", { "data-rich-text-type": "bold", className: "xapp-search-rich-text-bold-span" }, text.substring(format.start, format.end)));
|
|
2153
|
+
};
|
|
2154
|
+
|
|
2155
|
+
var RichTextInputSpan = function (props) {
|
|
2156
|
+
var format = props.format, text = props.text, readOnly = props.readOnly;
|
|
2157
|
+
var defaultValue = text.substring(format.start, format.end);
|
|
2158
|
+
var _a = React.useState(defaultValue), value = _a[0], setValue = _a[1];
|
|
2159
|
+
var handleChange = React.useCallback(function (ev) {
|
|
2160
|
+
setValue(ev.target.value);
|
|
2161
|
+
}, []);
|
|
2162
|
+
if (readOnly) {
|
|
2163
|
+
return (React__default["default"].createElement("span", { className: "xapp-search-rich-text-input-span" }, defaultValue));
|
|
2164
|
+
}
|
|
2165
|
+
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 }));
|
|
2166
|
+
};
|
|
2167
|
+
|
|
2168
|
+
var RichTextNormalSpan = function (props) {
|
|
2169
|
+
var format = props.format, text = props.text;
|
|
2170
|
+
return (React__default["default"].createElement("span", { "data-rich-text-type": "normal", className: "xapp-search-rich-text-normal-span" }, text.substring(format.start, format.end)));
|
|
2171
|
+
};
|
|
2172
|
+
|
|
2173
|
+
var RichTextSpan = function (props) {
|
|
2174
|
+
var format = props.format, text = props.text, readOnly = props.readOnly;
|
|
2175
|
+
var type = format.type;
|
|
2176
|
+
switch (type) {
|
|
2177
|
+
case "normal":
|
|
2178
|
+
return (React__default["default"].createElement(RichTextNormalSpan, { text: text, format: format, readOnly: readOnly }));
|
|
2179
|
+
case "bold":
|
|
2180
|
+
return (React__default["default"].createElement(RichTextBoldSpan, { text: text, format: format, readOnly: readOnly }));
|
|
2181
|
+
case "inputText":
|
|
2182
|
+
return (React__default["default"].createElement(RichTextInputSpan, { text: text, format: format, readOnly: readOnly }));
|
|
2183
|
+
default:
|
|
2184
|
+
throwBadKind(type);
|
|
2185
|
+
}
|
|
2186
|
+
};
|
|
2187
|
+
|
|
2188
|
+
function cleanRichTextValue(value) {
|
|
2189
|
+
var text = value.text, formats = value.formats;
|
|
2190
|
+
var newFormats = [];
|
|
2191
|
+
for (var _i = 0, formats_1 = formats; _i < formats_1.length; _i++) {
|
|
2192
|
+
var format = formats_1[_i];
|
|
2193
|
+
var type = format.type;
|
|
2194
|
+
switch (type) {
|
|
2195
|
+
case "normal":
|
|
2196
|
+
continue;
|
|
2197
|
+
case "inputText":
|
|
2198
|
+
newFormats.push(format);
|
|
2199
|
+
break;
|
|
2200
|
+
case "bold":
|
|
2201
|
+
if (newFormats.length > 0) {
|
|
2202
|
+
var prev = newFormats[newFormats.length - 1];
|
|
2203
|
+
if (prev.type === type && prev.end === format.start) {
|
|
2204
|
+
newFormats.pop();
|
|
2205
|
+
newFormats.push({
|
|
2206
|
+
type: type,
|
|
2207
|
+
start: prev.start,
|
|
2208
|
+
end: format.end
|
|
2209
|
+
});
|
|
2210
|
+
}
|
|
2211
|
+
}
|
|
2212
|
+
else {
|
|
2213
|
+
newFormats.push(format);
|
|
2214
|
+
}
|
|
2215
|
+
break;
|
|
2216
|
+
}
|
|
2217
|
+
}
|
|
2218
|
+
return {
|
|
2219
|
+
text: text,
|
|
2220
|
+
formats: newFormats
|
|
2221
|
+
};
|
|
2222
|
+
}
|
|
2223
|
+
|
|
2224
|
+
function extendFormat(formats, length) {
|
|
2225
|
+
var res = [];
|
|
2226
|
+
var walkerIndex = 0;
|
|
2227
|
+
for (var _i = 0, formats_1 = formats; _i < formats_1.length; _i++) {
|
|
2228
|
+
var format = formats_1[_i];
|
|
2229
|
+
var start = format.start, end = format.end, type = format.type;
|
|
2230
|
+
if (walkerIndex < start) {
|
|
2231
|
+
res.push({
|
|
2232
|
+
type: "normal",
|
|
2233
|
+
start: walkerIndex,
|
|
2234
|
+
end: start
|
|
2235
|
+
});
|
|
2236
|
+
}
|
|
2237
|
+
res.push({
|
|
2238
|
+
type: type,
|
|
2239
|
+
start: start,
|
|
2240
|
+
end: end
|
|
2241
|
+
});
|
|
2242
|
+
walkerIndex = end;
|
|
2243
|
+
}
|
|
2244
|
+
if (walkerIndex < length) {
|
|
2245
|
+
res.push({
|
|
2246
|
+
type: "normal",
|
|
2247
|
+
start: walkerIndex,
|
|
2248
|
+
end: length
|
|
2249
|
+
});
|
|
2250
|
+
}
|
|
2251
|
+
return res;
|
|
2252
|
+
}
|
|
2253
|
+
|
|
2254
|
+
function parseContent(node) {
|
|
2255
|
+
var children = node.childNodes;
|
|
2256
|
+
var formats = [];
|
|
2257
|
+
var text = "";
|
|
2258
|
+
children.forEach(function (child) {
|
|
2259
|
+
if (child.nodeType === Node.ELEMENT_NODE) {
|
|
2260
|
+
var node_1 = child;
|
|
2261
|
+
var innerText = node_1.tagName === "INPUT" ? node_1.value : node_1.innerText;
|
|
2262
|
+
var type = node_1.dataset.richTextType;
|
|
2263
|
+
formats.push({
|
|
2264
|
+
type: type,
|
|
2265
|
+
start: text.length,
|
|
2266
|
+
end: text.length + innerText.length
|
|
2267
|
+
});
|
|
2268
|
+
text += innerText;
|
|
2269
|
+
}
|
|
2270
|
+
if (child.nodeType === Node.TEXT_NODE) {
|
|
2271
|
+
var node_2 = child;
|
|
2272
|
+
var innerText = node_2.nodeValue;
|
|
2273
|
+
if (innerText) {
|
|
2274
|
+
formats.push({
|
|
2275
|
+
type: "normal",
|
|
2276
|
+
start: text.length,
|
|
2277
|
+
end: text.length + innerText.length
|
|
2278
|
+
});
|
|
2279
|
+
text += innerText;
|
|
2280
|
+
}
|
|
2281
|
+
}
|
|
2282
|
+
});
|
|
2283
|
+
return cleanRichTextValue({
|
|
2284
|
+
text: text,
|
|
2285
|
+
formats: formats
|
|
2286
|
+
});
|
|
2287
|
+
}
|
|
2288
|
+
function cleanContent(node) {
|
|
2289
|
+
var _a;
|
|
2290
|
+
var trash = [];
|
|
2291
|
+
var raw = node.childNodes;
|
|
2292
|
+
for (var i = 0; i < raw.length; i++) {
|
|
2293
|
+
var c = raw.item(i);
|
|
2294
|
+
if ((c === null || c === void 0 ? void 0 : c.nodeType) === Node.TEXT_NODE) {
|
|
2295
|
+
trash.push(c);
|
|
2296
|
+
}
|
|
2297
|
+
}
|
|
2298
|
+
for (var _i = 0, trash_1 = trash; _i < trash_1.length; _i++) {
|
|
2299
|
+
var c = trash_1[_i];
|
|
2300
|
+
try {
|
|
2301
|
+
(_a = c.parentElement) === null || _a === void 0 ? void 0 : _a.removeChild(c);
|
|
2302
|
+
}
|
|
2303
|
+
catch (_b) {
|
|
2304
|
+
}
|
|
2305
|
+
}
|
|
2306
|
+
}
|
|
2307
|
+
var RichText = function (props) {
|
|
2308
|
+
var value = props.value, className = props.className, readOnly = props.readOnly, onInput = props.onInput, onChange = props.onChange;
|
|
2309
|
+
var formatsRaw = value.formats, text = value.text;
|
|
2310
|
+
var formats = React.useMemo(function () { return extendFormat(formatsRaw, text.length); }, [formatsRaw, text.length]);
|
|
2311
|
+
var handleInput = React.useCallback(function (ev) {
|
|
2312
|
+
var target = ev.currentTarget;
|
|
2313
|
+
var newValue = parseContent(target);
|
|
2314
|
+
if (onInput) {
|
|
2315
|
+
onInput(newValue);
|
|
2316
|
+
}
|
|
2317
|
+
}, [onInput]);
|
|
2318
|
+
var handleBlur = React.useCallback(function (ev) {
|
|
2319
|
+
var target = ev.currentTarget;
|
|
2320
|
+
var newValue = parseContent(target);
|
|
2321
|
+
cleanContent(target);
|
|
2322
|
+
if (onChange) {
|
|
2323
|
+
onChange(newValue);
|
|
2324
|
+
}
|
|
2325
|
+
}, [onChange]);
|
|
2326
|
+
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 })); })));
|
|
2327
|
+
};
|
|
2328
|
+
|
|
2329
|
+
var RichInput = function (props) {
|
|
2330
|
+
var id = props.id, value = props.value, type = props.type, autoFocus = props.autoFocus, onChange = props.onChange, onInput = props.onInput, onKeyDown = props.onKeyDown;
|
|
2331
|
+
var rich = value.formats.some(function (f) { return f.type === "inputText"; });
|
|
2332
|
+
var handleChange = React.useCallback(function (ev) {
|
|
2333
|
+
onChange({
|
|
2334
|
+
text: ev.target.value,
|
|
2335
|
+
formats: []
|
|
2336
|
+
});
|
|
2337
|
+
}, [onChange]);
|
|
2338
|
+
var handleRichChange = React.useCallback(function (val) {
|
|
2339
|
+
onChange(val);
|
|
2340
|
+
}, [onChange]);
|
|
2341
|
+
var handleInput = React.useCallback(function (ev) {
|
|
2342
|
+
if (onInput) {
|
|
2343
|
+
onInput({
|
|
2344
|
+
text: ev.target.value,
|
|
2345
|
+
formats: []
|
|
2346
|
+
});
|
|
2347
|
+
}
|
|
2348
|
+
}, [onInput]);
|
|
2349
|
+
var handleRichInput = React.useCallback(function (val) {
|
|
2350
|
+
if (onInput) {
|
|
2351
|
+
onInput(val);
|
|
2352
|
+
}
|
|
2353
|
+
}, [onInput]);
|
|
2354
|
+
var handleKeyDown = React.useCallback(function (event) {
|
|
2355
|
+
if (onKeyDown) {
|
|
2356
|
+
onKeyDown(event);
|
|
2357
|
+
}
|
|
2358
|
+
}, [onKeyDown]);
|
|
2359
|
+
return (React__default["default"].createElement("div", { className: "xappw-rich-input ".concat(props.className) }, rich ?
|
|
2360
|
+
React__default["default"].createElement(RichText, { id: id, value: value, onChange: handleRichChange, onInput: handleRichInput, className: "xappw-rich-input__input ".concat(props.className, "__input") }) : React__default["default"].createElement("input", { id: id, type: type, value: value.text, autoFocus: autoFocus, placeholder: props.placeholder, className: "xappw-rich-input__input ".concat(props.className, "__input"), onFocus: props.onFocus, onChange: handleChange, onInput: handleInput, onKeyDown: handleKeyDown })));
|
|
2361
|
+
};
|
|
2362
|
+
|
|
2363
|
+
var SuggestionsGroupHeading = function (props) {
|
|
2364
|
+
return (React__default["default"].createElement("div", { className: "xappw-suggestions-group-heading" }, props.label));
|
|
2365
|
+
};
|
|
2366
|
+
|
|
2367
|
+
function getScrollContainer(node) {
|
|
2368
|
+
var walker = node;
|
|
2369
|
+
while (walker && !walker.classList.contains("xapp-search-result__suggestions")) {
|
|
2370
|
+
walker = walker.parentElement;
|
|
2371
|
+
}
|
|
2372
|
+
return walker || undefined;
|
|
2373
|
+
}
|
|
2374
|
+
var SuggestionsItem = function (props) {
|
|
2375
|
+
var data = props.data, current = props.current, ActionsComponent = props.actions, onClick = props.onClick, onHover = props.onHover;
|
|
2376
|
+
var handleClick = React.useCallback(function () {
|
|
2377
|
+
onClick(data);
|
|
2378
|
+
}, [data, onClick]);
|
|
2379
|
+
var handleHover = React.useCallback(function () {
|
|
2380
|
+
if (onHover) {
|
|
2381
|
+
onHover(data);
|
|
2382
|
+
}
|
|
2383
|
+
}, [data, onHover]);
|
|
2384
|
+
var ref = React.useRef(null);
|
|
2385
|
+
React.useEffect(function () {
|
|
2386
|
+
var node = ref.current;
|
|
2387
|
+
if (current && node) {
|
|
2388
|
+
var scrollContainer = getScrollContainer(node);
|
|
2389
|
+
if (scrollContainer) {
|
|
2390
|
+
var scrollBox = scrollContainer.getBoundingClientRect();
|
|
2391
|
+
var nodeBox = node.getBoundingClientRect();
|
|
2392
|
+
var maxTop = Math.max(scrollBox.top, nodeBox.top);
|
|
2393
|
+
var minBottom = Math.min(scrollBox.bottom, nodeBox.bottom);
|
|
2394
|
+
var visibleHeight = minBottom - maxTop;
|
|
2395
|
+
var actualHeight = nodeBox.height;
|
|
2396
|
+
if (visibleHeight < actualHeight * 0.99) {
|
|
2397
|
+
node.scrollIntoView({ behavior: "smooth" });
|
|
2398
|
+
}
|
|
2399
|
+
}
|
|
2400
|
+
}
|
|
2401
|
+
}, [current]);
|
|
2402
|
+
return (React__default["default"].createElement("div", { ref: ref, className: "xappw-suggestions-item ".concat(current ? "xappw-suggestions-item--current" : ""), onClick: handleClick, onMouseEnter: handleHover },
|
|
2403
|
+
React__default["default"].createElement(RichText, { value: data, className: "xappw-suggestions-item__texts", readOnly: true }),
|
|
2404
|
+
ActionsComponent &&
|
|
2405
|
+
React__default["default"].createElement("div", { className: "xappw-suggestions-item__actions" },
|
|
2406
|
+
React__default["default"].createElement(ActionsComponent, { data: data, current: current }))));
|
|
2407
|
+
};
|
|
2408
|
+
|
|
2409
|
+
var SuggestionsGroup = function (props) {
|
|
2410
|
+
var group = props.group, currentIndex = props.currentIndex, itemActions = props.itemActions;
|
|
2411
|
+
var heading = group.heading, items = group.items;
|
|
2412
|
+
return (React__default["default"].createElement("div", { className: "xappw-suggestions-group" },
|
|
2413
|
+
React__default["default"].createElement("div", { className: "xappw-suggestions-group__heading" },
|
|
2414
|
+
React__default["default"].createElement(SuggestionsGroupHeading, { label: heading })),
|
|
2415
|
+
React__default["default"].createElement("div", { className: "xappw-suggestions-group__items" }, items.map(function (item, itemIndex) {
|
|
2416
|
+
return React__default["default"].createElement(SuggestionsItem, { key: itemIndex, data: item, current: currentIndex === itemIndex, actions: itemActions, onClick: props.onItemClick, onHover: props.onItemHover });
|
|
2417
|
+
}))));
|
|
2418
|
+
};
|
|
2419
|
+
|
|
2420
|
+
function getItemsLength(result) {
|
|
2421
|
+
return result.reduce(function (prev, cur) { return prev + cur.items.length; }, 0);
|
|
2422
|
+
}
|
|
2423
|
+
|
|
2424
|
+
var SuggestionsList = function (props) {
|
|
2425
|
+
var suggestions = props.suggestions, itemActions = props.itemActions, className = props.className;
|
|
2426
|
+
var length = React.useMemo(function () { return getItemsLength(suggestions); }, [suggestions]);
|
|
2427
|
+
var currentIndex = length >= 0 ? props.index : NaN;
|
|
2428
|
+
var indexWalker = 0;
|
|
2429
|
+
return (React__default["default"].createElement("div", { className: "xappw-suggestions-list ".concat(className || "") }, suggestions.map(function (group, index) {
|
|
2430
|
+
var res = (React__default["default"].createElement(SuggestionsGroup, { key: index, group: group, currentIndex: currentIndex - indexWalker, itemActions: itemActions, onItemClick: props.onItemClick, onItemHover: props.onItemHover }));
|
|
2431
|
+
indexWalker += group.items.length;
|
|
2432
|
+
return res;
|
|
2433
|
+
})));
|
|
2434
|
+
};
|
|
2435
|
+
|
|
2436
|
+
function findItemByIndex(groups, index) {
|
|
2437
|
+
for (var _i = 0, groups_1 = groups; _i < groups_1.length; _i++) {
|
|
2438
|
+
var group = groups_1[_i];
|
|
2439
|
+
for (var _a = 0, _b = group.items; _a < _b.length; _a++) {
|
|
2440
|
+
var item = _b[_a];
|
|
2441
|
+
if (index <= 0) {
|
|
2442
|
+
return item;
|
|
2443
|
+
}
|
|
2444
|
+
index--;
|
|
2445
|
+
}
|
|
2446
|
+
}
|
|
2447
|
+
return undefined;
|
|
2448
|
+
}
|
|
2449
|
+
|
|
2450
|
+
/*! *****************************************************************************
|
|
2451
|
+
Copyright (c) Microsoft Corporation.
|
|
2452
|
+
|
|
2453
|
+
Permission to use, copy, modify, and/or distribute this software for any
|
|
2454
|
+
purpose with or without fee is hereby granted.
|
|
2455
|
+
|
|
2456
|
+
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
|
2457
|
+
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
|
2458
|
+
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
|
2459
|
+
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
|
2460
|
+
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
|
2461
|
+
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
|
2462
|
+
PERFORMANCE OF THIS SOFTWARE.
|
|
2463
|
+
***************************************************************************** */
|
|
2464
|
+
|
|
2465
|
+
function __awaiter(thisArg, _arguments, P, generator) {
|
|
2466
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
2467
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
2468
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
2469
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
2470
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
2471
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
2472
|
+
});
|
|
2473
|
+
}
|
|
2474
|
+
|
|
2475
|
+
function __generator(thisArg, body) {
|
|
2476
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
2477
|
+
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
2478
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
2479
|
+
function step(op) {
|
|
2480
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
2481
|
+
while (_) try {
|
|
2482
|
+
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;
|
|
2483
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
2484
|
+
switch (op[0]) {
|
|
2485
|
+
case 0: case 1: t = op; break;
|
|
2486
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
2487
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
2488
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
2489
|
+
default:
|
|
2490
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
2491
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
2492
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
2493
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
2494
|
+
if (t[2]) _.ops.pop();
|
|
2495
|
+
_.trys.pop(); continue;
|
|
2496
|
+
}
|
|
2497
|
+
op = body.call(thisArg, _);
|
|
2498
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
2499
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
2500
|
+
}
|
|
2501
|
+
}
|
|
2502
|
+
|
|
2503
|
+
function __spreadArray(to, from, pack) {
|
|
2504
|
+
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
2505
|
+
if (ar || !(i in from)) {
|
|
2506
|
+
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
2507
|
+
ar[i] = from[i];
|
|
2508
|
+
}
|
|
2509
|
+
}
|
|
2510
|
+
return to.concat(ar || Array.prototype.slice.call(from));
|
|
2511
|
+
}
|
|
2512
|
+
|
|
2513
|
+
function parseSuggestionsFormat(format) {
|
|
2514
|
+
var types = Object.keys(format);
|
|
2515
|
+
var type = types[0];
|
|
2516
|
+
var item = format[type];
|
|
2517
|
+
if (!item) {
|
|
2518
|
+
throw new Error();
|
|
2519
|
+
}
|
|
2520
|
+
return {
|
|
2521
|
+
type: type,
|
|
2522
|
+
start: item.start,
|
|
2523
|
+
end: item.end
|
|
2524
|
+
};
|
|
2525
|
+
}
|
|
2526
|
+
function parseSuggestionsFormats(formats) {
|
|
2527
|
+
return formats.map(parseSuggestionsFormat);
|
|
2528
|
+
}
|
|
2529
|
+
function parseSuggestionsResponseItem(item) {
|
|
2530
|
+
return {
|
|
2531
|
+
text: item.suggestion,
|
|
2532
|
+
content: item.answer,
|
|
2533
|
+
formats: parseSuggestionsFormats(item.format),
|
|
2534
|
+
type: item.type
|
|
2535
|
+
};
|
|
2536
|
+
}
|
|
2537
|
+
function normalizeType(type) {
|
|
2538
|
+
switch (type) {
|
|
2539
|
+
case "HISTORICAL":
|
|
2540
|
+
return "INTENT";
|
|
2541
|
+
default:
|
|
2542
|
+
return type;
|
|
2543
|
+
}
|
|
2544
|
+
}
|
|
2545
|
+
function getHeading(type) {
|
|
2546
|
+
return normalizeType(type);
|
|
2547
|
+
}
|
|
2548
|
+
var order = ["FAQ", "INTENT", "HISTORICAL"];
|
|
2549
|
+
var ordersMap = order.reduce(function (prev, cur, index) {
|
|
2550
|
+
prev[cur] = index;
|
|
2551
|
+
return prev;
|
|
2552
|
+
}, {});
|
|
2553
|
+
function compareSuggestionItems(left, right) {
|
|
2554
|
+
return (ordersMap[right.type] - ordersMap[left.type]);
|
|
2555
|
+
}
|
|
2556
|
+
function parseSuggestionsResponse(response) {
|
|
2557
|
+
if (!response) {
|
|
2558
|
+
return undefined;
|
|
2559
|
+
}
|
|
2560
|
+
var items = __spreadArray([], response.suggestions, true).sort(compareSuggestionItems);
|
|
2561
|
+
return items.reduce(function (result, current) {
|
|
2562
|
+
var mappedItem = parseSuggestionsResponseItem(current);
|
|
2563
|
+
if (result.length) {
|
|
2564
|
+
var prevGroup = result[result.length - 1];
|
|
2565
|
+
if (prevGroup.heading === getHeading(current.type)) {
|
|
2566
|
+
prevGroup.items.push(mappedItem);
|
|
2567
|
+
return result;
|
|
2568
|
+
}
|
|
2569
|
+
}
|
|
2570
|
+
result.push({
|
|
2571
|
+
heading: getHeading(current.type),
|
|
2572
|
+
items: [mappedItem]
|
|
2573
|
+
});
|
|
2574
|
+
return result;
|
|
2575
|
+
}, []);
|
|
2576
|
+
}
|
|
2577
|
+
|
|
2578
|
+
/**
|
|
2579
|
+
* Append the provided query params to the URL
|
|
2580
|
+
*
|
|
2581
|
+
* It will overwrite existing params on the URL if there are conflicts
|
|
2582
|
+
* @param url
|
|
2583
|
+
* @param params
|
|
2584
|
+
*/
|
|
2585
|
+
function addQueryParametersToURL(url, params) {
|
|
2586
|
+
var existingParams = new URL(url).searchParams;
|
|
2587
|
+
params.forEach(function (value, key) {
|
|
2588
|
+
existingParams.append(key, value);
|
|
2589
|
+
});
|
|
2590
|
+
var newUrl = new URL(url);
|
|
2591
|
+
newUrl.search = existingParams.toString();
|
|
2592
|
+
return newUrl;
|
|
2593
|
+
}
|
|
2594
|
+
|
|
2595
|
+
var defaultOptions = {};
|
|
2596
|
+
function noop$1() {
|
|
2597
|
+
}
|
|
2598
|
+
function useJsonFetch(url, options) {
|
|
2599
|
+
if (options === void 0) { options = defaultOptions; }
|
|
2600
|
+
var _a = React.useState({
|
|
2601
|
+
state: "paused"
|
|
2602
|
+
}), value = _a[0], setValue = _a[1];
|
|
2603
|
+
var pause = options.pause;
|
|
2604
|
+
React.useEffect(function () {
|
|
2605
|
+
if (pause) {
|
|
2606
|
+
setValue({
|
|
2607
|
+
state: "paused"
|
|
2608
|
+
});
|
|
2609
|
+
return noop$1;
|
|
2610
|
+
}
|
|
2611
|
+
var controller = new AbortController();
|
|
2612
|
+
var signal = controller.signal;
|
|
2613
|
+
var mounted = true;
|
|
2614
|
+
(function () {
|
|
2615
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
2616
|
+
var response, json, e_1;
|
|
2617
|
+
return __generator(this, function (_a) {
|
|
2618
|
+
switch (_a.label) {
|
|
2619
|
+
case 0:
|
|
2620
|
+
_a.trys.push([0, 4, , 5]);
|
|
2621
|
+
setValue({
|
|
2622
|
+
state: "fetching"
|
|
2623
|
+
});
|
|
2624
|
+
return [4 /*yield*/, fetch(url, { signal: signal })];
|
|
2625
|
+
case 1:
|
|
2626
|
+
response = _a.sent();
|
|
2627
|
+
if (!mounted) return [3 /*break*/, 3];
|
|
2628
|
+
return [4 /*yield*/, response.json()];
|
|
2629
|
+
case 2:
|
|
2630
|
+
json = _a.sent();
|
|
2631
|
+
if (response.ok) {
|
|
2632
|
+
setValue({
|
|
2633
|
+
state: "success",
|
|
2634
|
+
data: json
|
|
2635
|
+
});
|
|
2636
|
+
}
|
|
2637
|
+
else {
|
|
2638
|
+
setValue({
|
|
2639
|
+
state: "error",
|
|
2640
|
+
error: json
|
|
2641
|
+
});
|
|
2642
|
+
}
|
|
2643
|
+
_a.label = 3;
|
|
2644
|
+
case 3: return [3 /*break*/, 5];
|
|
2645
|
+
case 4:
|
|
2646
|
+
e_1 = _a.sent();
|
|
2647
|
+
if (e_1.name === "AbortError") {
|
|
2648
|
+
setValue({
|
|
2649
|
+
state: "paused"
|
|
2650
|
+
});
|
|
2651
|
+
return [2 /*return*/];
|
|
2652
|
+
}
|
|
2653
|
+
throw e_1;
|
|
2654
|
+
case 5: return [2 /*return*/];
|
|
2655
|
+
}
|
|
2656
|
+
});
|
|
2657
|
+
});
|
|
2658
|
+
})();
|
|
2659
|
+
return function () {
|
|
2660
|
+
mounted = false;
|
|
2661
|
+
controller.abort();
|
|
2662
|
+
};
|
|
2663
|
+
}, [url, pause]);
|
|
2664
|
+
return value;
|
|
2665
|
+
}
|
|
2666
|
+
|
|
2667
|
+
function useSuggestionsFetch$1(options) {
|
|
2668
|
+
var baseUrl = options.url, context = options.context, query = options.query;
|
|
2669
|
+
var url = React.useMemo(function () {
|
|
2670
|
+
if (!baseUrl) {
|
|
2671
|
+
return undefined;
|
|
2672
|
+
}
|
|
2673
|
+
var params = new URLSearchParams();
|
|
2674
|
+
params.append("size", "5");
|
|
2675
|
+
params.append("queryText", query);
|
|
2676
|
+
if (context === null || context === void 0 ? void 0 : context.length) {
|
|
2677
|
+
params.append("activeContexts", context.join(","));
|
|
2678
|
+
}
|
|
2679
|
+
return addQueryParametersToURL(baseUrl, params);
|
|
2680
|
+
}, [query, context, baseUrl]);
|
|
2681
|
+
var response = useJsonFetch(url ? "".concat(url.toString()) : "", {
|
|
2682
|
+
pause: !query || !baseUrl
|
|
2683
|
+
});
|
|
2684
|
+
return response;
|
|
2685
|
+
}
|
|
2686
|
+
|
|
2687
|
+
/**
|
|
2688
|
+
* Quicker configurable uuid
|
|
2689
|
+
*
|
|
2690
|
+
* @export
|
|
2691
|
+
* @returns {string}
|
|
2692
|
+
*/
|
|
2693
|
+
function uuid() {
|
|
2694
|
+
var d = new Date().getTime();
|
|
2695
|
+
var newUuid = "xxxxxxxx-xxxx-65xx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function (c) {
|
|
2696
|
+
/* tslint:disable:no-magic-numbers */
|
|
2697
|
+
/* tslint:disable:no-bitwise */
|
|
2698
|
+
var r = (d + Math.random() * 16) % 16 | 0;
|
|
2699
|
+
d = Math.floor(d / 16);
|
|
2700
|
+
return (c === "x" ? r : (r & 0x3) | 0x8).toString(16);
|
|
2701
|
+
/* tslint:enable:no-magic-numbers */
|
|
2702
|
+
/* tslint:disable:no-bitwise */
|
|
2703
|
+
});
|
|
2704
|
+
return newUuid;
|
|
2705
|
+
}
|
|
2706
|
+
|
|
2707
|
+
var IconButton_1 = dist.IconButton = IconButton;
|
|
2708
|
+
var RichInput_1 = dist.RichInput = RichInput;
|
|
2709
|
+
dist.RichText = RichText;
|
|
2710
|
+
dist.SuggestionsGroup = SuggestionsGroup;
|
|
2711
|
+
dist.SuggestionsGroupHeading = SuggestionsGroupHeading;
|
|
2712
|
+
dist.SuggestionsItem = SuggestionsItem;
|
|
2713
|
+
var SuggestionsList_1 = dist.SuggestionsList = SuggestionsList;
|
|
2714
|
+
dist.addQueryParametersToURL = addQueryParametersToURL;
|
|
2715
|
+
dist.extendFormat = extendFormat;
|
|
2716
|
+
var findItemByIndex_1 = dist.findItemByIndex = findItemByIndex;
|
|
2717
|
+
var getItemsLength_1 = dist.getItemsLength = getItemsLength;
|
|
2718
|
+
var parseSuggestionsResponse_1 = dist.parseSuggestionsResponse = parseSuggestionsResponse;
|
|
2719
|
+
dist.useJsonFetch = useJsonFetch;
|
|
2720
|
+
var useSuggestionsFetch_1 = dist.useSuggestionsFetch = useSuggestionsFetch$1;
|
|
2721
|
+
var uuid_1 = dist.uuid = uuid;
|
|
2722
|
+
|
|
2143
2723
|
function postMessageToStentor(data, url, key) {
|
|
2144
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
2724
|
+
return __awaiter$1(this, void 0, void 0, function () {
|
|
2145
2725
|
var body, response;
|
|
2146
|
-
return __generator(this, function (_a) {
|
|
2726
|
+
return __generator$1(this, function (_a) {
|
|
2147
2727
|
switch (_a.label) {
|
|
2148
2728
|
case 0:
|
|
2149
2729
|
body = JSON.stringify(data);
|
|
2150
|
-
log("URL: "
|
|
2151
|
-
log("BODY: "
|
|
2730
|
+
log("URL: ".concat(url));
|
|
2731
|
+
log("BODY: ".concat(body));
|
|
2152
2732
|
return [4 /*yield*/, fetch(url, {
|
|
2153
2733
|
method: "POST",
|
|
2154
2734
|
headers: {
|
|
2155
2735
|
"Content-Type": "application/json",
|
|
2156
|
-
"Authorization": "Bearer "
|
|
2736
|
+
"Authorization": "Bearer ".concat(key),
|
|
2157
2737
|
"User-Agent": "Stentor Chat Server"
|
|
2158
2738
|
},
|
|
2159
2739
|
body: body,
|
|
@@ -2162,7 +2742,7 @@ function postMessageToStentor(data, url, key) {
|
|
|
2162
2742
|
case 1:
|
|
2163
2743
|
response = _a.sent();
|
|
2164
2744
|
if (!response.ok) {
|
|
2165
|
-
throw new Error("Status "
|
|
2745
|
+
throw new Error("Status ".concat(response.status, ", Text: ").concat(response.statusText));
|
|
2166
2746
|
}
|
|
2167
2747
|
return [2 /*return*/, response.json()];
|
|
2168
2748
|
}
|
|
@@ -2230,7 +2810,7 @@ function getOutput(value) {
|
|
|
2230
2810
|
* @returns
|
|
2231
2811
|
*/
|
|
2232
2812
|
function responseToMessage(botResponse, now) {
|
|
2233
|
-
var _a, _b, _c, _d;
|
|
2813
|
+
var _a, _b, _c, _d, _e;
|
|
2234
2814
|
if (now === void 0) { now = new Date().getTime(); }
|
|
2235
2815
|
var responseMessage;
|
|
2236
2816
|
if (!botResponse) {
|
|
@@ -2276,24 +2856,20 @@ function responseToMessage(botResponse, now) {
|
|
|
2276
2856
|
if (html) {
|
|
2277
2857
|
responseMessage.msg = __assign(__assign({}, responseMessage.msg), { html: html });
|
|
2278
2858
|
}
|
|
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
|
-
}
|
|
2859
|
+
if ((_e = outputSpeech.suggestions) === null || _e === void 0 ? void 0 : _e.length) {
|
|
2860
|
+
responseMessage.msg.options = outputSpeech.suggestions.map(function (suggestion) {
|
|
2861
|
+
if (typeof suggestion === "string") {
|
|
2862
|
+
// Simple chips (strings)
|
|
2863
|
+
return suggestion;
|
|
2295
2864
|
}
|
|
2296
|
-
|
|
2865
|
+
else {
|
|
2866
|
+
// "call out" chips
|
|
2867
|
+
return {
|
|
2868
|
+
label: suggestion.title,
|
|
2869
|
+
actionUrl: suggestion.url
|
|
2870
|
+
};
|
|
2871
|
+
}
|
|
2872
|
+
});
|
|
2297
2873
|
}
|
|
2298
2874
|
}
|
|
2299
2875
|
return responseMessage;
|
|
@@ -2305,7 +2881,7 @@ function getPermissionRequestType(type) {
|
|
|
2305
2881
|
case "PERMISSION_LOCATION_PRECISE":
|
|
2306
2882
|
return "LOCATION_PRECISE";
|
|
2307
2883
|
default:
|
|
2308
|
-
throw new Error("Unsupported permission: "
|
|
2884
|
+
throw new Error("Unsupported permission: ".concat(type));
|
|
2309
2885
|
}
|
|
2310
2886
|
}
|
|
2311
2887
|
function getPermissionResponse(botResponse, now) {
|
|
@@ -2318,7 +2894,7 @@ function getPermissionResponse(botResponse, now) {
|
|
|
2318
2894
|
type: "permissionRequest",
|
|
2319
2895
|
timestamp: now,
|
|
2320
2896
|
msg: {
|
|
2321
|
-
text: (_a = outputSpeech === null || outputSpeech === void 0 ? void 0 : outputSpeech.displayText) !== null && _a !== void 0 ? _a : ""
|
|
2897
|
+
text: (_a = outputSpeech === null || outputSpeech === void 0 ? void 0 : outputSpeech.displayText) !== null && _a !== void 0 ? _a : "".concat(botResponse.data.permissionRequestTTSContext),
|
|
2322
2898
|
permissionRequest: {
|
|
2323
2899
|
time: now,
|
|
2324
2900
|
type: type,
|
|
@@ -2335,26 +2911,6 @@ function getPermissionResponse(botResponse, now) {
|
|
|
2335
2911
|
};
|
|
2336
2912
|
}
|
|
2337
2913
|
|
|
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
2914
|
var PERMISSION_QUESTION_EXPIRATION_MS = 300000; // 5 minutes
|
|
2359
2915
|
var StentorDirectChat = /** @class */ (function () {
|
|
2360
2916
|
function StentorDirectChat(config) {
|
|
@@ -2366,15 +2922,15 @@ var StentorDirectChat = /** @class */ (function () {
|
|
|
2366
2922
|
*/
|
|
2367
2923
|
this.widget = {
|
|
2368
2924
|
setConnectionStatus: function (status) {
|
|
2369
|
-
log("SERVER: connection_update: "
|
|
2925
|
+
log("SERVER: connection_update: ".concat(JSON.stringify(status)));
|
|
2370
2926
|
_this.dispatch(setConnectionStatus(status));
|
|
2371
2927
|
},
|
|
2372
2928
|
setAccountStatus: function (status) {
|
|
2373
|
-
log("SERVER: account_status: "
|
|
2929
|
+
log("SERVER: account_status: ".concat(JSON.stringify(status)));
|
|
2374
2930
|
_this.dispatch(setAccountStatus(status));
|
|
2375
2931
|
},
|
|
2376
2932
|
sendNewMessage: function (data) {
|
|
2377
|
-
log("SERVER: new message: "
|
|
2933
|
+
log("SERVER: new message: ".concat(JSON.stringify(data)));
|
|
2378
2934
|
_this.dispatch({
|
|
2379
2935
|
type: "chat",
|
|
2380
2936
|
detail: {
|
|
@@ -2386,7 +2942,7 @@ var StentorDirectChat = /** @class */ (function () {
|
|
|
2386
2942
|
});
|
|
2387
2943
|
},
|
|
2388
2944
|
userJoined: function (data) {
|
|
2389
|
-
log("SERVER: user joined: "
|
|
2945
|
+
log("SERVER: user joined: ".concat(JSON.stringify(data)));
|
|
2390
2946
|
_this.visitorInfo.token = data.token;
|
|
2391
2947
|
_this.dispatch({
|
|
2392
2948
|
type: "chat",
|
|
@@ -2398,7 +2954,7 @@ var StentorDirectChat = /** @class */ (function () {
|
|
|
2398
2954
|
});
|
|
2399
2955
|
},
|
|
2400
2956
|
userLeft: function (data) {
|
|
2401
|
-
log("SERVER: user left: "
|
|
2957
|
+
log("SERVER: user left: ".concat(JSON.stringify(data)));
|
|
2402
2958
|
_this.dispatch({
|
|
2403
2959
|
type: "chat",
|
|
2404
2960
|
detail: {
|
|
@@ -2457,7 +3013,7 @@ var StentorDirectChat = /** @class */ (function () {
|
|
|
2457
3013
|
StentorDirectChat.prototype.init = function (dispatch) {
|
|
2458
3014
|
this.dispatch = dispatch;
|
|
2459
3015
|
// TODO: Authenticate - or at least tell the server who you are
|
|
2460
|
-
log("got init auth: "
|
|
3016
|
+
log("got init auth: ".concat(this.config.key));
|
|
2461
3017
|
// We are connected
|
|
2462
3018
|
this.widget.setConnectionStatus("online");
|
|
2463
3019
|
this.widget.setAccountStatus("online");
|
|
@@ -2469,8 +3025,8 @@ var StentorDirectChat = /** @class */ (function () {
|
|
|
2469
3025
|
cb();
|
|
2470
3026
|
};
|
|
2471
3027
|
StentorDirectChat.prototype.sendChatMsg = function (message, cb) {
|
|
2472
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
2473
|
-
return __generator(this, function (_a) {
|
|
3028
|
+
return __awaiter$1(this, void 0, void 0, function () {
|
|
3029
|
+
return __generator$1(this, function (_a) {
|
|
2474
3030
|
return [2 /*return*/, this.sendChatMsgRequest({
|
|
2475
3031
|
msg: message,
|
|
2476
3032
|
timestamp: new Date().getTime(),
|
|
@@ -2483,9 +3039,9 @@ var StentorDirectChat = /** @class */ (function () {
|
|
|
2483
3039
|
};
|
|
2484
3040
|
StentorDirectChat.prototype.sendChatMsgRequest = function (serviceRequest, cb) {
|
|
2485
3041
|
var _a;
|
|
2486
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
3042
|
+
return __awaiter$1(this, void 0, void 0, function () {
|
|
2487
3043
|
var agentResponse;
|
|
2488
|
-
return __generator(this, function (_b) {
|
|
3044
|
+
return __generator$1(this, function (_b) {
|
|
2489
3045
|
switch (_b.label) {
|
|
2490
3046
|
case 0: return [4 /*yield*/, this.postMessage(serviceRequest)];
|
|
2491
3047
|
case 1:
|
|
@@ -2528,9 +3084,9 @@ var StentorDirectChat = /** @class */ (function () {
|
|
|
2528
3084
|
};
|
|
2529
3085
|
StentorDirectChat.prototype.postMessage = function (message) {
|
|
2530
3086
|
var _a, _b, _c, _d;
|
|
2531
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
3087
|
+
return __awaiter$1(this, void 0, void 0, function () {
|
|
2532
3088
|
var request, now, permissionRequest, expired, text, granted, userProfile, isEmail, botResponse, responseMessage;
|
|
2533
|
-
return __generator(this, function (_e) {
|
|
3089
|
+
return __generator$1(this, function (_e) {
|
|
2534
3090
|
switch (_e.label) {
|
|
2535
3091
|
case 0:
|
|
2536
3092
|
now = new Date().getTime();
|
|
@@ -2617,20 +3173,20 @@ var StentorDirectChat = /** @class */ (function () {
|
|
|
2617
3173
|
};
|
|
2618
3174
|
}
|
|
2619
3175
|
}
|
|
2620
|
-
log("Visitor says: "
|
|
3176
|
+
log("Visitor says: ".concat(JSON.stringify(request, undefined, 2)));
|
|
2621
3177
|
// Bot is "typing"
|
|
2622
3178
|
this.widget.typing();
|
|
2623
3179
|
return [4 /*yield*/, postMessageToStentor(request, this.config.url, this.config.key).catch(function (postError) {
|
|
2624
|
-
err("POST failed: "
|
|
3180
|
+
err("POST failed: ".concat(postError.message));
|
|
2625
3181
|
return {
|
|
2626
|
-
text: "Bot doesn't respond. Reason: "
|
|
3182
|
+
text: "Bot doesn't respond. Reason: ".concat(postError.message)
|
|
2627
3183
|
};
|
|
2628
3184
|
})];
|
|
2629
3185
|
case 1:
|
|
2630
3186
|
botResponse = _e.sent();
|
|
2631
3187
|
// Bot stopped "typing"
|
|
2632
3188
|
this.widget.stopTyping();
|
|
2633
|
-
log("Bot says: "
|
|
3189
|
+
log("Bot says: ".concat(JSON.stringify(botResponse, undefined, 2)));
|
|
2634
3190
|
// Now translate the response to server dialect
|
|
2635
3191
|
// new session no more
|
|
2636
3192
|
this.isNewSession = false;
|
|
@@ -2654,15 +3210,15 @@ var StentorDirectChat = /** @class */ (function () {
|
|
|
2654
3210
|
};
|
|
2655
3211
|
StentorDirectChat.prototype.startSession = function () {
|
|
2656
3212
|
if (this.visitorInfo.visitorId) {
|
|
2657
|
-
this._userId = "stentor-widget-user-"
|
|
3213
|
+
this._userId = "stentor-widget-user-".concat(this.visitorInfo.visitorId);
|
|
2658
3214
|
}
|
|
2659
3215
|
else if (this.visitorInfo.email) {
|
|
2660
|
-
this._userId = "stentor-widget-user-"
|
|
3216
|
+
this._userId = "stentor-widget-user-".concat(this.visitorInfo.email);
|
|
2661
3217
|
}
|
|
2662
3218
|
else {
|
|
2663
|
-
this._userId = "stentor-widget-user-"
|
|
3219
|
+
this._userId = "stentor-widget-user-".concat(uuid_1());
|
|
2664
3220
|
}
|
|
2665
|
-
this._sessionId = "stentor-widget-session-"
|
|
3221
|
+
this._sessionId = "stentor-widget-session-".concat(uuid_1());
|
|
2666
3222
|
this.isNewSession = true;
|
|
2667
3223
|
};
|
|
2668
3224
|
Object.defineProperty(StentorDirectChat.prototype, "userId", {
|
|
@@ -5184,8 +5740,10 @@ class Socket extends Emitter_1 {
|
|
|
5184
5740
|
packet.options.compress = this.flags.compress !== false;
|
|
5185
5741
|
// event ack callback
|
|
5186
5742
|
if ("function" === typeof args[args.length - 1]) {
|
|
5187
|
-
|
|
5188
|
-
|
|
5743
|
+
const id = this.ids++;
|
|
5744
|
+
const ack = args.pop();
|
|
5745
|
+
this._registerAckCallback(id, ack);
|
|
5746
|
+
packet.id = id;
|
|
5189
5747
|
}
|
|
5190
5748
|
const isTransportWritable = this.io.engine &&
|
|
5191
5749
|
this.io.engine.transport &&
|
|
@@ -5201,6 +5759,31 @@ class Socket extends Emitter_1 {
|
|
|
5201
5759
|
this.flags = {};
|
|
5202
5760
|
return this;
|
|
5203
5761
|
}
|
|
5762
|
+
/**
|
|
5763
|
+
* @private
|
|
5764
|
+
*/
|
|
5765
|
+
_registerAckCallback(id, ack) {
|
|
5766
|
+
const timeout = this.flags.timeout;
|
|
5767
|
+
if (timeout === undefined) {
|
|
5768
|
+
this.acks[id] = ack;
|
|
5769
|
+
return;
|
|
5770
|
+
}
|
|
5771
|
+
// @ts-ignore
|
|
5772
|
+
const timer = this.io.setTimeoutFn(() => {
|
|
5773
|
+
delete this.acks[id];
|
|
5774
|
+
for (let i = 0; i < this.sendBuffer.length; i++) {
|
|
5775
|
+
if (this.sendBuffer[i].id === id) {
|
|
5776
|
+
this.sendBuffer.splice(i, 1);
|
|
5777
|
+
}
|
|
5778
|
+
}
|
|
5779
|
+
ack.call(this, new Error("operation has timed out"));
|
|
5780
|
+
}, timeout);
|
|
5781
|
+
this.acks[id] = (...args) => {
|
|
5782
|
+
// @ts-ignore
|
|
5783
|
+
this.io.clearTimeoutFn(timer);
|
|
5784
|
+
ack.apply(this, [null, ...args]);
|
|
5785
|
+
};
|
|
5786
|
+
}
|
|
5204
5787
|
/**
|
|
5205
5788
|
* Sends a packet.
|
|
5206
5789
|
*
|
|
@@ -5285,6 +5868,7 @@ class Socket extends Emitter_1 {
|
|
|
5285
5868
|
this.ondisconnect();
|
|
5286
5869
|
break;
|
|
5287
5870
|
case PacketType.CONNECT_ERROR:
|
|
5871
|
+
this.destroy();
|
|
5288
5872
|
const err = new Error(packet.data.message);
|
|
5289
5873
|
// @ts-ignore
|
|
5290
5874
|
err.data = packet.data.data;
|
|
@@ -5448,6 +6032,25 @@ class Socket extends Emitter_1 {
|
|
|
5448
6032
|
this.flags.volatile = true;
|
|
5449
6033
|
return this;
|
|
5450
6034
|
}
|
|
6035
|
+
/**
|
|
6036
|
+
* Sets a modifier for a subsequent event emission that the callback will be called with an error when the
|
|
6037
|
+
* given number of milliseconds have elapsed without an acknowledgement from the server:
|
|
6038
|
+
*
|
|
6039
|
+
* ```
|
|
6040
|
+
* socket.timeout(5000).emit("my-event", (err) => {
|
|
6041
|
+
* if (err) {
|
|
6042
|
+
* // the server did not acknowledge the event in the given delay
|
|
6043
|
+
* }
|
|
6044
|
+
* });
|
|
6045
|
+
* ```
|
|
6046
|
+
*
|
|
6047
|
+
* @returns self
|
|
6048
|
+
* @public
|
|
6049
|
+
*/
|
|
6050
|
+
timeout(timeout) {
|
|
6051
|
+
this.flags.timeout = timeout;
|
|
6052
|
+
return this;
|
|
6053
|
+
}
|
|
5451
6054
|
/**
|
|
5452
6055
|
* Adds a listener that will be fired when any event is emitted. The event name is passed as the first argument to the
|
|
5453
6056
|
* callback.
|
|
@@ -5854,13 +6457,7 @@ class Manager extends Emitter_1 {
|
|
|
5854
6457
|
_close() {
|
|
5855
6458
|
this.skipReconnect = true;
|
|
5856
6459
|
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";
|
|
6460
|
+
this.onclose("forced close");
|
|
5864
6461
|
if (this.engine)
|
|
5865
6462
|
this.engine.close();
|
|
5866
6463
|
}
|
|
@@ -6003,12 +6600,12 @@ var StentorServerChat = /** @class */ (function () {
|
|
|
6003
6600
|
// TODO: Authenticate - or at least tell the server who you are
|
|
6004
6601
|
// Socket events
|
|
6005
6602
|
this.socket.on("account_status", function (data) {
|
|
6006
|
-
log("SERVER: account_status: "
|
|
6603
|
+
log("SERVER: account_status: ".concat(JSON.stringify(data)));
|
|
6007
6604
|
// Register the "communication" with the server
|
|
6008
6605
|
if (!_this.token) {
|
|
6009
|
-
_this.token =
|
|
6606
|
+
_this.token = uuid_1();
|
|
6010
6607
|
dispatch(receiveToken(_this.token));
|
|
6011
|
-
log("CLIENT: created token: "
|
|
6608
|
+
log("CLIENT: created token: ".concat(_this.token));
|
|
6012
6609
|
}
|
|
6013
6610
|
_this.socket.emit("connection update", _this.token);
|
|
6014
6611
|
dispatch({
|
|
@@ -6020,7 +6617,7 @@ var StentorServerChat = /** @class */ (function () {
|
|
|
6020
6617
|
});
|
|
6021
6618
|
});
|
|
6022
6619
|
this.socket.on("new message", function (data) {
|
|
6023
|
-
log("SERVER: new message: "
|
|
6620
|
+
log("SERVER: new message: ".concat(JSON.stringify(data)));
|
|
6024
6621
|
_this.dispatch({
|
|
6025
6622
|
type: "chat",
|
|
6026
6623
|
detail: {
|
|
@@ -6035,7 +6632,7 @@ var StentorServerChat = /** @class */ (function () {
|
|
|
6035
6632
|
});
|
|
6036
6633
|
});
|
|
6037
6634
|
this.socket.on("user joined", function (data) {
|
|
6038
|
-
log("SERVER: user joined: "
|
|
6635
|
+
log("SERVER: user joined: ".concat(JSON.stringify(data)));
|
|
6039
6636
|
_this.visitorInfo.token = data.token;
|
|
6040
6637
|
_this.dispatch({
|
|
6041
6638
|
type: "chat",
|
|
@@ -6051,7 +6648,7 @@ var StentorServerChat = /** @class */ (function () {
|
|
|
6051
6648
|
});
|
|
6052
6649
|
});
|
|
6053
6650
|
this.socket.on("user left", function (data) {
|
|
6054
|
-
log("SERVER: user left: "
|
|
6651
|
+
log("SERVER: user left: ".concat(JSON.stringify(data)));
|
|
6055
6652
|
_this.dispatch({
|
|
6056
6653
|
type: "chat",
|
|
6057
6654
|
detail: {
|
|
@@ -6065,7 +6662,7 @@ var StentorServerChat = /** @class */ (function () {
|
|
|
6065
6662
|
});
|
|
6066
6663
|
});
|
|
6067
6664
|
this.socket.on("typing", function (data) {
|
|
6068
|
-
log("SERVER: typing: "
|
|
6665
|
+
log("SERVER: typing: ".concat(JSON.stringify(data)));
|
|
6069
6666
|
_this.dispatch({
|
|
6070
6667
|
type: "chat",
|
|
6071
6668
|
detail: {
|
|
@@ -6079,7 +6676,7 @@ var StentorServerChat = /** @class */ (function () {
|
|
|
6079
6676
|
});
|
|
6080
6677
|
});
|
|
6081
6678
|
this.socket.on("stop typing", function (data) {
|
|
6082
|
-
log("SERVER: stop typing: "
|
|
6679
|
+
log("SERVER: stop typing: ".concat(JSON.stringify(data)));
|
|
6083
6680
|
_this.dispatch({
|
|
6084
6681
|
type: "chat",
|
|
6085
6682
|
detail: {
|
|
@@ -6163,18 +6760,18 @@ function createChatServerCore(config, token) {
|
|
|
6163
6760
|
case "local":
|
|
6164
6761
|
return new StentorLocalChat();
|
|
6165
6762
|
default:
|
|
6166
|
-
throw throwBadKind(config.type);
|
|
6763
|
+
throw throwBadKind$1(config.type);
|
|
6167
6764
|
}
|
|
6168
6765
|
}
|
|
6169
6766
|
function createChatServer(config, token) {
|
|
6170
6767
|
return new LogChat(createChatServerCore(config, token));
|
|
6171
6768
|
}
|
|
6172
|
-
var ChatServerContext = React.createContext(null);
|
|
6769
|
+
var ChatServerContext = React$1.createContext(null);
|
|
6173
6770
|
function useChatServer(config) {
|
|
6174
|
-
var _a = React.useState(), server = _a[0], setServer = _a[1];
|
|
6771
|
+
var _a = React$1.useState(), server = _a[0], setServer = _a[1];
|
|
6175
6772
|
var token = reactRedux.useSelector(function (state) { return state.connection.token; });
|
|
6176
6773
|
var dispatch = useChatDispatch();
|
|
6177
|
-
React.useEffect(function () {
|
|
6774
|
+
React$1.useEffect(function () {
|
|
6178
6775
|
var newServer = createChatServer(config, token);
|
|
6179
6776
|
newServer.init(dispatch);
|
|
6180
6777
|
setServer(newServer);
|
|
@@ -6187,8 +6784,8 @@ function useChatServer(config) {
|
|
|
6187
6784
|
|
|
6188
6785
|
function useChatServerDispatch() {
|
|
6189
6786
|
var inner = useChatDispatch();
|
|
6190
|
-
var chatServer = React.useContext(ChatServerContext);
|
|
6191
|
-
return React.useCallback(function (action) {
|
|
6787
|
+
var chatServer = React$1.useContext(ChatServerContext);
|
|
6788
|
+
return React$1.useCallback(function (action) {
|
|
6192
6789
|
if (!action) {
|
|
6193
6790
|
console.warn("react bug? Someone invokes with null");
|
|
6194
6791
|
return;
|
|
@@ -6212,8 +6809,8 @@ var ChatChipsContainer = function (_) {
|
|
|
6212
6809
|
dispatch(executeAction(getChatServerActionLinkLabel(option)));
|
|
6213
6810
|
}
|
|
6214
6811
|
}
|
|
6215
|
-
return (React__default["default"].createElement("div", { className: "message-list-container__chips "
|
|
6216
|
-
React__default["default"].createElement(ChatChips, { options: chips, onOptionClick: optionOnChange })));
|
|
6812
|
+
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" : "") },
|
|
6813
|
+
React__default$1["default"].createElement(ChatChips, { options: chips, onOptionClick: optionOnChange })));
|
|
6217
6814
|
};
|
|
6218
6815
|
|
|
6219
6816
|
var ChatMenuItem = function (props) {
|
|
@@ -6222,31 +6819,31 @@ var ChatMenuItem = function (props) {
|
|
|
6222
6819
|
props.onClick(props.label);
|
|
6223
6820
|
}
|
|
6224
6821
|
}
|
|
6225
|
-
return (React__default["default"].createElement("button", { type: "button", className: "chat-menu-item", onClick: handleClick }, props.label));
|
|
6822
|
+
return (React__default$1["default"].createElement("button", { type: "button", className: "chat-menu-item", onClick: handleClick }, props.label));
|
|
6226
6823
|
};
|
|
6227
6824
|
|
|
6228
6825
|
var ChatMenu = function (props) {
|
|
6229
6826
|
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 });
|
|
6827
|
+
return (React__default$1["default"].createElement("div", { className: "chat-menu ".concat(props.opened ? "chat-menu--opened" : "chat-menu--closed") }, items.map(function (label, i) {
|
|
6828
|
+
return React__default$1["default"].createElement(ChatMenuItem, { key: i, onClick: props.onItemClick, label: label });
|
|
6232
6829
|
})));
|
|
6233
6830
|
};
|
|
6234
6831
|
|
|
6235
|
-
var UnknownMessage = function () { return React__default["default"].createElement(React__default["default"].Fragment, null); };
|
|
6832
|
+
var UnknownMessage = function () { return React__default$1["default"].createElement(React__default$1["default"].Fragment, null); };
|
|
6236
6833
|
|
|
6237
6834
|
function renderAvatar(entity) {
|
|
6238
|
-
return (React__default["default"].createElement("div", { className: "xappw-chat-msg-part__avatar" },
|
|
6239
|
-
React__default["default"].createElement(Avatar, { entity: entity })));
|
|
6835
|
+
return (React__default$1["default"].createElement("div", { className: "xappw-chat-msg-part__avatar" },
|
|
6836
|
+
React__default$1["default"].createElement(Avatar, { entity: entity })));
|
|
6240
6837
|
}
|
|
6241
6838
|
var ChatMessagePart = function (props) {
|
|
6242
|
-
return (React__default["default"].createElement("div", { className: "xappw-chat-msg-part" },
|
|
6839
|
+
return (React__default$1["default"].createElement("div", { className: "xappw-chat-msg-part" },
|
|
6243
6840
|
props.showAvatar && renderAvatar(props.user),
|
|
6244
6841
|
props.children));
|
|
6245
6842
|
};
|
|
6246
6843
|
|
|
6247
6844
|
function useExecuteActionCallback() {
|
|
6248
6845
|
var dispatch = useChatServerDispatch();
|
|
6249
|
-
return React.useCallback(function (text, token) {
|
|
6846
|
+
return React$1.useCallback(function (text, token) {
|
|
6250
6847
|
dispatch(executeAction(text, token));
|
|
6251
6848
|
}, [dispatch]);
|
|
6252
6849
|
}
|
|
@@ -6254,7 +6851,7 @@ function useExecuteActionCallback() {
|
|
|
6254
6851
|
function useButtonCallback() {
|
|
6255
6852
|
var handleOpenUrl = useOpenUrlCallback();
|
|
6256
6853
|
var executeAction = useExecuteActionCallback();
|
|
6257
|
-
return React.useCallback(function (button) {
|
|
6854
|
+
return React$1.useCallback(function (button) {
|
|
6258
6855
|
if (button.actionUrl) {
|
|
6259
6856
|
handleOpenUrl(button.actionUrl);
|
|
6260
6857
|
}
|
|
@@ -6287,17 +6884,17 @@ function isList(display) {
|
|
|
6287
6884
|
|
|
6288
6885
|
var CardMiddlewareWidget = function (props) {
|
|
6289
6886
|
var msg = props.msg, ctx = props.ctx;
|
|
6290
|
-
var card = React.useMemo(function () { return convertFromCardDisplay(msg); }, [msg]);
|
|
6887
|
+
var card = React$1.useMemo(function () { return convertFromCardDisplay(msg); }, [msg]);
|
|
6291
6888
|
var user = ctx.user;
|
|
6292
6889
|
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 }))));
|
|
6890
|
+
return (React__default$1["default"].createElement(ChatMessagePart, { showAvatar: true, user: user },
|
|
6891
|
+
React__default$1["default"].createElement("div", { className: "chat-msg" },
|
|
6892
|
+
React__default$1["default"].createElement(ChatCard, { card: card, onButtonClick: handleButton }))));
|
|
6296
6893
|
};
|
|
6297
6894
|
var CardMiddleware = function (next) { return function (props) {
|
|
6298
6895
|
var msg = props.msg, ctx = props.ctx;
|
|
6299
6896
|
if (isCard(msg)) {
|
|
6300
|
-
return React__default["default"].createElement(CardMiddlewareWidget, { msg: msg, ctx: ctx });
|
|
6897
|
+
return React__default$1["default"].createElement(CardMiddlewareWidget, { msg: msg, ctx: ctx });
|
|
6301
6898
|
}
|
|
6302
6899
|
return next(props);
|
|
6303
6900
|
}; };
|
|
@@ -6318,11 +6915,11 @@ function createSubscribableArray(originalValue) {
|
|
|
6318
6915
|
return {
|
|
6319
6916
|
getArray: function () { return cache; },
|
|
6320
6917
|
push: function (val) {
|
|
6321
|
-
cache = __spreadArray(__spreadArray([], cache, true), [val], false);
|
|
6918
|
+
cache = __spreadArray$1(__spreadArray$1([], cache, true), [val], false);
|
|
6322
6919
|
notify();
|
|
6323
6920
|
},
|
|
6324
6921
|
unshift: function (val) {
|
|
6325
|
-
cache = __spreadArray([val], cache, true);
|
|
6922
|
+
cache = __spreadArray$1([val], cache, true);
|
|
6326
6923
|
notify();
|
|
6327
6924
|
},
|
|
6328
6925
|
subscribe: function (callback) {
|
|
@@ -6339,9 +6936,9 @@ function createSubscribableArray(originalValue) {
|
|
|
6339
6936
|
};
|
|
6340
6937
|
}
|
|
6341
6938
|
function useSubscribableArray(array) {
|
|
6342
|
-
var _a = React.useState(array.getArray()), res = _a[0], setRes = _a[1];
|
|
6939
|
+
var _a = React$1.useState(array.getArray()), res = _a[0], setRes = _a[1];
|
|
6343
6940
|
var mounted = useIsMounted();
|
|
6344
|
-
React.useEffect(function () {
|
|
6941
|
+
React$1.useEffect(function () {
|
|
6345
6942
|
var subscription = array.subscribe(function (newVal) {
|
|
6346
6943
|
if (mounted()) {
|
|
6347
6944
|
setRes(newVal);
|
|
@@ -6373,24 +6970,24 @@ function useGlobalSubscribableArray(storage) {
|
|
|
6373
6970
|
}
|
|
6374
6971
|
function useLateMiddlewaresBuilder(storage) {
|
|
6375
6972
|
var middlewares = useGlobalSubscribableArray(storage);
|
|
6376
|
-
return React.useMemo(function () { return joinMiddlewares(middlewares); }, [middlewares]);
|
|
6973
|
+
return React$1.useMemo(function () { return joinMiddlewares(middlewares); }, [middlewares]);
|
|
6377
6974
|
}
|
|
6378
|
-
var storage = createStorage(
|
|
6975
|
+
var storage = createStorage(globalThis, "xappMsgMiddlewares");
|
|
6379
6976
|
function useLateMiddleware() {
|
|
6380
6977
|
return useLateMiddlewaresBuilder(storage);
|
|
6381
6978
|
}
|
|
6382
6979
|
|
|
6383
6980
|
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" })));
|
|
6981
|
+
return (React__default$1["default"].createElement("svg", { viewBox: "0 0 20 20" },
|
|
6982
|
+
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" }),
|
|
6983
|
+
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
6984
|
}
|
|
6388
6985
|
var ExternalLink = function (props) {
|
|
6389
6986
|
var url = props.url;
|
|
6390
|
-
var handleClick = React.useCallback(function (ev) {
|
|
6987
|
+
var handleClick = React$1.useCallback(function (ev) {
|
|
6391
6988
|
ev.preventDefault();
|
|
6392
6989
|
}, []);
|
|
6393
|
-
return (React__default["default"].createElement("a", { href: url, target: "_blank", rel: "noreferrer", className: props.className, onClick: handleClick }, getSvg()));
|
|
6990
|
+
return (React__default$1["default"].createElement("a", { href: url, target: "_blank", rel: "noreferrer", className: props.className, onClick: handleClick }, getSvg()));
|
|
6394
6991
|
};
|
|
6395
6992
|
|
|
6396
6993
|
function firstIndex(val, patterns) {
|
|
@@ -6442,7 +7039,7 @@ var parsers = [
|
|
|
6442
7039
|
pathParser,
|
|
6443
7040
|
queryParser
|
|
6444
7041
|
];
|
|
6445
|
-
function parse
|
|
7042
|
+
function parse(val) {
|
|
6446
7043
|
var parts = [];
|
|
6447
7044
|
var rest = val;
|
|
6448
7045
|
for (var _i = 0, parsers_1 = parsers; _i < parsers_1.length; _i++) {
|
|
@@ -6461,7 +7058,7 @@ var ellipsis = "/...";
|
|
|
6461
7058
|
function reduceLink(url, maxLength) {
|
|
6462
7059
|
if (url.length < maxLength)
|
|
6463
7060
|
return url;
|
|
6464
|
-
var parts = parse
|
|
7061
|
+
var parts = parse(url); // [scheme, domain, port, path, query, hash]
|
|
6465
7062
|
function getText() {
|
|
6466
7063
|
return parts.join("");
|
|
6467
7064
|
}
|
|
@@ -6500,10 +7097,10 @@ function reduceLink(url, maxLength) {
|
|
|
6500
7097
|
|
|
6501
7098
|
var SmartLink = function (props) {
|
|
6502
7099
|
var url = props.url, className = props.className;
|
|
6503
|
-
var handleClick = React.useCallback(function (ev) {
|
|
7100
|
+
var handleClick = React$1.useCallback(function (ev) {
|
|
6504
7101
|
ev.preventDefault();
|
|
6505
7102
|
}, []);
|
|
6506
|
-
return (React__default["default"].createElement("a", { href: url, target: "_blank", rel: "noreferrer", className: className, onClick: handleClick }, reduceLink(url, 40)));
|
|
7103
|
+
return (React__default$1["default"].createElement("a", { href: url, target: "_blank", rel: "noreferrer", className: className, onClick: handleClick }, reduceLink(url, 40)));
|
|
6507
7104
|
};
|
|
6508
7105
|
|
|
6509
7106
|
var ListItem = function (props) {
|
|
@@ -6511,66 +7108,66 @@ var ListItem = function (props) {
|
|
|
6511
7108
|
var item = props.item;
|
|
6512
7109
|
var layout = props.layout || "normal";
|
|
6513
7110
|
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 })))));
|
|
7111
|
+
return (React__default$1["default"].createElement(ActionItem, { className: "xappw-vlist-item-container", item: item, onButtonClick: props.onButtonClick, onExecute: props.onExecute, onOpenUrl: props.onOpenUrl },
|
|
7112
|
+
React__default$1["default"].createElement("div", { className: "xappw-vlist-item xappw-vlist-item--".concat(layout) },
|
|
7113
|
+
React__default$1["default"].createElement("div", { className: "xappw-vlist-item__description" },
|
|
7114
|
+
item.title && React__default$1["default"].createElement("div", { className: "xappw-vlist-item__title" },
|
|
7115
|
+
React__default$1["default"].createElement("span", null, item.title)),
|
|
7116
|
+
url && React__default$1["default"].createElement(SmartLink, { url: url, className: "xappw-vlist-item__link" }),
|
|
7117
|
+
item.subTitle && React__default$1["default"].createElement("div", { className: "xappw-vlist-item__subtitle" },
|
|
7118
|
+
React__default$1["default"].createElement("span", null, item.subTitle)),
|
|
7119
|
+
!!((_a = item.buttons) === null || _a === void 0 ? void 0 : _a.length) && React__default$1["default"].createElement(ChatActionButtons, { buttons: item.buttons, onClick: props.onButtonClick })),
|
|
7120
|
+
React__default$1["default"].createElement("div", { className: "xappw-vlist-item__side" },
|
|
7121
|
+
url && React__default$1["default"].createElement(ExternalLink, { url: "url", className: "xappw-vlist-item__external-link" }),
|
|
7122
|
+
React__default$1["default"].createElement(ActionItemImage, { item: item, className: "xappw-vlist-item__img", emptyImageVisible: props.emptyImageVisible })))));
|
|
6526
7123
|
};
|
|
6527
7124
|
|
|
6528
7125
|
var List = function (props) {
|
|
6529
7126
|
var list = props.list;
|
|
6530
|
-
var listRef = React.useRef(null);
|
|
7127
|
+
var listRef = React$1.useRef(null);
|
|
6531
7128
|
var hasImage = list.items.some(function (item) { return item.imageUrl; });
|
|
6532
7129
|
var titlesOnly = !list.items.some(function (item) { var _a; return item.subTitle || ((_a = item.buttons) === null || _a === void 0 ? void 0 : _a.length); });
|
|
6533
7130
|
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 })));
|
|
7131
|
+
return (React__default$1["default"].createElement("div", { className: "xappw-vlist-container__item", key: "item-key-".concat(itemIndex) },
|
|
7132
|
+
React__default$1["default"].createElement(ListItem, { item: item, layout: titlesOnly ? "titles" : "normal", emptyImageVisible: hasImage, onExecute: props.onExecute, onButtonClick: props.onButtonClick, onOpenUrl: props.onOpenUrl })));
|
|
6536
7133
|
});
|
|
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),
|
|
7134
|
+
return (React__default$1["default"].createElement("div", { className: "xappw-vlist" },
|
|
7135
|
+
React__default$1["default"].createElement("div", { ref: listRef, className: "xappw-vlist-container" },
|
|
7136
|
+
props.list.title && React__default$1["default"].createElement("div", { className: "xappw-vlist__header" }, props.list.title),
|
|
6540
7137
|
listItems)));
|
|
6541
7138
|
};
|
|
6542
7139
|
|
|
6543
7140
|
var ListMiddlewareWidget = function (props) {
|
|
6544
7141
|
var msg = props.msg, ctx = props.ctx;
|
|
6545
|
-
var list = React.useMemo(function () { return convertFromListDisplay(msg); }, [msg]);
|
|
7142
|
+
var list = React$1.useMemo(function () { return convertFromListDisplay(msg); }, [msg]);
|
|
6546
7143
|
var handleExecute = useExecuteActionCallback();
|
|
6547
7144
|
var handleButton = useButtonCallback();
|
|
6548
7145
|
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 }))));
|
|
7146
|
+
return (React__default$1["default"].createElement(ChatMessagePart, { showAvatar: true, user: user },
|
|
7147
|
+
list.type === "CAROUSEL" && React__default$1["default"].createElement("div", { className: "chat-msg chat-msg--fullwidth chat-msg--no-ava" },
|
|
7148
|
+
React__default$1["default"].createElement(Carousel, { list: list, onExecute: handleExecute, onButtonClick: handleButton, onOpenUrl: ctx.openUrl })),
|
|
7149
|
+
list.type === "LIST" && React__default$1["default"].createElement("div", { className: "chat-msg chat-msg--expand" },
|
|
7150
|
+
React__default$1["default"].createElement(List, { list: list, onExecute: handleExecute, onButtonClick: handleButton, onOpenUrl: ctx.openUrl }))));
|
|
6554
7151
|
};
|
|
6555
7152
|
var ListMiddleware = function (next) { return function (props) {
|
|
6556
7153
|
var msg = props.msg, ctx = props.ctx;
|
|
6557
7154
|
if (isList(msg)) {
|
|
6558
|
-
return React__default["default"].createElement(ListMiddlewareWidget, { msg: msg, ctx: ctx });
|
|
7155
|
+
return React__default$1["default"].createElement(ListMiddlewareWidget, { msg: msg, ctx: ctx });
|
|
6559
7156
|
}
|
|
6560
7157
|
return next(props);
|
|
6561
7158
|
}; };
|
|
6562
7159
|
|
|
6563
7160
|
var MultiSelect = function (props) {
|
|
6564
7161
|
var items = props.items, checked = props.checked, onChange = props.onChange;
|
|
6565
|
-
var handleToggle = React.useCallback(function (ev) {
|
|
7162
|
+
var handleToggle = React$1.useCallback(function (ev) {
|
|
6566
7163
|
var _a;
|
|
6567
7164
|
var id = ev.target.value;
|
|
6568
7165
|
onChange(__assign(__assign({}, checked), (_a = {}, _a[id] = !checked[id], _a)));
|
|
6569
7166
|
}, [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)))); })));
|
|
7167
|
+
return (React__default$1["default"].createElement("ul", { className: "xappw-multiselect" }, items.map(function (item) { return (React__default$1["default"].createElement("li", { key: item.id },
|
|
7168
|
+
React__default$1["default"].createElement("label", null,
|
|
7169
|
+
React__default$1["default"].createElement("input", { type: "checkbox", checked: checked[item.id] || false, onChange: handleToggle, value: item.id }),
|
|
7170
|
+
React__default$1["default"].createElement("span", null, item.title)))); })));
|
|
6574
7171
|
};
|
|
6575
7172
|
|
|
6576
7173
|
function isMultiSelect(display) {
|
|
@@ -6581,10 +7178,10 @@ function convertToMultiSelectItems(display) {
|
|
|
6581
7178
|
}
|
|
6582
7179
|
var MultiSelectMiddlewareWidget = function (props) {
|
|
6583
7180
|
var msg = props.msg, ctx = props.ctx;
|
|
6584
|
-
var items = React.useMemo(function () { return convertToMultiSelectItems(msg); }, [msg]);
|
|
7181
|
+
var items = React$1.useMemo(function () { return convertToMultiSelectItems(msg); }, [msg]);
|
|
6585
7182
|
var user = ctx.user;
|
|
6586
|
-
var _a = React.useState({}), checked = _a[0], setChecked = _a[1];
|
|
6587
|
-
var handleSubmit = React.useCallback(function () {
|
|
7183
|
+
var _a = React$1.useState({}), checked = _a[0], setChecked = _a[1];
|
|
7184
|
+
var handleSubmit = React$1.useCallback(function () {
|
|
6588
7185
|
ctx.send({
|
|
6589
7186
|
type: "custom",
|
|
6590
7187
|
payload: JSON.stringify({
|
|
@@ -6594,16 +7191,16 @@ var MultiSelectMiddlewareWidget = function (props) {
|
|
|
6594
7191
|
})
|
|
6595
7192
|
});
|
|
6596
7193
|
}, [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 })))));
|
|
7194
|
+
return (React__default$1["default"].createElement(ChatMessagePart, { showAvatar: true, user: user },
|
|
7195
|
+
React__default$1["default"].createElement("div", { className: "chat-msg" },
|
|
7196
|
+
React__default$1["default"].createElement("div", null,
|
|
7197
|
+
React__default$1["default"].createElement(MultiSelect, { items: items, checked: checked, onChange: setChecked }),
|
|
7198
|
+
React__default$1["default"].createElement(ActionButton, { label: "Submit", onClick: handleSubmit })))));
|
|
6602
7199
|
};
|
|
6603
7200
|
var MultiSelectMiddleware = function (next) { return function (props) {
|
|
6604
7201
|
var msg = props.msg, ctx = props.ctx;
|
|
6605
7202
|
if (isMultiSelect(msg)) {
|
|
6606
|
-
return React__default["default"].createElement(MultiSelectMiddlewareWidget, { msg: msg, ctx: ctx });
|
|
7203
|
+
return React__default$1["default"].createElement(MultiSelectMiddlewareWidget, { msg: msg, ctx: ctx });
|
|
6607
7204
|
}
|
|
6608
7205
|
return next(props);
|
|
6609
7206
|
}; };
|
|
@@ -6615,14 +7212,14 @@ var StandardMiddlewaresBuilder = joinMiddlewares([
|
|
|
6615
7212
|
]);
|
|
6616
7213
|
function useStandardMiddlewareBuilder() {
|
|
6617
7214
|
var lateMiddleware = useLateMiddleware();
|
|
6618
|
-
return React.useMemo(function () { return joinMiddlewares([
|
|
7215
|
+
return React$1.useMemo(function () { return joinMiddlewares([
|
|
6619
7216
|
lateMiddleware,
|
|
6620
7217
|
StandardMiddlewaresBuilder,
|
|
6621
7218
|
]); }, [lateMiddleware]);
|
|
6622
7219
|
}
|
|
6623
7220
|
function useStandardMiddleware() {
|
|
6624
7221
|
var builder = useStandardMiddlewareBuilder();
|
|
6625
|
-
return React.useMemo(function () { return builder(UnknownMessage); }, [builder]);
|
|
7222
|
+
return React$1.useMemo(function () { return builder(UnknownMessage); }, [builder]);
|
|
6626
7223
|
}
|
|
6627
7224
|
var StandardMiddlewares = StandardMiddlewaresBuilder(UnknownMessage);
|
|
6628
7225
|
|
|
@@ -6633,17 +7230,17 @@ function getTailSvgPath(owner) {
|
|
|
6633
7230
|
return "m 0 0 v 240 h 60 c -40 -40 -60 -160 -60 -240";
|
|
6634
7231
|
}
|
|
6635
7232
|
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" })));
|
|
7233
|
+
return (React__default$1["default"].createElement("svg", { className: "chat-text-bubble__tail", xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 80 240" },
|
|
7234
|
+
React__default$1["default"].createElement("path", { d: getTailSvgPath(owner), fill: "currentColor" })));
|
|
6638
7235
|
}
|
|
6639
7236
|
var ChatMessageBubble = function (props) {
|
|
6640
7237
|
var owner = props.owner, onClick = props.onClick;
|
|
6641
|
-
var handleClick = React.useCallback(function () {
|
|
7238
|
+
var handleClick = React$1.useCallback(function () {
|
|
6642
7239
|
if (onClick) {
|
|
6643
7240
|
onClick();
|
|
6644
7241
|
}
|
|
6645
7242
|
}, [onClick]);
|
|
6646
|
-
return (React__default["default"].createElement("div", { onClick: handleClick, className: "chat-text-bubble "
|
|
7243
|
+
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
7244
|
(props.hasTail) && getTailSvg(owner),
|
|
6648
7245
|
props.children));
|
|
6649
7246
|
};
|
|
@@ -6651,16 +7248,16 @@ var ChatMessageBubble = function (props) {
|
|
|
6651
7248
|
var ChatMarkdownMessage = function (props) {
|
|
6652
7249
|
var onOpenUrl = props.onOpenUrl;
|
|
6653
7250
|
var agentMessage = isAgent(props.message.user.nick);
|
|
6654
|
-
var ref = React.useRef();
|
|
7251
|
+
var ref = React$1.useRef();
|
|
6655
7252
|
var html = props.message.msg.html;
|
|
6656
|
-
var handleLinkClick = React.useCallback(function (ev) {
|
|
7253
|
+
var handleLinkClick = React$1.useCallback(function (ev) {
|
|
6657
7254
|
if (onOpenUrl) {
|
|
6658
7255
|
var link = ev.target;
|
|
6659
7256
|
ev.preventDefault();
|
|
6660
7257
|
onOpenUrl(link.href);
|
|
6661
7258
|
}
|
|
6662
7259
|
}, [onOpenUrl]);
|
|
6663
|
-
React.useEffect(function () {
|
|
7260
|
+
React$1.useEffect(function () {
|
|
6664
7261
|
if (ref.current) {
|
|
6665
7262
|
ref.current.innerHTML = html;
|
|
6666
7263
|
if (onOpenUrl) {
|
|
@@ -6677,10 +7274,10 @@ var ChatMarkdownMessage = function (props) {
|
|
|
6677
7274
|
}
|
|
6678
7275
|
return undefined;
|
|
6679
7276
|
}, [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 })))));
|
|
7277
|
+
return (React__default$1["default"].createElement("div", { className: "chat-msg" },
|
|
7278
|
+
React__default$1["default"].createElement("div", { className: "chat-text-container" },
|
|
7279
|
+
React__default$1["default"].createElement(ChatMessageBubble, { owner: agentMessage ? "others" : "mine", hasTail: agentMessage && !props.sibling },
|
|
7280
|
+
React__default$1["default"].createElement("div", { ref: ref })))));
|
|
6684
7281
|
};
|
|
6685
7282
|
|
|
6686
7283
|
var ChatPermissionMessage = function (props) {
|
|
@@ -6690,21 +7287,21 @@ var ChatPermissionMessage = function (props) {
|
|
|
6690
7287
|
var author = message.user;
|
|
6691
7288
|
var allowLabel = "Allow";
|
|
6692
7289
|
var denyLabel = "Deny";
|
|
6693
|
-
var writeAsAgent = React.useCallback(function (msg) {
|
|
7290
|
+
var writeAsAgent = React$1.useCallback(function (msg) {
|
|
6694
7291
|
ctx.write({
|
|
6695
7292
|
type: "msg",
|
|
6696
7293
|
user: author,
|
|
6697
7294
|
msg: msg
|
|
6698
7295
|
});
|
|
6699
7296
|
}, [ctx, author]);
|
|
6700
|
-
var writeAsUser = React.useCallback(function (msg) {
|
|
7297
|
+
var writeAsUser = React$1.useCallback(function (msg) {
|
|
6701
7298
|
ctx.write({
|
|
6702
7299
|
type: "msg",
|
|
6703
7300
|
user: user,
|
|
6704
7301
|
msg: msg
|
|
6705
7302
|
});
|
|
6706
7303
|
}, [ctx, user]);
|
|
6707
|
-
var handleFail = React.useCallback(function () {
|
|
7304
|
+
var handleFail = React$1.useCallback(function () {
|
|
6708
7305
|
ctx.send({
|
|
6709
7306
|
type: "msg",
|
|
6710
7307
|
user: undefined,
|
|
@@ -6713,14 +7310,14 @@ var ChatPermissionMessage = function (props) {
|
|
|
6713
7310
|
}
|
|
6714
7311
|
});
|
|
6715
7312
|
}, [ctx]);
|
|
6716
|
-
var handleSend = React.useCallback(function (msg) {
|
|
7313
|
+
var handleSend = React$1.useCallback(function (msg) {
|
|
6717
7314
|
ctx.send({
|
|
6718
7315
|
type: "permissionGrant",
|
|
6719
7316
|
user: author,
|
|
6720
7317
|
msg: msg
|
|
6721
7318
|
});
|
|
6722
7319
|
}, [author, ctx]);
|
|
6723
|
-
var handleResult = React.useCallback(function (position, userMsg) {
|
|
7320
|
+
var handleResult = React$1.useCallback(function (position, userMsg) {
|
|
6724
7321
|
handleSend({
|
|
6725
7322
|
text: userMsg,
|
|
6726
7323
|
location: position ? {
|
|
@@ -6737,10 +7334,10 @@ var ChatPermissionMessage = function (props) {
|
|
|
6737
7334
|
writeAsAgent(agentMsg);
|
|
6738
7335
|
}
|
|
6739
7336
|
}, [permissionRequest, writeAsUser, writeAsAgent, handleSend]);
|
|
6740
|
-
var handleDeny = React.useCallback(function (label) {
|
|
7337
|
+
var handleDeny = React$1.useCallback(function (label) {
|
|
6741
7338
|
handleResult(undefined, label);
|
|
6742
7339
|
}, [handleResult]);
|
|
6743
|
-
var handleAllow = React.useCallback(function (label) {
|
|
7340
|
+
var handleAllow = React$1.useCallback(function (label) {
|
|
6744
7341
|
if (navigator.geolocation) {
|
|
6745
7342
|
navigator.geolocation.getCurrentPosition(function (position) {
|
|
6746
7343
|
handleResult(position, label);
|
|
@@ -6750,20 +7347,20 @@ var ChatPermissionMessage = function (props) {
|
|
|
6750
7347
|
}
|
|
6751
7348
|
}, [handleFail, handleResult]);
|
|
6752
7349
|
if (!permissionRequest) {
|
|
6753
|
-
return React__default["default"].createElement(React__default["default"].Fragment, null);
|
|
7350
|
+
return React__default$1["default"].createElement(React__default$1["default"].Fragment, null);
|
|
6754
7351
|
}
|
|
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 }))));
|
|
7352
|
+
return (React__default$1["default"].createElement("div", { className: "chat-msg" },
|
|
7353
|
+
React__default$1["default"].createElement("div", { className: "buttons-container" },
|
|
7354
|
+
React__default$1["default"].createElement(ActionButton, { label: allowLabel, addClass: "button", onClick: handleAllow }),
|
|
7355
|
+
React__default$1["default"].createElement(ActionButton, { label: denyLabel, addClass: "button", onClick: handleDeny }))));
|
|
6759
7356
|
};
|
|
6760
7357
|
|
|
6761
7358
|
var ChatTextMessage = function (props) {
|
|
6762
7359
|
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)))));
|
|
7360
|
+
return (React__default$1["default"].createElement("div", { className: "chat-msg" },
|
|
7361
|
+
React__default$1["default"].createElement("div", { className: "chat-text-container" },
|
|
7362
|
+
React__default$1["default"].createElement(ChatMessageBubble, { owner: agentMessage ? "others" : "mine", hasTail: agentMessage && !props.sibling },
|
|
7363
|
+
React__default$1["default"].createElement("span", null, props.message.msg.text)))));
|
|
6767
7364
|
};
|
|
6768
7365
|
|
|
6769
7366
|
function getClassName(msg) {
|
|
@@ -6787,30 +7384,30 @@ var ChatMessage = function (props) {
|
|
|
6787
7384
|
// Here is the deal. If we have text (output speech), then text - card - list - options
|
|
6788
7385
|
// OR card OR list only. Avatar with text bubble.
|
|
6789
7386
|
var avaKey = avaKeys.find(function (key) { return !!msg[key]; });
|
|
6790
|
-
return (React__default["default"].createElement(React__default["default"].Fragment, null,
|
|
7387
|
+
return (React__default$1["default"].createElement(React__default$1["default"].Fragment, null,
|
|
6791
7388
|
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 })),
|
|
7389
|
+
React__default$1["default"].createElement(ChatMessagePart, { showAvatar: avaKey === "text", user: user },
|
|
7390
|
+
React__default$1["default"].createElement(ChatTextMessage, { message: props.message, sibling: props.sibling })),
|
|
6794
7391
|
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 })),
|
|
7392
|
+
React__default$1["default"].createElement(ChatMessagePart, { showAvatar: avaKey === "html", user: user },
|
|
7393
|
+
React__default$1["default"].createElement(ChatMarkdownMessage, { message: props.message, sibling: props.sibling, onOpenUrl: (_a = props.middlewareContext) === null || _a === void 0 ? void 0 : _a.openUrl })),
|
|
6797
7394
|
msg.displays && middleware && msg.displays.map(function (display, index) {
|
|
6798
7395
|
var Middleware = middleware;
|
|
6799
|
-
return React__default["default"].createElement(Middleware, { key: index, msg: display, ctx: props.middlewareContext });
|
|
7396
|
+
return React__default$1["default"].createElement(Middleware, { key: index, msg: display, ctx: props.middlewareContext });
|
|
6800
7397
|
}),
|
|
6801
7398
|
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 }))));
|
|
7399
|
+
React__default$1["default"].createElement(ChatMessagePart, { showAvatar: avaKey === "permissionRequest", user: user },
|
|
7400
|
+
React__default$1["default"].createElement(ChatPermissionMessage, { message: props.message, sibling: props.sibling, ctx: props.middlewareContext }))));
|
|
6804
7401
|
}
|
|
6805
|
-
return (React__default["default"].createElement(React__default["default"].Fragment, null));
|
|
7402
|
+
return (React__default$1["default"].createElement(React__default$1["default"].Fragment, null));
|
|
6806
7403
|
}
|
|
6807
7404
|
// empty
|
|
6808
|
-
return (React__default["default"].createElement("div", { className: "chat-msg-container-wrapper "
|
|
6809
|
-
React__default["default"].createElement("div", { className: "chat-msg-container "
|
|
7405
|
+
return (React__default$1["default"].createElement("div", { className: "chat-msg-container-wrapper ".concat(isAgent(props.message.user.nick) ? "agent" : "visitor", " ").concat(props.sibling ? "sibling" : "") },
|
|
7406
|
+
React__default$1["default"].createElement("div", { className: "chat-msg-container ".concat(getClassName(props.message)) }, renderByType())));
|
|
6810
7407
|
};
|
|
6811
7408
|
|
|
6812
7409
|
function useExternalScript(url) {
|
|
6813
|
-
React.useEffect(function () {
|
|
7410
|
+
React$1.useEffect(function () {
|
|
6814
7411
|
if (!url) {
|
|
6815
7412
|
return;
|
|
6816
7413
|
}
|
|
@@ -6834,7 +7431,7 @@ function getSafeCh(ch) {
|
|
|
6834
7431
|
if (ch >= "A" && ch <= "Z") {
|
|
6835
7432
|
return ch;
|
|
6836
7433
|
}
|
|
6837
|
-
return "_"
|
|
7434
|
+
return "_".concat(ch.charCodeAt(0), "_");
|
|
6838
7435
|
}
|
|
6839
7436
|
function getSrcId(url) {
|
|
6840
7437
|
var res = "es-";
|
|
@@ -6847,7 +7444,7 @@ function getSrcId(url) {
|
|
|
6847
7444
|
function useChatServerVisitorId() {
|
|
6848
7445
|
var dispatch = useChatServerDispatch();
|
|
6849
7446
|
var clientVisitorId = reactRedux.useSelector(function (state) { return state.visitorId; });
|
|
6850
|
-
return React.useMemo(function () { return ({
|
|
7447
|
+
return React$1.useMemo(function () { return ({
|
|
6851
7448
|
dispatch: dispatch,
|
|
6852
7449
|
visitorId: clientVisitorId
|
|
6853
7450
|
}); }, [dispatch, clientVisitorId]);
|
|
@@ -6855,8 +7452,8 @@ function useChatServerVisitorId() {
|
|
|
6855
7452
|
//send whenever server settings or visitor id changes
|
|
6856
7453
|
function useGreeting(active) {
|
|
6857
7454
|
var curr = useChatServerVisitorId();
|
|
6858
|
-
var snapshotRef = React.useRef(null);
|
|
6859
|
-
React.useEffect(function () {
|
|
7455
|
+
var snapshotRef = React$1.useRef(null);
|
|
7456
|
+
React$1.useEffect(function () {
|
|
6860
7457
|
if (active) {
|
|
6861
7458
|
if (snapshotRef.current !== curr) {
|
|
6862
7459
|
snapshotRef.current = curr;
|
|
@@ -6880,215 +7477,45 @@ function useGreeting(active) {
|
|
|
6880
7477
|
}
|
|
6881
7478
|
|
|
6882
7479
|
function match(item, pattern) {
|
|
6883
|
-
var value = item.
|
|
7480
|
+
var value = item.text;
|
|
6884
7481
|
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
7482
|
}
|
|
7003
7483
|
|
|
7004
7484
|
function useSuggestionsFetch(search, context) {
|
|
7005
7485
|
var env = useWidgetEnv();
|
|
7006
7486
|
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
|
|
7487
|
+
return useSuggestionsFetch_1({
|
|
7488
|
+
url: baseUrl,
|
|
7489
|
+
query: search,
|
|
7490
|
+
context: context
|
|
7018
7491
|
});
|
|
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
7492
|
}
|
|
7034
7493
|
|
|
7035
7494
|
function norm(index, len) {
|
|
7036
7495
|
return (index + len) % len;
|
|
7037
7496
|
}
|
|
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
7497
|
function useSuggestions(search, context) {
|
|
7066
|
-
var _a = React.useState(), suggestions = _a[0], setSuggestions = _a[1];
|
|
7067
|
-
var _b = React.useState(0), suggestionIndex = _b[0], setSuggestionIndex = _b[1];
|
|
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 () {
|
|
7498
|
+
var _a = React$1.useState(), suggestions = _a[0], setSuggestions = _a[1];
|
|
7499
|
+
var _b = React$1.useState(0), suggestionIndex = _b[0], setSuggestionIndex = _b[1];
|
|
7500
|
+
var _c = React$1.useState(search), query = _c[0], setQuery = _c[1];
|
|
7501
|
+
var _d = React$1.useState(context), contextState = _d[0], setContextState = _d[1];
|
|
7502
|
+
React$1.useEffect(function () {
|
|
7071
7503
|
setQuery(search);
|
|
7072
7504
|
}, [search]);
|
|
7073
|
-
React.useEffect(function () {
|
|
7505
|
+
React$1.useEffect(function () {
|
|
7074
7506
|
setContextState(context);
|
|
7075
7507
|
}, [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) {
|
|
7508
|
+
var suggestionItem = React$1.useMemo(function () { return suggestions ? findItemByIndex_1(suggestions, suggestionIndex) : undefined; }, [suggestions, suggestionIndex]);
|
|
7509
|
+
var shift = React$1.useCallback(function (delta) {
|
|
7083
7510
|
if (suggestions) {
|
|
7084
|
-
var len_1 = suggestions
|
|
7511
|
+
var len_1 = getItemsLength_1(suggestions);
|
|
7085
7512
|
setSuggestionIndex(function (index) { return norm(index + delta + ((index < 0 && delta <= 0) ? 1 : 0), len_1); });
|
|
7086
7513
|
}
|
|
7087
7514
|
else {
|
|
7088
7515
|
setSuggestionIndex(-1);
|
|
7089
7516
|
}
|
|
7090
7517
|
}, [suggestions]);
|
|
7091
|
-
var execute = React.useCallback(function (cmd) {
|
|
7518
|
+
var execute = React$1.useCallback(function (cmd) {
|
|
7092
7519
|
switch (cmd) {
|
|
7093
7520
|
case "prev":
|
|
7094
7521
|
shift(-1);
|
|
@@ -7103,20 +7530,26 @@ function useSuggestions(search, context) {
|
|
|
7103
7530
|
break;
|
|
7104
7531
|
}
|
|
7105
7532
|
}, [shift]);
|
|
7106
|
-
var suggestionsResponse = useSuggestionsFetch(query, contextState);
|
|
7107
|
-
var
|
|
7108
|
-
|
|
7109
|
-
|
|
7110
|
-
|
|
7533
|
+
var suggestionsResponse = useSuggestionsFetch(query || "", contextState);
|
|
7534
|
+
var suggestionsData = suggestionsResponse.state === "success" ? suggestionsResponse.data : undefined;
|
|
7535
|
+
var raw = React$1.useMemo(function () {
|
|
7536
|
+
return suggestionsData ? parseSuggestionsResponse_1(suggestionsData) : undefined;
|
|
7537
|
+
}, [suggestionsData]);
|
|
7538
|
+
React$1.useEffect(function () {
|
|
7111
7539
|
var prev = suggestionItem;
|
|
7112
7540
|
setSuggestions(raw);
|
|
7113
7541
|
if (prev && raw) {
|
|
7114
|
-
var prevValue = prev.
|
|
7115
|
-
|
|
7116
|
-
|
|
7117
|
-
|
|
7118
|
-
|
|
7119
|
-
|
|
7542
|
+
var prevValue = prev.text;
|
|
7543
|
+
var index = 0;
|
|
7544
|
+
for (var _i = 0, raw_1 = raw; _i < raw_1.length; _i++) {
|
|
7545
|
+
var group = raw_1[_i];
|
|
7546
|
+
for (var _a = 0, _b = group.items; _a < _b.length; _a++) {
|
|
7547
|
+
var item = _b[_a];
|
|
7548
|
+
if (match(item, prevValue)) {
|
|
7549
|
+
setSuggestionIndex(index);
|
|
7550
|
+
break;
|
|
7551
|
+
}
|
|
7552
|
+
index++;
|
|
7120
7553
|
}
|
|
7121
7554
|
}
|
|
7122
7555
|
}
|
|
@@ -7124,7 +7557,7 @@ function useSuggestions(search, context) {
|
|
|
7124
7557
|
setSuggestionIndex(-1);
|
|
7125
7558
|
}
|
|
7126
7559
|
}, [raw, suggestionItem]);
|
|
7127
|
-
return React.useMemo(function () { return ({
|
|
7560
|
+
return React$1.useMemo(function () { return ({
|
|
7128
7561
|
suggestions: suggestions,
|
|
7129
7562
|
index: suggestionIndex,
|
|
7130
7563
|
execute: execute,
|
|
@@ -7133,43 +7566,36 @@ function useSuggestions(search, context) {
|
|
|
7133
7566
|
}
|
|
7134
7567
|
|
|
7135
7568
|
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)));
|
|
7569
|
+
return (React__default$1["default"].createElement("div", { className: "drawer-bars", onClick: props.onToggle },
|
|
7570
|
+
React__default$1["default"].createElement("div", { className: "drawer-bar bar1" }),
|
|
7571
|
+
React__default$1["default"].createElement("div", { className: "drawer-bar bar2" })));
|
|
7146
7572
|
};
|
|
7147
7573
|
|
|
7148
7574
|
var CloseIcon = function () {
|
|
7149
7575
|
// 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" })));
|
|
7576
|
+
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" },
|
|
7577
|
+
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
7578
|
};
|
|
7153
7579
|
|
|
7154
7580
|
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" })));
|
|
7581
|
+
return (React__default$1["default"].createElement("svg", { xmlns: "http://www.w3.org/2000/svg", fill: "currentColor", viewBox: "0 0 16 16" },
|
|
7582
|
+
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
7583
|
};
|
|
7158
7584
|
|
|
7159
7585
|
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" }))));
|
|
7586
|
+
return (React__default$1["default"].createElement("svg", { viewBox: "80.208 98.129 313.069 282.823", xmlns: "http://www.w3.org/2000/svg" },
|
|
7587
|
+
React__default$1["default"].createElement("g", { transform: "matrix(0.024498, 0, 0, -0.038359, 79.83091, 381.182404)", fill: "currentColor", stroke: "none" },
|
|
7588
|
+
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" }),
|
|
7589
|
+
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
7590
|
};
|
|
7165
7591
|
|
|
7166
7592
|
var SendButton = function (props) {
|
|
7167
|
-
return (React__default["default"].createElement(
|
|
7593
|
+
return (React__default$1["default"].createElement(IconButton_1, { className: "xappw-send-button ".concat(props.className || ""), onClick: props.onClick, icon: SendIcon }));
|
|
7168
7594
|
};
|
|
7169
7595
|
|
|
7170
7596
|
var Input = function (props) {
|
|
7171
7597
|
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];
|
|
7598
|
+
var _a = React$1.useState(false), dragover = _a[0], setDragover = _a[1];
|
|
7173
7599
|
function onDragOver(event) {
|
|
7174
7600
|
setDragover(true);
|
|
7175
7601
|
event.preventDefault();
|
|
@@ -7182,22 +7608,23 @@ var Input = function (props) {
|
|
|
7182
7608
|
function onDragLeave() {
|
|
7183
7609
|
setDragover(false);
|
|
7184
7610
|
}
|
|
7185
|
-
|
|
7611
|
+
var handleOnSubmit = React$1.useCallback(function (event) {
|
|
7186
7612
|
event && event.preventDefault();
|
|
7187
7613
|
props.onSubmit(value); // send to the widget
|
|
7188
|
-
}
|
|
7189
|
-
var handleOnChange = React.useCallback(function (
|
|
7190
|
-
|
|
7191
|
-
onChange(val);
|
|
7614
|
+
}, [value]);
|
|
7615
|
+
var handleOnChange = React$1.useCallback(function (value) {
|
|
7616
|
+
onChange(value);
|
|
7192
7617
|
}, [onChange]);
|
|
7193
|
-
var handleClear = React.useCallback(function () {
|
|
7194
|
-
onChange(
|
|
7618
|
+
var handleClear = React$1.useCallback(function () {
|
|
7619
|
+
onChange({
|
|
7620
|
+
text: "",
|
|
7621
|
+
formats: []
|
|
7622
|
+
});
|
|
7195
7623
|
}, [onChange]);
|
|
7196
|
-
var handleKeyDown = React.useCallback(function (event) {
|
|
7624
|
+
var handleKeyDown = React$1.useCallback(function (event) {
|
|
7197
7625
|
if (suggestion) {
|
|
7198
7626
|
if (event.key === "End" || event.key === "ArrowRight" || event.key === "Enter") {
|
|
7199
|
-
|
|
7200
|
-
onChange(newVal);
|
|
7627
|
+
onChange(suggestion);
|
|
7201
7628
|
return;
|
|
7202
7629
|
}
|
|
7203
7630
|
}
|
|
@@ -7216,116 +7643,59 @@ var Input = function (props) {
|
|
|
7216
7643
|
}
|
|
7217
7644
|
}
|
|
7218
7645
|
}, [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,
|
|
7646
|
+
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 },
|
|
7647
|
+
React__default$1["default"].createElement("form", { className: "xappw-input-form", onSubmit: handleOnSubmit },
|
|
7648
|
+
React__default$1["default"].createElement(RichInput_1, { key: "input", className: "xappw-input", placeholder: "Type your question here...", onChange: handleOnChange, onKeyDown: handleKeyDown,
|
|
7223
7649
|
// 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
|
-
}))));
|
|
7650
|
+
value: value }),
|
|
7651
|
+
React__default$1["default"].createElement("div", { className: "xappw-input-form__buttons" },
|
|
7652
|
+
value.text && React__default$1["default"].createElement(IconButton_1, { icon: CloseIcon, className: "xappw-input-form__btn", onClick: handleClear }),
|
|
7653
|
+
React__default$1["default"].createElement(SendButton, { className: "xappw-input-form__btn", onClick: handleOnSubmit })))));
|
|
7270
7654
|
};
|
|
7271
7655
|
|
|
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]);
|
|
7656
|
+
function createActions(onItemUse) {
|
|
7657
|
+
return function (innerProps) {
|
|
7658
|
+
var data = innerProps.data;
|
|
7659
|
+
var canUse = data.type !== "FAQ";
|
|
7660
|
+
var handleUse = React$1.useCallback(function (ev) {
|
|
7661
|
+
onItemUse(data);
|
|
7662
|
+
ev.stopPropagation();
|
|
7663
|
+
}, [data]);
|
|
7664
|
+
if (!canUse) {
|
|
7665
|
+
return React__default$1["default"].createElement(React__default$1["default"].Fragment, null);
|
|
7666
|
+
}
|
|
7667
|
+
return (React__default$1["default"].createElement(IconButton_1, { className: "xappw-suggestions__use", onClick: handleUse, icon: LeftDownArrowIcon }));
|
|
7668
|
+
};
|
|
7287
7669
|
}
|
|
7288
7670
|
var Suggestions = function (props) {
|
|
7289
|
-
var
|
|
7671
|
+
var data = props.data, onItemUse = props.onItemUse;
|
|
7672
|
+
var len = data.length;
|
|
7290
7673
|
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 () {
|
|
7674
|
+
var _a = React$1.useState(), activeItem = _a[0], setActiveItem = _a[1];
|
|
7675
|
+
var item = React$1.useMemo(function () { return findItemByIndex_1(data, currentIndex); }, [data, currentIndex]);
|
|
7676
|
+
React$1.useEffect(function () {
|
|
7294
7677
|
setActiveItem(item);
|
|
7295
7678
|
}, [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 })); }))));
|
|
7679
|
+
var actions = React$1.useMemo(function () { return createActions(onItemUse); }, [onItemUse]);
|
|
7680
|
+
return (React__default$1["default"].createElement("div", { className: "xappw-suggestions ".concat(props.className || "") },
|
|
7681
|
+
(activeItem === null || activeItem === void 0 ? void 0 : activeItem.content) && React__default$1["default"].createElement("div", { className: "xappw-suggestions__answer" }, activeItem.content),
|
|
7682
|
+
!!data.length &&
|
|
7683
|
+
React__default$1["default"].createElement(SuggestionsList_1, { suggestions: data, index: currentIndex, className: "xappw-suggestions__groups", itemActions: actions, onItemClick: props.onItemClick, onItemHover: setActiveItem })));
|
|
7317
7684
|
};
|
|
7318
7685
|
|
|
7319
7686
|
var ChatFooter = function (props) {
|
|
7320
|
-
var _a, _b, _c
|
|
7687
|
+
var _a, _b, _c;
|
|
7321
7688
|
var onSubmit = props.onSubmit;
|
|
7322
|
-
var
|
|
7323
|
-
var
|
|
7689
|
+
var _d = React$1.useState(false), drawer = _d[0], setDrawerState = _d[1]; // false initially
|
|
7690
|
+
var _e = React$1.useState(), suggestionSearch = _e[0], setSuggestionSearch = _e[1];
|
|
7324
7691
|
var contexts = reactRedux.useSelector(function (state) { return state.activeContexts; });
|
|
7325
7692
|
var suggestions = useSuggestions(suggestionSearch, contexts);
|
|
7326
7693
|
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
|
|
7694
|
+
var menuItems = React$1.useMemo(function () { return menuItemsRaw ? menuItemsRaw.map(function (item) { return item.label; }) : []; }, [menuItemsRaw]);
|
|
7695
|
+
var _f = React$1.useState({
|
|
7696
|
+
text: "",
|
|
7697
|
+
formats: []
|
|
7698
|
+
}), input = _f[0], setInput = _f[1];
|
|
7329
7699
|
function toggleDrawer() {
|
|
7330
7700
|
var newDrawer = !drawer;
|
|
7331
7701
|
setDrawerState(newDrawer);
|
|
@@ -7337,29 +7707,32 @@ var ChatFooter = function (props) {
|
|
|
7337
7707
|
}
|
|
7338
7708
|
function handleChange(val) {
|
|
7339
7709
|
setInput(val);
|
|
7340
|
-
props.onChange(val);
|
|
7341
|
-
setSuggestionSearch(val);
|
|
7710
|
+
props.onChange(val.text);
|
|
7711
|
+
setSuggestionSearch(val.text);
|
|
7342
7712
|
}
|
|
7343
|
-
var handleSubmit = React.useCallback(function (message) {
|
|
7713
|
+
var handleSubmit = React$1.useCallback(function (message) {
|
|
7344
7714
|
setSuggestionSearch("");
|
|
7345
|
-
setInput(
|
|
7346
|
-
|
|
7715
|
+
setInput({
|
|
7716
|
+
text: "",
|
|
7717
|
+
formats: []
|
|
7718
|
+
});
|
|
7719
|
+
onSubmit(message.text);
|
|
7347
7720
|
}, [onSubmit]);
|
|
7348
|
-
var handleItemClick = React.useCallback(function (data) {
|
|
7349
|
-
handleSubmit(data
|
|
7721
|
+
var handleItemClick = React$1.useCallback(function (data) {
|
|
7722
|
+
handleSubmit(data);
|
|
7350
7723
|
}, [handleSubmit]);
|
|
7351
|
-
var handleItemUse = React.useCallback(function (data) {
|
|
7352
|
-
setInput(data
|
|
7353
|
-
setSuggestionSearch(data.
|
|
7724
|
+
var handleItemUse = React$1.useCallback(function (data) {
|
|
7725
|
+
setInput(data);
|
|
7726
|
+
setSuggestionSearch(data.text);
|
|
7354
7727
|
}, []);
|
|
7355
|
-
return (React__default["default"].createElement("div", { className: "chat-footer" },
|
|
7728
|
+
return (React__default$1["default"].createElement("div", { className: "chat-footer" },
|
|
7356
7729
|
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,
|
|
7730
|
+
React__default$1["default"].createElement(React__default$1["default"].Fragment, null,
|
|
7731
|
+
React__default$1["default"].createElement(ChatMenu, { opened: drawer, onItemClick: handleMenuItem, items: menuItems }),
|
|
7732
|
+
React__default$1["default"].createElement("div", { className: "chat-footer__menu-icon" },
|
|
7733
|
+
React__default$1["default"].createElement(DrawerBars, { onToggle: toggleDrawer }))) : React__default$1["default"].createElement(React__default$1["default"].Fragment, null),
|
|
7734
|
+
((_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 }),
|
|
7735
|
+
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
7736
|
// onFocus={this.inputOnFocus}
|
|
7364
7737
|
onFileUpload: props.onFileUpload })));
|
|
7365
7738
|
};
|
|
@@ -7395,12 +7768,12 @@ var MiddlewareContextFactory = /** @class */ (function () {
|
|
|
7395
7768
|
var CardContainer = function (props) {
|
|
7396
7769
|
function renderIcon() {
|
|
7397
7770
|
var isString = typeof (props.icon) === "string";
|
|
7398
|
-
return (React__default["default"].createElement("div", { className: "card-container__icon" }, !isString && props.icon));
|
|
7771
|
+
return (React__default$1["default"].createElement("div", { className: "card-container__icon" }, !isString && props.icon));
|
|
7399
7772
|
}
|
|
7400
|
-
return (React__default["default"].createElement("div", { className: "card-container "
|
|
7773
|
+
return (React__default$1["default"].createElement("div", { className: "card-container ".concat(props.addClass) },
|
|
7401
7774
|
renderIcon(),
|
|
7402
|
-
React__default["default"].createElement("div", { className: "card-container__content "
|
|
7403
|
-
React__default["default"].createElement("div", { className: "card-container__title" }, props.title),
|
|
7775
|
+
React__default$1["default"].createElement("div", { className: "card-container__content ".concat(props.contentAddClass) },
|
|
7776
|
+
React__default$1["default"].createElement("div", { className: "card-container__title" }, props.title),
|
|
7404
7777
|
props.children)));
|
|
7405
7778
|
};
|
|
7406
7779
|
|
|
@@ -7415,13 +7788,13 @@ var defaultProps$2 = {
|
|
|
7415
7788
|
var ChatRating = function (props) {
|
|
7416
7789
|
if (props === void 0) { props = defaultProps$2; }
|
|
7417
7790
|
var onRate = props.onRate;
|
|
7418
|
-
var rateBadButtonOnClick = React.useCallback(function () {
|
|
7791
|
+
var rateBadButtonOnClick = React$1.useCallback(function () {
|
|
7419
7792
|
onRate("bad");
|
|
7420
7793
|
}, [onRate]);
|
|
7421
|
-
var rateGoodButtonOnClick = React.useCallback(function () {
|
|
7794
|
+
var rateGoodButtonOnClick = React$1.useCallback(function () {
|
|
7422
7795
|
onRate("good");
|
|
7423
7796
|
}, [onRate]);
|
|
7424
|
-
var rateAgainButtonOnClick = React.useCallback(function () {
|
|
7797
|
+
var rateAgainButtonOnClick = React$1.useCallback(function () {
|
|
7425
7798
|
onRate(undefined);
|
|
7426
7799
|
}, [onRate]);
|
|
7427
7800
|
// Do not think this prop should be here
|
|
@@ -7429,40 +7802,40 @@ var ChatRating = function (props) {
|
|
|
7429
7802
|
return null;
|
|
7430
7803
|
}
|
|
7431
7804
|
if (!props.hasRating) {
|
|
7432
|
-
return (React__default["default"].createElement(CardContainer, { title: "Chat Rating", addClass: "chat-rating-card" },
|
|
7805
|
+
return (React__default$1["default"].createElement(CardContainer, { title: "Chat Rating", addClass: "chat-rating-card" },
|
|
7433
7806
|
props.agent.displayName,
|
|
7434
7807
|
" 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 }))));
|
|
7808
|
+
React__default$1["default"].createElement("div", { className: "buttons-container" },
|
|
7809
|
+
React__default$1["default"].createElement(ActionButton, { addClass: "button button-rate-bad", label: "Rate Bad", onClick: rateBadButtonOnClick }),
|
|
7810
|
+
React__default$1["default"].createElement(ActionButton, { addClass: "button button-rate-good", label: "Rate Good", onClick: rateGoodButtonOnClick }))));
|
|
7438
7811
|
}
|
|
7439
7812
|
else {
|
|
7440
|
-
return (React__default["default"].createElement(CardContainer, { title: "Chat Rating", addClass: "chat-rating-card" },
|
|
7813
|
+
return (React__default$1["default"].createElement(CardContainer, { title: "Chat Rating", addClass: "chat-rating-card" },
|
|
7441
7814
|
"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 }))));
|
|
7815
|
+
React__default$1["default"].createElement("div", { className: "buttons-container" },
|
|
7816
|
+
React__default$1["default"].createElement(ActionButton, { addClass: "button button-rate-again", label: "Rate again", onClick: rateAgainButtonOnClick }))));
|
|
7444
7817
|
}
|
|
7445
7818
|
};
|
|
7446
7819
|
|
|
7447
7820
|
var ChatRatingContainer = function (props) {
|
|
7448
7821
|
var dispatch = useChatServerDispatch();
|
|
7449
|
-
var handleRate = React.useCallback(function (rating) {
|
|
7822
|
+
var handleRate = React$1.useCallback(function (rating) {
|
|
7450
7823
|
dispatch(sendChatRating(rating));
|
|
7451
7824
|
}, [dispatch]);
|
|
7452
|
-
return React__default["default"].createElement(ChatRating, { agent: props.agent, hasRating: props.hasRating, shouldDisplay: props.shouldDisplay, onRate: handleRate });
|
|
7825
|
+
return React__default$1["default"].createElement(ChatRating, { agent: props.agent, hasRating: props.hasRating, shouldDisplay: props.shouldDisplay, onRate: handleRate });
|
|
7453
7826
|
};
|
|
7454
7827
|
|
|
7455
7828
|
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" })));
|
|
7829
|
+
return (React__default$1["default"].createElement("svg", { className: "message-svg", width: "16", height: "12", viewBox: "0 0 16 12" },
|
|
7830
|
+
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
7831
|
};
|
|
7459
7832
|
|
|
7460
7833
|
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];
|
|
7834
|
+
var name = React$1.useRef(null);
|
|
7835
|
+
var email = React$1.useRef(null);
|
|
7836
|
+
var message = React$1.useRef(null);
|
|
7837
|
+
var form = React$1.useRef(null);
|
|
7838
|
+
var _a = React$1.useState(false), sent = _a[0], setSent = _a[1];
|
|
7466
7839
|
function emailChanged() {
|
|
7467
7840
|
var _a, _b, _c;
|
|
7468
7841
|
if ((_a = email.current) === null || _a === void 0 ? void 0 : _a.validity.patternMismatch) {
|
|
@@ -7490,53 +7863,53 @@ var MessageForm = function (props) {
|
|
|
7490
7863
|
setSent(false);
|
|
7491
7864
|
}
|
|
7492
7865
|
function renderSent() {
|
|
7493
|
-
return (React__default["default"].createElement("div", { key: "sent", className: "message-form--sent" },
|
|
7866
|
+
return (React__default$1["default"].createElement("div", { key: "sent", className: "message-form--sent" },
|
|
7494
7867
|
"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 })));
|
|
7868
|
+
React__default$1["default"].createElement(ActionButton, { addClass: "button-resend", label: "Send another", onClick: sendAnother })));
|
|
7496
7869
|
}
|
|
7497
7870
|
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()));
|
|
7871
|
+
return (React__default$1["default"].createElement("form", { ref: form, key: "not-sent", className: "message-form", onSubmit: send },
|
|
7872
|
+
React__default$1["default"].createElement("div", { className: "content" },
|
|
7873
|
+
React__default$1["default"].createElement("div", { className: "section" },
|
|
7874
|
+
React__default$1["default"].createElement("label", { className: "label" }, "Name"),
|
|
7875
|
+
React__default$1["default"].createElement("input", { ref: name, maxLength: 255 })),
|
|
7876
|
+
React__default$1["default"].createElement("div", { className: "section" },
|
|
7877
|
+
React__default$1["default"].createElement("label", { className: "label" }, "Email"),
|
|
7878
|
+
React__default$1["default"].createElement("input", { ref: email, onChange: emailChanged, type: "email", required: true, pattern: EMAIL_REGEX })),
|
|
7879
|
+
React__default$1["default"].createElement("div", { className: "section" },
|
|
7880
|
+
React__default$1["default"].createElement("label", { className: "label" }, "Message"),
|
|
7881
|
+
React__default$1["default"].createElement("textarea", { required: true, ref: message }))),
|
|
7882
|
+
React__default$1["default"].createElement("div", { className: "button-container" },
|
|
7883
|
+
React__default$1["default"].createElement(ActionButton, { type: "submit", addClass: "message-form__submit", label: "Send" }))));
|
|
7884
|
+
}
|
|
7885
|
+
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
7886
|
};
|
|
7514
7887
|
|
|
7515
7888
|
var OfflineForm = function (props) {
|
|
7516
|
-
return React__default["default"].createElement(MessageForm, { title: "Offline message card title", onSubmit: props.onSubmit });
|
|
7889
|
+
return React__default$1["default"].createElement(MessageForm, { title: "Offline message card title", onSubmit: props.onSubmit });
|
|
7517
7890
|
};
|
|
7518
7891
|
|
|
7519
7892
|
var OfflineFormContainer = function (_) {
|
|
7520
7893
|
var dispatch = useChatServerDispatch();
|
|
7521
|
-
var handleSubmit = React.useCallback(function (data) {
|
|
7894
|
+
var handleSubmit = React$1.useCallback(function (data) {
|
|
7522
7895
|
dispatch(sendOfflineMsg(data));
|
|
7523
7896
|
}, [dispatch]);
|
|
7524
|
-
return React__default["default"].createElement(OfflineForm, { onSubmit: handleSubmit });
|
|
7897
|
+
return React__default$1["default"].createElement(OfflineForm, { onSubmit: handleSubmit });
|
|
7525
7898
|
};
|
|
7526
7899
|
|
|
7527
7900
|
var PrechatForm = function (props) {
|
|
7528
|
-
var _a = React.useState(false), sent = _a[0], setSent = _a[1];
|
|
7901
|
+
var _a = React$1.useState(false), sent = _a[0], setSent = _a[1];
|
|
7529
7902
|
var onSubmit = props.onSubmit;
|
|
7530
|
-
var handleSubmit = React.useCallback(function (msg) {
|
|
7903
|
+
var handleSubmit = React$1.useCallback(function (msg) {
|
|
7531
7904
|
onSubmit(msg);
|
|
7532
7905
|
setSent(true);
|
|
7533
7906
|
}, [onSubmit]);
|
|
7534
|
-
return (React__default["default"].createElement(React__default["default"].Fragment, null, !sent && React__default["default"].createElement(MessageForm, { title: "Introduce yourself!", onSubmit: handleSubmit })));
|
|
7907
|
+
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
7908
|
};
|
|
7536
7909
|
|
|
7537
7910
|
var PrechatFormContainer = function (_) {
|
|
7538
7911
|
var dispatch = useChatServerDispatch();
|
|
7539
|
-
var handleSubmit = React.useCallback(function (data) {
|
|
7912
|
+
var handleSubmit = React$1.useCallback(function (data) {
|
|
7540
7913
|
// Don't send empty messages
|
|
7541
7914
|
if (!data.message)
|
|
7542
7915
|
return;
|
|
@@ -7546,7 +7919,7 @@ var PrechatFormContainer = function (_) {
|
|
|
7546
7919
|
}));
|
|
7547
7920
|
dispatch(executeAction(data.message));
|
|
7548
7921
|
}, [dispatch]);
|
|
7549
|
-
return React__default["default"].createElement(PrechatForm, { onSubmit: handleSubmit });
|
|
7922
|
+
return React__default$1["default"].createElement(PrechatForm, { onSubmit: handleSubmit });
|
|
7550
7923
|
};
|
|
7551
7924
|
|
|
7552
7925
|
var defaultProps$1 = {
|
|
@@ -7556,8 +7929,8 @@ var QueuePosition = function (props) {
|
|
|
7556
7929
|
if (props === void 0) { props = defaultProps$1; }
|
|
7557
7930
|
if (props.position <= 0)
|
|
7558
7931
|
return null;
|
|
7559
|
-
return (React__default["default"].createElement("div", { className: "system-msg-container" },
|
|
7560
|
-
React__default["default"].createElement("span", { className: "system-msg" },
|
|
7932
|
+
return (React__default$1["default"].createElement("div", { className: "system-msg-container" },
|
|
7933
|
+
React__default$1["default"].createElement("span", { className: "system-msg" },
|
|
7561
7934
|
"Queue position: ",
|
|
7562
7935
|
props.position)));
|
|
7563
7936
|
};
|
|
@@ -7565,34 +7938,34 @@ var QueuePosition = function (props) {
|
|
|
7565
7938
|
function getMessageByType(msg) {
|
|
7566
7939
|
switch (msg.type) {
|
|
7567
7940
|
case "chat.memberjoin":
|
|
7568
|
-
return msg.user.displayName
|
|
7941
|
+
return "".concat(msg.user.displayName, " has joined the chat");
|
|
7569
7942
|
case "chat.memberleave":
|
|
7570
|
-
return msg.user.displayName
|
|
7943
|
+
return "".concat(msg.user.displayName, " has left the chat");
|
|
7571
7944
|
case "chat.rating":
|
|
7572
7945
|
if (!msg.newRating) {
|
|
7573
7946
|
return "You have removed the chat rating";
|
|
7574
7947
|
}
|
|
7575
7948
|
else {
|
|
7576
7949
|
var rating = convertToSentenceCase(msg.newRating);
|
|
7577
|
-
return "You have rated the chat service "
|
|
7950
|
+
return "You have rated the chat service ".concat(rating);
|
|
7578
7951
|
}
|
|
7579
7952
|
default:
|
|
7580
7953
|
return JSON.stringify(msg);
|
|
7581
7954
|
}
|
|
7582
7955
|
}
|
|
7583
7956
|
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))));
|
|
7957
|
+
return (React__default$1["default"].createElement("div", { className: "system-msg-container" },
|
|
7958
|
+
React__default$1["default"].createElement("span", { className: "system-msg" }, getMessageByType(props.message))));
|
|
7586
7959
|
};
|
|
7587
7960
|
function convertToSentenceCase(s) {
|
|
7588
7961
|
return s[0].toUpperCase() + s.slice(1);
|
|
7589
7962
|
}
|
|
7590
7963
|
|
|
7591
7964
|
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" })));
|
|
7965
|
+
return (React__default$1["default"].createElement("div", { className: "typing-indicator" },
|
|
7966
|
+
React__default$1["default"].createElement("div", { className: "typing-indicator-part" }),
|
|
7967
|
+
React__default$1["default"].createElement("div", { className: "typing-indicator-part" }),
|
|
7968
|
+
React__default$1["default"].createElement("div", { className: "typing-indicator-part" })));
|
|
7596
7969
|
};
|
|
7597
7970
|
|
|
7598
7971
|
/**
|
|
@@ -7601,13 +7974,13 @@ var TypingIndicator = function (_) {
|
|
|
7601
7974
|
var TypingStatus = function (props) {
|
|
7602
7975
|
var agent_names = Object.values(props.agents)
|
|
7603
7976
|
.filter(function (agent) { return agent.typing; });
|
|
7604
|
-
return (React__default["default"].createElement(React__default["default"].Fragment, null, agent_names.map(function (agent) {
|
|
7605
|
-
return (React__default["default"].createElement("div", { className: "chat-msg-container-wrapper", key: "typing-status-"
|
|
7606
|
-
React__default["default"].createElement("div", { key: agent.nick, className: "chat-msg-container agent chat-typing-progress" },
|
|
7607
|
-
React__default["default"].createElement(ChatMessagePart, { user: agent, showAvatar: true },
|
|
7608
|
-
React__default["default"].createElement("div", { className: "chat-msg" },
|
|
7609
|
-
React__default["default"].createElement(ChatMessageBubble, { owner: "others", hasTail: true },
|
|
7610
|
-
React__default["default"].createElement(TypingIndicator, null)))))));
|
|
7977
|
+
return (React__default$1["default"].createElement(React__default$1["default"].Fragment, null, agent_names.map(function (agent) {
|
|
7978
|
+
return (React__default$1["default"].createElement("div", { className: "chat-msg-container-wrapper", key: "typing-status-".concat(agent.user.nick) },
|
|
7979
|
+
React__default$1["default"].createElement("div", { key: agent.user.nick, className: "chat-msg-container agent chat-typing-progress" },
|
|
7980
|
+
React__default$1["default"].createElement(ChatMessagePart, { user: agent.user, showAvatar: true },
|
|
7981
|
+
React__default$1["default"].createElement("div", { className: "chat-msg" },
|
|
7982
|
+
React__default$1["default"].createElement(ChatMessageBubble, { owner: "others", hasTail: true },
|
|
7983
|
+
React__default$1["default"].createElement(TypingIndicator, null)))))));
|
|
7611
7984
|
})));
|
|
7612
7985
|
};
|
|
7613
7986
|
|
|
@@ -7628,19 +8001,19 @@ var defaultProps = {
|
|
|
7628
8001
|
var MessageList = function (props) {
|
|
7629
8002
|
if (props === void 0) { props = defaultProps; }
|
|
7630
8003
|
var onSend = props.onSend, onWrite = props.onWrite, onOpenUrl = props.onOpenUrl;
|
|
7631
|
-
var messagesEndRef = React.useRef(null);
|
|
7632
|
-
React.useEffect(function () {
|
|
8004
|
+
var messagesEndRef = React$1.useRef(null);
|
|
8005
|
+
React$1.useEffect(function () {
|
|
7633
8006
|
messagesEndRef.current.scrollIntoView({ behavior: "smooth" });
|
|
7634
8007
|
}, [props.messages]);
|
|
7635
|
-
var handleSend = React.useCallback(function (msg) {
|
|
8008
|
+
var handleSend = React$1.useCallback(function (msg) {
|
|
7636
8009
|
onSend(msg);
|
|
7637
8010
|
messagesEndRef.current.scrollIntoView({ behavior: "smooth" });
|
|
7638
8011
|
}, [onSend]);
|
|
7639
|
-
var handleWrite = React.useCallback(function (msg) {
|
|
8012
|
+
var handleWrite = React$1.useCallback(function (msg) {
|
|
7640
8013
|
onWrite(msg);
|
|
7641
8014
|
messagesEndRef.current.scrollIntoView({ behavior: "smooth" });
|
|
7642
8015
|
}, [onWrite]);
|
|
7643
|
-
var ctxCache = React.useMemo(function () { return new MiddlewareContextFactory({
|
|
8016
|
+
var ctxCache = React$1.useMemo(function () { return new MiddlewareContextFactory({
|
|
7644
8017
|
send: handleSend,
|
|
7645
8018
|
write: handleWrite,
|
|
7646
8019
|
openUrl: onOpenUrl
|
|
@@ -7652,24 +8025,25 @@ var MessageList = function (props) {
|
|
|
7652
8025
|
* @param addClass
|
|
7653
8026
|
*/
|
|
7654
8027
|
function renderByType(msg, sibling) {
|
|
7655
|
-
var
|
|
8028
|
+
var _a;
|
|
8029
|
+
var user = (_a = props.agents[msg.user.nick]) === null || _a === void 0 ? void 0 : _a.user;
|
|
7656
8030
|
switch (msg.type) {
|
|
7657
8031
|
case "chat.file":
|
|
7658
8032
|
case "chat.msg":
|
|
7659
|
-
return (React__default["default"].createElement(ChatMessage, { key: msg.type + msg.timestamp, message: msg, sibling: sibling, agent: user, messageMiddleware: props.messageMiddleware, middlewareContext: ctxCache.resolve(user) }));
|
|
8033
|
+
return (React__default$1["default"].createElement(ChatMessage, { key: msg.type + msg.timestamp, message: msg, sibling: sibling, agent: user, messageMiddleware: props.messageMiddleware, middlewareContext: ctxCache.resolve(user) }));
|
|
7660
8034
|
case "chat.memberjoin":
|
|
7661
8035
|
case "chat.memberleave":
|
|
7662
8036
|
case "chat.rating":
|
|
7663
8037
|
case "chat.typing":
|
|
7664
|
-
return (React__default["default"].createElement(SystemMessage, { key: msg.type + msg.timestamp, message: msg }));
|
|
8038
|
+
return (React__default$1["default"].createElement(SystemMessage, { key: msg.type + msg.timestamp, message: msg }));
|
|
7665
8039
|
case "chat.request.rating":
|
|
7666
|
-
return (React__default["default"].createElement(ChatRatingContainer, { key: msg.type + msg.timestamp, agent:
|
|
8040
|
+
return (React__default$1["default"].createElement(ChatRatingContainer, { key: msg.type + msg.timestamp, agent: user, hasRating: props.hasRating, shouldDisplay: msg.timestamp === props.lastRatingRequestTimestamp }));
|
|
7667
8041
|
case "chat.offline":
|
|
7668
|
-
return React__default["default"].createElement(OfflineFormContainer, { key: "offline-"
|
|
8042
|
+
return React__default$1["default"].createElement(OfflineFormContainer, { key: "offline-".concat(msg.timestamp) });
|
|
7669
8043
|
case "chat.prechat":
|
|
7670
|
-
return React__default["default"].createElement(PrechatFormContainer, { key: "prechat" });
|
|
8044
|
+
return React__default$1["default"].createElement(PrechatFormContainer, { key: "prechat" });
|
|
7671
8045
|
default:
|
|
7672
|
-
return React__default["default"].createElement("div", { key: +new Date() },
|
|
8046
|
+
return React__default$1["default"].createElement("div", { key: +new Date() },
|
|
7673
8047
|
"Unhandled message: ",
|
|
7674
8048
|
JSON.stringify(msg));
|
|
7675
8049
|
}
|
|
@@ -7692,23 +8066,23 @@ var MessageList = function (props) {
|
|
|
7692
8066
|
});
|
|
7693
8067
|
}
|
|
7694
8068
|
var agents = props.agents, queuePosition = props.queuePosition;
|
|
7695
|
-
return (React__default["default"].createElement("div", { className: "message-list-container" },
|
|
7696
|
-
React__default["default"].createElement("div", { className: "message-list-container__msgs" },
|
|
8069
|
+
return (React__default$1["default"].createElement("div", { className: "message-list-container" },
|
|
8070
|
+
React__default$1["default"].createElement("div", { className: "message-list-container__msgs" },
|
|
7697
8071
|
renderAll(),
|
|
7698
|
-
React__default["default"].createElement("div", { ref: messagesEndRef, style: { float: "left", clear: "both" } }),
|
|
7699
|
-
React__default["default"].createElement(QueuePosition, { position: queuePosition }),
|
|
7700
|
-
React__default["default"].createElement(TypingStatus, { agents: agents })),
|
|
7701
|
-
React__default["default"].createElement(ChatChipsContainer, null)));
|
|
8072
|
+
React__default$1["default"].createElement("div", { ref: messagesEndRef, style: { float: "left", clear: "both" } }),
|
|
8073
|
+
React__default$1["default"].createElement(QueuePosition, { position: queuePosition }),
|
|
8074
|
+
React__default$1["default"].createElement(TypingStatus, { agents: agents })),
|
|
8075
|
+
React__default$1["default"].createElement(ChatChipsContainer, null)));
|
|
7702
8076
|
};
|
|
7703
8077
|
|
|
7704
8078
|
var ServerOffline = function () {
|
|
7705
|
-
return React__default["default"].createElement("div", { className: "server-offline" },
|
|
7706
|
-
React__default["default"].createElement("h2", null, "Chat is currently unavailable"),
|
|
7707
|
-
React__default["default"].createElement("h3", null, "Server is offline"));
|
|
8079
|
+
return React__default$1["default"].createElement("div", { className: "server-offline" },
|
|
8080
|
+
React__default$1["default"].createElement("h2", null, "Chat is currently unavailable"),
|
|
8081
|
+
React__default$1["default"].createElement("h3", null, "Server is offline"));
|
|
7708
8082
|
};
|
|
7709
8083
|
|
|
7710
8084
|
var MinimizeButton = function (props) {
|
|
7711
|
-
return React__default["default"].createElement("div", { className: "minimize-button", onClick: props.onClick });
|
|
8085
|
+
return React__default$1["default"].createElement("div", { className: "minimize-button", onClick: props.onClick });
|
|
7712
8086
|
};
|
|
7713
8087
|
|
|
7714
8088
|
var DEFAULT_STATUS_CONFIG = {
|
|
@@ -7728,31 +8102,31 @@ function getStatusText(status, config) {
|
|
|
7728
8102
|
}
|
|
7729
8103
|
var StatusContainer = function (props) {
|
|
7730
8104
|
var _a;
|
|
7731
|
-
return (React__default["default"].createElement("div", { className: "status-container" },
|
|
7732
|
-
React__default["default"].createElement("div", { className: "status-container__avatar" },
|
|
7733
|
-
React__default["default"].createElement(Avatar, { entity: props.agent })),
|
|
7734
|
-
React__default["default"].createElement("div", { className: "status-text" },
|
|
7735
|
-
React__default["default"].createElement("span", null, getStatusText(props.accountStatus, (_a = props.config) === null || _a === void 0 ? void 0 : _a.status))),
|
|
8105
|
+
return (React__default$1["default"].createElement("div", { className: "status-container" },
|
|
8106
|
+
React__default$1["default"].createElement("div", { className: "status-container__avatar" },
|
|
8107
|
+
React__default$1["default"].createElement(Avatar, { entity: props.agent })),
|
|
8108
|
+
React__default$1["default"].createElement("div", { className: "status-text" },
|
|
8109
|
+
React__default$1["default"].createElement("span", null, getStatusText(props.accountStatus, (_a = props.config) === null || _a === void 0 ? void 0 : _a.status))),
|
|
7736
8110
|
props.canMinimize &&
|
|
7737
|
-
React__default["default"].createElement(MinimizeButton, { onClick: props.minimizeOnClick })));
|
|
8111
|
+
React__default$1["default"].createElement(MinimizeButton, { onClick: props.minimizeOnClick })));
|
|
7738
8112
|
};
|
|
7739
8113
|
|
|
7740
8114
|
function buildStyleContent(theme) {
|
|
7741
8115
|
var _a, _b, _c, _d;
|
|
7742
|
-
return "\n:root {\n"
|
|
8116
|
+
return "\n:root {\n".concat(buildVariables(withPrefix("\t--xapp-", union(single("primary-color", theme === null || theme === void 0 ? void 0 : theme.primaryColor), withPrefix("widget-", union(getSize(theme === null || theme === void 0 ? void 0 : theme.size), getMargins(theme === null || theme === void 0 ? void 0 : theme.margin), getBorderStyle(theme === null || theme === void 0 ? void 0 : theme.border))), getChatButtonStyle(theme === null || theme === void 0 ? void 0 : theme.chatButton), withPrefix("header-", getHeaderStyle(theme === null || theme === void 0 ? void 0 : theme.header)), withPrefix("footer-", getFooterStyle(theme === null || theme === void 0 ? void 0 : theme.footer)), withPrefix("content-", union(getBackgroundStyle((_a = theme === null || theme === void 0 ? void 0 : theme.content) === null || _a === void 0 ? void 0 : _a.background))), withPrefix("messages-", getMessagesStyle(theme === null || theme === void 0 ? void 0 : theme.messages)), withPrefix("send-", getButtonStyle(theme === null || theme === void 0 ? void 0 : theme.sendButton)), withPrefix("menu-", getButtonStyle(theme === null || theme === void 0 ? void 0 : theme.menuButton)), withPrefix("menu-", getMenuStyle(theme === null || theme === void 0 ? void 0 : theme.menu)), withPrefix("minimize-", getButtonStyle(theme === null || theme === void 0 ? void 0 : theme.minimizeButton)), withPrefix("carousel-", union(withPrefix("title-", getTextStyle((_b = theme === null || theme === void 0 ? void 0 : theme.carousel) === null || _b === void 0 ? void 0 : _b.title)), withPrefix("subtitle-", getTextStyle((_c = theme === null || theme === void 0 ? void 0 : theme.carousel) === null || _c === void 0 ? void 0 : _c.subtitle)), withPrefix("action-", getButtonStyle((_d = theme === null || theme === void 0 ? void 0 : theme.carousel) === null || _d === void 0 ? void 0 : _d.button)))), withPrefix("input-", getInputStyle(theme === null || theme === void 0 ? void 0 : theme.input)), withPrefix("cta-", getCtaStyle(theme === null || theme === void 0 ? void 0 : theme.cta))))), "\n}");
|
|
7743
8117
|
}
|
|
7744
8118
|
function WidgetStylesheet(props) {
|
|
7745
8119
|
var theme = props.theme;
|
|
7746
8120
|
var stylesContent = buildStyleContent(theme);
|
|
7747
|
-
return (React__default["default"].createElement("style", null, stylesContent));
|
|
8121
|
+
return (React__default$1["default"].createElement("style", null, stylesContent));
|
|
7748
8122
|
}
|
|
7749
8123
|
function buildVariables(gen) {
|
|
7750
8124
|
var result = gen.next();
|
|
7751
8125
|
var res = "";
|
|
7752
8126
|
while (result.done === false) {
|
|
7753
8127
|
var _a = result.value, key = _a[0], value = _a[1];
|
|
7754
|
-
if (value !== undefined) {
|
|
7755
|
-
res += key
|
|
8128
|
+
if (value !== undefined && value !== null && value !== "") {
|
|
8129
|
+
res += "".concat(key, ": ").concat(value, ";\n\r");
|
|
7756
8130
|
}
|
|
7757
8131
|
result = gen.next();
|
|
7758
8132
|
}
|
|
@@ -7760,14 +8134,14 @@ function buildVariables(gen) {
|
|
|
7760
8134
|
}
|
|
7761
8135
|
function withPrefix(prefix, gen) {
|
|
7762
8136
|
var result;
|
|
7763
|
-
return __generator(this, function (_a) {
|
|
8137
|
+
return __generator$1(this, function (_a) {
|
|
7764
8138
|
switch (_a.label) {
|
|
7765
8139
|
case 0:
|
|
7766
8140
|
result = gen.next();
|
|
7767
8141
|
_a.label = 1;
|
|
7768
8142
|
case 1:
|
|
7769
8143
|
if (!!result.done) return [3 /*break*/, 3];
|
|
7770
|
-
return [4 /*yield*/, [""
|
|
8144
|
+
return [4 /*yield*/, ["".concat(prefix).concat(result.value[0]), result.value[1]]];
|
|
7771
8145
|
case 2:
|
|
7772
8146
|
_a.sent();
|
|
7773
8147
|
result = gen.next();
|
|
@@ -7782,7 +8156,7 @@ function union() {
|
|
|
7782
8156
|
for (_i = 0; _i < arguments.length; _i++) {
|
|
7783
8157
|
children[_i] = arguments[_i];
|
|
7784
8158
|
}
|
|
7785
|
-
return __generator(this, function (_b) {
|
|
8159
|
+
return __generator$1(this, function (_b) {
|
|
7786
8160
|
switch (_b.label) {
|
|
7787
8161
|
case 0:
|
|
7788
8162
|
_a = 0, children_1 = children;
|
|
@@ -7807,7 +8181,7 @@ function union() {
|
|
|
7807
8181
|
});
|
|
7808
8182
|
}
|
|
7809
8183
|
function single(key, value) {
|
|
7810
|
-
return __generator(this, function (_a) {
|
|
8184
|
+
return __generator$1(this, function (_a) {
|
|
7811
8185
|
switch (_a.label) {
|
|
7812
8186
|
case 0: return [4 /*yield*/, [key, value]];
|
|
7813
8187
|
case 1:
|
|
@@ -7817,7 +8191,7 @@ function single(key, value) {
|
|
|
7817
8191
|
});
|
|
7818
8192
|
}
|
|
7819
8193
|
function empty() {
|
|
7820
|
-
return __generator(this, function (_a) {
|
|
8194
|
+
return __generator$1(this, function (_a) {
|
|
7821
8195
|
return [2 /*return*/];
|
|
7822
8196
|
});
|
|
7823
8197
|
}
|
|
@@ -7837,7 +8211,7 @@ function getMessageStyle(style) {
|
|
|
7837
8211
|
return union(single('bubble-color', style === null || style === void 0 ? void 0 : style.bubbleColor), getTextStyle(style === null || style === void 0 ? void 0 : style.text));
|
|
7838
8212
|
}
|
|
7839
8213
|
function getSize(style) {
|
|
7840
|
-
return __generator(this, function (_a) {
|
|
8214
|
+
return __generator$1(this, function (_a) {
|
|
7841
8215
|
switch (_a.label) {
|
|
7842
8216
|
case 0: return [4 /*yield*/, ['width', style === null || style === void 0 ? void 0 : style.width]];
|
|
7843
8217
|
case 1:
|
|
@@ -7850,7 +8224,7 @@ function getSize(style) {
|
|
|
7850
8224
|
});
|
|
7851
8225
|
}
|
|
7852
8226
|
function getMargins(style) {
|
|
7853
|
-
return __generator(this, function (_a) {
|
|
8227
|
+
return __generator$1(this, function (_a) {
|
|
7854
8228
|
switch (_a.label) {
|
|
7855
8229
|
case 0:
|
|
7856
8230
|
if (!style) return [3 /*break*/, 5];
|
|
@@ -7872,7 +8246,7 @@ function getMargins(style) {
|
|
|
7872
8246
|
});
|
|
7873
8247
|
}
|
|
7874
8248
|
function getPaddings(style) {
|
|
7875
|
-
return __generator(this, function (_a) {
|
|
8249
|
+
return __generator$1(this, function (_a) {
|
|
7876
8250
|
switch (_a.label) {
|
|
7877
8251
|
case 0:
|
|
7878
8252
|
if (!style) return [3 /*break*/, 5];
|
|
@@ -7894,7 +8268,7 @@ function getPaddings(style) {
|
|
|
7894
8268
|
});
|
|
7895
8269
|
}
|
|
7896
8270
|
function getTextStyle(style) {
|
|
7897
|
-
return __generator(this, function (_a) {
|
|
8271
|
+
return __generator$1(this, function (_a) {
|
|
7898
8272
|
switch (_a.label) {
|
|
7899
8273
|
case 0:
|
|
7900
8274
|
if (!style) return [3 /*break*/, 6];
|
|
@@ -7919,7 +8293,7 @@ function getTextStyle(style) {
|
|
|
7919
8293
|
});
|
|
7920
8294
|
}
|
|
7921
8295
|
function getBackgroundStyle(style) {
|
|
7922
|
-
return __generator(this, function (_a) {
|
|
8296
|
+
return __generator$1(this, function (_a) {
|
|
7923
8297
|
switch (_a.label) {
|
|
7924
8298
|
case 0: return [4 /*yield*/, ["background", style]];
|
|
7925
8299
|
case 1:
|
|
@@ -7929,7 +8303,7 @@ function getBackgroundStyle(style) {
|
|
|
7929
8303
|
});
|
|
7930
8304
|
}
|
|
7931
8305
|
function getButtonStyle(style) {
|
|
7932
|
-
return __generator(this, function (_a) {
|
|
8306
|
+
return __generator$1(this, function (_a) {
|
|
7933
8307
|
switch (_a.label) {
|
|
7934
8308
|
case 0: return [4 /*yield*/, ['button-color', style === null || style === void 0 ? void 0 : style.color]];
|
|
7935
8309
|
case 1:
|
|
@@ -7945,7 +8319,7 @@ function getMenuStyle(style) {
|
|
|
7945
8319
|
return union(withPrefix("item-", getMenuItemStyle(style === null || style === void 0 ? void 0 : style.item)));
|
|
7946
8320
|
}
|
|
7947
8321
|
function getBorderStyle(style) {
|
|
7948
|
-
return __generator(this, function (_a) {
|
|
8322
|
+
return __generator$1(this, function (_a) {
|
|
7949
8323
|
switch (_a.label) {
|
|
7950
8324
|
case 0:
|
|
7951
8325
|
if (!style) return [3 /*break*/, 4];
|
|
@@ -7991,14 +8365,14 @@ function getCtaStyle(style) {
|
|
|
7991
8365
|
var ChatWidgetWrapper = function (props) {
|
|
7992
8366
|
var rawConfig = props.config;
|
|
7993
8367
|
var connection = useConnectionInfo(rawConfig);
|
|
7994
|
-
var config = React.useMemo(function () {
|
|
8368
|
+
var config = React$1.useMemo(function () {
|
|
7995
8369
|
var _a;
|
|
7996
8370
|
return (__assign(__assign({}, rawConfig), { connection: connection, assetUrl: (_a = connection === null || connection === void 0 ? void 0 : connection.serverUrl) !== null && _a !== void 0 ? _a : defaultServerUrl, env: rawConfig }));
|
|
7997
8371
|
}, [connection, rawConfig]);
|
|
7998
8372
|
var chatServer = useChatServer(connection);
|
|
7999
|
-
return (React__default["default"].createElement(ChatConfigContext.Provider, { value: config },
|
|
8000
|
-
React__default["default"].createElement(ChatServerContext.Provider, { value: chatServer },
|
|
8001
|
-
React__default["default"].createElement(ChatWidget, __assign({}, props)))));
|
|
8373
|
+
return (React__default$1["default"].createElement(ChatConfigContext.Provider, { value: config },
|
|
8374
|
+
React__default$1["default"].createElement(ChatServerContext.Provider, { value: chatServer },
|
|
8375
|
+
React__default$1["default"].createElement(ChatWidget, __assign({}, props)))));
|
|
8002
8376
|
};
|
|
8003
8377
|
var ChatWidget = function (props) {
|
|
8004
8378
|
var _a, _b, _c, _d, _e, _f;
|
|
@@ -8009,12 +8383,12 @@ var ChatWidget = function (props) {
|
|
|
8009
8383
|
var mode = (_a = props.mode) !== null && _a !== void 0 ? _a : "normal";
|
|
8010
8384
|
var dockedMode = mode === "docked";
|
|
8011
8385
|
var staticMode = mode === "static";
|
|
8012
|
-
var modeClass = "widget-container--"
|
|
8386
|
+
var modeClass = "widget-container--".concat(mode);
|
|
8013
8387
|
var canMinimize = !dockedMode && !staticMode;
|
|
8014
8388
|
// Our state - pull from storage
|
|
8015
|
-
var _g = React.useState(!canMinimize || !!get("visible)") || (((_b = props.config) === null || _b === void 0 ? void 0 : _b.autoOpenOnWidth) && window.matchMedia("(min-width: "
|
|
8016
|
-
var _h = React.useState(false), typing = _h[0], setTypingState = _h[1]; // false initially
|
|
8017
|
-
var chatServer = React.useContext(ChatServerContext);
|
|
8389
|
+
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];
|
|
8390
|
+
var _h = React$1.useState(false), typing = _h[0], setTypingState = _h[1]; // false initially
|
|
8391
|
+
var chatServer = React$1.useContext(ChatServerContext);
|
|
8018
8392
|
function setVisible(newVisible) {
|
|
8019
8393
|
if (staticMode) {
|
|
8020
8394
|
return;
|
|
@@ -8108,22 +8482,22 @@ var ChatWidget = function (props) {
|
|
|
8108
8482
|
useGreeting(!isOffline && !props.preChatFormEnabled && visible);
|
|
8109
8483
|
var config = props.config, onConnectionStatusChange = props.onConnectionStatusChange;
|
|
8110
8484
|
var connectionStatus = chatState.connection.connectionStatus;
|
|
8111
|
-
React.useEffect(function () {
|
|
8485
|
+
React$1.useEffect(function () {
|
|
8112
8486
|
if (onConnectionStatusChange) {
|
|
8113
8487
|
onConnectionStatusChange(connectionStatus);
|
|
8114
8488
|
}
|
|
8115
8489
|
}, [connectionStatus, onConnectionStatusChange]);
|
|
8116
8490
|
useExternalScript((_d = props.config) === null || _d === void 0 ? void 0 : _d.middlewareUrl);
|
|
8117
|
-
return (React__default["default"].createElement(React__default["default"].Fragment, null,
|
|
8118
|
-
React__default["default"].createElement("div", { className: "widget-container "
|
|
8119
|
-
React__default["default"].createElement(WidgetStylesheet, { theme: config === null || config === void 0 ? void 0 : config.theme }),
|
|
8120
|
-
React__default["default"].createElement(StatusContainer, { accountStatus: chatState.accountStatus, minimizeOnClick: minimizeOnClick, agent: (_e = chatState.agents["agent:robot"]) === null || _e === void 0 ? void 0 : _e.user, canMinimize: canMinimize, config: config === null || config === void 0 ? void 0 : config.header }),
|
|
8121
|
-
React__default["default"].createElement(MessageList, { visible: visible, queuePosition: chatState.queuePosition, isChatting: chatState.isChatting, isOffline: isOffline, messages: messages, agents: chatState.agents, lastRatingRequestTimestamp: chatState.lastRatingRequestTimestamp, hasRating: chatState.hasRating, visitorId: chatState.visitorId, messageMiddleware: props.messageMiddleware, onSend: handleSendMessage, onWrite: handleWriteMessage, onOpenUrl: handleOpenUrl }),
|
|
8122
|
-
React__default["default"].createElement("div", { className: "spinner-container "
|
|
8123
|
-
React__default["default"].createElement("div", { className: "spinner" })),
|
|
8124
|
-
connectionStatus === "offline" && React__default["default"].createElement(ServerOffline, null),
|
|
8125
|
-
React__default["default"].createElement(ChatFooter, { isChatting: chatState.isChatting, onChange: handleOnChange, onSubmit: handleOnSubmit, onFileUpload: handleFileUpload })),
|
|
8126
|
-
React__default["default"].createElement(ChatButton, { addClass: getVisibilityClass(), onClick: chatButtonOnClick, config: (_f = props.config) === null || _f === void 0 ? void 0 : _f.cta, visible: visible })));
|
|
8491
|
+
return (React__default$1["default"].createElement(React__default$1["default"].Fragment, null,
|
|
8492
|
+
React__default$1["default"].createElement("div", { className: "widget-container ".concat(modeClass, " ").concat(getVisibilityClass()) },
|
|
8493
|
+
React__default$1["default"].createElement(WidgetStylesheet, { theme: config === null || config === void 0 ? void 0 : config.theme }),
|
|
8494
|
+
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 }),
|
|
8495
|
+
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 }),
|
|
8496
|
+
React__default$1["default"].createElement("div", { className: "spinner-container ".concat(visible && connectionStatus === "pending" ? "visible" : "") },
|
|
8497
|
+
React__default$1["default"].createElement("div", { className: "spinner" })),
|
|
8498
|
+
connectionStatus === "offline" && React__default$1["default"].createElement(ServerOffline, null),
|
|
8499
|
+
React__default$1["default"].createElement(ChatFooter, { isChatting: chatState.isChatting, onChange: handleOnChange, onSubmit: handleOnSubmit, onFileUpload: handleFileUpload })),
|
|
8500
|
+
React__default$1["default"].createElement(ChatButton, { addClass: getVisibilityClass(), onClick: chatButtonOnClick, config: (_f = props.config) === null || _f === void 0 ? void 0 : _f.cta, visible: visible })));
|
|
8127
8501
|
};
|
|
8128
8502
|
|
|
8129
8503
|
function tryParseJson(str) {
|
|
@@ -8162,7 +8536,7 @@ var BrowserStateStorage = /** @class */ (function () {
|
|
|
8162
8536
|
* @returns {string}
|
|
8163
8537
|
*/
|
|
8164
8538
|
function visitorFingerprint() {
|
|
8165
|
-
return
|
|
8539
|
+
return uuid_1();
|
|
8166
8540
|
}
|
|
8167
8541
|
|
|
8168
8542
|
var DEFAULT_VISITOR = {
|
|
@@ -8218,7 +8592,7 @@ function connectionReducer(state, action) {
|
|
|
8218
8592
|
}
|
|
8219
8593
|
|
|
8220
8594
|
function joinMessages(messages, msg) {
|
|
8221
|
-
return insertSorted(__spreadArray([], messages, true), msg, function (left, right) { return left.timestamp - right.timestamp; });
|
|
8595
|
+
return insertSorted(__spreadArray$1([], messages, true), msg, function (left, right) { return left.timestamp - right.timestamp; });
|
|
8222
8596
|
}
|
|
8223
8597
|
|
|
8224
8598
|
function memberJoin(state, detail) {
|
|
@@ -8249,7 +8623,7 @@ function memberLeave(state, detail) {
|
|
|
8249
8623
|
|
|
8250
8624
|
function resetReducer(state) {
|
|
8251
8625
|
if (state === void 0) { state = DEFAULT_STATE; }
|
|
8252
|
-
return __assign(__assign({}, createDefaultState()), { connection: __assign(__assign({}, state.connection), { nonce:
|
|
8626
|
+
return __assign(__assign({}, createDefaultState()), { connection: __assign(__assign({}, state.connection), { nonce: uuid_1() }), visitor: state.visitor, visitorId: state.visitorId });
|
|
8253
8627
|
}
|
|
8254
8628
|
|
|
8255
8629
|
// todo: create reducer (requires redux-thunk dependncy)
|
|
@@ -8348,7 +8722,7 @@ function mapSynthetic(state, action) {
|
|
|
8348
8722
|
}
|
|
8349
8723
|
};
|
|
8350
8724
|
default:
|
|
8351
|
-
throw new Error("Unknown synthetic action. Detail type: "
|
|
8725
|
+
throw new Error("Unknown synthetic action. Detail type: ".concat(action.detail.type));
|
|
8352
8726
|
}
|
|
8353
8727
|
}
|
|
8354
8728
|
function storeHandler(state, action) {
|
|
@@ -8363,13 +8737,14 @@ function storeHandler(state, action) {
|
|
|
8363
8737
|
}
|
|
8364
8738
|
}
|
|
8365
8739
|
|
|
8366
|
-
function createChatStore(config) {
|
|
8367
|
-
|
|
8740
|
+
function createChatStore(config, dataStorage) {
|
|
8741
|
+
if (dataStorage === void 0) { dataStorage = sessionStorage; }
|
|
8742
|
+
var storage = new BrowserStateStorage(dataStorage, "xappchat.".concat(config.serverUrl, ".").concat(config.accountKey));
|
|
8368
8743
|
var chatReducer = persistStateReducer(storage, DEFAULT_STATE, storeHandler);
|
|
8369
8744
|
var middlewares = [
|
|
8370
8745
|
thunk__default["default"]
|
|
8371
8746
|
];
|
|
8372
|
-
var composeEnhancers =
|
|
8747
|
+
var composeEnhancers = globalThis.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || redux.compose;
|
|
8373
8748
|
return redux.createStore(chatReducer, composeEnhancers(redux.applyMiddleware.apply(void 0, middlewares)));
|
|
8374
8749
|
}
|
|
8375
8750
|
|
|
@@ -8377,13 +8752,13 @@ var ChatWidgetContainer = function (props) {
|
|
|
8377
8752
|
var _a;
|
|
8378
8753
|
var messageMiddleware = useStandardMiddleware();
|
|
8379
8754
|
var connection = useServerConfig(props.config);
|
|
8380
|
-
var chatStore = React.useMemo(function () { return createChatStore(connection); }, [connection]);
|
|
8755
|
+
var chatStore = React$1.useMemo(function () { return createChatStore(connection); }, [connection]);
|
|
8381
8756
|
if ((_a = props.config) === null || _a === void 0 ? void 0 : _a.disabled) {
|
|
8382
|
-
return React__default["default"].createElement(React__default["default"].Fragment, null);
|
|
8757
|
+
return React__default$1["default"].createElement(React__default$1["default"].Fragment, null);
|
|
8383
8758
|
}
|
|
8384
8759
|
var widgetProps = __assign(__assign({}, props), { messageMiddleware: messageMiddleware });
|
|
8385
|
-
return (React__default["default"].createElement(reactRedux.Provider, { store: chatStore },
|
|
8386
|
-
React__default["default"].createElement(ChatWidgetWrapper, __assign({}, widgetProps))));
|
|
8760
|
+
return (React__default$1["default"].createElement(reactRedux.Provider, { store: chatStore },
|
|
8761
|
+
React__default$1["default"].createElement(ChatWidgetWrapper, __assign({}, widgetProps))));
|
|
8387
8762
|
};
|
|
8388
8763
|
|
|
8389
8764
|
function createStaticReducer(state) {
|
|
@@ -8404,35 +8779,35 @@ function createStaticStore(state) {
|
|
|
8404
8779
|
|
|
8405
8780
|
var StaticChatWidgetContainer = function (props) {
|
|
8406
8781
|
var state = props.state;
|
|
8407
|
-
var store = React.useMemo(function () {
|
|
8782
|
+
var store = React$1.useMemo(function () {
|
|
8408
8783
|
return createStaticStore(state);
|
|
8409
8784
|
}, [state]);
|
|
8410
|
-
var config = React.useMemo(function () {
|
|
8785
|
+
var config = React$1.useMemo(function () {
|
|
8411
8786
|
return __assign(__assign({}, props.config), { connection: {
|
|
8412
8787
|
serverUrl: "",
|
|
8413
8788
|
type: "local"
|
|
8414
8789
|
} });
|
|
8415
8790
|
}, [props.config]);
|
|
8416
|
-
return (React__default["default"].createElement(reactRedux.Provider, { store: store },
|
|
8417
|
-
React__default["default"].createElement(ChatWidgetWrapper, __assign({}, props, { config: config }))));
|
|
8791
|
+
return (React__default$1["default"].createElement(reactRedux.Provider, { store: store },
|
|
8792
|
+
React__default$1["default"].createElement(ChatWidgetWrapper, __assign({}, props, { config: config }))));
|
|
8418
8793
|
};
|
|
8419
8794
|
|
|
8420
8795
|
function createStateFromMessages(messages) {
|
|
8421
8796
|
var def = createDefaultState();
|
|
8422
|
-
return __assign(__assign({}, def), { connection: __assign(__assign({}, def.connection), { connectionStatus: "online" }), accountStatus: "online", chats: __spreadArray([], messages, true), isChatting: true });
|
|
8797
|
+
return __assign(__assign({}, def), { connection: __assign(__assign({}, def.connection), { connectionStatus: "online" }), accountStatus: "online", chats: __spreadArray$1([], messages, true), isChatting: true });
|
|
8423
8798
|
}
|
|
8424
8799
|
|
|
8425
8800
|
var StaticMessagesChatWidgetContainer = function (props) {
|
|
8426
8801
|
var messages = props.messages;
|
|
8427
|
-
var state = React.useMemo(function () {
|
|
8802
|
+
var state = React$1.useMemo(function () {
|
|
8428
8803
|
return createStateFromMessages(messages);
|
|
8429
8804
|
}, [messages]);
|
|
8430
|
-
return (React__default["default"].createElement(StaticChatWidgetContainer, { state: state, mode: props.mode, config: props.config }));
|
|
8805
|
+
return (React__default$1["default"].createElement(StaticChatWidgetContainer, { state: state, mode: props.mode, config: props.config }));
|
|
8431
8806
|
};
|
|
8432
8807
|
|
|
8433
8808
|
Object.defineProperty(exports, 'React', {
|
|
8434
8809
|
enumerable: true,
|
|
8435
|
-
get: function () { return React__default["default"]; }
|
|
8810
|
+
get: function () { return React__default$1["default"]; }
|
|
8436
8811
|
});
|
|
8437
8812
|
exports.ActionButton = ActionButton;
|
|
8438
8813
|
exports.Avatar = Avatar;
|