stream-chat-react-native-core 5.24.0-beta.3 → 5.24.0-beta.5
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/lib/commonjs/components/Channel/Channel.js +30 -22
- package/lib/commonjs/components/Channel/Channel.js.map +1 -1
- package/lib/commonjs/components/Channel/hooks/useCreateMessagesContext.js +2 -0
- package/lib/commonjs/components/Channel/hooks/useCreateMessagesContext.js.map +1 -1
- package/lib/commonjs/components/Message/Message.js +28 -6
- package/lib/commonjs/components/Message/Message.js.map +1 -1
- package/lib/commonjs/components/Message/MessageSimple/MessageBounce.js +84 -0
- package/lib/commonjs/components/Message/MessageSimple/MessageBounce.js.map +1 -0
- package/lib/commonjs/components/Message/hooks/useMessageActionHandlers.js.map +1 -1
- package/lib/commonjs/components/Message/hooks/useMessageActions.js.map +1 -1
- package/lib/commonjs/components/MessageInput/SendButton.js +2 -2
- package/lib/commonjs/components/MessageInput/SendButton.js.map +1 -1
- package/lib/commonjs/components/index.js +11 -0
- package/lib/commonjs/components/index.js.map +1 -1
- package/lib/commonjs/contexts/messageInputContext/MessageInputContext.js +18 -8
- package/lib/commonjs/contexts/messageInputContext/MessageInputContext.js.map +1 -1
- package/lib/commonjs/contexts/messageInputContext/hooks/useMessageDetailsForState.js +4 -8
- package/lib/commonjs/contexts/messageInputContext/hooks/useMessageDetailsForState.js.map +1 -1
- package/lib/commonjs/contexts/messagesContext/MessagesContext.js +2 -2
- package/lib/commonjs/contexts/messagesContext/MessagesContext.js.map +1 -1
- package/lib/commonjs/i18n/en.json +3 -0
- package/lib/commonjs/i18n/es.json +4 -1
- package/lib/commonjs/i18n/fr.json +14 -11
- package/lib/commonjs/i18n/he.json +4 -1
- package/lib/commonjs/i18n/hi.json +14 -11
- package/lib/commonjs/i18n/it.json +14 -11
- package/lib/commonjs/i18n/ja.json +4 -1
- package/lib/commonjs/i18n/ko.json +4 -1
- package/lib/commonjs/i18n/nl.json +14 -11
- package/lib/commonjs/i18n/ru.json +14 -11
- package/lib/commonjs/i18n/tr.json +14 -11
- package/lib/commonjs/utils/removeReservedFields.js +1 -1
- package/lib/commonjs/utils/removeReservedFields.js.map +1 -1
- package/lib/commonjs/utils/utils.js +5 -1
- package/lib/commonjs/utils/utils.js.map +1 -1
- package/lib/commonjs/version.json +1 -1
- package/lib/module/components/Channel/Channel.js +30 -22
- package/lib/module/components/Channel/Channel.js.map +1 -1
- package/lib/module/components/Channel/hooks/useCreateMessagesContext.js +2 -0
- package/lib/module/components/Channel/hooks/useCreateMessagesContext.js.map +1 -1
- package/lib/module/components/Message/Message.js +28 -6
- package/lib/module/components/Message/Message.js.map +1 -1
- package/lib/module/components/Message/MessageSimple/MessageBounce.js +84 -0
- package/lib/module/components/Message/MessageSimple/MessageBounce.js.map +1 -0
- package/lib/module/components/Message/hooks/useMessageActionHandlers.js.map +1 -1
- package/lib/module/components/Message/hooks/useMessageActions.js.map +1 -1
- package/lib/module/components/MessageInput/SendButton.js +2 -2
- package/lib/module/components/MessageInput/SendButton.js.map +1 -1
- package/lib/module/components/index.js +11 -0
- package/lib/module/components/index.js.map +1 -1
- package/lib/module/contexts/messageInputContext/MessageInputContext.js +18 -8
- package/lib/module/contexts/messageInputContext/MessageInputContext.js.map +1 -1
- package/lib/module/contexts/messageInputContext/hooks/useMessageDetailsForState.js +4 -8
- package/lib/module/contexts/messageInputContext/hooks/useMessageDetailsForState.js.map +1 -1
- package/lib/module/contexts/messagesContext/MessagesContext.js +2 -2
- package/lib/module/contexts/messagesContext/MessagesContext.js.map +1 -1
- package/lib/module/i18n/en.json +3 -0
- package/lib/module/i18n/es.json +4 -1
- package/lib/module/i18n/fr.json +14 -11
- package/lib/module/i18n/he.json +4 -1
- package/lib/module/i18n/hi.json +14 -11
- package/lib/module/i18n/it.json +14 -11
- package/lib/module/i18n/ja.json +4 -1
- package/lib/module/i18n/ko.json +4 -1
- package/lib/module/i18n/nl.json +14 -11
- package/lib/module/i18n/ru.json +14 -11
- package/lib/module/i18n/tr.json +14 -11
- package/lib/module/utils/removeReservedFields.js +1 -1
- package/lib/module/utils/removeReservedFields.js.map +1 -1
- package/lib/module/utils/utils.js +5 -1
- package/lib/module/utils/utils.js.map +1 -1
- package/lib/module/version.json +1 -1
- package/lib/typescript/components/Channel/Channel.d.ts +1 -1
- package/lib/typescript/components/Channel/hooks/useCreateMessagesContext.d.ts +1 -1
- package/lib/typescript/components/Message/Message.d.ts +1 -1
- package/lib/typescript/components/Message/MessageSimple/MessageBounce.d.ts +12 -0
- package/lib/typescript/components/MessageList/utils/getReadStates.d.ts +1 -0
- package/lib/typescript/components/index.d.ts +1 -0
- package/lib/typescript/contexts/messageInputContext/MessageInputContext.d.ts +6 -2
- package/lib/typescript/contexts/messageInputContext/hooks/useMessageDetailsForState.d.ts +1 -2
- package/lib/typescript/contexts/messagesContext/MessagesContext.d.ts +7 -2
- package/lib/typescript/i18n/en.json +3 -0
- package/lib/typescript/i18n/es.json +4 -1
- package/lib/typescript/i18n/fr.json +14 -11
- package/lib/typescript/i18n/he.json +4 -1
- package/lib/typescript/i18n/hi.json +14 -11
- package/lib/typescript/i18n/it.json +14 -11
- package/lib/typescript/i18n/ja.json +4 -1
- package/lib/typescript/i18n/ko.json +4 -1
- package/lib/typescript/i18n/nl.json +14 -11
- package/lib/typescript/i18n/ru.json +14 -11
- package/lib/typescript/i18n/tr.json +14 -11
- package/lib/typescript/utils/Streami18n.d.ts +3 -0
- package/lib/typescript/utils/removeReservedFields.d.ts +2 -1
- package/lib/typescript/utils/utils.d.ts +11 -0
- package/package.json +2 -2
- package/src/components/Channel/Channel.tsx +26 -7
- package/src/components/Channel/hooks/useCreateMessagesContext.ts +2 -0
- package/src/components/Message/Message.tsx +26 -2
- package/src/components/Message/MessageSimple/MessageBounce.tsx +119 -0
- package/src/components/Message/hooks/useMessageActionHandlers.ts +1 -2
- package/src/components/Message/hooks/useMessageActions.tsx +1 -1
- package/src/components/MessageInput/SendButton.tsx +2 -2
- package/src/components/index.ts +1 -0
- package/src/contexts/messageInputContext/MessageInputContext.tsx +24 -6
- package/src/contexts/messageInputContext/__tests__/sendMessage.test.tsx +8 -8
- package/src/contexts/messageInputContext/__tests__/updateMessage.test.tsx +1 -1
- package/src/contexts/messageInputContext/__tests__/useMessageDetailsForState.test.tsx +6 -1
- package/src/contexts/messageInputContext/hooks/useMessageDetailsForState.ts +3 -9
- package/src/contexts/messagesContext/MessagesContext.tsx +7 -2
- package/src/i18n/en.json +3 -0
- package/src/i18n/es.json +4 -1
- package/src/i18n/fr.json +14 -11
- package/src/i18n/he.json +4 -1
- package/src/i18n/hi.json +14 -11
- package/src/i18n/it.json +14 -11
- package/src/i18n/ja.json +4 -1
- package/src/i18n/ko.json +4 -1
- package/src/i18n/nl.json +14 -11
- package/src/i18n/ru.json +14 -11
- package/src/i18n/tr.json +14 -11
- package/src/utils/removeReservedFields.ts +5 -2
- package/src/utils/utils.ts +16 -0
- package/src/version.json +1 -1
package/lib/module/i18n/ru.json
CHANGED
|
@@ -5,33 +5,35 @@
|
|
|
5
5
|
"Allow camera access in device settings": "Разрешите доступ к камере в настройках устройства.",
|
|
6
6
|
"Also send to channel": "",
|
|
7
7
|
"Are you sure you want to permanently delete this message?": "",
|
|
8
|
+
"Are you sure?": "",
|
|
8
9
|
"Block User": "",
|
|
9
10
|
"Cancel": "",
|
|
10
11
|
"Cannot Flag Message": "",
|
|
12
|
+
"Consider how your comment might make others feel and be sure to follow our Community Guidelines": "",
|
|
11
13
|
"Copy Message": "",
|
|
12
14
|
"Delete": "",
|
|
13
15
|
"Delete Message": "",
|
|
14
16
|
"Device camera is used to take photos or videos.": "Камера устройства используется для съемки фотографий или видео.",
|
|
15
17
|
"Do you want to send a copy of this message to a moderator for further investigation?": "",
|
|
16
18
|
"Edit Message": "",
|
|
17
|
-
"Editing Message": "",
|
|
18
|
-
"Emoji matching": "",
|
|
19
|
+
"Editing Message": "Редактирование сообщения",
|
|
20
|
+
"Emoji matching": "Соответствие эмодзи",
|
|
19
21
|
"Empty message...": "",
|
|
20
22
|
"Error loading": "",
|
|
21
23
|
"Error loading channel list...": "",
|
|
22
24
|
"Error loading messages for this channel...": "",
|
|
23
25
|
"Error while loading, please reload/refresh": "",
|
|
24
|
-
"File type not supported": "
|
|
26
|
+
"File type not supported": "",
|
|
25
27
|
"Flag": "",
|
|
26
28
|
"Flag Message": "",
|
|
27
29
|
"Flag action failed either due to a network issue or the message is already flagged": "",
|
|
28
30
|
"How about sending your first message to a friend?": "",
|
|
29
|
-
"Instant Commands": "",
|
|
31
|
+
"Instant Commands": "Мгновенные Команды",
|
|
30
32
|
"Let's start chatting!": "",
|
|
31
|
-
"Links are disabled": "
|
|
32
|
-
"Loading channels...": "",
|
|
33
|
-
"Loading messages...": "",
|
|
34
|
-
"Loading...": "",
|
|
33
|
+
"Links are disabled": "",
|
|
34
|
+
"Loading channels...": "Загружаю каналы...",
|
|
35
|
+
"Loading messages...": "Загружаю сообщения...",
|
|
36
|
+
"Loading...": "Загружаю...",
|
|
35
37
|
"Maximum file size upload limit reached. Please upload a file below {{MAX_FILE_SIZE_TO_UPLOAD_IN_MB}} MB.": "",
|
|
36
38
|
"Message Reactions": "",
|
|
37
39
|
"Message deleted": "",
|
|
@@ -40,12 +42,12 @@
|
|
|
40
42
|
"Not supported": "не поддерживается",
|
|
41
43
|
"Nothing yet...": "",
|
|
42
44
|
"Ok": "",
|
|
43
|
-
"Only visible to you": "
|
|
45
|
+
"Only visible to you": "",
|
|
44
46
|
"Open Settings": "Открыть настройки",
|
|
45
47
|
"Photo": "",
|
|
46
48
|
"Photos and Videos": "Фото и видео",
|
|
47
49
|
"Pin to Conversation": "",
|
|
48
|
-
"Pinned by": "
|
|
50
|
+
"Pinned by": "",
|
|
49
51
|
"Please enable access to your photos and videos so you can share them.": "Разрешите доступ к своим фотографиям и видео, чтобы вы могли ими поделиться.",
|
|
50
52
|
"Please select a channel first": "Пожалуйста, сначала выберите канал",
|
|
51
53
|
"Reconnecting...": "",
|
|
@@ -54,8 +56,9 @@
|
|
|
54
56
|
"Resend": "",
|
|
55
57
|
"Search GIFs": "Поиск GIF",
|
|
56
58
|
"Select More Photos": "Выбрать больше фотографий",
|
|
59
|
+
"Send Anyway": "",
|
|
57
60
|
"Send a message": "Отправить сообщение",
|
|
58
|
-
"Sending links is not allowed in this conversation": "
|
|
61
|
+
"Sending links is not allowed in this conversation": "",
|
|
59
62
|
"Slow mode ON": "Медленный режим включен",
|
|
60
63
|
"The message has been reported to a moderator.": "",
|
|
61
64
|
"Thread Reply": "",
|
package/lib/module/i18n/tr.json
CHANGED
|
@@ -5,33 +5,35 @@
|
|
|
5
5
|
"Allow camera access in device settings": "Cihaz ayarlarında kamera erişimine izin ver",
|
|
6
6
|
"Also send to channel": "",
|
|
7
7
|
"Are you sure you want to permanently delete this message?": "",
|
|
8
|
+
"Are you sure?": "",
|
|
8
9
|
"Block User": "",
|
|
9
10
|
"Cancel": "",
|
|
10
11
|
"Cannot Flag Message": "",
|
|
12
|
+
"Consider how your comment might make others feel and be sure to follow our Community Guidelines": "",
|
|
11
13
|
"Copy Message": "",
|
|
12
14
|
"Delete": "",
|
|
13
15
|
"Delete Message": "",
|
|
14
16
|
"Device camera is used to take photos or videos.": "Cihaz kamerası fotoğraf veya video çekmek için kullanılır.",
|
|
15
17
|
"Do you want to send a copy of this message to a moderator for further investigation?": "",
|
|
16
18
|
"Edit Message": "",
|
|
17
|
-
"Editing Message": "",
|
|
18
|
-
"Emoji matching": "",
|
|
19
|
+
"Editing Message": "Mesaj Düzenleniyor",
|
|
20
|
+
"Emoji matching": "Emoji eşleştirme",
|
|
19
21
|
"Empty message...": "",
|
|
20
22
|
"Error loading": "",
|
|
21
23
|
"Error loading channel list...": "",
|
|
22
24
|
"Error loading messages for this channel...": "",
|
|
23
25
|
"Error while loading, please reload/refresh": "",
|
|
24
|
-
"File type not supported": "
|
|
26
|
+
"File type not supported": "",
|
|
25
27
|
"Flag": "",
|
|
26
28
|
"Flag Message": "",
|
|
27
29
|
"Flag action failed either due to a network issue or the message is already flagged": "",
|
|
28
30
|
"How about sending your first message to a friend?": "",
|
|
29
|
-
"Instant Commands": "",
|
|
31
|
+
"Instant Commands": "Anlık Komutlar",
|
|
30
32
|
"Let's start chatting!": "",
|
|
31
|
-
"Links are disabled": "
|
|
32
|
-
"Loading channels...": "",
|
|
33
|
-
"Loading messages...": "",
|
|
34
|
-
"Loading...": "",
|
|
33
|
+
"Links are disabled": "",
|
|
34
|
+
"Loading channels...": "Kanallar yükleniyor...",
|
|
35
|
+
"Loading messages...": "Mesajlar yükleniyor...",
|
|
36
|
+
"Loading...": "Yükleniyor...",
|
|
35
37
|
"Maximum file size upload limit reached. Please upload a file below {{MAX_FILE_SIZE_TO_UPLOAD_IN_MB}} MB.": "",
|
|
36
38
|
"Message Reactions": "",
|
|
37
39
|
"Message deleted": "",
|
|
@@ -40,12 +42,12 @@
|
|
|
40
42
|
"Not supported": "Desteklenmiyor",
|
|
41
43
|
"Nothing yet...": "",
|
|
42
44
|
"Ok": "",
|
|
43
|
-
"Only visible to you": "
|
|
45
|
+
"Only visible to you": "",
|
|
44
46
|
"Open Settings": "Ayarları aç",
|
|
45
47
|
"Photo": "",
|
|
46
48
|
"Photos and Videos": "Fotoğraflar ve Videolar",
|
|
47
49
|
"Pin to Conversation": "",
|
|
48
|
-
"Pinned by": "
|
|
50
|
+
"Pinned by": "",
|
|
49
51
|
"Please enable access to your photos and videos so you can share them.": "Paylaşım yapabilmek için lutfen fotoğraflarınıza ve videolarınıza erişimi etkinleştirin.",
|
|
50
52
|
"Please select a channel first": "Lütfen önce bir kanal seçiniz",
|
|
51
53
|
"Reconnecting...": "",
|
|
@@ -54,8 +56,9 @@
|
|
|
54
56
|
"Resend": "",
|
|
55
57
|
"Search GIFs": "GIF Ara",
|
|
56
58
|
"Select More Photos": "Daha Fazla Fotoğraf Seçin",
|
|
59
|
+
"Send Anyway": "",
|
|
57
60
|
"Send a message": "Mesaj gönder",
|
|
58
|
-
"Sending links is not allowed in this conversation": "
|
|
61
|
+
"Sending links is not allowed in this conversation": "",
|
|
59
62
|
"Slow mode ON": "Yavaş Mod Açık",
|
|
60
63
|
"The message has been reported to a moderator.": "",
|
|
61
64
|
"Thread Reply": "",
|
|
@@ -6,7 +6,7 @@ exports.removeReservedFields = void 0;
|
|
|
6
6
|
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
7
7
|
var removeReservedFields = function removeReservedFields(message) {
|
|
8
8
|
var retryMessage = (0, _extends2["default"])({}, message);
|
|
9
|
-
var reserved = ['cid', 'config', 'created_at', 'created_by', 'deleted_at', 'i18n', 'latest_reactions', 'own_reactions', 'reaction_counts', 'last_message_at', 'member_count', 'type', 'updated_at'];
|
|
9
|
+
var reserved = ['cid', 'config', 'created_at', 'created_by', 'deleted_at', 'i18n', 'latest_reactions', 'own_reactions', 'reaction_counts', 'last_message_at', 'member_count', 'type', 'updated_at', 'reply_count'];
|
|
10
10
|
reserved.forEach(function (key) {
|
|
11
11
|
delete retryMessage[key];
|
|
12
12
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["removeReservedFields","message","retryMessage","_extends2","reserved","forEach","key","exports"],"sources":["removeReservedFields.ts"],"sourcesContent":["import type { MessageType } from '../components/MessageList/hooks/useMessageList';\nimport type { DefaultStreamChatGenerics } from '../types/types';\n\nexport const removeReservedFields = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n message: MessageType<StreamChatGenerics>,\n) => {\n const retryMessage = { ...message };\n const reserved = [\n 'cid',\n 'config',\n 'created_at',\n 'created_by',\n 'deleted_at',\n 'i18n',\n 'latest_reactions',\n 'own_reactions',\n 'reaction_counts',\n 'last_message_at',\n 'member_count',\n 'type',\n 'updated_at',\n ];\n reserved.forEach((key) => {\n delete retryMessage[key];\n });\n\n return retryMessage;\n};\n"],"mappings":";;;;;;
|
|
1
|
+
{"version":3,"names":["removeReservedFields","message","retryMessage","_extends2","reserved","forEach","key","exports"],"sources":["removeReservedFields.ts"],"sourcesContent":["import type { MessageResponse } from 'stream-chat';\n\nimport type { MessageType } from '../components/MessageList/hooks/useMessageList';\nimport type { DefaultStreamChatGenerics } from '../types/types';\n\nexport const removeReservedFields = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n message: MessageType<StreamChatGenerics> | MessageResponse<StreamChatGenerics>,\n): MessageType<StreamChatGenerics> | MessageResponse<StreamChatGenerics> => {\n const retryMessage = { ...message };\n const reserved = [\n 'cid',\n 'config',\n 'created_at',\n 'created_by',\n 'deleted_at',\n 'i18n',\n 'latest_reactions',\n 'own_reactions',\n 'reaction_counts',\n 'last_message_at',\n 'member_count',\n 'type',\n 'updated_at',\n 'reply_count',\n ];\n reserved.forEach((key) => {\n delete retryMessage[key];\n });\n\n return retryMessage;\n};\n"],"mappings":";;;;;;AAKO,IAAMA,oBAAoB,GAAG,SAAvBA,oBAAoBA,CAG/BC,OAA8E,EACJ;EAC1E,IAAMC,YAAY,OAAAC,SAAA,iBAAQF,OAAO,CAAE;EACnC,IAAMG,QAAQ,GAAG,CACf,KAAK,EACL,QAAQ,EACR,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,MAAM,EACN,kBAAkB,EAClB,eAAe,EACf,iBAAiB,EACjB,iBAAiB,EACjB,cAAc,EACd,MAAM,EACN,YAAY,EACZ,aAAa,CACd;EACDA,QAAQ,CAACC,OAAO,CAAC,UAACC,GAAG,EAAK;IACxB,OAAOJ,YAAY,CAACI,GAAG,CAAC;EAC1B,CAAC,CAAC;EAEF,OAAOJ,YAAY;AACrB,CAAC;AAACK,OAAA,CAAAP,oBAAA,GAAAA,oBAAA"}
|
|
@@ -2,7 +2,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", {
|
|
3
3
|
value: true
|
|
4
4
|
});
|
|
5
|
-
exports.reduceMessagesToString = exports.queryUsersDebounced = exports.queryMembersDebounced = exports.makeImageCompatibleUrl = exports.isMentionTrigger = exports.isLocalUrl = exports.isEmojiTrigger = exports.isCommandTrigger = exports.isBlockedMessage = exports.hasOnlyEmojis = exports.getUrlWithoutParams = exports.getIndicatorTypeForFileState = exports.generateRandomId = exports.ProgressIndicatorTypes = exports.MessageStatusTypes = exports.FileState = exports.ACITriggerSettings = void 0;
|
|
5
|
+
exports.reduceMessagesToString = exports.queryUsersDebounced = exports.queryMembersDebounced = exports.makeImageCompatibleUrl = exports.isMentionTrigger = exports.isLocalUrl = exports.isEmojiTrigger = exports.isCommandTrigger = exports.isBouncedMessage = exports.isBlockedMessage = exports.hasOnlyEmojis = exports.getUrlWithoutParams = exports.getIndicatorTypeForFileState = exports.generateRandomId = exports.ProgressIndicatorTypes = exports.MessageStatusTypes = exports.FileState = exports.ACITriggerSettings = void 0;
|
|
6
6
|
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
7
7
|
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
8
8
|
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
@@ -43,6 +43,10 @@ var isBlockedMessage = function isBlockedMessage(message) {
|
|
|
43
43
|
return message.type === 'error' && message.text && pattern.test(message.text);
|
|
44
44
|
};
|
|
45
45
|
exports.isBlockedMessage = isBlockedMessage;
|
|
46
|
+
var isBouncedMessage = function isBouncedMessage(message) {
|
|
47
|
+
return message.type === 'error' && message.moderation_details !== undefined;
|
|
48
|
+
};
|
|
49
|
+
exports.isBouncedMessage = isBouncedMessage;
|
|
46
50
|
var defaultAutoCompleteSuggestionsLimit = 10;
|
|
47
51
|
var defaultMentionAllAppUsersQuery = {
|
|
48
52
|
filters: {},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_emojiRegex","_interopRequireDefault","require","_debounce","_compiled","FileState","Object","freeze","FINISHED","NOT_SUPPORTED","UPLOAD_FAILED","UPLOADED","UPLOADING","exports","ProgressIndicatorTypes","IN_PROGRESS","INACTIVE","RETRY","MessageStatusTypes","FAILED","RECEIVED","SENDING","getIndicatorTypeForFileState","fileState","enableOfflineSupport","_indicatorMap","indicatorMap","_defineProperty2","isBlockedMessage","message","pattern","type","text","test","defaultAutoCompleteSuggestionsLimit","defaultMentionAllAppUsersQuery","filters","options","sort","isUserResponse","user","undefined","getCommands","channel","_channel$getConfig","getConfig","commands","getMembers","members","state","values","length","filter","member","map","getWatchers","watchers","_toConsumableArray2","getMembersAndWatchers","users","concat","reduce","acc","cur","id","queryMembers","_ref","_asyncToGenerator2","_regenerator","mark","_callee","query","onReady","_options$limit","limit","response","_users","_args","arguments","wrap","_callee$","_context","prev","next","name","$autocomplete","sent","forEach","push","stop","_x","_x2","_x3","apply","queryMembersDebounced","debounce","leading","trailing","queryUsers","_ref2","_callee2","client","_options$limit2","_options$mentionAllAp","mentionAllAppUsersQuery","_users2","_args2","_callee2$","_context2","_extends2","$ne","userID","$or","_x4","_x5","_x6","queryUsersDebounced","isCommandTrigger","trigger","isEmojiTrigger","isMentionTrigger","ACITriggerSettings","_ref3","onMentionSelectItem","dataProvider","indexOf","_options$limit3","selectedCommands","command","_command$name","a","b","_a$name","_b$name","nameA","toLowerCase","nameB","result","slice","output","entity","caretPosition","key","_","compiledEmojis","emojiArray","names","some","includes","emoji","emojiLib","skin_variations","tone","index","unicode","callback","item","mentionAllAppUsersEnabled","data","matchingUsers","_user$name","makeImageCompatibleUrl","url","trim","getUrlWithoutParams","indexOfQuestion","substring","isLocalUrl","generateRandomId","Number","Math","random","toString","replace","hasOnlyEmojis","emojiOnlyString","matchAll","EmojiRegex","join","originalTextWithNoSpaces","replaceAll","e","stringifyMessage","_ref4","deleted_at","latest_reactions","reply_count","status","updated_at","_ref5","toISOString","reduceMessagesToString","messages"],"sources":["utils.ts"],"sourcesContent":["import type React from 'react';\n\nimport EmojiRegex from 'emoji-regex';\nimport type { DebouncedFunc } from 'lodash';\nimport debounce from 'lodash/debounce';\nimport type {\n Channel,\n ChannelMemberAPIResponse,\n ChannelMemberResponse,\n CommandResponse,\n FormatMessageResponse,\n StreamChat,\n UserResponse,\n} from 'stream-chat';\n\nimport type { MessageType } from '../components/MessageList/hooks/useMessageList';\nimport type { MentionAllAppUsersQuery } from '../contexts/messageInputContext/MessageInputContext';\nimport type {\n SuggestionCommand,\n SuggestionComponentType,\n SuggestionUser,\n} from '../contexts/suggestionsContext/SuggestionsContext';\nimport { compiledEmojis, Emoji } from '../emoji-data/compiled';\nimport type { IconProps } from '../icons/utils/base';\nimport type { TableRowJoinedUser } from '../store/types';\nimport type { DefaultStreamChatGenerics, ValueOf } from '../types/types';\n\nexport type ReactionData = {\n Icon: React.FC<IconProps>;\n type: string;\n};\n\nexport const FileState = Object.freeze({\n // finished and uploaded state are the same thing. First is set on frontend,\n // while later is set on backend side\n // TODO: Unify both of them\n FINISHED: 'finished',\n NOT_SUPPORTED: 'not_supported',\n UPLOAD_FAILED: 'upload_failed',\n UPLOADED: 'uploaded',\n UPLOADING: 'uploading',\n});\n\nexport const ProgressIndicatorTypes: {\n IN_PROGRESS: 'in_progress';\n INACTIVE: 'inactive';\n NOT_SUPPORTED: 'not_supported';\n RETRY: 'retry';\n} = Object.freeze({\n IN_PROGRESS: 'in_progress',\n INACTIVE: 'inactive',\n NOT_SUPPORTED: 'not_supported',\n RETRY: 'retry',\n});\n\nexport const MessageStatusTypes = {\n FAILED: 'failed',\n RECEIVED: 'received',\n SENDING: 'sending',\n};\n\nexport type FileStateValue = typeof FileState[keyof typeof FileState];\n\ntype Progress = ValueOf<typeof ProgressIndicatorTypes>;\ntype IndicatorStatesMap = Record<ValueOf<typeof FileState>, Progress | null>;\n\nexport const getIndicatorTypeForFileState = (\n fileState: FileStateValue,\n enableOfflineSupport: boolean,\n): Progress | null => {\n const indicatorMap: IndicatorStatesMap = {\n [FileState.UPLOADING]: enableOfflineSupport\n ? ProgressIndicatorTypes.INACTIVE\n : ProgressIndicatorTypes.IN_PROGRESS,\n // If offline support is disabled, then there is no need\n [FileState.UPLOAD_FAILED]: enableOfflineSupport\n ? ProgressIndicatorTypes.INACTIVE\n : ProgressIndicatorTypes.RETRY,\n [FileState.NOT_SUPPORTED]: ProgressIndicatorTypes.NOT_SUPPORTED,\n [FileState.UPLOADED]: ProgressIndicatorTypes.INACTIVE,\n [FileState.FINISHED]: ProgressIndicatorTypes.INACTIVE,\n };\n\n return indicatorMap[fileState];\n};\n\nexport const isBlockedMessage = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n message: MessageType<StreamChatGenerics> | TableRowJoinedUser<'messages'>,\n) => {\n // The only indicator for the blocked message is its message type is error and that the message text contains \"Message was blocked by moderation policies\".\n const pattern = /\\bMessage was blocked by moderation policies\\b/;\n return message.type === 'error' && message.text && pattern.test(message.text);\n};\n\nconst defaultAutoCompleteSuggestionsLimit = 10;\nconst defaultMentionAllAppUsersQuery = {\n filters: {},\n options: {},\n sort: {},\n};\n\nconst isUserResponse = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n user: SuggestionUser<StreamChatGenerics> | undefined,\n): user is SuggestionUser<StreamChatGenerics> =>\n (user as SuggestionUser<StreamChatGenerics>) !== undefined;\n\nconst getCommands = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n channel: Channel<StreamChatGenerics>,\n) => channel.getConfig()?.commands || [];\n\nconst getMembers = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n channel: Channel<StreamChatGenerics>,\n) => {\n const members = channel.state.members;\n\n return Object.values(members).length\n ? (\n Object.values(members).filter((member) => member.user) as Array<\n ChannelMemberResponse<StreamChatGenerics> & { user: UserResponse<StreamChatGenerics> }\n >\n ).map((member) => member.user)\n : [];\n};\n\nconst getWatchers = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n channel: Channel<StreamChatGenerics>,\n) => {\n const watchers = channel.state.watchers;\n return Object.values(watchers).length ? [...Object.values(watchers)] : [];\n};\n\nconst getMembersAndWatchers = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n channel: Channel<StreamChatGenerics>,\n) => {\n const users = [...getMembers(channel), ...getWatchers(channel)];\n\n return Object.values(\n users.reduce((acc, cur) => {\n if (!acc[cur.id]) {\n acc[cur.id] = cur;\n }\n\n return acc;\n }, {} as { [key: string]: SuggestionUser<StreamChatGenerics> }),\n );\n};\n\nconst queryMembers = async <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n channel: Channel<StreamChatGenerics>,\n query: SuggestionUser<StreamChatGenerics>['name'],\n onReady?: (users: SuggestionUser<StreamChatGenerics>[]) => void,\n options: {\n limit?: number;\n } = {},\n): Promise<void> => {\n const { limit = defaultAutoCompleteSuggestionsLimit } = options;\n\n if (typeof query === 'string') {\n const response = (await (channel as unknown as Channel).queryMembers(\n {\n name: { $autocomplete: query },\n },\n {},\n { limit },\n )) as ChannelMemberAPIResponse<StreamChatGenerics>;\n\n const users: SuggestionUser<StreamChatGenerics>[] = [];\n response.members.forEach((member) => isUserResponse(member.user) && users.push(member.user));\n if (onReady && users) {\n onReady(users);\n }\n }\n};\n\nexport const queryMembersDebounced = debounce(queryMembers, 200, {\n leading: false,\n trailing: true,\n});\n\nconst queryUsers = async <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n client: StreamChat<StreamChatGenerics>,\n query: SuggestionUser<StreamChatGenerics>['name'],\n onReady?: (users: SuggestionUser<StreamChatGenerics>[]) => void,\n options: {\n limit?: number;\n mentionAllAppUsersQuery?: MentionAllAppUsersQuery<StreamChatGenerics>;\n } = {},\n): Promise<void> => {\n if (typeof query === 'string') {\n const {\n limit = defaultAutoCompleteSuggestionsLimit,\n mentionAllAppUsersQuery = defaultMentionAllAppUsersQuery,\n } = options;\n const filters = {\n id: { $ne: client.userID },\n ...mentionAllAppUsersQuery?.filters,\n };\n\n if (query) {\n // @ts-ignore\n filters.$or = [{ id: { $autocomplete: query } }, { name: { $autocomplete: query } }];\n }\n\n const response = await client.queryUsers(\n // @ts-ignore\n filters,\n { id: 1, ...mentionAllAppUsersQuery?.sort },\n { limit, ...mentionAllAppUsersQuery?.options },\n );\n const users: SuggestionUser<StreamChatGenerics>[] = [];\n response.users.forEach((user) => isUserResponse(user) && users.push(user));\n if (onReady && users) {\n onReady(users);\n }\n }\n};\n\nexport const queryUsersDebounced = debounce(queryUsers, 200, {\n leading: false,\n trailing: true,\n});\n\nexport const isCommandTrigger = (trigger: Trigger): trigger is '/' => trigger === '/';\n\nexport const isEmojiTrigger = (trigger: Trigger): trigger is ':' => trigger === ':';\n\nexport const isMentionTrigger = (trigger: Trigger): trigger is '@' => trigger === '@';\n\nexport type Trigger = '/' | '@' | ':';\n\nexport type TriggerSettings<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n '/'?: {\n dataProvider: (\n query: CommandResponse<StreamChatGenerics>['name'],\n text: string,\n onReady?: (\n data: CommandResponse<StreamChatGenerics>[],\n q: CommandResponse<StreamChatGenerics>['name'],\n ) => void,\n options?: {\n limit?: number;\n },\n ) => SuggestionCommand<StreamChatGenerics>[];\n output: (entity: CommandResponse<StreamChatGenerics>) => {\n caretPosition: string;\n key: string;\n text: string;\n };\n type: SuggestionComponentType;\n };\n ':'?: {\n dataProvider: (\n query: Emoji['name'],\n _: string,\n onReady?: (data: Emoji[], q: Emoji['name']) => void,\n ) => Emoji[];\n output: (entity: Emoji) => {\n caretPosition: string;\n key: string;\n text: string;\n };\n type: SuggestionComponentType;\n };\n '@'?: {\n callback: (item: SuggestionUser<StreamChatGenerics>) => void;\n dataProvider: (\n query: SuggestionUser<StreamChatGenerics>['name'],\n _: string,\n onReady?: (\n data: SuggestionUser<StreamChatGenerics>[],\n q: SuggestionUser<StreamChatGenerics>['name'],\n ) => void,\n options?: {\n limit?: number;\n mentionAllAppUsersEnabled?: boolean;\n mentionAllAppUsersQuery?: MentionAllAppUsersQuery<StreamChatGenerics>;\n },\n ) => SuggestionUser<StreamChatGenerics>[] | Promise<void> | void;\n output: (entity: SuggestionUser<StreamChatGenerics>) => {\n caretPosition: string;\n key: string;\n text: string;\n };\n type: SuggestionComponentType;\n };\n};\n\nexport type ACITriggerSettingsParams<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n channel: Channel<StreamChatGenerics>;\n client: StreamChat<StreamChatGenerics>;\n onMentionSelectItem: (item: SuggestionUser<StreamChatGenerics>) => void;\n};\n\nexport type QueryUsersFunction<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = (\n client: StreamChat<StreamChatGenerics>,\n query: SuggestionUser<StreamChatGenerics>['name'],\n onReady?: (users: SuggestionUser<StreamChatGenerics>[]) => void,\n options?: {\n limit?: number;\n mentionAllAppUsersQuery?: MentionAllAppUsersQuery<StreamChatGenerics>;\n },\n) => Promise<void>;\n\nexport type QueryMembersFunction<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = (\n channel: Channel<StreamChatGenerics>,\n query: SuggestionUser<StreamChatGenerics>['name'],\n onReady?: (users: SuggestionUser<StreamChatGenerics>[]) => void,\n options?: {\n limit?: number;\n },\n) => Promise<void>;\n\n/**\n * ACI = AutoCompleteInput\n *\n * DataProvider accepts `onReady` function, which will execute once the data is ready.\n * Another approach would have been to simply return the data from dataProvider and let the\n * component await for it and then execute the required logic. We are going for callback instead\n * of async-await since we have debounce function in dataProvider. Which will delay the execution\n * of api call on trailing end of debounce (lets call it a1) but will return with result of\n * previous call without waiting for a1. So in this case, we want to execute onReady, when trailing\n * end of debounce executes.\n */\nexport const ACITriggerSettings = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>({\n channel,\n client,\n onMentionSelectItem,\n}: ACITriggerSettingsParams<StreamChatGenerics>): TriggerSettings<StreamChatGenerics> => ({\n '/': {\n dataProvider: (query, text, onReady, options = {}) => {\n if (text.indexOf('/') !== 0) return [];\n\n const { limit = defaultAutoCompleteSuggestionsLimit } = options;\n const selectedCommands = !query\n ? getCommands(channel)\n : getCommands(channel).filter((command) => query && command.name?.indexOf(query) !== -1);\n\n // sort alphabetically unless the you're matching the first char\n selectedCommands.sort((a, b) => {\n let nameA = a.name?.toLowerCase() || '';\n let nameB = b.name?.toLowerCase() || '';\n if (query && nameA.indexOf(query) === 0) {\n nameA = `0${nameA}`;\n }\n if (query && nameB.indexOf(query) === 0) {\n nameB = `0${nameB}`;\n }\n if (nameA < nameB) return -1;\n if (nameA > nameB) return 1;\n\n return 0;\n });\n\n const result = selectedCommands.slice(0, limit);\n\n if (onReady) {\n onReady(result, query);\n }\n\n return result;\n },\n output: (entity) => ({\n caretPosition: 'next',\n key: `${entity.name}`,\n text: `/${entity.name}`,\n }),\n type: 'command',\n },\n ':': {\n dataProvider: (query, _, onReady) => {\n if (!query) return [];\n\n const result = compiledEmojis.emojiArray.reduce((acc, cur) => {\n if (acc.length >= 10) return acc;\n\n if (cur.names.some((name) => name.includes(query))) {\n const emoji = compiledEmojis.emojiLib[cur.name];\n // Since there can be no emojiLib for the current name we need to check for it being undefined\n if (emoji?.skin_variations) {\n acc.push({\n ...emoji,\n name: `${emoji.name}-tone-1`,\n skin_variations: undefined,\n });\n emoji.skin_variations.forEach((tone, index) =>\n acc.push({\n ...emoji,\n name: `${emoji.name}-tone-${index + 2}`,\n skin_variations: undefined,\n unicode: tone,\n }),\n );\n } else if (emoji) {\n acc.push(emoji);\n }\n }\n\n return acc;\n }, [] as Emoji[]);\n\n if (onReady) {\n onReady(result, query);\n }\n\n return result;\n },\n output: (entity) => ({\n caretPosition: 'next',\n key: entity.name,\n text: entity.unicode,\n }),\n type: 'emoji',\n },\n '@': {\n callback: (item) => {\n onMentionSelectItem(item);\n },\n dataProvider: (\n query,\n _,\n onReady,\n options = {\n limit: defaultAutoCompleteSuggestionsLimit,\n mentionAllAppUsersEnabled: false,\n mentionAllAppUsersQuery: defaultMentionAllAppUsersQuery,\n },\n ) => {\n if (options?.mentionAllAppUsersEnabled) {\n return (queryUsersDebounced as DebouncedFunc<QueryUsersFunction<StreamChatGenerics>>)(\n client,\n query,\n (data) => {\n if (onReady) {\n onReady(data, query);\n }\n },\n {\n limit: options.limit,\n mentionAllAppUsersQuery: options.mentionAllAppUsersQuery,\n },\n );\n }\n\n /**\n * By default, we return maximum 100 members via queryChannels api call.\n * Thus it is safe to assume, that if number of members in channel.state is < 100,\n * then all the members are already available on client side and we don't need to\n * make any api call to queryMembers endpoint.\n */\n if (!query || Object.values(channel.state.members).length < 100) {\n const users = getMembersAndWatchers(channel);\n\n const matchingUsers = users.filter((user) => {\n if (!query) return true;\n if (user.name?.toLowerCase().indexOf(query.toLowerCase()) !== -1) {\n return true;\n }\n if (user.id.toLowerCase().indexOf(query.toLowerCase()) !== -1) {\n return true;\n }\n return false;\n });\n\n const data = matchingUsers.slice(0, options?.limit);\n\n if (onReady) {\n onReady(data, query);\n }\n\n return data;\n }\n\n return (queryMembersDebounced as DebouncedFunc<QueryMembersFunction<StreamChatGenerics>>)(\n channel,\n query,\n (data) => {\n if (onReady) {\n onReady(data, query);\n }\n },\n {\n limit: options.limit,\n },\n );\n },\n output: (entity) => ({\n caretPosition: 'next',\n key: entity.id,\n text: `@${entity.name || entity.id}`,\n }),\n type: 'mention',\n },\n});\n\nexport const makeImageCompatibleUrl = (url: string) =>\n (url.indexOf('//') === 0 ? `https:${url}` : url).trim();\n\nexport const getUrlWithoutParams = (url?: string) => {\n if (!url) return url;\n\n const indexOfQuestion = url.indexOf('?');\n if (indexOfQuestion === -1) return url;\n\n return url.substring(0, url.indexOf('?'));\n};\n\nexport const isLocalUrl = (url: string) => url.indexOf('http') !== 0;\n\nexport const generateRandomId = (a = ''): string =>\n a\n ? /* eslint-disable no-bitwise */\n ((Number(a) ^ (Math.random() * 16)) >> (Number(a) / 4)).toString(16)\n : `${1e7}-${1e3}-${4e3}-${8e3}-${1e11}`.replace(/[018]/g, generateRandomId);\n\n/*\n * Returns true if the message text only contains emojis\n */\nexport const hasOnlyEmojis = (text: string) => {\n try {\n // get all emojis in the string\n const emojiOnlyString = [...text.matchAll(EmojiRegex())].join('');\n // remove all spaces from original text\n const originalTextWithNoSpaces = text.replaceAll(/\\s/g, '');\n // check if both are the same\n return (\n emojiOnlyString.length !== 0 && emojiOnlyString.length === originalTextWithNoSpaces.length\n );\n } catch (e) {\n return false;\n }\n};\n\n/**\n * Stringifies a message object\n * @param {FormatMessageResponse<StreamChatGenerics>} message - the message object to be stringified\n * @returns {string} The stringified message\n */\nconst stringifyMessage = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>({\n deleted_at,\n latest_reactions,\n reply_count,\n status,\n type,\n updated_at,\n}: FormatMessageResponse<StreamChatGenerics>): string =>\n `${type}${deleted_at}${\n latest_reactions ? latest_reactions.map(({ type }) => type).join() : ''\n }${reply_count}${status}${updated_at?.toISOString?.() || updated_at}`;\n\n/**\n * Reduces a list of messages to strings that are used in useEffect & useMemo\n * @param {messages} messages - the array of messages to be compared\n * @returns {string} The mapped message string\n */\nexport const reduceMessagesToString = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n messages: FormatMessageResponse<StreamChatGenerics>[],\n): string => messages.map(stringifyMessage).join();\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["_emojiRegex","_interopRequireDefault","require","_debounce","_compiled","FileState","Object","freeze","FINISHED","NOT_SUPPORTED","UPLOAD_FAILED","UPLOADED","UPLOADING","exports","ProgressIndicatorTypes","IN_PROGRESS","INACTIVE","RETRY","MessageStatusTypes","FAILED","RECEIVED","SENDING","getIndicatorTypeForFileState","fileState","enableOfflineSupport","_indicatorMap","indicatorMap","_defineProperty2","isBlockedMessage","message","pattern","type","text","test","isBouncedMessage","moderation_details","undefined","defaultAutoCompleteSuggestionsLimit","defaultMentionAllAppUsersQuery","filters","options","sort","isUserResponse","user","getCommands","channel","_channel$getConfig","getConfig","commands","getMembers","members","state","values","length","filter","member","map","getWatchers","watchers","_toConsumableArray2","getMembersAndWatchers","users","concat","reduce","acc","cur","id","queryMembers","_ref","_asyncToGenerator2","_regenerator","mark","_callee","query","onReady","_options$limit","limit","response","_users","_args","arguments","wrap","_callee$","_context","prev","next","name","$autocomplete","sent","forEach","push","stop","_x","_x2","_x3","apply","queryMembersDebounced","debounce","leading","trailing","queryUsers","_ref2","_callee2","client","_options$limit2","_options$mentionAllAp","mentionAllAppUsersQuery","_users2","_args2","_callee2$","_context2","_extends2","$ne","userID","$or","_x4","_x5","_x6","queryUsersDebounced","isCommandTrigger","trigger","isEmojiTrigger","isMentionTrigger","ACITriggerSettings","_ref3","onMentionSelectItem","dataProvider","indexOf","_options$limit3","selectedCommands","command","_command$name","a","b","_a$name","_b$name","nameA","toLowerCase","nameB","result","slice","output","entity","caretPosition","key","_","compiledEmojis","emojiArray","names","some","includes","emoji","emojiLib","skin_variations","tone","index","unicode","callback","item","mentionAllAppUsersEnabled","data","matchingUsers","_user$name","makeImageCompatibleUrl","url","trim","getUrlWithoutParams","indexOfQuestion","substring","isLocalUrl","generateRandomId","Number","Math","random","toString","replace","hasOnlyEmojis","emojiOnlyString","matchAll","EmojiRegex","join","originalTextWithNoSpaces","replaceAll","e","stringifyMessage","_ref4","deleted_at","latest_reactions","reply_count","status","updated_at","_ref5","toISOString","reduceMessagesToString","messages"],"sources":["utils.ts"],"sourcesContent":["import type React from 'react';\n\nimport EmojiRegex from 'emoji-regex';\nimport type { DebouncedFunc } from 'lodash';\nimport debounce from 'lodash/debounce';\nimport type {\n Channel,\n ChannelMemberAPIResponse,\n ChannelMemberResponse,\n CommandResponse,\n FormatMessageResponse,\n StreamChat,\n UserResponse,\n} from 'stream-chat';\n\nimport type { MessageType } from '../components/MessageList/hooks/useMessageList';\nimport type { MentionAllAppUsersQuery } from '../contexts/messageInputContext/MessageInputContext';\nimport type {\n SuggestionCommand,\n SuggestionComponentType,\n SuggestionUser,\n} from '../contexts/suggestionsContext/SuggestionsContext';\nimport { compiledEmojis, Emoji } from '../emoji-data/compiled';\nimport type { IconProps } from '../icons/utils/base';\nimport type { TableRowJoinedUser } from '../store/types';\nimport type { DefaultStreamChatGenerics, ValueOf } from '../types/types';\n\nexport type ReactionData = {\n Icon: React.FC<IconProps>;\n type: string;\n};\n\nexport const FileState = Object.freeze({\n // finished and uploaded state are the same thing. First is set on frontend,\n // while later is set on backend side\n // TODO: Unify both of them\n FINISHED: 'finished',\n NOT_SUPPORTED: 'not_supported',\n UPLOAD_FAILED: 'upload_failed',\n UPLOADED: 'uploaded',\n UPLOADING: 'uploading',\n});\n\nexport const ProgressIndicatorTypes: {\n IN_PROGRESS: 'in_progress';\n INACTIVE: 'inactive';\n NOT_SUPPORTED: 'not_supported';\n RETRY: 'retry';\n} = Object.freeze({\n IN_PROGRESS: 'in_progress',\n INACTIVE: 'inactive',\n NOT_SUPPORTED: 'not_supported',\n RETRY: 'retry',\n});\n\nexport const MessageStatusTypes = {\n FAILED: 'failed',\n RECEIVED: 'received',\n SENDING: 'sending',\n};\n\nexport type FileStateValue = typeof FileState[keyof typeof FileState];\n\ntype Progress = ValueOf<typeof ProgressIndicatorTypes>;\ntype IndicatorStatesMap = Record<ValueOf<typeof FileState>, Progress | null>;\n\nexport const getIndicatorTypeForFileState = (\n fileState: FileStateValue,\n enableOfflineSupport: boolean,\n): Progress | null => {\n const indicatorMap: IndicatorStatesMap = {\n [FileState.UPLOADING]: enableOfflineSupport\n ? ProgressIndicatorTypes.INACTIVE\n : ProgressIndicatorTypes.IN_PROGRESS,\n // If offline support is disabled, then there is no need\n [FileState.UPLOAD_FAILED]: enableOfflineSupport\n ? ProgressIndicatorTypes.INACTIVE\n : ProgressIndicatorTypes.RETRY,\n [FileState.NOT_SUPPORTED]: ProgressIndicatorTypes.NOT_SUPPORTED,\n [FileState.UPLOADED]: ProgressIndicatorTypes.INACTIVE,\n [FileState.FINISHED]: ProgressIndicatorTypes.INACTIVE,\n };\n\n return indicatorMap[fileState];\n};\n\n/**\n * Utility to check if the message is a Blocked message.\n * @param message\n * @returns boolean\n */\nexport const isBlockedMessage = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n message: MessageType<StreamChatGenerics> | TableRowJoinedUser<'messages'>,\n) => {\n // The only indicator for the blocked message is its message type is error and that the message text contains \"Message was blocked by moderation policies\".\n const pattern = /\\bMessage was blocked by moderation policies\\b/;\n return message.type === 'error' && message.text && pattern.test(message.text);\n};\n\n/**\n * Utility to check if the message is a Bounced message.\n * @param message\n * @returns boolean\n */\nexport const isBouncedMessage = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n message: MessageType<StreamChatGenerics>,\n) => message.type === 'error' && message.moderation_details !== undefined;\n\nconst defaultAutoCompleteSuggestionsLimit = 10;\nconst defaultMentionAllAppUsersQuery = {\n filters: {},\n options: {},\n sort: {},\n};\n\nconst isUserResponse = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n user: SuggestionUser<StreamChatGenerics> | undefined,\n): user is SuggestionUser<StreamChatGenerics> =>\n (user as SuggestionUser<StreamChatGenerics>) !== undefined;\n\nconst getCommands = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n channel: Channel<StreamChatGenerics>,\n) => channel.getConfig()?.commands || [];\n\nconst getMembers = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n channel: Channel<StreamChatGenerics>,\n) => {\n const members = channel.state.members;\n\n return Object.values(members).length\n ? (\n Object.values(members).filter((member) => member.user) as Array<\n ChannelMemberResponse<StreamChatGenerics> & { user: UserResponse<StreamChatGenerics> }\n >\n ).map((member) => member.user)\n : [];\n};\n\nconst getWatchers = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n channel: Channel<StreamChatGenerics>,\n) => {\n const watchers = channel.state.watchers;\n return Object.values(watchers).length ? [...Object.values(watchers)] : [];\n};\n\nconst getMembersAndWatchers = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n channel: Channel<StreamChatGenerics>,\n) => {\n const users = [...getMembers(channel), ...getWatchers(channel)];\n\n return Object.values(\n users.reduce((acc, cur) => {\n if (!acc[cur.id]) {\n acc[cur.id] = cur;\n }\n\n return acc;\n }, {} as { [key: string]: SuggestionUser<StreamChatGenerics> }),\n );\n};\n\nconst queryMembers = async <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n channel: Channel<StreamChatGenerics>,\n query: SuggestionUser<StreamChatGenerics>['name'],\n onReady?: (users: SuggestionUser<StreamChatGenerics>[]) => void,\n options: {\n limit?: number;\n } = {},\n): Promise<void> => {\n const { limit = defaultAutoCompleteSuggestionsLimit } = options;\n\n if (typeof query === 'string') {\n const response = (await (channel as unknown as Channel).queryMembers(\n {\n name: { $autocomplete: query },\n },\n {},\n { limit },\n )) as ChannelMemberAPIResponse<StreamChatGenerics>;\n\n const users: SuggestionUser<StreamChatGenerics>[] = [];\n response.members.forEach((member) => isUserResponse(member.user) && users.push(member.user));\n if (onReady && users) {\n onReady(users);\n }\n }\n};\n\nexport const queryMembersDebounced = debounce(queryMembers, 200, {\n leading: false,\n trailing: true,\n});\n\nconst queryUsers = async <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n client: StreamChat<StreamChatGenerics>,\n query: SuggestionUser<StreamChatGenerics>['name'],\n onReady?: (users: SuggestionUser<StreamChatGenerics>[]) => void,\n options: {\n limit?: number;\n mentionAllAppUsersQuery?: MentionAllAppUsersQuery<StreamChatGenerics>;\n } = {},\n): Promise<void> => {\n if (typeof query === 'string') {\n const {\n limit = defaultAutoCompleteSuggestionsLimit,\n mentionAllAppUsersQuery = defaultMentionAllAppUsersQuery,\n } = options;\n const filters = {\n id: { $ne: client.userID },\n ...mentionAllAppUsersQuery?.filters,\n };\n\n if (query) {\n // @ts-ignore\n filters.$or = [{ id: { $autocomplete: query } }, { name: { $autocomplete: query } }];\n }\n\n const response = await client.queryUsers(\n // @ts-ignore\n filters,\n { id: 1, ...mentionAllAppUsersQuery?.sort },\n { limit, ...mentionAllAppUsersQuery?.options },\n );\n const users: SuggestionUser<StreamChatGenerics>[] = [];\n response.users.forEach((user) => isUserResponse(user) && users.push(user));\n if (onReady && users) {\n onReady(users);\n }\n }\n};\n\nexport const queryUsersDebounced = debounce(queryUsers, 200, {\n leading: false,\n trailing: true,\n});\n\nexport const isCommandTrigger = (trigger: Trigger): trigger is '/' => trigger === '/';\n\nexport const isEmojiTrigger = (trigger: Trigger): trigger is ':' => trigger === ':';\n\nexport const isMentionTrigger = (trigger: Trigger): trigger is '@' => trigger === '@';\n\nexport type Trigger = '/' | '@' | ':';\n\nexport type TriggerSettings<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n '/'?: {\n dataProvider: (\n query: CommandResponse<StreamChatGenerics>['name'],\n text: string,\n onReady?: (\n data: CommandResponse<StreamChatGenerics>[],\n q: CommandResponse<StreamChatGenerics>['name'],\n ) => void,\n options?: {\n limit?: number;\n },\n ) => SuggestionCommand<StreamChatGenerics>[];\n output: (entity: CommandResponse<StreamChatGenerics>) => {\n caretPosition: string;\n key: string;\n text: string;\n };\n type: SuggestionComponentType;\n };\n ':'?: {\n dataProvider: (\n query: Emoji['name'],\n _: string,\n onReady?: (data: Emoji[], q: Emoji['name']) => void,\n ) => Emoji[];\n output: (entity: Emoji) => {\n caretPosition: string;\n key: string;\n text: string;\n };\n type: SuggestionComponentType;\n };\n '@'?: {\n callback: (item: SuggestionUser<StreamChatGenerics>) => void;\n dataProvider: (\n query: SuggestionUser<StreamChatGenerics>['name'],\n _: string,\n onReady?: (\n data: SuggestionUser<StreamChatGenerics>[],\n q: SuggestionUser<StreamChatGenerics>['name'],\n ) => void,\n options?: {\n limit?: number;\n mentionAllAppUsersEnabled?: boolean;\n mentionAllAppUsersQuery?: MentionAllAppUsersQuery<StreamChatGenerics>;\n },\n ) => SuggestionUser<StreamChatGenerics>[] | Promise<void> | void;\n output: (entity: SuggestionUser<StreamChatGenerics>) => {\n caretPosition: string;\n key: string;\n text: string;\n };\n type: SuggestionComponentType;\n };\n};\n\nexport type ACITriggerSettingsParams<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n channel: Channel<StreamChatGenerics>;\n client: StreamChat<StreamChatGenerics>;\n onMentionSelectItem: (item: SuggestionUser<StreamChatGenerics>) => void;\n};\n\nexport type QueryUsersFunction<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = (\n client: StreamChat<StreamChatGenerics>,\n query: SuggestionUser<StreamChatGenerics>['name'],\n onReady?: (users: SuggestionUser<StreamChatGenerics>[]) => void,\n options?: {\n limit?: number;\n mentionAllAppUsersQuery?: MentionAllAppUsersQuery<StreamChatGenerics>;\n },\n) => Promise<void>;\n\nexport type QueryMembersFunction<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = (\n channel: Channel<StreamChatGenerics>,\n query: SuggestionUser<StreamChatGenerics>['name'],\n onReady?: (users: SuggestionUser<StreamChatGenerics>[]) => void,\n options?: {\n limit?: number;\n },\n) => Promise<void>;\n\n/**\n * ACI = AutoCompleteInput\n *\n * DataProvider accepts `onReady` function, which will execute once the data is ready.\n * Another approach would have been to simply return the data from dataProvider and let the\n * component await for it and then execute the required logic. We are going for callback instead\n * of async-await since we have debounce function in dataProvider. Which will delay the execution\n * of api call on trailing end of debounce (lets call it a1) but will return with result of\n * previous call without waiting for a1. So in this case, we want to execute onReady, when trailing\n * end of debounce executes.\n */\nexport const ACITriggerSettings = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>({\n channel,\n client,\n onMentionSelectItem,\n}: ACITriggerSettingsParams<StreamChatGenerics>): TriggerSettings<StreamChatGenerics> => ({\n '/': {\n dataProvider: (query, text, onReady, options = {}) => {\n if (text.indexOf('/') !== 0) return [];\n\n const { limit = defaultAutoCompleteSuggestionsLimit } = options;\n const selectedCommands = !query\n ? getCommands(channel)\n : getCommands(channel).filter((command) => query && command.name?.indexOf(query) !== -1);\n\n // sort alphabetically unless the you're matching the first char\n selectedCommands.sort((a, b) => {\n let nameA = a.name?.toLowerCase() || '';\n let nameB = b.name?.toLowerCase() || '';\n if (query && nameA.indexOf(query) === 0) {\n nameA = `0${nameA}`;\n }\n if (query && nameB.indexOf(query) === 0) {\n nameB = `0${nameB}`;\n }\n if (nameA < nameB) return -1;\n if (nameA > nameB) return 1;\n\n return 0;\n });\n\n const result = selectedCommands.slice(0, limit);\n\n if (onReady) {\n onReady(result, query);\n }\n\n return result;\n },\n output: (entity) => ({\n caretPosition: 'next',\n key: `${entity.name}`,\n text: `/${entity.name}`,\n }),\n type: 'command',\n },\n ':': {\n dataProvider: (query, _, onReady) => {\n if (!query) return [];\n\n const result = compiledEmojis.emojiArray.reduce((acc, cur) => {\n if (acc.length >= 10) return acc;\n\n if (cur.names.some((name) => name.includes(query))) {\n const emoji = compiledEmojis.emojiLib[cur.name];\n // Since there can be no emojiLib for the current name we need to check for it being undefined\n if (emoji?.skin_variations) {\n acc.push({\n ...emoji,\n name: `${emoji.name}-tone-1`,\n skin_variations: undefined,\n });\n emoji.skin_variations.forEach((tone, index) =>\n acc.push({\n ...emoji,\n name: `${emoji.name}-tone-${index + 2}`,\n skin_variations: undefined,\n unicode: tone,\n }),\n );\n } else if (emoji) {\n acc.push(emoji);\n }\n }\n\n return acc;\n }, [] as Emoji[]);\n\n if (onReady) {\n onReady(result, query);\n }\n\n return result;\n },\n output: (entity) => ({\n caretPosition: 'next',\n key: entity.name,\n text: entity.unicode,\n }),\n type: 'emoji',\n },\n '@': {\n callback: (item) => {\n onMentionSelectItem(item);\n },\n dataProvider: (\n query,\n _,\n onReady,\n options = {\n limit: defaultAutoCompleteSuggestionsLimit,\n mentionAllAppUsersEnabled: false,\n mentionAllAppUsersQuery: defaultMentionAllAppUsersQuery,\n },\n ) => {\n if (options?.mentionAllAppUsersEnabled) {\n return (queryUsersDebounced as DebouncedFunc<QueryUsersFunction<StreamChatGenerics>>)(\n client,\n query,\n (data) => {\n if (onReady) {\n onReady(data, query);\n }\n },\n {\n limit: options.limit,\n mentionAllAppUsersQuery: options.mentionAllAppUsersQuery,\n },\n );\n }\n\n /**\n * By default, we return maximum 100 members via queryChannels api call.\n * Thus it is safe to assume, that if number of members in channel.state is < 100,\n * then all the members are already available on client side and we don't need to\n * make any api call to queryMembers endpoint.\n */\n if (!query || Object.values(channel.state.members).length < 100) {\n const users = getMembersAndWatchers(channel);\n\n const matchingUsers = users.filter((user) => {\n if (!query) return true;\n if (user.name?.toLowerCase().indexOf(query.toLowerCase()) !== -1) {\n return true;\n }\n if (user.id.toLowerCase().indexOf(query.toLowerCase()) !== -1) {\n return true;\n }\n return false;\n });\n\n const data = matchingUsers.slice(0, options?.limit);\n\n if (onReady) {\n onReady(data, query);\n }\n\n return data;\n }\n\n return (queryMembersDebounced as DebouncedFunc<QueryMembersFunction<StreamChatGenerics>>)(\n channel,\n query,\n (data) => {\n if (onReady) {\n onReady(data, query);\n }\n },\n {\n limit: options.limit,\n },\n );\n },\n output: (entity) => ({\n caretPosition: 'next',\n key: entity.id,\n text: `@${entity.name || entity.id}`,\n }),\n type: 'mention',\n },\n});\n\nexport const makeImageCompatibleUrl = (url: string) =>\n (url.indexOf('//') === 0 ? `https:${url}` : url).trim();\n\nexport const getUrlWithoutParams = (url?: string) => {\n if (!url) return url;\n\n const indexOfQuestion = url.indexOf('?');\n if (indexOfQuestion === -1) return url;\n\n return url.substring(0, url.indexOf('?'));\n};\n\nexport const isLocalUrl = (url: string) => url.indexOf('http') !== 0;\n\nexport const generateRandomId = (a = ''): string =>\n a\n ? /* eslint-disable no-bitwise */\n ((Number(a) ^ (Math.random() * 16)) >> (Number(a) / 4)).toString(16)\n : `${1e7}-${1e3}-${4e3}-${8e3}-${1e11}`.replace(/[018]/g, generateRandomId);\n\n/*\n * Returns true if the message text only contains emojis\n */\nexport const hasOnlyEmojis = (text: string) => {\n try {\n // get all emojis in the string\n const emojiOnlyString = [...text.matchAll(EmojiRegex())].join('');\n // remove all spaces from original text\n const originalTextWithNoSpaces = text.replaceAll(/\\s/g, '');\n // check if both are the same\n return (\n emojiOnlyString.length !== 0 && emojiOnlyString.length === originalTextWithNoSpaces.length\n );\n } catch (e) {\n return false;\n }\n};\n\n/**\n * Stringifies a message object\n * @param {FormatMessageResponse<StreamChatGenerics>} message - the message object to be stringified\n * @returns {string} The stringified message\n */\nconst stringifyMessage = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>({\n deleted_at,\n latest_reactions,\n reply_count,\n status,\n type,\n updated_at,\n}: FormatMessageResponse<StreamChatGenerics>): string =>\n `${type}${deleted_at}${\n latest_reactions ? latest_reactions.map(({ type }) => type).join() : ''\n }${reply_count}${status}${updated_at?.toISOString?.() || updated_at}`;\n\n/**\n * Reduces a list of messages to strings that are used in useEffect & useMemo\n * @param {messages} messages - the array of messages to be compared\n * @returns {string} The mapped message string\n */\nexport const reduceMessagesToString = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n messages: FormatMessageResponse<StreamChatGenerics>[],\n): string => messages.map(stringifyMessage).join();\n"],"mappings":"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"}
|
package/lib/module/version.json
CHANGED
|
@@ -15,7 +15,7 @@ import type { DefaultStreamChatGenerics } from '../../types/types';
|
|
|
15
15
|
import { ReactionData } from '../../utils/utils';
|
|
16
16
|
import { LoadingErrorProps } from '../Indicators/LoadingErrorIndicator';
|
|
17
17
|
export declare const reactionData: ReactionData[];
|
|
18
|
-
export declare type ChannelPropsWithContext<StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics> = Pick<ChannelContextValue<StreamChatGenerics>, 'channel'> & Partial<Pick<ChannelContextValue<StreamChatGenerics>, 'EmptyStateIndicator' | 'enableMessageGroupingByUser' | 'enforceUniqueReaction' | 'giphyEnabled' | 'hideStickyDateHeader' | 'hideDateSeparators' | 'LoadingIndicator' | 'maxTimeBetweenGroupedMessages' | 'NetworkDownIndicator' | 'StickyHeader'>> & Pick<ChatContextValue<StreamChatGenerics>, 'client' | 'enableOfflineSupport'> & Partial<Omit<InputMessageInputContextValue<StreamChatGenerics>, 'quotedMessage' | 'editing' | 'clearEditingState' | 'clearQuotedMessageState' | 'sendMessage'>> & Partial<Pick<SuggestionsContextValue<StreamChatGenerics>, 'AutoCompleteSuggestionHeader' | 'AutoCompleteSuggestionItem' | 'AutoCompleteSuggestionList'>> & Pick<TranslationContextValue, 't'> & Partial<Pick<PaginatedMessageListContextValue<StreamChatGenerics>, 'messages' | 'loadingMore' | 'loadingMoreRecent'>> & UseChannelStateValue<StreamChatGenerics> & Partial<Pick<MessagesContextValue<StreamChatGenerics>, 'additionalTouchableProps' | 'Attachment' | 'AttachmentActions' | 'AudioAttachment' | 'Card' | 'CardCover' | 'CardFooter' | 'CardHeader' | 'DateHeader' | 'deletedMessagesVisibilityType' | 'disableTypingIndicator' | 'dismissKeyboardOnMessageTouch' | 'FileAttachment' | 'FileAttachmentIcon' | 'FileAttachmentGroup' | 'FlatList' | 'forceAlignMessages' | 'formatDate' | 'Gallery' | 'getMessagesGroupStyles' | 'Giphy' | 'giphyVersion' | 'handleBlock' | 'handleCopy' | 'handleDelete' | 'handleEdit' | 'handleFlag' | 'handleMute' | 'handlePinMessage' | 'handleReaction' | 'handleQuotedReply' | 'handleRetry' | 'handleThreadReply' | 'InlineDateSeparator' | 'InlineUnreadIndicator' | 'isAttachmentEqual' | 'legacyImageViewerSwipeBehaviour' | 'ImageLoadingFailedIndicator' | 'ImageLoadingIndicator' | 'markdownRules' | 'Message' | 'messageActions' | 'MessageAvatar' | 'MessageContent' | 'messageContentOrder' | 'MessageDeleted' | 'MessageError' | 'MessageFooter' | 'MessageHeader' | 'MessageList' | 'MessagePinnedHeader' | 'MessageReplies' | 'MessageRepliesAvatars' | 'MessageSimple' | 'MessageStatus' | 'MessageSystem' | 'MessageText' | 'myMessageTheme' | 'onLongPressMessage' | 'onPressInMessage' | 'onPressMessage' | 'OverlayReactionList' | 'ReactionList' | 'Reply' | 'ScrollToBottomButton' | 'selectReaction' | 'supportedReactions' | 'TypingIndicator' | 'TypingIndicatorContainer' | 'UrlPreview' | 'VideoThumbnail'>> & Partial<Pick<ThreadContextValue<StreamChatGenerics>, 'allowThreadMessagesInChannel' | 'thread'>> & {
|
|
18
|
+
export declare type ChannelPropsWithContext<StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics> = Pick<ChannelContextValue<StreamChatGenerics>, 'channel'> & Partial<Pick<ChannelContextValue<StreamChatGenerics>, 'EmptyStateIndicator' | 'enableMessageGroupingByUser' | 'enforceUniqueReaction' | 'giphyEnabled' | 'hideStickyDateHeader' | 'hideDateSeparators' | 'LoadingIndicator' | 'maxTimeBetweenGroupedMessages' | 'NetworkDownIndicator' | 'StickyHeader'>> & Pick<ChatContextValue<StreamChatGenerics>, 'client' | 'enableOfflineSupport'> & Partial<Omit<InputMessageInputContextValue<StreamChatGenerics>, 'quotedMessage' | 'editing' | 'clearEditingState' | 'clearQuotedMessageState' | 'sendMessage'>> & Partial<Pick<SuggestionsContextValue<StreamChatGenerics>, 'AutoCompleteSuggestionHeader' | 'AutoCompleteSuggestionItem' | 'AutoCompleteSuggestionList'>> & Pick<TranslationContextValue, 't'> & Partial<Pick<PaginatedMessageListContextValue<StreamChatGenerics>, 'messages' | 'loadingMore' | 'loadingMoreRecent'>> & UseChannelStateValue<StreamChatGenerics> & Partial<Pick<MessagesContextValue<StreamChatGenerics>, 'additionalTouchableProps' | 'Attachment' | 'AttachmentActions' | 'AudioAttachment' | 'Card' | 'CardCover' | 'CardFooter' | 'CardHeader' | 'DateHeader' | 'deletedMessagesVisibilityType' | 'disableTypingIndicator' | 'dismissKeyboardOnMessageTouch' | 'FileAttachment' | 'FileAttachmentIcon' | 'FileAttachmentGroup' | 'FlatList' | 'forceAlignMessages' | 'formatDate' | 'Gallery' | 'getMessagesGroupStyles' | 'Giphy' | 'giphyVersion' | 'handleBlock' | 'handleCopy' | 'handleDelete' | 'handleEdit' | 'handleFlag' | 'handleMute' | 'handlePinMessage' | 'handleReaction' | 'handleQuotedReply' | 'handleRetry' | 'handleThreadReply' | 'InlineDateSeparator' | 'InlineUnreadIndicator' | 'isAttachmentEqual' | 'legacyImageViewerSwipeBehaviour' | 'ImageLoadingFailedIndicator' | 'ImageLoadingIndicator' | 'markdownRules' | 'Message' | 'messageActions' | 'MessageAvatar' | 'MessageBounce' | 'MessageContent' | 'messageContentOrder' | 'MessageDeleted' | 'MessageError' | 'MessageFooter' | 'MessageHeader' | 'MessageList' | 'MessagePinnedHeader' | 'MessageReplies' | 'MessageRepliesAvatars' | 'MessageSimple' | 'MessageStatus' | 'MessageSystem' | 'MessageText' | 'myMessageTheme' | 'onLongPressMessage' | 'onPressInMessage' | 'onPressMessage' | 'OverlayReactionList' | 'ReactionList' | 'Reply' | 'ScrollToBottomButton' | 'selectReaction' | 'supportedReactions' | 'TypingIndicator' | 'TypingIndicatorContainer' | 'UrlPreview' | 'VideoThumbnail'>> & Partial<Pick<ThreadContextValue<StreamChatGenerics>, 'allowThreadMessagesInChannel' | 'thread'>> & {
|
|
19
19
|
shouldSyncChannel: boolean;
|
|
20
20
|
/**
|
|
21
21
|
* Additional props passed to keyboard avoiding view
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { MessagesContextValue } from '../../../contexts/messagesContext/MessagesContext';
|
|
2
2
|
import type { DefaultStreamChatGenerics } from '../../../types/types';
|
|
3
|
-
export declare const useCreateMessagesContext: <StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics>({ additionalTouchableProps, Attachment, AttachmentActions, AudioAttachment, Card, CardCover, CardFooter, CardHeader, channelId, DateHeader, deletedMessagesVisibilityType, deleteMessage, deleteReaction, disableTypingIndicator, dismissKeyboardOnMessageTouch, enableMessageGroupingByUser, FileAttachment, FileAttachmentGroup, FileAttachmentIcon, FlatList, forceAlignMessages, formatDate, Gallery, getMessagesGroupStyles, Giphy, giphyVersion, handleBlock, handleCopy, handleDelete, handleEdit, handleFlag, handleMute, handlePinMessage, handleQuotedReply, handleReaction, handleRetry, handleThreadReply, ImageLoadingFailedIndicator, ImageLoadingIndicator, initialScrollToFirstUnreadMessage, InlineDateSeparator, InlineUnreadIndicator, isAttachmentEqual, legacyImageViewerSwipeBehaviour, markdownRules, Message, messageActions, MessageAvatar, MessageContent, messageContentOrder, MessageDeleted, MessageError, MessageFooter, MessageHeader, MessageList, MessagePinnedHeader, MessageReplies, MessageRepliesAvatars, MessageSimple, MessageStatus, MessageSystem, MessageText, myMessageTheme, onLongPressMessage, onPressInMessage, onPressMessage, OverlayReactionList, ReactionList, removeMessage, Reply, retrySendMessage, ScrollToBottomButton, selectReaction, sendReaction, setEditingState, setQuotedMessageState, supportedReactions, targetedMessage, TypingIndicator, TypingIndicatorContainer, updateMessage, UrlPreview, VideoThumbnail, }: MessagesContextValue<StreamChatGenerics> & {
|
|
3
|
+
export declare const useCreateMessagesContext: <StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics>({ additionalTouchableProps, Attachment, AttachmentActions, AudioAttachment, Card, CardCover, CardFooter, CardHeader, channelId, DateHeader, deletedMessagesVisibilityType, deleteMessage, deleteReaction, disableTypingIndicator, dismissKeyboardOnMessageTouch, enableMessageGroupingByUser, FileAttachment, FileAttachmentGroup, FileAttachmentIcon, FlatList, forceAlignMessages, formatDate, Gallery, getMessagesGroupStyles, Giphy, giphyVersion, handleBlock, handleCopy, handleDelete, handleEdit, handleFlag, handleMute, handlePinMessage, handleQuotedReply, handleReaction, handleRetry, handleThreadReply, ImageLoadingFailedIndicator, ImageLoadingIndicator, initialScrollToFirstUnreadMessage, InlineDateSeparator, InlineUnreadIndicator, isAttachmentEqual, legacyImageViewerSwipeBehaviour, markdownRules, Message, messageActions, MessageAvatar, MessageBounce, MessageContent, messageContentOrder, MessageDeleted, MessageError, MessageFooter, MessageHeader, MessageList, MessagePinnedHeader, MessageReplies, MessageRepliesAvatars, MessageSimple, MessageStatus, MessageSystem, MessageText, myMessageTheme, onLongPressMessage, onPressInMessage, onPressMessage, OverlayReactionList, ReactionList, removeMessage, Reply, retrySendMessage, ScrollToBottomButton, selectReaction, sendReaction, setEditingState, setQuotedMessageState, supportedReactions, targetedMessage, TypingIndicator, TypingIndicatorContainer, updateMessage, UrlPreview, VideoThumbnail, }: MessagesContextValue<StreamChatGenerics> & {
|
|
4
4
|
/**
|
|
5
5
|
* To ensure we allow re-render, when channel is changed
|
|
6
6
|
*/
|
|
@@ -53,7 +53,7 @@ export declare type MessageActionHandlers = {
|
|
|
53
53
|
toggleMuteUser: () => Promise<void>;
|
|
54
54
|
toggleReaction: (reactionType: string) => Promise<void>;
|
|
55
55
|
};
|
|
56
|
-
export declare type MessagePropsWithContext<StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics> = Pick<ChannelContextValue<StreamChatGenerics>, 'channel' | 'disabled' | 'enforceUniqueReaction' | 'members'> & Pick<KeyboardContextValue, 'dismissKeyboard'> & Partial<Omit<MessageContextValue<StreamChatGenerics>, 'groupStyles' | 'message'>> & Pick<MessageContextValue<StreamChatGenerics>, 'groupStyles' | 'message'> & Pick<MessagesContextValue<StreamChatGenerics>, 'sendReaction' | 'deleteMessage' | 'dismissKeyboardOnMessageTouch' | 'forceAlignMessages' | 'handleBlock' | 'handleCopy' | 'handleDelete' | 'handleEdit' | 'handleFlag' | 'handleMute' | 'handlePinMessage' | 'handleQuotedReply' | 'handleReaction' | 'handleRetry' | 'handleThreadReply' | 'isAttachmentEqual' | 'messageActions' | 'messageContentOrder' | 'MessageSimple' | 'onLongPressMessage' | 'onPressInMessage' | 'onPressMessage' | 'OverlayReactionList' | 'removeMessage' | 'deleteReaction' | 'retrySendMessage' | 'selectReaction' | 'setEditingState' | 'setQuotedMessageState' | 'supportedReactions' | 'updateMessage'> & Pick<MessageOverlayContextValue<StreamChatGenerics>, 'setData'> & Pick<OverlayContextValue, 'setOverlay'> & Pick<ThreadContextValue<StreamChatGenerics>, 'openThread'> & Pick<TranslationContextValue, 't'> & {
|
|
56
|
+
export declare type MessagePropsWithContext<StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics> = Pick<ChannelContextValue<StreamChatGenerics>, 'channel' | 'disabled' | 'enforceUniqueReaction' | 'members'> & Pick<KeyboardContextValue, 'dismissKeyboard'> & Partial<Omit<MessageContextValue<StreamChatGenerics>, 'groupStyles' | 'message'>> & Pick<MessageContextValue<StreamChatGenerics>, 'groupStyles' | 'message'> & Pick<MessagesContextValue<StreamChatGenerics>, 'sendReaction' | 'deleteMessage' | 'dismissKeyboardOnMessageTouch' | 'forceAlignMessages' | 'handleBlock' | 'handleCopy' | 'handleDelete' | 'handleEdit' | 'handleFlag' | 'handleMute' | 'handlePinMessage' | 'handleQuotedReply' | 'handleReaction' | 'handleRetry' | 'handleThreadReply' | 'isAttachmentEqual' | 'messageActions' | 'messageContentOrder' | 'MessageBounce' | 'MessageSimple' | 'onLongPressMessage' | 'onPressInMessage' | 'onPressMessage' | 'OverlayReactionList' | 'removeMessage' | 'deleteReaction' | 'retrySendMessage' | 'selectReaction' | 'setEditingState' | 'setQuotedMessageState' | 'supportedReactions' | 'updateMessage'> & Pick<MessageOverlayContextValue<StreamChatGenerics>, 'setData'> & Pick<OverlayContextValue, 'setOverlay'> & Pick<ThreadContextValue<StreamChatGenerics>, 'openThread'> & Pick<TranslationContextValue, 't'> & {
|
|
57
57
|
chatContext: ChatContextValue<StreamChatGenerics>;
|
|
58
58
|
messagesContext: MessagesContextValue<StreamChatGenerics>;
|
|
59
59
|
/**
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { MessageContextValue } from '../../../contexts/messageContext/MessageContext';
|
|
3
|
+
import { MessagesContextValue } from '../../../contexts/messagesContext/MessagesContext';
|
|
4
|
+
import type { DefaultStreamChatGenerics } from '../../../types/types';
|
|
5
|
+
export declare type MessageBouncePropsWithContext<StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics> = Pick<MessagesContextValue<StreamChatGenerics>, 'setEditingState' | 'removeMessage' | 'retrySendMessage'> & Pick<MessageContextValue<StreamChatGenerics>, 'message'> & {
|
|
6
|
+
setIsBounceDialogOpen: React.Dispatch<React.SetStateAction<boolean>>;
|
|
7
|
+
};
|
|
8
|
+
export declare const MessageBounceWithContext: <StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics>(props: MessageBouncePropsWithContext<StreamChatGenerics>) => JSX.Element;
|
|
9
|
+
export declare type MessageBounceProps<StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics> = Partial<MessageBouncePropsWithContext<StreamChatGenerics>> & {
|
|
10
|
+
setIsBounceDialogOpen: React.Dispatch<React.SetStateAction<boolean>>;
|
|
11
|
+
};
|
|
12
|
+
export declare const MessageBounce: <StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics>(props: MessageBounceProps<StreamChatGenerics>) => JSX.Element;
|
|
@@ -6,6 +6,7 @@ export declare const getReadStates: <StreamChatGenerics extends DefaultStreamCha
|
|
|
6
6
|
last_read: Date;
|
|
7
7
|
unread_messages: number;
|
|
8
8
|
user: import("stream-chat").UserResponse<StreamChatGenerics>;
|
|
9
|
+
first_unread_message_id?: string | undefined;
|
|
9
10
|
last_read_message_id?: string | undefined;
|
|
10
11
|
};
|
|
11
12
|
} | undefined) => {
|
|
@@ -85,6 +85,7 @@ export * from './Message/hooks/useMessageActions';
|
|
|
85
85
|
export * from './Message/hooks/useMessageActionHandlers';
|
|
86
86
|
export * from './Message/Message';
|
|
87
87
|
export * from './Message/MessageSimple/MessageAvatar';
|
|
88
|
+
export * from './Message/MessageSimple/MessageBounce';
|
|
88
89
|
export * from './Message/MessageSimple/MessageContent';
|
|
89
90
|
export * from './Message/MessageSimple/MessageDeleted';
|
|
90
91
|
export * from './Message/MessageSimple/MessageError';
|
|
@@ -172,7 +172,6 @@ export declare type InputMessageInputContextValue<StreamChatGenerics extends Def
|
|
|
172
172
|
* **default** [CooldownTimer](https://github.com/GetStream/stream-chat-react-native/blob/main/package/src/components/MessageInput/CooldownTimer.tsx)
|
|
173
173
|
*/
|
|
174
174
|
CooldownTimer: React.ComponentType<CooldownTimerProps>;
|
|
175
|
-
editing: boolean | MessageType<StreamChatGenerics>;
|
|
176
175
|
editMessage: StreamChat<StreamChatGenerics>['updateMessage'];
|
|
177
176
|
/**
|
|
178
177
|
* Custom UI component for FileUploadPreview.
|
|
@@ -266,6 +265,11 @@ export declare type InputMessageInputContextValue<StreamChatGenerics extends Def
|
|
|
266
265
|
name?: string;
|
|
267
266
|
uri?: string;
|
|
268
267
|
}, channel: ChannelContextValue<StreamChatGenerics>['channel']) => Promise<SendFileAPIResponse>;
|
|
268
|
+
/**
|
|
269
|
+
* Variable that tracks the editing state.
|
|
270
|
+
* It is defined with message type if the editing state is true, else its undefined.
|
|
271
|
+
*/
|
|
272
|
+
editing?: MessageType<StreamChatGenerics>;
|
|
269
273
|
/** Initial value to set on input */
|
|
270
274
|
initialValue?: string;
|
|
271
275
|
/**
|
|
@@ -320,4 +324,4 @@ export declare const useMessageInputContext: <StreamChatGenerics extends Default
|
|
|
320
324
|
* typing is desired while using the HOC withMessageInputContext the Props for the
|
|
321
325
|
* wrapped component must be provided as the first generic.
|
|
322
326
|
*/
|
|
323
|
-
export declare const withMessageInputContext: <P extends UnknownType, StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics>(Component: React.ComponentType<P>) => React.FC<Omit<P, "numberOfLines" | "maxNumberOfFiles" | "compressImageQuality" | "setQuotedMessageState" | "AttachButton" | "clearEditingState" | "clearQuotedMessageState" | "CommandsButton" | "CooldownTimer" | "
|
|
327
|
+
export declare const withMessageInputContext: <P extends UnknownType, StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics>(Component: React.ComponentType<P>) => React.FC<Omit<P, "numberOfLines" | "maxNumberOfFiles" | "compressImageQuality" | "setQuotedMessageState" | "AttachButton" | "clearEditingState" | "clearQuotedMessageState" | "CommandsButton" | "CooldownTimer" | "editMessage" | "FileUploadPreview" | "hasCommands" | "hasFilePicker" | "hasImagePicker" | "ImageUploadPreview" | "InputEditingStateHeader" | "InputGiphySearch" | "InputReplyStateHeader" | "MoreOptionsButton" | "quotedMessage" | "SendButton" | "sendImageAsync" | "ShowThreadMessageInChannelButton" | "UploadProgressIndicator" | "additionalTextInputProps" | "autoCompleteSuggestionsLimit" | "autoCompleteTriggerSettings" | "doDocUploadRequest" | "doImageUploadRequest" | "editing" | "initialValue" | "Input" | "InputButtons" | "maxMessageLength" | "mentionAllAppUsersEnabled" | "mentionAllAppUsersQuery" | "onChangeText" | "SendMessageDisallowedIndicator" | "setInputRef" | keyof LocalMessageInputContext<StreamChatGenerics>>>;
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
2
|
import type { DefaultStreamChatGenerics, FileUpload, ImageUpload } from '../../../types/types';
|
|
3
3
|
import type { MessageInputContextValue } from '../MessageInputContext';
|
|
4
|
-
export declare const
|
|
5
|
-
export declare const useMessageDetailsForState: <StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics>(message: boolean | import("../../..").MessageType<StreamChatGenerics>, initialValue?: string | undefined) => {
|
|
4
|
+
export declare const useMessageDetailsForState: <StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics>(message: import("../../..").MessageType<StreamChatGenerics> | undefined, initialValue?: string | undefined) => {
|
|
6
5
|
fileUploads: FileUpload[];
|
|
7
6
|
imageUploads: ImageUpload[];
|
|
8
7
|
mentionedUsers: string[];
|
|
@@ -16,6 +16,7 @@ import type { GiphyProps } from '../../components/Attachment/Giphy';
|
|
|
16
16
|
import type { VideoThumbnailProps } from '../../components/Attachment/VideoThumbnail';
|
|
17
17
|
import type { MessageProps, MessageTouchableHandlerPayload } from '../../components/Message/Message';
|
|
18
18
|
import type { MessageAvatarProps } from '../../components/Message/MessageSimple/MessageAvatar';
|
|
19
|
+
import type { MessageBounceProps } from '../../components/Message/MessageSimple/MessageBounce';
|
|
19
20
|
import type { MessageContentProps } from '../../components/Message/MessageSimple/MessageContent';
|
|
20
21
|
import type { MessageDeletedProps } from '../../components/Message/MessageSimple/MessageDeleted';
|
|
21
22
|
import type { MessageErrorProps } from '../../components/Message/MessageSimple/MessageError';
|
|
@@ -134,6 +135,10 @@ export declare type MessagesContextValue<StreamChatGenerics extends DefaultStrea
|
|
|
134
135
|
* Defaults to: [MessageAvatar](https://github.com/GetStream/stream-chat-react-native/blob/main/package/src/components/Message/MessageSimple/MessageAvatar.tsx)
|
|
135
136
|
**/
|
|
136
137
|
MessageAvatar: React.ComponentType<MessageAvatarProps<StreamChatGenerics>>;
|
|
138
|
+
/**
|
|
139
|
+
* UI Component for MessageBounce
|
|
140
|
+
*/
|
|
141
|
+
MessageBounce: React.ComponentType<MessageBounceProps<StreamChatGenerics>>;
|
|
137
142
|
/**
|
|
138
143
|
* UI component for MessageContent
|
|
139
144
|
* Defaults to: [MessageContent](https://github.com/GetStream/stream-chat-react-native/blob/main/package/src/components/Message/MessageSimple/MessageContent.tsx)
|
|
@@ -205,14 +210,14 @@ export declare type MessagesContextValue<StreamChatGenerics extends DefaultStrea
|
|
|
205
210
|
/**
|
|
206
211
|
* Override the api request for retry message functionality.
|
|
207
212
|
*/
|
|
208
|
-
retrySendMessage: (message:
|
|
213
|
+
retrySendMessage: (message: MessageType<StreamChatGenerics>) => Promise<void>;
|
|
209
214
|
/**
|
|
210
215
|
* UI component for ScrollToBottomButton
|
|
211
216
|
* Defaults to: [ScrollToBottomButton](https://getstream.io/chat/docs/sdk/reactnative/ui-components/scroll-to-bottom-button/)
|
|
212
217
|
*/
|
|
213
218
|
ScrollToBottomButton: React.ComponentType<ScrollToBottomButtonProps>;
|
|
214
219
|
sendReaction: (type: string, messageId: string) => Promise<void>;
|
|
215
|
-
setEditingState: (message
|
|
220
|
+
setEditingState: (message?: MessageType<StreamChatGenerics>) => void;
|
|
216
221
|
setQuotedMessageState: (message: MessageType<StreamChatGenerics> | boolean) => void;
|
|
217
222
|
supportedReactions: ReactionData[];
|
|
218
223
|
/**
|
|
@@ -5,9 +5,11 @@
|
|
|
5
5
|
"Allow camera access in device settings": "Allow camera access in device settings",
|
|
6
6
|
"Also send to channel": "Also send to channel",
|
|
7
7
|
"Are you sure you want to permanently delete this message?": "Are you sure you want to permanently delete this message?",
|
|
8
|
+
"Are you sure?": "Are you sure?",
|
|
8
9
|
"Block User": "Block User",
|
|
9
10
|
"Cancel": "Cancel",
|
|
10
11
|
"Cannot Flag Message": "Cannot Flag Message",
|
|
12
|
+
"Consider how your comment might make others feel and be sure to follow our Community Guidelines": "Consider how your comment might make others feel and be sure to follow our Community Guidelines",
|
|
11
13
|
"Copy Message": "Copy Message",
|
|
12
14
|
"Delete": "Delete",
|
|
13
15
|
"Delete Message": "Delete Message",
|
|
@@ -54,6 +56,7 @@
|
|
|
54
56
|
"Resend": "Resend",
|
|
55
57
|
"Search GIFs": "Search GIFs",
|
|
56
58
|
"Select More Photos": "Select More Photos",
|
|
59
|
+
"Send Anyway": "Send Anyway",
|
|
57
60
|
"Send a message": "Send a message",
|
|
58
61
|
"Sending links is not allowed in this conversation": "Sending links is not allowed in this conversation",
|
|
59
62
|
"Slow mode ON": "Slow mode ON",
|
|
@@ -73,5 +73,8 @@
|
|
|
73
73
|
"How about sending your first message to a friend?": "¿Qué tal enviar tu primer mensaje a un amigo?",
|
|
74
74
|
"Allow camera access in device settings": "Permitir el acceso a la cámara en la configuración del dispositivo",
|
|
75
75
|
"Device camera is used to take photos or videos.": "La cámara del dispositivo se utiliza para tomar fotografías o vídeos.",
|
|
76
|
-
"Open Settings": "Configuración abierta"
|
|
76
|
+
"Open Settings": "Configuración abierta",
|
|
77
|
+
"Send Anyway": "Enviar de todos modos",
|
|
78
|
+
"Are you sure?": "¿Estás seguro?",
|
|
79
|
+
"Consider how your comment might make others feel and be sure to follow our Community Guidelines": "Considera cómo tu comentario podría hacer sentir a los demás y asegúrate de seguir nuestras Normas de la Comunidad"
|
|
77
80
|
}
|