stream-chat-react 10.0.0-theming-v2.2 → 10.0.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/browser.full-bundle.js +1839 -2237
- package/dist/browser.full-bundle.js.map +1 -1
- package/dist/browser.full-bundle.min.js +5 -5
- 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/AutoCompleteTextarea/Textarea.d.ts +7 -0
- package/dist/components/AutoCompleteTextarea/Textarea.d.ts.map +1 -1
- package/dist/components/AutoCompleteTextarea/Textarea.js +10 -1
- package/dist/components/Channel/Channel.d.ts.map +1 -1
- package/dist/components/Channel/Channel.js +31 -23
- 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/Message/MessageStatus.d.ts.map +1 -1
- package/dist/components/Message/MessageStatus.js +32 -30
- 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 +6 -3
- 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/icons.d.ts.map +1 -1
- package/dist/components/MessageInput/icons.js +3 -2
- 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/components/Reactions/ReactionsList.d.ts.map +1 -1
- package/dist/components/Reactions/ReactionsList.js +18 -3
- package/dist/components/Reactions/hooks/useProcessReactions.d.ts +1 -0
- package/dist/components/Reactions/hooks/useProcessReactions.d.ts.map +1 -1
- package/dist/components/Reactions/hooks/useProcessReactions.js +11 -0
- package/dist/components/Tooltip/Tooltip.d.ts +14 -2
- package/dist/components/Tooltip/Tooltip.d.ts.map +1 -1
- package/dist/components/Tooltip/Tooltip.js +22 -3
- package/dist/components/Tooltip/hooks/index.d.ts +2 -0
- package/dist/components/Tooltip/hooks/index.d.ts.map +1 -0
- package/dist/components/Tooltip/hooks/index.js +1 -0
- package/dist/components/Tooltip/hooks/useEnterLeaveHandlers.d.ts +7 -0
- package/dist/components/Tooltip/hooks/useEnterLeaveHandlers.d.ts.map +1 -0
- package/dist/components/Tooltip/hooks/useEnterLeaveHandlers.js +14 -0
- package/dist/context/ChannelActionContext.d.ts +1 -1
- package/dist/context/ChannelActionContext.d.ts.map +1 -1
- 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/context/DefaultEmoji.d.ts +3 -0
- package/dist/context/DefaultEmoji.d.ts.map +1 -0
- package/dist/context/DefaultEmoji.js +3 -0
- package/dist/context/DefaultEmojiPicker.d.ts +3 -0
- package/dist/context/DefaultEmojiPicker.d.ts.map +1 -0
- package/dist/context/DefaultEmojiPicker.js +3 -0
- package/dist/context/EmojiContext.d.ts.map +1 -1
- package/dist/context/EmojiContext.js +2 -58
- 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 +1275 -1647
- 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/ImageCarousel.scss +6 -0
- package/dist/scss/Message.scss +8 -2
- package/dist/scss/MessageInput.scss +1 -0
- package/dist/scss/v2/AttachmentList/AttachmentList-layout.scss +72 -46
- package/dist/scss/v2/Autocomplete/Autocomplete-layout.scss +2 -0
- package/dist/scss/v2/Message/Message-layout.scss +7 -18
- package/dist/scss/v2/MessageReactions/MessageReactions-layout.scss +1 -10
- package/dist/scss/v2/Tooltip/Tooltip-layout.scss +2 -23
- package/dist/version.d.ts +1 -1
- package/dist/version.d.ts.map +1 -1
- package/dist/version.js +1 -1
- package/package.json +7 -9
|
@@ -54,38 +54,37 @@ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
|
54
54
|
}
|
|
55
55
|
return to.concat(ar || Array.prototype.slice.call(from));
|
|
56
56
|
};
|
|
57
|
-
import { useEffect, useRef, useState } from 'react';
|
|
57
|
+
import { useCallback, useEffect, useRef, useState } from 'react';
|
|
58
58
|
import throttle from 'lodash.throttle';
|
|
59
59
|
import uniqBy from 'lodash.uniqby';
|
|
60
60
|
import { isChannel } from '../utils';
|
|
61
61
|
import { useChatContext } from '../../../context/ChatContext';
|
|
62
62
|
export var useChannelSearch = function (_a) {
|
|
63
|
-
var _b = _a.channelType, channelType = _b === void 0 ? 'messaging' : _b, _c = _a.clearSearchOnClickOutside, clearSearchOnClickOutside = _c === void 0 ? true : _c, _d = _a.
|
|
63
|
+
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;
|
|
64
64
|
var _f = useChatContext('useChannelSearch'), client = _f.client, navOpen = _f.navOpen, setActiveChannel = _f.setActiveChannel, themeVersion = _f.themeVersion;
|
|
65
65
|
var _g = useState(false), inputIsFocused = _g[0], setInputIsFocused = _g[1];
|
|
66
66
|
var _h = useState(''), query = _h[0], setQuery = _h[1];
|
|
67
67
|
var _j = useState([]), results = _j[0], setResults = _j[1];
|
|
68
|
-
var _k = useState(false),
|
|
69
|
-
var _l = useState(false), searching = _l[0], setSearching = _l[1];
|
|
68
|
+
var _k = useState(false), searching = _k[0], setSearching = _k[1];
|
|
70
69
|
var inputRef = useRef(null);
|
|
71
70
|
var searchBarRef = useRef(null);
|
|
72
|
-
var clearState = function () {
|
|
71
|
+
var clearState = useCallback(function () {
|
|
73
72
|
setQuery('');
|
|
74
73
|
setResults([]);
|
|
75
|
-
setResultsOpen(false);
|
|
76
74
|
setSearching(false);
|
|
77
|
-
};
|
|
78
|
-
var activateSearch = function () {
|
|
75
|
+
}, []);
|
|
76
|
+
var activateSearch = useCallback(function () {
|
|
79
77
|
setInputIsFocused(true);
|
|
80
|
-
};
|
|
81
|
-
var exitSearch = function () {
|
|
78
|
+
}, []);
|
|
79
|
+
var exitSearch = useCallback(function () {
|
|
82
80
|
var _a;
|
|
83
81
|
setInputIsFocused(false);
|
|
84
82
|
(_a = inputRef.current) === null || _a === void 0 ? void 0 : _a.blur();
|
|
85
83
|
clearState();
|
|
86
|
-
|
|
84
|
+
onSearchExit === null || onSearchExit === void 0 ? void 0 : onSearchExit();
|
|
85
|
+
}, [clearState, onSearchExit]);
|
|
87
86
|
useEffect(function () {
|
|
88
|
-
if (
|
|
87
|
+
if (disabled)
|
|
89
88
|
return;
|
|
90
89
|
var clickListener = function (event) {
|
|
91
90
|
var _a, _b;
|
|
@@ -96,17 +95,15 @@ export var useChannelSearch = function (_a) {
|
|
|
96
95
|
: (_b = inputRef.current) === null || _b === void 0 ? void 0 : _b.contains(event.target);
|
|
97
96
|
if (isInputClick)
|
|
98
97
|
return;
|
|
99
|
-
if ((
|
|
100
|
-
(resultsOpen && clearSearchOnClickOutside) ||
|
|
101
|
-
(inputIsFocused && !query)) {
|
|
98
|
+
if ((inputIsFocused && (!query || navOpen)) || clearSearchOnClickOutside) {
|
|
102
99
|
exitSearch();
|
|
103
100
|
}
|
|
104
101
|
};
|
|
105
102
|
document.addEventListener('click', clickListener);
|
|
106
103
|
return function () { return document.removeEventListener('click', clickListener); };
|
|
107
|
-
}, [
|
|
104
|
+
}, [disabled, inputIsFocused]);
|
|
108
105
|
useEffect(function () {
|
|
109
|
-
if (!
|
|
106
|
+
if (!inputRef.current || disabled)
|
|
110
107
|
return;
|
|
111
108
|
var handleKeyDown = function (event) {
|
|
112
109
|
if (event.key === 'Escape')
|
|
@@ -118,7 +115,7 @@ export var useChannelSearch = function (_a) {
|
|
|
118
115
|
(_a = inputRef.current) === null || _a === void 0 ? void 0 : _a.removeEventListener('keydown', handleKeyDown);
|
|
119
116
|
};
|
|
120
117
|
}, []);
|
|
121
|
-
var selectResult = function (result) { return __awaiter(void 0, void 0, void 0, function () {
|
|
118
|
+
var selectResult = useCallback(function (result) { return __awaiter(void 0, void 0, void 0, function () {
|
|
122
119
|
var selectedChannel, newChannel;
|
|
123
120
|
return __generator(this, function (_a) {
|
|
124
121
|
switch (_a.label) {
|
|
@@ -129,7 +126,6 @@ export var useChannelSearch = function (_a) {
|
|
|
129
126
|
return [4 /*yield*/, onSelectResult({
|
|
130
127
|
setQuery: setQuery,
|
|
131
128
|
setResults: setResults,
|
|
132
|
-
setResultsOpen: setResultsOpen,
|
|
133
129
|
setSearching: setSearching,
|
|
134
130
|
}, result)];
|
|
135
131
|
case 1:
|
|
@@ -151,13 +147,13 @@ export var useChannelSearch = function (_a) {
|
|
|
151
147
|
case 5:
|
|
152
148
|
setChannels(function (channels) { return uniqBy(__spreadArray([selectedChannel], channels, true), 'cid'); });
|
|
153
149
|
if (clearSearchOnClickOutside) {
|
|
154
|
-
|
|
150
|
+
exitSearch();
|
|
155
151
|
}
|
|
156
152
|
return [2 /*return*/];
|
|
157
153
|
}
|
|
158
154
|
});
|
|
159
|
-
}); };
|
|
160
|
-
var getChannels = function (text) { return __awaiter(void 0, void 0, void 0, function () {
|
|
155
|
+
}); }, [clearSearchOnClickOutside, client, exitSearch, onSelectResult]);
|
|
156
|
+
var getChannels = useCallback(function (text) { return __awaiter(void 0, void 0, void 0, function () {
|
|
161
157
|
var userResponse, channelResponse, _a, channels, users_1, users, error_1;
|
|
162
158
|
var _b, _c, _d, _e, _f, _g;
|
|
163
159
|
return __generator(this, function (_h) {
|
|
@@ -178,14 +174,12 @@ export var useChannelSearch = function (_a) {
|
|
|
178
174
|
case 3:
|
|
179
175
|
_a = _h.sent(), channels = _a[0], users_1 = _a[1].users;
|
|
180
176
|
setResults(__spreadArray(__spreadArray([], channels, true), users_1, true));
|
|
181
|
-
setResultsOpen(true);
|
|
182
177
|
setSearching(false);
|
|
183
178
|
return [2 /*return*/];
|
|
184
179
|
case 4: return [4 /*yield*/, Promise.resolve(userResponse)];
|
|
185
180
|
case 5:
|
|
186
181
|
users = (_h.sent()).users;
|
|
187
182
|
setResults(users);
|
|
188
|
-
setResultsOpen(true);
|
|
189
183
|
return [3 /*break*/, 7];
|
|
190
184
|
case 6:
|
|
191
185
|
error_1 = _h.sent();
|
|
@@ -197,17 +191,16 @@ export var useChannelSearch = function (_a) {
|
|
|
197
191
|
return [2 /*return*/];
|
|
198
192
|
}
|
|
199
193
|
});
|
|
200
|
-
}); };
|
|
194
|
+
}); }, [client, searching]);
|
|
201
195
|
var getChannelsThrottled = throttle(getChannels, 200);
|
|
202
|
-
var onSearch = function (event) {
|
|
196
|
+
var onSearch = useCallback(function (event) {
|
|
203
197
|
event.preventDefault();
|
|
204
|
-
if (
|
|
198
|
+
if (disabled)
|
|
205
199
|
return;
|
|
206
200
|
if (searchFunction) {
|
|
207
201
|
searchFunction({
|
|
208
202
|
setQuery: setQuery,
|
|
209
203
|
setResults: setResults,
|
|
210
|
-
setResultsOpen: setResultsOpen,
|
|
211
204
|
setSearching: setSearching,
|
|
212
205
|
}, event);
|
|
213
206
|
}
|
|
@@ -215,7 +208,8 @@ export var useChannelSearch = function (_a) {
|
|
|
215
208
|
setQuery(event.target.value);
|
|
216
209
|
getChannelsThrottled(event.target.value);
|
|
217
210
|
}
|
|
218
|
-
|
|
211
|
+
onSearchCallback === null || onSearchCallback === void 0 ? void 0 : onSearchCallback(event);
|
|
212
|
+
}, [disabled, getChannelsThrottled, searchFunction]);
|
|
219
213
|
return {
|
|
220
214
|
activateSearch: activateSearch,
|
|
221
215
|
clearState: clearState,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MessageStatus.d.ts","sourceRoot":"","sources":["../../../src/components/Message/MessageStatus.tsx"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"MessageStatus.d.ts","sourceRoot":"","sources":["../../../src/components/Message/MessageStatus.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAC;AAIxC,OAAO,EAA2C,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAEzF,OAAO,EAAE,WAAW,EAA2B,MAAM,WAAW,CAAC;AAUjE,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAEnE,oBAAY,kBAAkB,GAAG;IAC/B,MAAM,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;IAC1C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,qBAAqB,CAAC,EAAE,qBAAqB,CAAC;CAC/C,CAAC;AA0HF,eAAO,MAAM,aAAa,4FArHjB,kBAAkB,uBAqHuE,CAAC"}
|
|
@@ -1,51 +1,53 @@
|
|
|
1
|
-
import React from 'react';
|
|
1
|
+
import React, { useState } from 'react';
|
|
2
|
+
import clsx from 'clsx';
|
|
2
3
|
import { DeliveredCheckIcon, MessageDeliveredIcon } from './icons';
|
|
3
4
|
import { getReadByTooltipText, mapToUserNameOrId } from './utils';
|
|
4
5
|
import { Avatar as DefaultAvatar } from '../Avatar';
|
|
5
6
|
import { LoadingIndicator } from '../Loading';
|
|
6
|
-
import { Tooltip } from '../Tooltip';
|
|
7
|
+
import { PopperTooltip, Tooltip } from '../Tooltip';
|
|
8
|
+
import { useEnterLeaveHandlers } from '../Tooltip/hooks';
|
|
7
9
|
import { useChatContext } from '../../context/ChatContext';
|
|
8
10
|
import { useComponentContext } from '../../context/ComponentContext';
|
|
9
11
|
import { useMessageContext } from '../../context/MessageContext';
|
|
10
12
|
import { useTranslationContext } from '../../context/TranslationContext';
|
|
11
|
-
// TODO: remove after fully deprecating V1 theming
|
|
12
|
-
var TooltipContainer = function (_a) {
|
|
13
|
-
var children = _a.children;
|
|
14
|
-
var themeVersion = useChatContext('TooltipContainer').themeVersion;
|
|
15
|
-
return themeVersion === '2' ? (React.createElement("div", { className: 'str-chat__message-status-tooltip-container' }, children)) : (React.createElement(React.Fragment, null, children));
|
|
16
|
-
};
|
|
17
13
|
var UnMemoizedMessageStatus = function (props) {
|
|
18
14
|
var _a;
|
|
19
15
|
var propAvatar = props.Avatar, _b = props.messageType, messageType = _b === void 0 ? 'simple' : _b, _c = props.tooltipUserNameMapper, tooltipUserNameMapper = _c === void 0 ? mapToUserNameOrId : _c;
|
|
16
|
+
var _d = useEnterLeaveHandlers(), handleEnter = _d.handleEnter, handleLeave = _d.handleLeave, tooltipVisible = _d.tooltipVisible;
|
|
20
17
|
var client = useChatContext('MessageStatus').client;
|
|
21
18
|
var contextAvatar = useComponentContext('MessageStatus').Avatar;
|
|
22
|
-
var
|
|
19
|
+
var _e = useMessageContext('MessageStatus'), isMyMessage = _e.isMyMessage, lastReceivedId = _e.lastReceivedId, message = _e.message, readBy = _e.readBy, threadList = _e.threadList;
|
|
23
20
|
var t = useTranslationContext('MessageStatus').t;
|
|
24
21
|
var themeVersion = useChatContext('MessageStatus').themeVersion;
|
|
22
|
+
var _f = useState(null), referenceElement = _f[0], setReferenceElement = _f[1];
|
|
25
23
|
var Avatar = propAvatar || contextAvatar || DefaultAvatar;
|
|
26
|
-
if (!isMyMessage() || message.type === 'error')
|
|
24
|
+
if (!isMyMessage() || message.type === 'error')
|
|
27
25
|
return null;
|
|
28
|
-
}
|
|
29
26
|
var justReadByMe = (readBy === null || readBy === void 0 ? void 0 : readBy.length) === 1 && readBy[0].id === ((_a = client.user) === null || _a === void 0 ? void 0 : _a.id);
|
|
30
27
|
var rootClassName = "str-chat__message-".concat(messageType, "-status str-chat__message-status");
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
themeVersion === '
|
|
48
|
-
|
|
49
|
-
|
|
28
|
+
var sending = message.status === 'sending';
|
|
29
|
+
var delivered = message.status === 'received' && message.id === lastReceivedId && !threadList;
|
|
30
|
+
var deliveredAndRead = !!((readBy === null || readBy === void 0 ? void 0 : readBy.length) && !threadList && !justReadByMe);
|
|
31
|
+
var lastReadUser = (deliveredAndRead
|
|
32
|
+
? readBy.filter(function (item) { var _a; return item.id !== ((_a = client.user) === null || _a === void 0 ? void 0 : _a.id); })
|
|
33
|
+
: [])[0];
|
|
34
|
+
return (React.createElement("span", { className: rootClassName, "data-testid": clsx({
|
|
35
|
+
'message-status-read-by': deliveredAndRead,
|
|
36
|
+
'message-status-received': delivered && !deliveredAndRead,
|
|
37
|
+
'message-status-sending': sending,
|
|
38
|
+
}), onMouseEnter: handleEnter, onMouseLeave: handleLeave, ref: setReferenceElement },
|
|
39
|
+
sending && (React.createElement(React.Fragment, null,
|
|
40
|
+
themeVersion === '1' && React.createElement(Tooltip, null, t('Sending...')),
|
|
41
|
+
themeVersion === '2' && (React.createElement(PopperTooltip, { offset: [0, 5], referenceElement: referenceElement, visible: tooltipVisible }, t('Sending...'))),
|
|
42
|
+
React.createElement(LoadingIndicator, null))),
|
|
43
|
+
delivered && !deliveredAndRead && (React.createElement(React.Fragment, null,
|
|
44
|
+
themeVersion === '1' && React.createElement(Tooltip, null, t('Delivered')),
|
|
45
|
+
themeVersion === '2' && (React.createElement(PopperTooltip, { offset: [0, 5], referenceElement: referenceElement, visible: tooltipVisible }, t('Delivered'))),
|
|
46
|
+
themeVersion === '2' ? React.createElement(MessageDeliveredIcon, null) : React.createElement(DeliveredCheckIcon, null))),
|
|
47
|
+
deliveredAndRead && (React.createElement(React.Fragment, null,
|
|
48
|
+
themeVersion === '1' && (React.createElement(Tooltip, null, getReadByTooltipText(readBy, t, client, tooltipUserNameMapper))),
|
|
49
|
+
themeVersion === '2' && (React.createElement(PopperTooltip, { offset: [0, 5], referenceElement: referenceElement, visible: tooltipVisible }, getReadByTooltipText(readBy, t, client, tooltipUserNameMapper))),
|
|
50
|
+
React.createElement(Avatar, { image: lastReadUser.image, name: lastReadUser.name || lastReadUser.id, size: 15, user: lastReadUser }),
|
|
51
|
+
readBy.length > 2 && (React.createElement("span", { className: "str-chat__message-".concat(messageType, "-status-number"), "data-testid": 'message-status-read-by-many' }, readBy.length - 1))))));
|
|
50
52
|
};
|
|
51
53
|
export var MessageStatus = React.memo(UnMemoizedMessageStatus);
|
|
@@ -9,7 +9,7 @@ var CustomMessageActionsList = function (props) {
|
|
|
9
9
|
var customActionsArray = Object.keys(customMessageActions);
|
|
10
10
|
return (React.createElement(React.Fragment, null, customActionsArray.map(function (customAction) {
|
|
11
11
|
var customHandler = customMessageActions[customAction];
|
|
12
|
-
return (React.createElement("button", { "aria-selected": 'false', className: 'str-chat__message-actions-list-item', key: customAction, onClick: function (event) { return customHandler(message, event); }, role: 'option' }, customAction));
|
|
12
|
+
return (React.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));
|
|
13
13
|
})));
|
|
14
14
|
};
|
|
15
15
|
var UnMemoizedMessageActionsBox = function (props) {
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
export declare type CooldownTimerProps = {
|
|
3
|
+
cooldownInterval: number;
|
|
4
|
+
setCooldownRemaining: React.Dispatch<React.SetStateAction<number | undefined>>;
|
|
5
|
+
};
|
|
6
|
+
export declare const CooldownTimer: ({ cooldownInterval, setCooldownRemaining }: CooldownTimerProps) => JSX.Element;
|
|
7
|
+
//# sourceMappingURL=CooldownTimer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CooldownTimer.d.ts","sourceRoot":"","sources":["../../../src/components/MessageInput/CooldownTimer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAC;AAEnD,oBAAY,kBAAkB,GAAG;IAC/B,gBAAgB,EAAE,MAAM,CAAC;IACzB,oBAAoB,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC;CAChF,CAAC;AACF,eAAO,MAAM,aAAa,+CAAgD,kBAAkB,gBAoB3F,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import React, { useEffect, useState } from 'react';
|
|
2
|
+
export var CooldownTimer = function (_a) {
|
|
3
|
+
var cooldownInterval = _a.cooldownInterval, setCooldownRemaining = _a.setCooldownRemaining;
|
|
4
|
+
var _b = useState(cooldownInterval), seconds = _b[0], setSeconds = _b[1];
|
|
5
|
+
useEffect(function () {
|
|
6
|
+
var countdownInterval = setInterval(function () {
|
|
7
|
+
if (seconds > 0) {
|
|
8
|
+
setSeconds(seconds - 1);
|
|
9
|
+
}
|
|
10
|
+
else {
|
|
11
|
+
setCooldownRemaining(0);
|
|
12
|
+
}
|
|
13
|
+
}, 1000);
|
|
14
|
+
return function () { return clearInterval(countdownInterval); };
|
|
15
|
+
});
|
|
16
|
+
return (React.createElement("div", { className: 'str-chat__message-input-cooldown', "data-testid": 'cooldown-timer' }, seconds === 0 ? null : seconds));
|
|
17
|
+
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MessageInputFlat.d.ts","sourceRoot":"","sources":["../../../src/components/MessageInput/MessageInputFlat.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"MessageInputFlat.d.ts","sourceRoot":"","sources":["../../../src/components/MessageInput/MessageInputFlat.tsx"],"names":[],"mappings":"AAiCA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAGnE,eAAO,MAAM,gBAAgB,qGA8B5B,CAAC"}
|
|
@@ -14,10 +14,8 @@ import { FileUploadButton, ImageDropzone, UploadButton } from 'react-file-utils'
|
|
|
14
14
|
import clsx from 'clsx';
|
|
15
15
|
import { usePopper } from 'react-popper';
|
|
16
16
|
import { useDropzone } from 'react-dropzone';
|
|
17
|
-
import zipObject from 'lodash/zipObject';
|
|
18
17
|
import { nanoid } from 'nanoid';
|
|
19
18
|
import { EmojiPicker } from './EmojiPicker';
|
|
20
|
-
import { CooldownTimer as DefaultCooldownTimer } from './hooks/useCooldownTimer';
|
|
21
19
|
import { EmojiIconLarge as DefaultEmojiIcon, EmojiPickerIcon as DefaultEmojiPickerIcon, FileUploadIconFlat as DefaultFileUploadIcon, SendButton as DefaultSendButton, UploadIcon as DefaultUploadIcon, } from './icons';
|
|
22
20
|
import { QuotedMessagePreview as DefaultQuotedMessagePreview, QuotedMessagePreviewHeader, } from './QuotedMessagePreview';
|
|
23
21
|
import { AttachmentPreviewList } from './AttachmentPreviewList';
|
|
@@ -30,6 +28,7 @@ import { useChannelStateContext } from '../../context/ChannelStateContext';
|
|
|
30
28
|
import { useTranslationContext } from '../../context/TranslationContext';
|
|
31
29
|
import { useMessageInputContext } from '../../context/MessageInputContext';
|
|
32
30
|
import { useComponentContext } from '../../context/ComponentContext';
|
|
31
|
+
import { CooldownTimer as DefaultCooldownTimer } from './CooldownTimer';
|
|
33
32
|
export var MessageInputFlat = function () {
|
|
34
33
|
var quotedMessage = useChannelStateContext('MessageInputFlat').quotedMessage;
|
|
35
34
|
var setQuotedMessage = useChannelActionContext('MessageInputFlat').setQuotedMessage;
|
|
@@ -98,7 +97,11 @@ var MessageInputV2 = function () {
|
|
|
98
97
|
}), attributes = _m.attributes, styles = _m.styles;
|
|
99
98
|
var id = useMemo(function () { return nanoid(); }, []);
|
|
100
99
|
var accept = useMemo(function () {
|
|
101
|
-
return
|
|
100
|
+
return acceptedFiles.reduce(function (mediaTypeMap, mediaType) {
|
|
101
|
+
var _a;
|
|
102
|
+
(_a = mediaTypeMap[mediaType]) !== null && _a !== void 0 ? _a : (mediaTypeMap[mediaType] = []);
|
|
103
|
+
return mediaTypeMap;
|
|
104
|
+
}, {});
|
|
102
105
|
}, [acceptedFiles]);
|
|
103
106
|
var _o = useDropzone({
|
|
104
107
|
accept: accept,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MessageInputSmall.d.ts","sourceRoot":"","sources":["../../../src/components/MessageInput/MessageInputSmall.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"MessageInputSmall.d.ts","sourceRoot":"","sources":["../../../src/components/MessageInput/MessageInputSmall.tsx"],"names":[],"mappings":"AAwBA,OAAO,KAAK,EAAE,aAAa,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAGlF;;;;;;;;GAQG;AACH,eAAO,MAAM,iBAAiB,8IA4H7B,CAAC"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import React, { useEffect } from 'react';
|
|
2
2
|
import { FileUploadButton, ImageDropzone } from 'react-file-utils';
|
|
3
3
|
import { EmojiPicker } from './EmojiPicker';
|
|
4
|
-
import { CooldownTimer as DefaultCooldownTimer } from './hooks/useCooldownTimer';
|
|
5
4
|
import { EmojiIconSmall as DefaultEmojiIcon, FileUploadIconFlat as DefaultFileUploadIcon, SendButton as DefaultSendButton, } from './icons';
|
|
6
5
|
import { UploadsPreview } from './UploadsPreview';
|
|
7
6
|
import { ChatAutoComplete } from '../ChatAutoComplete/ChatAutoComplete';
|
|
@@ -13,6 +12,7 @@ import { useTranslationContext } from '../../context/TranslationContext';
|
|
|
13
12
|
import { useMessageInputContext } from '../../context/MessageInputContext';
|
|
14
13
|
import { useComponentContext } from '../../context/ComponentContext';
|
|
15
14
|
import { QuotedMessagePreview as DefaultQuotedMessagePreview } from './QuotedMessagePreview';
|
|
15
|
+
import { CooldownTimer as DefaultCooldownTimer } from './CooldownTimer';
|
|
16
16
|
/**
|
|
17
17
|
* @deprecated This component has beend deprecated in favor of [`MessageInputFlat`](./MessageInputFlat.tsx) from which
|
|
18
18
|
* `MessageInputSmall` "inherited" most of the code with only slight modification to classNames
|
|
@@ -1,10 +1,5 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import type { DefaultStreamChatGenerics } from '../../../types/types';
|
|
3
|
-
export declare type CooldownTimerProps = {
|
|
4
|
-
cooldownInterval: number;
|
|
5
|
-
setCooldownRemaining: React.Dispatch<React.SetStateAction<number | undefined>>;
|
|
6
|
-
};
|
|
7
|
-
export declare const CooldownTimer: ({ cooldownInterval, setCooldownRemaining }: CooldownTimerProps) => JSX.Element;
|
|
8
3
|
export declare type CooldownTimerState = {
|
|
9
4
|
cooldownInterval: number;
|
|
10
5
|
setCooldownRemaining: React.Dispatch<React.SetStateAction<number | undefined>>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useCooldownTimer.d.ts","sourceRoot":"","sources":["../../../../src/components/MessageInput/hooks/useCooldownTimer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAC;AAOnD,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AAEtE,oBAAY,kBAAkB,GAAG;IAC/B,gBAAgB,EAAE,MAAM,CAAC;IACzB,oBAAoB,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"useCooldownTimer.d.ts","sourceRoot":"","sources":["../../../../src/components/MessageInput/hooks/useCooldownTimer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAC;AAOnD,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AAEtE,oBAAY,kBAAkB,GAAG;IAC/B,gBAAgB,EAAE,MAAM,CAAC;IACzB,oBAAoB,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC;IAC/E,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF,eAAO,MAAM,gBAAgB,0FAExB,kBA6BJ,CAAC"}
|
|
@@ -1,22 +1,6 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { useEffect, useState } from 'react';
|
|
2
2
|
import { useChatContext } from '../../../context/ChatContext';
|
|
3
3
|
import { useChannelStateContext } from '../../../context/ChannelStateContext';
|
|
4
|
-
export var CooldownTimer = function (_a) {
|
|
5
|
-
var cooldownInterval = _a.cooldownInterval, setCooldownRemaining = _a.setCooldownRemaining;
|
|
6
|
-
var _b = useState(cooldownInterval), seconds = _b[0], setSeconds = _b[1];
|
|
7
|
-
useEffect(function () {
|
|
8
|
-
var countdownInterval = setInterval(function () {
|
|
9
|
-
if (seconds > 0) {
|
|
10
|
-
setSeconds(seconds - 1);
|
|
11
|
-
}
|
|
12
|
-
else {
|
|
13
|
-
setCooldownRemaining(0);
|
|
14
|
-
}
|
|
15
|
-
}, 1000);
|
|
16
|
-
return function () { return clearInterval(countdownInterval); };
|
|
17
|
-
});
|
|
18
|
-
return (React.createElement("div", { className: 'str-chat__message-input-cooldown', "data-testid": 'cooldown-timer' }, seconds === 0 ? null : seconds));
|
|
19
|
-
};
|
|
20
4
|
export var useCooldownTimer = function () {
|
|
21
5
|
var latestMessageDatesByChannels = useChatContext('useCooldownTimer').latestMessageDatesByChannels;
|
|
22
6
|
var channel = useChannelStateContext('useCooldownTimer').channel;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"icons.d.ts","sourceRoot":"","sources":["../../../src/components/MessageInput/icons.tsx"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"icons.d.ts","sourceRoot":"","sources":["../../../src/components/MessageInput/icons.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAkB,MAAM,OAAO,CAAC;AAMvC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAE3C,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAEnE,eAAO,MAAM,cAAc,mBAW1B,CAAC;AAEF,eAAO,MAAM,cAAc,mBAW1B,CAAC;AAGF,eAAO,MAAM,eAAe,mBAW3B,CAAC;AAEF,eAAO,MAAM,cAAc,mBAY1B,CAAC;AAEF,eAAO,MAAM,kBAAkB,mBAY9B,CAAC;AAEF,eAAO,MAAM,oBAAoB;;iBA0BhC,CAAC;AAGF,eAAO,MAAM,UAAU,mBAqBtB,CAAC;AAEF,eAAO,MAAM,SAAS,mBAcrB,CAAC;AAEF,eAAO,MAAM,SAAS,mBAcrB,CAAC;AAEF,eAAO,MAAM,YAAY,mBAcxB,CAAC;AAEF,eAAO,MAAM,UAAU,mBAYtB,CAAC;AAEF,eAAO,MAAM,UAAU,mBAkBtB,CAAC;AAEF,oBAAY,eAAe,CACzB,kBAAkB,SAAS,yBAAyB,GAAG,yBAAyB,IAC9E;IACF,WAAW,EAAE,CACX,KAAK,EAAE,KAAK,CAAC,kBAAkB,EAC/B,iBAAiB,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,KACrD,IAAI,CAAC;CACX,GAAG,KAAK,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;AAEnC,eAAO,MAAM,UAAU,kKAoBtB,CAAC"}
|
|
@@ -20,7 +20,8 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
20
20
|
}
|
|
21
21
|
return t;
|
|
22
22
|
};
|
|
23
|
-
import React, {
|
|
23
|
+
import React, { useMemo } from 'react';
|
|
24
|
+
import { nanoid } from 'nanoid';
|
|
24
25
|
import { useTranslationContext } from '../../context/TranslationContext';
|
|
25
26
|
import { useChatContext } from '../../context/ChatContext';
|
|
26
27
|
export var EmojiIconLarge = function () {
|
|
@@ -55,7 +56,7 @@ export var FileUploadIconFlat = function () {
|
|
|
55
56
|
};
|
|
56
57
|
export var LoadingIndicatorIcon = function (_a) {
|
|
57
58
|
var _b = _a.size, size = _b === void 0 ? 20 : _b;
|
|
58
|
-
var id =
|
|
59
|
+
var id = useMemo(function () { return nanoid(); }, []);
|
|
59
60
|
return (React.createElement("div", { className: 'str-chat__loading-indicator' },
|
|
60
61
|
React.createElement("svg", { "data-testid": 'loading-indicator', height: size, viewBox: '0 0 30 30', width: size, xmlns: 'http://www.w3.org/2000/svg' },
|
|
61
62
|
React.createElement("defs", null,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/MessageInput/index.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAC;AACzC,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC;AACvC,cAAc,kBAAkB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/MessageInput/index.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAC;AACzC,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC;AACvC,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ReactionsList.d.ts","sourceRoot":"","sources":["../../../src/components/Reactions/ReactionsList.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ReactionsList.d.ts","sourceRoot":"","sources":["../../../src/components/Reactions/ReactionsList.tsx"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEpD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAE1D,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AACnE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAK1D,oBAAY,kBAAkB,CAC5B,kBAAkB,SAAS,yBAAyB,GAAG,yBAAyB,IAC9E;IACF,6KAA6K;IAC7K,oBAAoB,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACjD,sHAAsH;IACtH,OAAO,CAAC,EAAE,iBAAiB,CAAC;IAC5B,iFAAiF;IACjF,aAAa,CAAC,EAAE,gBAAgB,CAAC,kBAAkB,CAAC,EAAE,CAAC;IACvD,oFAAoF;IACpF,eAAe,CAAC,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAC;IAC5C,+DAA+D;IAC/D,eAAe,CAAC,EAAE,aAAa,EAAE,CAAC;IAClC,8DAA8D;IAC9D,SAAS,CAAC,EAAE,gBAAgB,CAAC,kBAAkB,CAAC,EAAE,CAAC;IACnD,4EAA4E;IAC5E,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAyHF;;GAEG;AACH,eAAO,MAAM,aAAa,yJAAwE,CAAC"}
|
|
@@ -20,16 +20,31 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
20
20
|
}
|
|
21
21
|
return t;
|
|
22
22
|
};
|
|
23
|
-
import React, { Suspense } from 'react';
|
|
23
|
+
import React, { Suspense, useState } from 'react';
|
|
24
24
|
import clsx from 'clsx';
|
|
25
25
|
import { useEmojiContext } from '../../context/EmojiContext';
|
|
26
26
|
import { useMessageContext } from '../../context/MessageContext';
|
|
27
|
+
import { useChatContext } from '../../context/ChatContext';
|
|
27
28
|
import { useProcessReactions } from './hooks/useProcessReactions';
|
|
29
|
+
import { PopperTooltip } from '../Tooltip';
|
|
30
|
+
import { useEnterLeaveHandlers } from '../Tooltip/hooks';
|
|
31
|
+
var ButtonWithTooltip = function (_a) {
|
|
32
|
+
var children = _a.children, onMouseEnter = _a.onMouseEnter, onMouseLeave = _a.onMouseLeave, rest = __rest(_a, ["children", "onMouseEnter", "onMouseLeave"]);
|
|
33
|
+
var _b = useState(null), referenceElement = _b[0], setReferenceElement = _b[1];
|
|
34
|
+
var _c = useEnterLeaveHandlers({
|
|
35
|
+
onMouseEnter: onMouseEnter,
|
|
36
|
+
onMouseLeave: onMouseLeave,
|
|
37
|
+
}), handleEnter = _c.handleEnter, handleLeave = _c.handleLeave, tooltipVisible = _c.tooltipVisible;
|
|
38
|
+
var themeVersion = useChatContext('ButtonWithTooltip').themeVersion;
|
|
39
|
+
return (React.createElement(React.Fragment, null,
|
|
40
|
+
themeVersion === '2' && (React.createElement(PopperTooltip, { referenceElement: referenceElement, visible: tooltipVisible }, rest.title)),
|
|
41
|
+
React.createElement("button", __assign({ onMouseEnter: handleEnter, onMouseLeave: handleLeave, ref: setReferenceElement }, rest), children)));
|
|
42
|
+
};
|
|
28
43
|
var UnMemoizedReactionsList = function (props) {
|
|
29
44
|
var onClick = props.onClick, _a = props.reverse, reverse = _a === void 0 ? false : _a, rest = __rest(props, ["onClick", "reverse"]);
|
|
30
45
|
var _b = useEmojiContext('ReactionsList'), Emoji = _b.Emoji, emojiConfig = _b.emojiConfig;
|
|
31
46
|
var onReactionListClick = useMessageContext('ReactionsList').onReactionListClick;
|
|
32
|
-
var _c = useProcessReactions(__assign({ emojiConfig: emojiConfig }, rest)), additionalEmojiProps = _c.additionalEmojiProps, emojiData = _c.emojiData, getEmojiByReactionType = _c.getEmojiByReactionType, iHaveReactedWithReaction = _c.iHaveReactedWithReaction, latestReactions = _c.latestReactions, latestReactionTypes = _c.latestReactionTypes, reactionCounts = _c.reactionCounts, supportedReactionsArePresent = _c.supportedReactionsArePresent, totalReactionCount = _c.totalReactionCount;
|
|
47
|
+
var _c = useProcessReactions(__assign({ emojiConfig: emojiConfig }, rest)), additionalEmojiProps = _c.additionalEmojiProps, aggregatedUserNamesByType = _c.aggregatedUserNamesByType, emojiData = _c.emojiData, getEmojiByReactionType = _c.getEmojiByReactionType, iHaveReactedWithReaction = _c.iHaveReactedWithReaction, latestReactions = _c.latestReactions, latestReactionTypes = _c.latestReactionTypes, reactionCounts = _c.reactionCounts, supportedReactionsArePresent = _c.supportedReactionsArePresent, totalReactionCount = _c.totalReactionCount;
|
|
33
48
|
if (!latestReactions.length)
|
|
34
49
|
return null;
|
|
35
50
|
if (!supportedReactionsArePresent)
|
|
@@ -44,7 +59,7 @@ var UnMemoizedReactionsList = function (props) {
|
|
|
44
59
|
return emojiObject ? (React.createElement("li", { className: clsx('str-chat__message-reaction', {
|
|
45
60
|
'str-chat__message-reaction-own': isOwnReaction,
|
|
46
61
|
}), key: emojiObject.id },
|
|
47
|
-
React.createElement(
|
|
62
|
+
React.createElement(ButtonWithTooltip, { "aria-label": "Reactions: ".concat(reactionType), title: aggregatedUserNamesByType[reactionType].join(', '), type: 'button' },
|
|
48
63
|
React.createElement(Suspense, { fallback: null },
|
|
49
64
|
React.createElement("span", { className: 'str-chat__message-reaction-emoji' },
|
|
50
65
|
React.createElement(Emoji, __assign({ data: emojiData, emoji: emojiObject, size: 16 }, additionalEmojiProps)))),
|
|
@@ -6,6 +6,7 @@ declare type SharedReactionListProps = 'additionalEmojiProps' | 'own_reactions'
|
|
|
6
6
|
declare type UseProcessReactionsParams = Pick<ReactionsListProps, SharedReactionListProps> & Pick<EmojiContextValue, 'emojiConfig'>;
|
|
7
7
|
export declare const useProcessReactions: <StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics>(params: UseProcessReactionsParams) => {
|
|
8
8
|
additionalEmojiProps: import("../../../context").EmojiSetDef | Partial<import("emoji-mart").NimbleEmojiProps>;
|
|
9
|
+
aggregatedUserNamesByType: Record<string, string[]>;
|
|
9
10
|
emojiData: import("emoji-mart").Data;
|
|
10
11
|
getEmojiByReactionType: (type: string) => ReactionEmoji | undefined;
|
|
11
12
|
iHaveReactedWithReaction: (reactionType: string) => import("stream-chat").ReactionResponse<DefaultStreamChatGenerics> | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useProcessReactions.d.ts","sourceRoot":"","sources":["../../../../src/components/Reactions/hooks/useProcessReactions.tsx"],"names":[],"mappings":"AACA,OAAO,EAAwB,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAC9E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAE3D,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AAEtE,aAAK,uBAAuB,GACxB,sBAAsB,GACtB,eAAe,GACf,iBAAiB,GACjB,iBAAiB,GACjB,WAAW,CAAC;AAEhB,aAAK,yBAAyB,GAAG,IAAI,CAAC,kBAAkB,EAAE,uBAAuB,CAAC,GAChF,IAAI,CAAC,iBAAiB,EAAE,aAAa,CAAC,CAAC;AAEzC,eAAO,MAAM,mBAAmB,6FAGtB,yBAAyB
|
|
1
|
+
{"version":3,"file":"useProcessReactions.d.ts","sourceRoot":"","sources":["../../../../src/components/Reactions/hooks/useProcessReactions.tsx"],"names":[],"mappings":"AACA,OAAO,EAAwB,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAC9E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAE3D,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AAEtE,aAAK,uBAAuB,GACxB,sBAAsB,GACtB,eAAe,GACf,iBAAiB,GACjB,iBAAiB,GACjB,WAAW,CAAC;AAEhB,aAAK,yBAAyB,GAAG,IAAI,CAAC,kBAAkB,EAAE,uBAAuB,CAAC,GAChF,IAAI,CAAC,iBAAiB,EAAE,aAAa,CAAC,CAAC;AAEzC,eAAO,MAAM,mBAAmB,6FAGtB,yBAAyB;;;;mCAyBxB,MAAM,KAAG,aAAa,GAAG,SAAS;6CAL1B,MAAM;;;;;;;;CAwExB,CAAC"}
|
|
@@ -37,8 +37,19 @@ export var useProcessReactions = function (params) {
|
|
|
37
37
|
? Object.values(reactionCounts).reduce(function (total, count) { return total + count; }, 0)
|
|
38
38
|
: 0;
|
|
39
39
|
}, [reactionCounts, supportedReactionsArePresent]);
|
|
40
|
+
var aggregatedUserNamesByType = useMemo(function () {
|
|
41
|
+
return latestReactions.reduce(function (typeMap, _a) {
|
|
42
|
+
var _b;
|
|
43
|
+
var type = _a.type, user = _a.user;
|
|
44
|
+
(_b = typeMap[type]) !== null && _b !== void 0 ? _b : (typeMap[type] = []);
|
|
45
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
46
|
+
typeMap[type].push((user === null || user === void 0 ? void 0 : user.name) || user.id);
|
|
47
|
+
return typeMap;
|
|
48
|
+
}, {});
|
|
49
|
+
}, [latestReactions]);
|
|
40
50
|
return {
|
|
41
51
|
additionalEmojiProps: reactionsAreCustom ? additionalEmojiProps : emojiSetDef,
|
|
52
|
+
aggregatedUserNamesByType: aggregatedUserNamesByType,
|
|
42
53
|
emojiData: emojiData,
|
|
43
54
|
getEmojiByReactionType: getEmojiByReactionType,
|
|
44
55
|
iHaveReactedWithReaction: iHaveReactedWithReaction,
|
|
@@ -1,3 +1,15 @@
|
|
|
1
|
-
import { ComponentProps } from 'react';
|
|
2
|
-
|
|
1
|
+
import React, { ComponentProps } from 'react';
|
|
2
|
+
import { PopperProps } from 'react-popper';
|
|
3
|
+
export declare const Tooltip: ({ children, ...rest }: ComponentProps<'div'>) => JSX.Element;
|
|
4
|
+
export declare type PopperTooltipProps<T extends HTMLElement> = React.PropsWithChildren<{
|
|
5
|
+
/** Reference element to which the tooltip should attach to */
|
|
6
|
+
referenceElement: T | null;
|
|
7
|
+
/** Popper's modifier (offset) property - [xAxis offset, yAxis offset], default [0, 10] */
|
|
8
|
+
offset?: [number, number];
|
|
9
|
+
/** Popper's placement property defining default position of the tooltip, default 'top' */
|
|
10
|
+
placement?: PopperProps<unknown>['placement'];
|
|
11
|
+
/** Tells component whether to render it's contents */
|
|
12
|
+
visible?: boolean;
|
|
13
|
+
}>;
|
|
14
|
+
export declare const PopperTooltip: <T extends HTMLElement>({ children, offset, referenceElement, placement, visible, }: PopperTooltipProps<T>) => JSX.Element | null;
|
|
3
15
|
//# sourceMappingURL=Tooltip.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Tooltip.d.ts","sourceRoot":"","sources":["../../../src/components/Tooltip/Tooltip.tsx"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"Tooltip.d.ts","sourceRoot":"","sources":["../../../src/components/Tooltip/Tooltip.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,cAAc,EAAY,MAAM,OAAO,CAAC;AACxD,OAAO,EAAE,WAAW,EAAa,MAAM,cAAc,CAAC;AAEtD,eAAO,MAAM,OAAO,0BAA2B,eAAe,KAAK,CAAC,gBAInE,CAAC;AAEF,oBAAY,kBAAkB,CAAC,CAAC,SAAS,WAAW,IAAI,KAAK,CAAC,iBAAiB,CAAC;IAC9E,8DAA8D;IAC9D,gBAAgB,EAAE,CAAC,GAAG,IAAI,CAAC;IAC3B,0FAA0F;IAC1F,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1B,0FAA0F;IAC1F,SAAS,CAAC,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,CAAC;IAC9C,sDAAsD;IACtD,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC,CAAC;AAEH,eAAO,MAAM,aAAa,mIAgCzB,CAAC"}
|
|
@@ -20,8 +20,27 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
20
20
|
}
|
|
21
21
|
return t;
|
|
22
22
|
};
|
|
23
|
-
import React from 'react';
|
|
24
|
-
|
|
25
|
-
|
|
23
|
+
import React, { useState } from 'react';
|
|
24
|
+
import { usePopper } from 'react-popper';
|
|
25
|
+
export var Tooltip = function (_a) {
|
|
26
|
+
var children = _a.children, rest = __rest(_a, ["children"]);
|
|
26
27
|
return (React.createElement("div", __assign({ className: 'str-chat__tooltip' }, rest), children));
|
|
27
28
|
};
|
|
29
|
+
export var PopperTooltip = function (_a) {
|
|
30
|
+
var children = _a.children, _b = _a.offset, offset = _b === void 0 ? [0, 10] : _b, referenceElement = _a.referenceElement, _c = _a.placement, placement = _c === void 0 ? 'top' : _c, _d = _a.visible, visible = _d === void 0 ? false : _d;
|
|
31
|
+
var _e = useState(null), popperElement = _e[0], setPopperElement = _e[1];
|
|
32
|
+
var _f = usePopper(referenceElement, popperElement, {
|
|
33
|
+
modifiers: [
|
|
34
|
+
{
|
|
35
|
+
name: 'offset',
|
|
36
|
+
options: {
|
|
37
|
+
offset: offset,
|
|
38
|
+
},
|
|
39
|
+
},
|
|
40
|
+
],
|
|
41
|
+
placement: placement,
|
|
42
|
+
}), attributes = _f.attributes, styles = _f.styles;
|
|
43
|
+
if (!visible)
|
|
44
|
+
return null;
|
|
45
|
+
return (React.createElement("div", __assign({ className: 'str-chat__tooltip', ref: setPopperElement, style: styles.popper }, attributes.popper), children));
|
|
46
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/Tooltip/hooks/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './useEnterLeaveHandlers';
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
export declare const useEnterLeaveHandlers: <T extends HTMLElement>({ onMouseEnter, onMouseLeave, }?: Partial<Record<"onMouseEnter" | "onMouseLeave", React.MouseEventHandler<T>>>) => {
|
|
3
|
+
handleEnter: React.MouseEventHandler<T>;
|
|
4
|
+
handleLeave: React.MouseEventHandler<T>;
|
|
5
|
+
tooltipVisible: boolean;
|
|
6
|
+
};
|
|
7
|
+
//# sourceMappingURL=useEnterLeaveHandlers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useEnterLeaveHandlers.d.ts","sourceRoot":"","sources":["../../../../src/components/Tooltip/hooks/useEnterLeaveHandlers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAgC,MAAM,OAAO,CAAC;AAErD,eAAO,MAAM,qBAAqB;;;;CAuBjC,CAAC"}
|