@xapp/chat-widget 1.54.0 → 1.54.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/Suggestions/Suggestions.d.ts +1 -0
- package/dist/index.css +2 -2
- package/dist/index.es.js +87 -8
- package/dist/index.es.js.map +1 -1
- package/dist/index.js +87 -8
- package/dist/index.js.map +1 -1
- package/package.json +12 -12
package/dist/index.js
CHANGED
|
@@ -2590,10 +2590,15 @@ function getItemsLength(result) {
|
|
|
2590
2590
|
|
|
2591
2591
|
var SuggestionsList = function (props) {
|
|
2592
2592
|
var suggestions = props.suggestions, itemActions = props.itemActions, className = props.className;
|
|
2593
|
-
var length = React.useMemo(function () {
|
|
2593
|
+
var length = React.useMemo(function () {
|
|
2594
|
+
if (suggestions) {
|
|
2595
|
+
return getItemsLength(suggestions);
|
|
2596
|
+
}
|
|
2597
|
+
return 0;
|
|
2598
|
+
}, [suggestions]);
|
|
2594
2599
|
var currentIndex = length >= 0 ? props.index : NaN;
|
|
2595
2600
|
var indexWalker = 0;
|
|
2596
|
-
return (React__default["default"].createElement("div", { className: "xappw-suggestions-list ".concat(className || "") }, suggestions.map(function (group, index) {
|
|
2601
|
+
return (React__default["default"].createElement("div", { className: "xappw-suggestions-list ".concat(className || "") }, suggestions === null || suggestions === void 0 ? void 0 : suggestions.map(function (group, index) {
|
|
2597
2602
|
var res = (React__default["default"].createElement(SuggestionsGroup, { key: index, group: group, currentIndex: currentIndex - indexWalker, itemActions: itemActions, onItemClick: props.onItemClick, onItemHover: props.onItemHover, onSpanClick: props.onSpanClick }));
|
|
2598
2603
|
indexWalker += group.items.length;
|
|
2599
2604
|
return res;
|
|
@@ -8870,10 +8875,19 @@ function createActions(onItemUse) {
|
|
|
8870
8875
|
};
|
|
8871
8876
|
}
|
|
8872
8877
|
var Suggestions = function (props) {
|
|
8873
|
-
var data = props.data, onItemUse = props.onItemUse;
|
|
8874
|
-
var
|
|
8878
|
+
var data = props.data, onItemUse = props.onItemUse, searchTerms = props.searchTerms;
|
|
8879
|
+
var _a = React$1.useState(), fixedSuggestions = _a[0], setFixedSuggestions = _a[1];
|
|
8880
|
+
React$1.useEffect(function () {
|
|
8881
|
+
if (data) {
|
|
8882
|
+
setFixedSuggestions(data);
|
|
8883
|
+
}
|
|
8884
|
+
if (!searchTerms) {
|
|
8885
|
+
setFixedSuggestions(undefined);
|
|
8886
|
+
}
|
|
8887
|
+
}, [data, searchTerms]);
|
|
8888
|
+
var len = data === null || data === void 0 ? void 0 : data.length;
|
|
8875
8889
|
var currentIndex = len > 0 ? props.index : NaN;
|
|
8876
|
-
var
|
|
8890
|
+
var _b = React$1.useState(), activeItem = _b[0], setActiveItem = _b[1];
|
|
8877
8891
|
var item = React$1.useMemo(function () { return findItemByIndex_1(data, currentIndex); }, [data, currentIndex]);
|
|
8878
8892
|
var handleSpanClick = React$1.useCallback(function (target, span) {
|
|
8879
8893
|
if (span.type === "inputText") {
|
|
@@ -8888,8 +8902,8 @@ var Suggestions = function (props) {
|
|
|
8888
8902
|
var actions = React$1.useMemo(function () { return createActions(onItemUse); }, [onItemUse]);
|
|
8889
8903
|
return (React__default$1["default"].createElement("div", { className: "xappw-suggestions ".concat(props.className || "") },
|
|
8890
8904
|
(activeItem === null || activeItem === void 0 ? void 0 : activeItem.content) && React__default$1["default"].createElement("div", { className: "xappw-suggestions__answer" }, activeItem.content),
|
|
8891
|
-
|
|
8892
|
-
React__default$1["default"].createElement(SuggestionsList_1, { suggestions:
|
|
8905
|
+
fixedSuggestions && fixedSuggestions.length > 0 &&
|
|
8906
|
+
React__default$1["default"].createElement(SuggestionsList_1, { suggestions: fixedSuggestions, index: currentIndex, className: "xappw-suggestions__groups", itemActions: actions, onItemClick: props.onItemClick, onItemHover: setActiveItem, onSpanClick: handleSpanClick })));
|
|
8893
8907
|
};
|
|
8894
8908
|
|
|
8895
8909
|
var ChatFooter = function (props) {
|
|
@@ -32348,7 +32362,10 @@ function storeHandler(state, action) {
|
|
|
32348
32362
|
}
|
|
32349
32363
|
}
|
|
32350
32364
|
|
|
32365
|
+
var ADMIN_STORE_KEY = "AdminAccessTimes";
|
|
32366
|
+
var ADMIN_STORE_MAX = 20;
|
|
32351
32367
|
function createChatStore(config, dataStorage) {
|
|
32368
|
+
var _a;
|
|
32352
32369
|
if (!dataStorage) {
|
|
32353
32370
|
if (typeof window !== "undefined") {
|
|
32354
32371
|
dataStorage = localStorage;
|
|
@@ -32358,7 +32375,39 @@ function createChatStore(config, dataStorage) {
|
|
|
32358
32375
|
}
|
|
32359
32376
|
}
|
|
32360
32377
|
var connection = config.connection;
|
|
32361
|
-
var
|
|
32378
|
+
var joinSessionId = (_a = new URL(window.location.href).searchParams) === null || _a === void 0 ? void 0 : _a.get("sessionId");
|
|
32379
|
+
var dataStorageKey;
|
|
32380
|
+
var now = new Date().getTime();
|
|
32381
|
+
if (joinSessionId) {
|
|
32382
|
+
var adminTimesData = dataStorage.getItem(ADMIN_STORE_KEY);
|
|
32383
|
+
// Create
|
|
32384
|
+
var adminTimes = adminTimesData ? JSON.parse(adminTimesData) : {};
|
|
32385
|
+
// if exists, use it. If not, check if we are maxed out. evict one session if we are.
|
|
32386
|
+
if (adminTimes[joinSessionId]) {
|
|
32387
|
+
log("ChatStore: reusing session: ".concat(joinSessionId));
|
|
32388
|
+
adminTimes[joinSessionId].lastAccessMs = now;
|
|
32389
|
+
dataStorageKey = adminTimes[joinSessionId].dataStorageKey;
|
|
32390
|
+
}
|
|
32391
|
+
else {
|
|
32392
|
+
if (Object.keys(adminTimes).length >= ADMIN_STORE_MAX) {
|
|
32393
|
+
var evictedSessionId = evictAdminSession(adminTimes);
|
|
32394
|
+
log("ChatStore: evicting session: ".concat(evictedSessionId));
|
|
32395
|
+
dataStorage.removeItem(adminTimes[evictedSessionId].dataStorageKey);
|
|
32396
|
+
adminTimes[evictedSessionId] = undefined;
|
|
32397
|
+
}
|
|
32398
|
+
// We now have room
|
|
32399
|
+
dataStorageKey = generateKey(connection, joinSessionId);
|
|
32400
|
+
adminTimes[joinSessionId] = {
|
|
32401
|
+
lastAccessMs: now,
|
|
32402
|
+
dataStorageKey: dataStorageKey,
|
|
32403
|
+
};
|
|
32404
|
+
}
|
|
32405
|
+
dataStorage.setItem(ADMIN_STORE_KEY, JSON.stringify(adminTimes));
|
|
32406
|
+
}
|
|
32407
|
+
else {
|
|
32408
|
+
dataStorageKey = generateKey(connection);
|
|
32409
|
+
}
|
|
32410
|
+
var storage = new BrowserStateStorage(dataStorage, dataStorageKey);
|
|
32362
32411
|
var defaultState = createDefaultState({
|
|
32363
32412
|
accessToken: config.accessToken,
|
|
32364
32413
|
userId: config.userId,
|
|
@@ -32372,6 +32421,36 @@ function createChatStore(config, dataStorage) {
|
|
|
32372
32421
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
32373
32422
|
var composeEnhancers = globalThis.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || redux.compose;
|
|
32374
32423
|
return redux.createStore(chatReducer, composeEnhancers(redux.applyMiddleware.apply(void 0, middlewares)));
|
|
32424
|
+
}
|
|
32425
|
+
/**
|
|
32426
|
+
* Pick one admin session for eviction
|
|
32427
|
+
*
|
|
32428
|
+
* @param adminTimes
|
|
32429
|
+
* @returns
|
|
32430
|
+
*/
|
|
32431
|
+
function evictAdminSession(adminTimes) {
|
|
32432
|
+
// Find the oldest
|
|
32433
|
+
var minTimeTs = Number.MAX_VALUE;
|
|
32434
|
+
var minSessionId;
|
|
32435
|
+
for (var _i = 0, _a = Object.keys(adminTimes); _i < _a.length; _i++) {
|
|
32436
|
+
var sessionId = _a[_i];
|
|
32437
|
+
if (adminTimes[sessionId].lastAccessMs < minTimeTs) {
|
|
32438
|
+
minSessionId = sessionId;
|
|
32439
|
+
minTimeTs = adminTimes[sessionId].lastAccessMs;
|
|
32440
|
+
}
|
|
32441
|
+
}
|
|
32442
|
+
return minSessionId;
|
|
32443
|
+
}
|
|
32444
|
+
function generateKey(connection, sessionId) {
|
|
32445
|
+
var base = "xappchat.".concat(connection.serverUrl);
|
|
32446
|
+
if (sessionId) {
|
|
32447
|
+
return connection.accountKey
|
|
32448
|
+
? "".concat(base, ".").concat(connection.accountKey, ".").concat(sessionId)
|
|
32449
|
+
: "".concat(base, ".").concat(sessionId);
|
|
32450
|
+
}
|
|
32451
|
+
else {
|
|
32452
|
+
return connection.accountKey ? "".concat(base, ".").concat(connection.accountKey) : base;
|
|
32453
|
+
}
|
|
32375
32454
|
}
|
|
32376
32455
|
|
|
32377
32456
|
var ChatWidgetContainer = function (props) {
|