stream-chat-react 11.6.0 → 11.8.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/Window-7c2f264c.js +41846 -0
- package/dist/browser.full-bundle.js +329 -230
- package/dist/browser.full-bundle.js.map +1 -1
- package/dist/browser.full-bundle.min.js +4 -4
- package/dist/browser.full-bundle.min.js.map +1 -1
- package/dist/components/Channel/Channel.d.ts +7 -5
- package/dist/components/Channel/Channel.d.ts.map +1 -1
- package/dist/components/Channel/Channel.js +97 -56
- package/dist/components/Channel/hooks/useCreateChannelStateContext.d.ts.map +1 -1
- package/dist/components/Channel/hooks/useCreateChannelStateContext.js +3 -1
- package/dist/components/ChannelList/ChannelList.d.ts +3 -0
- package/dist/components/ChannelList/ChannelList.d.ts.map +1 -1
- package/dist/components/ChannelList/ChannelList.js +2 -2
- package/dist/components/ChannelList/hooks/usePaginatedChannels.d.ts +12 -1
- package/dist/components/ChannelList/hooks/usePaginatedChannels.d.ts.map +1 -1
- package/dist/components/ChannelList/hooks/usePaginatedChannels.js +55 -43
- package/dist/components/ChannelPreview/ChannelPreview.d.ts +0 -16
- package/dist/components/ChannelPreview/ChannelPreview.d.ts.map +1 -1
- package/dist/components/ChannelPreview/ChannelPreviewMessenger.d.ts +0 -5
- package/dist/components/ChannelPreview/ChannelPreviewMessenger.d.ts.map +1 -1
- package/dist/components/ChannelPreview/ChannelPreviewMessenger.js +2 -62
- package/dist/components/Chat/hooks/useChannelsQueryState.d.ts +2 -2
- package/dist/components/Chat/hooks/useChannelsQueryState.d.ts.map +1 -1
- package/dist/components/Emojis/index.cjs.js +30 -12
- package/dist/components/Message/MessageErrorText.d.ts +9 -0
- package/dist/components/Message/MessageErrorText.d.ts.map +1 -0
- package/dist/components/Message/MessageErrorText.js +16 -0
- package/dist/components/Message/MessageSimple.d.ts.map +1 -1
- package/dist/components/Message/MessageSimple.js +17 -5
- package/dist/components/Message/MessageText.d.ts.map +1 -1
- package/dist/components/Message/MessageText.js +3 -5
- package/dist/components/Message/utils.d.ts +1 -0
- package/dist/components/Message/utils.d.ts.map +1 -1
- package/dist/components/Message/utils.js +5 -0
- package/dist/components/MessageActions/MessageActionsBox.d.ts.map +1 -1
- package/dist/components/MessageActions/MessageActionsBox.js +1 -1
- package/dist/components/MessageBounce/MessageBounceModal.d.ts +8 -0
- package/dist/components/MessageBounce/MessageBounceModal.d.ts.map +1 -0
- package/dist/components/MessageBounce/MessageBounceModal.js +10 -0
- package/dist/components/MessageBounce/MessageBouncePrompt.d.ts +6 -0
- package/dist/components/MessageBounce/MessageBouncePrompt.d.ts.map +1 -0
- package/dist/components/MessageBounce/MessageBouncePrompt.js +19 -0
- package/dist/components/MessageBounce/index.d.ts +3 -0
- package/dist/components/MessageBounce/index.d.ts.map +1 -0
- package/dist/components/MessageBounce/index.js +2 -0
- package/dist/components/MessageInput/hooks/useSubmitHandler.js +1 -1
- package/dist/components/MessageList/MessageList.d.ts.map +1 -1
- package/dist/components/MessageList/MessageList.js +15 -14
- package/dist/components/MessageList/UnreadMessagesNotification.d.ts.map +1 -1
- package/dist/components/MessageList/UnreadMessagesNotification.js +2 -2
- package/dist/components/MessageList/UnreadMessagesSeparator.js +1 -1
- package/dist/components/MessageList/VirtualizedMessageList.d.ts.map +1 -1
- package/dist/components/MessageList/VirtualizedMessageList.js +11 -12
- package/dist/components/MessageList/hooks/MessageList/useMessageListElements.d.ts +2 -1
- package/dist/components/MessageList/hooks/MessageList/useMessageListElements.d.ts.map +1 -1
- package/dist/components/MessageList/hooks/MessageList/useMessageListElements.js +3 -4
- package/dist/components/MessageList/hooks/MessageList/useScrollLocationLogic.d.ts.map +1 -1
- package/dist/components/MessageList/hooks/MessageList/useScrollLocationLogic.js +0 -2
- package/dist/components/MessageList/hooks/MessageList/useUnreadMessagesNotification.d.ts +2 -1
- package/dist/components/MessageList/hooks/MessageList/useUnreadMessagesNotification.d.ts.map +1 -1
- package/dist/components/MessageList/hooks/MessageList/useUnreadMessagesNotification.js +19 -4
- package/dist/components/MessageList/hooks/VirtualizedMessageList/usePrependMessagesCount.d.ts.map +1 -1
- package/dist/components/MessageList/hooks/VirtualizedMessageList/usePrependMessagesCount.js +3 -3
- package/dist/components/MessageList/renderMessages.d.ts +8 -7
- package/dist/components/MessageList/renderMessages.d.ts.map +1 -1
- package/dist/components/MessageList/renderMessages.js +4 -4
- package/dist/context/ChannelActionContext.d.ts +9 -1
- package/dist/context/ChannelActionContext.d.ts.map +1 -1
- package/dist/context/ChannelStateContext.d.ts +3 -2
- package/dist/context/ChannelStateContext.d.ts.map +1 -1
- package/dist/context/ComponentContext.d.ts +3 -1
- package/dist/context/ComponentContext.d.ts.map +1 -1
- package/dist/context/MessageBounceContext.d.ts +12 -0
- package/dist/context/MessageBounceContext.d.ts.map +1 -0
- package/dist/context/MessageBounceContext.js +37 -0
- package/dist/context/index.d.ts +1 -0
- package/dist/context/index.d.ts.map +1 -1
- package/dist/context/index.js +1 -0
- package/dist/css/v2/index.css +1 -1
- package/dist/css/v2/index.layout.css +1 -1
- package/dist/i18n/Streami18n.d.ts +3 -0
- package/dist/i18n/Streami18n.d.ts.map +1 -1
- package/dist/i18n/de.json +3 -0
- package/dist/i18n/en.json +3 -0
- package/dist/i18n/es.json +3 -0
- package/dist/i18n/fr.json +3 -0
- package/dist/i18n/hi.json +3 -0
- package/dist/i18n/it.json +3 -0
- package/dist/i18n/ja.json +3 -0
- package/dist/i18n/ko.json +3 -0
- package/dist/i18n/nl.json +3 -0
- package/dist/i18n/pt.json +3 -0
- package/dist/i18n/ru.json +3 -0
- package/dist/i18n/tr.json +3 -0
- package/dist/index.cjs.js +1392 -39747
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/scss/v2/{MessageBounceOptions/MessageBounceOptions-layout.scss → MessageBouncePrompt/MessageBouncePrompt-layout.scss} +2 -1
- package/dist/scss/v2/{MessageBounceOptions/MessageBounceOptions-theme.scss → MessageBouncePrompt/MessageBouncePrompt-theme.scss} +1 -1
- package/dist/scss/v2/index.layout.scss +1 -1
- package/dist/scss/v2/index.scss +1 -1
- package/dist/types/index.d.ts +2 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +1 -0
- package/dist/types/types.d.ts +12 -10
- package/dist/types/types.d.ts.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +3 -3
- package/dist/icons-7ead3d97.js +0 -3172
|
@@ -5,7 +5,7 @@ import { MAX_QUERY_CHANNELS_LIMIT } from '../utils';
|
|
|
5
5
|
import { useChatContext } from '../../../context/ChatContext';
|
|
6
6
|
var RECOVER_LOADED_CHANNELS_THROTTLE_INTERVAL_IN_MS = 5000;
|
|
7
7
|
var MIN_RECOVER_LOADED_CHANNELS_THROTTLE_INTERVAL_IN_MS = 2000;
|
|
8
|
-
export var usePaginatedChannels = function (client, filters, sort, options, activeChannelHandler, recoveryThrottleIntervalMs) {
|
|
8
|
+
export var usePaginatedChannels = function (client, filters, sort, options, activeChannelHandler, recoveryThrottleIntervalMs, customQueryChannels) {
|
|
9
9
|
if (recoveryThrottleIntervalMs === void 0) { recoveryThrottleIntervalMs = RECOVER_LOADED_CHANNELS_THROTTLE_INTERVAL_IN_MS; }
|
|
10
10
|
var _a = useChatContext('usePaginatedChannels').channelsQueryState, error = _a.error, setError = _a.setError, setQueryInProgress = _a.setQueryInProgress;
|
|
11
11
|
var _b = useState([]), channels = _b[0], setChannels = _b[1];
|
|
@@ -20,49 +20,61 @@ export var usePaginatedChannels = function (client, filters, sort, options, acti
|
|
|
20
20
|
var filterString = useMemo(function () { return JSON.stringify(filters); }, [filters]);
|
|
21
21
|
var sortString = useMemo(function () { return JSON.stringify(sort); }, [sort]);
|
|
22
22
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
23
|
-
var queryChannels = function (queryType) {
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
setQueryInProgress(
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
23
|
+
var queryChannels = function (queryType) {
|
|
24
|
+
if (queryType === void 0) { queryType = 'load-more'; }
|
|
25
|
+
return __awaiter(void 0, void 0, void 0, function () {
|
|
26
|
+
var offset, newOptions, channelQueryResponse, newChannels, err_1;
|
|
27
|
+
var _a;
|
|
28
|
+
return __generator(this, function (_b) {
|
|
29
|
+
switch (_b.label) {
|
|
30
|
+
case 0:
|
|
31
|
+
setError(null);
|
|
32
|
+
if (queryType === 'reload') {
|
|
33
|
+
setChannels([]);
|
|
34
|
+
}
|
|
35
|
+
setQueryInProgress(queryType);
|
|
36
|
+
_b.label = 1;
|
|
37
|
+
case 1:
|
|
38
|
+
_b.trys.push([1, 6, , 7]);
|
|
39
|
+
if (!customQueryChannels) return [3 /*break*/, 3];
|
|
40
|
+
return [4 /*yield*/, customQueryChannels({
|
|
41
|
+
currentChannels: channels,
|
|
42
|
+
queryType: queryType,
|
|
43
|
+
setChannels: setChannels,
|
|
44
|
+
setHasNextPage: setHasNextPage,
|
|
45
|
+
})];
|
|
46
|
+
case 2:
|
|
47
|
+
_b.sent();
|
|
48
|
+
return [3 /*break*/, 5];
|
|
49
|
+
case 3:
|
|
50
|
+
offset = queryType === 'reload' ? 0 : channels.length;
|
|
51
|
+
newOptions = __assign({ limit: (_a = options === null || options === void 0 ? void 0 : options.limit) !== null && _a !== void 0 ? _a : MAX_QUERY_CHANNELS_LIMIT, offset: offset }, options);
|
|
52
|
+
return [4 /*yield*/, client.queryChannels(filters, sort || {}, newOptions)];
|
|
53
|
+
case 4:
|
|
54
|
+
channelQueryResponse = _b.sent();
|
|
55
|
+
newChannels = queryType === 'reload'
|
|
56
|
+
? channelQueryResponse
|
|
57
|
+
: uniqBy(__spreadArray(__spreadArray([], channels, true), channelQueryResponse, true), 'cid');
|
|
58
|
+
setChannels(newChannels);
|
|
59
|
+
setHasNextPage(channelQueryResponse.length >= newOptions.limit);
|
|
60
|
+
// Set active channel only on load of first page
|
|
61
|
+
if (!offset && activeChannelHandler) {
|
|
62
|
+
activeChannelHandler(newChannels, setChannels);
|
|
63
|
+
}
|
|
64
|
+
_b.label = 5;
|
|
65
|
+
case 5: return [3 /*break*/, 7];
|
|
66
|
+
case 6:
|
|
67
|
+
err_1 = _b.sent();
|
|
68
|
+
console.warn(err_1);
|
|
69
|
+
setError(err_1);
|
|
70
|
+
return [3 /*break*/, 7];
|
|
71
|
+
case 7:
|
|
72
|
+
setQueryInProgress(null);
|
|
73
|
+
return [2 /*return*/];
|
|
74
|
+
}
|
|
75
|
+
});
|
|
64
76
|
});
|
|
65
|
-
}
|
|
77
|
+
};
|
|
66
78
|
var throttleRecover = useCallback(function () {
|
|
67
79
|
var now = Date.now();
|
|
68
80
|
var isFirstRecovery = !lastRecoveryTimestamp.current;
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import { MarkChannelReadOn } from './ChannelPreviewMessenger';
|
|
3
2
|
import { ChatContextValue } from '../../context/ChatContext';
|
|
4
3
|
import { MessageDeliveryStatus } from './hooks/useMessageDeliveryStatus';
|
|
5
4
|
import type { Channel } from 'stream-chat';
|
|
@@ -17,21 +16,6 @@ export type ChannelPreviewUIComponentProps<StreamChatGenerics extends DefaultStr
|
|
|
17
16
|
lastMessage?: StreamMessage<StreamChatGenerics>;
|
|
18
17
|
/** Latest message preview to display, will be a string or JSX element supporting markdown. */
|
|
19
18
|
latestMessage?: string | JSX.Element;
|
|
20
|
-
/**
|
|
21
|
-
* Configuration that determines when and whether a channel is marked read upon clicking ChannelPreview.
|
|
22
|
-
* 1. MarkChannelReadOn.never:
|
|
23
|
-
* Prevents a channel from being marked read when any ChannelPreview is clicked.
|
|
24
|
-
* 2. MarkChannelReadOn.leave:
|
|
25
|
-
* Marks active channel read before switching the active channel state to the clicked preview's channel.
|
|
26
|
-
* This means that active channel being left is marked read before navigating to another channel.
|
|
27
|
-
* 3. MarkChannelReadOn.reenter:
|
|
28
|
-
* Channel, which is re-entered by clicking the preview, is marked read.
|
|
29
|
-
* That means
|
|
30
|
-
* 1. an active channel can be marked unread, left and on return marked read.
|
|
31
|
-
* 2. a non-active channel receives a new message, is entered, left and re-entered and marked read.
|
|
32
|
-
* The default configuration is set to MarkChannelReadOn.reenter.
|
|
33
|
-
*/
|
|
34
|
-
markActiveChannelReadOn?: MarkChannelReadOn;
|
|
35
19
|
/** Status describing whether own message has been delivered or read by another. If the last message is not an own message, then the status is undefined. */
|
|
36
20
|
messageDeliveryStatus?: MessageDeliveryStatus;
|
|
37
21
|
/** Number of unread Messages */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChannelPreview.d.ts","sourceRoot":"","sources":["../../../src/components/ChannelPreview/ChannelPreview.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA2C,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"ChannelPreview.d.ts","sourceRoot":"","sources":["../../../src/components/ChannelPreview/ChannelPreview.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA2C,MAAM,OAAO,CAAC;AAOhE,OAAO,EAAE,gBAAgB,EAAkB,MAAM,2BAA2B,CAAC;AAE7E,OAAO,EAAE,qBAAqB,EAA4B,MAAM,kCAAkC,CAAC;AAEnG,OAAO,KAAK,EAAE,OAAO,EAAS,MAAM,aAAa,CAAC;AAElD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAEvE,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAEnE,MAAM,MAAM,8BAA8B,CACxC,kBAAkB,SAAS,yBAAyB,GAAG,yBAAyB,IAC9E,mBAAmB,CAAC,kBAAkB,CAAC,GAAG;IAC5C,kEAAkE;IAClE,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,kCAAkC;IAClC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kCAAkC;IAClC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,6CAA6C;IAC7C,WAAW,CAAC,EAAE,aAAa,CAAC,kBAAkB,CAAC,CAAC;IAChD,8FAA8F;IAC9F,aAAa,CAAC,EAAE,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC;IACrC,4JAA4J;IAC5J,qBAAqB,CAAC,EAAE,qBAAqB,CAAC;IAC9C,gCAAgC;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,mBAAmB,CAC7B,kBAAkB,SAAS,yBAAyB,GAAG,yBAAyB,IAC9E;IACF,6MAA6M;IAC7M,OAAO,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACrC,sCAAsC;IACtC,aAAa,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAC5C,+LAA+L;IAC/L,MAAM,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;IAC1C,+DAA+D;IAC/D,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,gDAAgD;IAChD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,mDAAmD;IACnD,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,KAAK,IAAI,CAAC;IAC7C,6PAA6P;IAC7P,OAAO,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,8BAA8B,CAAC,kBAAkB,CAAC,CAAC,CAAC;IAClF,kCAAkC;IAClC,gBAAgB,CAAC,EAAE,gBAAgB,CAAC,kBAAkB,CAAC,CAAC,kBAAkB,CAAC,CAAC;IAC5E,2CAA2C;IAC3C,QAAQ,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAChD,CAAC;AAEF,eAAO,MAAM,cAAc,0JA4F1B,CAAC"}
|
|
@@ -1,10 +1,5 @@
|
|
|
1
1
|
import type { ChannelPreviewUIComponentProps } from './ChannelPreview';
|
|
2
2
|
import type { DefaultStreamChatGenerics } from '../../types/types';
|
|
3
|
-
export declare enum MarkChannelReadOn {
|
|
4
|
-
'never' = 0,
|
|
5
|
-
'leave' = 1,
|
|
6
|
-
'reenter' = 2
|
|
7
|
-
}
|
|
8
3
|
/**
|
|
9
4
|
* Used as preview component for channel item in [ChannelList](#channellist) component.
|
|
10
5
|
* Its best suited for messenger type chat.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChannelPreviewMessenger.d.ts","sourceRoot":"","sources":["../../../src/components/ChannelPreview/ChannelPreviewMessenger.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ChannelPreviewMessenger.d.ts","sourceRoot":"","sources":["../../../src/components/ChannelPreview/ChannelPreviewMessenger.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,kBAAkB,CAAC;AAEvE,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAwEnE;;;GAGG;AACH,eAAO,MAAM,uBAAuB,8JAES,CAAC"}
|
|
@@ -1,82 +1,22 @@
|
|
|
1
|
-
import React, {
|
|
1
|
+
import React, { useRef } from 'react';
|
|
2
2
|
import clsx from 'clsx';
|
|
3
3
|
import { Avatar as DefaultAvatar } from '../Avatar';
|
|
4
|
-
import { useChatContext } from '../../context';
|
|
5
|
-
export var MarkChannelReadOn;
|
|
6
|
-
(function (MarkChannelReadOn) {
|
|
7
|
-
MarkChannelReadOn[MarkChannelReadOn["never"] = 0] = "never";
|
|
8
|
-
MarkChannelReadOn[MarkChannelReadOn["leave"] = 1] = "leave";
|
|
9
|
-
MarkChannelReadOn[MarkChannelReadOn["reenter"] = 2] = "reenter";
|
|
10
|
-
})(MarkChannelReadOn || (MarkChannelReadOn = {}));
|
|
11
4
|
var UnMemoizedChannelPreviewMessenger = function (props) {
|
|
12
5
|
var _a, _b;
|
|
13
|
-
var active = props.active,
|
|
14
|
-
var client = useChatContext('ChannelPreviewMessenger').client;
|
|
6
|
+
var active = props.active, _c = props.Avatar, Avatar = _c === void 0 ? DefaultAvatar : _c, channel = props.channel, _d = props.className, customClassName = _d === void 0 ? '' : _d, displayImage = props.displayImage, displayTitle = props.displayTitle, latestMessage = props.latestMessage, customOnSelectChannel = props.onSelect, setActiveChannel = props.setActiveChannel, unread = props.unread, watchers = props.watchers;
|
|
15
7
|
var channelPreviewButton = useRef(null);
|
|
16
8
|
var avatarName = displayTitle || ((_b = (_a = channel.state.messages[channel.state.messages.length - 1]) === null || _a === void 0 ? void 0 : _a.user) === null || _b === void 0 ? void 0 : _b.id);
|
|
17
|
-
var previouslyClicked = useRef(active);
|
|
18
|
-
var handleMarkReadOnReenter = function () {
|
|
19
|
-
if (!client.user)
|
|
20
|
-
return;
|
|
21
|
-
var ownReadState = channel.state.read[client.user.id];
|
|
22
|
-
if (!previouslyClicked.current) {
|
|
23
|
-
previouslyClicked.current = true;
|
|
24
|
-
}
|
|
25
|
-
else if (!active &&
|
|
26
|
-
((ownReadState === null || ownReadState === void 0 ? void 0 : ownReadState.first_unread_message_id) || (ownReadState === null || ownReadState === void 0 ? void 0 : ownReadState.unread_messages) > 0) &&
|
|
27
|
-
previouslyClicked.current) {
|
|
28
|
-
channel.markRead();
|
|
29
|
-
}
|
|
30
|
-
};
|
|
31
|
-
var handleMarkReadOnLeave = function () {
|
|
32
|
-
if (!(client.user && activeChannel))
|
|
33
|
-
return;
|
|
34
|
-
var ownReadState = activeChannel.state.read[client.user.id];
|
|
35
|
-
if ((ownReadState === null || ownReadState === void 0 ? void 0 : ownReadState.first_unread_message_id) || (ownReadState === null || ownReadState === void 0 ? void 0 : ownReadState.unread_messages) > 0) {
|
|
36
|
-
activeChannel.markRead();
|
|
37
|
-
}
|
|
38
|
-
};
|
|
39
9
|
var onSelectChannel = function (e) {
|
|
40
10
|
if (customOnSelectChannel) {
|
|
41
11
|
customOnSelectChannel(e);
|
|
42
12
|
}
|
|
43
13
|
else if (setActiveChannel) {
|
|
44
|
-
// eslint-disable-next-line default-case
|
|
45
|
-
switch (markActiveChannelReadOn) {
|
|
46
|
-
case MarkChannelReadOn.never:
|
|
47
|
-
break;
|
|
48
|
-
case MarkChannelReadOn.leave:
|
|
49
|
-
handleMarkReadOnLeave();
|
|
50
|
-
break;
|
|
51
|
-
case MarkChannelReadOn.reenter:
|
|
52
|
-
handleMarkReadOnReenter();
|
|
53
|
-
}
|
|
54
14
|
setActiveChannel(channel, watchers);
|
|
55
15
|
}
|
|
56
16
|
if (channelPreviewButton === null || channelPreviewButton === void 0 ? void 0 : channelPreviewButton.current) {
|
|
57
17
|
channelPreviewButton.current.blur();
|
|
58
18
|
}
|
|
59
19
|
};
|
|
60
|
-
useEffect(function () {
|
|
61
|
-
if (markActiveChannelReadOn !== MarkChannelReadOn.reenter)
|
|
62
|
-
return;
|
|
63
|
-
var handleEvent = function (event) {
|
|
64
|
-
var _a, _b;
|
|
65
|
-
if (active)
|
|
66
|
-
return;
|
|
67
|
-
if (channel.cid !== event.cid)
|
|
68
|
-
return;
|
|
69
|
-
if (event.type === 'notification.mark_unread' && ((_a = event.user) === null || _a === void 0 ? void 0 : _a.id) !== ((_b = client.user) === null || _b === void 0 ? void 0 : _b.id))
|
|
70
|
-
return;
|
|
71
|
-
previouslyClicked.current = false;
|
|
72
|
-
};
|
|
73
|
-
channel.on('notification.mark_unread', handleEvent);
|
|
74
|
-
channel.on('message.new', handleEvent);
|
|
75
|
-
return function () {
|
|
76
|
-
channel.off('notification.mark_unread', handleEvent);
|
|
77
|
-
channel.off('message.new', handleEvent);
|
|
78
|
-
};
|
|
79
|
-
}, [active, channel, client, markActiveChannelReadOn, previouslyClicked]);
|
|
80
20
|
return (React.createElement("button", { "aria-label": "Select Channel: ".concat(displayTitle || ''), "aria-selected": active, className: clsx("str-chat__channel-preview-messenger str-chat__channel-preview", active && 'str-chat__channel-preview-messenger--active', unread && unread >= 1 && 'str-chat__channel-preview-messenger--unread', customClassName), "data-testid": 'channel-preview-button', onClick: onSelectChannel, ref: channelPreviewButton, role: 'option' },
|
|
81
21
|
React.createElement("div", { className: 'str-chat__channel-preview-messenger--left' },
|
|
82
22
|
React.createElement(Avatar, { image: displayImage, name: avatarName, size: 40 })),
|
|
@@ -3,9 +3,9 @@ import type { APIErrorResponse, ErrorFromResponse } from 'stream-chat';
|
|
|
3
3
|
type ChannelQueryState = 'uninitialized' | 'reload' | 'load-more' | null;
|
|
4
4
|
export interface ChannelsQueryState {
|
|
5
5
|
error: ErrorFromResponse<APIErrorResponse> | null;
|
|
6
|
-
queryInProgress: ChannelQueryState
|
|
6
|
+
queryInProgress: ChannelQueryState;
|
|
7
7
|
setError: Dispatch<SetStateAction<ErrorFromResponse<APIErrorResponse> | null>>;
|
|
8
|
-
setQueryInProgress: Dispatch<SetStateAction<ChannelQueryState
|
|
8
|
+
setQueryInProgress: Dispatch<SetStateAction<ChannelQueryState>>;
|
|
9
9
|
}
|
|
10
10
|
export declare const useChannelsQueryState: () => ChannelsQueryState;
|
|
11
11
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useChannelsQueryState.d.ts","sourceRoot":"","sources":["../../../../src/components/Chat/hooks/useChannelsQueryState.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAY,MAAM,OAAO,CAAC;AAC3D,OAAO,KAAK,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEvE,KAAK,iBAAiB,GAClB,eAAe,GACf,QAAQ,GACR,WAAW,GACX,IAAI,CAAC;AAET,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,iBAAiB,CAAC,gBAAgB,CAAC,GAAG,IAAI,CAAC;IAClD,eAAe,EAAE,iBAAiB,
|
|
1
|
+
{"version":3,"file":"useChannelsQueryState.d.ts","sourceRoot":"","sources":["../../../../src/components/Chat/hooks/useChannelsQueryState.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAY,MAAM,OAAO,CAAC;AAC3D,OAAO,KAAK,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEvE,KAAK,iBAAiB,GAClB,eAAe,GACf,QAAQ,GACR,WAAW,GACX,IAAI,CAAC;AAET,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,iBAAiB,CAAC,gBAAgB,CAAC,GAAG,IAAI,CAAC;IAClD,eAAe,EAAE,iBAAiB,CAAC;IACnC,QAAQ,EAAE,QAAQ,CAAC,cAAc,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;IAC/E,kBAAkB,EAAE,QAAQ,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC,CAAC;CACjE;AAED,eAAO,MAAM,qBAAqB,QAAO,kBAUxC,CAAC"}
|
|
@@ -2,12 +2,9 @@
|
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
|
-
var
|
|
5
|
+
var Window = require('../../Window-7c2f264c.js');
|
|
6
6
|
var React = require('react');
|
|
7
7
|
var Picker = require('@emoji-mart/react');
|
|
8
|
-
require('react-dom');
|
|
9
|
-
require('react-fast-compare');
|
|
10
|
-
require('crypto');
|
|
11
8
|
require('dayjs');
|
|
12
9
|
require('dayjs/plugin/calendar');
|
|
13
10
|
require('dayjs/plugin/localizedFormat');
|
|
@@ -29,6 +26,27 @@ require('dayjs/locale/pt');
|
|
|
29
26
|
require('dayjs/locale/ru');
|
|
30
27
|
require('dayjs/locale/tr');
|
|
31
28
|
require('dayjs/locale/en');
|
|
29
|
+
require('lodash.uniqby');
|
|
30
|
+
require('react/jsx-runtime');
|
|
31
|
+
require('react-player');
|
|
32
|
+
require('pretty-bytes');
|
|
33
|
+
require('@braintree/sanitize-url');
|
|
34
|
+
require('react-image-gallery');
|
|
35
|
+
require('prop-types');
|
|
36
|
+
require('linkifyjs');
|
|
37
|
+
require('emoji-regex');
|
|
38
|
+
require('@babel/runtime/helpers/extends');
|
|
39
|
+
require('@babel/runtime/helpers/defineProperty');
|
|
40
|
+
require('react-textarea-autosize');
|
|
41
|
+
require('textarea-caret');
|
|
42
|
+
require('react-is');
|
|
43
|
+
require('lodash.debounce');
|
|
44
|
+
require('lodash.throttle');
|
|
45
|
+
require('crypto');
|
|
46
|
+
require('react-fast-compare');
|
|
47
|
+
require('react-dom');
|
|
48
|
+
require('stream-chat');
|
|
49
|
+
require('react-virtuoso');
|
|
32
50
|
|
|
33
51
|
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
34
52
|
|
|
@@ -67,15 +85,15 @@ var classNames = {
|
|
|
67
85
|
};
|
|
68
86
|
var EmojiPicker = function (props) {
|
|
69
87
|
var _a, _b, _c;
|
|
70
|
-
var themeVersion =
|
|
71
|
-
var t =
|
|
72
|
-
var _d =
|
|
88
|
+
var themeVersion = Window.useChatContext('EmojiPicker').themeVersion;
|
|
89
|
+
var t = Window.useTranslationContext('EmojiPicker').t;
|
|
90
|
+
var _d = Window.useMessageInputContext('EmojiPicker'), insertText = _d.insertText, textareaRef = _d.textareaRef;
|
|
73
91
|
var _e = React.useState(false), displayPicker = _e[0], setDisplayPicker = _e[1];
|
|
74
92
|
var _f = React.useState(null), referenceElement = _f[0], setReferenceElement = _f[1];
|
|
75
93
|
var _g = React.useState(null), popperElement = _g[0], setPopperElement = _g[1];
|
|
76
|
-
var _h =
|
|
94
|
+
var _h = Window.usePopper(referenceElement, popperElement, Window.__assign({ placement: themeVersion === '2' ? 'top-end' : 'top-start' }, props.popperOptions)), attributes = _h.attributes, styles = _h.styles;
|
|
77
95
|
var _j = classNames[themeVersion], buttonClassName = _j.buttonClassName, pickerContainerClassName = _j.pickerContainerClassName, wrapperClassName = _j.wrapperClassName;
|
|
78
|
-
var _k = props.ButtonIconComponent, ButtonIconComponent = _k === void 0 ? themeVersion === '2' ?
|
|
96
|
+
var _k = props.ButtonIconComponent, ButtonIconComponent = _k === void 0 ? themeVersion === '2' ? Window.EmojiPickerIcon : Window.EmojiIconLarge : _k;
|
|
79
97
|
React.useEffect(function () {
|
|
80
98
|
if (!popperElement || !referenceElement)
|
|
81
99
|
return;
|
|
@@ -89,8 +107,8 @@ var EmojiPicker = function (props) {
|
|
|
89
107
|
return function () { return window.removeEventListener('pointerdown', handlePointerDown); };
|
|
90
108
|
}, [referenceElement, popperElement]);
|
|
91
109
|
return (React__default["default"].createElement("div", { className: (_a = props.wrapperClassName) !== null && _a !== void 0 ? _a : wrapperClassName },
|
|
92
|
-
displayPicker && (React__default["default"].createElement("div",
|
|
93
|
-
React__default["default"].createElement(Picker__default["default"],
|
|
110
|
+
displayPicker && (React__default["default"].createElement("div", Window.__assign({ className: (_b = props.pickerContainerClassName) !== null && _b !== void 0 ? _b : pickerContainerClassName, style: styles.popper }, attributes.popper, { ref: setPopperElement }),
|
|
111
|
+
React__default["default"].createElement(Picker__default["default"], Window.__assign({ data: function () { return Window.__awaiter(void 0, void 0, void 0, function () { return Window.__generator(this, function (_a) {
|
|
94
112
|
switch (_a.label) {
|
|
95
113
|
case 0: return [4 /*yield*/, Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(require('@emoji-mart/data')); })];
|
|
96
114
|
case 1: return [2 /*return*/, (_a.sent()).default];
|
|
@@ -100,7 +118,7 @@ var EmojiPicker = function (props) {
|
|
|
100
118
|
insertText(e.native);
|
|
101
119
|
(_a = textareaRef.current) === null || _a === void 0 ? void 0 : _a.focus();
|
|
102
120
|
} }, props.pickerProps)))),
|
|
103
|
-
themeVersion === '1' && (React__default["default"].createElement(
|
|
121
|
+
themeVersion === '1' && (React__default["default"].createElement(Window.Tooltip, null, displayPicker ? t('Close emoji picker') : t('Open emoji picker'))),
|
|
104
122
|
React__default["default"].createElement("button", { "aria-label": 'Emoji picker', className: (_c = props.buttonClassName) !== null && _c !== void 0 ? _c : buttonClassName, onClick: function () { return setDisplayPicker(function (cv) { return !cv; }); }, ref: setReferenceElement, type: 'button' }, ButtonIconComponent && React__default["default"].createElement(ButtonIconComponent, null))));
|
|
105
123
|
};
|
|
106
124
|
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import { StreamMessage } from '../../context';
|
|
3
|
+
import { DefaultStreamChatGenerics } from '../../types/types';
|
|
4
|
+
export interface MessageErrorTextProps<StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics> {
|
|
5
|
+
message: StreamMessage<StreamChatGenerics>;
|
|
6
|
+
theme: string;
|
|
7
|
+
}
|
|
8
|
+
export declare function MessageErrorText<StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics>({ message, theme }: MessageErrorTextProps<StreamChatGenerics>): JSX.Element | null;
|
|
9
|
+
//# sourceMappingURL=MessageErrorText.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MessageErrorText.d.ts","sourceRoot":"","sources":["../../../src/components/Message/MessageErrorText.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,aAAa,EAAyB,MAAM,eAAe,CAAC;AACrE,OAAO,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAG9D,MAAM,WAAW,qBAAqB,CACpC,kBAAkB,SAAS,yBAAyB,GAAG,yBAAyB;IAEhF,OAAO,EAAE,aAAa,CAAC,kBAAkB,CAAC,CAAC;IAC3C,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,gBAAgB,CAC9B,kBAAkB,SAAS,yBAAyB,GAAG,yBAAyB,EAChF,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,qBAAqB,CAAC,kBAAkB,CAAC,sBAsB9D"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { useTranslationContext } from '../../context';
|
|
3
|
+
import { isMessageBounced } from './utils';
|
|
4
|
+
export function MessageErrorText(_a) {
|
|
5
|
+
var message = _a.message, theme = _a.theme;
|
|
6
|
+
var t = useTranslationContext('MessageText').t;
|
|
7
|
+
if (message.type === 'error' && !isMessageBounced(message)) {
|
|
8
|
+
return (React.createElement("div", { className: "str-chat__".concat(theme, "-message--error-message str-chat__message--error-message") }, t('Error · Unsent')));
|
|
9
|
+
}
|
|
10
|
+
if (message.status === 'failed') {
|
|
11
|
+
return (React.createElement("div", { className: "str-chat__".concat(theme, "-message--error-message str-chat__message--error-message") }, message.errorStatusCode !== 403
|
|
12
|
+
? t('Message Failed · Click to try again')
|
|
13
|
+
: t('Message Failed · Unauthorized')));
|
|
14
|
+
}
|
|
15
|
+
return null;
|
|
16
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MessageSimple.d.ts","sourceRoot":"","sources":["../../../src/components/Message/MessageSimple.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"MessageSimple.d.ts","sourceRoot":"","sources":["../../../src/components/Message/MessageSimple.tsx"],"names":[],"mappings":"AA+BA,OAAO,EAAE,mBAAmB,EAAqB,MAAM,8BAA8B,CAAC;AAEtF,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,SAAS,CAAC;AAEvD,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAgNnE;;GAEG;AACH,eAAO,MAAM,aAAa,4JAQzB,CAAC"}
|
|
@@ -1,27 +1,30 @@
|
|
|
1
1
|
import { __assign } from "tslib";
|
|
2
|
-
import React from 'react';
|
|
2
|
+
import React, { useState } from 'react';
|
|
3
3
|
import clsx from 'clsx';
|
|
4
4
|
import { MessageErrorIcon } from './icons';
|
|
5
|
+
import { MessageBouncePrompt as DefaultMessageBouncePrompt } from '../MessageBounce';
|
|
5
6
|
import { MessageDeleted as DefaultMessageDeleted } from './MessageDeleted';
|
|
6
7
|
import { MessageOptions as DefaultMessageOptions } from './MessageOptions';
|
|
7
8
|
import { MessageRepliesCountButton as DefaultMessageRepliesCountButton } from './MessageRepliesCountButton';
|
|
8
9
|
import { MessageStatus as DefaultMessageStatus } from './MessageStatus';
|
|
9
10
|
import { MessageText } from './MessageText';
|
|
10
11
|
import { MessageTimestamp as DefaultMessageTimestamp } from './MessageTimestamp';
|
|
11
|
-
import { areMessageUIPropsEqual, messageHasAttachments, messageHasReactions } from './utils';
|
|
12
|
+
import { areMessageUIPropsEqual, isMessageBounced, messageHasAttachments, messageHasReactions, } from './utils';
|
|
12
13
|
import { Avatar as DefaultAvatar } from '../Avatar';
|
|
13
14
|
import { CUSTOM_MESSAGE_TYPE } from '../../constants/messageTypes';
|
|
14
15
|
import { EditMessageForm as DefaultEditMessageForm, MessageInput } from '../MessageInput';
|
|
15
16
|
import { MML } from '../MML';
|
|
16
17
|
import { Modal } from '../Modal';
|
|
17
18
|
import { ReactionsList as DefaultReactionList, ReactionSelector as DefaultReactionSelector, } from '../Reactions';
|
|
19
|
+
import { MessageBounceModal } from '../MessageBounce/MessageBounceModal';
|
|
18
20
|
import { useChatContext } from '../../context/ChatContext';
|
|
19
21
|
import { useComponentContext } from '../../context/ComponentContext';
|
|
20
22
|
import { useMessageContext } from '../../context/MessageContext';
|
|
21
23
|
var MessageSimpleWithContext = function (props) {
|
|
22
24
|
var _a;
|
|
23
25
|
var additionalMessageInputProps = props.additionalMessageInputProps, clearEditingState = props.clearEditingState, editing = props.editing, endOfGroup = props.endOfGroup, firstOfGroup = props.firstOfGroup, groupedByUser = props.groupedByUser, handleAction = props.handleAction, handleOpenThread = props.handleOpenThread, handleRetry = props.handleRetry, highlighted = props.highlighted, isMyMessage = props.isMyMessage, isReactionEnabled = props.isReactionEnabled, message = props.message, onUserClick = props.onUserClick, onUserHover = props.onUserHover, reactionSelectorRef = props.reactionSelectorRef, renderText = props.renderText, showDetailedReactions = props.showDetailedReactions, threadList = props.threadList;
|
|
24
|
-
var _b =
|
|
26
|
+
var _b = useState(false), isBounceDialogOpen = _b[0], setIsBounceDialogOpen = _b[1];
|
|
27
|
+
var _c = useComponentContext('MessageSimple'), Attachment = _c.Attachment, _d = _c.Avatar, Avatar = _d === void 0 ? DefaultAvatar : _d, _e = _c.EditMessageInput, EditMessageInput = _e === void 0 ? DefaultEditMessageForm : _e, _f = _c.MessageDeleted, MessageDeleted = _f === void 0 ? DefaultMessageDeleted : _f, _g = _c.MessageBouncePrompt, MessageBouncePrompt = _g === void 0 ? DefaultMessageBouncePrompt : _g, _h = _c.MessageOptions, MessageOptions = _h === void 0 ? DefaultMessageOptions : _h, _j = _c.MessageRepliesCountButton, MessageRepliesCountButton = _j === void 0 ? DefaultMessageRepliesCountButton : _j, _k = _c.MessageStatus, MessageStatus = _k === void 0 ? DefaultMessageStatus : _k, _l = _c.MessageTimestamp, MessageTimestamp = _l === void 0 ? DefaultMessageTimestamp : _l, _m = _c.ReactionSelector, ReactionSelector = _m === void 0 ? DefaultReactionSelector : _m, _o = _c.ReactionsList, ReactionsList = _o === void 0 ? DefaultReactionList : _o;
|
|
25
28
|
var themeVersion = useChatContext('MessageSimple').themeVersion;
|
|
26
29
|
var hasAttachment = messageHasAttachments(message);
|
|
27
30
|
var hasReactions = messageHasReactions(message);
|
|
@@ -41,6 +44,14 @@ var MessageSimpleWithContext = function (props) {
|
|
|
41
44
|
var showMetadata = !groupedByUser || endOfGroup;
|
|
42
45
|
var showReplyCountButton = !threadList && !!message.reply_count;
|
|
43
46
|
var allowRetry = message.status === 'failed' && message.errorStatusCode !== 403;
|
|
47
|
+
var isBounced = isMessageBounced(message);
|
|
48
|
+
var handleClick = undefined;
|
|
49
|
+
if (allowRetry) {
|
|
50
|
+
handleClick = function () { return handleRetry(message); };
|
|
51
|
+
}
|
|
52
|
+
else if (isBounced) {
|
|
53
|
+
handleClick = function () { return setIsBounceDialogOpen(true); };
|
|
54
|
+
}
|
|
44
55
|
var rootClassName = clsx('str-chat__message str-chat__message-simple', "str-chat__message--".concat(message.type), "str-chat__message--".concat(message.status), isMyMessage()
|
|
45
56
|
? 'str-chat__message--me str-chat__message-simple--me'
|
|
46
57
|
: 'str-chat__message--other', message.text ? 'str-chat__message--has-text' : 'has-no-text', {
|
|
@@ -56,12 +67,13 @@ var MessageSimpleWithContext = function (props) {
|
|
|
56
67
|
return (React.createElement(React.Fragment, null,
|
|
57
68
|
editing && (React.createElement(Modal, { onClose: clearEditingState, open: editing },
|
|
58
69
|
React.createElement(MessageInput, __assign({ clearEditingState: clearEditingState, grow: true, hideSendButton: true, Input: EditMessageInput, message: message }, additionalMessageInputProps)))),
|
|
70
|
+
isBounceDialogOpen && (React.createElement(MessageBounceModal, { MessageBouncePrompt: MessageBouncePrompt, onClose: function () { return setIsBounceDialogOpen(false); }, open: isBounceDialogOpen })),
|
|
59
71
|
React.createElement("div", { className: rootClassName, key: message.id },
|
|
60
72
|
themeVersion === '1' && React.createElement(MessageStatus, null),
|
|
61
73
|
message.user && (React.createElement(Avatar, { image: message.user.image, name: message.user.name || message.user.id, onClick: onUserClick, onMouseOver: onUserHover, user: message.user })),
|
|
62
74
|
React.createElement("div", { className: clsx('str-chat__message-inner', {
|
|
63
|
-
'str-chat__simple-message--error-failed': allowRetry,
|
|
64
|
-
}), "data-testid": 'message-inner', onClick:
|
|
75
|
+
'str-chat__simple-message--error-failed': allowRetry || isBounced,
|
|
76
|
+
}), "data-testid": 'message-inner', onClick: handleClick, onKeyUp: handleClick },
|
|
65
77
|
React.createElement(MessageOptions, null),
|
|
66
78
|
React.createElement("div", { className: 'str-chat__message-reactions-host' },
|
|
67
79
|
canShowReactions && React.createElement(ReactionsList, { reverse: true }),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MessageText.d.ts","sourceRoot":"","sources":["../../../src/components/Message/MessageText.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"MessageText.d.ts","sourceRoot":"","sources":["../../../src/components/Message/MessageText.tsx"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACxE,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAEnE,MAAM,MAAM,gBAAgB,CAC1B,kBAAkB,SAAS,yBAAyB,GAAG,yBAAyB,IAC9E;IAEF,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAE5B,OAAO,CAAC,EAAE,aAAa,CAAC,kBAAkB,CAAC,CAAC;IAE5C,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GAAG,IAAI,CAAC,mBAAmB,CAAC,kBAAkB,CAAC,EAAE,YAAY,CAAC,CAAC;AA4EhE,eAAO,MAAM,WAAW,uJAEkB,CAAC"}
|
|
@@ -3,13 +3,14 @@ import { QuotedMessage as DefaultQuotedMessage } from './QuotedMessage';
|
|
|
3
3
|
import { isOnlyEmojis, messageHasAttachments } from './utils';
|
|
4
4
|
import { useComponentContext, useMessageContext, useTranslationContext } from '../../context';
|
|
5
5
|
import { renderText as defaultRenderText } from './renderText';
|
|
6
|
+
import { MessageErrorText } from './MessageErrorText';
|
|
6
7
|
var UnMemoizedMessageTextComponent = function (props) {
|
|
7
8
|
var _a, _b;
|
|
8
9
|
var customInnerClass = props.customInnerClass, _c = props.customWrapperClass, customWrapperClass = _c === void 0 ? '' : _c, propMessage = props.message, propsRenderText = props.renderText, _d = props.theme, theme = _d === void 0 ? 'simple' : _d;
|
|
9
10
|
var _e = useComponentContext('MessageText').QuotedMessage, QuotedMessage = _e === void 0 ? DefaultQuotedMessage : _e;
|
|
10
11
|
var _f = useMessageContext('MessageText'), contextMessage = _f.message, onMentionsClickMessage = _f.onMentionsClickMessage, onMentionsHoverMessage = _f.onMentionsHoverMessage, contextRenderText = _f.renderText, unsafeHTML = _f.unsafeHTML;
|
|
11
12
|
var renderText = (_a = propsRenderText !== null && propsRenderText !== void 0 ? propsRenderText : contextRenderText) !== null && _a !== void 0 ? _a : defaultRenderText;
|
|
12
|
-
var
|
|
13
|
+
var userLanguage = useTranslationContext('MessageText').userLanguage;
|
|
13
14
|
var message = propMessage || contextMessage;
|
|
14
15
|
var hasAttachment = messageHasAttachments(message);
|
|
15
16
|
var messageTextToRender = ((_b = message.i18n) === null || _b === void 0 ? void 0 : _b["".concat(userLanguage, "_text")]) || message.text;
|
|
@@ -27,10 +28,7 @@ var UnMemoizedMessageTextComponent = function (props) {
|
|
|
27
28
|
? " str-chat__message-".concat(theme, "-text-inner--is-emoji")
|
|
28
29
|
: '', "\n ").trim(), "data-testid": 'message-text-inner-wrapper', onClick: onMentionsClickMessage, onMouseOver: onMentionsHoverMessage },
|
|
29
30
|
message.quoted_message && React.createElement(QuotedMessage, null),
|
|
30
|
-
|
|
31
|
-
message.status === 'failed' && (React.createElement("div", { className: "str-chat__".concat(theme, "-message--error-message str-chat__message--error-message") }, message.errorStatusCode !== 403
|
|
32
|
-
? t('Message Failed · Click to try again')
|
|
33
|
-
: t('Message Failed · Unauthorized'))),
|
|
31
|
+
React.createElement(MessageErrorText, { message: message, theme: theme }),
|
|
34
32
|
unsafeHTML && message.html ? (React.createElement("div", { dangerouslySetInnerHTML: { __html: message.html } })) : (React.createElement("div", null, messageText)))));
|
|
35
33
|
};
|
|
36
34
|
export var MessageText = React.memo(UnMemoizedMessageTextComponent);
|
|
@@ -67,4 +67,5 @@ export interface TooltipUsernameMapper {
|
|
|
67
67
|
export declare const mapToUserNameOrId: TooltipUsernameMapper;
|
|
68
68
|
export declare const getReadByTooltipText: <StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics>(users: UserResponse<StreamChatGenerics>[], t: TFunction, client: StreamChat<StreamChatGenerics>, tooltipUserNameMapper: TooltipUsernameMapper) => string;
|
|
69
69
|
export declare const isOnlyEmojis: (text?: string) => boolean;
|
|
70
|
+
export declare const isMessageBounced: <StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics>(message: Pick<StreamMessage<StreamChatGenerics>, "type" | "moderation_details">) => boolean;
|
|
70
71
|
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/components/Message/utils.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,KAAK,EAAE,eAAe,EAAE,IAAI,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACnF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAC9C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,KAAK,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACxE,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAEnE;;;GAGG;AACH,eAAO,MAAM,qBAAqB,8CACV,OAAO,2BAiB9B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,WAAW,2LAUvB,CAAC;AAEF,eAAO,MAAM,eAAe;;;;;;;;;;CAU3B,CAAC;AAEF,MAAM,MAAM,mBAAmB,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,IAAI,KAAK,CAChE,QAAQ,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,CAAC,CAC9E,CAAC;AAGF,eAAO,MAAM,qBAAqB,EAAE,cAwDnC,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;AAEF,eAAO,MAAM,iBAAiB,YACnB,mBAAmB,GAAG,OAAO,kGAWnC,YAAY,gCAmDhB,CAAC;AAEF,eAAO,MAAM,6BAA6B,UAKzC,CAAC;AAEF,eAAO,MAAM,qBAAqB,oDAErB,OAAO,GAAG,SAAS,YAsB/B,CAAC;AAmBF,eAAO,MAAM,oBAAoB;;;;;;aAsChC,CAAC;AAEF,eAAO,MAAM,sBAAsB;;;;aA+BlC,CAAC;AAEF,eAAO,MAAM,mBAAmB,wJAI6C,CAAC;AAE9E,eAAO,MAAM,qBAAqB,wJAIyB,CAAC;AAE5D,eAAO,MAAM,SAAS,yMASrB,CAAC;AAEF,eAAO,MAAM,sBAAsB,yMASlC,CAAC;AAEF,MAAM,WAAW,qBAAqB;IACpC,CAAC,kBAAkB,SAAS,yBAAyB,GAAG,yBAAyB,EAC/E,IAAI,EAAE,YAAY,CAAC,kBAAkB,CAAC,GACrC,MAAM,CAAC;CACX;AAED;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,EAAE,qBAAsD,CAAC;AAEvF,eAAO,MAAM,oBAAoB,mIAI5B,SAAS,iEAEW,qBAAqB,WAiD7C,CAAC;AAEF,eAAO,MAAM,YAAY,UAAW,MAAM,YAOzC,CAAC"}
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/components/Message/utils.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,KAAK,EAAE,eAAe,EAAE,IAAI,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACnF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAC9C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,KAAK,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACxE,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAEnE;;;GAGG;AACH,eAAO,MAAM,qBAAqB,8CACV,OAAO,2BAiB9B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,WAAW,2LAUvB,CAAC;AAEF,eAAO,MAAM,eAAe;;;;;;;;;;CAU3B,CAAC;AAEF,MAAM,MAAM,mBAAmB,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,IAAI,KAAK,CAChE,QAAQ,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,CAAC,CAC9E,CAAC;AAGF,eAAO,MAAM,qBAAqB,EAAE,cAwDnC,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;AAEF,eAAO,MAAM,iBAAiB,YACnB,mBAAmB,GAAG,OAAO,kGAWnC,YAAY,gCAmDhB,CAAC;AAEF,eAAO,MAAM,6BAA6B,UAKzC,CAAC;AAEF,eAAO,MAAM,qBAAqB,oDAErB,OAAO,GAAG,SAAS,YAsB/B,CAAC;AAmBF,eAAO,MAAM,oBAAoB;;;;;;aAsChC,CAAC;AAEF,eAAO,MAAM,sBAAsB;;;;aA+BlC,CAAC;AAEF,eAAO,MAAM,mBAAmB,wJAI6C,CAAC;AAE9E,eAAO,MAAM,qBAAqB,wJAIyB,CAAC;AAE5D,eAAO,MAAM,SAAS,yMASrB,CAAC;AAEF,eAAO,MAAM,sBAAsB,yMASlC,CAAC;AAEF,MAAM,WAAW,qBAAqB;IACpC,CAAC,kBAAkB,SAAS,yBAAyB,GAAG,yBAAyB,EAC/E,IAAI,EAAE,YAAY,CAAC,kBAAkB,CAAC,GACrC,MAAM,CAAC;CACX;AAED;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,EAAE,qBAAsD,CAAC;AAEvF,eAAO,MAAM,oBAAoB,mIAI5B,SAAS,iEAEW,qBAAqB,WAiD7C,CAAC;AAEF,eAAO,MAAM,YAAY,UAAW,MAAM,YAOzC,CAAC;AAEF,eAAO,MAAM,gBAAgB,gLAM4C,CAAC"}
|
|
@@ -294,3 +294,8 @@ export var isOnlyEmojis = function (text) {
|
|
|
294
294
|
var noSpace = noEmojis.replace(/[\s\n]/gm, '');
|
|
295
295
|
return !noSpace;
|
|
296
296
|
};
|
|
297
|
+
export var isMessageBounced = function (message) {
|
|
298
|
+
var _a;
|
|
299
|
+
return message.type === 'error' &&
|
|
300
|
+
((_a = message.moderation_details) === null || _a === void 0 ? void 0 : _a.action) === 'MESSAGE_RESPONSE_ACTION_BOUNCE';
|
|
301
|
+
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MessageActionsBox.d.ts","sourceRoot":"","sources":["../../../src/components/MessageActions/MessageActionsBox.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAK9C,OAAO,EACL,mBAAmB,EAKpB,MAAM,eAAe,CAAC;AAEvB,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAInE,KAAK,+BAA+B,GAChC,mBAAmB,GACnB,cAAc,GACd,YAAY,GACZ,kBAAkB,GAClB,YAAY,GACZ,YAAY,GACZ,WAAW,CAAC;AAEhB,MAAM,MAAM,sBAAsB,CAChC,kBAAkB,SAAS,yBAAyB,GAAG,yBAAyB,IAC9E,IAAI,CAAC,mBAAmB,CAAC,kBAAkB,CAAC,EAAE,+BAA+B,CAAC,GAAG;IACnF,WAAW,EAAE,MAAM,OAAO,CAAC;IAC3B,IAAI,EAAE,OAAO,CAAC;IACd,IAAI,EAAE,OAAO,CAAC;CACf,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"MessageActionsBox.d.ts","sourceRoot":"","sources":["../../../src/components/MessageActions/MessageActionsBox.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAK9C,OAAO,EACL,mBAAmB,EAKpB,MAAM,eAAe,CAAC;AAEvB,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAInE,KAAK,+BAA+B,GAChC,mBAAmB,GACnB,cAAc,GACd,YAAY,GACZ,kBAAkB,GAClB,YAAY,GACZ,YAAY,GACZ,WAAW,CAAC;AAEhB,MAAM,MAAM,sBAAsB,CAChC,kBAAkB,SAAS,yBAAyB,GAAG,yBAAyB,IAC9E,IAAI,CAAC,mBAAmB,CAAC,kBAAkB,CAAC,EAAE,+BAA+B,CAAC,GAAG;IACnF,WAAW,EAAE,MAAM,OAAO,CAAC;IAC3B,IAAI,EAAE,OAAO,CAAC;IACd,IAAI,EAAE,OAAO,CAAC;CACf,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;AAoI1B;;GAEG;AACH,eAAO,MAAM,iBAAiB,+PAES,CAAC"}
|
|
@@ -5,7 +5,7 @@ import { MESSAGE_ACTIONS } from '../Message/utils';
|
|
|
5
5
|
import { useChannelActionContext, useComponentContext, useMessageContext, useTranslationContext, } from '../../context';
|
|
6
6
|
import { CustomMessageActionsList as DefaultCustomMessageActionsList } from './CustomMessageActionsList';
|
|
7
7
|
var UnMemoizedMessageActionsBox = React.forwardRef(function (props, ref) {
|
|
8
|
-
var getMessageActions = props.getMessageActions, handleDelete = props.handleDelete, handleEdit = props.handleEdit, handleFlag = props.handleFlag, handleMarkUnread = props.handleMarkUnread, handleMute = props.handleMute, handlePin = props.handlePin, isUserMuted = props.isUserMuted, _a = props.open, open = _a === void 0 ? false : _a, restDivProps = __rest(props, ["getMessageActions", "handleDelete", "handleEdit", "handleFlag", "handleMarkUnread", "handleMute", "handlePin", "isUserMuted", "open"]);
|
|
8
|
+
var getMessageActions = props.getMessageActions, handleDelete = props.handleDelete, handleEdit = props.handleEdit, handleFlag = props.handleFlag, handleMarkUnread = props.handleMarkUnread, handleMute = props.handleMute, handlePin = props.handlePin, isUserMuted = props.isUserMuted, mine = props.mine, _a = props.open, open = _a === void 0 ? false : _a, restDivProps = __rest(props, ["getMessageActions", "handleDelete", "handleEdit", "handleFlag", "handleMarkUnread", "handleMute", "handlePin", "isUserMuted", "mine", "open"]);
|
|
9
9
|
var _b = useComponentContext('MessageActionsBox').CustomMessageActionsList, CustomMessageActionsList = _b === void 0 ? DefaultCustomMessageActionsList : _b;
|
|
10
10
|
var setQuotedMessage = useChannelActionContext('MessageActionsBox').setQuotedMessage;
|
|
11
11
|
var _c = useMessageContext('MessageActionsBox'), customMessageActions = _c.customMessageActions, message = _c.message, threadList = _c.threadList;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { ComponentType, PropsWithChildren } from 'react';
|
|
2
|
+
import { ModalProps } from '../Modal';
|
|
3
|
+
import { MessageBouncePromptProps } from './MessageBouncePrompt';
|
|
4
|
+
export type MessageBounceModalProps = PropsWithChildren<ModalProps & {
|
|
5
|
+
MessageBouncePrompt: ComponentType<MessageBouncePromptProps>;
|
|
6
|
+
}>;
|
|
7
|
+
export declare function MessageBounceModal({ MessageBouncePrompt, ...modalProps }: MessageBounceModalProps): JSX.Element;
|
|
8
|
+
//# sourceMappingURL=MessageBounceModal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MessageBounceModal.d.ts","sourceRoot":"","sources":["../../../src/components/MessageBounce/MessageBounceModal.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAChE,OAAO,EAAS,UAAU,EAAE,MAAM,UAAU,CAAC;AAE7C,OAAO,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AAEjE,MAAM,MAAM,uBAAuB,GAAG,iBAAiB,CACrD,UAAU,GAAG;IACX,mBAAmB,EAAE,aAAa,CAAC,wBAAwB,CAAC,CAAC;CAC9D,CACF,CAAC;AAEF,wBAAgB,kBAAkB,CAAC,EACjC,mBAAmB,EACnB,GAAG,UAAU,EACd,EAAE,uBAAuB,eAQzB"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { __assign, __rest } from "tslib";
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import { Modal } from '../Modal';
|
|
4
|
+
import { MessageBounceProvider } from '../../context';
|
|
5
|
+
export function MessageBounceModal(_a) {
|
|
6
|
+
var MessageBouncePrompt = _a.MessageBouncePrompt, modalProps = __rest(_a, ["MessageBouncePrompt"]);
|
|
7
|
+
return (React.createElement(Modal, __assign({}, modalProps),
|
|
8
|
+
React.createElement(MessageBounceProvider, null,
|
|
9
|
+
React.createElement(MessageBouncePrompt, { onClose: modalProps.onClose }))));
|
|
10
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { PropsWithChildren } from 'react';
|
|
2
|
+
import type { DefaultStreamChatGenerics } from '../../types/types';
|
|
3
|
+
import type { ModalProps } from '../Modal';
|
|
4
|
+
export type MessageBouncePromptProps = PropsWithChildren<Pick<ModalProps, 'onClose'>>;
|
|
5
|
+
export declare function MessageBouncePrompt<StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics>({ children, onClose }: MessageBouncePromptProps): JSX.Element;
|
|
6
|
+
//# sourceMappingURL=MessageBouncePrompt.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MessageBouncePrompt.d.ts","sourceRoot":"","sources":["../../../src/components/MessageBounce/MessageBouncePrompt.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAqB,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAClE,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AACnE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAE3C,MAAM,MAAM,wBAAwB,GAAG,iBAAiB,CAAC,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC;AAEtF,wBAAgB,mBAAmB,CACjC,kBAAkB,SAAS,yBAAyB,GAAG,yBAAyB,EAChF,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,wBAAwB,eA8ChD"}
|