stream-chat-react 10.0.0-theming-v2.3 → 10.0.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/browser.full-bundle.js +216 -202
- package/dist/browser.full-bundle.js.map +1 -1
- package/dist/browser.full-bundle.min.js +3 -3
- package/dist/browser.full-bundle.min.js.map +1 -1
- package/dist/components/Attachment/AttachmentActions.d.ts.map +1 -1
- package/dist/components/Attachment/AttachmentActions.js +1 -1
- package/dist/components/Attachment/AttachmentContainer.js +2 -2
- package/dist/components/Channel/Channel.d.ts.map +1 -1
- package/dist/components/Channel/Channel.js +6 -1
- package/dist/components/ChannelList/ChannelList.d.ts +3 -9
- package/dist/components/ChannelList/ChannelList.d.ts.map +1 -1
- package/dist/components/ChannelList/ChannelList.js +24 -26
- package/dist/components/ChannelSearch/ChannelSearch.d.ts +6 -3
- package/dist/components/ChannelSearch/ChannelSearch.d.ts.map +1 -1
- package/dist/components/ChannelSearch/ChannelSearch.js +19 -2
- package/dist/components/ChannelSearch/SearchBar.js +1 -1
- package/dist/components/ChannelSearch/SearchInput.d.ts +3 -1
- package/dist/components/ChannelSearch/SearchInput.d.ts.map +1 -1
- package/dist/components/ChannelSearch/SearchInput.js +2 -2
- package/dist/components/ChannelSearch/SearchResults.js +1 -2
- package/dist/components/ChannelSearch/hooks/useChannelSearch.d.ts +9 -7
- package/dist/components/ChannelSearch/hooks/useChannelSearch.d.ts.map +1 -1
- package/dist/components/ChannelSearch/hooks/useChannelSearch.js +23 -29
- package/dist/components/MessageActions/MessageActionsBox.js +1 -1
- package/dist/components/MessageInput/CooldownTimer.d.ts +7 -0
- package/dist/components/MessageInput/CooldownTimer.d.ts.map +1 -0
- package/dist/components/MessageInput/CooldownTimer.js +17 -0
- package/dist/components/MessageInput/MessageInputFlat.d.ts.map +1 -1
- package/dist/components/MessageInput/MessageInputFlat.js +1 -1
- package/dist/components/MessageInput/MessageInputSmall.d.ts.map +1 -1
- package/dist/components/MessageInput/MessageInputSmall.js +1 -1
- package/dist/components/MessageInput/hooks/useCooldownTimer.d.ts +0 -5
- package/dist/components/MessageInput/hooks/useCooldownTimer.d.ts.map +1 -1
- package/dist/components/MessageInput/hooks/useCooldownTimer.js +1 -17
- package/dist/components/MessageInput/index.d.ts +1 -0
- package/dist/components/MessageInput/index.d.ts.map +1 -1
- package/dist/components/MessageInput/index.js +1 -0
- package/dist/context/ChannelStateContext.d.ts +1 -1
- package/dist/context/ComponentContext.d.ts +1 -1
- package/dist/context/ComponentContext.d.ts.map +1 -1
- package/dist/css/index.css +1 -1
- package/dist/css/index.css.map +1 -1
- package/dist/css/v2/index.css +1 -1
- package/dist/css/v2/index.css.map +1 -1
- package/dist/css/v2/index.layout.css +1 -1
- package/dist/css/v2/index.layout.css.map +1 -1
- package/dist/index.cjs.js +214 -200
- package/dist/index.cjs.js.map +1 -1
- package/dist/scss/Attachment.scss +45 -2
- package/dist/scss/Gallery.scss +12 -6
- package/dist/scss/Message.scss +2 -1
- package/dist/scss/v2/AttachmentList/AttachmentList-layout.scss +72 -46
- package/dist/scss/v2/Autocomplete/Autocomplete-layout.scss +2 -0
- package/dist/version.d.ts +1 -1
- package/dist/version.d.ts.map +1 -1
- package/dist/version.js +1 -1
- package/package.json +4 -4
package/dist/index.cjs.js
CHANGED
|
@@ -247,7 +247,7 @@ var UnMemoizedAttachmentActions = function (props) {
|
|
|
247
247
|
var handleActionClick = function (event, name, value) { return actionHandler === null || actionHandler === void 0 ? void 0 : actionHandler(name, value, event); };
|
|
248
248
|
return (React__default["default"].createElement("div", { className: 'str-chat__message-attachment-actions' },
|
|
249
249
|
React__default["default"].createElement("div", { className: 'str-chat__message-attachment-actions-form' },
|
|
250
|
-
React__default["default"].createElement("span",
|
|
250
|
+
React__default["default"].createElement("span", null, text),
|
|
251
251
|
actions.map(function (action) { return (React__default["default"].createElement("button", { className: "str-chat__message-attachment-actions-button str-chat__message-attachment-actions-button--".concat(action.style), "data-testid": "".concat(action.name), "data-value": action.value, key: "".concat(id, "-").concat(action.value), onClick: function (event) { return handleActionClick(event, action.name, action.value); } }, action.text)); }))));
|
|
252
252
|
};
|
|
253
253
|
/**
|
|
@@ -1728,7 +1728,7 @@ var AttachmentActionsContainer = function (_a) {
|
|
|
1728
1728
|
var actionHandler = _a.actionHandler, attachment = _a.attachment, _c = _a.AttachmentActions, AttachmentActions$1 = _c === void 0 ? AttachmentActions : _c;
|
|
1729
1729
|
if (!((_b = attachment.actions) === null || _b === void 0 ? void 0 : _b.length))
|
|
1730
1730
|
return null;
|
|
1731
|
-
return (React__default["default"].createElement(AttachmentActions$1, __assign({}, attachment, { actionHandler:
|
|
1731
|
+
return (React__default["default"].createElement(AttachmentActions$1, __assign({}, attachment, { actionHandler: actionHandler, actions: attachment.actions, id: attachment.id || '', text: attachment.text || '' })));
|
|
1732
1732
|
};
|
|
1733
1733
|
var GalleryContainer = function (_a) {
|
|
1734
1734
|
var attachment = _a.attachment, _b = _a.Gallery, Gallery$1 = _b === void 0 ? Gallery : _b;
|
|
@@ -1752,7 +1752,7 @@ var CardContainer = function (props) {
|
|
|
1752
1752
|
var componentType = 'card';
|
|
1753
1753
|
if (attachment.actions && attachment.actions.length) {
|
|
1754
1754
|
return (React__default["default"].createElement(AttachmentWithinContainer, { attachment: attachment, componentType: componentType },
|
|
1755
|
-
React__default["default"].createElement("div", { className: 'str-chat__attachment'
|
|
1755
|
+
React__default["default"].createElement("div", { className: 'str-chat__attachment' },
|
|
1756
1756
|
React__default["default"].createElement(Card$1, __assign({}, attachment)),
|
|
1757
1757
|
React__default["default"].createElement(AttachmentActionsContainer, __assign({}, props)))));
|
|
1758
1758
|
}
|
|
@@ -4565,7 +4565,7 @@ var CustomMessageActionsList = function (props) {
|
|
|
4565
4565
|
var customActionsArray = Object.keys(customMessageActions);
|
|
4566
4566
|
return (React__default["default"].createElement(React__default["default"].Fragment, null, customActionsArray.map(function (customAction) {
|
|
4567
4567
|
var customHandler = customMessageActions[customAction];
|
|
4568
|
-
return (React__default["default"].createElement("button", { "aria-selected": 'false', className: 'str-chat__message-actions-list-item', key: customAction, onClick: function (event) { return customHandler(message, event); }, role: 'option' }, customAction));
|
|
4568
|
+
return (React__default["default"].createElement("button", { "aria-selected": 'false', className: 'str-chat__message-actions-list-item str-chat__message-actions-list-item-button', key: customAction, onClick: function (event) { return customHandler(message, event); }, role: 'option' }, customAction));
|
|
4569
4569
|
})));
|
|
4570
4570
|
};
|
|
4571
4571
|
var UnMemoizedMessageActionsBox = function (props) {
|
|
@@ -9072,46 +9072,6 @@ function reducer(state, action) {
|
|
|
9072
9072
|
|
|
9073
9073
|
function noop() {}
|
|
9074
9074
|
|
|
9075
|
-
var CooldownTimer = function (_a) {
|
|
9076
|
-
var cooldownInterval = _a.cooldownInterval, setCooldownRemaining = _a.setCooldownRemaining;
|
|
9077
|
-
var _b = React.useState(cooldownInterval), seconds = _b[0], setSeconds = _b[1];
|
|
9078
|
-
React.useEffect(function () {
|
|
9079
|
-
var countdownInterval = setInterval(function () {
|
|
9080
|
-
if (seconds > 0) {
|
|
9081
|
-
setSeconds(seconds - 1);
|
|
9082
|
-
}
|
|
9083
|
-
else {
|
|
9084
|
-
setCooldownRemaining(0);
|
|
9085
|
-
}
|
|
9086
|
-
}, 1000);
|
|
9087
|
-
return function () { return clearInterval(countdownInterval); };
|
|
9088
|
-
});
|
|
9089
|
-
return (React__default["default"].createElement("div", { className: 'str-chat__message-input-cooldown', "data-testid": 'cooldown-timer' }, seconds === 0 ? null : seconds));
|
|
9090
|
-
};
|
|
9091
|
-
var useCooldownTimer = function () {
|
|
9092
|
-
var latestMessageDatesByChannels = useChatContext('useCooldownTimer').latestMessageDatesByChannels;
|
|
9093
|
-
var channel = useChannelStateContext('useCooldownTimer').channel;
|
|
9094
|
-
var _a = (channel.data ||
|
|
9095
|
-
{}), cooldownInterval = _a.cooldown, own_capabilities = _a.own_capabilities;
|
|
9096
|
-
var _b = React.useState(), cooldownRemaining = _b[0], setCooldownRemaining = _b[1];
|
|
9097
|
-
var skipCooldown = !(own_capabilities === null || own_capabilities === void 0 ? void 0 : own_capabilities.includes('slow-mode'));
|
|
9098
|
-
React.useEffect(function () {
|
|
9099
|
-
var latestMessageDate = latestMessageDatesByChannels[channel.cid];
|
|
9100
|
-
if (!cooldownInterval || !latestMessageDate) {
|
|
9101
|
-
return;
|
|
9102
|
-
}
|
|
9103
|
-
var remainingCooldown = Math.round(cooldownInterval - (new Date().getTime() - latestMessageDate.getTime()) / 1000);
|
|
9104
|
-
if (remainingCooldown > 0 && !skipCooldown) {
|
|
9105
|
-
setCooldownRemaining(remainingCooldown);
|
|
9106
|
-
}
|
|
9107
|
-
}, [channel.id, cooldownInterval, latestMessageDatesByChannels[channel.cid]]);
|
|
9108
|
-
return {
|
|
9109
|
-
cooldownInterval: cooldownInterval || 0,
|
|
9110
|
-
cooldownRemaining: cooldownRemaining,
|
|
9111
|
-
setCooldownRemaining: setCooldownRemaining,
|
|
9112
|
-
};
|
|
9113
|
-
};
|
|
9114
|
-
|
|
9115
9075
|
var QuotedMessagePreviewHeader = function () {
|
|
9116
9076
|
var setQuotedMessage = useChannelActionContext('QuotedMessagePreview').setQuotedMessage;
|
|
9117
9077
|
var t = useTranslationContext('QuotedMessagePreview').t;
|
|
@@ -9212,6 +9172,23 @@ var FilePreviewItem = function (_a) {
|
|
|
9212
9172
|
state.uploading && React__default["default"].createElement(LoadingIndicatorIcon, { size: 17 }))));
|
|
9213
9173
|
};
|
|
9214
9174
|
|
|
9175
|
+
var CooldownTimer = function (_a) {
|
|
9176
|
+
var cooldownInterval = _a.cooldownInterval, setCooldownRemaining = _a.setCooldownRemaining;
|
|
9177
|
+
var _b = React.useState(cooldownInterval), seconds = _b[0], setSeconds = _b[1];
|
|
9178
|
+
React.useEffect(function () {
|
|
9179
|
+
var countdownInterval = setInterval(function () {
|
|
9180
|
+
if (seconds > 0) {
|
|
9181
|
+
setSeconds(seconds - 1);
|
|
9182
|
+
}
|
|
9183
|
+
else {
|
|
9184
|
+
setCooldownRemaining(0);
|
|
9185
|
+
}
|
|
9186
|
+
}, 1000);
|
|
9187
|
+
return function () { return clearInterval(countdownInterval); };
|
|
9188
|
+
});
|
|
9189
|
+
return (React__default["default"].createElement("div", { className: 'str-chat__message-input-cooldown', "data-testid": 'cooldown-timer' }, seconds === 0 ? null : seconds));
|
|
9190
|
+
};
|
|
9191
|
+
|
|
9215
9192
|
var MessageInputFlat = function () {
|
|
9216
9193
|
var quotedMessage = useChannelStateContext('MessageInputFlat').quotedMessage;
|
|
9217
9194
|
var setQuotedMessage = useChannelActionContext('MessageInputFlat').setQuotedMessage;
|
|
@@ -9364,6 +9341,30 @@ var EditMessageForm = function () {
|
|
|
9364
9341
|
React__default["default"].createElement("button", { className: 'str-chat__edit-message-send', type: 'submit' }, t('Send'))))))));
|
|
9365
9342
|
};
|
|
9366
9343
|
|
|
9344
|
+
var useCooldownTimer = function () {
|
|
9345
|
+
var latestMessageDatesByChannels = useChatContext('useCooldownTimer').latestMessageDatesByChannels;
|
|
9346
|
+
var channel = useChannelStateContext('useCooldownTimer').channel;
|
|
9347
|
+
var _a = (channel.data ||
|
|
9348
|
+
{}), cooldownInterval = _a.cooldown, own_capabilities = _a.own_capabilities;
|
|
9349
|
+
var _b = React.useState(), cooldownRemaining = _b[0], setCooldownRemaining = _b[1];
|
|
9350
|
+
var skipCooldown = !(own_capabilities === null || own_capabilities === void 0 ? void 0 : own_capabilities.includes('slow-mode'));
|
|
9351
|
+
React.useEffect(function () {
|
|
9352
|
+
var latestMessageDate = latestMessageDatesByChannels[channel.cid];
|
|
9353
|
+
if (!cooldownInterval || !latestMessageDate) {
|
|
9354
|
+
return;
|
|
9355
|
+
}
|
|
9356
|
+
var remainingCooldown = Math.round(cooldownInterval - (new Date().getTime() - latestMessageDate.getTime()) / 1000);
|
|
9357
|
+
if (remainingCooldown > 0 && !skipCooldown) {
|
|
9358
|
+
setCooldownRemaining(remainingCooldown);
|
|
9359
|
+
}
|
|
9360
|
+
}, [channel.id, cooldownInterval, latestMessageDatesByChannels[channel.cid]]);
|
|
9361
|
+
return {
|
|
9362
|
+
cooldownInterval: cooldownInterval || 0,
|
|
9363
|
+
cooldownRemaining: cooldownRemaining,
|
|
9364
|
+
setCooldownRemaining: setCooldownRemaining,
|
|
9365
|
+
};
|
|
9366
|
+
};
|
|
9367
|
+
|
|
9367
9368
|
var useEmojiIndex = function () {
|
|
9368
9369
|
var _a = useEmojiContext('useEmojiIndex'), emojiConfig = _a.emojiConfig, EmojiIndex = _a.EmojiIndex;
|
|
9369
9370
|
var emojiData = (emojiConfig || {}).emojiData;
|
|
@@ -11191,6 +11192,7 @@ var ChannelInner = function (props) {
|
|
|
11191
11192
|
});
|
|
11192
11193
|
});
|
|
11193
11194
|
};
|
|
11195
|
+
var clearHighlightedMessageTimeoutId = React.useRef(null);
|
|
11194
11196
|
var jumpToMessage = function (messageId, messageLimit) {
|
|
11195
11197
|
if (messageLimit === void 0) { messageLimit = 100; }
|
|
11196
11198
|
return __awaiter$1(void 0, void 0, void 0, function () {
|
|
@@ -11210,7 +11212,11 @@ var ChannelInner = function (props) {
|
|
|
11210
11212
|
highlightedMessageId: messageId,
|
|
11211
11213
|
type: 'jumpToMessageFinished',
|
|
11212
11214
|
});
|
|
11213
|
-
|
|
11215
|
+
if (clearHighlightedMessageTimeoutId.current) {
|
|
11216
|
+
clearTimeout(clearHighlightedMessageTimeoutId.current);
|
|
11217
|
+
}
|
|
11218
|
+
clearHighlightedMessageTimeoutId.current = setTimeout(function () {
|
|
11219
|
+
clearHighlightedMessageTimeoutId.current = null;
|
|
11214
11220
|
dispatch({ type: 'clearHighlightedMessage' });
|
|
11215
11221
|
}, 500);
|
|
11216
11222
|
return [2 /*return*/];
|
|
@@ -12116,149 +12122,34 @@ var ChannelPreview = function (props) {
|
|
|
12116
12122
|
return (React__default["default"].createElement(Preview, __assign({}, props, { active: isActive, displayImage: displayImage, displayTitle: displayTitle, lastMessage: lastMessage, latestMessage: latestMessage, setActiveChannel: setActiveChannel, unread: unread })));
|
|
12117
12123
|
};
|
|
12118
12124
|
|
|
12119
|
-
var SearchInput = function (props) {
|
|
12120
|
-
var inputRef = props.inputRef, onSearch = props.onSearch, placeholder = props.placeholder, query = props.query;
|
|
12121
|
-
var t = useTranslationContext('SearchInput').t;
|
|
12122
|
-
return (React__default["default"].createElement("input", { className: 'str-chat__channel-search-input', "data-testid": 'search-input', onChange: onSearch, placeholder: placeholder !== null && placeholder !== void 0 ? placeholder : t('Search'), ref: inputRef, type: 'text', value: query }));
|
|
12123
|
-
};
|
|
12124
|
-
|
|
12125
|
-
var MenuIcon = function () { return (React__default["default"].createElement("svg", { "data-testid": 'menu-icon', fill: 'none', height: '24', viewBox: '0 0 24 24', width: '24', xmlns: 'http://www.w3.org/2000/svg' },
|
|
12126
|
-
React__default["default"].createElement("path", { clipRule: 'evenodd', d: 'M3 8V6H21V8H3ZM3 13H21V11H3V13ZM3 18H21V16H3V18Z', fill: 'black', fillRule: 'evenodd' }))); };
|
|
12127
|
-
var ReturnIcon = function () { return (React__default["default"].createElement("svg", { "data-testid": 'return-icon', fill: 'none', height: '20', viewBox: '0 0 22 22', width: '20', xmlns: 'http://www.w3.org/2000/svg' },
|
|
12128
|
-
React__default["default"].createElement("path", { d: 'M21.6668 9.66666V12.3333H5.6529L12.9932 19.6736L11.1076 21.5592L0.54834 11L11.1076 0.440765L12.9932 2.32638L5.6529 9.66666H21.6668Z', fill: '#080707' }))); };
|
|
12129
|
-
var XIcon = function () { return (React__default["default"].createElement("svg", { fill: 'none', height: '14', viewBox: '0 0 14 14', width: '14', xmlns: 'http://www.w3.org/2000/svg' },
|
|
12130
|
-
React__default["default"].createElement("path", { d: 'M14 1.41L12.59 0L7 5.59L1.41 0L0 1.41L5.59 7L0 12.59L1.41 14L7 8.41L12.59 14L14 12.59L8.41 7L14 1.41Z', fill: '#747881' }))); };
|
|
12131
|
-
var SearchIcon = function (_a) {
|
|
12132
|
-
var className = _a.className;
|
|
12133
|
-
return (React__default["default"].createElement("svg", { className: className, fill: 'none', height: '18', viewBox: '0 0 18 18', width: '18', xmlns: 'http://www.w3.org/2000/svg' },
|
|
12134
|
-
React__default["default"].createElement("path", { d: 'M12.7549 11.255H11.9649L11.6849 10.985C12.6649 9.845 13.2549 8.365 13.2549 6.755C13.2549 3.165 10.3449 0.255005 6.75488 0.255005C3.16488 0.255005 0.254883 3.165 0.254883 6.755C0.254883 10.345 3.16488 13.255 6.75488 13.255C8.36488 13.255 9.84488 12.665 10.9849 11.685L11.2549 11.965V12.755L16.2549 17.745L17.7449 16.255L12.7549 11.255ZM6.75488 11.255C4.26488 11.255 2.25488 9.245 2.25488 6.755C2.25488 4.26501 4.26488 2.255 6.75488 2.255C9.24488 2.255 11.2549 4.26501 11.2549 6.755C11.2549 9.245 9.24488 11.255 6.75488 11.255Z', fill: '#747881' })));
|
|
12135
|
-
};
|
|
12136
|
-
|
|
12137
12125
|
var isChannel = function (output) { return output.cid != null; };
|
|
12138
12126
|
|
|
12139
|
-
var DefaultSearchEmpty = function () {
|
|
12140
|
-
var t = useTranslationContext('SearchResults').t;
|
|
12141
|
-
return (React__default["default"].createElement("div", { "aria-live": 'polite', className: 'str-chat__channel-search-container-empty' },
|
|
12142
|
-
React__default["default"].createElement(SearchIcon, null),
|
|
12143
|
-
t('No results found')));
|
|
12144
|
-
};
|
|
12145
|
-
var DefaultSearchResultsHeader = function (_a) {
|
|
12146
|
-
var results = _a.results;
|
|
12147
|
-
var t = useTranslationContext('SearchResultsHeader').t;
|
|
12148
|
-
return (React__default["default"].createElement("div", { className: 'str-chat__channel-search-results-header', "data-testid": 'channel-search-results-header' }, t('searchResultsCount', {
|
|
12149
|
-
count: results.length,
|
|
12150
|
-
})));
|
|
12151
|
-
};
|
|
12152
|
-
var DefaultSearchResultsList = function (props) {
|
|
12153
|
-
var focusedUser = props.focusedUser, results = props.results, _a = props.SearchResultItem, SearchResultItem = _a === void 0 ? DefaultSearchResultItem : _a, selectResult = props.selectResult;
|
|
12154
|
-
return (React__default["default"].createElement(React__default["default"].Fragment, null, results.map(function (result, index) { return (React__default["default"].createElement(SearchResultItem, { focusedUser: focusedUser, index: index, key: index, result: result, selectResult: selectResult })); })));
|
|
12155
|
-
};
|
|
12156
|
-
var DefaultSearchResultItem = function (props) {
|
|
12157
|
-
var _a, _b;
|
|
12158
|
-
var focusedUser = props.focusedUser, index = props.index, result = props.result, selectResult = props.selectResult;
|
|
12159
|
-
var focused = focusedUser === index;
|
|
12160
|
-
var themeVersion = useChatContext().themeVersion;
|
|
12161
|
-
var className = clsx('str-chat__channel-search-result', focused && 'str-chat__channel-search-result--focused focused');
|
|
12162
|
-
if (isChannel(result)) {
|
|
12163
|
-
var channel_1 = result;
|
|
12164
|
-
return themeVersion === '2' ? (React__default["default"].createElement(ChannelPreview, { channel: channel_1, className: className, onSelect: function () { return selectResult(channel_1); } })) : (React__default["default"].createElement("button", { "aria-label": "Select Channel: ".concat(((_a = channel_1.data) === null || _a === void 0 ? void 0 : _a.name) || ''), className: className, "data-testid": 'channel-search-result-channel', onClick: function () { return selectResult(channel_1); }, role: 'option' },
|
|
12165
|
-
React__default["default"].createElement("div", { className: 'result-hashtag' }, "#"),
|
|
12166
|
-
React__default["default"].createElement("p", { className: 'channel-search__result-text' }, (_b = channel_1.data) === null || _b === void 0 ? void 0 : _b.name)));
|
|
12167
|
-
}
|
|
12168
|
-
else {
|
|
12169
|
-
return (React__default["default"].createElement("button", { "aria-label": "Select User Channel: ".concat(result.name || ''), className: className, "data-testid": 'channel-search-result-user', onClick: function () { return selectResult(result); }, role: 'option' },
|
|
12170
|
-
React__default["default"].createElement(Avatar, { image: result.image, name: result.name || result.id, size: themeVersion === '2' ? 40 : undefined, user: result }),
|
|
12171
|
-
React__default["default"].createElement("div", { className: 'str-chat__channel-search-result--display-name' }, result.name || result.id)));
|
|
12172
|
-
}
|
|
12173
|
-
};
|
|
12174
|
-
var ResultsContainer = function (_a) {
|
|
12175
|
-
var children = _a.children, popupResults = _a.popupResults;
|
|
12176
|
-
var containerStyle = popupResults ? 'popup' : 'inline';
|
|
12177
|
-
return (React__default["default"].createElement("div", { "aria-label": 'Channel search results', className: "str-chat__channel-search-container str-chat__channel-search-result-list ".concat(containerStyle) }, children));
|
|
12178
|
-
};
|
|
12179
|
-
var SearchResults = function (props) {
|
|
12180
|
-
var popupResults = props.popupResults, results = props.results, searching = props.searching, _a = props.SearchEmpty, SearchEmpty = _a === void 0 ? DefaultSearchEmpty : _a, _b = props.SearchResultsHeader, SearchResultsHeader = _b === void 0 ? DefaultSearchResultsHeader : _b, SearchLoading = props.SearchLoading, _c = props.SearchResultItem, SearchResultItem = _c === void 0 ? DefaultSearchResultItem : _c, _d = props.SearchResultsList, SearchResultsList = _d === void 0 ? DefaultSearchResultsList : _d, selectResult = props.selectResult;
|
|
12181
|
-
var t = useTranslationContext('SearchResults').t;
|
|
12182
|
-
var _e = React.useState(), focusedResult = _e[0], setFocusedResult = _e[1];
|
|
12183
|
-
var handleKeyDown = React.useCallback(function (event) {
|
|
12184
|
-
if (event.key === 'ArrowUp') {
|
|
12185
|
-
setFocusedResult(function (prevFocused) {
|
|
12186
|
-
if (prevFocused === undefined)
|
|
12187
|
-
return 0;
|
|
12188
|
-
return prevFocused === 0 ? results.length - 1 : prevFocused - 1;
|
|
12189
|
-
});
|
|
12190
|
-
}
|
|
12191
|
-
if (event.key === 'ArrowDown') {
|
|
12192
|
-
setFocusedResult(function (prevFocused) {
|
|
12193
|
-
if (prevFocused === undefined)
|
|
12194
|
-
return 0;
|
|
12195
|
-
return prevFocused === results.length - 1 ? 0 : prevFocused + 1;
|
|
12196
|
-
});
|
|
12197
|
-
}
|
|
12198
|
-
if (event.key === 'Enter') {
|
|
12199
|
-
event.preventDefault();
|
|
12200
|
-
if (focusedResult !== undefined) {
|
|
12201
|
-
selectResult(results[focusedResult]);
|
|
12202
|
-
return setFocusedResult(undefined);
|
|
12203
|
-
}
|
|
12204
|
-
}
|
|
12205
|
-
}, [focusedResult]);
|
|
12206
|
-
React.useEffect(function () {
|
|
12207
|
-
document.addEventListener('keydown', handleKeyDown, false);
|
|
12208
|
-
return function () { return document.removeEventListener('keydown', handleKeyDown); };
|
|
12209
|
-
}, [handleKeyDown]);
|
|
12210
|
-
if (searching) {
|
|
12211
|
-
return (React__default["default"].createElement(ResultsContainer, { popupResults: popupResults }, SearchLoading ? (React__default["default"].createElement(SearchLoading, null)) : (React__default["default"].createElement("div", { className: 'str-chat__channel-search-container-searching', "data-testid": 'search-in-progress-indicator' }, t('Searching...')))));
|
|
12212
|
-
}
|
|
12213
|
-
if (!results.length) {
|
|
12214
|
-
return (React__default["default"].createElement(ResultsContainer, { popupResults: popupResults },
|
|
12215
|
-
React__default["default"].createElement(SearchEmpty, null)));
|
|
12216
|
-
}
|
|
12217
|
-
return (React__default["default"].createElement(ResultsContainer, { popupResults: popupResults },
|
|
12218
|
-
React__default["default"].createElement(SearchResultsHeader, { results: results }),
|
|
12219
|
-
React__default["default"].createElement(SearchResultsList, { focusedUser: focusedResult, results: results, SearchResultItem: SearchResultItem, selectResult: selectResult })));
|
|
12220
|
-
};
|
|
12221
|
-
|
|
12222
|
-
var UnMemoizedChannelSearch = function (props) {
|
|
12223
|
-
var clearState = props.clearState, SearchResultsList = props.SearchResultsList, inputRef = props.inputRef, onSearch = props.onSearch, placeholder = props.placeholder, _a = props.popupResults, popupResults = _a === void 0 ? false : _a, query = props.query, results = props.results, SearchEmpty = props.SearchEmpty, searching = props.searching, _b = props.SearchInput, SearchInput$1 = _b === void 0 ? SearchInput : _b, SearchLoading = props.SearchLoading, SearchResultItem = props.SearchResultItem, SearchResultsHeader = props.SearchResultsHeader, selectResult = props.selectResult;
|
|
12224
|
-
return (React__default["default"].createElement("div", { className: 'str-chat__channel-search', "data-testid": 'channel-search' },
|
|
12225
|
-
React__default["default"].createElement(SearchInput$1, { clearState: clearState, inputRef: inputRef, onSearch: onSearch, placeholder: placeholder, query: query }),
|
|
12226
|
-
query && (React__default["default"].createElement(SearchResults, { popupResults: popupResults, results: results, SearchEmpty: SearchEmpty, searching: searching, SearchLoading: SearchLoading, SearchResultItem: SearchResultItem, SearchResultsHeader: SearchResultsHeader, SearchResultsList: SearchResultsList, selectResult: selectResult }))));
|
|
12227
|
-
};
|
|
12228
|
-
/**
|
|
12229
|
-
* The ChannelSearch component makes a query users call and displays the results in a list.
|
|
12230
|
-
* Clicking on a list item will navigate you into a channel with the selected user. It can be used
|
|
12231
|
-
* on its own or added to the ChannelList component by setting the `showChannelSearch` prop to true.
|
|
12232
|
-
*/
|
|
12233
|
-
var ChannelSearch = React__default["default"].memo(UnMemoizedChannelSearch);
|
|
12234
|
-
|
|
12235
12127
|
var useChannelSearch = function (_a) {
|
|
12236
|
-
var _b = _a.channelType, channelType = _b === void 0 ? 'messaging' : _b, _c = _a.clearSearchOnClickOutside, clearSearchOnClickOutside = _c === void 0 ? true : _c, _d = _a.
|
|
12128
|
+
var _b = _a.channelType, channelType = _b === void 0 ? 'messaging' : _b, _c = _a.clearSearchOnClickOutside, clearSearchOnClickOutside = _c === void 0 ? true : _c, _d = _a.disabled, disabled = _d === void 0 ? false : _d, onSearchCallback = _a.onSearch, onSearchExit = _a.onSearchExit, onSelectResult = _a.onSelectResult, _e = _a.searchForChannels, searchForChannels = _e === void 0 ? false : _e, searchFunction = _a.searchFunction, searchQueryParams = _a.searchQueryParams, setChannels = _a.setChannels;
|
|
12237
12129
|
var _f = useChatContext('useChannelSearch'), client = _f.client, navOpen = _f.navOpen, setActiveChannel = _f.setActiveChannel, themeVersion = _f.themeVersion;
|
|
12238
12130
|
var _g = React.useState(false), inputIsFocused = _g[0], setInputIsFocused = _g[1];
|
|
12239
12131
|
var _h = React.useState(''), query = _h[0], setQuery = _h[1];
|
|
12240
12132
|
var _j = React.useState([]), results = _j[0], setResults = _j[1];
|
|
12241
|
-
var _k = React.useState(false),
|
|
12242
|
-
var _l = React.useState(false), searching = _l[0], setSearching = _l[1];
|
|
12133
|
+
var _k = React.useState(false), searching = _k[0], setSearching = _k[1];
|
|
12243
12134
|
var inputRef = React.useRef(null);
|
|
12244
12135
|
var searchBarRef = React.useRef(null);
|
|
12245
|
-
var clearState = function () {
|
|
12136
|
+
var clearState = React.useCallback(function () {
|
|
12246
12137
|
setQuery('');
|
|
12247
12138
|
setResults([]);
|
|
12248
|
-
setResultsOpen(false);
|
|
12249
12139
|
setSearching(false);
|
|
12250
|
-
};
|
|
12251
|
-
var activateSearch = function () {
|
|
12140
|
+
}, []);
|
|
12141
|
+
var activateSearch = React.useCallback(function () {
|
|
12252
12142
|
setInputIsFocused(true);
|
|
12253
|
-
};
|
|
12254
|
-
var exitSearch = function () {
|
|
12143
|
+
}, []);
|
|
12144
|
+
var exitSearch = React.useCallback(function () {
|
|
12255
12145
|
var _a;
|
|
12256
12146
|
setInputIsFocused(false);
|
|
12257
12147
|
(_a = inputRef.current) === null || _a === void 0 ? void 0 : _a.blur();
|
|
12258
12148
|
clearState();
|
|
12259
|
-
|
|
12149
|
+
onSearchExit === null || onSearchExit === void 0 ? void 0 : onSearchExit();
|
|
12150
|
+
}, [clearState, onSearchExit]);
|
|
12260
12151
|
React.useEffect(function () {
|
|
12261
|
-
if (
|
|
12152
|
+
if (disabled)
|
|
12262
12153
|
return;
|
|
12263
12154
|
var clickListener = function (event) {
|
|
12264
12155
|
var _a, _b;
|
|
@@ -12269,17 +12160,15 @@ var useChannelSearch = function (_a) {
|
|
|
12269
12160
|
: (_b = inputRef.current) === null || _b === void 0 ? void 0 : _b.contains(event.target);
|
|
12270
12161
|
if (isInputClick)
|
|
12271
12162
|
return;
|
|
12272
|
-
if ((
|
|
12273
|
-
(resultsOpen && clearSearchOnClickOutside) ||
|
|
12274
|
-
(inputIsFocused && !query)) {
|
|
12163
|
+
if ((inputIsFocused && (!query || navOpen)) || clearSearchOnClickOutside) {
|
|
12275
12164
|
exitSearch();
|
|
12276
12165
|
}
|
|
12277
12166
|
};
|
|
12278
12167
|
document.addEventListener('click', clickListener);
|
|
12279
12168
|
return function () { return document.removeEventListener('click', clickListener); };
|
|
12280
|
-
}, [
|
|
12169
|
+
}, [disabled, inputIsFocused]);
|
|
12281
12170
|
React.useEffect(function () {
|
|
12282
|
-
if (!
|
|
12171
|
+
if (!inputRef.current || disabled)
|
|
12283
12172
|
return;
|
|
12284
12173
|
var handleKeyDown = function (event) {
|
|
12285
12174
|
if (event.key === 'Escape')
|
|
@@ -12291,7 +12180,7 @@ var useChannelSearch = function (_a) {
|
|
|
12291
12180
|
(_a = inputRef.current) === null || _a === void 0 ? void 0 : _a.removeEventListener('keydown', handleKeyDown);
|
|
12292
12181
|
};
|
|
12293
12182
|
}, []);
|
|
12294
|
-
var selectResult = function (result) { return __awaiter$1(void 0, void 0, void 0, function () {
|
|
12183
|
+
var selectResult = React.useCallback(function (result) { return __awaiter$1(void 0, void 0, void 0, function () {
|
|
12295
12184
|
var selectedChannel, newChannel;
|
|
12296
12185
|
return __generator$1(this, function (_a) {
|
|
12297
12186
|
switch (_a.label) {
|
|
@@ -12302,7 +12191,6 @@ var useChannelSearch = function (_a) {
|
|
|
12302
12191
|
return [4 /*yield*/, onSelectResult({
|
|
12303
12192
|
setQuery: setQuery,
|
|
12304
12193
|
setResults: setResults,
|
|
12305
|
-
setResultsOpen: setResultsOpen,
|
|
12306
12194
|
setSearching: setSearching,
|
|
12307
12195
|
}, result)];
|
|
12308
12196
|
case 1:
|
|
@@ -12324,13 +12212,13 @@ var useChannelSearch = function (_a) {
|
|
|
12324
12212
|
case 5:
|
|
12325
12213
|
setChannels(function (channels) { return uniqBy__default["default"](__spreadArray$1([selectedChannel], channels, true), 'cid'); });
|
|
12326
12214
|
if (clearSearchOnClickOutside) {
|
|
12327
|
-
|
|
12215
|
+
exitSearch();
|
|
12328
12216
|
}
|
|
12329
12217
|
return [2 /*return*/];
|
|
12330
12218
|
}
|
|
12331
12219
|
});
|
|
12332
|
-
}); };
|
|
12333
|
-
var getChannels = function (text) { return __awaiter$1(void 0, void 0, void 0, function () {
|
|
12220
|
+
}); }, [clearSearchOnClickOutside, client, exitSearch, onSelectResult]);
|
|
12221
|
+
var getChannels = React.useCallback(function (text) { return __awaiter$1(void 0, void 0, void 0, function () {
|
|
12334
12222
|
var userResponse, channelResponse, _a, channels, users_1, users, error_1;
|
|
12335
12223
|
var _b, _c, _d, _e, _f, _g;
|
|
12336
12224
|
return __generator$1(this, function (_h) {
|
|
@@ -12351,14 +12239,12 @@ var useChannelSearch = function (_a) {
|
|
|
12351
12239
|
case 3:
|
|
12352
12240
|
_a = _h.sent(), channels = _a[0], users_1 = _a[1].users;
|
|
12353
12241
|
setResults(__spreadArray$1(__spreadArray$1([], channels, true), users_1, true));
|
|
12354
|
-
setResultsOpen(true);
|
|
12355
12242
|
setSearching(false);
|
|
12356
12243
|
return [2 /*return*/];
|
|
12357
12244
|
case 4: return [4 /*yield*/, Promise.resolve(userResponse)];
|
|
12358
12245
|
case 5:
|
|
12359
12246
|
users = (_h.sent()).users;
|
|
12360
12247
|
setResults(users);
|
|
12361
|
-
setResultsOpen(true);
|
|
12362
12248
|
return [3 /*break*/, 7];
|
|
12363
12249
|
case 6:
|
|
12364
12250
|
error_1 = _h.sent();
|
|
@@ -12370,17 +12256,16 @@ var useChannelSearch = function (_a) {
|
|
|
12370
12256
|
return [2 /*return*/];
|
|
12371
12257
|
}
|
|
12372
12258
|
});
|
|
12373
|
-
}); };
|
|
12259
|
+
}); }, [client, searching]);
|
|
12374
12260
|
var getChannelsThrottled = throttle__default["default"](getChannels, 200);
|
|
12375
|
-
var onSearch = function (event) {
|
|
12261
|
+
var onSearch = React.useCallback(function (event) {
|
|
12376
12262
|
event.preventDefault();
|
|
12377
|
-
if (
|
|
12263
|
+
if (disabled)
|
|
12378
12264
|
return;
|
|
12379
12265
|
if (searchFunction) {
|
|
12380
12266
|
searchFunction({
|
|
12381
12267
|
setQuery: setQuery,
|
|
12382
12268
|
setResults: setResults,
|
|
12383
|
-
setResultsOpen: setResultsOpen,
|
|
12384
12269
|
setSearching: setSearching,
|
|
12385
12270
|
}, event);
|
|
12386
12271
|
}
|
|
@@ -12388,7 +12273,8 @@ var useChannelSearch = function (_a) {
|
|
|
12388
12273
|
setQuery(event.target.value);
|
|
12389
12274
|
getChannelsThrottled(event.target.value);
|
|
12390
12275
|
}
|
|
12391
|
-
|
|
12276
|
+
onSearchCallback === null || onSearchCallback === void 0 ? void 0 : onSearchCallback(event);
|
|
12277
|
+
}, [disabled, getChannelsThrottled, searchFunction]);
|
|
12392
12278
|
return {
|
|
12393
12279
|
activateSearch: activateSearch,
|
|
12394
12280
|
clearState: clearState,
|
|
@@ -12404,6 +12290,24 @@ var useChannelSearch = function (_a) {
|
|
|
12404
12290
|
};
|
|
12405
12291
|
};
|
|
12406
12292
|
|
|
12293
|
+
var MenuIcon = function () { return (React__default["default"].createElement("svg", { "data-testid": 'menu-icon', fill: 'none', height: '24', viewBox: '0 0 24 24', width: '24', xmlns: 'http://www.w3.org/2000/svg' },
|
|
12294
|
+
React__default["default"].createElement("path", { clipRule: 'evenodd', d: 'M3 8V6H21V8H3ZM3 13H21V11H3V13ZM3 18H21V16H3V18Z', fill: 'black', fillRule: 'evenodd' }))); };
|
|
12295
|
+
var ReturnIcon = function () { return (React__default["default"].createElement("svg", { "data-testid": 'return-icon', fill: 'none', height: '20', viewBox: '0 0 22 22', width: '20', xmlns: 'http://www.w3.org/2000/svg' },
|
|
12296
|
+
React__default["default"].createElement("path", { d: 'M21.6668 9.66666V12.3333H5.6529L12.9932 19.6736L11.1076 21.5592L0.54834 11L11.1076 0.440765L12.9932 2.32638L5.6529 9.66666H21.6668Z', fill: '#080707' }))); };
|
|
12297
|
+
var XIcon = function () { return (React__default["default"].createElement("svg", { fill: 'none', height: '14', viewBox: '0 0 14 14', width: '14', xmlns: 'http://www.w3.org/2000/svg' },
|
|
12298
|
+
React__default["default"].createElement("path", { d: 'M14 1.41L12.59 0L7 5.59L1.41 0L0 1.41L5.59 7L0 12.59L1.41 14L7 8.41L12.59 14L14 12.59L8.41 7L14 1.41Z', fill: '#747881' }))); };
|
|
12299
|
+
var SearchIcon = function (_a) {
|
|
12300
|
+
var className = _a.className;
|
|
12301
|
+
return (React__default["default"].createElement("svg", { className: className, fill: 'none', height: '18', viewBox: '0 0 18 18', width: '18', xmlns: 'http://www.w3.org/2000/svg' },
|
|
12302
|
+
React__default["default"].createElement("path", { d: 'M12.7549 11.255H11.9649L11.6849 10.985C12.6649 9.845 13.2549 8.365 13.2549 6.755C13.2549 3.165 10.3449 0.255005 6.75488 0.255005C3.16488 0.255005 0.254883 3.165 0.254883 6.755C0.254883 10.345 3.16488 13.255 6.75488 13.255C8.36488 13.255 9.84488 12.665 10.9849 11.685L11.2549 11.965V12.755L16.2549 17.745L17.7449 16.255L12.7549 11.255ZM6.75488 11.255C4.26488 11.255 2.25488 9.245 2.25488 6.755C2.25488 4.26501 4.26488 2.255 6.75488 2.255C9.24488 2.255 11.2549 4.26501 11.2549 6.755C11.2549 9.245 9.24488 11.255 6.75488 11.255Z', fill: '#747881' })));
|
|
12303
|
+
};
|
|
12304
|
+
|
|
12305
|
+
var SearchInput = function (props) {
|
|
12306
|
+
var disabled = props.disabled, inputRef = props.inputRef, onSearch = props.onSearch, placeholder = props.placeholder, query = props.query;
|
|
12307
|
+
var t = useTranslationContext('SearchInput').t;
|
|
12308
|
+
return (React__default["default"].createElement("input", { className: 'str-chat__channel-search-input', "data-testid": 'search-input', disabled: disabled, onChange: onSearch, placeholder: placeholder !== null && placeholder !== void 0 ? placeholder : t('Search'), ref: inputRef, type: 'text', value: query }));
|
|
12309
|
+
};
|
|
12310
|
+
|
|
12407
12311
|
var SearchBarButton = function (_a) {
|
|
12408
12312
|
var children = _a.children, className = _a.className, onClick = _a.onClick;
|
|
12409
12313
|
return (React__default["default"].createElement("button", { className: clsx('str-chat__channel-search-bar-button', className), "data-testid": 'search-bar-button', onClick: onClick }, children));
|
|
@@ -12455,7 +12359,7 @@ var SearchBar = function (props) {
|
|
|
12455
12359
|
}, []);
|
|
12456
12360
|
var handleClearClick = React.useCallback(function () {
|
|
12457
12361
|
var _a;
|
|
12458
|
-
|
|
12362
|
+
exitSearch();
|
|
12459
12363
|
(_a = inputProps.inputRef.current) === null || _a === void 0 ? void 0 : _a.focus();
|
|
12460
12364
|
}, []);
|
|
12461
12365
|
return (React__default["default"].createElement("div", { className: 'str-chat__channel-search-bar', "data-testid": 'search-bar', ref: searchBarRef },
|
|
@@ -12472,6 +12376,104 @@ var SearchBar = function (props) {
|
|
|
12472
12376
|
React__default["default"].createElement(AppMenu, null)))));
|
|
12473
12377
|
};
|
|
12474
12378
|
|
|
12379
|
+
var DefaultSearchEmpty = function () {
|
|
12380
|
+
var t = useTranslationContext('SearchResults').t;
|
|
12381
|
+
return (React__default["default"].createElement("div", { "aria-live": 'polite', className: 'str-chat__channel-search-container-empty' },
|
|
12382
|
+
React__default["default"].createElement(SearchIcon, null),
|
|
12383
|
+
t('No results found')));
|
|
12384
|
+
};
|
|
12385
|
+
var DefaultSearchResultsHeader = function (_a) {
|
|
12386
|
+
var results = _a.results;
|
|
12387
|
+
var t = useTranslationContext('SearchResultsHeader').t;
|
|
12388
|
+
return (React__default["default"].createElement("div", { className: 'str-chat__channel-search-results-header', "data-testid": 'channel-search-results-header' }, t('searchResultsCount', {
|
|
12389
|
+
count: results.length,
|
|
12390
|
+
})));
|
|
12391
|
+
};
|
|
12392
|
+
var DefaultSearchResultsList = function (props) {
|
|
12393
|
+
var focusedUser = props.focusedUser, results = props.results, _a = props.SearchResultItem, SearchResultItem = _a === void 0 ? DefaultSearchResultItem : _a, selectResult = props.selectResult;
|
|
12394
|
+
return (React__default["default"].createElement(React__default["default"].Fragment, null, results.map(function (result, index) { return (React__default["default"].createElement(SearchResultItem, { focusedUser: focusedUser, index: index, key: index, result: result, selectResult: selectResult })); })));
|
|
12395
|
+
};
|
|
12396
|
+
var DefaultSearchResultItem = function (props) {
|
|
12397
|
+
var _a, _b;
|
|
12398
|
+
var focusedUser = props.focusedUser, index = props.index, result = props.result, selectResult = props.selectResult;
|
|
12399
|
+
var focused = focusedUser === index;
|
|
12400
|
+
var themeVersion = useChatContext().themeVersion;
|
|
12401
|
+
var className = clsx('str-chat__channel-search-result', focused && 'str-chat__channel-search-result--focused focused');
|
|
12402
|
+
if (isChannel(result)) {
|
|
12403
|
+
var channel_1 = result;
|
|
12404
|
+
return themeVersion === '2' ? (React__default["default"].createElement(ChannelPreview, { channel: channel_1, className: className, onSelect: function () { return selectResult(channel_1); } })) : (React__default["default"].createElement("button", { "aria-label": "Select Channel: ".concat(((_a = channel_1.data) === null || _a === void 0 ? void 0 : _a.name) || ''), className: className, "data-testid": 'channel-search-result-channel', onClick: function () { return selectResult(channel_1); }, role: 'option' },
|
|
12405
|
+
React__default["default"].createElement("div", { className: 'result-hashtag' }, "#"),
|
|
12406
|
+
React__default["default"].createElement("p", { className: 'channel-search__result-text' }, (_b = channel_1.data) === null || _b === void 0 ? void 0 : _b.name)));
|
|
12407
|
+
}
|
|
12408
|
+
else {
|
|
12409
|
+
return (React__default["default"].createElement("button", { "aria-label": "Select User Channel: ".concat(result.name || ''), className: className, "data-testid": 'channel-search-result-user', onClick: function () { return selectResult(result); }, role: 'option' },
|
|
12410
|
+
React__default["default"].createElement(Avatar, { image: result.image, name: result.name || result.id, size: themeVersion === '2' ? 40 : undefined, user: result }),
|
|
12411
|
+
React__default["default"].createElement("div", { className: 'str-chat__channel-search-result--display-name' }, result.name || result.id)));
|
|
12412
|
+
}
|
|
12413
|
+
};
|
|
12414
|
+
var ResultsContainer = function (_a) {
|
|
12415
|
+
var children = _a.children, popupResults = _a.popupResults;
|
|
12416
|
+
return (React__default["default"].createElement("div", { "aria-label": 'Channel search results', className: clsx("str-chat__channel-search-container str-chat__channel-search-result-list", popupResults ? 'popup' : 'inline') }, children));
|
|
12417
|
+
};
|
|
12418
|
+
var SearchResults = function (props) {
|
|
12419
|
+
var popupResults = props.popupResults, results = props.results, searching = props.searching, _a = props.SearchEmpty, SearchEmpty = _a === void 0 ? DefaultSearchEmpty : _a, _b = props.SearchResultsHeader, SearchResultsHeader = _b === void 0 ? DefaultSearchResultsHeader : _b, SearchLoading = props.SearchLoading, _c = props.SearchResultItem, SearchResultItem = _c === void 0 ? DefaultSearchResultItem : _c, _d = props.SearchResultsList, SearchResultsList = _d === void 0 ? DefaultSearchResultsList : _d, selectResult = props.selectResult;
|
|
12420
|
+
var t = useTranslationContext('SearchResults').t;
|
|
12421
|
+
var _e = React.useState(), focusedResult = _e[0], setFocusedResult = _e[1];
|
|
12422
|
+
var handleKeyDown = React.useCallback(function (event) {
|
|
12423
|
+
if (event.key === 'ArrowUp') {
|
|
12424
|
+
setFocusedResult(function (prevFocused) {
|
|
12425
|
+
if (prevFocused === undefined)
|
|
12426
|
+
return 0;
|
|
12427
|
+
return prevFocused === 0 ? results.length - 1 : prevFocused - 1;
|
|
12428
|
+
});
|
|
12429
|
+
}
|
|
12430
|
+
if (event.key === 'ArrowDown') {
|
|
12431
|
+
setFocusedResult(function (prevFocused) {
|
|
12432
|
+
if (prevFocused === undefined)
|
|
12433
|
+
return 0;
|
|
12434
|
+
return prevFocused === results.length - 1 ? 0 : prevFocused + 1;
|
|
12435
|
+
});
|
|
12436
|
+
}
|
|
12437
|
+
if (event.key === 'Enter') {
|
|
12438
|
+
event.preventDefault();
|
|
12439
|
+
if (focusedResult !== undefined) {
|
|
12440
|
+
selectResult(results[focusedResult]);
|
|
12441
|
+
return setFocusedResult(undefined);
|
|
12442
|
+
}
|
|
12443
|
+
}
|
|
12444
|
+
}, [focusedResult]);
|
|
12445
|
+
React.useEffect(function () {
|
|
12446
|
+
document.addEventListener('keydown', handleKeyDown, false);
|
|
12447
|
+
return function () { return document.removeEventListener('keydown', handleKeyDown); };
|
|
12448
|
+
}, [handleKeyDown]);
|
|
12449
|
+
if (searching) {
|
|
12450
|
+
return (React__default["default"].createElement(ResultsContainer, { popupResults: popupResults }, SearchLoading ? (React__default["default"].createElement(SearchLoading, null)) : (React__default["default"].createElement("div", { className: 'str-chat__channel-search-container-searching', "data-testid": 'search-in-progress-indicator' }, t('Searching...')))));
|
|
12451
|
+
}
|
|
12452
|
+
if (!results.length) {
|
|
12453
|
+
return (React__default["default"].createElement(ResultsContainer, { popupResults: popupResults },
|
|
12454
|
+
React__default["default"].createElement(SearchEmpty, null)));
|
|
12455
|
+
}
|
|
12456
|
+
return (React__default["default"].createElement(ResultsContainer, { popupResults: popupResults },
|
|
12457
|
+
React__default["default"].createElement(SearchResultsHeader, { results: results }),
|
|
12458
|
+
React__default["default"].createElement(SearchResultsList, { focusedUser: focusedResult, results: results, SearchResultItem: SearchResultItem, selectResult: selectResult })));
|
|
12459
|
+
};
|
|
12460
|
+
|
|
12461
|
+
var UnMemoizedChannelSearch = function (props) {
|
|
12462
|
+
var AppMenu = props.AppMenu, ClearInputIcon = props.ClearInputIcon, ExitSearchIcon = props.ExitSearchIcon, MenuIcon = props.MenuIcon, placeholder = props.placeholder, _a = props.popupResults, popupResults = _a === void 0 ? false : _a, _b = props.SearchBar, SearchBar$1 = _b === void 0 ? SearchBar : _b, SearchEmpty = props.SearchEmpty, _c = props.SearchInput, SearchInput$1 = _c === void 0 ? SearchInput : _c, SearchLoading = props.SearchLoading, SearchInputIcon = props.SearchInputIcon, SearchResultItem = props.SearchResultItem, SearchResultsList = props.SearchResultsList, SearchResultsHeader = props.SearchResultsHeader, channelSearchParams = __rest(props, ["AppMenu", "ClearInputIcon", "ExitSearchIcon", "MenuIcon", "placeholder", "popupResults", "SearchBar", "SearchEmpty", "SearchInput", "SearchLoading", "SearchInputIcon", "SearchResultItem", "SearchResultsList", "SearchResultsHeader"]);
|
|
12463
|
+
var themeVersion = useChatContext('ChannelSearch').themeVersion;
|
|
12464
|
+
var _d = useChannelSearch(channelSearchParams), activateSearch = _d.activateSearch, clearState = _d.clearState, exitSearch = _d.exitSearch, inputIsFocused = _d.inputIsFocused, inputRef = _d.inputRef, onSearch = _d.onSearch, query = _d.query, results = _d.results, searchBarRef = _d.searchBarRef, searching = _d.searching, selectResult = _d.selectResult;
|
|
12465
|
+
var showSearchBarV2 = themeVersion === '2';
|
|
12466
|
+
return (React__default["default"].createElement("div", { className: 'str-chat__channel-search', "data-testid": 'channel-search' },
|
|
12467
|
+
showSearchBarV2 ? (React__default["default"].createElement(SearchBar$1, { activateSearch: activateSearch, AppMenu: AppMenu, ClearInputIcon: ClearInputIcon, clearState: clearState, disabled: channelSearchParams.disabled, exitSearch: exitSearch, ExitSearchIcon: ExitSearchIcon, inputIsFocused: inputIsFocused, inputRef: inputRef, MenuIcon: MenuIcon, onSearch: onSearch, placeholder: placeholder, query: query, searchBarRef: searchBarRef, SearchInput: SearchInput$1, SearchInputIcon: SearchInputIcon })) : (React__default["default"].createElement(SearchInput$1, { clearState: clearState, disabled: channelSearchParams.disabled, inputRef: inputRef, onSearch: onSearch, placeholder: placeholder, query: query })),
|
|
12468
|
+
query && (React__default["default"].createElement(SearchResults, { popupResults: popupResults, results: results, SearchEmpty: SearchEmpty, searching: searching, SearchLoading: SearchLoading, SearchResultItem: SearchResultItem, SearchResultsHeader: SearchResultsHeader, SearchResultsList: SearchResultsList, selectResult: selectResult }))));
|
|
12469
|
+
};
|
|
12470
|
+
/**
|
|
12471
|
+
* The ChannelSearch component makes a query users call and displays the results in a list.
|
|
12472
|
+
* Clicking on a list item will navigate you into a channel with the selected user. It can be used
|
|
12473
|
+
* on its own or added to the ChannelList component by setting the `showChannelSearch` prop to true.
|
|
12474
|
+
*/
|
|
12475
|
+
var ChannelSearch = React__default["default"].memo(UnMemoizedChannelSearch);
|
|
12476
|
+
|
|
12475
12477
|
var ChatBubble = function () { return (React__default["default"].createElement("svg", { "data-testid": 'chat-bubble', fill: 'none', height: '96', viewBox: '0 0 136 136', width: '96', xmlns: 'http://www.w3.org/2000/svg' },
|
|
12476
12478
|
React__default["default"].createElement("path", { d: 'M106 24.5H30C24.775 24.5 20.5 28.775 20.5 34V119.5L39.5 100.5H106C111.225 100.5 115.5 96.225 115.5 91V34C115.5 28.775 111.225 24.5 106 24.5ZM106 91H39.5L30 100.5V34H106V91Z', fill: '#B4B7BB' }))); };
|
|
12477
12479
|
|
|
@@ -12518,11 +12520,11 @@ var DEFAULT_FILTERS = {};
|
|
|
12518
12520
|
var DEFAULT_OPTIONS = {};
|
|
12519
12521
|
var DEFAULT_SORT = {};
|
|
12520
12522
|
var UnMemoizedChannelList = function (props) {
|
|
12521
|
-
var additionalChannelSearchProps = props.additionalChannelSearchProps, _a = props.Avatar, Avatar$1 = _a === void 0 ? Avatar : _a, allowNewMessagesFromUnfilteredChannels = props.allowNewMessagesFromUnfilteredChannels, channelRenderFilterFn = props.channelRenderFilterFn, _b = props.ChannelSearch, ChannelSearch$1 = _b === void 0 ? ChannelSearch : _b, customActiveChannel = props.customActiveChannel, _c = props.EmptyStateIndicator, EmptyStateIndicator$1 = _c === void 0 ? EmptyStateIndicator : _c, filters = props.filters, _d = props.LoadingErrorIndicator, LoadingErrorIndicator = _d === void 0 ? ChatDown : _d, _e = props.LoadingIndicator, LoadingIndicator = _e === void 0 ? LoadingChannels : _e, _f = props.List, List = _f === void 0 ? ChannelListMessenger : _f, lockChannelOrder = props.lockChannelOrder, onAddedToChannel = props.onAddedToChannel, onChannelDeleted = props.onChannelDeleted, onChannelHidden = props.onChannelHidden, onChannelTruncated = props.onChannelTruncated, onChannelUpdated = props.onChannelUpdated, onChannelVisible = props.onChannelVisible, onMessageNew = props.onMessageNew, onRemovedFromChannel = props.onRemovedFromChannel, options = props.options, _g = props.Paginator, Paginator = _g === void 0 ? LoadMorePaginator : _g, Preview = props.Preview, renderChannels = props.renderChannels, _h = props.
|
|
12522
|
-
var
|
|
12523
|
-
var _q = useChatContext('ChannelList'), channel = _q.channel, channelsQueryState = _q.channelsQueryState, client = _q.client, closeMobileNav = _q.closeMobileNav, customClasses = _q.customClasses, _r = _q.navOpen, navOpen = _r === void 0 ? false : _r, setActiveChannel = _q.setActiveChannel, theme = _q.theme, themeVersion = _q.themeVersion, useImageFlagEmojisOnWindows = _q.useImageFlagEmojisOnWindows;
|
|
12523
|
+
var additionalChannelSearchProps = props.additionalChannelSearchProps, _a = props.Avatar, Avatar$1 = _a === void 0 ? Avatar : _a, allowNewMessagesFromUnfilteredChannels = props.allowNewMessagesFromUnfilteredChannels, channelRenderFilterFn = props.channelRenderFilterFn, _b = props.ChannelSearch, ChannelSearch$1 = _b === void 0 ? ChannelSearch : _b, customActiveChannel = props.customActiveChannel, _c = props.EmptyStateIndicator, EmptyStateIndicator$1 = _c === void 0 ? EmptyStateIndicator : _c, filters = props.filters, _d = props.LoadingErrorIndicator, LoadingErrorIndicator = _d === void 0 ? ChatDown : _d, _e = props.LoadingIndicator, LoadingIndicator = _e === void 0 ? LoadingChannels : _e, _f = props.List, List = _f === void 0 ? ChannelListMessenger : _f, lockChannelOrder = props.lockChannelOrder, onAddedToChannel = props.onAddedToChannel, onChannelDeleted = props.onChannelDeleted, onChannelHidden = props.onChannelHidden, onChannelTruncated = props.onChannelTruncated, onChannelUpdated = props.onChannelUpdated, onChannelVisible = props.onChannelVisible, onMessageNew = props.onMessageNew, onRemovedFromChannel = props.onRemovedFromChannel, options = props.options, _g = props.Paginator, Paginator = _g === void 0 ? LoadMorePaginator : _g, Preview = props.Preview, renderChannels = props.renderChannels, _h = props.sendChannelsToList, sendChannelsToList = _h === void 0 ? false : _h, _j = props.setActiveChannelOnMount, setActiveChannelOnMount = _j === void 0 ? true : _j, _k = props.showChannelSearch, showChannelSearch = _k === void 0 ? false : _k, _l = props.sort, sort = _l === void 0 ? DEFAULT_SORT : _l, _m = props.watchers, watchers = _m === void 0 ? {} : _m;
|
|
12524
|
+
var _o = useChatContext('ChannelList'), channel = _o.channel, channelsQueryState = _o.channelsQueryState, client = _o.client, closeMobileNav = _o.closeMobileNav, customClasses = _o.customClasses, _p = _o.navOpen, navOpen = _p === void 0 ? false : _p, setActiveChannel = _o.setActiveChannel, theme = _o.theme, useImageFlagEmojisOnWindows = _o.useImageFlagEmojisOnWindows;
|
|
12524
12525
|
var channelListRef = React.useRef(null);
|
|
12525
|
-
var
|
|
12526
|
+
var _q = React.useState(0), channelUpdateCount = _q[0], setChannelUpdateCount = _q[1];
|
|
12527
|
+
var _r = React.useState(false), searchActive = _r[0], setSearchActive = _r[1];
|
|
12526
12528
|
/**
|
|
12527
12529
|
* Set a channel with id {customActiveChannel} as active and move it to the top of the list.
|
|
12528
12530
|
* If customActiveChannel prop is absent, then set the first channel in list as active channel.
|
|
@@ -12567,9 +12569,22 @@ var UnMemoizedChannelList = function (props) {
|
|
|
12567
12569
|
* force a re-render. Incrementing this dummy variable ensures the channel previews update.
|
|
12568
12570
|
*/
|
|
12569
12571
|
var forceUpdate = function () { return setChannelUpdateCount(function (count) { return count + 1; }); };
|
|
12570
|
-
var
|
|
12571
|
-
|
|
12572
|
-
|
|
12572
|
+
var onSearch = React.useCallback(function (event) {
|
|
12573
|
+
var _a;
|
|
12574
|
+
if (!event.target.value) {
|
|
12575
|
+
setSearchActive(false);
|
|
12576
|
+
}
|
|
12577
|
+
else {
|
|
12578
|
+
setSearchActive(true);
|
|
12579
|
+
}
|
|
12580
|
+
(_a = additionalChannelSearchProps === null || additionalChannelSearchProps === void 0 ? void 0 : additionalChannelSearchProps.onSearch) === null || _a === void 0 ? void 0 : _a.call(additionalChannelSearchProps, event);
|
|
12581
|
+
}, []);
|
|
12582
|
+
var onSearchExit = React.useCallback(function () {
|
|
12583
|
+
var _a;
|
|
12584
|
+
setSearchActive(false);
|
|
12585
|
+
(_a = additionalChannelSearchProps === null || additionalChannelSearchProps === void 0 ? void 0 : additionalChannelSearchProps.onSearchExit) === null || _a === void 0 ? void 0 : _a.call(additionalChannelSearchProps);
|
|
12586
|
+
}, []);
|
|
12587
|
+
var _s = usePaginatedChannels(client, filters || DEFAULT_FILTERS, sort || DEFAULT_SORT, options || DEFAULT_OPTIONS, activeChannelHandler), channels = _s.channels, hasNextPage = _s.hasNextPage, loadNextPage = _s.loadNextPage, setChannels = _s.setChannels;
|
|
12573
12588
|
var loadedChannels = channelRenderFilterFn ? channelRenderFilterFn(channels) : channels;
|
|
12574
12589
|
useMobileNavigation(channelListRef, navOpen, closeMobileNav);
|
|
12575
12590
|
useMessageNewListener(setChannels, lockChannelOrder, allowNewMessagesFromUnfilteredChannels);
|
|
@@ -12614,12 +12629,11 @@ var UnMemoizedChannelList = function (props) {
|
|
|
12614
12629
|
'str-chat--windows-flags': useImageFlagEmojisOnWindows && navigator.userAgent.match(/Win/),
|
|
12615
12630
|
'str-chat-channel-list--open': navOpen,
|
|
12616
12631
|
});
|
|
12617
|
-
var
|
|
12632
|
+
var showChannelList = !searchActive || (additionalChannelSearchProps === null || additionalChannelSearchProps === void 0 ? void 0 : additionalChannelSearchProps.popupResults);
|
|
12618
12633
|
return (React__default["default"].createElement(React__default["default"].Fragment, null,
|
|
12619
12634
|
React__default["default"].createElement("div", { className: className, ref: channelListRef },
|
|
12620
|
-
showChannelSearch &&
|
|
12621
|
-
|
|
12622
|
-
query && showSearchV2 ? (React__default["default"].createElement(SearchResults, { results: results, SearchEmpty: SearchEmpty, searching: searching, SearchLoading: SearchLoading, SearchResultItem: SearchResultItem, SearchResultsHeader: SearchResultsHeader, SearchResultsList: SearchResultsList, selectResult: selectResult })) : (React__default["default"].createElement(List, { error: channelsQueryState.error, loadedChannels: sendChannelsToList ? loadedChannels : undefined, loading: channelsQueryState.queryInProgress === 'reload', LoadingErrorIndicator: LoadingErrorIndicator, LoadingIndicator: LoadingIndicator, setChannels: setChannels }, !(loadedChannels === null || loadedChannels === void 0 ? void 0 : loadedChannels.length) ? (React__default["default"].createElement(EmptyStateIndicator$1, { listType: 'channel' })) : (React__default["default"].createElement(Paginator, { hasNextPage: hasNextPage, loadNextPage: loadNextPage, refreshing: channelsQueryState.queryInProgress === 'load-more' }, renderChannels
|
|
12635
|
+
showChannelSearch && (React__default["default"].createElement(ChannelSearch$1, __assign({ onSearch: onSearch, onSearchExit: onSearchExit, setChannels: setChannels }, additionalChannelSearchProps))),
|
|
12636
|
+
showChannelList && (React__default["default"].createElement(List, { error: channelsQueryState.error, loadedChannels: sendChannelsToList ? loadedChannels : undefined, loading: channelsQueryState.queryInProgress === 'reload', LoadingErrorIndicator: LoadingErrorIndicator, LoadingIndicator: LoadingIndicator, setChannels: setChannels }, !(loadedChannels === null || loadedChannels === void 0 ? void 0 : loadedChannels.length) ? (React__default["default"].createElement(EmptyStateIndicator$1, { listType: 'channel' })) : (React__default["default"].createElement(Paginator, { hasNextPage: hasNextPage, loadNextPage: loadNextPage, refreshing: channelsQueryState.queryInProgress === 'load-more' }, renderChannels
|
|
12623
12637
|
? renderChannels(loadedChannels, renderChannel)
|
|
12624
12638
|
: loadedChannels.map(function (channel) { return renderChannel(channel); }))))))));
|
|
12625
12639
|
};
|
|
@@ -12628,7 +12642,7 @@ var UnMemoizedChannelList = function (props) {
|
|
|
12628
12642
|
*/
|
|
12629
12643
|
var ChannelList = React__default["default"].memo(UnMemoizedChannelList);
|
|
12630
12644
|
|
|
12631
|
-
var version = '10.0.0
|
|
12645
|
+
var version = '10.0.0';
|
|
12632
12646
|
|
|
12633
12647
|
var useChat = function (_a) {
|
|
12634
12648
|
var _b, _c;
|